diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/edit.vue b/src/views/tested/MeasurementPlan/plan/components/edit.vue
index c956592..90ef232 100644
--- a/src/views/tested/MeasurementPlan/plan/components/edit.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/edit.vue
@@ -10,6 +10,9 @@
import useUserStore from '@/store/modules/user'
import { SCHEDULE } from '@/utils/scheduleDict'
import { delTextBtn, editBtn, submitBtn } from '@/utils/applyBtns'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
@@ -36,11 +39,13 @@
approvalStatus: '', // 审批状态
createDeptId: '', // 创建单位id
createDeptName: '', // 创建单位名称
+ createCompanyName: '',
+ createCompanyId: '',
createTime: '', // 创建时间
createUserId: '', // 创建人id
createUserName: '', // 创建人姓名
decisionItem: '', // 可选决策项
- equipmentIds: [], // 关联设备id
+ relationList: [], // 关联设备id
id: '',
month: 0, // month
planCategory: '0', // 计划分类(字典值,原始/追加)
@@ -58,24 +63,60 @@
// planCategory: [{ required: true, message: '计划分类必选', trigger: ['blur', 'change'] }],
season: [{ required: true, message: '季度必填', trigger: ['blur', 'change'] }],
month: [{ required: true, message: '月份称必填', trigger: ['blur', 'change'] }],
+ createDeptId: [{ required: true, message: '部门必选', trigger: ['blur', 'change'] }],
+ createCompanyId: [{ required: true, message: '单位必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const processId = ref()
const disabledProcess = ref(false)
-const initDialog = () => {
+const companyList = ref([]) // 单位列表
+const deptList = ref([]) // 部门列表
+const isAdmin = ref(false) // 是否顶级单位
+const flag = ref(true)
+const initDialog = async () => {
dialogStatus.value = $route.params.type as string
ruleFormRef.value?.resetFields()
+ const fetchCommpany = async () => {
+ flag.value = true
+ // 获取单位
+ const res = await getUserDept()
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ isAdmin.value = true
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ isAdmin.value = false
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ ruleForm.value.createCompanyId = res.data.id
+ ruleForm.value.createCompanyName = res.data.fullName
+ if ($route.path.includes('create')) {
+ ruleForm.value.createDeptId = userStore.deptId
+ }
+ }
+ setTimeout(() => {
+ flag.value = false
+ })
+ }
if ($route.params.type === 'create') {
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ fetchCommpany()
ruleForm.value.planType = typeMap[$route.query.category as string]
typeFlag.value = typeMap[$route.query.category as string]
ruleForm.value.year = String(currentYear.value)
if ($route.query.category as string === 'year') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
ruleForm.value.planType = '0'
}
}
@@ -88,6 +129,7 @@
if (data.approvalStatusName === '草稿箱') {
disabledProcess.value = true
}
+ await fetchCommpany()
// 判断是否追加计划
if ($route.query.append) {
disabledProcess.value = true
@@ -96,24 +138,38 @@
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ await fetchCommpany()
if (typeFlag.value === '0') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
}
return
}
// 基本信息
ruleForm.value = {
...data,
- equipmentIds: [],
+ relationList: [],
}
// 获取计划列表
getInfoList(data.id, '').then((res) => {
- ruleForm.value.equipmentIds = res.data
+ ruleForm.value.relationList = res.data
})
}
}
+watch(() => ruleForm.value.createCompanyId, (newVal) => {
+ if (!flag) {
+ ruleForm.value.createDeptId = ''
+ }
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 获取计划分类列表
const planTypeList = ref()
const fetchTypeList = () => {
@@ -149,15 +205,15 @@
},
).then((_res) => {
disabledSave.value = true
- if ($route.query.category as string === 'season' || typeFlag.value === '1') {
- ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
- ruleForm.value.planType = '1'
- }
- else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
- ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
- ruleForm.value.planType = '2'
- }
- ruleForm.value.equipmentIds = tableRef.value.list.map((item: any) => item.equipmentId)
+ // if ($route.query.category as string === 'season' || typeFlag.value === '1') {
+ // ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
+ // ruleForm.value.planType = '1'
+ // }
+ // else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
+ // ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
+ // ruleForm.value.planType = '2'
+ // }
+ ruleForm.value.relationList = tableRef.value.list
// console.log(tableRef.value.list, 'tableRef.value.list')
if (submitId.value) {
ruleForm.value.id = submitId.value
@@ -178,7 +234,7 @@
}).catch(() => {
disabledSave.value = false
})
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
}
else {
@@ -206,7 +262,7 @@
ElMessage.success('已提交')
close()
}).catch((_err) => {
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
})
}
@@ -329,16 +385,16 @@
-
+
-
+
-
+
@@ -350,8 +406,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -377,8 +449,8 @@
-
-
+
+
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/edit.vue b/src/views/tested/MeasurementPlan/plan/components/edit.vue
index c956592..90ef232 100644
--- a/src/views/tested/MeasurementPlan/plan/components/edit.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/edit.vue
@@ -10,6 +10,9 @@
import useUserStore from '@/store/modules/user'
import { SCHEDULE } from '@/utils/scheduleDict'
import { delTextBtn, editBtn, submitBtn } from '@/utils/applyBtns'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
@@ -36,11 +39,13 @@
approvalStatus: '', // 审批状态
createDeptId: '', // 创建单位id
createDeptName: '', // 创建单位名称
+ createCompanyName: '',
+ createCompanyId: '',
createTime: '', // 创建时间
createUserId: '', // 创建人id
createUserName: '', // 创建人姓名
decisionItem: '', // 可选决策项
- equipmentIds: [], // 关联设备id
+ relationList: [], // 关联设备id
id: '',
month: 0, // month
planCategory: '0', // 计划分类(字典值,原始/追加)
@@ -58,24 +63,60 @@
// planCategory: [{ required: true, message: '计划分类必选', trigger: ['blur', 'change'] }],
season: [{ required: true, message: '季度必填', trigger: ['blur', 'change'] }],
month: [{ required: true, message: '月份称必填', trigger: ['blur', 'change'] }],
+ createDeptId: [{ required: true, message: '部门必选', trigger: ['blur', 'change'] }],
+ createCompanyId: [{ required: true, message: '单位必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const processId = ref()
const disabledProcess = ref(false)
-const initDialog = () => {
+const companyList = ref([]) // 单位列表
+const deptList = ref([]) // 部门列表
+const isAdmin = ref(false) // 是否顶级单位
+const flag = ref(true)
+const initDialog = async () => {
dialogStatus.value = $route.params.type as string
ruleFormRef.value?.resetFields()
+ const fetchCommpany = async () => {
+ flag.value = true
+ // 获取单位
+ const res = await getUserDept()
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ isAdmin.value = true
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ isAdmin.value = false
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ ruleForm.value.createCompanyId = res.data.id
+ ruleForm.value.createCompanyName = res.data.fullName
+ if ($route.path.includes('create')) {
+ ruleForm.value.createDeptId = userStore.deptId
+ }
+ }
+ setTimeout(() => {
+ flag.value = false
+ })
+ }
if ($route.params.type === 'create') {
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ fetchCommpany()
ruleForm.value.planType = typeMap[$route.query.category as string]
typeFlag.value = typeMap[$route.query.category as string]
ruleForm.value.year = String(currentYear.value)
if ($route.query.category as string === 'year') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
ruleForm.value.planType = '0'
}
}
@@ -88,6 +129,7 @@
if (data.approvalStatusName === '草稿箱') {
disabledProcess.value = true
}
+ await fetchCommpany()
// 判断是否追加计划
if ($route.query.append) {
disabledProcess.value = true
@@ -96,24 +138,38 @@
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ await fetchCommpany()
if (typeFlag.value === '0') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
}
return
}
// 基本信息
ruleForm.value = {
...data,
- equipmentIds: [],
+ relationList: [],
}
// 获取计划列表
getInfoList(data.id, '').then((res) => {
- ruleForm.value.equipmentIds = res.data
+ ruleForm.value.relationList = res.data
})
}
}
+watch(() => ruleForm.value.createCompanyId, (newVal) => {
+ if (!flag) {
+ ruleForm.value.createDeptId = ''
+ }
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 获取计划分类列表
const planTypeList = ref()
const fetchTypeList = () => {
@@ -149,15 +205,15 @@
},
).then((_res) => {
disabledSave.value = true
- if ($route.query.category as string === 'season' || typeFlag.value === '1') {
- ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
- ruleForm.value.planType = '1'
- }
- else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
- ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
- ruleForm.value.planType = '2'
- }
- ruleForm.value.equipmentIds = tableRef.value.list.map((item: any) => item.equipmentId)
+ // if ($route.query.category as string === 'season' || typeFlag.value === '1') {
+ // ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
+ // ruleForm.value.planType = '1'
+ // }
+ // else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
+ // ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
+ // ruleForm.value.planType = '2'
+ // }
+ ruleForm.value.relationList = tableRef.value.list
// console.log(tableRef.value.list, 'tableRef.value.list')
if (submitId.value) {
ruleForm.value.id = submitId.value
@@ -178,7 +234,7 @@
}).catch(() => {
disabledSave.value = false
})
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
}
else {
@@ -206,7 +262,7 @@
ElMessage.success('已提交')
close()
}).catch((_err) => {
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
})
}
@@ -329,16 +385,16 @@
-
+
-
+
-
+
@@ -350,8 +406,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -377,8 +449,8 @@
-
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/list.vue b/src/views/tested/MeasurementPlan/plan/components/list.vue
index b38eb25..8b9a022 100644
--- a/src/views/tested/MeasurementPlan/plan/components/list.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/list.vue
@@ -3,11 +3,15 @@
import { reactive, ref } from 'vue'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import ApprovalDialog from './ApprovalDialog.vue'
+import summaryDialog from './summaryDialog.vue'
import { cancelPlan, delPlan, editPlan, exportPlan, getListPage, submitPlan } from '@/api/eqpt/measurementPlan/paln'
import { getDictByCode } from '@/api/system/dict'
import { SCHEDULE } from '@/utils/scheduleDict'
import { printJSON } from '@/utils/printUtils'
import { exportFile } from '@/utils/exportUtils'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $props = defineProps({
statusName: {
type: String,
@@ -33,9 +37,57 @@
planName: '', // 计划名称 false
planNo: '', // 计划编号 false
planType: '', // 计划类型(年/季/月) false
+ createCompanyId: '', // 创建单位
+ createDeptId: '', // 部门
+ manufactureNo: '', // 出厂编号
+ equipmentRemark: '', // 备注
offset: 1,
limit: 20,
})
+// 是否折叠查询条件
+const searchMore = ref(true)
+const expandSearch = () => {
+ searchMore.value = !searchMore.value
+}
+// 创建单位
+const companyList = ref<{ id: string; value: string; name: string }[]>([])
+const deptList = ref([])
+const fetchCommpany = () => {
+ // 获取单位
+ getUserDept().then((res) => {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ listQuery.createCompanyId = ''
+ }
+ })
+ // 获取部门
+ // getUserDeptSon({}).then((res) => {
+ // console.log(res.data, '部门')
+ // })
+}
+fetchCommpany()
+watch(() => listQuery.createCompanyId, (newVal) => {
+ listQuery.createDeptId = ''
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 开始结束时间
const datetimerange = ref()
watch(() => datetimerange.value, (newVal) => {
@@ -66,6 +118,11 @@
},
{
text: '创建单位',
+ value: 'createCompanyName',
+ align: 'center',
+ },
+ {
+ text: '部门',
value: 'createDeptName',
align: 'center',
},
@@ -94,7 +151,6 @@
// listQuery.offset = 1
// }
// console.log(getListPage)
- console.log(listQuery, 'listQuery')
getListPage(listQuery, $props.statusName).then((response) => {
list.value = response.data.rows
total.value = Number(response.data.total)
@@ -132,6 +188,10 @@
listQuery.createTimeEnd = ''
listQuery.planNo = ''
listQuery.planCategory = ''
+ listQuery.createCompanyId = ''
+ listQuery.createDeptId = ''
+ listQuery.manufactureNo = ''
+ listQuery.equipmentRemark = ''
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -295,6 +355,11 @@
deep: true,
immediate: true,
})
+// 汇总监督计划
+const summaryRef = ref()
+const summary = () => {
+ summaryRef.value.initDialog()
+}
const permUrl = ref({
edit: '/tested/pmetering/plan/edit',
del: '/tested/pmetering/plan/delete',
@@ -310,32 +375,68 @@
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 汇总年度计划
+
-
-
+
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/edit.vue b/src/views/tested/MeasurementPlan/plan/components/edit.vue
index c956592..90ef232 100644
--- a/src/views/tested/MeasurementPlan/plan/components/edit.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/edit.vue
@@ -10,6 +10,9 @@
import useUserStore from '@/store/modules/user'
import { SCHEDULE } from '@/utils/scheduleDict'
import { delTextBtn, editBtn, submitBtn } from '@/utils/applyBtns'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
@@ -36,11 +39,13 @@
approvalStatus: '', // 审批状态
createDeptId: '', // 创建单位id
createDeptName: '', // 创建单位名称
+ createCompanyName: '',
+ createCompanyId: '',
createTime: '', // 创建时间
createUserId: '', // 创建人id
createUserName: '', // 创建人姓名
decisionItem: '', // 可选决策项
- equipmentIds: [], // 关联设备id
+ relationList: [], // 关联设备id
id: '',
month: 0, // month
planCategory: '0', // 计划分类(字典值,原始/追加)
@@ -58,24 +63,60 @@
// planCategory: [{ required: true, message: '计划分类必选', trigger: ['blur', 'change'] }],
season: [{ required: true, message: '季度必填', trigger: ['blur', 'change'] }],
month: [{ required: true, message: '月份称必填', trigger: ['blur', 'change'] }],
+ createDeptId: [{ required: true, message: '部门必选', trigger: ['blur', 'change'] }],
+ createCompanyId: [{ required: true, message: '单位必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const processId = ref()
const disabledProcess = ref(false)
-const initDialog = () => {
+const companyList = ref([]) // 单位列表
+const deptList = ref([]) // 部门列表
+const isAdmin = ref(false) // 是否顶级单位
+const flag = ref(true)
+const initDialog = async () => {
dialogStatus.value = $route.params.type as string
ruleFormRef.value?.resetFields()
+ const fetchCommpany = async () => {
+ flag.value = true
+ // 获取单位
+ const res = await getUserDept()
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ isAdmin.value = true
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ isAdmin.value = false
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ ruleForm.value.createCompanyId = res.data.id
+ ruleForm.value.createCompanyName = res.data.fullName
+ if ($route.path.includes('create')) {
+ ruleForm.value.createDeptId = userStore.deptId
+ }
+ }
+ setTimeout(() => {
+ flag.value = false
+ })
+ }
if ($route.params.type === 'create') {
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ fetchCommpany()
ruleForm.value.planType = typeMap[$route.query.category as string]
typeFlag.value = typeMap[$route.query.category as string]
ruleForm.value.year = String(currentYear.value)
if ($route.query.category as string === 'year') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
ruleForm.value.planType = '0'
}
}
@@ -88,6 +129,7 @@
if (data.approvalStatusName === '草稿箱') {
disabledProcess.value = true
}
+ await fetchCommpany()
// 判断是否追加计划
if ($route.query.append) {
disabledProcess.value = true
@@ -96,24 +138,38 @@
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ await fetchCommpany()
if (typeFlag.value === '0') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
}
return
}
// 基本信息
ruleForm.value = {
...data,
- equipmentIds: [],
+ relationList: [],
}
// 获取计划列表
getInfoList(data.id, '').then((res) => {
- ruleForm.value.equipmentIds = res.data
+ ruleForm.value.relationList = res.data
})
}
}
+watch(() => ruleForm.value.createCompanyId, (newVal) => {
+ if (!flag) {
+ ruleForm.value.createDeptId = ''
+ }
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 获取计划分类列表
const planTypeList = ref()
const fetchTypeList = () => {
@@ -149,15 +205,15 @@
},
).then((_res) => {
disabledSave.value = true
- if ($route.query.category as string === 'season' || typeFlag.value === '1') {
- ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
- ruleForm.value.planType = '1'
- }
- else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
- ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
- ruleForm.value.planType = '2'
- }
- ruleForm.value.equipmentIds = tableRef.value.list.map((item: any) => item.equipmentId)
+ // if ($route.query.category as string === 'season' || typeFlag.value === '1') {
+ // ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
+ // ruleForm.value.planType = '1'
+ // }
+ // else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
+ // ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
+ // ruleForm.value.planType = '2'
+ // }
+ ruleForm.value.relationList = tableRef.value.list
// console.log(tableRef.value.list, 'tableRef.value.list')
if (submitId.value) {
ruleForm.value.id = submitId.value
@@ -178,7 +234,7 @@
}).catch(() => {
disabledSave.value = false
})
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
}
else {
@@ -206,7 +262,7 @@
ElMessage.success('已提交')
close()
}).catch((_err) => {
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
})
}
@@ -329,16 +385,16 @@
-
+
-
+
-
+
@@ -350,8 +406,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -377,8 +449,8 @@
-
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/list.vue b/src/views/tested/MeasurementPlan/plan/components/list.vue
index b38eb25..8b9a022 100644
--- a/src/views/tested/MeasurementPlan/plan/components/list.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/list.vue
@@ -3,11 +3,15 @@
import { reactive, ref } from 'vue'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import ApprovalDialog from './ApprovalDialog.vue'
+import summaryDialog from './summaryDialog.vue'
import { cancelPlan, delPlan, editPlan, exportPlan, getListPage, submitPlan } from '@/api/eqpt/measurementPlan/paln'
import { getDictByCode } from '@/api/system/dict'
import { SCHEDULE } from '@/utils/scheduleDict'
import { printJSON } from '@/utils/printUtils'
import { exportFile } from '@/utils/exportUtils'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $props = defineProps({
statusName: {
type: String,
@@ -33,9 +37,57 @@
planName: '', // 计划名称 false
planNo: '', // 计划编号 false
planType: '', // 计划类型(年/季/月) false
+ createCompanyId: '', // 创建单位
+ createDeptId: '', // 部门
+ manufactureNo: '', // 出厂编号
+ equipmentRemark: '', // 备注
offset: 1,
limit: 20,
})
+// 是否折叠查询条件
+const searchMore = ref(true)
+const expandSearch = () => {
+ searchMore.value = !searchMore.value
+}
+// 创建单位
+const companyList = ref<{ id: string; value: string; name: string }[]>([])
+const deptList = ref([])
+const fetchCommpany = () => {
+ // 获取单位
+ getUserDept().then((res) => {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ listQuery.createCompanyId = ''
+ }
+ })
+ // 获取部门
+ // getUserDeptSon({}).then((res) => {
+ // console.log(res.data, '部门')
+ // })
+}
+fetchCommpany()
+watch(() => listQuery.createCompanyId, (newVal) => {
+ listQuery.createDeptId = ''
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 开始结束时间
const datetimerange = ref()
watch(() => datetimerange.value, (newVal) => {
@@ -66,6 +118,11 @@
},
{
text: '创建单位',
+ value: 'createCompanyName',
+ align: 'center',
+ },
+ {
+ text: '部门',
value: 'createDeptName',
align: 'center',
},
@@ -94,7 +151,6 @@
// listQuery.offset = 1
// }
// console.log(getListPage)
- console.log(listQuery, 'listQuery')
getListPage(listQuery, $props.statusName).then((response) => {
list.value = response.data.rows
total.value = Number(response.data.total)
@@ -132,6 +188,10 @@
listQuery.createTimeEnd = ''
listQuery.planNo = ''
listQuery.planCategory = ''
+ listQuery.createCompanyId = ''
+ listQuery.createDeptId = ''
+ listQuery.manufactureNo = ''
+ listQuery.equipmentRemark = ''
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -295,6 +355,11 @@
deep: true,
immediate: true,
})
+// 汇总监督计划
+const summaryRef = ref()
+const summary = () => {
+ summaryRef.value.initDialog()
+}
const permUrl = ref({
edit: '/tested/pmetering/plan/edit',
del: '/tested/pmetering/plan/delete',
@@ -310,32 +375,68 @@
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 汇总年度计划
+
-
-
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
index 6aaca0b..ac10dc9 100644
--- a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
@@ -7,33 +7,27 @@
import { getDeptTreeList } from '@/api/system/dept'
import useUserStore from '@/store/modules/user'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const emits = defineEmits(['add'])
const userStore = useUserStore()
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -73,6 +67,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -82,10 +91,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -93,11 +101,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
// 获取使用状态列表
const useStatusList = ref()
@@ -121,24 +124,23 @@
const search = () => {
fetchData()
}
-const selectTreeRef = ref()
// 重置
const reset = () => {
datetimerange.value = []
listQuery.value = {
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -201,8 +203,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -213,32 +224,73 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -249,9 +301,10 @@
/>
-
- 只看我负责的
-
+
+
+
+
@@ -269,6 +322,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/edit.vue b/src/views/tested/MeasurementPlan/plan/components/edit.vue
index c956592..90ef232 100644
--- a/src/views/tested/MeasurementPlan/plan/components/edit.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/edit.vue
@@ -10,6 +10,9 @@
import useUserStore from '@/store/modules/user'
import { SCHEDULE } from '@/utils/scheduleDict'
import { delTextBtn, editBtn, submitBtn } from '@/utils/applyBtns'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
@@ -36,11 +39,13 @@
approvalStatus: '', // 审批状态
createDeptId: '', // 创建单位id
createDeptName: '', // 创建单位名称
+ createCompanyName: '',
+ createCompanyId: '',
createTime: '', // 创建时间
createUserId: '', // 创建人id
createUserName: '', // 创建人姓名
decisionItem: '', // 可选决策项
- equipmentIds: [], // 关联设备id
+ relationList: [], // 关联设备id
id: '',
month: 0, // month
planCategory: '0', // 计划分类(字典值,原始/追加)
@@ -58,24 +63,60 @@
// planCategory: [{ required: true, message: '计划分类必选', trigger: ['blur', 'change'] }],
season: [{ required: true, message: '季度必填', trigger: ['blur', 'change'] }],
month: [{ required: true, message: '月份称必填', trigger: ['blur', 'change'] }],
+ createDeptId: [{ required: true, message: '部门必选', trigger: ['blur', 'change'] }],
+ createCompanyId: [{ required: true, message: '单位必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const processId = ref()
const disabledProcess = ref(false)
-const initDialog = () => {
+const companyList = ref([]) // 单位列表
+const deptList = ref([]) // 部门列表
+const isAdmin = ref(false) // 是否顶级单位
+const flag = ref(true)
+const initDialog = async () => {
dialogStatus.value = $route.params.type as string
ruleFormRef.value?.resetFields()
+ const fetchCommpany = async () => {
+ flag.value = true
+ // 获取单位
+ const res = await getUserDept()
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ isAdmin.value = true
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ isAdmin.value = false
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ ruleForm.value.createCompanyId = res.data.id
+ ruleForm.value.createCompanyName = res.data.fullName
+ if ($route.path.includes('create')) {
+ ruleForm.value.createDeptId = userStore.deptId
+ }
+ }
+ setTimeout(() => {
+ flag.value = false
+ })
+ }
if ($route.params.type === 'create') {
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ fetchCommpany()
ruleForm.value.planType = typeMap[$route.query.category as string]
typeFlag.value = typeMap[$route.query.category as string]
ruleForm.value.year = String(currentYear.value)
if ($route.query.category as string === 'year') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
ruleForm.value.planType = '0'
}
}
@@ -88,6 +129,7 @@
if (data.approvalStatusName === '草稿箱') {
disabledProcess.value = true
}
+ await fetchCommpany()
// 判断是否追加计划
if ($route.query.append) {
disabledProcess.value = true
@@ -96,24 +138,38 @@
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ await fetchCommpany()
if (typeFlag.value === '0') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
}
return
}
// 基本信息
ruleForm.value = {
...data,
- equipmentIds: [],
+ relationList: [],
}
// 获取计划列表
getInfoList(data.id, '').then((res) => {
- ruleForm.value.equipmentIds = res.data
+ ruleForm.value.relationList = res.data
})
}
}
+watch(() => ruleForm.value.createCompanyId, (newVal) => {
+ if (!flag) {
+ ruleForm.value.createDeptId = ''
+ }
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 获取计划分类列表
const planTypeList = ref()
const fetchTypeList = () => {
@@ -149,15 +205,15 @@
},
).then((_res) => {
disabledSave.value = true
- if ($route.query.category as string === 'season' || typeFlag.value === '1') {
- ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
- ruleForm.value.planType = '1'
- }
- else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
- ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
- ruleForm.value.planType = '2'
- }
- ruleForm.value.equipmentIds = tableRef.value.list.map((item: any) => item.equipmentId)
+ // if ($route.query.category as string === 'season' || typeFlag.value === '1') {
+ // ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
+ // ruleForm.value.planType = '1'
+ // }
+ // else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
+ // ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
+ // ruleForm.value.planType = '2'
+ // }
+ ruleForm.value.relationList = tableRef.value.list
// console.log(tableRef.value.list, 'tableRef.value.list')
if (submitId.value) {
ruleForm.value.id = submitId.value
@@ -178,7 +234,7 @@
}).catch(() => {
disabledSave.value = false
})
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
}
else {
@@ -206,7 +262,7 @@
ElMessage.success('已提交')
close()
}).catch((_err) => {
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
})
}
@@ -329,16 +385,16 @@
-
+
-
+
-
+
@@ -350,8 +406,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -377,8 +449,8 @@
-
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/list.vue b/src/views/tested/MeasurementPlan/plan/components/list.vue
index b38eb25..8b9a022 100644
--- a/src/views/tested/MeasurementPlan/plan/components/list.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/list.vue
@@ -3,11 +3,15 @@
import { reactive, ref } from 'vue'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import ApprovalDialog from './ApprovalDialog.vue'
+import summaryDialog from './summaryDialog.vue'
import { cancelPlan, delPlan, editPlan, exportPlan, getListPage, submitPlan } from '@/api/eqpt/measurementPlan/paln'
import { getDictByCode } from '@/api/system/dict'
import { SCHEDULE } from '@/utils/scheduleDict'
import { printJSON } from '@/utils/printUtils'
import { exportFile } from '@/utils/exportUtils'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $props = defineProps({
statusName: {
type: String,
@@ -33,9 +37,57 @@
planName: '', // 计划名称 false
planNo: '', // 计划编号 false
planType: '', // 计划类型(年/季/月) false
+ createCompanyId: '', // 创建单位
+ createDeptId: '', // 部门
+ manufactureNo: '', // 出厂编号
+ equipmentRemark: '', // 备注
offset: 1,
limit: 20,
})
+// 是否折叠查询条件
+const searchMore = ref(true)
+const expandSearch = () => {
+ searchMore.value = !searchMore.value
+}
+// 创建单位
+const companyList = ref<{ id: string; value: string; name: string }[]>([])
+const deptList = ref([])
+const fetchCommpany = () => {
+ // 获取单位
+ getUserDept().then((res) => {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ listQuery.createCompanyId = ''
+ }
+ })
+ // 获取部门
+ // getUserDeptSon({}).then((res) => {
+ // console.log(res.data, '部门')
+ // })
+}
+fetchCommpany()
+watch(() => listQuery.createCompanyId, (newVal) => {
+ listQuery.createDeptId = ''
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 开始结束时间
const datetimerange = ref()
watch(() => datetimerange.value, (newVal) => {
@@ -66,6 +118,11 @@
},
{
text: '创建单位',
+ value: 'createCompanyName',
+ align: 'center',
+ },
+ {
+ text: '部门',
value: 'createDeptName',
align: 'center',
},
@@ -94,7 +151,6 @@
// listQuery.offset = 1
// }
// console.log(getListPage)
- console.log(listQuery, 'listQuery')
getListPage(listQuery, $props.statusName).then((response) => {
list.value = response.data.rows
total.value = Number(response.data.total)
@@ -132,6 +188,10 @@
listQuery.createTimeEnd = ''
listQuery.planNo = ''
listQuery.planCategory = ''
+ listQuery.createCompanyId = ''
+ listQuery.createDeptId = ''
+ listQuery.manufactureNo = ''
+ listQuery.equipmentRemark = ''
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -295,6 +355,11 @@
deep: true,
immediate: true,
})
+// 汇总监督计划
+const summaryRef = ref()
+const summary = () => {
+ summaryRef.value.initDialog()
+}
const permUrl = ref({
edit: '/tested/pmetering/plan/edit',
del: '/tested/pmetering/plan/delete',
@@ -310,32 +375,68 @@
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 汇总年度计划
+
-
-
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
index 6aaca0b..ac10dc9 100644
--- a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
@@ -7,33 +7,27 @@
import { getDeptTreeList } from '@/api/system/dept'
import useUserStore from '@/store/modules/user'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const emits = defineEmits(['add'])
const userStore = useUserStore()
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -73,6 +67,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -82,10 +91,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -93,11 +101,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
// 获取使用状态列表
const useStatusList = ref()
@@ -121,24 +124,23 @@
const search = () => {
fetchData()
}
-const selectTreeRef = ref()
// 重置
const reset = () => {
datetimerange.value = []
listQuery.value = {
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -201,8 +203,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -213,32 +224,73 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -249,9 +301,10 @@
/>
-
- 只看我负责的
-
+
+
+
+
@@ -269,6 +322,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summary.vue b/src/views/tested/MeasurementPlan/plan/components/summary.vue
new file mode 100644
index 0000000..53b7158
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summary.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+ 导出
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/edit.vue b/src/views/tested/MeasurementPlan/plan/components/edit.vue
index c956592..90ef232 100644
--- a/src/views/tested/MeasurementPlan/plan/components/edit.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/edit.vue
@@ -10,6 +10,9 @@
import useUserStore from '@/store/modules/user'
import { SCHEDULE } from '@/utils/scheduleDict'
import { delTextBtn, editBtn, submitBtn } from '@/utils/applyBtns'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
@@ -36,11 +39,13 @@
approvalStatus: '', // 审批状态
createDeptId: '', // 创建单位id
createDeptName: '', // 创建单位名称
+ createCompanyName: '',
+ createCompanyId: '',
createTime: '', // 创建时间
createUserId: '', // 创建人id
createUserName: '', // 创建人姓名
decisionItem: '', // 可选决策项
- equipmentIds: [], // 关联设备id
+ relationList: [], // 关联设备id
id: '',
month: 0, // month
planCategory: '0', // 计划分类(字典值,原始/追加)
@@ -58,24 +63,60 @@
// planCategory: [{ required: true, message: '计划分类必选', trigger: ['blur', 'change'] }],
season: [{ required: true, message: '季度必填', trigger: ['blur', 'change'] }],
month: [{ required: true, message: '月份称必填', trigger: ['blur', 'change'] }],
+ createDeptId: [{ required: true, message: '部门必选', trigger: ['blur', 'change'] }],
+ createCompanyId: [{ required: true, message: '单位必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const processId = ref()
const disabledProcess = ref(false)
-const initDialog = () => {
+const companyList = ref([]) // 单位列表
+const deptList = ref([]) // 部门列表
+const isAdmin = ref(false) // 是否顶级单位
+const flag = ref(true)
+const initDialog = async () => {
dialogStatus.value = $route.params.type as string
ruleFormRef.value?.resetFields()
+ const fetchCommpany = async () => {
+ flag.value = true
+ // 获取单位
+ const res = await getUserDept()
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ isAdmin.value = true
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ isAdmin.value = false
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ ruleForm.value.createCompanyId = res.data.id
+ ruleForm.value.createCompanyName = res.data.fullName
+ if ($route.path.includes('create')) {
+ ruleForm.value.createDeptId = userStore.deptId
+ }
+ }
+ setTimeout(() => {
+ flag.value = false
+ })
+ }
if ($route.params.type === 'create') {
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ fetchCommpany()
ruleForm.value.planType = typeMap[$route.query.category as string]
typeFlag.value = typeMap[$route.query.category as string]
ruleForm.value.year = String(currentYear.value)
if ($route.query.category as string === 'year') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
ruleForm.value.planType = '0'
}
}
@@ -88,6 +129,7 @@
if (data.approvalStatusName === '草稿箱') {
disabledProcess.value = true
}
+ await fetchCommpany()
// 判断是否追加计划
if ($route.query.append) {
disabledProcess.value = true
@@ -96,24 +138,38 @@
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ await fetchCommpany()
if (typeFlag.value === '0') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
}
return
}
// 基本信息
ruleForm.value = {
...data,
- equipmentIds: [],
+ relationList: [],
}
// 获取计划列表
getInfoList(data.id, '').then((res) => {
- ruleForm.value.equipmentIds = res.data
+ ruleForm.value.relationList = res.data
})
}
}
+watch(() => ruleForm.value.createCompanyId, (newVal) => {
+ if (!flag) {
+ ruleForm.value.createDeptId = ''
+ }
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 获取计划分类列表
const planTypeList = ref()
const fetchTypeList = () => {
@@ -149,15 +205,15 @@
},
).then((_res) => {
disabledSave.value = true
- if ($route.query.category as string === 'season' || typeFlag.value === '1') {
- ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
- ruleForm.value.planType = '1'
- }
- else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
- ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
- ruleForm.value.planType = '2'
- }
- ruleForm.value.equipmentIds = tableRef.value.list.map((item: any) => item.equipmentId)
+ // if ($route.query.category as string === 'season' || typeFlag.value === '1') {
+ // ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
+ // ruleForm.value.planType = '1'
+ // }
+ // else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
+ // ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
+ // ruleForm.value.planType = '2'
+ // }
+ ruleForm.value.relationList = tableRef.value.list
// console.log(tableRef.value.list, 'tableRef.value.list')
if (submitId.value) {
ruleForm.value.id = submitId.value
@@ -178,7 +234,7 @@
}).catch(() => {
disabledSave.value = false
})
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
}
else {
@@ -206,7 +262,7 @@
ElMessage.success('已提交')
close()
}).catch((_err) => {
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
})
}
@@ -329,16 +385,16 @@
-
+
-
+
-
+
@@ -350,8 +406,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -377,8 +449,8 @@
-
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/list.vue b/src/views/tested/MeasurementPlan/plan/components/list.vue
index b38eb25..8b9a022 100644
--- a/src/views/tested/MeasurementPlan/plan/components/list.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/list.vue
@@ -3,11 +3,15 @@
import { reactive, ref } from 'vue'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import ApprovalDialog from './ApprovalDialog.vue'
+import summaryDialog from './summaryDialog.vue'
import { cancelPlan, delPlan, editPlan, exportPlan, getListPage, submitPlan } from '@/api/eqpt/measurementPlan/paln'
import { getDictByCode } from '@/api/system/dict'
import { SCHEDULE } from '@/utils/scheduleDict'
import { printJSON } from '@/utils/printUtils'
import { exportFile } from '@/utils/exportUtils'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $props = defineProps({
statusName: {
type: String,
@@ -33,9 +37,57 @@
planName: '', // 计划名称 false
planNo: '', // 计划编号 false
planType: '', // 计划类型(年/季/月) false
+ createCompanyId: '', // 创建单位
+ createDeptId: '', // 部门
+ manufactureNo: '', // 出厂编号
+ equipmentRemark: '', // 备注
offset: 1,
limit: 20,
})
+// 是否折叠查询条件
+const searchMore = ref(true)
+const expandSearch = () => {
+ searchMore.value = !searchMore.value
+}
+// 创建单位
+const companyList = ref<{ id: string; value: string; name: string }[]>([])
+const deptList = ref([])
+const fetchCommpany = () => {
+ // 获取单位
+ getUserDept().then((res) => {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ listQuery.createCompanyId = ''
+ }
+ })
+ // 获取部门
+ // getUserDeptSon({}).then((res) => {
+ // console.log(res.data, '部门')
+ // })
+}
+fetchCommpany()
+watch(() => listQuery.createCompanyId, (newVal) => {
+ listQuery.createDeptId = ''
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 开始结束时间
const datetimerange = ref()
watch(() => datetimerange.value, (newVal) => {
@@ -66,6 +118,11 @@
},
{
text: '创建单位',
+ value: 'createCompanyName',
+ align: 'center',
+ },
+ {
+ text: '部门',
value: 'createDeptName',
align: 'center',
},
@@ -94,7 +151,6 @@
// listQuery.offset = 1
// }
// console.log(getListPage)
- console.log(listQuery, 'listQuery')
getListPage(listQuery, $props.statusName).then((response) => {
list.value = response.data.rows
total.value = Number(response.data.total)
@@ -132,6 +188,10 @@
listQuery.createTimeEnd = ''
listQuery.planNo = ''
listQuery.planCategory = ''
+ listQuery.createCompanyId = ''
+ listQuery.createDeptId = ''
+ listQuery.manufactureNo = ''
+ listQuery.equipmentRemark = ''
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -295,6 +355,11 @@
deep: true,
immediate: true,
})
+// 汇总监督计划
+const summaryRef = ref()
+const summary = () => {
+ summaryRef.value.initDialog()
+}
const permUrl = ref({
edit: '/tested/pmetering/plan/edit',
del: '/tested/pmetering/plan/delete',
@@ -310,32 +375,68 @@
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 汇总年度计划
+
-
-
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
index 6aaca0b..ac10dc9 100644
--- a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
@@ -7,33 +7,27 @@
import { getDeptTreeList } from '@/api/system/dept'
import useUserStore from '@/store/modules/user'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const emits = defineEmits(['add'])
const userStore = useUserStore()
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -73,6 +67,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -82,10 +91,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -93,11 +101,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
// 获取使用状态列表
const useStatusList = ref()
@@ -121,24 +124,23 @@
const search = () => {
fetchData()
}
-const selectTreeRef = ref()
// 重置
const reset = () => {
datetimerange.value = []
listQuery.value = {
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -201,8 +203,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -213,32 +224,73 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -249,9 +301,10 @@
/>
-
- 只看我负责的
-
+
+
+
+
@@ -269,6 +322,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summary.vue b/src/views/tested/MeasurementPlan/plan/components/summary.vue
new file mode 100644
index 0000000..53b7158
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summary.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+ 导出
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
new file mode 100644
index 0000000..2ecb05b
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/edit.vue b/src/views/tested/MeasurementPlan/plan/components/edit.vue
index c956592..90ef232 100644
--- a/src/views/tested/MeasurementPlan/plan/components/edit.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/edit.vue
@@ -10,6 +10,9 @@
import useUserStore from '@/store/modules/user'
import { SCHEDULE } from '@/utils/scheduleDict'
import { delTextBtn, editBtn, submitBtn } from '@/utils/applyBtns'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
@@ -36,11 +39,13 @@
approvalStatus: '', // 审批状态
createDeptId: '', // 创建单位id
createDeptName: '', // 创建单位名称
+ createCompanyName: '',
+ createCompanyId: '',
createTime: '', // 创建时间
createUserId: '', // 创建人id
createUserName: '', // 创建人姓名
decisionItem: '', // 可选决策项
- equipmentIds: [], // 关联设备id
+ relationList: [], // 关联设备id
id: '',
month: 0, // month
planCategory: '0', // 计划分类(字典值,原始/追加)
@@ -58,24 +63,60 @@
// planCategory: [{ required: true, message: '计划分类必选', trigger: ['blur', 'change'] }],
season: [{ required: true, message: '季度必填', trigger: ['blur', 'change'] }],
month: [{ required: true, message: '月份称必填', trigger: ['blur', 'change'] }],
+ createDeptId: [{ required: true, message: '部门必选', trigger: ['blur', 'change'] }],
+ createCompanyId: [{ required: true, message: '单位必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const processId = ref()
const disabledProcess = ref(false)
-const initDialog = () => {
+const companyList = ref([]) // 单位列表
+const deptList = ref([]) // 部门列表
+const isAdmin = ref(false) // 是否顶级单位
+const flag = ref(true)
+const initDialog = async () => {
dialogStatus.value = $route.params.type as string
ruleFormRef.value?.resetFields()
+ const fetchCommpany = async () => {
+ flag.value = true
+ // 获取单位
+ const res = await getUserDept()
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ isAdmin.value = true
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ isAdmin.value = false
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ ruleForm.value.createCompanyId = res.data.id
+ ruleForm.value.createCompanyName = res.data.fullName
+ if ($route.path.includes('create')) {
+ ruleForm.value.createDeptId = userStore.deptId
+ }
+ }
+ setTimeout(() => {
+ flag.value = false
+ })
+ }
if ($route.params.type === 'create') {
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ fetchCommpany()
ruleForm.value.planType = typeMap[$route.query.category as string]
typeFlag.value = typeMap[$route.query.category as string]
ruleForm.value.year = String(currentYear.value)
if ($route.query.category as string === 'year') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
ruleForm.value.planType = '0'
}
}
@@ -88,6 +129,7 @@
if (data.approvalStatusName === '草稿箱') {
disabledProcess.value = true
}
+ await fetchCommpany()
// 判断是否追加计划
if ($route.query.append) {
disabledProcess.value = true
@@ -96,24 +138,38 @@
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ await fetchCommpany()
if (typeFlag.value === '0') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
}
return
}
// 基本信息
ruleForm.value = {
...data,
- equipmentIds: [],
+ relationList: [],
}
// 获取计划列表
getInfoList(data.id, '').then((res) => {
- ruleForm.value.equipmentIds = res.data
+ ruleForm.value.relationList = res.data
})
}
}
+watch(() => ruleForm.value.createCompanyId, (newVal) => {
+ if (!flag) {
+ ruleForm.value.createDeptId = ''
+ }
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 获取计划分类列表
const planTypeList = ref()
const fetchTypeList = () => {
@@ -149,15 +205,15 @@
},
).then((_res) => {
disabledSave.value = true
- if ($route.query.category as string === 'season' || typeFlag.value === '1') {
- ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
- ruleForm.value.planType = '1'
- }
- else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
- ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
- ruleForm.value.planType = '2'
- }
- ruleForm.value.equipmentIds = tableRef.value.list.map((item: any) => item.equipmentId)
+ // if ($route.query.category as string === 'season' || typeFlag.value === '1') {
+ // ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
+ // ruleForm.value.planType = '1'
+ // }
+ // else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
+ // ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
+ // ruleForm.value.planType = '2'
+ // }
+ ruleForm.value.relationList = tableRef.value.list
// console.log(tableRef.value.list, 'tableRef.value.list')
if (submitId.value) {
ruleForm.value.id = submitId.value
@@ -178,7 +234,7 @@
}).catch(() => {
disabledSave.value = false
})
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
}
else {
@@ -206,7 +262,7 @@
ElMessage.success('已提交')
close()
}).catch((_err) => {
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
})
}
@@ -329,16 +385,16 @@
-
+
-
+
-
+
@@ -350,8 +406,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -377,8 +449,8 @@
-
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/list.vue b/src/views/tested/MeasurementPlan/plan/components/list.vue
index b38eb25..8b9a022 100644
--- a/src/views/tested/MeasurementPlan/plan/components/list.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/list.vue
@@ -3,11 +3,15 @@
import { reactive, ref } from 'vue'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import ApprovalDialog from './ApprovalDialog.vue'
+import summaryDialog from './summaryDialog.vue'
import { cancelPlan, delPlan, editPlan, exportPlan, getListPage, submitPlan } from '@/api/eqpt/measurementPlan/paln'
import { getDictByCode } from '@/api/system/dict'
import { SCHEDULE } from '@/utils/scheduleDict'
import { printJSON } from '@/utils/printUtils'
import { exportFile } from '@/utils/exportUtils'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $props = defineProps({
statusName: {
type: String,
@@ -33,9 +37,57 @@
planName: '', // 计划名称 false
planNo: '', // 计划编号 false
planType: '', // 计划类型(年/季/月) false
+ createCompanyId: '', // 创建单位
+ createDeptId: '', // 部门
+ manufactureNo: '', // 出厂编号
+ equipmentRemark: '', // 备注
offset: 1,
limit: 20,
})
+// 是否折叠查询条件
+const searchMore = ref(true)
+const expandSearch = () => {
+ searchMore.value = !searchMore.value
+}
+// 创建单位
+const companyList = ref<{ id: string; value: string; name: string }[]>([])
+const deptList = ref([])
+const fetchCommpany = () => {
+ // 获取单位
+ getUserDept().then((res) => {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ listQuery.createCompanyId = ''
+ }
+ })
+ // 获取部门
+ // getUserDeptSon({}).then((res) => {
+ // console.log(res.data, '部门')
+ // })
+}
+fetchCommpany()
+watch(() => listQuery.createCompanyId, (newVal) => {
+ listQuery.createDeptId = ''
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 开始结束时间
const datetimerange = ref()
watch(() => datetimerange.value, (newVal) => {
@@ -66,6 +118,11 @@
},
{
text: '创建单位',
+ value: 'createCompanyName',
+ align: 'center',
+ },
+ {
+ text: '部门',
value: 'createDeptName',
align: 'center',
},
@@ -94,7 +151,6 @@
// listQuery.offset = 1
// }
// console.log(getListPage)
- console.log(listQuery, 'listQuery')
getListPage(listQuery, $props.statusName).then((response) => {
list.value = response.data.rows
total.value = Number(response.data.total)
@@ -132,6 +188,10 @@
listQuery.createTimeEnd = ''
listQuery.planNo = ''
listQuery.planCategory = ''
+ listQuery.createCompanyId = ''
+ listQuery.createDeptId = ''
+ listQuery.manufactureNo = ''
+ listQuery.equipmentRemark = ''
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -295,6 +355,11 @@
deep: true,
immediate: true,
})
+// 汇总监督计划
+const summaryRef = ref()
+const summary = () => {
+ summaryRef.value.initDialog()
+}
const permUrl = ref({
edit: '/tested/pmetering/plan/edit',
del: '/tested/pmetering/plan/delete',
@@ -310,32 +375,68 @@
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 汇总年度计划
+
-
-
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
index 6aaca0b..ac10dc9 100644
--- a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
@@ -7,33 +7,27 @@
import { getDeptTreeList } from '@/api/system/dept'
import useUserStore from '@/store/modules/user'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const emits = defineEmits(['add'])
const userStore = useUserStore()
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -73,6 +67,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -82,10 +91,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -93,11 +101,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
// 获取使用状态列表
const useStatusList = ref()
@@ -121,24 +124,23 @@
const search = () => {
fetchData()
}
-const selectTreeRef = ref()
// 重置
const reset = () => {
datetimerange.value = []
listQuery.value = {
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -201,8 +203,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -213,32 +224,73 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -249,9 +301,10 @@
/>
-
- 只看我负责的
-
+
+
+
+
@@ -269,6 +322,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summary.vue b/src/views/tested/MeasurementPlan/plan/components/summary.vue
new file mode 100644
index 0000000..53b7158
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summary.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+ 导出
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
new file mode 100644
index 0000000..2ecb05b
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/table.vue b/src/views/tested/MeasurementPlan/plan/components/table.vue
index 52ed729..a2843ce 100644
--- a/src/views/tested/MeasurementPlan/plan/components/table.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/table.vue
@@ -18,50 +18,83 @@
text: '设备名称',
value: 'equipmentName',
required: true,
- isSelect: false, // 是否下拉框
- isBtn: true,
- },
- {
- text: '统一编号',
- value: 'equipmentNo',
- required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ width: '200',
+ type: 'btn',
},
{
text: '规格型号',
value: 'model',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '出厂编号',
+ value: 'manufactureNo',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '生产厂家',
+ value: 'manufacturer',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ required: false,
+ type: 'text',
},
{
text: '负责人',
value: 'directorName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
text: '计量标识',
value: 'meterIdentifyName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
+ required: false,
+ type: 'text',
},
{
text: '证书有效期',
value: 'certificateValid',
+ width: '160',
required: false,
- isSelect: true, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
- text: '安装位置',
- value: 'installLocation',
+ text: '检定去向',
+ value: 'checkDestinationName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '计划送检时间',
+ value: 'planDeliverTime',
+ width: '180',
+ required: true,
+ type: 'date',
+ },
+ {
+ text: '计划送检单位',
+ value: 'planMeasureCompany',
+ width: '160',
+ required: true,
+ type: 'input',
},
])
const list = ref([])
@@ -93,13 +126,17 @@
if (checkCertificateList()) {
setAllRowReadable()
list.value.push({
- equipmentNo: '',
equipmentName: '',
model: '',
+ manufactureNo: '',
+ manufacturer: '',
+ deptName: '',
+ usePosition: '',
directorName: '',
- meterIdentify: '',
+ meterIdentifyName: '',
+ checkOrganization: '',
certificateValid: '',
- installLocation: '',
+ checkDestinationName: '',
editable: true,
} as any)
}
@@ -117,23 +154,13 @@
const selectRow = ref()
const select = (text: string, index: any) => {
if (text === '设备名称') {
- // deviceRef.value.initDialog(false)
deviceSingeRef.value.initDialog()
selectRow.value = index
}
}
// 选择设备
const confirm = (device: any) => {
- // 判断是单选还是多选
-
if (Array.isArray(device)) {
- // const data = list.value.filter((item) => {
- // return device.some((child: any) => child.id === item.equipmentId)
- // })
- // if (data.length) {
- // ElMessage.warning('选择设备重复')
- // return
- // }
// 多选
device.forEach((item) => {
if (list.value.every(citem => citem.equipmentId !== item.id)) {
@@ -143,6 +170,8 @@
id: null,
groupId: null,
editable: true,
+ checkDestinationName: item.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: item.checkDestination === '1' ? '' : item.checkOrganization,
planId: '',
planName: '',
planNo: '',
@@ -166,6 +195,8 @@
planId: '',
planName: '',
planNo: '',
+ checkDestinationName: device.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: device.checkDestination === '1' ? '' : device.checkOrganization,
}
list.value[selectRow.value] = row
}
@@ -194,7 +225,7 @@
-
+
批量增加
@@ -211,10 +242,10 @@
@row-dblclick="dblclickRow"
>
-
+
*{{ item.text }}
@@ -222,7 +253,7 @@
{{ scope.row[item.value] }}
@@ -230,10 +261,15 @@
选择
-
+
+
+ {{ scope.row[item.value] }}
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/edit.vue b/src/views/tested/MeasurementPlan/plan/components/edit.vue
index c956592..90ef232 100644
--- a/src/views/tested/MeasurementPlan/plan/components/edit.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/edit.vue
@@ -10,6 +10,9 @@
import useUserStore from '@/store/modules/user'
import { SCHEDULE } from '@/utils/scheduleDict'
import { delTextBtn, editBtn, submitBtn } from '@/utils/applyBtns'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
@@ -36,11 +39,13 @@
approvalStatus: '', // 审批状态
createDeptId: '', // 创建单位id
createDeptName: '', // 创建单位名称
+ createCompanyName: '',
+ createCompanyId: '',
createTime: '', // 创建时间
createUserId: '', // 创建人id
createUserName: '', // 创建人姓名
decisionItem: '', // 可选决策项
- equipmentIds: [], // 关联设备id
+ relationList: [], // 关联设备id
id: '',
month: 0, // month
planCategory: '0', // 计划分类(字典值,原始/追加)
@@ -58,24 +63,60 @@
// planCategory: [{ required: true, message: '计划分类必选', trigger: ['blur', 'change'] }],
season: [{ required: true, message: '季度必填', trigger: ['blur', 'change'] }],
month: [{ required: true, message: '月份称必填', trigger: ['blur', 'change'] }],
+ createDeptId: [{ required: true, message: '部门必选', trigger: ['blur', 'change'] }],
+ createCompanyId: [{ required: true, message: '单位必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const processId = ref()
const disabledProcess = ref(false)
-const initDialog = () => {
+const companyList = ref([]) // 单位列表
+const deptList = ref([]) // 部门列表
+const isAdmin = ref(false) // 是否顶级单位
+const flag = ref(true)
+const initDialog = async () => {
dialogStatus.value = $route.params.type as string
ruleFormRef.value?.resetFields()
+ const fetchCommpany = async () => {
+ flag.value = true
+ // 获取单位
+ const res = await getUserDept()
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ isAdmin.value = true
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ isAdmin.value = false
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ ruleForm.value.createCompanyId = res.data.id
+ ruleForm.value.createCompanyName = res.data.fullName
+ if ($route.path.includes('create')) {
+ ruleForm.value.createDeptId = userStore.deptId
+ }
+ }
+ setTimeout(() => {
+ flag.value = false
+ })
+ }
if ($route.params.type === 'create') {
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ fetchCommpany()
ruleForm.value.planType = typeMap[$route.query.category as string]
typeFlag.value = typeMap[$route.query.category as string]
ruleForm.value.year = String(currentYear.value)
if ($route.query.category as string === 'year') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
ruleForm.value.planType = '0'
}
}
@@ -88,6 +129,7 @@
if (data.approvalStatusName === '草稿箱') {
disabledProcess.value = true
}
+ await fetchCommpany()
// 判断是否追加计划
if ($route.query.append) {
disabledProcess.value = true
@@ -96,24 +138,38 @@
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ await fetchCommpany()
if (typeFlag.value === '0') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
}
return
}
// 基本信息
ruleForm.value = {
...data,
- equipmentIds: [],
+ relationList: [],
}
// 获取计划列表
getInfoList(data.id, '').then((res) => {
- ruleForm.value.equipmentIds = res.data
+ ruleForm.value.relationList = res.data
})
}
}
+watch(() => ruleForm.value.createCompanyId, (newVal) => {
+ if (!flag) {
+ ruleForm.value.createDeptId = ''
+ }
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 获取计划分类列表
const planTypeList = ref()
const fetchTypeList = () => {
@@ -149,15 +205,15 @@
},
).then((_res) => {
disabledSave.value = true
- if ($route.query.category as string === 'season' || typeFlag.value === '1') {
- ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
- ruleForm.value.planType = '1'
- }
- else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
- ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
- ruleForm.value.planType = '2'
- }
- ruleForm.value.equipmentIds = tableRef.value.list.map((item: any) => item.equipmentId)
+ // if ($route.query.category as string === 'season' || typeFlag.value === '1') {
+ // ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
+ // ruleForm.value.planType = '1'
+ // }
+ // else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
+ // ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
+ // ruleForm.value.planType = '2'
+ // }
+ ruleForm.value.relationList = tableRef.value.list
// console.log(tableRef.value.list, 'tableRef.value.list')
if (submitId.value) {
ruleForm.value.id = submitId.value
@@ -178,7 +234,7 @@
}).catch(() => {
disabledSave.value = false
})
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
}
else {
@@ -206,7 +262,7 @@
ElMessage.success('已提交')
close()
}).catch((_err) => {
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
})
}
@@ -329,16 +385,16 @@
-
+
-
+
-
+
@@ -350,8 +406,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -377,8 +449,8 @@
-
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/list.vue b/src/views/tested/MeasurementPlan/plan/components/list.vue
index b38eb25..8b9a022 100644
--- a/src/views/tested/MeasurementPlan/plan/components/list.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/list.vue
@@ -3,11 +3,15 @@
import { reactive, ref } from 'vue'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import ApprovalDialog from './ApprovalDialog.vue'
+import summaryDialog from './summaryDialog.vue'
import { cancelPlan, delPlan, editPlan, exportPlan, getListPage, submitPlan } from '@/api/eqpt/measurementPlan/paln'
import { getDictByCode } from '@/api/system/dict'
import { SCHEDULE } from '@/utils/scheduleDict'
import { printJSON } from '@/utils/printUtils'
import { exportFile } from '@/utils/exportUtils'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $props = defineProps({
statusName: {
type: String,
@@ -33,9 +37,57 @@
planName: '', // 计划名称 false
planNo: '', // 计划编号 false
planType: '', // 计划类型(年/季/月) false
+ createCompanyId: '', // 创建单位
+ createDeptId: '', // 部门
+ manufactureNo: '', // 出厂编号
+ equipmentRemark: '', // 备注
offset: 1,
limit: 20,
})
+// 是否折叠查询条件
+const searchMore = ref(true)
+const expandSearch = () => {
+ searchMore.value = !searchMore.value
+}
+// 创建单位
+const companyList = ref<{ id: string; value: string; name: string }[]>([])
+const deptList = ref([])
+const fetchCommpany = () => {
+ // 获取单位
+ getUserDept().then((res) => {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ listQuery.createCompanyId = ''
+ }
+ })
+ // 获取部门
+ // getUserDeptSon({}).then((res) => {
+ // console.log(res.data, '部门')
+ // })
+}
+fetchCommpany()
+watch(() => listQuery.createCompanyId, (newVal) => {
+ listQuery.createDeptId = ''
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 开始结束时间
const datetimerange = ref()
watch(() => datetimerange.value, (newVal) => {
@@ -66,6 +118,11 @@
},
{
text: '创建单位',
+ value: 'createCompanyName',
+ align: 'center',
+ },
+ {
+ text: '部门',
value: 'createDeptName',
align: 'center',
},
@@ -94,7 +151,6 @@
// listQuery.offset = 1
// }
// console.log(getListPage)
- console.log(listQuery, 'listQuery')
getListPage(listQuery, $props.statusName).then((response) => {
list.value = response.data.rows
total.value = Number(response.data.total)
@@ -132,6 +188,10 @@
listQuery.createTimeEnd = ''
listQuery.planNo = ''
listQuery.planCategory = ''
+ listQuery.createCompanyId = ''
+ listQuery.createDeptId = ''
+ listQuery.manufactureNo = ''
+ listQuery.equipmentRemark = ''
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -295,6 +355,11 @@
deep: true,
immediate: true,
})
+// 汇总监督计划
+const summaryRef = ref()
+const summary = () => {
+ summaryRef.value.initDialog()
+}
const permUrl = ref({
edit: '/tested/pmetering/plan/edit',
del: '/tested/pmetering/plan/delete',
@@ -310,32 +375,68 @@
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 汇总年度计划
+
-
-
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
index 6aaca0b..ac10dc9 100644
--- a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
@@ -7,33 +7,27 @@
import { getDeptTreeList } from '@/api/system/dept'
import useUserStore from '@/store/modules/user'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const emits = defineEmits(['add'])
const userStore = useUserStore()
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -73,6 +67,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -82,10 +91,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -93,11 +101,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
// 获取使用状态列表
const useStatusList = ref()
@@ -121,24 +124,23 @@
const search = () => {
fetchData()
}
-const selectTreeRef = ref()
// 重置
const reset = () => {
datetimerange.value = []
listQuery.value = {
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -201,8 +203,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -213,32 +224,73 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -249,9 +301,10 @@
/>
-
- 只看我负责的
-
+
+
+
+
@@ -269,6 +322,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summary.vue b/src/views/tested/MeasurementPlan/plan/components/summary.vue
new file mode 100644
index 0000000..53b7158
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summary.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+ 导出
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
new file mode 100644
index 0000000..2ecb05b
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/table.vue b/src/views/tested/MeasurementPlan/plan/components/table.vue
index 52ed729..a2843ce 100644
--- a/src/views/tested/MeasurementPlan/plan/components/table.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/table.vue
@@ -18,50 +18,83 @@
text: '设备名称',
value: 'equipmentName',
required: true,
- isSelect: false, // 是否下拉框
- isBtn: true,
- },
- {
- text: '统一编号',
- value: 'equipmentNo',
- required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ width: '200',
+ type: 'btn',
},
{
text: '规格型号',
value: 'model',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '出厂编号',
+ value: 'manufactureNo',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '生产厂家',
+ value: 'manufacturer',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ required: false,
+ type: 'text',
},
{
text: '负责人',
value: 'directorName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
text: '计量标识',
value: 'meterIdentifyName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
+ required: false,
+ type: 'text',
},
{
text: '证书有效期',
value: 'certificateValid',
+ width: '160',
required: false,
- isSelect: true, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
- text: '安装位置',
- value: 'installLocation',
+ text: '检定去向',
+ value: 'checkDestinationName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '计划送检时间',
+ value: 'planDeliverTime',
+ width: '180',
+ required: true,
+ type: 'date',
+ },
+ {
+ text: '计划送检单位',
+ value: 'planMeasureCompany',
+ width: '160',
+ required: true,
+ type: 'input',
},
])
const list = ref([])
@@ -93,13 +126,17 @@
if (checkCertificateList()) {
setAllRowReadable()
list.value.push({
- equipmentNo: '',
equipmentName: '',
model: '',
+ manufactureNo: '',
+ manufacturer: '',
+ deptName: '',
+ usePosition: '',
directorName: '',
- meterIdentify: '',
+ meterIdentifyName: '',
+ checkOrganization: '',
certificateValid: '',
- installLocation: '',
+ checkDestinationName: '',
editable: true,
} as any)
}
@@ -117,23 +154,13 @@
const selectRow = ref()
const select = (text: string, index: any) => {
if (text === '设备名称') {
- // deviceRef.value.initDialog(false)
deviceSingeRef.value.initDialog()
selectRow.value = index
}
}
// 选择设备
const confirm = (device: any) => {
- // 判断是单选还是多选
-
if (Array.isArray(device)) {
- // const data = list.value.filter((item) => {
- // return device.some((child: any) => child.id === item.equipmentId)
- // })
- // if (data.length) {
- // ElMessage.warning('选择设备重复')
- // return
- // }
// 多选
device.forEach((item) => {
if (list.value.every(citem => citem.equipmentId !== item.id)) {
@@ -143,6 +170,8 @@
id: null,
groupId: null,
editable: true,
+ checkDestinationName: item.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: item.checkDestination === '1' ? '' : item.checkOrganization,
planId: '',
planName: '',
planNo: '',
@@ -166,6 +195,8 @@
planId: '',
planName: '',
planNo: '',
+ checkDestinationName: device.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: device.checkDestination === '1' ? '' : device.checkOrganization,
}
list.value[selectRow.value] = row
}
@@ -194,7 +225,7 @@
-
+
批量增加
@@ -211,10 +242,10 @@
@row-dblclick="dblclickRow"
>
-
+
*{{ item.text }}
@@ -222,7 +253,7 @@
{{ scope.row[item.value] }}
@@ -230,10 +261,15 @@
选择
-
+
+
+ {{ scope.row[item.value] }}
diff --git a/src/views/tested/device/certificate/index.vue b/src/views/tested/device/certificate/index.vue
index 5a21904..532f3d3 100644
--- a/src/views/tested/device/certificate/index.vue
+++ b/src/views/tested/device/certificate/index.vue
@@ -184,7 +184,7 @@
// })
getUserDept().then((res) => {
// companyInfo.value = res.data
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/edit.vue b/src/views/tested/MeasurementPlan/plan/components/edit.vue
index c956592..90ef232 100644
--- a/src/views/tested/MeasurementPlan/plan/components/edit.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/edit.vue
@@ -10,6 +10,9 @@
import useUserStore from '@/store/modules/user'
import { SCHEDULE } from '@/utils/scheduleDict'
import { delTextBtn, editBtn, submitBtn } from '@/utils/applyBtns'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
@@ -36,11 +39,13 @@
approvalStatus: '', // 审批状态
createDeptId: '', // 创建单位id
createDeptName: '', // 创建单位名称
+ createCompanyName: '',
+ createCompanyId: '',
createTime: '', // 创建时间
createUserId: '', // 创建人id
createUserName: '', // 创建人姓名
decisionItem: '', // 可选决策项
- equipmentIds: [], // 关联设备id
+ relationList: [], // 关联设备id
id: '',
month: 0, // month
planCategory: '0', // 计划分类(字典值,原始/追加)
@@ -58,24 +63,60 @@
// planCategory: [{ required: true, message: '计划分类必选', trigger: ['blur', 'change'] }],
season: [{ required: true, message: '季度必填', trigger: ['blur', 'change'] }],
month: [{ required: true, message: '月份称必填', trigger: ['blur', 'change'] }],
+ createDeptId: [{ required: true, message: '部门必选', trigger: ['blur', 'change'] }],
+ createCompanyId: [{ required: true, message: '单位必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const processId = ref()
const disabledProcess = ref(false)
-const initDialog = () => {
+const companyList = ref([]) // 单位列表
+const deptList = ref([]) // 部门列表
+const isAdmin = ref(false) // 是否顶级单位
+const flag = ref(true)
+const initDialog = async () => {
dialogStatus.value = $route.params.type as string
ruleFormRef.value?.resetFields()
+ const fetchCommpany = async () => {
+ flag.value = true
+ // 获取单位
+ const res = await getUserDept()
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ isAdmin.value = true
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ isAdmin.value = false
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ ruleForm.value.createCompanyId = res.data.id
+ ruleForm.value.createCompanyName = res.data.fullName
+ if ($route.path.includes('create')) {
+ ruleForm.value.createDeptId = userStore.deptId
+ }
+ }
+ setTimeout(() => {
+ flag.value = false
+ })
+ }
if ($route.params.type === 'create') {
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ fetchCommpany()
ruleForm.value.planType = typeMap[$route.query.category as string]
typeFlag.value = typeMap[$route.query.category as string]
ruleForm.value.year = String(currentYear.value)
if ($route.query.category as string === 'year') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
ruleForm.value.planType = '0'
}
}
@@ -88,6 +129,7 @@
if (data.approvalStatusName === '草稿箱') {
disabledProcess.value = true
}
+ await fetchCommpany()
// 判断是否追加计划
if ($route.query.append) {
disabledProcess.value = true
@@ -96,24 +138,38 @@
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ await fetchCommpany()
if (typeFlag.value === '0') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
}
return
}
// 基本信息
ruleForm.value = {
...data,
- equipmentIds: [],
+ relationList: [],
}
// 获取计划列表
getInfoList(data.id, '').then((res) => {
- ruleForm.value.equipmentIds = res.data
+ ruleForm.value.relationList = res.data
})
}
}
+watch(() => ruleForm.value.createCompanyId, (newVal) => {
+ if (!flag) {
+ ruleForm.value.createDeptId = ''
+ }
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 获取计划分类列表
const planTypeList = ref()
const fetchTypeList = () => {
@@ -149,15 +205,15 @@
},
).then((_res) => {
disabledSave.value = true
- if ($route.query.category as string === 'season' || typeFlag.value === '1') {
- ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
- ruleForm.value.planType = '1'
- }
- else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
- ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
- ruleForm.value.planType = '2'
- }
- ruleForm.value.equipmentIds = tableRef.value.list.map((item: any) => item.equipmentId)
+ // if ($route.query.category as string === 'season' || typeFlag.value === '1') {
+ // ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
+ // ruleForm.value.planType = '1'
+ // }
+ // else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
+ // ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
+ // ruleForm.value.planType = '2'
+ // }
+ ruleForm.value.relationList = tableRef.value.list
// console.log(tableRef.value.list, 'tableRef.value.list')
if (submitId.value) {
ruleForm.value.id = submitId.value
@@ -178,7 +234,7 @@
}).catch(() => {
disabledSave.value = false
})
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
}
else {
@@ -206,7 +262,7 @@
ElMessage.success('已提交')
close()
}).catch((_err) => {
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
})
}
@@ -329,16 +385,16 @@
-
+
-
+
-
+
@@ -350,8 +406,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -377,8 +449,8 @@
-
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/list.vue b/src/views/tested/MeasurementPlan/plan/components/list.vue
index b38eb25..8b9a022 100644
--- a/src/views/tested/MeasurementPlan/plan/components/list.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/list.vue
@@ -3,11 +3,15 @@
import { reactive, ref } from 'vue'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import ApprovalDialog from './ApprovalDialog.vue'
+import summaryDialog from './summaryDialog.vue'
import { cancelPlan, delPlan, editPlan, exportPlan, getListPage, submitPlan } from '@/api/eqpt/measurementPlan/paln'
import { getDictByCode } from '@/api/system/dict'
import { SCHEDULE } from '@/utils/scheduleDict'
import { printJSON } from '@/utils/printUtils'
import { exportFile } from '@/utils/exportUtils'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $props = defineProps({
statusName: {
type: String,
@@ -33,9 +37,57 @@
planName: '', // 计划名称 false
planNo: '', // 计划编号 false
planType: '', // 计划类型(年/季/月) false
+ createCompanyId: '', // 创建单位
+ createDeptId: '', // 部门
+ manufactureNo: '', // 出厂编号
+ equipmentRemark: '', // 备注
offset: 1,
limit: 20,
})
+// 是否折叠查询条件
+const searchMore = ref(true)
+const expandSearch = () => {
+ searchMore.value = !searchMore.value
+}
+// 创建单位
+const companyList = ref<{ id: string; value: string; name: string }[]>([])
+const deptList = ref([])
+const fetchCommpany = () => {
+ // 获取单位
+ getUserDept().then((res) => {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ listQuery.createCompanyId = ''
+ }
+ })
+ // 获取部门
+ // getUserDeptSon({}).then((res) => {
+ // console.log(res.data, '部门')
+ // })
+}
+fetchCommpany()
+watch(() => listQuery.createCompanyId, (newVal) => {
+ listQuery.createDeptId = ''
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 开始结束时间
const datetimerange = ref()
watch(() => datetimerange.value, (newVal) => {
@@ -66,6 +118,11 @@
},
{
text: '创建单位',
+ value: 'createCompanyName',
+ align: 'center',
+ },
+ {
+ text: '部门',
value: 'createDeptName',
align: 'center',
},
@@ -94,7 +151,6 @@
// listQuery.offset = 1
// }
// console.log(getListPage)
- console.log(listQuery, 'listQuery')
getListPage(listQuery, $props.statusName).then((response) => {
list.value = response.data.rows
total.value = Number(response.data.total)
@@ -132,6 +188,10 @@
listQuery.createTimeEnd = ''
listQuery.planNo = ''
listQuery.planCategory = ''
+ listQuery.createCompanyId = ''
+ listQuery.createDeptId = ''
+ listQuery.manufactureNo = ''
+ listQuery.equipmentRemark = ''
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -295,6 +355,11 @@
deep: true,
immediate: true,
})
+// 汇总监督计划
+const summaryRef = ref()
+const summary = () => {
+ summaryRef.value.initDialog()
+}
const permUrl = ref({
edit: '/tested/pmetering/plan/edit',
del: '/tested/pmetering/plan/delete',
@@ -310,32 +375,68 @@
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 汇总年度计划
+
-
-
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
index 6aaca0b..ac10dc9 100644
--- a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
@@ -7,33 +7,27 @@
import { getDeptTreeList } from '@/api/system/dept'
import useUserStore from '@/store/modules/user'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const emits = defineEmits(['add'])
const userStore = useUserStore()
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -73,6 +67,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -82,10 +91,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -93,11 +101,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
// 获取使用状态列表
const useStatusList = ref()
@@ -121,24 +124,23 @@
const search = () => {
fetchData()
}
-const selectTreeRef = ref()
// 重置
const reset = () => {
datetimerange.value = []
listQuery.value = {
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -201,8 +203,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -213,32 +224,73 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -249,9 +301,10 @@
/>
-
- 只看我负责的
-
+
+
+
+
@@ -269,6 +322,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summary.vue b/src/views/tested/MeasurementPlan/plan/components/summary.vue
new file mode 100644
index 0000000..53b7158
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summary.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+ 导出
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
new file mode 100644
index 0000000..2ecb05b
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/table.vue b/src/views/tested/MeasurementPlan/plan/components/table.vue
index 52ed729..a2843ce 100644
--- a/src/views/tested/MeasurementPlan/plan/components/table.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/table.vue
@@ -18,50 +18,83 @@
text: '设备名称',
value: 'equipmentName',
required: true,
- isSelect: false, // 是否下拉框
- isBtn: true,
- },
- {
- text: '统一编号',
- value: 'equipmentNo',
- required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ width: '200',
+ type: 'btn',
},
{
text: '规格型号',
value: 'model',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '出厂编号',
+ value: 'manufactureNo',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '生产厂家',
+ value: 'manufacturer',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ required: false,
+ type: 'text',
},
{
text: '负责人',
value: 'directorName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
text: '计量标识',
value: 'meterIdentifyName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
+ required: false,
+ type: 'text',
},
{
text: '证书有效期',
value: 'certificateValid',
+ width: '160',
required: false,
- isSelect: true, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
- text: '安装位置',
- value: 'installLocation',
+ text: '检定去向',
+ value: 'checkDestinationName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '计划送检时间',
+ value: 'planDeliverTime',
+ width: '180',
+ required: true,
+ type: 'date',
+ },
+ {
+ text: '计划送检单位',
+ value: 'planMeasureCompany',
+ width: '160',
+ required: true,
+ type: 'input',
},
])
const list = ref([])
@@ -93,13 +126,17 @@
if (checkCertificateList()) {
setAllRowReadable()
list.value.push({
- equipmentNo: '',
equipmentName: '',
model: '',
+ manufactureNo: '',
+ manufacturer: '',
+ deptName: '',
+ usePosition: '',
directorName: '',
- meterIdentify: '',
+ meterIdentifyName: '',
+ checkOrganization: '',
certificateValid: '',
- installLocation: '',
+ checkDestinationName: '',
editable: true,
} as any)
}
@@ -117,23 +154,13 @@
const selectRow = ref()
const select = (text: string, index: any) => {
if (text === '设备名称') {
- // deviceRef.value.initDialog(false)
deviceSingeRef.value.initDialog()
selectRow.value = index
}
}
// 选择设备
const confirm = (device: any) => {
- // 判断是单选还是多选
-
if (Array.isArray(device)) {
- // const data = list.value.filter((item) => {
- // return device.some((child: any) => child.id === item.equipmentId)
- // })
- // if (data.length) {
- // ElMessage.warning('选择设备重复')
- // return
- // }
// 多选
device.forEach((item) => {
if (list.value.every(citem => citem.equipmentId !== item.id)) {
@@ -143,6 +170,8 @@
id: null,
groupId: null,
editable: true,
+ checkDestinationName: item.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: item.checkDestination === '1' ? '' : item.checkOrganization,
planId: '',
planName: '',
planNo: '',
@@ -166,6 +195,8 @@
planId: '',
planName: '',
planNo: '',
+ checkDestinationName: device.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: device.checkDestination === '1' ? '' : device.checkOrganization,
}
list.value[selectRow.value] = row
}
@@ -194,7 +225,7 @@
-
+
批量增加
@@ -211,10 +242,10 @@
@row-dblclick="dblclickRow"
>
-
+
*{{ item.text }}
@@ -222,7 +253,7 @@
{{ scope.row[item.value] }}
@@ -230,10 +261,15 @@
选择
-
+
+
+ {{ scope.row[item.value] }}
diff --git a/src/views/tested/device/certificate/index.vue b/src/views/tested/device/certificate/index.vue
index 5a21904..532f3d3 100644
--- a/src/views/tested/device/certificate/index.vue
+++ b/src/views/tested/device/certificate/index.vue
@@ -184,7 +184,7 @@
// })
getUserDept().then((res) => {
// companyInfo.value = res.data
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
diff --git a/src/views/tested/device/group/components/list.vue b/src/views/tested/device/group/components/list.vue
index d628fb9..c38d35d 100644
--- a/src/views/tested/device/group/components/list.vue
+++ b/src/views/tested/device/group/components/list.vue
@@ -5,6 +5,7 @@
import useUserStore from '@/store/modules/user'
import { delGroup, getGroupList } from '@/api/eqpt/device/group'
import { getPostList } from '@/api/system/post'
+import { toTreeList } from '@/utils/structure'
import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
import { getDeptList, getDeptTree, getDeptTreeList, getDeptTreeListByPid } from '@/api/system/dept'
const { proxy } = getCurrentInstance() as any
@@ -171,7 +172,7 @@
// })
getUserDept().then((res) => {
// companyInfo.value = res.data
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
@@ -191,7 +192,7 @@
// 三级联动
watch(() => listQuery.companyId, (newVal) => {
listQuery.deptId = ''
- listQuery.subSystemId = ''
+ // listQuery.subSystemId = ''
// if (newVal) {
// getDeptTree({ pid: newVal }).then((res) => {
// deptList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
@@ -203,8 +204,11 @@
// systemList.value = systemListAll.value
// }
if (newVal) {
- getUserDeptSon({ companyId: newVal }).then((res) => {
- deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // getUserDeptSon({ companyId: newVal }).then((res) => {
+ // deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // })
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id }))) as any[]
})
}
else {
@@ -213,18 +217,18 @@
}, {
deep: true,
})
-watch(() => listQuery.deptId, (newVal) => {
- if (newVal) {
- getDeptTreeList({ pid: newVal }).then((res) => {
- systemList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.name }))
- })
- }
- else {
- systemList.value = systemListAll.value
- }
-}, {
- deep: true,
-})
+// watch(() => listQuery.deptId, (newVal) => {
+// if (newVal) {
+// getDeptTreeList({ pid: newVal }).then((res) => {
+// systemList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.name }))
+// })
+// }
+// else {
+// systemList.value = systemListAll.value
+// }
+// }, {
+// deep: true,
+// })
const permUrl = ref({
add: '/tested/device/group/add',
@@ -247,17 +251,23 @@
-
+
+
-
-
-
+
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/edit.vue b/src/views/tested/MeasurementPlan/plan/components/edit.vue
index c956592..90ef232 100644
--- a/src/views/tested/MeasurementPlan/plan/components/edit.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/edit.vue
@@ -10,6 +10,9 @@
import useUserStore from '@/store/modules/user'
import { SCHEDULE } from '@/utils/scheduleDict'
import { delTextBtn, editBtn, submitBtn } from '@/utils/applyBtns'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
@@ -36,11 +39,13 @@
approvalStatus: '', // 审批状态
createDeptId: '', // 创建单位id
createDeptName: '', // 创建单位名称
+ createCompanyName: '',
+ createCompanyId: '',
createTime: '', // 创建时间
createUserId: '', // 创建人id
createUserName: '', // 创建人姓名
decisionItem: '', // 可选决策项
- equipmentIds: [], // 关联设备id
+ relationList: [], // 关联设备id
id: '',
month: 0, // month
planCategory: '0', // 计划分类(字典值,原始/追加)
@@ -58,24 +63,60 @@
// planCategory: [{ required: true, message: '计划分类必选', trigger: ['blur', 'change'] }],
season: [{ required: true, message: '季度必填', trigger: ['blur', 'change'] }],
month: [{ required: true, message: '月份称必填', trigger: ['blur', 'change'] }],
+ createDeptId: [{ required: true, message: '部门必选', trigger: ['blur', 'change'] }],
+ createCompanyId: [{ required: true, message: '单位必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const processId = ref()
const disabledProcess = ref(false)
-const initDialog = () => {
+const companyList = ref([]) // 单位列表
+const deptList = ref([]) // 部门列表
+const isAdmin = ref(false) // 是否顶级单位
+const flag = ref(true)
+const initDialog = async () => {
dialogStatus.value = $route.params.type as string
ruleFormRef.value?.resetFields()
+ const fetchCommpany = async () => {
+ flag.value = true
+ // 获取单位
+ const res = await getUserDept()
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ isAdmin.value = true
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ isAdmin.value = false
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ ruleForm.value.createCompanyId = res.data.id
+ ruleForm.value.createCompanyName = res.data.fullName
+ if ($route.path.includes('create')) {
+ ruleForm.value.createDeptId = userStore.deptId
+ }
+ }
+ setTimeout(() => {
+ flag.value = false
+ })
+ }
if ($route.params.type === 'create') {
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ fetchCommpany()
ruleForm.value.planType = typeMap[$route.query.category as string]
typeFlag.value = typeMap[$route.query.category as string]
ruleForm.value.year = String(currentYear.value)
if ($route.query.category as string === 'year') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
ruleForm.value.planType = '0'
}
}
@@ -88,6 +129,7 @@
if (data.approvalStatusName === '草稿箱') {
disabledProcess.value = true
}
+ await fetchCommpany()
// 判断是否追加计划
if ($route.query.append) {
disabledProcess.value = true
@@ -96,24 +138,38 @@
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ await fetchCommpany()
if (typeFlag.value === '0') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
}
return
}
// 基本信息
ruleForm.value = {
...data,
- equipmentIds: [],
+ relationList: [],
}
// 获取计划列表
getInfoList(data.id, '').then((res) => {
- ruleForm.value.equipmentIds = res.data
+ ruleForm.value.relationList = res.data
})
}
}
+watch(() => ruleForm.value.createCompanyId, (newVal) => {
+ if (!flag) {
+ ruleForm.value.createDeptId = ''
+ }
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 获取计划分类列表
const planTypeList = ref()
const fetchTypeList = () => {
@@ -149,15 +205,15 @@
},
).then((_res) => {
disabledSave.value = true
- if ($route.query.category as string === 'season' || typeFlag.value === '1') {
- ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
- ruleForm.value.planType = '1'
- }
- else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
- ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
- ruleForm.value.planType = '2'
- }
- ruleForm.value.equipmentIds = tableRef.value.list.map((item: any) => item.equipmentId)
+ // if ($route.query.category as string === 'season' || typeFlag.value === '1') {
+ // ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
+ // ruleForm.value.planType = '1'
+ // }
+ // else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
+ // ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
+ // ruleForm.value.planType = '2'
+ // }
+ ruleForm.value.relationList = tableRef.value.list
// console.log(tableRef.value.list, 'tableRef.value.list')
if (submitId.value) {
ruleForm.value.id = submitId.value
@@ -178,7 +234,7 @@
}).catch(() => {
disabledSave.value = false
})
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
}
else {
@@ -206,7 +262,7 @@
ElMessage.success('已提交')
close()
}).catch((_err) => {
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
})
}
@@ -329,16 +385,16 @@
-
+
-
+
-
+
@@ -350,8 +406,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -377,8 +449,8 @@
-
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/list.vue b/src/views/tested/MeasurementPlan/plan/components/list.vue
index b38eb25..8b9a022 100644
--- a/src/views/tested/MeasurementPlan/plan/components/list.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/list.vue
@@ -3,11 +3,15 @@
import { reactive, ref } from 'vue'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import ApprovalDialog from './ApprovalDialog.vue'
+import summaryDialog from './summaryDialog.vue'
import { cancelPlan, delPlan, editPlan, exportPlan, getListPage, submitPlan } from '@/api/eqpt/measurementPlan/paln'
import { getDictByCode } from '@/api/system/dict'
import { SCHEDULE } from '@/utils/scheduleDict'
import { printJSON } from '@/utils/printUtils'
import { exportFile } from '@/utils/exportUtils'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $props = defineProps({
statusName: {
type: String,
@@ -33,9 +37,57 @@
planName: '', // 计划名称 false
planNo: '', // 计划编号 false
planType: '', // 计划类型(年/季/月) false
+ createCompanyId: '', // 创建单位
+ createDeptId: '', // 部门
+ manufactureNo: '', // 出厂编号
+ equipmentRemark: '', // 备注
offset: 1,
limit: 20,
})
+// 是否折叠查询条件
+const searchMore = ref(true)
+const expandSearch = () => {
+ searchMore.value = !searchMore.value
+}
+// 创建单位
+const companyList = ref<{ id: string; value: string; name: string }[]>([])
+const deptList = ref([])
+const fetchCommpany = () => {
+ // 获取单位
+ getUserDept().then((res) => {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ listQuery.createCompanyId = ''
+ }
+ })
+ // 获取部门
+ // getUserDeptSon({}).then((res) => {
+ // console.log(res.data, '部门')
+ // })
+}
+fetchCommpany()
+watch(() => listQuery.createCompanyId, (newVal) => {
+ listQuery.createDeptId = ''
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 开始结束时间
const datetimerange = ref()
watch(() => datetimerange.value, (newVal) => {
@@ -66,6 +118,11 @@
},
{
text: '创建单位',
+ value: 'createCompanyName',
+ align: 'center',
+ },
+ {
+ text: '部门',
value: 'createDeptName',
align: 'center',
},
@@ -94,7 +151,6 @@
// listQuery.offset = 1
// }
// console.log(getListPage)
- console.log(listQuery, 'listQuery')
getListPage(listQuery, $props.statusName).then((response) => {
list.value = response.data.rows
total.value = Number(response.data.total)
@@ -132,6 +188,10 @@
listQuery.createTimeEnd = ''
listQuery.planNo = ''
listQuery.planCategory = ''
+ listQuery.createCompanyId = ''
+ listQuery.createDeptId = ''
+ listQuery.manufactureNo = ''
+ listQuery.equipmentRemark = ''
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -295,6 +355,11 @@
deep: true,
immediate: true,
})
+// 汇总监督计划
+const summaryRef = ref()
+const summary = () => {
+ summaryRef.value.initDialog()
+}
const permUrl = ref({
edit: '/tested/pmetering/plan/edit',
del: '/tested/pmetering/plan/delete',
@@ -310,32 +375,68 @@
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 汇总年度计划
+
-
-
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
index 6aaca0b..ac10dc9 100644
--- a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
@@ -7,33 +7,27 @@
import { getDeptTreeList } from '@/api/system/dept'
import useUserStore from '@/store/modules/user'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const emits = defineEmits(['add'])
const userStore = useUserStore()
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -73,6 +67,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -82,10 +91,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -93,11 +101,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
// 获取使用状态列表
const useStatusList = ref()
@@ -121,24 +124,23 @@
const search = () => {
fetchData()
}
-const selectTreeRef = ref()
// 重置
const reset = () => {
datetimerange.value = []
listQuery.value = {
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -201,8 +203,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -213,32 +224,73 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -249,9 +301,10 @@
/>
-
- 只看我负责的
-
+
+
+
+
@@ -269,6 +322,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summary.vue b/src/views/tested/MeasurementPlan/plan/components/summary.vue
new file mode 100644
index 0000000..53b7158
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summary.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+ 导出
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
new file mode 100644
index 0000000..2ecb05b
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/table.vue b/src/views/tested/MeasurementPlan/plan/components/table.vue
index 52ed729..a2843ce 100644
--- a/src/views/tested/MeasurementPlan/plan/components/table.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/table.vue
@@ -18,50 +18,83 @@
text: '设备名称',
value: 'equipmentName',
required: true,
- isSelect: false, // 是否下拉框
- isBtn: true,
- },
- {
- text: '统一编号',
- value: 'equipmentNo',
- required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ width: '200',
+ type: 'btn',
},
{
text: '规格型号',
value: 'model',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '出厂编号',
+ value: 'manufactureNo',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '生产厂家',
+ value: 'manufacturer',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ required: false,
+ type: 'text',
},
{
text: '负责人',
value: 'directorName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
text: '计量标识',
value: 'meterIdentifyName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
+ required: false,
+ type: 'text',
},
{
text: '证书有效期',
value: 'certificateValid',
+ width: '160',
required: false,
- isSelect: true, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
- text: '安装位置',
- value: 'installLocation',
+ text: '检定去向',
+ value: 'checkDestinationName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '计划送检时间',
+ value: 'planDeliverTime',
+ width: '180',
+ required: true,
+ type: 'date',
+ },
+ {
+ text: '计划送检单位',
+ value: 'planMeasureCompany',
+ width: '160',
+ required: true,
+ type: 'input',
},
])
const list = ref([])
@@ -93,13 +126,17 @@
if (checkCertificateList()) {
setAllRowReadable()
list.value.push({
- equipmentNo: '',
equipmentName: '',
model: '',
+ manufactureNo: '',
+ manufacturer: '',
+ deptName: '',
+ usePosition: '',
directorName: '',
- meterIdentify: '',
+ meterIdentifyName: '',
+ checkOrganization: '',
certificateValid: '',
- installLocation: '',
+ checkDestinationName: '',
editable: true,
} as any)
}
@@ -117,23 +154,13 @@
const selectRow = ref()
const select = (text: string, index: any) => {
if (text === '设备名称') {
- // deviceRef.value.initDialog(false)
deviceSingeRef.value.initDialog()
selectRow.value = index
}
}
// 选择设备
const confirm = (device: any) => {
- // 判断是单选还是多选
-
if (Array.isArray(device)) {
- // const data = list.value.filter((item) => {
- // return device.some((child: any) => child.id === item.equipmentId)
- // })
- // if (data.length) {
- // ElMessage.warning('选择设备重复')
- // return
- // }
// 多选
device.forEach((item) => {
if (list.value.every(citem => citem.equipmentId !== item.id)) {
@@ -143,6 +170,8 @@
id: null,
groupId: null,
editable: true,
+ checkDestinationName: item.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: item.checkDestination === '1' ? '' : item.checkOrganization,
planId: '',
planName: '',
planNo: '',
@@ -166,6 +195,8 @@
planId: '',
planName: '',
planNo: '',
+ checkDestinationName: device.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: device.checkDestination === '1' ? '' : device.checkOrganization,
}
list.value[selectRow.value] = row
}
@@ -194,7 +225,7 @@
-
+
批量增加
@@ -211,10 +242,10 @@
@row-dblclick="dblclickRow"
>
-
+
*{{ item.text }}
@@ -222,7 +253,7 @@
{{ scope.row[item.value] }}
@@ -230,10 +261,15 @@
选择
-
+
+
+ {{ scope.row[item.value] }}
diff --git a/src/views/tested/device/certificate/index.vue b/src/views/tested/device/certificate/index.vue
index 5a21904..532f3d3 100644
--- a/src/views/tested/device/certificate/index.vue
+++ b/src/views/tested/device/certificate/index.vue
@@ -184,7 +184,7 @@
// })
getUserDept().then((res) => {
// companyInfo.value = res.data
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
diff --git a/src/views/tested/device/group/components/list.vue b/src/views/tested/device/group/components/list.vue
index d628fb9..c38d35d 100644
--- a/src/views/tested/device/group/components/list.vue
+++ b/src/views/tested/device/group/components/list.vue
@@ -5,6 +5,7 @@
import useUserStore from '@/store/modules/user'
import { delGroup, getGroupList } from '@/api/eqpt/device/group'
import { getPostList } from '@/api/system/post'
+import { toTreeList } from '@/utils/structure'
import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
import { getDeptList, getDeptTree, getDeptTreeList, getDeptTreeListByPid } from '@/api/system/dept'
const { proxy } = getCurrentInstance() as any
@@ -171,7 +172,7 @@
// })
getUserDept().then((res) => {
// companyInfo.value = res.data
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
@@ -191,7 +192,7 @@
// 三级联动
watch(() => listQuery.companyId, (newVal) => {
listQuery.deptId = ''
- listQuery.subSystemId = ''
+ // listQuery.subSystemId = ''
// if (newVal) {
// getDeptTree({ pid: newVal }).then((res) => {
// deptList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
@@ -203,8 +204,11 @@
// systemList.value = systemListAll.value
// }
if (newVal) {
- getUserDeptSon({ companyId: newVal }).then((res) => {
- deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // getUserDeptSon({ companyId: newVal }).then((res) => {
+ // deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // })
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id }))) as any[]
})
}
else {
@@ -213,18 +217,18 @@
}, {
deep: true,
})
-watch(() => listQuery.deptId, (newVal) => {
- if (newVal) {
- getDeptTreeList({ pid: newVal }).then((res) => {
- systemList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.name }))
- })
- }
- else {
- systemList.value = systemListAll.value
- }
-}, {
- deep: true,
-})
+// watch(() => listQuery.deptId, (newVal) => {
+// if (newVal) {
+// getDeptTreeList({ pid: newVal }).then((res) => {
+// systemList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.name }))
+// })
+// }
+// else {
+// systemList.value = systemListAll.value
+// }
+// }, {
+// deep: true,
+// })
const permUrl = ref({
add: '/tested/device/group/add',
@@ -247,17 +251,23 @@
-
+
+
-
-
-
+
diff --git a/src/views/tested/device/group/components/selectDevice.vue b/src/views/tested/device/group/components/selectDevice.vue
index 143793b..f3cfa2d 100644
--- a/src/views/tested/device/group/components/selectDevice.vue
+++ b/src/views/tested/device/group/components/selectDevice.vue
@@ -7,12 +7,15 @@
import { getInfoListPage } from '@/api/eqpt/device/info'
import { getDeptTreeList } from '@/api/system/dept'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const $props = defineProps({
// 使用状态列表
// 主要用于 状态管理时 过滤不同的设备使用状态
needStatus: {
type: Boolean,
- default: true,
+ default: false,
},
// 不同设备状态
// 主要用于 状态管理时 过滤不同的设备使用状态
@@ -26,28 +29,20 @@
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
+ usageStatus: '',
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -87,6 +82,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -96,10 +106,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -107,11 +116,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
const statusDict = ref<{ [key: string]: string[] }>({
1: ['在用', '禁用', '延用'], // 封存
@@ -175,19 +179,20 @@
const reset = () => {
datetimerange.value = []
listQuery.value = {
+ usageStatus: '',
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -226,8 +231,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -238,44 +252,92 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
+
+
+
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
- 只看我负责的
-
+
+
+
+
@@ -296,6 +358,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/edit.vue b/src/views/tested/MeasurementPlan/plan/components/edit.vue
index c956592..90ef232 100644
--- a/src/views/tested/MeasurementPlan/plan/components/edit.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/edit.vue
@@ -10,6 +10,9 @@
import useUserStore from '@/store/modules/user'
import { SCHEDULE } from '@/utils/scheduleDict'
import { delTextBtn, editBtn, submitBtn } from '@/utils/applyBtns'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
@@ -36,11 +39,13 @@
approvalStatus: '', // 审批状态
createDeptId: '', // 创建单位id
createDeptName: '', // 创建单位名称
+ createCompanyName: '',
+ createCompanyId: '',
createTime: '', // 创建时间
createUserId: '', // 创建人id
createUserName: '', // 创建人姓名
decisionItem: '', // 可选决策项
- equipmentIds: [], // 关联设备id
+ relationList: [], // 关联设备id
id: '',
month: 0, // month
planCategory: '0', // 计划分类(字典值,原始/追加)
@@ -58,24 +63,60 @@
// planCategory: [{ required: true, message: '计划分类必选', trigger: ['blur', 'change'] }],
season: [{ required: true, message: '季度必填', trigger: ['blur', 'change'] }],
month: [{ required: true, message: '月份称必填', trigger: ['blur', 'change'] }],
+ createDeptId: [{ required: true, message: '部门必选', trigger: ['blur', 'change'] }],
+ createCompanyId: [{ required: true, message: '单位必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const processId = ref()
const disabledProcess = ref(false)
-const initDialog = () => {
+const companyList = ref([]) // 单位列表
+const deptList = ref([]) // 部门列表
+const isAdmin = ref(false) // 是否顶级单位
+const flag = ref(true)
+const initDialog = async () => {
dialogStatus.value = $route.params.type as string
ruleFormRef.value?.resetFields()
+ const fetchCommpany = async () => {
+ flag.value = true
+ // 获取单位
+ const res = await getUserDept()
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ isAdmin.value = true
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ isAdmin.value = false
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ ruleForm.value.createCompanyId = res.data.id
+ ruleForm.value.createCompanyName = res.data.fullName
+ if ($route.path.includes('create')) {
+ ruleForm.value.createDeptId = userStore.deptId
+ }
+ }
+ setTimeout(() => {
+ flag.value = false
+ })
+ }
if ($route.params.type === 'create') {
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ fetchCommpany()
ruleForm.value.planType = typeMap[$route.query.category as string]
typeFlag.value = typeMap[$route.query.category as string]
ruleForm.value.year = String(currentYear.value)
if ($route.query.category as string === 'year') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
ruleForm.value.planType = '0'
}
}
@@ -88,6 +129,7 @@
if (data.approvalStatusName === '草稿箱') {
disabledProcess.value = true
}
+ await fetchCommpany()
// 判断是否追加计划
if ($route.query.append) {
disabledProcess.value = true
@@ -96,24 +138,38 @@
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ await fetchCommpany()
if (typeFlag.value === '0') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
}
return
}
// 基本信息
ruleForm.value = {
...data,
- equipmentIds: [],
+ relationList: [],
}
// 获取计划列表
getInfoList(data.id, '').then((res) => {
- ruleForm.value.equipmentIds = res.data
+ ruleForm.value.relationList = res.data
})
}
}
+watch(() => ruleForm.value.createCompanyId, (newVal) => {
+ if (!flag) {
+ ruleForm.value.createDeptId = ''
+ }
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 获取计划分类列表
const planTypeList = ref()
const fetchTypeList = () => {
@@ -149,15 +205,15 @@
},
).then((_res) => {
disabledSave.value = true
- if ($route.query.category as string === 'season' || typeFlag.value === '1') {
- ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
- ruleForm.value.planType = '1'
- }
- else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
- ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
- ruleForm.value.planType = '2'
- }
- ruleForm.value.equipmentIds = tableRef.value.list.map((item: any) => item.equipmentId)
+ // if ($route.query.category as string === 'season' || typeFlag.value === '1') {
+ // ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
+ // ruleForm.value.planType = '1'
+ // }
+ // else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
+ // ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
+ // ruleForm.value.planType = '2'
+ // }
+ ruleForm.value.relationList = tableRef.value.list
// console.log(tableRef.value.list, 'tableRef.value.list')
if (submitId.value) {
ruleForm.value.id = submitId.value
@@ -178,7 +234,7 @@
}).catch(() => {
disabledSave.value = false
})
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
}
else {
@@ -206,7 +262,7 @@
ElMessage.success('已提交')
close()
}).catch((_err) => {
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
})
}
@@ -329,16 +385,16 @@
-
+
-
+
-
+
@@ -350,8 +406,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -377,8 +449,8 @@
-
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/list.vue b/src/views/tested/MeasurementPlan/plan/components/list.vue
index b38eb25..8b9a022 100644
--- a/src/views/tested/MeasurementPlan/plan/components/list.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/list.vue
@@ -3,11 +3,15 @@
import { reactive, ref } from 'vue'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import ApprovalDialog from './ApprovalDialog.vue'
+import summaryDialog from './summaryDialog.vue'
import { cancelPlan, delPlan, editPlan, exportPlan, getListPage, submitPlan } from '@/api/eqpt/measurementPlan/paln'
import { getDictByCode } from '@/api/system/dict'
import { SCHEDULE } from '@/utils/scheduleDict'
import { printJSON } from '@/utils/printUtils'
import { exportFile } from '@/utils/exportUtils'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $props = defineProps({
statusName: {
type: String,
@@ -33,9 +37,57 @@
planName: '', // 计划名称 false
planNo: '', // 计划编号 false
planType: '', // 计划类型(年/季/月) false
+ createCompanyId: '', // 创建单位
+ createDeptId: '', // 部门
+ manufactureNo: '', // 出厂编号
+ equipmentRemark: '', // 备注
offset: 1,
limit: 20,
})
+// 是否折叠查询条件
+const searchMore = ref(true)
+const expandSearch = () => {
+ searchMore.value = !searchMore.value
+}
+// 创建单位
+const companyList = ref<{ id: string; value: string; name: string }[]>([])
+const deptList = ref([])
+const fetchCommpany = () => {
+ // 获取单位
+ getUserDept().then((res) => {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ listQuery.createCompanyId = ''
+ }
+ })
+ // 获取部门
+ // getUserDeptSon({}).then((res) => {
+ // console.log(res.data, '部门')
+ // })
+}
+fetchCommpany()
+watch(() => listQuery.createCompanyId, (newVal) => {
+ listQuery.createDeptId = ''
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 开始结束时间
const datetimerange = ref()
watch(() => datetimerange.value, (newVal) => {
@@ -66,6 +118,11 @@
},
{
text: '创建单位',
+ value: 'createCompanyName',
+ align: 'center',
+ },
+ {
+ text: '部门',
value: 'createDeptName',
align: 'center',
},
@@ -94,7 +151,6 @@
// listQuery.offset = 1
// }
// console.log(getListPage)
- console.log(listQuery, 'listQuery')
getListPage(listQuery, $props.statusName).then((response) => {
list.value = response.data.rows
total.value = Number(response.data.total)
@@ -132,6 +188,10 @@
listQuery.createTimeEnd = ''
listQuery.planNo = ''
listQuery.planCategory = ''
+ listQuery.createCompanyId = ''
+ listQuery.createDeptId = ''
+ listQuery.manufactureNo = ''
+ listQuery.equipmentRemark = ''
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -295,6 +355,11 @@
deep: true,
immediate: true,
})
+// 汇总监督计划
+const summaryRef = ref()
+const summary = () => {
+ summaryRef.value.initDialog()
+}
const permUrl = ref({
edit: '/tested/pmetering/plan/edit',
del: '/tested/pmetering/plan/delete',
@@ -310,32 +375,68 @@
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 汇总年度计划
+
-
-
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
index 6aaca0b..ac10dc9 100644
--- a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
@@ -7,33 +7,27 @@
import { getDeptTreeList } from '@/api/system/dept'
import useUserStore from '@/store/modules/user'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const emits = defineEmits(['add'])
const userStore = useUserStore()
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -73,6 +67,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -82,10 +91,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -93,11 +101,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
// 获取使用状态列表
const useStatusList = ref()
@@ -121,24 +124,23 @@
const search = () => {
fetchData()
}
-const selectTreeRef = ref()
// 重置
const reset = () => {
datetimerange.value = []
listQuery.value = {
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -201,8 +203,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -213,32 +224,73 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -249,9 +301,10 @@
/>
-
- 只看我负责的
-
+
+
+
+
@@ -269,6 +322,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summary.vue b/src/views/tested/MeasurementPlan/plan/components/summary.vue
new file mode 100644
index 0000000..53b7158
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summary.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+ 导出
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
new file mode 100644
index 0000000..2ecb05b
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/table.vue b/src/views/tested/MeasurementPlan/plan/components/table.vue
index 52ed729..a2843ce 100644
--- a/src/views/tested/MeasurementPlan/plan/components/table.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/table.vue
@@ -18,50 +18,83 @@
text: '设备名称',
value: 'equipmentName',
required: true,
- isSelect: false, // 是否下拉框
- isBtn: true,
- },
- {
- text: '统一编号',
- value: 'equipmentNo',
- required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ width: '200',
+ type: 'btn',
},
{
text: '规格型号',
value: 'model',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '出厂编号',
+ value: 'manufactureNo',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '生产厂家',
+ value: 'manufacturer',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ required: false,
+ type: 'text',
},
{
text: '负责人',
value: 'directorName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
text: '计量标识',
value: 'meterIdentifyName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
+ required: false,
+ type: 'text',
},
{
text: '证书有效期',
value: 'certificateValid',
+ width: '160',
required: false,
- isSelect: true, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
- text: '安装位置',
- value: 'installLocation',
+ text: '检定去向',
+ value: 'checkDestinationName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '计划送检时间',
+ value: 'planDeliverTime',
+ width: '180',
+ required: true,
+ type: 'date',
+ },
+ {
+ text: '计划送检单位',
+ value: 'planMeasureCompany',
+ width: '160',
+ required: true,
+ type: 'input',
},
])
const list = ref([])
@@ -93,13 +126,17 @@
if (checkCertificateList()) {
setAllRowReadable()
list.value.push({
- equipmentNo: '',
equipmentName: '',
model: '',
+ manufactureNo: '',
+ manufacturer: '',
+ deptName: '',
+ usePosition: '',
directorName: '',
- meterIdentify: '',
+ meterIdentifyName: '',
+ checkOrganization: '',
certificateValid: '',
- installLocation: '',
+ checkDestinationName: '',
editable: true,
} as any)
}
@@ -117,23 +154,13 @@
const selectRow = ref()
const select = (text: string, index: any) => {
if (text === '设备名称') {
- // deviceRef.value.initDialog(false)
deviceSingeRef.value.initDialog()
selectRow.value = index
}
}
// 选择设备
const confirm = (device: any) => {
- // 判断是单选还是多选
-
if (Array.isArray(device)) {
- // const data = list.value.filter((item) => {
- // return device.some((child: any) => child.id === item.equipmentId)
- // })
- // if (data.length) {
- // ElMessage.warning('选择设备重复')
- // return
- // }
// 多选
device.forEach((item) => {
if (list.value.every(citem => citem.equipmentId !== item.id)) {
@@ -143,6 +170,8 @@
id: null,
groupId: null,
editable: true,
+ checkDestinationName: item.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: item.checkDestination === '1' ? '' : item.checkOrganization,
planId: '',
planName: '',
planNo: '',
@@ -166,6 +195,8 @@
planId: '',
planName: '',
planNo: '',
+ checkDestinationName: device.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: device.checkDestination === '1' ? '' : device.checkOrganization,
}
list.value[selectRow.value] = row
}
@@ -194,7 +225,7 @@
-
+
批量增加
@@ -211,10 +242,10 @@
@row-dblclick="dblclickRow"
>
-
+
*{{ item.text }}
@@ -222,7 +253,7 @@
{{ scope.row[item.value] }}
@@ -230,10 +261,15 @@
选择
-
+
+
+ {{ scope.row[item.value] }}
diff --git a/src/views/tested/device/certificate/index.vue b/src/views/tested/device/certificate/index.vue
index 5a21904..532f3d3 100644
--- a/src/views/tested/device/certificate/index.vue
+++ b/src/views/tested/device/certificate/index.vue
@@ -184,7 +184,7 @@
// })
getUserDept().then((res) => {
// companyInfo.value = res.data
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
diff --git a/src/views/tested/device/group/components/list.vue b/src/views/tested/device/group/components/list.vue
index d628fb9..c38d35d 100644
--- a/src/views/tested/device/group/components/list.vue
+++ b/src/views/tested/device/group/components/list.vue
@@ -5,6 +5,7 @@
import useUserStore from '@/store/modules/user'
import { delGroup, getGroupList } from '@/api/eqpt/device/group'
import { getPostList } from '@/api/system/post'
+import { toTreeList } from '@/utils/structure'
import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
import { getDeptList, getDeptTree, getDeptTreeList, getDeptTreeListByPid } from '@/api/system/dept'
const { proxy } = getCurrentInstance() as any
@@ -171,7 +172,7 @@
// })
getUserDept().then((res) => {
// companyInfo.value = res.data
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
@@ -191,7 +192,7 @@
// 三级联动
watch(() => listQuery.companyId, (newVal) => {
listQuery.deptId = ''
- listQuery.subSystemId = ''
+ // listQuery.subSystemId = ''
// if (newVal) {
// getDeptTree({ pid: newVal }).then((res) => {
// deptList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
@@ -203,8 +204,11 @@
// systemList.value = systemListAll.value
// }
if (newVal) {
- getUserDeptSon({ companyId: newVal }).then((res) => {
- deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // getUserDeptSon({ companyId: newVal }).then((res) => {
+ // deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // })
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id }))) as any[]
})
}
else {
@@ -213,18 +217,18 @@
}, {
deep: true,
})
-watch(() => listQuery.deptId, (newVal) => {
- if (newVal) {
- getDeptTreeList({ pid: newVal }).then((res) => {
- systemList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.name }))
- })
- }
- else {
- systemList.value = systemListAll.value
- }
-}, {
- deep: true,
-})
+// watch(() => listQuery.deptId, (newVal) => {
+// if (newVal) {
+// getDeptTreeList({ pid: newVal }).then((res) => {
+// systemList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.name }))
+// })
+// }
+// else {
+// systemList.value = systemListAll.value
+// }
+// }, {
+// deep: true,
+// })
const permUrl = ref({
add: '/tested/device/group/add',
@@ -247,17 +251,23 @@
-
+
+
-
-
-
+
diff --git a/src/views/tested/device/group/components/selectDevice.vue b/src/views/tested/device/group/components/selectDevice.vue
index 143793b..f3cfa2d 100644
--- a/src/views/tested/device/group/components/selectDevice.vue
+++ b/src/views/tested/device/group/components/selectDevice.vue
@@ -7,12 +7,15 @@
import { getInfoListPage } from '@/api/eqpt/device/info'
import { getDeptTreeList } from '@/api/system/dept'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const $props = defineProps({
// 使用状态列表
// 主要用于 状态管理时 过滤不同的设备使用状态
needStatus: {
type: Boolean,
- default: true,
+ default: false,
},
// 不同设备状态
// 主要用于 状态管理时 过滤不同的设备使用状态
@@ -26,28 +29,20 @@
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
+ usageStatus: '',
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -87,6 +82,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -96,10 +106,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -107,11 +116,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
const statusDict = ref<{ [key: string]: string[] }>({
1: ['在用', '禁用', '延用'], // 封存
@@ -175,19 +179,20 @@
const reset = () => {
datetimerange.value = []
listQuery.value = {
+ usageStatus: '',
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -226,8 +231,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -238,44 +252,92 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
+
+
+
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
- 只看我负责的
-
+
+
+
+
@@ -296,6 +358,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/views/tested/device/info/components/edit.vue b/src/views/tested/device/info/components/edit.vue
index 7d0296e..62d4336 100644
--- a/src/views/tested/device/info/components/edit.vue
+++ b/src/views/tested/device/info/components/edit.vue
@@ -37,6 +37,7 @@
detail: '详情',
}
const isAdmin = ref(false)
+// const isMetering = ref(false)
// 对话框类型:create,update
const dialogStatus = ref('create')
const companyId = ref('')
@@ -372,21 +373,16 @@
immediate: true,
})
watch(() => ruleForm.value.companyId, (newVal) => {
- // if ($route.path.includes('detail')) {
+ // if ($route.path.includes('detail') || isFrist.value) {
// return
// }
+ if (!$route.path.includes('detail') && !isFrist.value) {
+ ruleForm.value.deptId = ''
+ }
if (newVal) {
- if (isAdmin.value) {
- ruleForm.value.deptId = ''
- getUserDeptSon({ companyId: newVal }).then((res) => {
- console.log(res.data, '管理员部门')
- deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
- if (deptList.value.length === 1) {
- // if (isFrist.value) { return }
- ruleForm.value.deptId = deptList.value[0].id
- }
- })
- }
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id }))) as any
+ })
}
}, {
deep: true,
@@ -406,7 +402,8 @@
ruleFormRef.value?.resetFields()
const fetchDept = () => {
getUserDept().then((res) => {
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ console.log(res.data, '新建')
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
// if ($route.params.type === 'create') {
// ruleForm.value.companyId = ''
// ruleForm.value.companyName = ''
@@ -415,28 +412,40 @@
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
- getUserDeptSon({ companyId: ruleForm.value.companyId }).then((res) => {
- // console.log(res.data, '管理员部门')
- deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
- if (deptList.value.length === 1) {
- if (isFrist.value) { return }
- ruleForm.value.deptId = deptList.value[0].id
- }
- })
+ // getUserDeptSon({ companyId: ruleForm.value.companyId }).then((res) => {
+ // // console.log(res.data, '管理员部门')
+ // deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // if (deptList.value.length === 1) {
+ // if (isFrist.value) { return }
+ // ruleForm.value.deptId = deptList.value[0].id
+ // }
+ // })
+ // getDeptTreeList({ pid: newVal }).then((res) => {
+ // deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ // })
+ // if ((res.data.version === '1' || res.data.version === 1)) {
+ // isMetering.value = true
+ // if ($route.params.type === 'update') {
+ // ruleForm.value.companyId = ''
+ // ruleForm.value.companyName = ''
+ // ruleForm.value.deptId = ''
+ // }
+ // }
}
else {
isAdmin.value = false
- if ($route.params.type === 'update') {
- ruleForm.value.companyId = res.data.id
- companyId.value = res.data.id
- ruleForm.value.companyName = res.data.fullName
- }
- getUserDeptSon({ companyId: res.data.id }).then((res) => {
- deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
- if (deptList.value.length === 1) {
- ruleForm.value.deptId = deptList.value[0].id
- }
- })
+ // isMetering.value = false
+ // if ($route.params.type === 'update') {
+ ruleForm.value.companyId = res.data.id
+ companyId.value = res.data.id
+ ruleForm.value.companyName = res.data.fullName
+ // }
+ // getUserDeptSon({ companyId: res.data.id }).then((res) => {
+ // deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // if (deptList.value.length === 1) {
+ // ruleForm.value.deptId = deptList.value[0].id
+ // }
+ // })
}
})
}
@@ -891,9 +900,19 @@
-
+
+
+
diff --git a/src/api/eqpt/measurementPlan/paln.ts b/src/api/eqpt/measurementPlan/paln.ts
index 395aa22..f28c108 100644
--- a/src/api/eqpt/measurementPlan/paln.ts
+++ b/src/api/eqpt/measurementPlan/paln.ts
@@ -1,6 +1,7 @@
/**
* 计量计划接口
*/
+import qs from 'qs'
import request from '@/api/index'
// 计量计划列表-(不同状态)
@@ -108,6 +109,15 @@
},
})
}
+export function getInfoListTogetherStatus(id: string) {
+ return request({
+ url: '/plan/equipmentStatusAggr',
+ params: {
+ planId: id,
+ },
+ })
+}
+
// 获取展开数据
export function getInfoList(id: string, name: string) {
return request({
@@ -126,3 +136,31 @@
method: 'post',
})
}
+// 生成年度汇总
+export function getSummary(data: any) {
+ return request({
+ url: '/plan/getSummary',
+ method: 'post',
+ data,
+ })
+}
+// 展开年度汇总
+export function expandSummary(data: any) {
+ return request({
+ url: '/plan/summaryRelationList',
+ method: 'get',
+ params: data,
+ paramsSerializer: {
+ serialize: params => qs.stringify(params, { arrayFormat: 'repeat' }),
+ },
+ })
+}
+// 导出年度汇总
+export function exportSummary(data: any) {
+ return request({
+ url: '/plan/exportSummary',
+ method: 'post',
+ data,
+ responseType: 'blob',
+ })
+}
diff --git a/src/router/index.ts b/src/router/index.ts
index a751837..a8fb59f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -11,7 +11,7 @@
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
import { queryString, stripscript } from '@/utils/validate'
-
+import { handlerPro } from '@/views/fresh'
const { isLoading } = useNProgress()
const router = createRouter({
@@ -20,9 +20,7 @@
})
router.beforeEach(async (to, from, next) => {
- if (to.name === 'notFound') {
- next('/index')
- }
+ handlerPro(to, next)
const settingsStore = useSettingsStore()
const userStore = useUserStore()
const menuStore = useMenuStore()
diff --git a/src/router/modules/tested.ts b/src/router/modules/tested.ts
index 8b37e75..536d8e4 100644
--- a/src/router/modules/tested.ts
+++ b/src/router/modules/tested.ts
@@ -104,6 +104,18 @@
activeMenu: '/planlist',
},
},
+ {
+ path: '/plan/summary',
+ name: 'PlanSummary',
+ component: () => import('@/views/tested/MeasurementPlan/plan/components/summary.vue'),
+ meta: {
+ title: '计量计划汇总',
+ auth: '/tested/metering/plan',
+ sidebar: false,
+ breadcrumb: false,
+ activeMenu: '/planlist',
+ },
+ },
],
},
{
@@ -180,129 +192,129 @@
},
],
},
- {
- path: '/meteringdelay',
- component: Layout,
- redirect: '/delaypage',
- name: 'MeteringDelay',
- meta: {
- title: '延迟送检申请',
- icon: 'ep:key',
- auth: '/tested/metering/delay',
- },
- children: [
- {
- path: '/delaypage',
- name: 'DelayPage',
- component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
- meta: {
- title: '延迟送检申请',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/:type',
- name: 'DealyEdit',
- component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
- meta: {
- title: '延迟送检编辑',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- {
- path: '/delay/detail',
- name: 'DealyDetail',
- component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
- meta: {
- title: '延迟送检详情',
- auth: '/tested/metering/delay',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdelay',
- },
- },
- ],
- },
- {
- path: '/meteringcurator',
- component: Layout,
- redirect: '/curatorpage',
- name: 'MeteringCurator',
- meta: {
- title: '负责人送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/curator',
- },
- children: [
- {
- path: '/curatorpage',
- name: 'CuratorPage',
- component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
- meta: {
- title: '负责人送检通知',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- {
- path: '/curatorpage/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '负责人送检通知编辑',
- auth: '/tested/metering/curator',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringcurator',
- },
- },
- ],
- },
- {
- path: '/meteringdept',
- component: Layout,
- redirect: '/deptpage',
- name: 'MeteringDept',
- meta: {
- title: '部门送检通知',
- icon: 'ep:key',
- auth: '/tested/metering/dept',
- },
- children: [
- {
- path: '/deptpage',
- name: 'DeptPage',
- component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
- meta: {
- title: '部门送检通知',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- {
- path: '/meteringdept/:type',
- name: 'MeteringdetEdit',
- component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
- meta: {
- title: '部门送检通知编辑',
- auth: '/tested/metering/dept',
- sidebar: false,
- breadcrumb: false,
- activeMenu: '/meteringdept',
- },
- },
- ],
- },
+ // {
+ // path: '/meteringdelay',
+ // component: Layout,
+ // redirect: '/delaypage',
+ // name: 'MeteringDelay',
+ // meta: {
+ // title: '延迟送检申请',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/delay',
+ // },
+ // children: [
+ // {
+ // path: '/delaypage',
+ // name: 'DelayPage',
+ // component: () => import('@/views/tested/MeasurementPlan/delay/index.vue'),
+ // meta: {
+ // title: '延迟送检申请',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/:type',
+ // name: 'DealyEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/edit.vue'),
+ // meta: {
+ // title: '延迟送检编辑',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // {
+ // path: '/delay/detail',
+ // name: 'DealyDetail',
+ // component: () => import('@/views/tested/MeasurementPlan/early/components/detail.vue'),
+ // meta: {
+ // title: '延迟送检详情',
+ // auth: '/tested/metering/delay',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdelay',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringcurator',
+ // component: Layout,
+ // redirect: '/curatorpage',
+ // name: 'MeteringCurator',
+ // meta: {
+ // title: '负责人送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/curator',
+ // },
+ // children: [
+ // {
+ // path: '/curatorpage',
+ // name: 'CuratorPage',
+ // component: () => import('@/views/tested/MeasurementPlan/curator/index.vue'),
+ // meta: {
+ // title: '负责人送检通知',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // {
+ // path: '/curatorpage/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '负责人送检通知编辑',
+ // auth: '/tested/metering/curator',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringcurator',
+ // },
+ // },
+ // ],
+ // },
+ // {
+ // path: '/meteringdept',
+ // component: Layout,
+ // redirect: '/deptpage',
+ // name: 'MeteringDept',
+ // meta: {
+ // title: '部门送检通知',
+ // icon: 'ep:key',
+ // auth: '/tested/metering/dept',
+ // },
+ // children: [
+ // {
+ // path: '/deptpage',
+ // name: 'DeptPage',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/index.vue'),
+ // meta: {
+ // title: '部门送检通知',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // {
+ // path: '/meteringdept/:type',
+ // name: 'MeteringdetEdit',
+ // component: () => import('@/views/tested/MeasurementPlan/dept/components/edit.vue'),
+ // meta: {
+ // title: '部门送检通知编辑',
+ // auth: '/tested/metering/dept',
+ // sidebar: false,
+ // breadcrumb: false,
+ // activeMenu: '/meteringdept',
+ // },
+ // },
+ // ],
+ // },
{
path: '/meteringtask',
component: Layout,
diff --git a/src/views/fresh.ts b/src/views/fresh.ts
new file mode 100644
index 0000000..1aa0d21
--- /dev/null
+++ b/src/views/fresh.ts
@@ -0,0 +1,39 @@
+const status = 'notFound-404'
+// 刷新标识
+export const setFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.setItem(status, (Number(localStorage.getItem(status)) + 1).toString())
+ }
+ else {
+ localStorage.setItem(status, '1')
+ }
+}
+// 清空
+export const clearFresh = () => {
+ if (localStorage.getItem(status)) {
+ localStorage.removeItem(status)
+ }
+}
+// 获取
+export const getFresh = () => {
+ if (localStorage.getItem(status)) {
+ return Number(localStorage.getItem(status))
+ }
+ else {
+ return 0
+ }
+}
+// 逻辑函数
+export const handlerPro = (route: any, agree: any) => {
+ if (route.name === 'notFound') {
+ setFresh()
+ agree('/index')
+ if (getFresh() >= 2) {
+ clearFresh()
+ location.reload()
+ }
+ }
+ else {
+ clearFresh()
+ }
+}
diff --git a/src/views/tested/MeasurementPlan/plan/components/dataList.vue b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
index f5db816..a092483 100644
--- a/src/views/tested/MeasurementPlan/plan/components/dataList.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/dataList.vue
@@ -1,16 +1,27 @@
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/edit.vue b/src/views/tested/MeasurementPlan/plan/components/edit.vue
index c956592..90ef232 100644
--- a/src/views/tested/MeasurementPlan/plan/components/edit.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/edit.vue
@@ -10,6 +10,9 @@
import useUserStore from '@/store/modules/user'
import { SCHEDULE } from '@/utils/scheduleDict'
import { delTextBtn, editBtn, submitBtn } from '@/utils/applyBtns'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
@@ -36,11 +39,13 @@
approvalStatus: '', // 审批状态
createDeptId: '', // 创建单位id
createDeptName: '', // 创建单位名称
+ createCompanyName: '',
+ createCompanyId: '',
createTime: '', // 创建时间
createUserId: '', // 创建人id
createUserName: '', // 创建人姓名
decisionItem: '', // 可选决策项
- equipmentIds: [], // 关联设备id
+ relationList: [], // 关联设备id
id: '',
month: 0, // month
planCategory: '0', // 计划分类(字典值,原始/追加)
@@ -58,24 +63,60 @@
// planCategory: [{ required: true, message: '计划分类必选', trigger: ['blur', 'change'] }],
season: [{ required: true, message: '季度必填', trigger: ['blur', 'change'] }],
month: [{ required: true, message: '月份称必填', trigger: ['blur', 'change'] }],
+ createDeptId: [{ required: true, message: '部门必选', trigger: ['blur', 'change'] }],
+ createCompanyId: [{ required: true, message: '单位必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const processId = ref()
const disabledProcess = ref(false)
-const initDialog = () => {
+const companyList = ref([]) // 单位列表
+const deptList = ref([]) // 部门列表
+const isAdmin = ref(false) // 是否顶级单位
+const flag = ref(true)
+const initDialog = async () => {
dialogStatus.value = $route.params.type as string
ruleFormRef.value?.resetFields()
+ const fetchCommpany = async () => {
+ flag.value = true
+ // 获取单位
+ const res = await getUserDept()
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ isAdmin.value = true
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ isAdmin.value = false
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ ruleForm.value.createCompanyId = res.data.id
+ ruleForm.value.createCompanyName = res.data.fullName
+ if ($route.path.includes('create')) {
+ ruleForm.value.createDeptId = userStore.deptId
+ }
+ }
+ setTimeout(() => {
+ flag.value = false
+ })
+ }
if ($route.params.type === 'create') {
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ fetchCommpany()
ruleForm.value.planType = typeMap[$route.query.category as string]
typeFlag.value = typeMap[$route.query.category as string]
ruleForm.value.year = String(currentYear.value)
if ($route.query.category as string === 'year') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
ruleForm.value.planType = '0'
}
}
@@ -88,6 +129,7 @@
if (data.approvalStatusName === '草稿箱') {
disabledProcess.value = true
}
+ await fetchCommpany()
// 判断是否追加计划
if ($route.query.append) {
disabledProcess.value = true
@@ -96,24 +138,38 @@
ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
ruleForm.value.createUserId = userStore.id
ruleForm.value.createUserName = userStore.name
- ruleForm.value.createDeptId = userStore.deptId
- ruleForm.value.createDeptName = userStore.deptName
+ // ruleForm.value.createDeptId = userStore.deptId
+ // ruleForm.value.createDeptName = userStore.deptName
+ await fetchCommpany()
if (typeFlag.value === '0') {
- ruleForm.value.planName = '2023年年度计量计划'
+ ruleForm.value.planName = `${userStore.deptName}${new Date().getFullYear()}年年度计量计划`
}
return
}
// 基本信息
ruleForm.value = {
...data,
- equipmentIds: [],
+ relationList: [],
}
// 获取计划列表
getInfoList(data.id, '').then((res) => {
- ruleForm.value.equipmentIds = res.data
+ ruleForm.value.relationList = res.data
})
}
}
+watch(() => ruleForm.value.createCompanyId, (newVal) => {
+ if (!flag) {
+ ruleForm.value.createDeptId = ''
+ }
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 获取计划分类列表
const planTypeList = ref()
const fetchTypeList = () => {
@@ -149,15 +205,15 @@
},
).then((_res) => {
disabledSave.value = true
- if ($route.query.category as string === 'season' || typeFlag.value === '1') {
- ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
- ruleForm.value.planType = '1'
- }
- else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
- ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
- ruleForm.value.planType = '2'
- }
- ruleForm.value.equipmentIds = tableRef.value.list.map((item: any) => item.equipmentId)
+ // if ($route.query.category as string === 'season' || typeFlag.value === '1') {
+ // ruleForm.value.planName = `${currentYear.value}年第${ruleForm.value.season}季度计量计划`
+ // ruleForm.value.planType = '1'
+ // }
+ // else if ($route.query.category as string === 'month' || typeFlag.value === '2') {
+ // ruleForm.value.planName = `${currentYear.value}年${ruleForm.value.month}月月度计量计划`
+ // ruleForm.value.planType = '2'
+ // }
+ ruleForm.value.relationList = tableRef.value.list
// console.log(tableRef.value.list, 'tableRef.value.list')
if (submitId.value) {
ruleForm.value.id = submitId.value
@@ -178,7 +234,7 @@
}).catch(() => {
disabledSave.value = false
})
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
}
else {
@@ -206,7 +262,7 @@
ElMessage.success('已提交')
close()
}).catch((_err) => {
- ruleForm.value.equipmentIds = tableRef.value.list
+ ruleForm.value.relationList = tableRef.value.list
})
})
}
@@ -329,16 +385,16 @@
-
+
-
+
-
+
@@ -350,8 +406,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -377,8 +449,8 @@
-
-
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/list.vue b/src/views/tested/MeasurementPlan/plan/components/list.vue
index b38eb25..8b9a022 100644
--- a/src/views/tested/MeasurementPlan/plan/components/list.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/list.vue
@@ -3,11 +3,15 @@
import { reactive, ref } from 'vue'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import ApprovalDialog from './ApprovalDialog.vue'
+import summaryDialog from './summaryDialog.vue'
import { cancelPlan, delPlan, editPlan, exportPlan, getListPage, submitPlan } from '@/api/eqpt/measurementPlan/paln'
import { getDictByCode } from '@/api/system/dict'
import { SCHEDULE } from '@/utils/scheduleDict'
import { printJSON } from '@/utils/printUtils'
import { exportFile } from '@/utils/exportUtils'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getDeptTreeList } from '@/api/system/dept'
+import { toTreeList } from '@/utils/structure'
const $props = defineProps({
statusName: {
type: String,
@@ -33,9 +37,57 @@
planName: '', // 计划名称 false
planNo: '', // 计划编号 false
planType: '', // 计划类型(年/季/月) false
+ createCompanyId: '', // 创建单位
+ createDeptId: '', // 部门
+ manufactureNo: '', // 出厂编号
+ equipmentRemark: '', // 备注
offset: 1,
limit: 20,
})
+// 是否折叠查询条件
+const searchMore = ref(true)
+const expandSearch = () => {
+ searchMore.value = !searchMore.value
+}
+// 创建单位
+const companyList = ref<{ id: string; value: string; name: string }[]>([])
+const deptList = ref([])
+const fetchCommpany = () => {
+ // 获取单位
+ getUserDept().then((res) => {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
+ getAdminDept({}).then((res) => {
+ companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ })
+ }
+ else {
+ companyList.value = [
+ {
+ name: res.data.fullName,
+ value: res.data.id,
+ id: res.data.id,
+ },
+ ]
+ listQuery.createCompanyId = ''
+ }
+ })
+ // 获取部门
+ // getUserDeptSon({}).then((res) => {
+ // console.log(res.data, '部门')
+ // })
+}
+fetchCommpany()
+watch(() => listQuery.createCompanyId, (newVal) => {
+ listQuery.createDeptId = ''
+ if (newVal) {
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ }
+ else {
+ deptList.value = []
+ }
+})
// 开始结束时间
const datetimerange = ref()
watch(() => datetimerange.value, (newVal) => {
@@ -66,6 +118,11 @@
},
{
text: '创建单位',
+ value: 'createCompanyName',
+ align: 'center',
+ },
+ {
+ text: '部门',
value: 'createDeptName',
align: 'center',
},
@@ -94,7 +151,6 @@
// listQuery.offset = 1
// }
// console.log(getListPage)
- console.log(listQuery, 'listQuery')
getListPage(listQuery, $props.statusName).then((response) => {
list.value = response.data.rows
total.value = Number(response.data.total)
@@ -132,6 +188,10 @@
listQuery.createTimeEnd = ''
listQuery.planNo = ''
listQuery.planCategory = ''
+ listQuery.createCompanyId = ''
+ listQuery.createDeptId = ''
+ listQuery.manufactureNo = ''
+ listQuery.equipmentRemark = ''
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -295,6 +355,11 @@
deep: true,
immediate: true,
})
+// 汇总监督计划
+const summaryRef = ref()
+const summary = () => {
+ summaryRef.value.initDialog()
+}
const permUrl = ref({
edit: '/tested/pmetering/plan/edit',
del: '/tested/pmetering/plan/delete',
@@ -310,32 +375,68 @@
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 汇总年度计划
+
-
-
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
index 6aaca0b..ac10dc9 100644
--- a/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/selectDevice.vue
@@ -7,33 +7,27 @@
import { getDeptTreeList } from '@/api/system/dept'
import useUserStore from '@/store/modules/user'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const emits = defineEmits(['add'])
const userStore = useUserStore()
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -73,6 +67,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -82,10 +91,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -93,11 +101,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
// 获取使用状态列表
const useStatusList = ref()
@@ -121,24 +124,23 @@
const search = () => {
fetchData()
}
-const selectTreeRef = ref()
// 重置
const reset = () => {
datetimerange.value = []
listQuery.value = {
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -201,8 +203,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -213,32 +224,73 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -249,9 +301,10 @@
/>
-
- 只看我负责的
-
+
+
+
+
@@ -269,6 +322,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summary.vue b/src/views/tested/MeasurementPlan/plan/components/summary.vue
new file mode 100644
index 0000000..53b7158
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summary.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+ 导出
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
new file mode 100644
index 0000000..2ecb05b
--- /dev/null
+++ b/src/views/tested/MeasurementPlan/plan/components/summaryDialog.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tested/MeasurementPlan/plan/components/table.vue b/src/views/tested/MeasurementPlan/plan/components/table.vue
index 52ed729..a2843ce 100644
--- a/src/views/tested/MeasurementPlan/plan/components/table.vue
+++ b/src/views/tested/MeasurementPlan/plan/components/table.vue
@@ -18,50 +18,83 @@
text: '设备名称',
value: 'equipmentName',
required: true,
- isSelect: false, // 是否下拉框
- isBtn: true,
- },
- {
- text: '统一编号',
- value: 'equipmentNo',
- required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ width: '200',
+ type: 'btn',
},
{
text: '规格型号',
value: 'model',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '出厂编号',
+ value: 'manufactureNo',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '生产厂家',
+ value: 'manufacturer',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ required: false,
+ type: 'text',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ required: false,
+ type: 'text',
},
{
text: '负责人',
value: 'directorName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
text: '计量标识',
value: 'meterIdentifyName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
+ required: false,
+ type: 'text',
},
{
text: '证书有效期',
value: 'certificateValid',
+ width: '160',
required: false,
- isSelect: true, // 是否下拉框
- isBtn: false,
+ type: 'text',
},
{
- text: '安装位置',
- value: 'installLocation',
+ text: '检定去向',
+ value: 'checkDestinationName',
required: false,
- isSelect: false, // 是否下拉框
- isBtn: false,
+ type: 'text',
+ },
+ {
+ text: '计划送检时间',
+ value: 'planDeliverTime',
+ width: '180',
+ required: true,
+ type: 'date',
+ },
+ {
+ text: '计划送检单位',
+ value: 'planMeasureCompany',
+ width: '160',
+ required: true,
+ type: 'input',
},
])
const list = ref([])
@@ -93,13 +126,17 @@
if (checkCertificateList()) {
setAllRowReadable()
list.value.push({
- equipmentNo: '',
equipmentName: '',
model: '',
+ manufactureNo: '',
+ manufacturer: '',
+ deptName: '',
+ usePosition: '',
directorName: '',
- meterIdentify: '',
+ meterIdentifyName: '',
+ checkOrganization: '',
certificateValid: '',
- installLocation: '',
+ checkDestinationName: '',
editable: true,
} as any)
}
@@ -117,23 +154,13 @@
const selectRow = ref()
const select = (text: string, index: any) => {
if (text === '设备名称') {
- // deviceRef.value.initDialog(false)
deviceSingeRef.value.initDialog()
selectRow.value = index
}
}
// 选择设备
const confirm = (device: any) => {
- // 判断是单选还是多选
-
if (Array.isArray(device)) {
- // const data = list.value.filter((item) => {
- // return device.some((child: any) => child.id === item.equipmentId)
- // })
- // if (data.length) {
- // ElMessage.warning('选择设备重复')
- // return
- // }
// 多选
device.forEach((item) => {
if (list.value.every(citem => citem.equipmentId !== item.id)) {
@@ -143,6 +170,8 @@
id: null,
groupId: null,
editable: true,
+ checkDestinationName: item.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: item.checkDestination === '1' ? '' : item.checkOrganization,
planId: '',
planName: '',
planNo: '',
@@ -166,6 +195,8 @@
planId: '',
planName: '',
planNo: '',
+ checkDestinationName: device.checkDestination === '1' ? '计量室' : '外送',
+ planMeasureCompany: device.checkDestination === '1' ? '' : device.checkOrganization,
}
list.value[selectRow.value] = row
}
@@ -194,7 +225,7 @@
-
+
批量增加
@@ -211,10 +242,10 @@
@row-dblclick="dblclickRow"
>
-
+
*{{ item.text }}
@@ -222,7 +253,7 @@
{{ scope.row[item.value] }}
@@ -230,10 +261,15 @@
选择
-
+
+
+ {{ scope.row[item.value] }}
diff --git a/src/views/tested/device/certificate/index.vue b/src/views/tested/device/certificate/index.vue
index 5a21904..532f3d3 100644
--- a/src/views/tested/device/certificate/index.vue
+++ b/src/views/tested/device/certificate/index.vue
@@ -184,7 +184,7 @@
// })
getUserDept().then((res) => {
// companyInfo.value = res.data
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
diff --git a/src/views/tested/device/group/components/list.vue b/src/views/tested/device/group/components/list.vue
index d628fb9..c38d35d 100644
--- a/src/views/tested/device/group/components/list.vue
+++ b/src/views/tested/device/group/components/list.vue
@@ -5,6 +5,7 @@
import useUserStore from '@/store/modules/user'
import { delGroup, getGroupList } from '@/api/eqpt/device/group'
import { getPostList } from '@/api/system/post'
+import { toTreeList } from '@/utils/structure'
import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
import { getDeptList, getDeptTree, getDeptTreeList, getDeptTreeListByPid } from '@/api/system/dept'
const { proxy } = getCurrentInstance() as any
@@ -171,7 +172,7 @@
// })
getUserDept().then((res) => {
// companyInfo.value = res.data
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
@@ -191,7 +192,7 @@
// 三级联动
watch(() => listQuery.companyId, (newVal) => {
listQuery.deptId = ''
- listQuery.subSystemId = ''
+ // listQuery.subSystemId = ''
// if (newVal) {
// getDeptTree({ pid: newVal }).then((res) => {
// deptList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
@@ -203,8 +204,11 @@
// systemList.value = systemListAll.value
// }
if (newVal) {
- getUserDeptSon({ companyId: newVal }).then((res) => {
- deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // getUserDeptSon({ companyId: newVal }).then((res) => {
+ // deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // })
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id }))) as any[]
})
}
else {
@@ -213,18 +217,18 @@
}, {
deep: true,
})
-watch(() => listQuery.deptId, (newVal) => {
- if (newVal) {
- getDeptTreeList({ pid: newVal }).then((res) => {
- systemList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.name }))
- })
- }
- else {
- systemList.value = systemListAll.value
- }
-}, {
- deep: true,
-})
+// watch(() => listQuery.deptId, (newVal) => {
+// if (newVal) {
+// getDeptTreeList({ pid: newVal }).then((res) => {
+// systemList.value = res.data.filter((item: any) => item.pid === newVal).map((item: any) => ({ id: item.id, value: item.id, name: item.name }))
+// })
+// }
+// else {
+// systemList.value = systemListAll.value
+// }
+// }, {
+// deep: true,
+// })
const permUrl = ref({
add: '/tested/device/group/add',
@@ -247,17 +251,23 @@
-
+
+
-
-
-
+
diff --git a/src/views/tested/device/group/components/selectDevice.vue b/src/views/tested/device/group/components/selectDevice.vue
index 143793b..f3cfa2d 100644
--- a/src/views/tested/device/group/components/selectDevice.vue
+++ b/src/views/tested/device/group/components/selectDevice.vue
@@ -7,12 +7,15 @@
import { getInfoListPage } from '@/api/eqpt/device/info'
import { getDeptTreeList } from '@/api/system/dept'
import { toTreeList } from '@/utils/structure'
+import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
+import { getAdminDept, getUserDept, getUserDeptSon, getUserList } from '@/api/system/user'
+import { getPostList } from '@/api/system/post'
const $props = defineProps({
// 使用状态列表
// 主要用于 状态管理时 过滤不同的设备使用状态
needStatus: {
type: Boolean,
- default: true,
+ default: false,
},
// 不同设备状态
// 主要用于 状态管理时 过滤不同的设备使用状态
@@ -26,28 +29,20 @@
const dialogFormVisible = ref(false)
// 查询条件
const listQuery = ref({
+ usageStatus: '',
equipmentName: '', // 设备名称
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
- useSign: '',
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
})
-// 我负责的
-const checked = ref(true)
-watch(() => checked.value, (newVal) => {
- if (newVal) {
- listQuery.value.directorId = userStore.id
- }
- else {
- listQuery.value.directorId = ''
- }
-})
const loadingTable = ref(false)
const list = ref([]) // 表格数据
const total = ref(0)
@@ -87,6 +82,21 @@
align: 'center',
},
{
+ text: '所在单位',
+ value: 'companyName',
+ align: 'center',
+ },
+ {
+ text: '使用部门',
+ value: 'deptName',
+ align: 'center',
+ },
+ {
+ text: '使用岗位',
+ value: 'usePosition',
+ align: 'center',
+ },
+ {
text: '负责人',
value: 'directorName',
align: 'center',
@@ -96,10 +106,9 @@
value: 'meterIdentifyName',
align: 'center',
},
-
{
- text: '使用状态',
- value: 'usageStatusName',
+ text: '检定(校准)单位',
+ value: 'checkOrganization',
align: 'center',
},
{
@@ -107,11 +116,6 @@
value: 'certificateValid',
align: 'center',
},
- {
- text: '安装位置',
- value: 'installLocation',
- align: 'center',
- },
])
const statusDict = ref<{ [key: string]: string[] }>({
1: ['在用', '禁用', '延用'], // 封存
@@ -175,19 +179,20 @@
const reset = () => {
datetimerange.value = []
listQuery.value = {
+ usageStatus: '',
equipmentName: '', // 设备名称
- useSign: '',
- equipmentNo: '', // 统一编号
+ model: '', // 规格型号
+ manufactureNo: '', // 出厂编号
equipmentType: '1',
- usageStatus: '', // 使用状态
- deptIds: '', // 使用部门
+ manufacturer: '', // 生产厂家
+ deptIds: '', // 部门
+ usePositionId: '', // 使用岗位
certificateValidStart: '',
certificateValidEnd: '',
- directorId: userStore.id,
+ checkDestination: '', // 检定去向
limit: 5,
offset: 1,
}
- checked.value = true
search()
}
// 页数发生变化后的操作,可能是页码变化,可能是每页容量变化,此函数必写
@@ -226,8 +231,17 @@
defineExpose({ initDialog })
// 加载组织机构树形下拉
const deptTreeList = ref()
+// 设备名称
+const deviceNameList = ref([])
// 设备在用信息
const inUseList = ref<{ id: string; value: string; name: string }[]>()
+// 规格型号
+const modelList = ref([])
+const allList = ref([])
+// 部门
+const deptList = ref([])
+// 使用岗位
+const usePositionList = ref([])
const fetchDeptTree = () => {
getDeptTreeList().then((res) => {
if (res.data) { // 将列表转树结构
@@ -238,44 +252,92 @@
getDictByCode('eqptDeviceInUse').then((res) => {
inUseList.value = res.data
})
+ // 设备名称
+ getDeviceNameList({ equipmentType: '1' }).then((res) => {
+ deviceNameList.value = res.data
+ })
+ // 规格型号
+ getModelAllList({ equipmentType: '1' }).then((res) => {
+ allList.value = res.data
+ modelList.value = Array.from(new Set(res.data.filter((item: any) => item.model).map((item: any) => item.model))).sort()
+ })
+ // 部门
+ getUserDept().then((res) => {
+ getDeptTreeList({ pid: res.data.id }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ })
+ })
+ // 使用岗位
+ getPostList({}).then((res) => {
+ usePositionList.value = res.data
+ })
}
fetchDeptTree()
+watch(() => listQuery.value.equipmentName, (newVal) => {
+ if (newVal) {
+ listQuery.value.model = ''
+ // 修改规格型号和辅助字段列表
+ const data = allList.value.filter(item => item.equipmentName === newVal)
+ modelList.value = Array.from(new Set(data.filter(item => item.model).map(item => item.model))).sort()
+ }
+ else {
+ listQuery.value.model = ''
+ modelList.value = Array.from(new Set(allList.value.filter(item => item.model).map(item => item.model))).sort()
+ }
+})
+
+
+
-
+
+
+
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
- 只看我负责的
-
+
+
+
+
@@ -296,6 +358,13 @@
+
+
+
+ {{ scope.row.checkDestination === '1' ? '计量室' : '外送' }}
+
+
+
diff --git a/src/views/tested/device/info/components/edit.vue b/src/views/tested/device/info/components/edit.vue
index 7d0296e..62d4336 100644
--- a/src/views/tested/device/info/components/edit.vue
+++ b/src/views/tested/device/info/components/edit.vue
@@ -37,6 +37,7 @@
detail: '详情',
}
const isAdmin = ref(false)
+// const isMetering = ref(false)
// 对话框类型:create,update
const dialogStatus = ref('create')
const companyId = ref('')
@@ -372,21 +373,16 @@
immediate: true,
})
watch(() => ruleForm.value.companyId, (newVal) => {
- // if ($route.path.includes('detail')) {
+ // if ($route.path.includes('detail') || isFrist.value) {
// return
// }
+ if (!$route.path.includes('detail') && !isFrist.value) {
+ ruleForm.value.deptId = ''
+ }
if (newVal) {
- if (isAdmin.value) {
- ruleForm.value.deptId = ''
- getUserDeptSon({ companyId: newVal }).then((res) => {
- console.log(res.data, '管理员部门')
- deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
- if (deptList.value.length === 1) {
- // if (isFrist.value) { return }
- ruleForm.value.deptId = deptList.value[0].id
- }
- })
- }
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id }))) as any
+ })
}
}, {
deep: true,
@@ -406,7 +402,8 @@
ruleFormRef.value?.resetFields()
const fetchDept = () => {
getUserDept().then((res) => {
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ console.log(res.data, '新建')
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
// if ($route.params.type === 'create') {
// ruleForm.value.companyId = ''
// ruleForm.value.companyName = ''
@@ -415,28 +412,40 @@
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
- getUserDeptSon({ companyId: ruleForm.value.companyId }).then((res) => {
- // console.log(res.data, '管理员部门')
- deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
- if (deptList.value.length === 1) {
- if (isFrist.value) { return }
- ruleForm.value.deptId = deptList.value[0].id
- }
- })
+ // getUserDeptSon({ companyId: ruleForm.value.companyId }).then((res) => {
+ // // console.log(res.data, '管理员部门')
+ // deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // if (deptList.value.length === 1) {
+ // if (isFrist.value) { return }
+ // ruleForm.value.deptId = deptList.value[0].id
+ // }
+ // })
+ // getDeptTreeList({ pid: newVal }).then((res) => {
+ // deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id })))
+ // })
+ // if ((res.data.version === '1' || res.data.version === 1)) {
+ // isMetering.value = true
+ // if ($route.params.type === 'update') {
+ // ruleForm.value.companyId = ''
+ // ruleForm.value.companyName = ''
+ // ruleForm.value.deptId = ''
+ // }
+ // }
}
else {
isAdmin.value = false
- if ($route.params.type === 'update') {
- ruleForm.value.companyId = res.data.id
- companyId.value = res.data.id
- ruleForm.value.companyName = res.data.fullName
- }
- getUserDeptSon({ companyId: res.data.id }).then((res) => {
- deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
- if (deptList.value.length === 1) {
- ruleForm.value.deptId = deptList.value[0].id
- }
- })
+ // isMetering.value = false
+ // if ($route.params.type === 'update') {
+ ruleForm.value.companyId = res.data.id
+ companyId.value = res.data.id
+ ruleForm.value.companyName = res.data.fullName
+ // }
+ // getUserDeptSon({ companyId: res.data.id }).then((res) => {
+ // deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // if (deptList.value.length === 1) {
+ // ruleForm.value.deptId = deptList.value[0].id
+ // }
+ // })
}
})
}
@@ -891,9 +900,19 @@
-
+
+
+
diff --git a/src/views/tested/device/info/components/list.vue b/src/views/tested/device/info/components/list.vue
index 9efcddc..9915799 100644
--- a/src/views/tested/device/info/components/list.vue
+++ b/src/views/tested/device/info/components/list.vue
@@ -17,7 +17,7 @@
import { getDeviceNameList, getModelAllList, getModelList } from '@/api/eqpt/device/model'
import { getTaskList } from '@/api/eqpt/device/task'
import task from '@/views/tested/device/task/index.vue'
-import { underlineToHump } from '@/utils/structure'
+import { toTreeList, underlineToHump } from '@/utils/structure'
import scanEquipmentDialog from '@/components/scanEquipmentDialog/index.vue'
import { getLocationList } from '@/api/system/installation'
import { getPostList } from '@/api/system/post'
@@ -369,7 +369,7 @@
// })
getUserDept().then((res) => {
companyInfo.value = res.data
- if (res.data.fullName === '顶级' || res.data.version === '1') {
+ if (res.data.fullName === '顶级' || res.data.version === '1' || res.data.version === 1) {
getAdminDept({}).then((res) => {
companyList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
})
@@ -406,8 +406,11 @@
watch(() => listQuery.companyId, (newVal) => {
listQuery.deptIds = ''
if (newVal) {
- getUserDeptSon({ companyId: newVal }).then((res) => {
- deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // getUserDeptSon({ companyId: newVal }).then((res) => {
+ // deptList.value = res.data.map((item: any) => ({ id: item.id, value: item.id, name: item.fullName }))
+ // })
+ getDeptTreeList({ pid: newVal }).then((res) => {
+ deptList.value = toTreeList(res.data.map((item: any) => ({ ...item, label: item.name, value: item.id }))) as any[]
})
}
else {
@@ -1002,9 +1005,17 @@
-
+
+