From 8b7c2fe49917d670eb2a03cecda23ea50961c494 Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期二, 09 八月 2022 09:26:29 +0800 Subject: [PATCH] lct --- src/components/contingencyManagement/emergencyResources/emergencyMaterialsInspection/component/openAdd.vue | 280 src/components/contingencyManagement/processForm/processForm.vue | 137 src/components/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue | 271 src/components/contingencyManagement/panManagement/component/approval.vue | 224 src/components/contingencyManagement/emergencyResources/emergencySupplies/component/openAdd.vue | 515 src/components/contingencyManagement/emergencyPlanStartRecord/component/selectEmergencyPlan.vue | 242 src/api/doublePreventSystem/rectify/index.ts | 10 src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue | 627 + src/components/facilityManagement/InstrumentationInformation/index.vue | 376 src/views/contingencyManagement/contingency/component/openAdd.vue | 6 src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue | 571 + src/components/contingencyManagement/panManagement/component/openAdd.vue | 419 src/components/facilityManagement/safetyEquipment/index.vue | 377 src/components/facilityManagement/EquipmentStatistics/index.vue | 91 src/components/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/index.vue | 392 src/components/contingencyManagement/abolishDialog/component/formInformationTop.vue | 144 src/components/contingencyManagement/emergencyPlanStartRecord/index.vue | 405 src/components/facilityManagement/keyEquipment/index.vue | 384 src/layout/navBars/breadcrumb/user.vue | 50 src/components/contingencyManagement/processForm/component/formInformationTop.vue | 144 src/api/systemManage/basicDateManage/personShiftManage/workingHours/index.ts | 12 src/components/contingencyManagement/panManagement/component/upData.vue | 125 src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue | 1081 src/components/contingencyManagement/emergencyResources/emergencySupplies/component/personInCharge.vue | 213 src/components/emergencySupplies/index.vue | 2 src/api/contingencyManagement/emergencyResources/index.ts | 38 .env.development | 8 src/components/contingencyManagement/releaseOfDrillStart/releaseOfDrillStart.vue | 137 src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/regionsDialog.vue | 221 src/api/doublePreventSystem/check/index.ts | 6 src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/userSelect.vue | 443 src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue | 544 src/components/equipmentDailog/repairDailog.vue | 37 src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue | 1276 +- src/components/contingencyManagement/contingency/component/openAdd.vue | 503 src/components/equipmentDailog/Dailog.vue | 511 src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue | 1 src/views/system/menu/component/menuDialog.vue | 1 src/views/system/personShiftManage/scheduleManage/schedule/index.vue | 576 + src/api/doublePreventSystem/record/index.ts | 6 src/api/intellectInspectSystem/RFID/index.ts | 10 src/components/contingencyManagement/abolishDialog/component/formInformationTops.vue | 318 src/components/contingencyManagement/processForm/component/formInformationTops.vue | 312 src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/index.vue | 502 src/components/contingencyManagement/releaseOfDrillStart/component/formInformationTop.vue | 144 src/components/checkTemplate/index.vue | 29 src/api/contingencyManagement/emergencyDrillEvaluation/index.ts | 30 src/api/facilityManagement/index.ts | 140 src/views/facilityManagement/InstrumentationInformation/index.vue | 12 src/api/intellectInspectSystem/facilityAreaManage/index.ts | 14 src/components/equipmentDailog/maintenanceDailog.vue | 133 src/components/contingencyManagement/emergencyResources/emergencyMaterialsInspection/index.vue | 388 src/components/contingencyManagement/contingency/index.vue | 393 src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue | 307 src/components/contingencyManagement/releaseOfDrillStart/component/lowerPlate.vue | 120 src/components/contingencyManagement/processForm/component/lowerPlate.vue | 120 src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue | 1700 +- src/components/facilityManagement/deviceType/component/Dailog.vue | 190 src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue | 1131 - src/components/facilityManagement/ProductionEquipment/index.vue | 375 src/components/contingencyManagement/contingency/component/upData.vue | 125 src/views/contingencyManagement/contingency/index.vue | 16 src/components/accidentManagementSystem/workInjuryDeclaration/component/accidentName.vue | 240 src/api/contingencyManagement/maintenanceEmergencyMaterials/index.ts | 30 src/api/contingencyManagement/contingency/index.ts | 54 src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/index.vue | 375 src/components/contingencyManagement/emergencyResources/emergencySupplies/component/regionsCheckbox.vue | 164 src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue | 1075 src/components/equipmentDailog/detectDailog.vue | 39 src/components/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue | 510 src/api/accidentManagementSystem/index.ts | 140 src/components/equipmentDailog/standardDailog.vue | 2 src/views/system/personShiftManage/scheduleManage/strategy/index.vue | 673 + .idea/gtqt.iml | 4 src/components/contingencyManagement/panManagement/component/startUp.vue | 160 src/components/accidentManagementSystem/accidentReport/index.vue | 387 src/components/contingencyManagement/panManagement/index.vue | 626 + src/components/contingencyManagement/abolishDialog/abolishDialog.vue | 139 src/stores/themeConfig.ts | 250 src/api/systemManage/basicDateManage/personShiftManage/workingHoursSet/index.ts | 30 src/components/contingencyManagement/emergencyResources/emergencySupplies/component/inspect.vue | 224 src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue | 2 src/api/contingencyManagement/emergencyMaterialsInspection/index.ts | 30 src/api/contingencyManagement/emergencyPlan/index.ts | 48 src/components/contingencyManagement/panManagement/component/approvalProcess.vue | 202 src/components/contingencyManagement/panManagement/component/abolishLibrary.vue | 219 src/components/iconSelector/index.vue | 477 src/api/doublePreventSystem/work/index.ts | 8 src/api/doublePreventSystem/checkUnit/index.ts | 10 src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue | 325 src/components/accidentManagementSystem/workInjuryDeclaration/index.vue | 406 src/api/doublePreventSystem/riskControlMeasure/index.ts | 12 src/api/contingencyManagement/emergencyDrillPlan/index.ts | 30 src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue | 16 src/components/contingencyManagement/contingency/component/addEmergencyPersonnel.vue | 314 src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/approvalProgress.vue | 841 + src/views/system/personShiftManage/personTimeManage/durationManage/index.vue | 14 src/components/contingencyManagement/panManagement/component/initiateApproval.vue | 159 src/views/contingencyManagement/panManagement/index.vue | 17 src/utils/request.ts | 20 src/components/contingencyManagement/emergencyResources/emergencySupplies/index.vue | 396 src/api/systemManage/basicDateManage/personShiftManage/teamStrategy/index.ts | 27 src/views/contingencyManagement/abolishDialog/abolishDialog.vue | 4 src/components/facilityManagement/deviceType/index.vue | 130 src/components/equipmentDailog/DailogS.vue | 431 src/api/intellectInspectSystem/inspectTargetManage/index.ts | 14 src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue | 404 .env.production | 6 src/components/accidentManagementSystem/workInjuryDeclaration/component/openEdit.vue | 400 src/api/goalManagement/index.ts | 253 src/api/contingencyManagement/emergencyDrillExecute/index.ts | 30 src/api/doublePreventSystem/safetyRiskEvent/index.ts | 10 src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue | 7 src/views/facilityManagement/keyEquipment/index.vue | 2 src/api/intellectInspectSystem/inspectPointManage/index.ts | 12 src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue | 219 src/components/contingencyManagement/emergencyResources/emergencySupplies/component/maintain.vue | 235 src/views/contingencyManagement/panManagement/component/openAdd.vue | 91 src/assets/icon.png | 0 src/views/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue | 3 src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts | 10 src/api/systemManage/basicDateManage/personShiftManage/holidayTime/index.ts | 12 src/components/accidentManagementSystem/accidentExpress/index.vue | 346 src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/rectificationDialog.vue | 775 + src/components/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue | 195 src/api/systemManage/basicDateManage/personShiftManage/teamManage/index.ts | 57 src/api/systemManage/basicDateManage/personShiftManage/timeStrategy/index.ts | 58 src/api/contingencyManagement/emergencyPlanLog/index.ts | 54 src/components/accidentManagementSystem/accidentExpress/component/openAdd.vue | 474 src/components/contingencyManagement/emergencyResources/emergencySupplies/component/openEdit.vue | 549 src/api/systemManage/basicDateManage/personShiftManage/holidayTimeGroup/index.ts | 38 .env | 2 src/api/workInjuryDeclaration/index.ts | 120 src/api/doublePreventSystem/productionDevice/index.ts | 10 src/components/contingencyManagement/releaseOfDrillStart/component/formInformationTops.vue | 440 /dev/null | 718 - src/components/accidentManagementSystem/accidentReport/component/openAdd.vue | 665 + src/components/accidentManagementSystem/accidentExpress/component/numberOfCasualties.vue | 461 src/components/contingencyManagement/abolishDialog/component/lowerPlate.vue | 120 src/App.vue | 11 src/api/doublePreventSystem/report/index.ts | 8 141 files changed, 27,902 insertions(+), 6,082 deletions(-) diff --git a/.env b/.env index 1287485..e0dead4 100644 --- a/.env +++ b/.env @@ -5,4 +5,6 @@ VITE_OPEN = false # public path 配置线上环境路径(打包)、本地通过 http-server 访问时,请置空即可 +#VITE_PUBLIC_PATH = 'http://121.239.169.27:6006' VITE_PUBLIC_PATH = 'http://121.239.169.27:6006' +#VITE_PUBLIC_PATH = 'http://192.168.0.179:6006' diff --git a/.env.development b/.env.development index 0f86f0b..125ccf8 100644 --- a/.env.development +++ b/.env.development @@ -2,7 +2,11 @@ ENV = 'development' # 本地环境接口地址 -VITE_API_URL = 'http://192.168.0.35:8008' -VITE_API_URL_OUT = 'http://192.168.0.35:8008' +#VITE_API_URL = 'http://192.168.0.35:8008' +VITE_API_URL = 'http://192.168.0.29:8008' #VITE_API_URL = 'http://192.168.0.29:8008' #VITE_API_URL = 'http://192.168.0.69:8008' +#VITE_API_URL = 'http://192.168.0.52:8011/safeplatform' +#VITE_API_URL = 'http://121.239.169.27:16006/safeplatform' +#VITE_API_URL_OUT = 'http://192.168.0.52:8011/safeplatform-out' +VITE_API_URL_OUT = 'http://121.239.169.27:16006/safeplatform-out' diff --git a/.env.production b/.env.production index bf8d144..ead0942 100644 --- a/.env.production +++ b/.env.production @@ -2,5 +2,7 @@ ENV = 'production' # 线上环境接口地址 -VITE_API_URL = 'http://121.239.169.27:16008/safeplatform' -VITE_API_URL_OUT = 'http://121.239.169.27:16008/safeplatform-out' +#VITE_API_URL = 'http://121.239.169.27:16008/safeplatform' +#VITE_API_URL_OUT = 'http://121.239.169.27:16008/safeplatform-out' +VITE_API_URL = 'http://121.239.169.27:16006/safeplatform' +VITE_API_URL_OUT = 'http://121.239.169.27:16006/safeplatform-out' diff --git a/.idea/gtqt.iml b/.idea/gtqt.iml index c956989..7d9b6ff 100644 --- a/.idea/gtqt.iml +++ b/.idea/gtqt.iml @@ -1,7 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <module type="WEB_MODULE" version="4"> <component name="NewModuleRootManager"> - <content url="file://$MODULE_DIR$" /> + <content url="file://$MODULE_DIR$"> + <excludeFolder url="file://$MODULE_DIR$/src/views/riskWarningSys/warning/web/node_modules/vue/src/platforms" /> + </content> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> </component> diff --git a/src/App.vue b/src/App.vue index 3b67207..c738754 100644 --- a/src/App.vue +++ b/src/App.vue @@ -76,11 +76,12 @@ proxy.mittBus.on('getI18nConfig', (locale: string) => { (state.i18nLocale as string | null) = locale; }); - // 获取缓存中的布局配置 - // if (Local.get('themeConfig')) { - // storesThemeConfig.setThemeConfig(Local.get('themeConfig')); - // document.documentElement.style.cssText = Local.get('themeConfigStyle'); - // } + // 获取缓存中的布局配置; + if (Local.get('themeConfig')) { + storesThemeConfig.setThemeConfig(themeConfig.value); + // storesThemeConfig.setThemeConfig(Local.get('themeConfig')); + document.documentElement.style.cssText = Local.get('themeConfigStyle'); + } // 获取缓存中的全屏配置 if (Session.get('isTagsViewCurrenFull')) { stores.setCurrenFullscreen(Session.get('isTagsViewCurrenFull')); diff --git a/src/api/accidentManagementSystem/index.ts b/src/api/accidentManagementSystem/index.ts index 1094a53..9b18856 100644 --- a/src/api/accidentManagementSystem/index.ts +++ b/src/api/accidentManagementSystem/index.ts @@ -1,106 +1,106 @@ import request from '/@/utils/request'; -export function accidentManagementSystemApi(){ +export function accidentManagementSystemApi() { return { // 事故快报一览 - accidentList:(params:object)=>{ - return request({ - url:"/accidentExpress/page/list", - method:"post", - data:params - }) + accidentList: (params: object) => { + return request({ + url: import.meta.env.VITE_API_URL_OUT + '/accidentExpress/page/list', + method: 'post', + data: params + }); }, // 事故快报新增 - accidentAdd:(params:object)=>{ + accidentAdd: (params: object) => { return request({ - url:"/accidentExpress/add", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/accidentExpress/add', + method: 'post', + data: params + }); }, // 事故快报详情 - accidentScarh:(params:number)=>{ + accidentScarh: (params: number) => { return request({ - url:`/accidentExpress/info/${params}`, - method:"get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/accidentExpress/info/${params}`, + method: 'get' + }); }, - // 事故快报修改 - accidentView:(params:object)=>{ + // 事故快报修改 + accidentView: (params: object) => { return request({ - url:"/accidentExpress/update", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/accidentExpress/update', + method: 'post', + data: params + }); }, - // 事故快报删除 - accidentDele:(params:object)=>{ - return request({ - url:`/accidentExpress/batchDelete`, - method:"post", - data:params - }) - }, + // 事故快报删除 + accidentDele: (params: object) => { + return request({ + url: import.meta.env.VITE_API_URL_OUT + `/accidentExpress/batchDelete`, + method: 'post', + data: params + }); + }, // 工伤申报一览 - workList:(params:object)=>{ + workList: (params: object) => { return request({ - url:"/workInjuryDeclaration/page/list", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/workInjuryDeclaration/page/list', + method: 'post', + data: params + }); }, // 工伤申报新增 - workAdd:(params:object)=>{ + workAdd: (params: object) => { return request({ - url:"/workInjuryDeclaration/add", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/workInjuryDeclaration/add', + method: 'post', + data: params + }); }, // 工伤申报详情 - workScarh:(params:number)=>{ + workScarh: (params: number) => { return request({ - url:`/workInjuryDeclaration/info/${params}`, - method:"get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/workInjuryDeclaration/info/${params}`, + method: 'get' + }); }, // 工伤申报修改 - workView:(params:object)=>{ + workView: (params: object) => { return request({ - url:"/workInjuryDeclaration/update", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/workInjuryDeclaration/update', + method: 'post', + data: params + }); }, // 工伤申报删除/批量删除 - workDelete:(params:object)=>{ + workDelete: (params: object) => { return request({ - url:`/workInjuryDeclaration/batchDelete`, - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/workInjuryDeclaration/batchDelete`, + method: 'post', + data: params + }); }, // 伤亡人员一览 - casualtyList:(id:number)=>{ + casualtyList: (id: number) => { return request({ - url:`/accidentExpress/casualty/list/${id}`, - method:"get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/accidentExpress/casualty/list/${id}`, + method: 'get' + }); }, // 伤亡人员新增 - casualtyAdd:(params:object)=>{ + casualtyAdd: (params: object) => { return request({ - url:`/accidentExpress/casualty/add`, - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/accidentExpress/casualty/add`, + method: 'post', + data: params + }); }, // 伤亡人员删除 - casualtyDel:(id:number)=>{ + casualtyDel: (id: number) => { return request({ - url:`/accidentExpress/casualty/del/${id}`, - method:"get", - }) - }, - } -} \ No newline at end of file + url: import.meta.env.VITE_API_URL_OUT + `/accidentExpress/casualty/del/${id}`, + method: 'get' + }); + } + }; +} diff --git a/src/api/contingencyManagement/contingency/index.ts b/src/api/contingencyManagement/contingency/index.ts index d3222b2..b54e382 100644 --- a/src/api/contingencyManagement/contingency/index.ts +++ b/src/api/contingencyManagement/contingency/index.ts @@ -1,83 +1,83 @@ import request from '/@/utils/request'; -export function contingencyApi(){ - return{ +export function contingencyApi() { + return { //应急队伍一览 getTeamManagementList: (params: object) => { return request({ - url: `/emergencyTeam/page/list`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyTeam/page/list`, method: 'post', - data:params - }) + data: params + }); }, // 应急队伍新增 - addEmergencyTeam: (params:object) => { + addEmergencyTeam: (params: object) => { return request({ - url: `/emergencyTeam/add`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyTeam/add`, method: 'post', data: params }); }, // 应急队伍详情 - seeEmergencyTeam: (params:number) => { + seeEmergencyTeam: (params: number) => { return request({ - url: `/emergencyTeam/info/${params}`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyTeam/info/${params}`, method: 'get' }); }, // 应急队伍编辑 editEmergencyTeam: (params: object) => { return request({ - url: `/emergencyTeam/update`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyTeam/update`, method: 'post', data: params }); }, // 应急队伍删除 - deleteEmergencyTeam: (params:object) => { + deleteEmergencyTeam: (params: object) => { return request({ - url: `/emergencyTeam/batchDelete`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyTeam/batchDelete`, method: 'post', - data:params + data: params }); }, // 应急队伍人员一览 getEmergencyTeamPersonnelList: (params: number) => { return request({ - url: `/emergencyTeam/memberList/${params}`, - method: 'get', + url: import.meta.env.VITE_API_URL_OUT + `/emergencyTeam/memberList/${params}`, + method: 'get' // data:params - }) + }); }, // 应急队伍人员新增 - addEmergencyTeamPersonnel: (params:object) => { + addEmergencyTeamPersonnel: (params: object) => { return request({ - url: `/emergencyTeam/addMember`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyTeam/addMember`, method: 'post', data: params }); }, // 应急队伍人员详情 - seeEmergencyTeamPersonnel: (params:number) => { + seeEmergencyTeamPersonnel: (params: number) => { return request({ - url: `/emergencyTeam/infoMember/${params}`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyTeam/infoMember/${params}`, method: 'get' }); }, // 应急队伍人员编辑 editEmergencyTeamPersonnel: (params: object) => { return request({ - url: `/emergencyTeam/updateMember`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyTeam/updateMember`, method: 'post', data: params }); }, // 应急队伍人员删除 - deleteEmergencyTeamPersonnel: (params:object) => { + deleteEmergencyTeamPersonnel: (params: object) => { return request({ - url: `/emergencyTeam/deleteMember/${params}`, - method: 'get', + url: import.meta.env.VITE_API_URL_OUT + `/emergencyTeam/deleteMember/${params}`, + method: 'get' }); - }, - } -} \ No newline at end of file + } + }; +} diff --git a/src/api/contingencyManagement/emergencyDrillEvaluation/index.ts b/src/api/contingencyManagement/emergencyDrillEvaluation/index.ts index 547de4c..b2f81aa 100644 --- a/src/api/contingencyManagement/emergencyDrillEvaluation/index.ts +++ b/src/api/contingencyManagement/emergencyDrillEvaluation/index.ts @@ -1,45 +1,45 @@ import request from '/@/utils/request'; -export function emergencyDrillEvaluationApi(){ - return{ +export function emergencyDrillEvaluationApi() { + return { // 应急演练实施评价一览 getEmergencyDrillEvaluationList: (params: object) => { return request({ - url: '/emergencyDrillEvaluation/page/list', + url: import.meta.env.VITE_API_URL_OUT + '/emergencyDrillEvaluation/page/list', method: 'post', - data:params - }) + data: params + }); }, // 应急演练实施评价新增 - addEmergencyDrillEvaluation: (params:object) => { + addEmergencyDrillEvaluation: (params: object) => { return request({ - url: `/emergencyDrillEvaluation/add`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillEvaluation/add`, method: 'post', data: params }); }, // 应急演练实施评价详情 - seeEmergencyDrillEvaluation: (params:number) => { + seeEmergencyDrillEvaluation: (params: number) => { return request({ - url: `/emergencyDrillEvaluation/info/${params}`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillEvaluation/info/${params}`, method: 'get' }); }, // 应急演练实施评价编辑 editEmergencyDrillEvaluation: (params: object) => { return request({ - url: `/emergencyDrillEvaluation/update`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillEvaluation/update`, method: 'post', data: params }); }, // 应急演练实施评价删除 - deleteEmergencyDrillEvaluation: (params:object) => { + deleteEmergencyDrillEvaluation: (params: object) => { return request({ - url: `/emergencyDrillEvaluation/batchDelete`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillEvaluation/batchDelete`, method: 'post', data: params }); - }, - } -} \ No newline at end of file + } + }; +} diff --git a/src/api/contingencyManagement/emergencyDrillExecute/index.ts b/src/api/contingencyManagement/emergencyDrillExecute/index.ts index a5b380a..911ac5f 100644 --- a/src/api/contingencyManagement/emergencyDrillExecute/index.ts +++ b/src/api/contingencyManagement/emergencyDrillExecute/index.ts @@ -1,45 +1,45 @@ import request from '/@/utils/request'; -export function emergencyDrillExecuteApi(){ - return{ +export function emergencyDrillExecuteApi() { + return { // 应急演练实施一览 getEmergencyDrillExecuteList: (params: object) => { return request({ - url: '/emergencyDrillExecute/page/list', + url: import.meta.env.VITE_API_URL_OUT + '/emergencyDrillExecute/page/list', method: 'post', - data:params - }) + data: params + }); }, // 应急演练实施新增 - addEmergencyDrillExecute: (params:object) => { + addEmergencyDrillExecute: (params: object) => { return request({ - url: `/emergencyDrillExecute/add`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillExecute/add`, method: 'post', data: params }); }, // 应急演练实施详情 - seeEmergencyDrillExecute: (params:number) => { + seeEmergencyDrillExecute: (params: number) => { return request({ - url: `/emergencyDrillExecute/info/${params}`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillExecute/info/${params}`, method: 'get' }); }, // 应急演练实施编辑 editEmergencyDrillExecute: (params: object) => { return request({ - url: `/emergencyDrillExecute/update`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillExecute/update`, method: 'post', data: params }); }, // 应急演练实施删除 - deleteEmergencyDrillExecute: (params:any) => { + deleteEmergencyDrillExecute: (params: any) => { return request({ - url: `/emergencyDrillExecute/batchDelete`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillExecute/batchDelete`, method: 'post', data: params }); - }, - } -} \ No newline at end of file + } + }; +} diff --git a/src/api/contingencyManagement/emergencyDrillPlan/index.ts b/src/api/contingencyManagement/emergencyDrillPlan/index.ts index e4ad774..110d032 100644 --- a/src/api/contingencyManagement/emergencyDrillPlan/index.ts +++ b/src/api/contingencyManagement/emergencyDrillPlan/index.ts @@ -1,45 +1,45 @@ import request from '/@/utils/request'; -export function releaseDrillPlanApi(){ - return{ +export function releaseDrillPlanApi() { + return { //演练计划发布一览 getReleaseDrillPlanList: (params: object) => { return request({ - url: '/emergencyDrillPlan/page/list', + url: import.meta.env.VITE_API_URL_OUT + '/emergencyDrillPlan/page/list', method: 'post', - data:params - }) + data: params + }); }, // 演练计划发布新增 - addReleaseDrillPlan: (params:object) => { + addReleaseDrillPlan: (params: object) => { return request({ - url: `/emergencyDrillPlan/add`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillPlan/add`, method: 'post', data: params }); }, // 演练计划发布详情 - seeReleaseDrillPlan: (params:number) => { + seeReleaseDrillPlan: (params: number) => { return request({ - url: `/emergencyDrillPlan/info/${params}`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillPlan/info/${params}`, method: 'get' }); }, // 演练计划发布编辑 editReleaseDrillPlan: (params: object) => { return request({ - url: `/emergencyDrillPlan/update`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillPlan/update`, method: 'post', data: params }); }, // 演练计划发布删除 - deleteReleaseDrillPlan: (params:object) => { + deleteReleaseDrillPlan: (params: object) => { return request({ - url: `/emergencyDrillPlan/batchDelete`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyDrillPlan/batchDelete`, method: 'post', data: params }); - }, - } -} \ No newline at end of file + } + }; +} diff --git a/src/api/contingencyManagement/emergencyMaterialsInspection/index.ts b/src/api/contingencyManagement/emergencyMaterialsInspection/index.ts index d9571c4..0809c93 100644 --- a/src/api/contingencyManagement/emergencyMaterialsInspection/index.ts +++ b/src/api/contingencyManagement/emergencyMaterialsInspection/index.ts @@ -1,45 +1,45 @@ import request from '/@/utils/request'; -export function emergencyMaterialsInspectionApi(){ - return{ +export function emergencyMaterialsInspectionApi() { + return { //应急物资检查一览 getEmergencyMaterialsInspectionList: (params: object) => { return request({ - url: '/emergencySuppliesInspect/page/list', + url: import.meta.env.VITE_API_URL_OUT + '/emergencySuppliesInspect/page/list', method: 'post', - data:params - }) + data: params + }); }, // 应急物资检查新增 - addEmergencyMaterialsInspection: (params:object) => { + addEmergencyMaterialsInspection: (params: object) => { return request({ - url: `/emergencySuppliesInspect/add`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencySuppliesInspect/add`, method: 'post', data: params }); }, // 应急物资检查详情 - seeEmergencyMaterialsInspection: (params:number) => { + seeEmergencyMaterialsInspection: (params: number) => { return request({ - url: `/emergencySuppliesInspect/info/${params}`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencySuppliesInspect/info/${params}`, method: 'get' }); }, // 应急物资检查编辑 editEmergencyMaterialsInspection: (params: object) => { return request({ - url: `/emergencySuppliesInspect/update`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencySuppliesInspect/update`, method: 'post', data: params }); }, // 应急物资检查删除 - deleteEmergencyMaterialsInspection: (params:object) => { + deleteEmergencyMaterialsInspection: (params: object) => { return request({ - url: `/emergencySuppliesInspect/batchDelete`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencySuppliesInspect/batchDelete`, method: 'post', data: params }); - }, - } -} \ No newline at end of file + } + }; +} diff --git a/src/api/contingencyManagement/emergencyPlan/index.ts b/src/api/contingencyManagement/emergencyPlan/index.ts index fb79a63..4b7a323 100644 --- a/src/api/contingencyManagement/emergencyPlan/index.ts +++ b/src/api/contingencyManagement/emergencyPlan/index.ts @@ -1,64 +1,64 @@ import request from '/@/utils/request'; -export function emergencyPlanApi(){ - return{ +export function emergencyPlanApi() { + return { // 应急预案管理一览 getEmergencyPlanList: (params: object) => { return request({ - url: '/emergencyPlan/page/list', + url: import.meta.env.VITE_API_URL_OUT + '/emergencyPlan/page/list', method: 'post', - data:params - }) + data: params + }); }, // 应急预案管理新增 addEmergencyPlan: (params: object) => { return request({ - url: `/emergencyPlan/add`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyPlan/add`, method: 'post', data: params }); }, // 应急队伍详情 - seeEmergencyTeam: (params:number) => { + seeEmergencyTeam: (params: number) => { return request({ - url: `/emergencyPlan/info/${params}`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyPlan/info/${params}`, method: 'get' }); }, // 应急队伍编辑 editEmergencyTeam: (params: object) => { return request({ - url: `/emergencyPlan/update`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyPlan/update`, method: 'post', data: params }); }, // 应急队伍删除 - deleteEmergencyTeam: (params:object) => { + deleteEmergencyTeam: (params: object) => { return request({ - url: `/emergencyPlan/batchDelete`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyPlan/batchDelete`, method: 'post', data: params }); }, // 应急队伍废止 - EmergencyTeam: (params:object) => { + EmergencyTeam: (params: object) => { return request({ - url: `/emergencyPlan/updateAbolish?id=${params}&abolishStatus=true`, - method: 'get', + url: import.meta.env.VITE_API_URL_OUT + `/emergencyPlan/updateAbolish?id=${params}&abolishStatus=true`, + method: 'get' }); }, // 应急队伍还原 - reductionEmergencyTeam: (params:number) => { + reductionEmergencyTeam: (params: number) => { return request({ - url: `/emergencyPlan/updateAbolish?id=${params}&abolishStatus=false`, - method: 'get', + url: import.meta.env.VITE_API_URL_OUT + `/emergencyPlan/updateAbolish?id=${params}&abolishStatus=false`, + method: 'get' }); }, // 应急预案管理审批新增 approvalEmergencyPlan: (params: object) => { return request({ - url: `/emergencyWorkApprove/add`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyWorkApprove/add`, method: 'post', data: params }); @@ -66,7 +66,7 @@ // 应急预案管理审批修改 editApprovalEmergencyPlan: (params: object) => { return request({ - url: `/emergencyWorkApprove/update`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyWorkApprove/update`, method: 'post', data: params }); @@ -74,7 +74,7 @@ // 应急预案管理审批查看 approvalProcessEmergencyPlan: (params: number) => { return request({ - url: `/emergencyWorkApprove/info/${params}`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyWorkApprove/info/${params}`, method: 'get', data: params }); @@ -82,10 +82,10 @@ // 审批一览 processEmergencyPlan: (params: object) => { return request({ - url: `/emergencyWorkApprove/page/list`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencyWorkApprove/page/list`, method: 'post', data: params }); - }, - } -} \ No newline at end of file + } + }; +} diff --git a/src/api/contingencyManagement/emergencyPlanLog/index.ts b/src/api/contingencyManagement/emergencyPlanLog/index.ts index ce58752..80c1885 100644 --- a/src/api/contingencyManagement/emergencyPlanLog/index.ts +++ b/src/api/contingencyManagement/emergencyPlanLog/index.ts @@ -1,45 +1,45 @@ import request from '/@/utils/request'; -export function emergencyPlanLogApi(){ - return{ +export function emergencyPlanLogApi() { + return { // 应急预案启动记录一览 getEmergencyPlanLogList: (params: object) => { return request({ - url: '/emergencyPlanLog/page/list', + url: import.meta.env.VITE_API_URL_OUT + '/emergencyPlanLog/page/list', method: 'post', - data:params - }) + data: params + }); }, // 应急预案启动记录新增 - addEmergencyPlanLog:(params:object)=>{ + addEmergencyPlanLog: (params: object) => { return request({ - url:"/emergencyPlanLog/add", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/emergencyPlanLog/add', + method: 'post', + data: params + }); }, // 应急预案启动记录详情 - seeEmergencyPlanLog:(params:number)=>{ + seeEmergencyPlanLog: (params: number) => { return request({ - url:`/emergencyPlanLog/info/${params}`, - method:"get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/emergencyPlanLog/info/${params}`, + method: 'get' + }); }, // 应急预案启动记录修改 - editEmergencyPlanLog:(params:object)=>{ + editEmergencyPlanLog: (params: object) => { return request({ - url:"/emergencyPlanLog/update", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/emergencyPlanLog/update', + method: 'post', + data: params + }); }, // 应急预案启动记录删除 - deleteEmergencyPlanLog:(params:object)=>{ + deleteEmergencyPlanLog: (params: object) => { return request({ - url:`/emergencyPlanLog/batchDelete`, - method:"post", - data:params - }) - }, - } -} \ No newline at end of file + url: import.meta.env.VITE_API_URL_OUT + `/emergencyPlanLog/batchDelete`, + method: 'post', + data: params + }); + } + }; +} diff --git a/src/api/contingencyManagement/emergencyResources/index.ts b/src/api/contingencyManagement/emergencyResources/index.ts index 15f2778..d1c0a9b 100644 --- a/src/api/contingencyManagement/emergencyResources/index.ts +++ b/src/api/contingencyManagement/emergencyResources/index.ts @@ -1,45 +1,45 @@ import request from '/@/utils/request'; -export function emergencySuppliesApi(){ - return{ +export function emergencySuppliesApi() { + return { // 应急物资一览 - getEmergencySuppliesList:(params:object)=>{ + getEmergencySuppliesList: (params: object) => { return request({ - url:"/emergencySupplies/page/list", - method:'post', - data:params, + url: import.meta.env.VITE_API_URL_OUT + '/emergencySupplies/page/list', + method: 'post', + data: params }); }, // 应急物资新增 - addEmergencySupplies:(params:object)=>{ + addEmergencySupplies: (params: object) => { return request({ - url:"/emergencySupplies/add", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/emergencySupplies/add', + method: 'post', + data: params + }); }, // 应急物资详情 - seeEmergencySupplies: (params:number) => { + seeEmergencySupplies: (params: number) => { return request({ - url: `/emergencySupplies/info/${params}`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencySupplies/info/${params}`, method: 'get' }); }, // 应急物资编辑 editEmergencySupplies: (params: object) => { return request({ - url: `/emergencySupplies/update`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencySupplies/update`, method: 'post', data: params }); }, // 应急物资删除 - deleteEmergencySupplies: (params:object) => { + deleteEmergencySupplies: (params: object) => { return request({ - url: `/emergencySupplies/batchDelete`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencySupplies/batchDelete`, method: 'post', data: params }); - }, - } -} \ No newline at end of file + } + }; +} diff --git a/src/api/contingencyManagement/maintenanceEmergencyMaterials/index.ts b/src/api/contingencyManagement/maintenanceEmergencyMaterials/index.ts index b0412ce..082041c 100644 --- a/src/api/contingencyManagement/maintenanceEmergencyMaterials/index.ts +++ b/src/api/contingencyManagement/maintenanceEmergencyMaterials/index.ts @@ -1,45 +1,45 @@ import request from '/@/utils/request'; -export function maintenanceEmergencyMaterialsApi(){ - return{ +export function maintenanceEmergencyMaterialsApi() { + return { //应急物资保养一览 getMaintenanceEmergencyMaterialsList: (params: object) => { return request({ - url: '/emergencySuppliesMaintain/page/list', + url: import.meta.env.VITE_API_URL_OUT + '/emergencySuppliesMaintain/page/list', method: 'post', - data:params - }) + data: params + }); }, // 应急物资保养新增 - addMaintenanceEmergencyMaterials: (params:object) => { + addMaintenanceEmergencyMaterials: (params: object) => { return request({ - url: `/emergencySuppliesMaintain/add`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencySuppliesMaintain/add`, method: 'post', data: params }); }, // 应急物资保养详情 - seeMaintenanceEmergencyMaterials: (params:number) => { + seeMaintenanceEmergencyMaterials: (params: number) => { return request({ - url: `/emergencySuppliesMaintain/info/${params}`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencySuppliesMaintain/info/${params}`, method: 'get' }); }, // 应急物资保养编辑 editMaintenanceEmergencyMaterials: (params: object) => { return request({ - url: `/emergencySuppliesMaintain/update`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencySuppliesMaintain/update`, method: 'post', data: params }); }, // 应急物资保养删除 - deleteMaintenanceEmergencyMaterials: (params:object) => { + deleteMaintenanceEmergencyMaterials: (params: object) => { return request({ - url: `/emergencySuppliesMaintain/batchDelete`, + url: import.meta.env.VITE_API_URL_OUT + `/emergencySuppliesMaintain/batchDelete`, method: 'post', data: params }); - }, - } -} \ No newline at end of file + } + }; +} diff --git a/src/api/doublePreventSystem/check/index.ts b/src/api/doublePreventSystem/check/index.ts index 031fb54..2bf8d00 100644 --- a/src/api/doublePreventSystem/check/index.ts +++ b/src/api/doublePreventSystem/check/index.ts @@ -5,7 +5,7 @@ // v1 getHiddenCheckList: (data: object) => { return request({ - url: `/prevent/dangerRectify/select/getRectifyOverPage`, + url: import.meta.env.VITE_API_URL + `/prevent/dangerRectify/select/getRectifyOverPage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 submitHiddenCheck: (data: object) => { return request({ - url: `/prevent/dangerRectify/update/reportRectify`, + url: import.meta.env.VITE_API_URL + `/prevent/dangerRectify/update/reportRectify`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 getAllHiddenCheckList: () => { return request({ - url: `/prevent/device/select/listDevices`, + url: import.meta.env.VITE_API_URL + `/prevent/device/select/listDevices`, method: 'post' }); } diff --git a/src/api/doublePreventSystem/checkUnit/index.ts b/src/api/doublePreventSystem/checkUnit/index.ts index 8085f50..70a60d9 100644 --- a/src/api/doublePreventSystem/checkUnit/index.ts +++ b/src/api/doublePreventSystem/checkUnit/index.ts @@ -5,7 +5,7 @@ // v1 getCheckUnitList: (data: object) => { return request({ - url: `/prevent/taskUnit/select/getTaskUnitPage`, + url: import.meta.env.VITE_API_URL + `/prevent/taskUnit/select/getTaskUnitPage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 addCheckUnit: (data: object) => { return request({ - url: `/prevent/taskUnit/insert/saveTaskUnit`, + url: import.meta.env.VITE_API_URL + `/prevent/taskUnit/insert/saveTaskUnit`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 modCheckUnit: (data: object) => { return request({ - url: `/prevent/taskUnit/update/updateTaskUnit`, + url: import.meta.env.VITE_API_URL + `/prevent/taskUnit/update/updateTaskUnit`, method: 'post', data: data }); @@ -29,14 +29,14 @@ // v1 deleteCheckUnit: (data: object) => { return request({ - url: `/prevent/taskUnit/delete/deleteTaskUnit`, + url: import.meta.env.VITE_API_URL + `/prevent/taskUnit/delete/deleteTaskUnit`, method: 'post', data: data }); }, getAllCheckUnitList: () => { return request({ - url: `/prevent/taskUnit/select/listTaskUnit`, + url: import.meta.env.VITE_API_URL + `/prevent/taskUnit/select/listTaskUnit`, method: 'post' }); } diff --git a/src/api/doublePreventSystem/productionDevice/index.ts b/src/api/doublePreventSystem/productionDevice/index.ts index 4f59f32..f090b09 100644 --- a/src/api/doublePreventSystem/productionDevice/index.ts +++ b/src/api/doublePreventSystem/productionDevice/index.ts @@ -5,7 +5,7 @@ // v1 getProductionDeviceList: (data: object) => { return request({ - url: `/prevent/device/select/getDevicePage`, + url: import.meta.env.VITE_API_URL + `/prevent/device/select/getDevicePage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 addProductionDevice: (data: object) => { return request({ - url: `/prevent/device/insert/saveDevice`, + url: import.meta.env.VITE_API_URL + `/prevent/device/insert/saveDevice`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 modProductionDevice: (data: object) => { return request({ - url: `/prevent/device/update/updateDevice`, + url: import.meta.env.VITE_API_URL + `/prevent/device/update/updateDevice`, method: 'post', data: data }); @@ -29,7 +29,7 @@ // v1 deleteProductionDevice: (data: object) => { return request({ - url: `/prevent/device/delete/deleteDevice`, + url: import.meta.env.VITE_API_URL + `/prevent/device/delete/deleteDevice`, method: 'post', data: data }); @@ -37,7 +37,7 @@ // v1 getAllProductionDeviceList: () => { return request({ - url: `/prevent/device/select/listDevices`, + url: import.meta.env.VITE_API_URL + `/prevent/device/select/listDevices`, method: 'post' }); } diff --git a/src/api/doublePreventSystem/record/index.ts b/src/api/doublePreventSystem/record/index.ts index 2ee8ad4..38122d7 100644 --- a/src/api/doublePreventSystem/record/index.ts +++ b/src/api/doublePreventSystem/record/index.ts @@ -5,7 +5,7 @@ // v1 getRecordList: (data: object) => { return request({ - url: `/prevent/checkTask/select/getTaskPage`, + url: import.meta.env.VITE_API_URL + `/prevent/checkTask/select/getTaskPage`, method: 'post', data: data }); @@ -14,7 +14,7 @@ // v1 submitRecord: (data: object) => { return request({ - url: `/prevent/checkTask/update/updateTask`, + url: import.meta.env.VITE_API_URL + `/prevent/checkTask/update/updateTask`, method: 'post', data: data }); @@ -22,7 +22,7 @@ getTask: (data: object) => { return request({ - url: `/prevent/checkTask/update/taskToUser`, + url: import.meta.env.VITE_API_URL + `/prevent/checkTask/update/taskToUser`, method: 'post', data: data }); diff --git a/src/api/doublePreventSystem/rectify/index.ts b/src/api/doublePreventSystem/rectify/index.ts index d9e054e..eb04e43 100644 --- a/src/api/doublePreventSystem/rectify/index.ts +++ b/src/api/doublePreventSystem/rectify/index.ts @@ -5,7 +5,7 @@ // v1 getHiddenRectifyList: (data: object) => { return request({ - url: `/prevent/dangerRectify/select/getDangerRectifyPage`, + url: import.meta.env.VITE_API_URL + `/prevent/dangerRectify/select/getDangerRectifyPage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 submitHiddenRectify: (data: object) => { return request({ - url: `/prevent/dangerRectify/update/applyReport`, + url: import.meta.env.VITE_API_URL + `/prevent/dangerRectify/update/applyReport`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 delayHiddenRectifyTime: (data: object) => { return request({ - url: `/prevent/dangerRectify/update/timeOutRectify`, + url: import.meta.env.VITE_API_URL + `/prevent/dangerRectify/update/timeOutRectify`, method: 'post', data: data }); @@ -29,7 +29,7 @@ // v1 deleteHiddenRectify: (data: object) => { return request({ - url: `/prevent/dangerRectify/delete/deleteDangerRectify`, + url: import.meta.env.VITE_API_URL + `/prevent/dangerRectify/delete/deleteDangerRectify`, method: 'post', data: data }); @@ -37,7 +37,7 @@ // v1 getAllHiddenRectifyList: () => { return request({ - url: `/prevent/device/select/listDevices`, + url: import.meta.env.VITE_API_URL + `/prevent/device/select/listDevices`, method: 'post' }); } diff --git a/src/api/doublePreventSystem/report/index.ts b/src/api/doublePreventSystem/report/index.ts index 9d2f64f..89e12ef 100644 --- a/src/api/doublePreventSystem/report/index.ts +++ b/src/api/doublePreventSystem/report/index.ts @@ -5,7 +5,7 @@ // v1 getHiddenReportList: (data: object) => { return request({ - url: `/prevent/dangerManage/select/getDangerManagePage`, + url: import.meta.env.VITE_API_URL + `/prevent/dangerManage/select/getDangerManagePage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 addHiddenReport: (data: object) => { return request({ - url: `/prevent/dangerManage/insert/saveDangerManage`, + url: import.meta.env.VITE_API_URL + `/prevent/dangerManage/insert/saveDangerManage`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 modHiddenReport: (data: object) => { return request({ - url: `/prevent/dangerManage/update/updateDangerManage`, + url: import.meta.env.VITE_API_URL + `/prevent/dangerManage/update/updateDangerManage`, method: 'post', data: data }); @@ -29,7 +29,7 @@ // v1 deleteHiddenReport: (data: object) => { return request({ - url: `/prevent/dangerManage/delete/deleteDangerManage`, + url: import.meta.env.VITE_API_URL + `/prevent/dangerManage/delete/deleteDangerManage`, method: 'post', data: data }); diff --git a/src/api/doublePreventSystem/riskControlMeasure/index.ts b/src/api/doublePreventSystem/riskControlMeasure/index.ts index 28f2311..c9d4955 100644 --- a/src/api/doublePreventSystem/riskControlMeasure/index.ts +++ b/src/api/doublePreventSystem/riskControlMeasure/index.ts @@ -5,7 +5,7 @@ // v1 getRiskControlMeasureList: (data: object) => { return request({ - url: `/prevent/riskControlMeasure/select/getRiskControlMeasurePage`, + url: import.meta.env.VITE_API_URL + `/prevent/riskControlMeasure/select/getRiskControlMeasurePage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 addRiskControlMeasure: (data: object) => { return request({ - url: `/prevent/riskControlMeasure/insert/saveRiskControlMeasure`, + url: import.meta.env.VITE_API_URL + `/prevent/riskControlMeasure/insert/saveRiskControlMeasure`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 modRiskControlMeasure: (data: object) => { return request({ - url: `/prevent/riskControlMeasure/update/updateRiskControlMeasure`, + url: import.meta.env.VITE_API_URL + `/prevent/riskControlMeasure/update/updateRiskControlMeasure`, method: 'post', data: data }); @@ -29,20 +29,20 @@ // v1 deleteRiskControlMeasure: (data: object) => { return request({ - url: `/prevent/riskControlMeasure/delete/deleteRiskControlMeasure`, + url: import.meta.env.VITE_API_URL + `/prevent/riskControlMeasure/delete/deleteRiskControlMeasure`, method: 'post', data: data }); }, getAllRiskControlMeasureList: () => { return request({ - url: `/prevent/riskControlMeasure/select/listControlMeasure`, + url: import.meta.env.VITE_API_URL + `/prevent/riskControlMeasure/select/listControlMeasure`, method: 'post' }); }, getClassifyData: () => { return request({ - url: `/prevent/riskControlMeasure/select/listMeasures`, + url: import.meta.env.VITE_API_URL + `/prevent/riskControlMeasure/select/listMeasures`, method: 'post' }); } diff --git a/src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts b/src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts index 8f93426..58e8d2f 100644 --- a/src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts +++ b/src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts @@ -5,7 +5,7 @@ // v1 getSafetyRiskAnalyseUnitList: (data: object) => { return request({ - url: `/prevent/riskAnaUnit/select/getRiskUnitPage`, + url: import.meta.env.VITE_API_URL + `/prevent/riskAnaUnit/select/getRiskUnitPage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 addSafetyRiskAnalyseUnit: (data: object) => { return request({ - url: `/prevent/riskAnaUnit/insert/saveRiskAnaUnit`, + url: import.meta.env.VITE_API_URL + `/prevent/riskAnaUnit/insert/saveRiskAnaUnit`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 modSafetyRiskAnalyseUnit: (data: object) => { return request({ - url: `/prevent/riskAnaUnit/update/updateRiskAnaUnit`, + url: import.meta.env.VITE_API_URL + `/prevent/riskAnaUnit/update/updateRiskAnaUnit`, method: 'post', data: data }); @@ -29,7 +29,7 @@ // v1 deleteSafetyRiskAnalyseUnit: (data: object) => { return request({ - url: `/prevent/riskAnaUnit/delete/deleteRiskAnaUnit`, + url: import.meta.env.VITE_API_URL + `/prevent/riskAnaUnit/delete/deleteRiskAnaUnit`, method: 'post', data: data }); @@ -37,7 +37,7 @@ // v1 getAllSafetyRiskAnalyseUnitList: () => { return request({ - url: `/prevent/riskEvent/select/listRiskUnits`, + url: import.meta.env.VITE_API_URL + `/prevent/riskEvent/select/listRiskUnits`, method: 'post' }); } diff --git a/src/api/doublePreventSystem/safetyRiskEvent/index.ts b/src/api/doublePreventSystem/safetyRiskEvent/index.ts index 0aa7087..4eb648e 100644 --- a/src/api/doublePreventSystem/safetyRiskEvent/index.ts +++ b/src/api/doublePreventSystem/safetyRiskEvent/index.ts @@ -5,7 +5,7 @@ // v1 getSafetyRiskEventList: (data: object) => { return request({ - url: `/prevent/riskEvent/select/getRiskEventPage`, + url: import.meta.env.VITE_API_URL + `/prevent/riskEvent/select/getRiskEventPage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 addSafetyRiskEvent: (data: object) => { return request({ - url: `/prevent/riskEvent/insert/saveRiskEvent`, + url: import.meta.env.VITE_API_URL + `/prevent/riskEvent/insert/saveRiskEvent`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 modSafetyRiskEvent: (data: object) => { return request({ - url: `/prevent/riskEvent/update/updateRiskEvent`, + url: import.meta.env.VITE_API_URL + `/prevent/riskEvent/update/updateRiskEvent`, method: 'post', data: data }); @@ -29,7 +29,7 @@ // v1 deleteSafetyRiskEvent: (data: object) => { return request({ - url: `/prevent/riskEvent/delete/deleteRiskEvent`, + url: import.meta.env.VITE_API_URL + `/prevent/riskEvent/delete/deleteRiskEvent`, method: 'post', data: data }); @@ -37,7 +37,7 @@ // v1 getAllSafetyRiskEventList: () => { return request({ - url: `/prevent/riskEvent/select/getListEvents`, + url: import.meta.env.VITE_API_URL + `/prevent/riskEvent/select/getListEvents`, method: 'post' }); } diff --git a/src/api/doublePreventSystem/work/index.ts b/src/api/doublePreventSystem/work/index.ts index 71a64bd..c4737e4 100644 --- a/src/api/doublePreventSystem/work/index.ts +++ b/src/api/doublePreventSystem/work/index.ts @@ -5,7 +5,7 @@ // v1 getWorkList: (data: object) => { return request({ - url: `/prevent/checkWork/select/getCheckWorkPage`, + url: import.meta.env.VITE_API_URL + `/prevent/checkWork/select/getCheckWorkPage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 addWork: (data: object) => { return request({ - url: `/prevent/checkWork/insert/saveCheckWork`, + url: import.meta.env.VITE_API_URL + `/prevent/checkWork/insert/saveCheckWork`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 modWork: (data: object) => { return request({ - url: `/prevent/checkWork/update/updateCheckWork`, + url: import.meta.env.VITE_API_URL + `/prevent/checkWork/update/updateCheckWork`, method: 'post', data: data }); @@ -29,7 +29,7 @@ // v1 deleteWork: (data: object) => { return request({ - url: `/prevent/checkWork/delete/deleteCheckWork`, + url: import.meta.env.VITE_API_URL + `/prevent/checkWork/delete/deleteCheckWork`, method: 'post', data: data }); diff --git a/src/api/facilityManagement/index.ts b/src/api/facilityManagement/index.ts index 52ea447..ffb78be 100644 --- a/src/api/facilityManagement/index.ts +++ b/src/api/facilityManagement/index.ts @@ -1,104 +1,104 @@ import request from '/@/utils/request'; -export function facilityManagementApi(){ - return{ +export function facilityManagementApi() { + return { // 设备设施类型管理 查询单条数据 - getequipmentTypeMngDetail:(params:any)=>{ + getequipmentTypeMngDetail: (params: any) => { return request({ - url:`/equipmentTypeMng/selectOne/${params}`, - method:"get" - }) + url: import.meta.env.VITE_API_URL_OUT + `/equipmentTypeMng/selectOne/${params}`, + method: 'get' + }); }, // 设备设施类型管理 新增或者修改数据 - getequipmentTypeMngAddOrUpdate:(params:object)=>{ + getequipmentTypeMngAddOrUpdate: (params: object) => { return request({ - url:"/equipmentTypeMng/addOrUpdate", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/equipmentTypeMng/addOrUpdate', + method: 'post', + data: params + }); }, - // 设备设施类型管理 删除 - getequipmentTypeMngDelete:(params:any)=>{ + // 设备设施类型管理 删除 + getequipmentTypeMngDelete: (params: any) => { return request({ - url:`/equipmentTypeMng/delete`, - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/equipmentTypeMng/delete`, + method: 'post', + data: params + }); }, - // 设备设施类型管理 查询树状数据 - getequipmentTypeMngTreeData:()=>{ + // 设备设施类型管理 查询树状数据 + getequipmentTypeMngTreeData: () => { return request({ - url:`/equipmentTypeMng/treeData`, - method:"get" - }) + url: import.meta.env.VITE_API_URL_OUT + `/equipmentTypeMng/treeData`, + method: 'get' + }); }, // 仪器仪表信息、生产设备设施、安全设备设施 查询单条数据 - getequipmentInfoDetail:(params:any)=>{ + getequipmentInfoDetail: (params: any) => { return request({ - url:`/equipmentInfo/selectOne/${params}`, - method:"get" - }) + url: import.meta.env.VITE_API_URL_OUT + `/equipmentInfo/selectOne/${params}`, + method: 'get' + }); }, // 仪器仪表信息、生产设备设施、安全设备设施 新增或者修改数据 - getequipmentInfoAddOrUpdate:(params:object)=>{ + getequipmentInfoAddOrUpdate: (params: object) => { return request({ - url:"/equipmentInfo/addOrUpdate", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/equipmentInfo/addOrUpdate', + method: 'post', + data: params + }); }, - // 仪器仪表信息、生产设备设施、安全设备设施 删除 - getequipmentInfoDelete:(params:any)=>{ + // 仪器仪表信息、生产设备设施、安全设备设施 删除 + getequipmentInfoDelete: (params: any) => { return request({ - url:`/equipmentInfo/delete`, - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/equipmentInfo/delete`, + method: 'post', + data: params + }); }, // 仪器仪表信息、生产设备设施、安全设备设施 分页查询数据 - getequipmentInfoList:(params:object)=>{ + getequipmentInfoList: (params: object) => { return request({ - url:"/equipmentInfo/page/list", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/equipmentInfo/page/list', + method: 'post', + data: params + }); }, - // 仪器仪表信息、生产设备设施、安全设备设施 统计 - getequipmentInfoStatistics:()=>{ + // 仪器仪表信息、生产设备设施、安全设备设施 统计 + getequipmentInfoStatistics: () => { return request({ - url:`/equipmentInfo/statistics`, - method:"get" - }) + url: import.meta.env.VITE_API_URL_OUT + `/equipmentInfo/statistics`, + method: 'get' + }); }, // 重点监管装置/设备 查询单条数据 - getkeypointEquipmentInfoDetail:(params:any)=>{ + getkeypointEquipmentInfoDetail: (params: any) => { return request({ - url:`/keypointEquipmentInfo/selectOne/${params}`, - method:"get" - }) + url: import.meta.env.VITE_API_URL_OUT + `/keypointEquipmentInfo/selectOne/${params}`, + method: 'get' + }); }, // 重点监管装置/设备 新增或者修改数据 - getkeypointEquipmentInfoAddOrUpdate:(params:object)=>{ + getkeypointEquipmentInfoAddOrUpdate: (params: object) => { return request({ - url:`/keypointEquipmentInfo/addOrUpdate`, - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/keypointEquipmentInfo/addOrUpdate`, + method: 'post', + data: params + }); }, // 重点监管装置/设备 删除 - getkeypointEquipmentInfoDetele:(params:any)=>{ + getkeypointEquipmentInfoDetele: (params: any) => { return request({ - url:`/keypointEquipmentInfo/delete`, - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/keypointEquipmentInfo/delete`, + method: 'post', + data: params + }); }, - // 重点监管装置/设备 分页查询数据 - getkeypointEquipmentInfoAddOrList:(params:object)=>{ + // 重点监管装置/设备 分页查询数据 + getkeypointEquipmentInfoAddOrList: (params: object) => { return request({ - url:`/keypointEquipmentInfo/page/list`, - method:"post", - data:params - }) - }, - } -} \ No newline at end of file + url: import.meta.env.VITE_API_URL_OUT + `/keypointEquipmentInfo/page/list`, + method: 'post', + data: params + }); + } + }; +} diff --git a/src/api/goalManagement/index.ts b/src/api/goalManagement/index.ts index 83745aa..412f1a7 100644 --- a/src/api/goalManagement/index.ts +++ b/src/api/goalManagement/index.ts @@ -1,276 +1,273 @@ - import request from '/@/utils/request'; export function goalManagementApi() { return { // 目标设置、目标指标分解列表 getTargetMngList: (params: object) => { return request({ - url: "/targetMng/page/list", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/targetMng/page/list', + method: 'post', data: params - }) + }); }, // 目标设置详情 getTargetMngDetail: (params: any) => { return request({ - url: `/targetMng/selectOne/${params}`, - method: "get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/targetMng/selectOne/${params}`, + method: 'get' + }); }, // 目标设置新增或者修改数据 getTargetMngAddOrupdata: (params: object) => { return request({ - url: "/targetMng/addOrUpdate", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/targetMng/addOrUpdate', + method: 'post', data: params - }) + }); }, // 目标设置删除 getTargetMngDelete: (params: any) => { return request({ - url: `/targetMng/delete`, - method: "post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/targetMng/delete`, + method: 'post', + data: params + }); }, // 目标指标分解-新增或者修改数据 gettargetDivideDetail: (params: object) => { return request({ - url: "/targetDivideDetail/addOrUpdate", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/targetDivideDetail/addOrUpdate', + method: 'post', data: params - }) + }); }, // 统计 getEquipmentInfo: () => { return request({ - url: "/equipmentInfo/statistics", - method: "get" - }) + url: import.meta.env.VITE_API_URL_OUT + '/equipmentInfo/statistics', + method: 'get' + }); }, // 目标责任书 分页查询数据 gettargetDutyfileInfoList: (params: object) => { return request({ - url: "/targetDutyfileInfo/page/list", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/targetDutyfileInfo/page/list', + method: 'post', data: params - }) + }); }, // 目标责任书 查询单条数据 gettargetDutyfileInfoDetail: (params: number) => { return request({ - url: `/targetDutyfileInfo/selectOne/${params}`, - method: "get" - }) + url: import.meta.env.VITE_API_URL_OUT + `/targetDutyfileInfo/selectOne/${params}`, + method: 'get' + }); }, - // 目标责任书 新增或者修改数据 + // 目标责任书 新增或者修改数据 gettargetDutyfileInfoAddorUpdata: (params: any) => { return request({ - url: `/targetDutyfileInfo/addOrUpdate`, - method: "post", + url: import.meta.env.VITE_API_URL_OUT + `/targetDutyfileInfo/addOrUpdate`, + method: 'post', data: params - }) + }); }, // 目标责任书 删除 gettargetDutyfileInfoDelete: (params: any) => { return request({ - url: `/targetDutyfileInfo/delete`, - method: "post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/targetDutyfileInfo/delete`, + method: 'post', + data: params + }); }, // 奖惩标准设定 分页查询数据 getrewardPunishmentStandardList: (params: object) => { return request({ - url: "/rewardPunishmentStandard/page/list", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/rewardPunishmentStandard/page/list', + method: 'post', data: params - }) + }); }, - // 奖惩标准设定 查询单条数据 + // 奖惩标准设定 查询单条数据 getrewardPunishmentStandardDetail: (params: any) => { return request({ - url: `/rewardPunishmentStandard/selectOne/${params}`, - method: "get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/rewardPunishmentStandard/selectOne/${params}`, + method: 'get' + }); }, // 奖惩标准设定 新增或者修改数据 getrewardPunishmentStandardaddOrUpdate: (params: object) => { return request({ - url: "/rewardPunishmentStandard/addOrUpdate", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/rewardPunishmentStandard/addOrUpdate', + method: 'post', data: params - }) + }); }, - // 奖惩标准设定 删除 + // 奖惩标准设定 删除 getrewardPunishmentStandardDelete: (params: any) => { return request({ - url: `/rewardPunishmentStandard/delete`, - method: "post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/rewardPunishmentStandard/delete`, + method: 'post', + data: params + }); }, // 奖惩记录 分页查询数据 getrewardPunishmentList: (params: object) => { return request({ - url: "/rewardPunishmentDetail/page/list", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/rewardPunishmentDetail/page/list', + method: 'post', data: params - }) + }); }, - // 奖惩记录 查询单条数据 + // 奖惩记录 查询单条数据 getrewardPunishmentDetail: (params: any) => { return request({ - url: `/rewardPunishmentDetail/selectOne/${params}`, - method: "get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/rewardPunishmentDetail/selectOne/${params}`, + method: 'get' + }); }, // 奖惩记录 新增或者修改数据 getrewardPunishmentAddOrUpdate: (params: object) => { return request({ - url: `/rewardPunishmentDetail/addOrUpdate`, - method: "post", + url: import.meta.env.VITE_API_URL_OUT + `/rewardPunishmentDetail/addOrUpdate`, + method: 'post', data: params - }) + }); }, - // 奖惩记录 删除 + // 奖惩记录 删除 getrewardPunishmentDelete: (params: any) => { return request({ - url: `/rewardPunishmentDetail/delete`, - method: "post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/rewardPunishmentDetail/delete`, + method: 'post', + data: params + }); }, // 绩效考核管理 安全考核管理 分页查询数据 getexamineMngList: (params: object) => { return request({ - url: "/examineMng/page/list", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/examineMng/page/list', + method: 'post', data: params - }) + }); }, - // 绩效考核管理 安全考核管理 查询单条数据 + // 绩效考核管理 安全考核管理 查询单条数据 getexamineMngDetail: (params: any) => { return request({ - url: `/examineMng/selectOne/${params}`, - method: "get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/examineMng/selectOne/${params}`, + method: 'get' + }); }, // 绩效考核管理 安全考核管理 新增或者修改数据 getexamineMngAddOrUpdate: (params: object) => { return request({ - url: `/examineMng/addOrUpdate`, - method: "post", + url: import.meta.env.VITE_API_URL_OUT + `/examineMng/addOrUpdate`, + method: 'post', data: params - }) + }); }, - // 绩效考核管理 安全考核管理 删除 + // 绩效考核管理 安全考核管理 删除 getexamineMngDelete: (params: any) => { return request({ - url: `/examineMng/delete`, - method: "post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/examineMng/delete`, + method: 'post', + data: params + }); }, // 绩效考核管理 考核标准设定 分页查询数据 getexamineTemplateList: (params: object) => { return request({ - url: "/examineTemplate/page/list", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/examineTemplate/page/list', + method: 'post', data: params - }) + }); }, - // 绩效考核管理 考核标准设定 查询单条数据 + // 绩效考核管理 考核标准设定 查询单条数据 getexamineTemplateDetail: (params: any) => { return request({ - url: `/examineTemplate/selectOne/${params}`, - method: "get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/examineTemplate/selectOne/${params}`, + method: 'get' + }); }, // 绩效考核管理 考核标准设定 新增或者修改数据 getexamineTemplateAddOrUpdate: (params: object) => { return request({ - url: `/examineTemplate/addOrUpdate`, - method: "post", + url: import.meta.env.VITE_API_URL_OUT + `/examineTemplate/addOrUpdate`, + method: 'post', data: params - }) + }); }, - // 绩效考核管理 考核标准设定 删除 + // 绩效考核管理 考核标准设定 删除 getexamineTemplateDelete: (params: any) => { return request({ - url: `/examineTemplate/delete`, - method: "post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + `/examineTemplate/delete`, + method: 'post', + data: params + }); }, // 目标汇总 分页查询数据 gettargetDutySummaryList: (params: object) => { return request({ - url: "/targetDutySummary/page/list", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/targetDutySummary/page/list', + method: 'post', data: params - }) + }); }, - // 目标汇总 查询单条数据 + // 目标汇总 查询单条数据 gettargetDutySummaryDetail: (params: any) => { return request({ - url: `/targetDutySummary/selectOne/${params}`, - method: "get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/targetDutySummary/selectOne/${params}`, + method: 'get' + }); }, // 目标汇总 新增或者修改数据 gettargetDutySummaryAddOrUpdate: (params: object) => { return request({ - url: `/targetDutySummary/addOrUpdate`, - method: "post", + url: import.meta.env.VITE_API_URL_OUT + `/targetDutySummary/addOrUpdate`, + method: 'post', data: params - }) + }); }, - // 目标汇总 删除 + // 目标汇总 删除 gettargetDutySummaryDelete: (params: any) => { return request({ - url: `/targetDutySummary/delete?ids=${params}`, - method: "get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/targetDutySummary/delete?ids=${params}`, + method: 'get' + }); }, // 安全目标考核 查询单条数据 gettargetExamineDetail: (params: any) => { return request({ - url: `/targetExamine/selectOne/${params}`, - method: "get" - }) + url: import.meta.env.VITE_API_URL_OUT + `/targetExamine/selectOne/${params}`, + method: 'get' + }); }, // 安全目标考核 新增或者修改数据 gettargetExamineAddOrUpdate: (params: object) => { return request({ - url: "/targetExamine/addOrUpdate", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/targetExamine/addOrUpdate', + method: 'post', data: params - }) + }); }, // 目标检查上报 (有疑问) 新增或者修改数据 ---??? getworkApproveAddOrUpdate: (params: object) => { return request({ - url: "/workApprove/submitApprove", - method: "post", + url: import.meta.env.VITE_API_URL_OUT + '/workApprove/submitApprove', + method: 'post', data: params - }) + }); }, // 部门树 getTreedepartment: () => { return request({ - url:"/department/list", - method: "post" - }) - + url: import.meta.env.VITE_API_URL_OUT + '/department/list', + method: 'post' + }); }, // 人员 - getManName:(params:any)=>{ + getManName: (params: any) => { return request({ - url:`/account/dep/list?depId=${params}`, - method:"get" - }) + url: `/account/dep/list?depId=${params}`, + method: 'get' + }); } - - } -} \ No newline at end of file + }; +} diff --git a/src/api/intellectInspectSystem/RFID/index.ts b/src/api/intellectInspectSystem/RFID/index.ts index 3b09576..3cbe317 100644 --- a/src/api/intellectInspectSystem/RFID/index.ts +++ b/src/api/intellectInspectSystem/RFID/index.ts @@ -5,7 +5,7 @@ // v1 getRFIDList: (data: object) => { return request({ - url: `/SafeCheckRfid/select/listRfidByPage`, + url: import.meta.env.VITE_API_URL + `/SafeCheckRfid/select/listRfidByPage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 addRFID: (data: object) => { return request({ - url: `/SafeCheckRfid/insert/saveRfid`, + url: import.meta.env.VITE_API_URL + `/SafeCheckRfid/insert/saveRfid`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 modRFID: (data: object) => { return request({ - url: `/SafeCheckRfid/update/updateRfidById`, + url: import.meta.env.VITE_API_URL + `/SafeCheckRfid/update/updateRfidById`, method: 'post', data: data }); @@ -29,7 +29,7 @@ // v1 deleteRFID: (data: object) => { return request({ - url: `/SafeCheckRfid/delete/deleteRfidById`, + url: import.meta.env.VITE_API_URL + `/SafeCheckRfid/delete/deleteRfidById`, method: 'post', data: data }); @@ -37,7 +37,7 @@ // v1 getAllRFIDList: () => { return request({ - url: `/SafeCheckRfid/select/listRfidName`, + url: import.meta.env.VITE_API_URL + `/SafeCheckRfid/select/listRfidName`, method: 'get' }); } diff --git a/src/api/intellectInspectSystem/facilityAreaManage/index.ts b/src/api/intellectInspectSystem/facilityAreaManage/index.ts index 154918e..3c71309 100644 --- a/src/api/intellectInspectSystem/facilityAreaManage/index.ts +++ b/src/api/intellectInspectSystem/facilityAreaManage/index.ts @@ -5,7 +5,7 @@ // v1 getFacilityAreaList: (data: object) => { return request({ - url: `/safeCheckRegion/select/listRegionByPage`, + url: import.meta.env.VITE_API_URL + `/safeCheckRegion/select/listRegionByPage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 getFacilityAreaById: (data: object) => { return request({ - url: `/safeCheckRegion/select/getRegionById`, + url: import.meta.env.VITE_API_URL + `/safeCheckRegion/select/getRegionById`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 addFacilityArea: (data: object) => { return request({ - url: `/safeCheckRegion/insert/saveRegion`, + url: import.meta.env.VITE_API_URL + `/safeCheckRegion/insert/saveRegion`, method: 'post', data: data }); @@ -29,7 +29,7 @@ // v1 modFacilityArea: (data: object) => { return request({ - url: `/safeCheckRegion/update/updateRegionById`, + url: import.meta.env.VITE_API_URL + `/safeCheckRegion/update/updateRegionById`, method: 'post', data: data }); @@ -37,7 +37,7 @@ // v1 deleteFacilityArea: (data: object) => { return request({ - url: `/safeCheckRegion/delete/deleteRegionById`, + url: import.meta.env.VITE_API_URL + `/safeCheckRegion/delete/deleteRegionById`, method: 'post', data: data }); @@ -45,14 +45,14 @@ // v1 getAllFacilityAreaList: () => { return request({ - url: `/safeCheckRegion/select/listRegionName`, + url: import.meta.env.VITE_API_URL + `/safeCheckRegion/select/listRegionName`, method: 'get' }); }, // v1 getFacilityAreaType: () => { return request({ - url: `/SafeCheckRegionType/select/listRegionType`, + url: import.meta.env.VITE_API_URL + `/SafeCheckRegionType/select/listRegionType`, method: 'get' }); } diff --git a/src/api/intellectInspectSystem/inspectPointManage/index.ts b/src/api/intellectInspectSystem/inspectPointManage/index.ts index ecf9c37..fc9b8b4 100644 --- a/src/api/intellectInspectSystem/inspectPointManage/index.ts +++ b/src/api/intellectInspectSystem/inspectPointManage/index.ts @@ -5,7 +5,7 @@ // v1 getInspectPointList: (data: object) => { return request({ - url: `/safeCheckPoint/select/listPointByPage`, + url: import.meta.env.VITE_API_URL + `/safeCheckPoint/select/listPointByPage`, method: 'post', data: data }); @@ -13,7 +13,7 @@ // v1 getInspectPointById: (data: object) => { return request({ - url: `/safeCheckPoint/select/getPointById`, + url: import.meta.env.VITE_API_URL + `/safeCheckPoint/select/getPointById`, method: 'post', data: data }); @@ -21,7 +21,7 @@ // v1 addInspectPoint: (data: object) => { return request({ - url: `/safeCheckPoint/insert/savePoint`, + url: import.meta.env.VITE_API_URL + `/safeCheckPoint/insert/savePoint`, method: 'post', data: data }); @@ -29,7 +29,7 @@ // v1 modInspectPoint: (data: object) => { return request({ - url: `/safeCheckPoint/update/updatePointById`, + url: import.meta.env.VITE_API_URL + `/safeCheckPoint/update/updatePointById`, method: 'post', data: data }); @@ -37,7 +37,7 @@ // v1 deleteInspectPoint: (data: object) => { return request({ - url: `/safeCheckPoint/delete/deletePointById`, + url: import.meta.env.VITE_API_URL + `/safeCheckPoint/delete/deletePointById`, method: 'post', data: data }); @@ -45,7 +45,7 @@ // v1 getAllInspectPointList: () => { return request({ - url: `/safeCheckRegion/select/listRegionName`, + url: import.meta.env.VITE_API_URL + `/safeCheckRegion/select/listRegionName`, method: 'get' }); } diff --git a/src/api/intellectInspectSystem/inspectTargetManage/index.ts b/src/api/intellectInspectSystem/inspectTargetManage/index.ts index 6d03aaa..cec17ec 100644 --- a/src/api/intellectInspectSystem/inspectTargetManage/index.ts +++ b/src/api/intellectInspectSystem/inspectTargetManage/index.ts @@ -5,7 +5,7 @@ // v1 getInspectTargetList: (data: object) => { return request({ - url: `/safeCheckQuota/select/listQuotaByPage`, + url: import.meta.env.VITE_API_URL + `/safeCheckQuota/select/listQuotaByPage`, method: 'post', data: data }); @@ -13,14 +13,14 @@ // v1 getInspectTargetById: (id: number) => { return request({ - url: `/safeCheckQuota/select/getQuotaById?id=${id}`, + url: import.meta.env.VITE_API_URL + `/safeCheckQuota/select/getQuotaById?id=${id}`, method: 'get' }); }, // v1 addInspectTarget: (data: object) => { return request({ - url: `/safeCheckQuota/insert/saveQuota`, + url: import.meta.env.VITE_API_URL + `/safeCheckQuota/insert/saveQuota`, method: 'post', data: data }); @@ -28,7 +28,7 @@ // v1 modInspectTarget: (data: object) => { return request({ - url: `/safeCheckQuota/update/updateQuotaById`, + url: import.meta.env.VITE_API_URL + `/safeCheckQuota/update/updateQuotaById`, method: 'post', data: data }); @@ -36,7 +36,7 @@ // v1 deleteInspectTarget: (data: object) => { return request({ - url: `/safeCheckQuota/delete/deleteQuotaById`, + url: import.meta.env.VITE_API_URL + `/safeCheckQuota/delete/deleteQuotaById`, method: 'post', data: data }); @@ -44,14 +44,14 @@ // v1 getAllInspectTargetList: () => { return request({ - url: `/prevent/device/select/listDevices`, + url: import.meta.env.VITE_API_URL + `/prevent/device/select/listDevices`, method: 'post' }); }, // v1 getQuotaTypeList: () => { return request({ - url: `/safeCheckQuotaType/select/listQuotaType`, + url: import.meta.env.VITE_API_URL + `/safeCheckQuotaType/select/listQuotaType`, method: 'get' }); } diff --git a/src/api/systemManage/basicDateManage/personShiftManage/holidayTime/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/holidayTime/index.ts index fa82be1..99ee915 100644 --- a/src/api/systemManage/basicDateManage/personShiftManage/holidayTime/index.ts +++ b/src/api/systemManage/basicDateManage/personShiftManage/holidayTime/index.ts @@ -5,7 +5,7 @@ // 分页获取休息日列表 getAllBreakTimeRuleByPage: (data: object) => { return request({ - url: `/breakTime/getAllBreakTimeRuleByPage`, + url: import.meta.env.VITE_API_URL + `/breakTime/getAllBreakTimeRuleByPage`, method: 'post', data: data }); @@ -14,7 +14,7 @@ // 新增休息日 addBreakTime: (data: object) => { return request({ - url: `/breakTime/addBreakTimeRule`, + url: import.meta.env.VITE_API_URL + `/breakTime/addBreakTimeRule`, method: 'post', data: data }); @@ -23,7 +23,7 @@ // 修改休息日 updateBreakTime: (data: object) => { return request({ - url: `/breakTime/updateBreakTimeRule`, + url: import.meta.env.VITE_API_URL + `/breakTime/updateBreakTimeRule`, method: 'post', data: data }); @@ -32,7 +32,7 @@ // 删除休息日 deleteBreakTime: (data: object) => { return request({ - url: `/breakTime/deleteBreakTimeRule`, + url: import.meta.env.VITE_API_URL + `/breakTime/deleteBreakTimeRule`, method: 'post', data: data }); @@ -41,10 +41,10 @@ // 删除休息日 deleteBatch: (data: object) => { return request({ - url: `/breakTime/deleteBatchBreakTimeRule`, + url: import.meta.env.VITE_API_URL + `/breakTime/deleteBatchBreakTimeRule`, method: 'post', data: data }); - }, + } }; } diff --git a/src/api/systemManage/basicDateManage/personShiftManage/holidayTimeGroup/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/holidayTimeGroup/index.ts index 08b29b6..751c76e 100644 --- a/src/api/systemManage/basicDateManage/personShiftManage/holidayTimeGroup/index.ts +++ b/src/api/systemManage/basicDateManage/personShiftManage/holidayTimeGroup/index.ts @@ -3,56 +3,56 @@ export function holidayGroupApi() { return { //休息时间组分页列表 - getRecordPage: (data: object)=>{ + getRecordPage: (data: object) => { return request({ - url: `/breakTime/getAllBreakTimeGroupByPage`, + url: import.meta.env.VITE_API_URL + `/breakTime/getAllBreakTimeGroupByPage`, method: 'post', data: data - }) + }); }, // 休息时间组新增 - addRecord: (data: object)=>{ + addRecord: (data: object) => { return request({ - url: `/breakTime/addBreakTimeGroup`, + url: import.meta.env.VITE_API_URL + `/breakTime/addBreakTimeGroup`, method: 'post', data: data - }) + }); }, // 休息时间组修改 - updateRecord: (data: object)=>{ + updateRecord: (data: object) => { return request({ - url: `/breakTime/updateBreakTimeGroup`, + url: import.meta.env.VITE_API_URL + `/breakTime/updateBreakTimeGroup`, method: 'post', data: data - }) + }); }, // 休息时间组删除 - deleteRecord: (data: object)=>{ + deleteRecord: (data: object) => { return request({ - url: `/breakTime/deleteBreakTimeGroup`, + url: import.meta.env.VITE_API_URL + `/breakTime/deleteBreakTimeGroup`, method: 'post', data: data - }) + }); }, // 休息时间组批量删除 - deletBatchRecord: (data: object)=>{ + deletBatchRecord: (data: object) => { return request({ - url: `/breakTime/deleteBatchBreakTimeGroup`, + url: import.meta.env.VITE_API_URL + `/breakTime/deleteBatchBreakTimeGroup`, method: 'post', data: data - }) + }); }, //休息时间列表 - getAllBreak: ()=>{ + getAllBreak: () => { return request({ - url: `/breakTime/getAllBreakTimeRule`, + url: import.meta.env.VITE_API_URL + `/breakTime/getAllBreakTimeRule`, method: 'get' - }) - }, + }); + } }; } diff --git a/src/api/systemManage/basicDateManage/personShiftManage/teamManage/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/teamManage/index.ts index 895f601..d378691 100644 --- a/src/api/systemManage/basicDateManage/personShiftManage/teamManage/index.ts +++ b/src/api/systemManage/basicDateManage/personShiftManage/teamManage/index.ts @@ -3,85 +3,84 @@ export function teamManageApi() { return { //班组分页列表 - getRecordPage: (data: object)=>{ + getRecordPage: (data: object) => { return request({ - url: `/schedule/group/page/list`, + url: import.meta.env.VITE_API_URL + `/schedule/group/page/list`, method: 'post', data: data - }) + }); }, //班组列表 - getRecord: (data: object)=>{ + getRecord: (data: object) => { return request({ - url: `/schedule/group/list`, + url: import.meta.env.VITE_API_URL + `/schedule/group/list`, method: 'post', data: data - }) + }); }, //班组-班组成员分页列表 - getAllRecordPage: (data: object)=>{ + getAllRecordPage: (data: object) => { return request({ - url: `/schedule/group/member/page/list`, + url: import.meta.env.VITE_API_URL + `/schedule/group/member/page/list`, method: 'post', data: data - }) + }); }, //所有部门列表 - getAllDepartment: ()=>{ + getAllDepartment: () => { return request({ - url: `/department/list`, + url: import.meta.env.VITE_API_URL + `/department/list`, method: 'post' - }) + }); }, - //用户-部门所有用户 - getAllMember: (data: number)=>{ + getAllMember: (data: number) => { return request({ - url: `/account/dep/list?depId=${data}`, + url: import.meta.env.VITE_API_URL + `/account/dep/list?depId=${data}`, method: 'get', data: data - }) + }); }, // 班组-班组成员列表 - getAllRecord: (data: object)=>{ + getAllRecord: (data: object) => { return request({ - url: `/schedule/group/member/list`, + url: import.meta.env.VITE_API_URL + `/schedule/group/member/list`, method: 'get', data: data - }) + }); }, // 班组新增 - addRecord: (data: object)=>{ + addRecord: (data: object) => { return request({ - url: `/schedule/group/add`, + url: import.meta.env.VITE_API_URL + `/schedule/group/add`, method: 'post', data: data - }) + }); }, // 班组修改 - updateRecord: (data: object)=>{ + updateRecord: (data: object) => { return request({ - url: `/schedule/group/mod`, + url: import.meta.env.VITE_API_URL + `/schedule/group/mod`, method: 'post', data: data - }) + }); }, // 班组删除 - deleteRecord: (data: object)=>{ + deleteRecord: (data: object) => { return request({ - url: `/schedule/group/del`, + url: import.meta.env.VITE_API_URL + `/schedule/group/del`, method: 'post', data: data - }) - }, + }); + } // 时间策略批量删除 // deletBatchRecord: (data: object)=>{ diff --git a/src/api/systemManage/basicDateManage/personShiftManage/teamStrategy/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/teamStrategy/index.ts index 0a4a38e..1e9365f 100644 --- a/src/api/systemManage/basicDateManage/personShiftManage/teamStrategy/index.ts +++ b/src/api/systemManage/basicDateManage/personShiftManage/teamStrategy/index.ts @@ -2,42 +2,41 @@ export function teamStrategyApi() { return { - //获取班组策略分页列表 - getRecordPage: (data: object)=>{ + getRecordPage: (data: object) => { return request({ - url: `/schedule/groupStrategy/page/list`, + url: import.meta.env.VITE_API_URL + `/schedule/groupStrategy/page/list`, method: 'post', data: data - }) + }); }, // 班组策略新增 - addRecord: (data: object)=>{ + addRecord: (data: object) => { return request({ - url: `/schedule/groupStrategy/add`, + url: import.meta.env.VITE_API_URL + `/schedule/groupStrategy/add`, method: 'post', data: data - }) + }); }, // 班组策略修改 - updateRecord: (data: object)=>{ + updateRecord: (data: object) => { return request({ - url: `/schedule/groupStrategy/mod`, + url: import.meta.env.VITE_API_URL + `/schedule/groupStrategy/mod`, method: 'post', data: data - }) + }); }, // 班组策略删除 - deleteRecord: (data: object)=>{ + deleteRecord: (data: object) => { return request({ - url: `/schedule/groupStrategy/del`, + url: import.meta.env.VITE_API_URL + `/schedule/groupStrategy/del`, method: 'post', data: data - }) - }, + }); + } // 时间策略批量删除 // deletBatchRecord: (data: object)=>{ diff --git a/src/api/systemManage/basicDateManage/personShiftManage/timeStrategy/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/timeStrategy/index.ts index d07dbad..e33a1cd 100644 --- a/src/api/systemManage/basicDateManage/personShiftManage/timeStrategy/index.ts +++ b/src/api/systemManage/basicDateManage/personShiftManage/timeStrategy/index.ts @@ -3,83 +3,81 @@ export function timeStrategyApi() { return { //获取工作时间组列表 - getWorkTimeList: ()=>{ + getWorkTimeList: () => { return request({ - url: `/workTime/getWorkTimeGroup`, + url: import.meta.env.VITE_API_URL + `/workTime/getWorkTimeGroup`, method: 'get' - }) + }); }, //获取休息时间组列表 - getRestTimeList: ()=>{ + getRestTimeList: () => { return request({ - url: `/breakTime/getAllBreakTimeGroup`, + url: import.meta.env.VITE_API_URL + `/breakTime/getAllBreakTimeGroup`, method: 'get' - }) + }); }, //时间策略分页列表 - getRecordPage: (data: object)=>{ + getRecordPage: (data: object) => { return request({ - url: `/timeStrategy/getAllTimeStrategyByPage`, + url: import.meta.env.VITE_API_URL + `/timeStrategy/getAllTimeStrategyByPage`, method: 'post', data: data - }) + }); }, // 时间策略全部列表 - getAllRecord: ()=>{ + getAllRecord: () => { return request({ - url: `/timeStrategy/getAllTimeStrategy`, + url: import.meta.env.VITE_API_URL + `/timeStrategy/getAllTimeStrategy`, method: 'get' - }) + }); }, - - //根据id获取时间策略列表 - getRecordById: (data:object)=>{ + getRecordById: (data: object) => { return request({ - url: `/timeStrategy/getTimeStrategyById`, + url: import.meta.env.VITE_API_URL + `/timeStrategy/getTimeStrategyById`, method: 'post', data: data - }) + }); }, // 时间策略新增 - addRecord: (data: object)=>{ + addRecord: (data: object) => { return request({ - url: `/timeStrategy/addTimeStrategy`, + url: import.meta.env.VITE_API_URL + `/timeStrategy/addTimeStrategy`, method: 'post', data: data - }) + }); }, // 时间策略修改 - updateRecord: (data: object)=>{ + updateRecord: (data: object) => { return request({ - url: `/timeStrategy/updateTimeStrategy`, + url: import.meta.env.VITE_API_URL + `/timeStrategy/updateTimeStrategy`, method: 'post', data: data - }) + }); }, // 时间策略删除 - deleteRecord: (data: object)=>{ + deleteRecord: (data: object) => { return request({ - url: `/timeStrategy/deleteTimeStrategy`, + url: import.meta.env.VITE_API_URL + `/timeStrategy/deleteTimeStrategy`, method: 'post', data: data - }) + }); }, // 时间策略批量删除 - deletBatchRecord: (data: object)=>{ + deletBatchRecord: (data: object) => { return request({ - url: `/timeStrategy/deleteBatchTimeStrategy`, + url: import.meta.env.VITE_API_URL + `/timeStrategy/deleteBatchTimeStrategy`, method: 'post', data: data - }) - }, + }); + } }; } diff --git a/src/api/systemManage/basicDateManage/personShiftManage/workingHours/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/workingHours/index.ts index f3bc789..6bde267 100644 --- a/src/api/systemManage/basicDateManage/personShiftManage/workingHours/index.ts +++ b/src/api/systemManage/basicDateManage/personShiftManage/workingHours/index.ts @@ -5,7 +5,7 @@ // 获取工作时间段列表 getWorkTimePeriod: () => { return request({ - url: `/workTime/getWorkTimePeriod`, + url: import.meta.env.VITE_API_URL + `/workTime/getWorkTimePeriod`, method: 'get' }); }, @@ -13,7 +13,7 @@ //工作时间段分页列表 postPeriodPage: (data: object) => { return request({ - url: `/workTime/getWorkTimePeriodByPage?pageSiz`, + url: import.meta.env.VITE_API_URL + `/workTime/getWorkTimePeriodByPage?pageSiz`, method: 'post', data: data }); @@ -22,7 +22,7 @@ // 新增工作时间段 postWorkTimePeriod: (data: object) => { return request({ - url: `/workTime/addWorkTimePeriod`, + url: import.meta.env.VITE_API_URL + `/workTime/addWorkTimePeriod`, method: 'post', data: data }); @@ -31,7 +31,7 @@ // 修改工作时间段 updateWorkTimePeriod: (data: object) => { return request({ - url: `/workTime/updateWorkTimePeriod`, + url: import.meta.env.VITE_API_URL + `/workTime/updateWorkTimePeriod`, method: 'post', data: data }); @@ -40,7 +40,7 @@ // 删除工作时间段 deletWorkTimePeriod: (data: object) => { return request({ - url: `/workTime/deletWorkTimePeriod`, + url: import.meta.env.VITE_API_URL + `/workTime/deletWorkTimePeriod`, method: 'post', data: data }); @@ -49,7 +49,7 @@ // 批量删除 deleteBatchWorkTimePeriod: (data: any) => { return request({ - url: `/workTime/deleteBatchWorkTimePeriod`, + url: import.meta.env.VITE_API_URL + `/workTime/deleteBatchWorkTimePeriod`, method: 'post', data: data }); diff --git a/src/api/systemManage/basicDateManage/personShiftManage/workingHoursSet/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/workingHoursSet/index.ts index 52360cc..564f5e4 100644 --- a/src/api/systemManage/basicDateManage/personShiftManage/workingHoursSet/index.ts +++ b/src/api/systemManage/basicDateManage/personShiftManage/workingHoursSet/index.ts @@ -3,48 +3,48 @@ export function workingHoursSetApi() { return { //工作时间组分页列表 - postWorkTimeGroupPage: (data: object)=>{ + postWorkTimeGroupPage: (data: object) => { return request({ - url: `/workTime/getWorkTimeGroupByPage`, + url: import.meta.env.VITE_API_URL + `/workTime/getWorkTimeGroupByPage`, method: 'post', data: data - }) + }); }, // 工作时间组新增 - addWorkTimeGroup: (data: object)=>{ + addWorkTimeGroup: (data: object) => { return request({ - url: `/workTime/addWorkTimeGroup`, + url: import.meta.env.VITE_API_URL + `/workTime/addWorkTimeGroup`, method: 'post', data: data - }) + }); }, // 工作时间组修改 - updateWorkTimeGroup: (data: object)=>{ + updateWorkTimeGroup: (data: object) => { return request({ - url: `/workTime/updateWorkTimeGroup`, + url: import.meta.env.VITE_API_URL + `/workTime/updateWorkTimeGroup`, method: 'post', data: data - }) + }); }, // 工作时间组删除 - deleteWorkTimeGroup: (data: object)=>{ + deleteWorkTimeGroup: (data: object) => { return request({ - url: `/workTime/deleteWorkTimeGroup`, + url: import.meta.env.VITE_API_URL + `/workTime/deleteWorkTimeGroup`, method: 'post', data: data - }) + }); }, // 工作时间组批量删除 - deletBatchWorkTimeGroup: (data: object)=>{ + deletBatchWorkTimeGroup: (data: object) => { return request({ - url: `/workTime/deletBatchWorkTimeGroup`, + url: import.meta.env.VITE_API_URL + `/workTime/deletBatchWorkTimeGroup`, method: 'post', data: data - }) + }); } }; } diff --git a/src/api/workInjuryDeclaration/index.ts b/src/api/workInjuryDeclaration/index.ts index e8edf72..630f412 100644 --- a/src/api/workInjuryDeclaration/index.ts +++ b/src/api/workInjuryDeclaration/index.ts @@ -1,123 +1,123 @@ import request from '/@/utils/request'; -export function accidentManagementSystemApi(){ +export function accidentManagementSystemApi() { return { // 事故快报一览 - accidentList:(params:object)=>{ + accidentList: (params: object) => { return request({ - url:"/accidentExpress/page/list", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/accidentExpress/page/list', + method: 'post', + data: params + }); }, // 事故快报新增 - accidentAdd:(params:object)=>{ + accidentAdd: (params: object) => { return request({ - url:"/accidentExpress/add", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/accidentExpress/add', + method: 'post', + data: params + }); }, // 事故快报详情 - accidentScarh:(params:number)=>{ + accidentScarh: (params: number) => { return request({ - url:`/accidentExpress/info/${params}`, - method:"get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/accidentExpress/info/${params}`, + method: 'get' + }); }, // 事故快报修改 - accidentView:(params:object)=>{ + accidentView: (params: object) => { return request({ - url:"/accidentExpress/update", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/accidentExpress/update', + method: 'post', + data: params + }); }, // 事故快报删除 - accidentDele:(params:object)=>{ + accidentDele: (params: object) => { return request({ - url:`/accidentExpress/batchDelete/${params}`, - method:"get", - }) + url: import.meta.env.VITE_API_URL_OUT + `/accidentExpress/batchDelete/${params}`, + method: 'get' + }); }, // 事故报告一览 getAccidentReportList: (params: object) => { return request({ - url: '/accidentReport/page/list', + url: import.meta.env.VITE_API_URL_OUT + '/accidentReport/page/list', method: 'post', - data:params - }) + data: params + }); }, // 事故报告新增 addAccidentReport: (params: object) => { return request({ - url: `/accidentReport/add`, + url: import.meta.env.VITE_API_URL_OUT + `/accidentReport/add`, method: 'post', data: params }); }, // 事故报告详情 - seeAccidentReport: (params:number) => { + seeAccidentReport: (params: number) => { return request({ - url: `/accidentReport/info/${params}`, + url: import.meta.env.VITE_API_URL_OUT + `/accidentReport/info/${params}`, method: 'get' }); }, // 事故报告编辑 editAccidentReport: (params: object) => { return request({ - url: `/accidentReport/update`, + url: import.meta.env.VITE_API_URL_OUT + `/accidentReport/update`, method: 'post', data: params }); }, // 事故报告删除 - deleteAccidentReport: (params:object) => { + deleteAccidentReport: (params: object) => { return request({ - url: `/accidentReport/batchDelete`, + url: import.meta.env.VITE_API_URL_OUT + `/accidentReport/batchDelete`, method: 'post', - data:params + data: params }); }, // 工伤申报一览 - workList:(params:object)=>{ + workList: (params: object) => { return request({ - url:"/workInjuryDeclaration/page/list", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/workInjuryDeclaration/page/list', + method: 'post', + data: params + }); }, // 工伤申报新增 - workAdd:(params:object)=>{ + workAdd: (params: object) => { return request({ - url:"/workInjuryDeclaration/add", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/workInjuryDeclaration/add', + method: 'post', + data: params + }); }, // 工伤申报详情 - seeAccidentManagementSystem:(params:number)=>{ + seeAccidentManagementSystem: (params: number) => { return request({ - url:`workInjuryDeclaration/info/${params}`, - method:"get", - }) + url: import.meta.env.VITE_API_URL_OUT + `workInjuryDeclaration/info/${params}`, + method: 'get' + }); }, // 工伤申报修改 - workView:(params:object)=>{ + workView: (params: object) => { return request({ - url:"/workInjuryDeclaration/update", - method:"post", - data:params - }) + url: import.meta.env.VITE_API_URL_OUT + '/workInjuryDeclaration/update', + method: 'post', + data: params + }); }, // 工伤申报删除/批量删除 - workDelete:(params:object)=>{ + workDelete: (params: object) => { return request({ - url:`/workInjuryDeclaration/batchDelete/${params}`, - method:"get", - }) - }, - } -} \ No newline at end of file + url: import.meta.env.VITE_API_URL_OUT + `/workInjuryDeclaration/batchDelete/${params}`, + method: 'get' + }); + } + }; +} diff --git a/src/assets/icon.png b/src/assets/icon.png new file mode 100644 index 0000000..342ace7 --- /dev/null +++ b/src/assets/icon.png Binary files differ diff --git a/src/components/accidentManagementSystem/accidentExpress/component/numberOfCasualties.vue b/src/components/accidentManagementSystem/accidentExpress/component/numberOfCasualties.vue new file mode 100644 index 0000000..c586c23 --- /dev/null +++ b/src/components/accidentManagementSystem/accidentExpress/component/numberOfCasualties.vue @@ -0,0 +1,461 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + title="编辑伤亡人员" + v-model="isShowDialog" + width="769px" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form + ref="ruleFormRef" + :model="ruleForm" + size="default" + label-width="120px" + > + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="姓名" prop="name"> + <el-input v-model="ruleForm.name" placeholder="请输入姓名"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="性别" prop="sex"> + <el-select v-model="ruleForm.gender" class="w100" placeholder="请选择人员性别"> + <el-option label="男" value="false"></el-option> + <el-option label="女" value="true"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="身份证号码" prop="teamName"> + <el-input v-model="ruleForm.card" placeholder="请输入身份证号码"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="伤害描述"> + <el-input v-model="ruleForm.injuryDesc" type="textarea" placeholder="请输入内容" + maxlength="150"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="受损描述"> + <el-input v-model="ruleForm.damageDesc" type="textarea" placeholder="请输入内容" + maxlength="150"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-button v-if="!disabled" size="default" type="primary" @click="onAdd()">添加</el-button> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-table :data="tableData" style="width: 100%"> + <el-table-column prop="name" label="姓名"/> + <el-table-column prop="gender" label="性别"> + <template #default="scope"> + <div v-if="scope.row.gender==false"> + 男 + </div> + <div v-else> + 女 + </div> + </template> + </el-table-column> + <el-table-column prop="card" label="身份证"/> + <el-table-column prop="injuryDesc" label="伤害描述"/> + <el-table-column prop="damageDesc" label="受损描述"/> + <el-table-column v-if="!disabled" label="操作" width="60" align="center" fixed="right"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onDelete(scope.row.id)"> + 删除 + </el-button> + </template> + </el-table-column> + </el-table> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="onCancel" size="default">关闭</el-button> + <el-button size="default" type="primary" @click="submitForm(ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <CheckTemplate ref="Shows"/> + <userSelections ref="userRef"/> + <RegionsDialog ref="openRef"/> + </div> +</template> + +<script lang="ts"> + import { + reactive, + ref, + defineComponent + } from 'vue'; + + import type { + UploadUserFile, + FormInstance, + // FormRules, + } from 'element-plus' + import {ElMessage} from 'element-plus'; + import { + Search, + FullScreen + } from '@element-plus/icons-vue' + import UserSelections from "/@/components/userSelections/index.vue" + import CheckTemplate from '/@/components/checkTemplate/index.vue' + import RegionsDialog from '/@/components/regionsDialog/index.vue' + import {accidentManagementSystemApi} from '/@/api/accidentManagementSystem'; + + export default defineComponent({ + name: 'openEdit', + components: { + CheckTemplate, + UserSelections, + RegionsDialog, + }, + setup() { + const isShowDialog = ref(false) + + const ruleFormRef = ref<FormInstance>() + //定义表单 + const accidentExpressId = ref() + const ruleForm = reactive({ + accidentExpressId: accidentExpressId, + name: '', // 姓名 + gender: '', //性别 + card: '', // 身份证 + injuryDesc: '', // 伤害描述 + damageDesc: '', // 受损描述 + }); + const tableData = ref([]) + const disabled = ref([]) + // 打开弹窗 + const openDialog = (id, type) => { + accidentExpressId.value = id + isShowDialog.value = true; + disabled.value = type + onList() + }; + // 一览 + const onList = () => { + accidentManagementSystemApi() + .casualtyList(accidentExpressId.value) + .then((res) => { + if (res.data.code == '200') { + tableData.value = res.data.data + console.log('伤亡人员一览', tableData.value) + } + }) + }; + // 添加 + const onAdd = () => { + if (accidentExpressId.value != null && accidentExpressId.value != '') { + accidentManagementSystemApi() + .casualtyAdd(ruleForm) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '添加成功', + type: 'success', + }); + onList() + } + }) + } else { + ElMessage({ + showClose: true, + message: '请先添加事故快报', + type: 'error', + }); + } + }; + // 删除 + const onDelete = (id) => { + accidentManagementSystemApi() + .casualtyDel(id) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '删除成功', + type: 'success', + }); + onList() + } + }) + }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + // 取消 + const onCancel = () => { + closeDialog(); + }; + //日期选择器 + const value1 = ref('') + // 上传附件 + const fileList = ref<UploadUserFile[]>([]) + // 可选择树 + const treeSelect = ref() + const tree = [ + { + value: '1', + label: 'Level one 1', + children: [ + { + value: '1-1', + label: 'Level two 1-1', + children: [ + { + value: '1-1-1', + label: 'Level three 1-1-1', + }, + ], + }, + ], + }, + { + value: '2', + label: 'Level one 2', + children: [ + { + value: '2-1', + label: 'Level two 2-1', + children: [ + { + value: '2-1-1', + label: 'Level three 2-1-1', + }, + ], + }, + { + value: '2-2', + label: 'Level two 2-2', + children: [ + { + value: '2-2-1', + label: 'Level three 2-2-1', + }, + ], + }, + ], + }, + { + value: '3', + label: 'Level one 3', + children: [ + { + value: '3-1', + label: 'Level two 3-1', + children: [ + { + value: '3-1-1', + label: 'Level three 3-1-1', + }, + ], + }, + { + value: '3-2', + label: 'Level two 3-2', + children: [ + { + value: '3-2-1', + label: 'Level three 3-2-1', + }, + ], + }, + ], + }, + ] + //定义树形下拉框 + const responsibleDepartment = ref() + const data = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '1-1', + label: '经营班子', + children: [], + }, + ], + }, + { + value: '2', + label: '生产运行部', + children: [ + { + value: '2-1', + label: '灌装一班', + children: [] + }, + { + value: '2-2', + label: '工艺四班', + children: [], + }, + ], + }, + { + value: '3', + label: '设备部', + children: [ + { + value: '3-1', + label: '仪表班', + children: [], + }, + { + value: '3-2', + label: '机修班', + children: [], + }, + ], + }, + ] + // 必填项提示 + // const rules = reactive<FormRules>({ + // teamName: [ + // { + // required: true, + // message: '队伍名称不能为空', + // trigger: 'change', + // }, + // ], + // teamLevel: [ + // { + // required: true, + // message: '队伍级别不能为空', + // trigger: 'change', + // }, + // ], + // teamLeader: [ + // { + // required: true, + // message: '队伍负责人不能为空', + // trigger: 'change', + // }, + // ], + // responsibleDepartment: [ + // { + // required: true, + // message: '负责人部门不能为空', + // trigger: 'change', + // }, + // ], + // teamPhone: [ + // { + // required: true, + // message: '负责人手机不能为空', + // trigger: 'change', + // }, + // ], + // telephone: [ + // { + // required: true, + // message: '固定电话不能为空', + // trigger: 'change', + // }, + // ], + // }) + // 表单提交验证必填项 + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + console.log('submit!') + closeDialog(); + } else { + console.log('error submit!', fields) + } + }) + + } + // 应急队伍弹窗 + const Shows = ref() + const daiInpt = () => { + Shows.value.openDailog() + } + // 选择区域弹窗 + const openRef = ref() + const regionsDialog = () => { + openRef.value.openDailog() + } + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + onCancel, + fileList, + responsibleDepartment, + data, + Search, + ruleForm, + value1, + treeSelect, + tree, + daiInpt, + Shows, + ruleFormRef, + submitForm, + // rules, + openUser, + userRef, + regionsDialog, + openRef, + toggleFullscreen, + FullScreen, + full, + tableData, + onAdd, + onDelete, + accidentExpressId, + disabled + }; + }, + }); +</script> +<style scoped lang="scss"> + .textarea { + height: 168px !important; + } + + .textarea ::v-deep .el-textarea__inner { + height: 168px !important; + } + + ::v-deep .el-table__cell { + font-weight: 400; + } + + .el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; + } + + .el-select { + width: 100%; + } +</style> \ No newline at end of file diff --git a/src/components/accidentManagementSystem/accidentExpress/component/openAdd.vue b/src/components/accidentManagementSystem/accidentExpress/component/openAdd.vue new file mode 100644 index 0000000..50a59d7 --- /dev/null +++ b/src/components/accidentManagementSystem/accidentExpress/component/openAdd.vue @@ -0,0 +1,474 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" v-model="isShowDialog" width="50%" draggable :fullscreen="full" @close="closeDialog(ruleFormRef)"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" size="default" label-width="140px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故名称" prop="accidentName"> + <el-input v-model="ruleForm.accidentName" :disabled="disabled" placeholder="请填写事故名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故部门" placeholder="请选择" prop="accidentDepartmentId"> + <el-tree-select + v-model="ruleForm.accidentDepartmentId" + :disabled="disabled" + :props="propse" + :data="newTreeList" + class="w100" + placeholder="请选择" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="发生地点" prop="occurrencePlace"> + <el-input v-model="ruleForm.occurrencePlace" :disabled="disabled" placeholder="请填写发生地点"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="发生时间" prop="occurrenceTime"> + <!--<el-input v-model="ruleForm.occurrenceTime" :disabled="disabled" placeholder="请填写发生时间"></el-input>--> + <el-date-picker + :disabled="disabled" + v-model="ruleForm.occurrenceTime" + value-format="YYYY-MM-DD HH:mm:ss" + type="datetime" + class="w100" + placeholder="选择日期时间" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故原因" prop="accidentCause"> + <el-select v-model="ruleForm.accidentCause" :disabled="disabled" class="w100" placeholder="请选择"> + <el-option label="人的不安全行为" value="1"></el-option> + <el-option label="物的不安全状态" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="是否有伤亡" prop="casualties"> + <el-radio-group v-model="ruleForm.casualties" :disabled="disabled" @change="typeChang"> + <el-radio :label="true">是</el-radio> + <el-radio :label="false">否</el-radio> + </el-radio-group> + <el-button v-if="ruleForm.casualties" type="primary" style="margin-left: 20px" :icon="Edit" @click="openDai" round plain /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故简要经过" prop="accidentBriefProcess"> + <el-input + v-model="ruleForm.accidentBriefProcess" + :disabled="disabled" + type="textarea" + placeholder="请填写事故简要经过" + maxlength="150" + ></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故原因初步分析" prop="accidentCausesPreliminaryAnalysis"> + <el-input + v-model="ruleForm.accidentCausesPreliminaryAnalysis" + :disabled="disabled" + type="textarea" + placeholder="请填写事故原因初步分析" + maxlength="150" + ></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急防范措施" prop="emergencyPrecautions"> + <el-input + v-model="ruleForm.emergencyPrecautions" + :disabled="disabled" + type="textarea" + placeholder="请填写应急防范措施" + maxlength="150" + ></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="事故照片" prop="fileList"> + <!--<el-input v-model="ruleForm.fileList" :disabled="disabled"--> + <!--type="textarea" placeholder="请填写应急防范措施" maxlength="150"></el-input>--> + <uploaderImg :fileList="fileListDemo"></uploaderImg> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" v-if="disabled == true ? false : true" type="primary" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <NumberOfCasualties ref="ShowUser"></NumberOfCasualties> + <CheckTemplate ref="Shows" /> + <userSelections ref="userRef" /> + <RegionsDialog ref="openRef" /> + </div> +</template> + +<script lang="ts"> +import { reactive, ref, defineComponent, defineEmits, onMounted } from 'vue'; + +import type { UploadUserFile, FormInstance, FormRules } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen, Edit } from '@element-plus/icons-vue'; +import NumberOfCasualties from '/@/views/accidentManagementSystem/accidentExpress/component/numberOfCasualties.vue'; +import UserSelections from '/@/components/userSelections/index.vue'; +import CheckTemplate from '/@/components/checkTemplate/index.vue'; +import uploaderImg from '/@/components/uploaderImg/index.vue'; +import RegionsDialog from '/@/components/regionsDialog/index.vue'; +import { accidentManagementSystemApi } from '/@/api/accidentManagementSystem'; +import { goalManagementApi } from '/@/api/goalManagement'; +export default defineComponent({ + name: 'openAdd', + components: { + CheckTemplate, + UserSelections, + RegionsDialog, + NumberOfCasualties, + uploaderImg, + }, + setup(props, { emit }) { + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + //定义表单 + const ruleForm = ref({ + emergencyPrecautions: '', + accidentCausesPreliminaryAnalysis: '', + accidentBriefProcess: '', + casualties: '', + accidentCause: '', + occurrenceTime: '', + occurrencePlace: '', + accidentDepartmentId: '', + accidentName: '', + fileList: [], + id: '', + }); + const titles = ref(); + const disabled = ref(); + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + if (title == '查看事故快报' || title == '修改事故快报') { + accidentManagementSystemApi() + .accidentScarh(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + } + }); + } + }; + //日期选择器 + const value1 = ref(''); + // 上传附件 + const fileList = ref<UploadUserFile[]>([]); + const fileListDemo = ref<UploadUserFile[]>([ + { + name: 'food.jpeg', + url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100', + }, + { + name: 'food.jpeg', + url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100', + }, + ]); + // 可选择树 + const treeSelect = ref(); + + //定义树形下拉框 + const responsibleDepartment = ref(); + const data = []; + //el-tree-select回显 + const propse = { + label: 'depName', + children: 'children', + }; + const newTreeList = []; + //得到部门树 + const department = async () => { + await goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + getTreeList(res.data.data, newTreeList); + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 递归树状数据且修改字段名 + const getTreeList = (treeList, newTreeList) => { + treeList.map((c) => { + let tempData = { + depName: c.depName, + value: c.depId, + children: [], + }; + if (c.children && c.children.length > 0) { + tempData.children = []; + getTreeList(c.children, tempData.children); + } + newTreeList.push(tempData); + }); + }; + onMounted(() => { + department(); + }); + // 必填项提示 + const rules = reactive<FormRules>({ + accidentName: [ + { + required: true, + message: '事故名称不能为空', + trigger: 'change', + }, + ], + accidentDepartmentId: [ + { + required: true, + message: '事故部门不能为空', + trigger: 'change', + }, + ], + occurrencePlace: [ + { + required: true, + message: '发生地点不能为空', + trigger: 'change', + }, + ], + occurrenceTime: [{ type: 'date', required: true, message: '发生时间不能为空', trigger: 'blur' }], + accidentCause: [ + { + required: true, + message: '事故原因不能为空', + trigger: 'change', + }, + ], + casualties: [ + { + required: true, + message: '是否有伤亡不能为空', + trigger: 'change', + }, + ], + accidentBriefProcess: [ + { + required: true, + message: '事故简要经过不能为空', + trigger: 'change', + }, + ], + accidentCausesPreliminaryAnalysis: [ + { + required: true, + message: '事故原因初步分析不能为空', + trigger: 'change', + }, + ], + emergencyPrecautions: [ + { + required: true, + message: '应急防范措施不能为空', + trigger: 'change', + }, + ], + }); + // 子传父 + // const emit=defineEmits(['myAdd']) + // 表单提交验证必填项 + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '新建事故快报') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + ruleForm.value.id = null; + accidentManagementSystemApi() + .accidentAdd(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } else if (title == '修改事故快报') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + ruleForm.value.fileList = [ + // { + // fileUrl: 'url', + // fileName: 'name', + // }, + ]; + accidentManagementSystemApi() + .accidentView(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + } + ruleForm.value = { + accidentExpressId: '', + emergencyPrecautions: '', + accidentCausesPreliminaryAnalysis: '', + accidentBriefProcess: '', + casualties: '', + accidentCause: '', + occurrenceTime: '', + occurrencePlace: '', + accidentDepartmentId: '', + accidentName: '', + fileList: [], + }; + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + const closeDialog = (formEl: FormInstance | undefined) => { + formEl.resetFields(); + console.log(ruleForm); + isShowDialog.value = false; + }; + // 是否有伤亡弹窗 + const typeChang = () => { + console.log('tag', ruleForm); + }; + const ShowUser = ref(); + const openDai = () => { + ShowUser.value.openDialog(ruleForm.value.id, disabled.value); + }; + // 应急队伍弹窗 + const Shows = ref(); + const daiInpt = () => { + Shows.value.openDailog(); + }; + // 选择区域弹窗 + const openRef = ref(); + const regionsDialog = () => { + openRef.value.openDailog(); + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + ShowUser, + typeChang, + openDialog, + isShowDialog, + fileList, + responsibleDepartment, + data, + Search, + Edit, + ruleForm, + value1, + treeSelect, + daiInpt, + Shows, + ruleFormRef, + submitForm, + resetForm, + rules, + openUser, + userRef, + regionsDialog, + openDai, + openRef, + toggleFullscreen, + FullScreen, + full, + titles, + disabled, + emit, + propse, + department, + getTreeList, + newTreeList, + closeDialog, + fileListDemo, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> diff --git a/src/components/accidentManagementSystem/accidentExpress/index.vue b/src/components/accidentManagementSystem/accidentExpress/index.vue new file mode 100644 index 0000000..ce1a6df --- /dev/null +++ b/src/components/accidentManagementSystem/accidentExpress/index.vue @@ -0,0 +1,346 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="system-user-search mb15"> + <el-input size="default" v-model="listQuery.searchParams.accidentName" placeholder="事故名称" style="max-width: 215px" /> + <el-button size="default" type="primary" class="ml10" @click="listApi"> 查询 </el-button> + <el-button size="default" class="ml10" @click="submitReset"> 重置 </el-button> + </div> + <div class="button_Line"> + <div class="button_Left"> + <el-button size="default" type="primary" @click="onOpenAdd"> + <el-icon> <Plus /> </el-icon>新建 + </el-button> + <el-button size="default" type="warning" plain :disabled="warning"> + <el-icon> <Edit /> </el-icon>修改 + </el-button> + <el-button size="default" type="danger" @click="onDeleteAll" plain :disabled="danger"> + <el-icon> <Delete /> </el-icon>删除 + </el-button> + </div> + <div class="button_Right"> + <!-- <el-button @click="upButton"> + <el-icon> + <Upload /> + </el-icon> + </el-button> + <el-button> + <el-icon> + <Download /> + </el-icon> + </el-button> + <el-button> + <el-icon> + <Refresh /> + </el-icon> + </el-button> --> + </div> + </div> + <el-table :data="tableData" style="width: 100%" ref="multipleTableRef" @selection-change="handleSelectionChange"> + <el-table-column align="center" type="selection" width="55" /> + <el-table-column align="center" prop="accidentName" label="事故名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column align="center" prop="deptName" label="事故部门" show-overflow-tooltip sortable></el-table-column> + <el-table-column align="center" prop="occurrencePlace" label="发生地点" show-overflow-tooltip sortable></el-table-column> + <el-table-column align="center" prop="occurrenceTime" label="发生时间" show-overflow-tooltip sortable></el-table-column> + <el-table-column align="center" prop="accidentCause" label="事故原因" show-overflow-tooltip sortable> + <template #default="scope"> + <div v-if="scope.row.accidentCause=='1'">人的不安全行为</div> + <div v-if="scope.row.accidentCause=='2'">物的不安全状态</div> + </template> + </el-table-column> + <el-table-column align="center" prop="createName" label="创建人" show-overflow-tooltip sortable></el-table-column> + <el-table-column align="center" prop="gmtModitify" label="更新时间" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="260" align="center" fixed="right"> + <template #default="scope"> + <!-- <el-button size="small" text disabled> + <el-icon style="margin-right: 5px"> <Upload /> </el-icon>上报 + </el-button> --> + <el-button size="small" text type="primary" @click="onEdit('修改', scope.row.id)"> + <el-icon style="margin-right: 5px"> <EditPen /> </el-icon>修改 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('详情', scope.row.id)"> + <el-icon style="margin-right: 5px"> <View /> </el-icon>详情 + </el-button> + <el-button size="small" text type="primary" @click="onDelete(scope.row.id)"> + <el-icon style="margin-right: 5px"> <Delete /> </el-icon>删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-card> + <OpenAdd ref="addRef" @myAdd="onMyAdd" /> + <upData ref="upShow"></upData> + </div> +</template> + +<script lang="ts"> +import { reactive, onMounted, ref, defineComponent } from 'vue'; +import { ElTable, ElMessage, ElMessageBox } from 'element-plus'; +import { Plus, View, Download, Refresh, EditPen, Edit, Delete, Upload } from '@element-plus/icons-vue'; +import OpenAdd from '/@/views/accidentManagementSystem/accidentExpress/component/openAdd.vue'; +import UpData from '/@/views/contingencyManagement/panManagement/component/upData.vue'; +import { accidentManagementSystemApi } from '/@/api/accidentManagementSystem'; +export default defineComponent({ + name: 'index', + components: { + EditPen, + Plus, + Upload, + Download, + Refresh, + Edit, + Delete, + UpData, + OpenAdd, + View, + }, + + setup() { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + accidentName: '', + }, + }); + // 定义表格数据 + const tableData = ref([]); + // 列表数据请求 + const listApi = async () => { + let res = await accidentManagementSystemApi().accidentList(listQuery); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }; + onMounted(() => { + listApi(); + }); + // 重置 + const submitReset = () => { + listQuery.searchParams.accidentName = ''; + listApi(); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + listQuery.pageSize = val; + listApi(); + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + listQuery.pageIndex = val; + listApi(); + }; + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + + // 打开新增弹窗 + const addRef = ref(); + const onOpenAdd = () => { + addRef.value.openDialog('新建事故快报',false); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + listApi(); + } else { + listApi(); + } + }; + // 删除 + const onDelete = (data: any) => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + accidentManagementSystemApi() + .accidentDele([data]) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + accidentManagementSystemApi() + .accidentDele(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 上传 + const upShow = ref(); + const upButton = () => { + upShow.value.openDialog(); + }; + + // 打开修改用户弹窗 + const onEdit = (val: string, row: object) => { + if (val == '详情') { + addRef.value.openDialog('查看事故快报',row,true); + } else { + addRef.value.openDialog('修改事故快报',row,false); + } + }; + + return { + upButton, + upShow, + tableData, + pageIndex, + pageSize, + total, + handleSizeChange, + handleCurrentChange, + onEdit, + onOpenAdd, + addRef, + listQuery, + listApi, + submitReset, + warning, + danger, + handleSelectionChange, + onMyAdd, + onDelete, + deletAll, + onDeleteAll, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box { + padding: 20px; + background-color: #fff; +} +.tableForm { + margin-top: 10px; +} +/*按钮行*/ +.button_Line { + display: flex; + flex-direction: row; + justify-content: space-between; +} +//分页 +.pages { + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/accidentManagementSystem/accidentReport/component/openAdd.vue b/src/components/accidentManagementSystem/accidentReport/component/openAdd.vue new file mode 100644 index 0000000..de8cecb --- /dev/null +++ b/src/components/accidentManagementSystem/accidentReport/component/openAdd.vue @@ -0,0 +1,665 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" v-model="isShowDialog" width="800px" draggable :fullscreen="full" @close="closeDialog(ruleFormRef)"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" size="default" :rules="rules" label-width="140px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故快报" prop="accidentName"> + <el-input v-model="ruleForm.accidentName" :disabled="true" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="daiInpt" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故部门" placeholder="请选择" prop="accidentDepartmentId"> + <!--<el-input v-model="ruleForm.accidentDepartmentName" class="input-with-select" />--> + <el-tree-select v-model="ruleForm.accidentDepartmentId" :disabled="true" :data="newTreeList" + :props="propse" class="w100" placeholder="请选择" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故发生地点" prop="occurrencePlace"> + <el-input v-model="ruleForm.occurrencePlace" :disabled="true" placeholder="请填写发生地点"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="发生时间" prop="occurrenceTime"> + <el-date-picker + v-model="ruleForm.occurrenceTime" + :disabled="true" + value-format="YYYY-MM-DD HH:mm:ss" + type="datetime" + class="w100" + placeholder="选择日期时间" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故类别" prop="accidentType"> + <el-select v-model="ruleForm.accidentType" :disabled="disabled" class="w100" placeholder="请选择"> + <el-option label="人员伤亡事故" value="人员伤亡事故"></el-option> + <el-option label="火灾爆炸事故" value="火灾爆炸事故"></el-option> + <el-option label="危险品泄露事故" value="危险品泄露事故"></el-option> + <el-option label="设备事故" value="设备事故"></el-option> + <el-option label="工艺事故" value="工艺事故"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故等级" prop="accidentGrade"> + <el-select v-model="ruleForm.accidentGrade" :disabled="disabled" class="w100" placeholder="请选择"> + <el-option label="特别重大" value="人员伤亡事故"></el-option> + <el-option label="重大" value="重大"></el-option> + <el-option label="较大" value="较大"></el-option> + <el-option label="一般" value="一般"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="经济损失" prop="economicLoss"> + <el-input v-model="ruleForm.economicLoss" :disabled="disabled" placeholder="请填写经济损失"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="轻伤人数" prop="minorInjuryNum"> + <el-input v-model="ruleForm.minorInjuryNum" :disabled="disabled" placeholder="请填写轻伤人数"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="重伤人数" prop="seriousInjuryNum"> + <el-input v-model="ruleForm.seriousInjuryNum" :disabled="disabled" placeholder="请填写重伤人数"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="死亡人数" prop="deathNum"> + <el-input v-model="ruleForm.deathNum" :disabled="disabled" placeholder="请填写死亡人数"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故原因" prop="accidentCause"> + <el-input v-model="ruleForm.accidentCause" :disabled="disabled" placeholder="请填写事故原因"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="要求报告完成期限" prop="reportDeadline"> + <el-date-picker + v-model="ruleForm.reportDeadline" + :disabled="disabled" + type="datetime" + class="w100" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故级别" prop="accidentLevel"> + <el-select v-model="ruleForm.accidentLevel" :disabled="disabled" class="w100" placeholder="请选择"> + <el-option label="特大事故" value="特大事故"></el-option> + <el-option label="重大事故" value="重大事故"></el-option> + <el-option label="较大事故" value="较大事故"></el-option> + <el-option label="一般事故" value="一般事故"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故延期申请" prop="accidentDelayApply"> + <el-input v-model="ruleForm.accidentDelayApply" :disabled="disabled" placeholder="请填写事故延期申请"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="原因综合分析(直接分析)" prop="comprehensiveAnalysisDirect"> + <el-input + v-model="ruleForm.comprehensiveAnalysisDirect" + :disabled="disabled" + type="textarea" + placeholder="请填写原因综合分析(直接分析)" + maxlength="150" + ></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="原因综合分析(间接分析)" prop="comprehensiveAnalysisIndirect"> + <el-input + v-model="ruleForm.comprehensiveAnalysisIndirect" + :disabled="disabled" + type="textarea" + placeholder="请填写原因综合分析(间接分析)" + maxlength="150" + ></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="整改措施" prop="rectificationMeasures"> + <el-input v-model="ruleForm.rectificationMeasures" :disabled="disabled" + type="textarea" placeholder="请填写整改措施" maxlength="150"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故处理" prop="accidentHandling"> + <el-input v-model="ruleForm.accidentHandling" :disabled="disabled" + type="textarea" placeholder="请填写事故处理" maxlength="150"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="填写人" prop="fillInUserName"> + <el-input v-model="ruleForm.fillInUserName" :disabled="true" + placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="填写日期" prop="fillInTime"> + <el-date-picker + v-model="ruleForm.fillInTime" + :disabled="disabled" + type="datetime" + class="w100" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + <!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> + <!-- <el-form-item label="事故照片">--> + <!-- <el-input v-model="ruleForm.describe" type="textarea" placeholder="请填写应急防范措施" maxlength="150"></el-input>--> + <!-- </el-form-item>--> + <!-- </el-col>--> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="相关人员笔录" prop="relevantPersonnelRecords"> + <el-input v-model="ruleForm.relevantPersonnelRecords" :disabled="disabled" + type="textarea" placeholder="请填写相关人员笔录" maxlength="150"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故状态" prop="status"> + <el-select v-model="ruleForm.status" :disabled="statusDisabled" class="w100" placeholder="请选择"> + <el-option label="处理中" :value="1"></el-option> + <el-option label="已处理" :value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="事故分析会议纪要" prop="fileList"> + <uploaderImg :fileList="fileList" :disabled="disabled"></uploaderImg> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="其他材料" prop="otherMaterials"> + <el-input v-model="ruleForm.otherMaterials" :disabled="disabled" + type="textarea" placeholder="请填写其他材料" maxlength="150"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" v-if="disabled == true ? false : true" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <AccidentName @selectItem="onSelectItem" ref="Shows" /> + <DailogSearchUserManger @SearchUser="onUser" ref="userRef" /> + <RegionsDialog ref="openRef" /> + </div> +</template> + +<script lang="ts"> +import { reactive, ref, defineComponent,onMounted } from 'vue'; + +import type { UploadUserFile, FormInstance, FormRules } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogSearchUserManger from '/@/components/DailogSearchUserManger/index.vue'; +import AccidentName from '/@/views/accidentManagementSystem/workInjuryDeclaration/component/accidentName.vue'; +import RegionsDialog from '/@/components/regionsDialog/index.vue'; +import uploaderImg from '/@/components/uploaderImg/index.vue'; +import { emergencySuppliesApi } from '/@/api/contingencyManagement/emergencyResources'; +import { accidentManagementSystemApi } from '/@/api/workInjuryDeclaration'; +import { goalManagementApi } from '/@/api/goalManagement'; + +export default defineComponent({ + name: 'openAdd', + components: { + AccidentName, + DailogSearchUserManger, + RegionsDialog, + uploaderImg + }, + setup(props, { emit }) { + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + //定义表单 + const ruleForm = ref({ + accidentExpressId:'', + accidentExpressName:'', + accidentDepartmentId:'', + accidentDepartmentName:'', + occurrencePlace:'', + occurrenceTime:'', + + + + accidentType: '', + accidentGrade: '', + economicLoss: '', + minorInjuryNum: '', + seriousInjuryNum: '', + deathNum: '', + accidentCause: '', + reportDeadline: '', + accidentLevel: '', + accidentDelayApply: '', + comprehensiveAnalysisDirect: '', + comprehensiveAnalysisIndirect: '', + rectificationMeasures: '', + accidentHandling: '', + fillInUserUid: '', + fillInUserName:'', + fillInTime: '', + relevantPersonnelRecords: '', + otherMaterials: '', + fileList: [], + status:'' + }); + const titles = ref(); + const disabled = ref(); + const statusDisabled = ref(true) + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean,statusDisabledFlag:string) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + if(statusDisabledFlag.value=='first'){ + ruleForm.value.status = 1 + }else if(statusDisabledFlag.value=='second'){ + ruleForm.value.status = 2 + } + if (title == '修改事故报告') { + statusDisabled.value = false + }else { + statusDisabled.value = true + } + if (title == '查看事故报告' || title == '修改事故报告') { + accidentManagementSystemApi() + .seeAccidentReport(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + } + }); + } + }; + // 关闭弹窗 + const closeDialog = (formEl: FormInstance | undefined) => { + formEl.resetFields(); + console.log(ruleForm) + isShowDialog.value = false; + }; + // 取消 + const onCancel = (formEl: FormInstance | undefined) => { + closeDialog(formEl); + }; + //日期选择器 + const value1 = ref(''); + // 上传附件 + const fileList = ref<UploadUserFile[]>([]); + // 可选择树 + const treeSelect = ref(); + //定义树形下拉框 + const responsibleDepartment = ref(); + const data = [ + ]; + // 必填项提示 + const rules = reactive<FormRules>({ + accidentDepartmentId: [ + { + required: true, + message: '事故部门不能为空', + trigger: 'change', + }, + ], + occurrenceTime: [ + { + required: true, + message: '发生时间不能为空', + trigger: 'blur', + }, + ], + accidentType: [ + { + required: true, + message: '事故类别不能为空', + trigger: 'change', + }, + ], + accidentGrade: [ + { + required: true, + message: '事故等级不能为空', + trigger: 'change', + }, + ], + economicLoss: [ + { + required: true, + message: '经济损失不能为空', + trigger: 'change', + }, + ], + reportDeadline: [ + { + required: true, + message: '要求报告完成期限不能为空', + trigger: 'blur', + }, + ], + accidentLevel: [ + { + required: true, + message: '事故级别不能为空', + trigger: 'change', + }, + ], + comprehensiveAnalysisDirect: [ + { + required: true, + message: '原因综合分析(直接分析)不能为空', + trigger: 'blur', + }, + ], + comprehensiveAnalysisIndirect: [ + { + required: true, + message: '原因综合分析(间接分析)不能为空', + trigger: 'blur', + }, + ], + rectificationMeasures: [ + { + required: true, + message: '整改措施不能为空', + trigger: 'blur', + }, + ], + accidentHandling: [ + { + required: true, + message: '事故处理不能为空', + trigger: 'change', + }, + ], + fillInUserName: [ + { + required: true, + message: '填写人不能为空', + trigger: 'change', + }, + ], + fillInTime: [ + { + type: 'date', + required: true, + message: '填写日期不能为空', + trigger: 'blur', + }, + ], + status: [ + { + required: true, + message: '事故状态不能为空', + trigger: 'change', + }, + ], + }); + //事故快报回填 + const onSelectItem = (item: any) => { + console.log('item', item[0]); + ruleForm.value.accidentExpressId = item[0].id + ruleForm.value.accidentName = item[0].accidentName + ruleForm.value.accidentDepartmentId = item[0].accidentDepartmentId + ruleForm.value.accidentDepartmentName = item[0].deptName + ruleForm.value.occurrencePlace = item[0].occurrencePlace + ruleForm.value.occurrenceTime = item[0].occurrenceTime + }; + // 表单提交验证必填项 + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '新建事故报告') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + accidentManagementSystemApi() + .addAccidentReport(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } else if (title == '修改事故报告') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + //TODO 上传组件待定 + ruleForm.value.fileList = [] + isShowDialog.value = false; + accidentManagementSystemApi() + .editAccidentReport(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + accidentExpressId:'', + accidentExpressName:'', + accidentDepartmentId:'', + accidentDepartmentName:'', + occurrencePlace:'', + occurrenceTime:'', + + + + accidentType: '', + accidentGrade: '', + economicLoss: '', + minorInjuryNum: '', + seriousInjuryNum: '', + deathNum: '', + accidentCause: '', + reportDeadline: '', + accidentLevel: '', + accidentDelayApply: '', + comprehensiveAnalysisDirect: '', + comprehensiveAnalysisIndirect: '', + rectificationMeasures: '', + accidentHandling: '', + fillInUserUid: '', + fillInUserName:'', + fillInTime: '', + relevantPersonnelRecords: '', + otherMaterials: '', + fileList: [], + status:'' + }; + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + const handleChange = (val: number) => { + console.log(val); + }; + // 应急队伍弹窗 + const Shows = ref(); + const daiInpt = () => { + Shows.value.openDailog(); + }; + // 选择区域弹窗 + const openRef = ref(); + const regionsDialog = () => { + openRef.value.openDailog(); + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + const onUser = (userItem: any) => { + ruleForm.value.fillInUserUid = userItem[0].uid; + ruleForm.value.fillInUserName = userItem[0].realName; + }; + //el-tree-select回显 + const propse = { + label: 'depName', + children: 'children', + }; + const newTreeList = []; + //得到部门树 + const department = async () => { + await goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + getTreeList(res.data.data, newTreeList); + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 递归树状数据且修改字段名 + const getTreeList = (treeList, newTreeList) => { + treeList.map((c) => { + let tempData = { + depName: c.depName, + value: c.depId, + children: [], + }; + if (c.children && c.children.length > 0) { + tempData.children = []; + getTreeList(c.children, tempData.children); + } + newTreeList.push(tempData); + }); + }; + onMounted(() => { + department(); + }); + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + onCancel, + fileList, + responsibleDepartment, + data, + Search, + ruleForm, + value1, + treeSelect, + daiInpt, + Shows, + ruleFormRef, + submitForm, + rules, + openUser, + userRef, + regionsDialog, + openRef, + toggleFullscreen, + FullScreen, + full, + onUser, + resetForm, + titles, + disabled, + emit, + handleChange, + onSelectItem, + newTreeList, + department, + getTreeList, + propse, + statusDisabled + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +::v-deep .el-form-item--default .el-form-item__label { + height: 100%; + text-align: right; +} +</style> diff --git a/src/components/accidentManagementSystem/accidentReport/index.vue b/src/components/accidentManagementSystem/accidentReport/index.vue new file mode 100644 index 0000000..6694d4b --- /dev/null +++ b/src/components/accidentManagementSystem/accidentReport/index.vue @@ -0,0 +1,387 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> + <el-tab-pane + v-for="item in editableTabs" + :key="item.name" + :label="item.title" + :name="item.name" + > + <div class="button_Line"> + <div class="button_Left"> + <el-button size="default" type="primary" @click="onOpenAdd"> + <el-icon> + <Plus /> + </el-icon>新建 + </el-button> + <el-button size="default" type="warning" plain :disabled="warning"> + <el-icon> + <Edit /> + </el-icon>修改 + </el-button> + <el-button size="default" type="danger" plain @click="onDeleteAll" :disabled="danger"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </div> + <div class="button_Right"> + <el-button @click="upButton"> + <el-icon> + <Upload /> + </el-icon> + </el-button> + <el-button> + <el-icon> + <Download /> + </el-icon> + </el-button> + <el-button> + <el-icon> + <Refresh /> + </el-icon> + </el-button> + </div> + </div> + <el-table + :data="tableData" + style="width: 100%" + ref="multipleTableRef" + @selection-change="handleSelectionChange" + > + <el-table-column + type="selection" + width="55" + /> + <el-table-column prop="accidentName" label="事故名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="deptName" label="事故部门" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="accidentType" label="事故类别" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="accidentGrade" label="事故等级" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="occurrencePlace" label="发生地点" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="occurrenceTime" label="发生时间" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="260" align="center" fixed="right"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onEdit('详情',scope.row.id)"> + <el-icon style="margin-right: 5px"> <View /> </el-icon>查看 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('修改',scope.row.id)"> + <el-icon style="margin-right: 5px"> <EditPen /> </el-icon>修改 + </el-button> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> 删除 </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="40" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-tab-pane> + <!--<el-tab-pane label="已处理" name="second"></el-tab-pane>--> + </el-tabs> + </el-card> + <OpenAdd ref="addRef" @myAdd="onMyAdd" /> +<!-- <upData ref="upShow"></upData>--> + </div> +</template> + +<script lang="ts"> +import { + // toRefs, + reactive, + onMounted, + ref, + defineComponent +} from 'vue'; +import { + // ElTable, + ElMessageBox, + ElMessage, + TabsPaneContext, +} from 'element-plus'; +import { + Plus, + Upload, + Download, + Refresh, + EditPen, + View, + Delete, + Edit, +} from '@element-plus/icons-vue' +import OpenAdd from '/@/views/accidentManagementSystem/accidentReport/component/openAdd.vue' +import UpData from '/@/views/contingencyManagement/panManagement/component/upData.vue'; +import {accidentManagementSystemApi} from "/@/api/workInjuryDeclaration"; + + +export default defineComponent({ + name: 'systemUser', + components: { + EditPen, + Plus, + Upload, + Download, + Refresh, + UpData, + Edit, + Delete, + OpenAdd, + View, + }, + setup() { + const activeName = ref('first') + const statusDisabledFlag = ref('first')//控制弹窗中的事件状态是否可以修改 + const handleClick = (tab: TabsPaneContext, event: Event) => { + if(tab.props.name=='first'){ + listQuery.searchParams.status=1 + statusDisabledFlag.value = 'first' + listApi() + }else if(tab.props.name=='second'){ + listQuery.searchParams.status=2 + statusDisabledFlag.value = 'second' + listApi() + } + } + + const editableTabs = ref([ + { + title: '处理中', + name: 'first', + }, + { + title: '已处理', + name: 'second', + }, + ]) + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + status: 1, + }, + }); + // 定义表格数据 + const tableData = ref([]); + // 请求列表数据 + const listApi = async () => { + let res = await accidentManagementSystemApi().getAccidentReportList(listQuery); + // console.log(res); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }; + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + // console.log(deletAll.value); + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + // 页面加载时 + onMounted(() => { + listApi(); + }); + // 打开新建用户弹窗 + const addRef = ref(); + const onOpenAdd = () => { + addRef.value.openDialog('新建事故报告','',false,statusDisabledFlag); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + listApi(); + } else { + listApi(); + } + }; + // 打开修改用户弹窗 + const onEdit = (val: string, row: object) => { + if (val == '详情') { + addRef.value.openDialog('查看事故报告',row,true,statusDisabledFlag); + } else { + addRef.value.openDialog('修改事故报告',row,false,statusDisabledFlag); + } + }; + // 上传 + // const upShow=ref() + // const upButton=()=>{ + // upShow.value.openDialog() + // } + // 删除用户 + const onRowDel = (data: any) => { + var deleteList = [data] + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + accidentManagementSystemApi() + .deleteAccidentReport(deleteList) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + accidentManagementSystemApi() + .deleteAccidentReport(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + }; + return { + onOpenAdd, + addRef, + activeName, + handleClick, + // upButton, + // upShow, + tableData, + pageIndex, + pageSize, + handleSizeChange, + handleCurrentChange, + listApi, + handleSelectionChange, + warning, + danger, + listQuery, + onRowDel, + total, + onMyAdd, + onDeleteAll, + onEdit, + editableTabs + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box{ + padding: 20px; + background-color: #fff; +} +.tableForm{ + margin-top: 10px; +} +/*按钮行*/ +.button_Line{ + display: flex; + flex-direction: row; + justify-content: space-between; +} +//分页 +.pages{ + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled{ + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next{ + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/accidentManagementSystem/workInjuryDeclaration/component/accidentName.vue b/src/components/accidentManagementSystem/workInjuryDeclaration/component/accidentName.vue new file mode 100644 index 0000000..d349645 --- /dev/null +++ b/src/components/accidentManagementSystem/workInjuryDeclaration/component/accidentName.vue @@ -0,0 +1,240 @@ +<template> + <div> + <el-dialog v-model="dialogVisible" title="选择事故名称" width="900px" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row> + <el-col :span="18"> + <el-row> + <el-form ref="ruleFormRef" :model="ruleForm" :inline="true" status-icon> + <!--<el-form-item>--> + <!--<el-input size="default" v-model="listQuery.searchParams.id" placeholder="id" style="min-width: 215px;"/>--> + <!--</el-form-item>--> + <el-form-item> + <el-input size="default" v-model="listQuery.searchParams.accidentName" placeholder="事故名称" style="min-width: 215px" /> + </el-form-item> + <!--<el-form-item>--> + <!--<el-input size="default" v-model="listQuery.searchParams.deptName" placeholder="事故部门" style="min-width: 215px;"/>--> + <!--</el-form-item>--> + <!--<el-form-item>--> + <!--<el-input size="default" v-model="listQuery.searchParams.occurrencePlace" placeholder="发生地点" style="min-width: 215px;"/>--> + <!--</el-form-item>--> + <!--<el-form-item>--> + <!--<el-input size="default" v-model="listQuery.searchParams.occurrenceTime" placeholder="发生时间" style="min-width: 215px;"/>--> + <!--</el-form-item>--> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="submitReset">重置</el-button> + <el-button size="default" :icon="Delete" @click="handleClose">清除选择</el-button> + </el-form-item> + </el-form> + </el-row> + <!--<el-table :data="tableData" style="width: 100%;margin-top:20px">--> + <!--<el-table-column type="selection" width="55" />--> + <!--<el-table-column align="center" prop="date" label="id" />--> + <!--<el-table-column align="center" prop="name" label="事故名称"/>--> + <!--<el-table-column align="center" prop="date" label="事故部门" />--> + <!--<el-table-column align="center" prop="name" label="发生地点"/>--> + <!--<el-table-column align="center" prop="name" label="发生时间"/>--> + <!--</el-table>--> + <!--<div class="pages">--> + <!--<el-pagination--> + <!--v-model:currentPage="currentPage4"--> + <!--v-model:page-size="pageSize4"--> + <!--:page-sizes="[100, 200, 300, 400]"--> + <!--:small="small"--> + <!--:disabled="disabled"--> + <!--:background="background"--> + <!--layout="total, sizes, prev, pager, next, jumper"--> + <!--:total="400"--> + <!--@size-change="handleSizeChange"--> + <!--@current-change="handleCurrentChange"--> + <!--/>--> + <!--</div>--> + <el-table :data="tableData" style="width: 100%" ref="multipleTableRef"> + <el-table-column align="center"> + <template #default="scope"> + <el-radio-group v-model="radio1"> + <el-radio :label="scope.row.id" size="large" @click="checkedItem(scope.row)">{{ null }}</el-radio> + </el-radio-group> + </template> + </el-table-column> + <!--<el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>--> + <el-table-column prop="accidentName" label="事故名称" show-overflow-tooltip></el-table-column> + <el-table-column prop="deptName" label="事故部门" show-overflow-tooltip></el-table-column> + <el-table-column prop="occurrencePlace" label="发生地点" show-overflow-tooltip></el-table-column> + <el-table-column prop="occurrenceTime" label="发生时间" show-overflow-tooltip></el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-col> + <el-col :span="6"> + <el-tag v-for="tag in dynamicTags" :key="tag" class="mx-1" style="margin: 5px" closable :disable-transitions="false" @close="handleClose()"> + {{ tag.accidentName }} + </el-tag> + </el-col> + </el-row> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogVisible = false" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> + </div> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref } from 'vue'; +import { Delete, FullScreen } from '@element-plus/icons-vue'; +import { + // ElTable, + ElMessage, +} from 'element-plus'; +import { accidentManagementSystemApi } from '/@/api/workInjuryDeclaration'; +export default defineComponent({ + setup(props, { emit }) { + const dialogVisible = ref<boolean>(false); + const openDailog = () => { + dialogVisible.value = true; + listApi(); + }; + // 搜索条件 + const ruleForm = reactive({ + pass: '', + }); + // 定义表格数据 + const tableData = ref([]); + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + accidentName: '', + }, + }); + //单选按钮 + const radio1 = ref(''); + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + }; + const checkedItem = (row: object) => { + dynamicTags.value = [row]; + }; + // 重置 + const submitReset = () => { + listQuery.searchParams = {}; + listApi(); + }; + const submitForm = () => { + emit('selectItem', dynamicTags.value); + dialogVisible.value = false; + }; + //查询list数据 + const listApi = async () => { + let res = await accidentManagementSystemApi().accidentList(listQuery); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }; + // 右方点击添加后显示标签 + const dynamicTags = ref([]); + const handleClose = () => { + dynamicTags.value = []; + radio1.value = ''; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + dialogVisible, + openDailog, + ruleForm, + tableData, + handleSizeChange, + handleCurrentChange, + dynamicTags, + handleClose, + Delete, + toggleFullscreen, + FullScreen, + full, + pageIndex, + pageSize, + total, + listApi, + listQuery, + radio1, + checkedItem, + submitReset, + submitForm, + }; + }, +}); +</script> +<style scoped> +.el-form--inline .el-form-item { + margin-bottom: 18px !important; + margin-right: 12px; +} +/*分页*/ +.pages { + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> diff --git a/src/components/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue b/src/components/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue new file mode 100644 index 0000000..581cd61 --- /dev/null +++ b/src/components/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue @@ -0,0 +1,510 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" v-model="isShowDialog" width="769px" draggable :fullscreen="full" @close="closeDialog(ruleFormRef)"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" size="default" label-width="120px" :rules="rules"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="申报人姓名" prop="declareUserName"> + <el-input v-model="ruleForm.declareUserName" :disabled="disabled" placeholder="请填写申报人姓名"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="申报人性别" prop="declareUserGender"> + <el-radio-group v-model="ruleForm.declareUserGender" :disabled="disabled"> + <el-radio :label="false">男</el-radio> + <el-radio :label="true">女</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="申报人部门" placeholder="请选择" prop="declareDepartmentId"> + <el-tree-select v-model="ruleForm.declareDepartmentId" :disabled="disabled" + :data="newTreeList" :props="propse" class="w100" placeholder="请选择" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故名称" prop="accidentName"> + <el-input v-model="ruleForm.accidentName" :disabled="true" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="daiInpt" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故发生时间" prop="occurrenceTime"> + <el-date-picker + v-model="ruleForm.occurrenceTime" + :disabled="true" + type="datetime" + class="w100" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="工伤类型" prop="workInjuryType"> + <el-select v-model="ruleForm.workInjuryType" :disabled="disabled" class="w100" placeholder="请选择"> + <el-option label="轻微伤" value="轻微伤"></el-option> + <el-option label="轻伤" value="轻伤"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="申报日期" prop="declareDate"> + <el-date-picker + v-model="ruleForm.declareDate" + :disabled="disabled" + type="datetime" + class="w100" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="损失工时" prop="lostTime"> + <el-input v-model="ruleForm.lostTime" :disabled="disabled" placeholder="请填写损失工时"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="就诊医院" prop="visitHospital"> + <el-input v-model="ruleForm.visitHospital" :disabled="disabled" placeholder="请填写就诊医院"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="就诊结果" prop="visitResult"> + <el-input v-model="ruleForm.visitResult" :disabled="disabled" placeholder="请填写就诊结果"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="相关附件"> + <uploaderImg :fileList="fileList" :disabled="disabled"></uploaderImg> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="注意事项" prop="mattersNeedingAttention"> + <el-input v-model="ruleForm.mattersNeedingAttention" :disabled="disabled" placeholder="请填写注意事项"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="材料是否齐全" prop="completeMaterials"> + <el-radio-group v-model="ruleForm.completeMaterials" :disabled="disabled"> + <el-radio :label="false">否</el-radio> + <el-radio :label="true">是</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="备注" prop="remark"> + <el-input v-model="ruleForm.remark" :disabled="disabled" type="textarea" placeholder="请填写备注" maxlength="150"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" v-if="disabled == true ? false : true" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <AccidentName @selectItem="onSelectItem" ref="showRef" /> + <userSelections ref="userRef" /> + <RegionsDialog ref="openRef" /> + </div> +</template> + +<script lang="ts"> +import { + reactive, + ref, + defineComponent, + onMounted +} from 'vue'; + +import type { UploadUserFile, FormInstance,FormRules } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import UserSelections from '/@/components/userSelections/index.vue'; +import AccidentName from '/@/views/accidentManagementSystem/workInjuryDeclaration/component/accidentName.vue'; +import RegionsDialog from '/@/components/regionsDialog/index.vue'; +import uploaderImg from '/@/components/uploaderImg/index.vue'; +import { emergencySuppliesApi } from '/@/api/contingencyManagement/emergencyResources'; +import { accidentManagementSystemApi } from '/@/api/workInjuryDeclaration'; +import { goalManagementApi } from '/@/api/goalManagement'; + +export default defineComponent({ + name: 'openAdd', + components: { + AccidentName, + UserSelections, + RegionsDialog, + uploaderImg + }, + setup(props, { emit }) { + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + //定义表单 + const ruleForm = ref({ + declareUserName: '', + declareUserGender: '', + declareDepartmentId: '', + accidentName:'', + accidentExpressId: '', + workInjuryType: '', + declareDate: '', + lostTime: '', + visitHospital: '', + visitResult: '', + mattersNeedingAttention: '', + completeMaterials: '', + remark: '', + fileList: [ + { + fileName: '', + fileUrl: '', + }, + ], + }); + const titles = ref(); + const disabled = ref(); + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + if (title == '查看工伤申报' || title == '修改工伤申报') { + accidentManagementSystemApi() + .seeAccidentManagementSystem(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + } + }); + } + }; + //日期选择器 + const value1 = ref(''); + // 上传附件 + const fileList = ref<UploadUserFile[]>([]); + // 可选择树 + const treeSelect = ref(); + const tree = [ + ]; + //定义树形下拉框 + const responsibleDepartment = ref(); + const data = [ + + ]; + //el-tree-select回显 + const propse = { + label: 'depName', + children: 'children', + }; + const newTreeList = []; + //得到部门树 + const department = async () => { + await goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + getTreeList(res.data.data, newTreeList); + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 递归树状数据且修改字段名 + const getTreeList = (treeList, newTreeList) => { + treeList.map((c) => { + let tempData = { + depName: c.depName, + value: c.depId, + children: [], + }; + if (c.children && c.children.length > 0) { + tempData.children = []; + getTreeList(c.children, tempData.children); + } + newTreeList.push(tempData); + }); + }; + onMounted(() => { + department(); + }); + // 关闭弹窗 + const closeDialog = (formEl: FormInstance | undefined) => { + formEl.resetFields(); + isShowDialog.value = false; + }; + // 必填项提示 + const rules = reactive<FormRules>({ + declareUserName: [ + { + required: true, + message: '申报人姓名不能为空', + trigger: 'change', + }, + ], + declareUserGender: [ + { + required: true, + message: '申报人性别不能为空', + trigger: 'change', + }, + ], + declareDepartmentId: [ + { + required: true, + message: '申报人部门不能为空', + trigger: 'change', + }, + ], + accidentName: [ + { + required: true, + message: '事故名称不能为空', + trigger: 'change', + }, + ], + workInjuryType: [ + { + required: true, + message: '工伤类型不能为空', + trigger: 'change', + }, + ], + declareDate: [ + { + required: true, + message: '申报日期不能为空', + trigger: 'blur', + }, + ], + lostTime: [ + { + required: true, + message: '损失工时不能为空', + trigger: 'change', + }, + ], + visitHospital: [ + { + required: true, + message: '就诊医院不能为空', + trigger: 'change', + }, + ], + visitResult: [ + { + required: true, + message: '就诊结果不能为空', + trigger: 'change', + }, + ], + mattersNeedingAttention: [ + { + required: true, + message: '注意事项不能为空', + trigger: 'change', + }, + ], + completeMaterials: [ + { + required: true, + message: '材料状态不能为空', + trigger: 'change', + }, + ], + remark: [ + { + required: true, + message: '备注不能为空', + trigger: 'change', + }, + ] + }) + + // 事故名称弹窗 + const showRef = ref(); + const daiInpt = () => { + showRef.value.openDailog(); + }; + //事故快报回填 + const onSelectItem = (item: any) => { + console.log('item', item); + ruleForm.value.accidentExpressId = item[0].id + ruleForm.value.accidentName = item[0].accidentName + ruleForm.value.occurrenceTime = item[0].occurrenceTime + + }; + // 表单提交验证必填项 + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '新建工伤申报') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + accidentManagementSystemApi() + .workAdd(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } else if (title == '修改工伤申报') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + accidentManagementSystemApi() + .workView(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + declareUserName: '', + declareUserGender: '', + declareDepartmentId: '', + accidentExpressId: '', + workInjuryType: '', + declareDate: '', + lostTime: '', + visitHospital: '', + visitResult: '', + mattersNeedingAttention: '', + completeMaterials: '', + remark: '', + fileList: [ + { + fileName: '', + fileUrl: '', + }, + ], + }; + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + // 选择区域弹窗 + const openRef = ref(); + const regionsDialog = () => { + openRef.value.openDailog(); + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + daiInpt, + openDialog, + isShowDialog, + fileList, + responsibleDepartment, + data, + Search, + ruleForm, + value1, + treeSelect, + tree, + showRef, + ruleFormRef, + submitForm, + rules, + openUser, + userRef, + regionsDialog, + openRef, + toggleFullscreen, + FullScreen, + full, + resetForm, + titles, + disabled, + emit, + onSelectItem, + department, + getTreeList, + newTreeList, + propse, + closeDialog, + uploaderImg + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> diff --git a/src/components/accidentManagementSystem/workInjuryDeclaration/component/openEdit.vue b/src/components/accidentManagementSystem/workInjuryDeclaration/component/openEdit.vue new file mode 100644 index 0000000..f3ef29b --- /dev/null +++ b/src/components/accidentManagementSystem/workInjuryDeclaration/component/openEdit.vue @@ -0,0 +1,400 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + title="新建事故快报" + v-model="isShowDialog" + width="769px" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form + ref="ruleFormRef" + :model="ruleForm" + size="default" + label-width="120px" + > + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故名称" prop="teamName"> + <el-input v-model="ruleForm.teamName" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故部门" placeholder="请选择"> + <el-tree-select + v-model="ruleForm.responsibleDepartment" + :data="data" class="w100" + placeholder="请选择"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="发生地点" prop="teamLeader"> + <el-input v-model="ruleForm.teamName" placeholder="请填写发生地点"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="发生时间" prop="telephone"> + <el-date-picker + v-model="value1" + type="datetime" + class="w100" + placeholder="选择日期时间" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故原因" prop="teamLevel"> + <el-select v-model="ruleForm.teamLevel" class="w100" placeholder="请选择"> + <el-option label="人的不安全行为" value="admin"></el-option> + <el-option label="物的不安全状态" value="common"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="是否有伤亡"> + <el-radio-group v-model="ruleForm.resource"> + <el-radio label="是" /> + <el-radio label="否" /> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故简要经过"> + <el-input v-model="ruleForm.describe" type="textarea" placeholder="请填写事故简要经过" maxlength="150"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="事故原因初步分析"> + <el-input v-model="ruleForm.describe" type="textarea" placeholder="请填写事故原因初步分析" maxlength="150"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急防范措施"> + <el-input v-model="ruleForm.describe" type="textarea" placeholder="请填写应急防范措施" maxlength="150"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="事故照片"> + <el-input v-model="ruleForm.describe" type="textarea" placeholder="请填写应急防范措施" maxlength="150"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="onCancel" size="default">关闭</el-button> + <el-button size="default" type="primary" @click="submitForm(ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <CheckTemplate ref="Shows"/> + <userSelections ref="userRef"/> + <RegionsDialog ref="openRef"/> + </div> +</template> + +<script lang="ts"> +import { + reactive, + ref, + defineComponent +} from 'vue'; + +import type { + UploadUserFile, + FormInstance, + // FormRules, +} from 'element-plus' + +import { + Search, + FullScreen +} from '@element-plus/icons-vue' +import UserSelections from "/@/components/userSelections/index.vue" +import CheckTemplate from '/@/components/checkTemplate/index.vue' +import RegionsDialog from '/@/components/regionsDialog/index.vue' + +export default defineComponent({ + name: 'openEdit', + components: { + CheckTemplate, + UserSelections, + RegionsDialog, + }, + setup() { + const isShowDialog = ref(false) + + const ruleFormRef = ref<FormInstance>() + //定义表单 + const ruleForm = reactive({ + teamName: '', // 队伍名称 + teamLeader: '', //队伍负责人 + department: [], // 负责人部门 + phone: '', // 负责人手机 + telephone: '', // 固定电话 + }); + // 打开弹窗 + const openDialog = () => { + // state.ruleForm = row; + isShowDialog.value = true; + }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + // 取消 + const onCancel = () => { + closeDialog(); + }; + //日期选择器 + const value1 = ref('') + // 上传附件 + const fileList = ref<UploadUserFile[]>([]) + // 可选择树 + const treeSelect = ref() + const tree = [ + { + value: '1', + label: 'Level one 1', + children: [ + { + value: '1-1', + label: 'Level two 1-1', + children: [ + { + value: '1-1-1', + label: 'Level three 1-1-1', + }, + ], + }, + ], + }, + { + value: '2', + label: 'Level one 2', + children: [ + { + value: '2-1', + label: 'Level two 2-1', + children: [ + { + value: '2-1-1', + label: 'Level three 2-1-1', + }, + ], + }, + { + value: '2-2', + label: 'Level two 2-2', + children: [ + { + value: '2-2-1', + label: 'Level three 2-2-1', + }, + ], + }, + ], + }, + { + value: '3', + label: 'Level one 3', + children: [ + { + value: '3-1', + label: 'Level two 3-1', + children: [ + { + value: '3-1-1', + label: 'Level three 3-1-1', + }, + ], + }, + { + value: '3-2', + label: 'Level two 3-2', + children: [ + { + value: '3-2-1', + label: 'Level three 3-2-1', + }, + ], + }, + ], + }, + ] + //定义树形下拉框 + const responsibleDepartment = ref() + const data = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '1-1', + label: '经营班子', + children: [], + }, + ], + }, + { + value: '2', + label: '生产运行部', + children: [ + { + value: '2-1', + label: '灌装一班', + children: [] + }, + { + value: '2-2', + label: '工艺四班', + children: [], + }, + ], + }, + { + value: '3', + label: '设备部', + children: [ + { + value: '3-1', + label: '仪表班', + children: [], + }, + { + value: '3-2', + label: '机修班', + children: [], + }, + ], + }, + ] + // 必填项提示 + // const rules = reactive<FormRules>({ + // teamName: [ + // { + // required: true, + // message: '队伍名称不能为空', + // trigger: 'change', + // }, + // ], + // teamLevel: [ + // { + // required: true, + // message: '队伍级别不能为空', + // trigger: 'change', + // }, + // ], + // teamLeader: [ + // { + // required: true, + // message: '队伍负责人不能为空', + // trigger: 'change', + // }, + // ], + // responsibleDepartment: [ + // { + // required: true, + // message: '负责人部门不能为空', + // trigger: 'change', + // }, + // ], + // teamPhone: [ + // { + // required: true, + // message: '负责人手机不能为空', + // trigger: 'change', + // }, + // ], + // telephone: [ + // { + // required: true, + // message: '固定电话不能为空', + // trigger: 'change', + // }, + // ], + // }) + // 表单提交验证必填项 + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate((valid, fields) => { + if (valid) { + console.log('submit!') + } else { + console.log('error submit!', fields) + } + }) + } + // 应急队伍弹窗 + const Shows=ref() + const daiInpt=()=>{ + Shows.value.openDailog() + } + // 选择区域弹窗 + const openRef=ref() + const regionsDialog=()=>{ + openRef.value.openDailog() + } + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + onCancel, + fileList, + responsibleDepartment, + data, + Search, + ruleForm, + value1, + treeSelect, + tree, + daiInpt, + Shows, + ruleFormRef, + submitForm, + // rules, + openUser, + userRef, + regionsDialog, + openRef, + toggleFullscreen, + FullScreen, + full, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea{ + height: 168px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 168px!important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal{ + height: 0; + margin: 0; + border-top: transparent; +} +.el-select{ + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/components/accidentManagementSystem/workInjuryDeclaration/index.vue b/src/components/accidentManagementSystem/workInjuryDeclaration/index.vue new file mode 100644 index 0000000..503246d --- /dev/null +++ b/src/components/accidentManagementSystem/workInjuryDeclaration/index.vue @@ -0,0 +1,406 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="system-user-search mb15"> + <el-form ref="ruleFormRef" size="default" label-width="80px" :inline="true"> + <el-form-item prop="telephone"> + <el-input v-model="listQuery.searchParams.accidentName" placeholder="请选择事故快报" :disabled="true" + class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="daiInpt"/> + </template> + </el-input> + </el-form-item> + <el-button size="default" type="primary" class="ml10" @click="listApi"> 查询</el-button> + <el-button size="default" class="ml10" @click="submitReset"> 重置</el-button> + </el-form> + </div> + <div class="button_Line"> + <div class="button_Left"> + <el-button size="default" type="primary" @click="onOpenAdd"> + <el-icon> + <Plus/> + </el-icon> + 新建 + </el-button> + <el-button size="default" type="warning" plain :disabled="warning"> + <el-icon> + <Edit/> + </el-icon> + 修改 + </el-button> + <el-button size="default" type="danger" plain @click="onDeleteAll" :disabled="danger"> + <el-icon> + <Delete/> + </el-icon> + 删除 + </el-button> + </div> + <div class="button_Right"> + <el-button @click="upButton"> + <el-icon> + <Upload/> + </el-icon> + </el-button> + <el-button> + <el-icon> + <Download/> + </el-icon> + </el-button> + <el-button> + <el-icon> + <Refresh/> + </el-icon> + </el-button> + </div> + </div> + <el-table :data="tableData" style="width: 100%" ref="multipleTableRef" + @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55"/> + <el-table-column prop="declareUserName" label="申报人名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="deptName" label="申报人部门" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="accidentName" label="事故名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="workInjuryType" label="工商类型" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="declareDate" label="申报日期" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="visitHospital" label="就诊医院" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="260" align="center" fixed="right"> + <template #default="scope"> + <!--<el-button size="small" text disabled>--> + <!--<el-icon style="margin-right: 5px"> <Upload /> </el-icon>上报--> + <!--</el-button>--> + <el-button size="small" text type="primary" @click="onEdit('详情',scope.row.id)"> + <el-icon style="margin-right: 5px"> + <View/> + </el-icon> + 查看 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('修改',scope.row.id)"> + <el-icon style="margin-right: 5px"> + <EditPen/> + </el-icon> + 修改 + </el-button> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> 删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-card> + <AccidentName ref="showRef" @selectItem="onSelectItem"/> + <OpenAdd ref="addRef" @myAdd="onMyAdd"/> + <!-- <OpenEdit ref="editRef" />--> + <upData ref="upShow"></upData> + </div> +</template> + +<script lang="ts"> + import { + // toRefs, + reactive, + // onMounted, + ref, + defineComponent, + onMounted, + } from 'vue'; + import { + ElMessageBox, + ElMessage + } from 'element-plus'; + import { + Plus, + Download, + Refresh, + View, + EditPen, + Edit, + Delete, + Search, + Upload + } from '@element-plus/icons-vue'; + import AccidentName from '/@/views/accidentManagementSystem/workInjuryDeclaration/component/accidentName.vue'; + import OpenAdd from '/@/views/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue'; + import OpenEdit from '/@/views/accidentManagementSystem/workInjuryDeclaration/component/openEdit.vue'; + import UpData from '/@/views/contingencyManagement/panManagement/component/upData.vue'; + import {accidentManagementSystemApi} from '/@/api/accidentManagementSystem'; + + export default defineComponent({ + name: 'index', + components: { + OpenEdit, + EditPen, + Plus, + Upload, + Download, + Refresh, + Edit, + View, + Delete, + UpData, + OpenAdd, + AccidentName, + }, + setup() { + //列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + accidentExpressId: "", + }, + }); + //搜索条件回填 + const onSelectItem = (item: any) => { + console.log('item', item[0].accidentName); + listQuery.searchParams.accidentExpressId = item[0].id + listQuery.searchParams.accidentName = item[0].accidentName + }; + // 定义表格数据 + const tableData = ref([]); + // 请求列表数据 + const listApi = async () => { + let res = await accidentManagementSystemApi().workList(listQuery); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }; + onMounted(() => { + listApi(); + }); + // 重置 + const submitReset = () => { + listQuery.searchParams.accidentExpressId = '' + listQuery.searchParams.accidentName = '' + listApi(); + } + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + // 事故名称弹窗 + const showRef = ref(); + const daiInpt = () => { + showRef.value.openDailog(); + }; + // 打开新增弹窗 + const addRef = ref(); + const onOpenAdd = () => { + addRef.value.openDialog('新建工伤申报', false); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + listApi(); + } else { + listApi(); + } + }; + // 上传 + const upShow = ref(); + const upButton = () => { + upShow.value.openDialog(); + }; + + // 打开修改用户弹窗 + // const editRef = ref(); + const onEdit = (val: string, row: object) => { + if (val == '详情') { + addRef.value.openDialog('查看工伤申报', row, true); + } else { + addRef.value.openDialog('修改工伤申报', row, false); + } + }; + // 删除用户 + const onRowDel = (data: any) => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + accidentManagementSystemApi() + .workDelete([data]) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => { + }); + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + accidentManagementSystemApi() + .workDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => { + }); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + }; + return { + daiInpt, + showRef, + upButton, + upShow, + tableData, + pageIndex, + pageSize, + handleSizeChange, + handleCurrentChange, + onEdit, + onOpenAdd, + addRef, + // editRef, + listApi, + Search, + submitReset, + onDeleteAll, + handleSelectionChange, + warning, + danger, + listQuery, + onRowDel, + total, + onMyAdd, + onSelectItem + }; + }, + }); +</script> +<style scoped lang="scss"> + .table_Box { + padding: 20px; + background-color: #fff; + } + + .tableForm { + margin-top: 10px; + } + + /*按钮行*/ + .button_Line { + display: flex; + flex-direction: row; + justify-content: space-between; + } + + //分页 + .pages { + display: flex; + justify-content: flex-end; + margin-top: 15px; + } + + ::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; + } + + ::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; + } + + ::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; + } + + ::v-deep .el-pagination button:disabled { + color: #c0c4cc; + } + + ::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; + } +</style> \ No newline at end of file diff --git a/src/components/checkTemplate/index.vue b/src/components/checkTemplate/index.vue index 15734ac..24f6c25 100644 --- a/src/components/checkTemplate/index.vue +++ b/src/components/checkTemplate/index.vue @@ -26,10 +26,10 @@ :data="tableData" ref="multipleTableRef" style="width: 100%;margin-top:20px" - @cell-click="radio" + @selection-change="handleSelectionChange" > - <el-table-column width="55"> - <template #default="scope"> + <el-table-column type="selection" width="55" v-if="types==0"> + <template #default="scope" v-if="types!=0"> <el-radio-group v-model="radio1"> <el-radio :label="scope.row.id" @click="radio(scope.row)" size="large">{{ null }}</el-radio> </el-radio-group> @@ -88,14 +88,16 @@ import { ElMessage, } from 'element-plus'; -import {contingencyApi} from "/@/api/contingency"; +import {contingencyApi} from "/@/api/contingencyManagement/contingency"; export default defineComponent({ setup(props, { emit }) { + const types=ref() const dialogVisible = ref<boolean>(false); - const openDailog = () => { + const openDailog = (type:any) => { + types.value=type dialogVisible.value = true; - onSubmit(); + // onSubmit(); }; // 搜索条件 const listQuery = reactive({ @@ -123,10 +125,17 @@ } } const submitForm = () => { - let obj = JSON.parse(JSON.stringify(dynamicTags.value)); - emit('SearchUser', obj[0]); + if(types.value==0){ + emit('SearchUser',dynamicTags.value,types.value); + } + else { + emit('SearchUser',dynamicTags.value[0],types.value); + } dialogVisible.value = false; }; + const handleSelectionChange = (val:any) => { + dynamicTags.value=val + } // 重置 const submitReset = () => { listQuery.searchParams.teamName = ''; @@ -157,6 +166,7 @@ }; const radio1 = ref(''); const radio = (event: any) => { + console.log(event) dynamicTags.value[0] = event; }; onMounted(() => { @@ -192,7 +202,8 @@ radio, radio1, submitForm, - + types, + handleSelectionChange, }; }, }); diff --git a/src/components/contingencyManagement/abolishDialog/abolishDialog.vue b/src/components/contingencyManagement/abolishDialog/abolishDialog.vue new file mode 100644 index 0000000..69dba30 --- /dev/null +++ b/src/components/contingencyManagement/abolishDialog/abolishDialog.vue @@ -0,0 +1,139 @@ +<template> + <div class="system-user-container"> + <h4 class="title">胡海涛2022-07-01 16:08:42发起了目标检查上报(检查)--检查</h4> + <div class="box"> + <el-menu + :default-active="activeIndex" + class="el-menu-demo" + background-color="#ebeef5" + text-color="#fff" + active-text-color="#fff" + mode="horizontal" + @select="handleSelect" + > + <el-menu-item index="1">表单信息</el-menu-item> + <el-menu-item index="2">流程图</el-menu-item> + </el-menu> + <div v-if="activeIndex == 1" class="navType"> + <formInformationTop v-if="false"></formInformationTop> + <formInformationTops></formInformationTops> + </div> + <div v-if="activeIndex == 2" class="navType" style="padding:20px 20px 0 20px"> + <div class="title2">流程图 + <!-- <img src=""> --> + </div> + <div style="width:100%;height:400px"></div> + </div> + </div> + <lowerPlate></lowerPlate> + <div class="btns"> + <el-button type="primary">启动</el-button> + </div> + </div> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref,onMounted } from 'vue'; +import { useRouter } from 'vue-router'; +import formInformationTop from './component/formInformationTop.vue' +import formInformationTops from './component/formInformationTops.vue' +import lowerPlate from './component/lowerPlate.vue' +export default defineComponent({ + components:{lowerPlate,formInformationTop,formInformationTops}, + setup() { + const activeIndex = ref<any>('1'); + const handleSelect = (key: string, keyPath: string[]) => { + // console.log(key, keyPath); + activeIndex.value = key; + }; + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + + const router=useRouter() + const Type=onMounted(()=>{ + // console.log("xxxxxxx",router) + }) + + return { + activeIndex, + handleSelect, + form, + router, + Type + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; + padding: 15px; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} + +/*弹窗底部边框线*/ +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +/*弹窗顶部边框线*/ +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +</style> diff --git a/src/components/contingencyManagement/abolishDialog/component/formInformationTop.vue b/src/components/contingencyManagement/abolishDialog/component/formInformationTop.vue new file mode 100644 index 0000000..ef75063 --- /dev/null +++ b/src/components/contingencyManagement/abolishDialog/component/formInformationTop.vue @@ -0,0 +1,144 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="安全目标指标"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="目标指标编号"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="年度"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="指标值"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" style="padding: 0 20px"> + <el-tab-pane label="考核指标" name="1"> + <el-table :data="tableData" style="width: 100%"> + <el-table-column align="center" type="index" label="序号" width="70" /> + <el-table-column align="center" prop="date" label="责任部门" /> + <el-table-column align="center" prop="name" label="考核指标" /> + <el-table-column align="center" prop="address" label="制定部门" /> + <el-table-column align="center" prop="address" label="制定日期" /> + <el-table-column align="center" label="检查值"> + <template #default> + <el-input v-model="form.name" placeholder=""></el-input> + </template> + </el-table-column> + <el-table-column align="center" prop="address" label="检查人" /> + <el-table-column align="center" prop="address" label="检查时间" /> + </el-table> + <div class="tiao"> + <div class="typeS">审批</div> + </div> + <el-row style="padding:20px 0"> + <el-col :span="6" style="text-align:right">一级审批:</el-col> + <el-col :span="18">同意</el-col> + </el-row> + <el-row style="padding:0 0 20px 0"> + <el-col :span="6"></el-col> + <el-col :span="18"><span class="logoColor">同意</span><span style="margin-right: 8px;">杜建喜</span><span>2021-05-24 04:47:42</span></el-col> + </el-row> + </el-tab-pane> + </el-tabs> +</template> +<script lang="ts"> +import { defineComponent,ref,reactive } from 'vue' + +export default defineComponent({ + setup() { + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + const tableData = [ + { + date: '2016-05-03', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + ]; + const activeName = ref('1'); + return{ + form, + tableData, + activeName + } + }, +}) +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:0 0 20px 0 ; +} +</style> diff --git a/src/components/contingencyManagement/abolishDialog/component/formInformationTops.vue b/src/components/contingencyManagement/abolishDialog/component/formInformationTops.vue new file mode 100644 index 0000000..68ae8a6 --- /dev/null +++ b/src/components/contingencyManagement/abolishDialog/component/formInformationTops.vue @@ -0,0 +1,318 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="12"> + <el-form-item label="预案名称"> + <el-input v-model="form.name" disabled placeholder="请填写预案名称"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="适用部门"> + <el-tree-select + class="select" + placeholder="请选择" + v-model="value" + :data="data" + :render-after-expand="false" + show-checkbox + multiple + clearable + disabled + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预案类型"> + <el-select class="select" v-model="form.region" disabled placeholder="请选择"> + <el-option label="综合应急预案" value="shanghai" /> + <el-option label="现场处置方案" value="beijing" /> + <el-option label="专项应急预案" value="shanghai" /> + <el-option label="其它预案" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="危险源关联"> + <el-select class="select" v-model="form.region" disabled placeholder="请选择"> + <el-option label="是" value="shanghai" /> + <el-option label="否" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预案级别"> + <el-select class="select" v-model="form.region" disabled placeholder="请选择"> + <el-option label="公司及" value="shanghai" /> + <el-option label="分厂级" value="beijing" /> + <el-option label="车间级" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="编写人"> + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + disabled + > + <template #append> + <el-button :icon="Search" @click="openUser" disabled/> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="编写部门" disabled placeholder="请选择"> + <el-tree-select + class="select" + v-model="value2" + :data="dataSelect" + :render-after-expand="false" + multiple + check-strictly + check-on-click-node + clearable + disabled + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="发布实施日期"> + <el-date-picker v-model="datetime" type="datetime" disabled placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急队伍" prop="telephone" @click="daiInpt" > + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + disabled + > + <template #append> + <el-button :icon="Search" disabled/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="预案附件"> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + :on-change="handleChange" + disabled + > + <el-button type="primary" disabled + >点击上传</el-button> + <template #tip> + <div class="el-upload__tip"> + 添加相关附件 + </div> + </template> + </el-upload> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="区域名称" prop="telephone"> + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + disabled + > + <template #append> + <el-button :icon="Search" disabled @click="regionsDialog"/> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <checkTemplate ref="ShowRef"/> + <userSelections ref="userRef"/> + <RegionsDialog ref="openRef"/> +</template> +<script lang="ts"> +import { + defineComponent, + ref, + reactive +} from 'vue'; +import { + Search +} from '@element-plus/icons-vue' +import UserSelections from "/@/components/userSelections/index.vue" +import CheckTemplate from "/@/components/checkTemplate/index.vue" +import RegionsDialog from "/@/components/regionsDialog/index.vue"; +export default defineComponent({ + components: { + CheckTemplate, + UserSelections, + RegionsDialog, + }, + setup() { + const form = reactive({ + name: '', + value: '', + value2: '', + teamLeader: '', + + // data: '', + // dataSelect: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + + // 可选择树形选择框 + const value = ref() + + const data = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '1-1', + label: '生产运行部', + children: [ + { + value: '1-1-1', + label: '工艺二班', + }, + ], + }, + ], + } + ] + // 树形选择框 + const value2 = ref() + + const dataSelect = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '1-1', + label: '生产运行部', + children: [ + { + value: '1-1-1', + label: '工艺二班', + }, + ], + }, + ], + } + ] + // 应急队伍弹窗 + const ShowRef=ref() + const daiInpt=()=>{ + ShowRef.value.openDailog() + } + // 选择区域弹窗 + const openRef=ref() + const regionsDialog=()=>{ + openRef.value.openDailog() + } + // 打开编写人选择用户弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + // 日期选择 + const datetime = ref('') + return { + form, + value, + data, + value2, + dataSelect, + openUser, + userRef, + Search, + ShowRef, + daiInpt, + openRef, + datetime, + regionsDialog, + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box { + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao { + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0; + position: relative; +} +.typeS { + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor { + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns { + width: 100%; + padding: 20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); +} +.title2 { + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:0 0 20px 0; +} +.select{ + width: 100%; +} +.select ::v-deep .el-select{ + width: 100%; +} +</style> diff --git a/src/components/contingencyManagement/abolishDialog/component/lowerPlate.vue b/src/components/contingencyManagement/abolishDialog/component/lowerPlate.vue new file mode 100644 index 0000000..cbb82fb --- /dev/null +++ b/src/components/contingencyManagement/abolishDialog/component/lowerPlate.vue @@ -0,0 +1,120 @@ +<template> + <div class="box"> + <el-form ref="formS" :model="form" :rules="rules" label-width="120px"> + <el-row> + <el-col :span="15"> + <el-form-item label="流程标题"> + <el-input v-model="form.names" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label="下级审批日期"> + <el-date-picker v-model="form.date1" type="date" placeholder="下级审批日期" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.delivery" label="是否抄送" @change="typeChang"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.delivery"> + <el-col :span="15"> + <el-form-item label="抄送给" prop="resource"> + <el-input v-model="form.resource" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.type" label="指定下一步处理者(不设置就使用默认处理人)"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.type"> + <el-col :span="15"> + <el-form-item label="指定" prop="desc"> + <el-input v-model="form.desc" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> + <DailogSearchUser ref="ShowUser"></DailogSearchUser> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue' +import { Search } from '@element-plus/icons-vue'; +import type { FormInstance, FormRules } from 'element-plus' +export default defineComponent({ + components:{DailogSearchUser}, + setup() { + const formS=ref<FormInstance>() + let form = reactive({ + names: '', + region: '', + date1: '', + date2: '', + delivery: "", + type: "", + resource: '', + desc: '', + }); + const typeChang=()=>{ + console.log('tag',form) + } + const rules = reactive<FormRules>({ + resource: [ + { + type: 'array', + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ], + desc: [ + { + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ]}) + const ShowUser=ref() + const openDai =()=>{ + ShowUser.value.openDailog() + } + return { + form, + rules, + formS, + typeChang, + ShowUser, + openDai, + Search, + }; + }, +}); +</script> + +<style scoped> +.box { + margin: 30px 0 100px 0; + background-color: #fff; + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); + padding: 20px; +} +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/contingency/component/addEmergencyPersonnel.vue b/src/components/contingencyManagement/contingency/component/addEmergencyPersonnel.vue new file mode 100644 index 0000000..de19c3f --- /dev/null +++ b/src/components/contingencyManagement/contingency/component/addEmergencyPersonnel.vue @@ -0,0 +1,314 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + :title="titles" + v-model="isShowDialog" + width="40%" + draggable + :fullscreen="full" + @close="resetForm(ruleFormRef)" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form + ref="ruleFormRef" + :model="ruleForm" + size="default" + :rules="rules" + :disabled="disabled" + label-width="90px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="选择人员" prop="name"> + <el-input + v-model="ruleForm.userName" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="人员工号" prop="jobNumber"> + <el-input v-model="ruleForm.jobNumber" placeholder="请填写人员工号"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="人员名称" prop="name"> + <el-input v-model="ruleForm.name" placeholder="请填写人员名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="人员性别" prop="gender"> + <el-radio-group v-model="ruleForm.gender"> + <el-radio :label="false">男</el-radio> + <el-radio :label="true">女</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="手机号码" prop="phone"> + <el-input v-model="ruleForm.phone" placeholder="请填写手机号码"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="职位" prop="position"> + <el-input v-model="ruleForm.position" placeholder="请填写职位"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button size="default" type="primary" @click="addForm(ruleFormRef)">继续添加</el-button> + <el-button size="default" @click="resetForm(ruleFormRef)">关闭</el-button> + <el-button size="default" type="primary" v-if="disabled == true ? false : true" @click="submitForm(titles, ruleFormRef)" >确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUserManger ref="userRef" @SearchUser="onUser"/> + </div> +</template> + +<script lang="ts"> +import { + ref, + reactive, + defineComponent +} from 'vue'; + +import type { + FormRules, + FormInstance, +} from 'element-plus' +import { ElMessage } from 'element-plus'; +import { + Search, + FullScreen, +} from '@element-plus/icons-vue' +import DailogSearchUserManger from "/@/components/DailogSearchUserManger/index.vue" +import {contingencyApi} from "/@/api/contingencyManagement/contingency"; + +export default defineComponent({ + name: 'addTeamLeader', + components: { + // Search, + DailogSearchUserManger + }, + setup(props, { emit }) { + const isShowDialog = ref(false) + const ruleFormRef = ref<FormInstance>() + const ruleForm = ref ({ + teamId: '', + userUid: '', + userName:'', + gender: '', + jobNumber: '', // 人员工号 + name: '', // 人员名称 + phone: '', // 手机号码 + position: '', // 职位 + }); + const rules = reactive<FormRules>({ + jobNumber: [ + { + required: true, + message: '人员工号不能为空', + trigger: 'change', + }, + ], + personnelName: [ + { + required: true, + message: '人员名称不能为空', + trigger: 'change', + }, + ], + personnelGender: [ + { + required: true, + message: '人员性别不能为空', + trigger: 'change', + }, + ], + phone: [ + { + required: true, + message: '手机号码不能为空', + trigger: 'change', + }, + ], + position: [ + { + required: true, + message: '职位不能为空', + trigger: 'change', + }, + ], + }) + const titles = ref(); + const disabled = ref(); + //继续添加 + const addForm = (formEl: FormInstance | undefined) => { + emit('myAdd', ruleForm.value); + formEl.resetFields(); + } + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '新建应急队伍人员') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + // console.log('-------',ruleForm.value) + // emit('myAdd', ruleForm.value); + contingencyApi() + .addEmergencyTeamPersonnel(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } + else if (title == '修改应急队伍人员') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + contingencyApi() + .editEmergencyTeamPersonnel(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + teamId: '', + userUid: '', + userName:'', + gender: '', + jobNumber: '', // 人员工号 + name: '', // 人员名称 + phone: '', // 手机号码 + position: '', // 职位 + }; + } + } + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + + // 打开弹窗 + const openDialog = (title: string, id: number,teamId:number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + ruleForm.value.teamId = teamId + + if (title == '查看应急队伍人员' || title == '修改应急队伍人员') { + contingencyApi() + .seeEmergencyTeamPersonnel(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + } + }); + } + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + const onUser = (e:any) => { + ruleForm.value.userUid=e[0].uid + ruleForm.value.userName=e[0].realName + ruleForm.value.gender=e[0].sex + ruleForm.value.name=e[0].username + ruleForm.value.jobNumber=e[0].jobNumber + ruleForm.value.phone=e[0].phone + ruleForm.value.position=e[0].position + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + // closeDialog, + isShowDialog, + ruleFormRef, + // submitForm, + // onCancel, + ruleForm, + rules, + Search, + toggleFullscreen, + FullScreen, + full, + resetForm, + titles, + disabled, + emit, + openUser, + userRef, + onUser, + addForm, + submitForm, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea{ + height: 168px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 168px!important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/contingency/component/openAdd.vue b/src/components/contingencyManagement/contingency/component/openAdd.vue new file mode 100644 index 0000000..e853358 --- /dev/null +++ b/src/components/contingencyManagement/contingency/component/openAdd.vue @@ -0,0 +1,503 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" v-model="isShowDialog" width="50%" draggable :fullscreen="full" @close="resetForm(ruleFormRef)"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" size="default" :rules="rules" label-width="120px" + :disabled="disabled"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="队伍名称" prop="teamName"> + <el-input v-model="ruleForm.teamName" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="队伍级别" prop="teamLevel"> + <el-select v-model="ruleForm.teamLevel" class="w100" placeholder="请选择"> + <el-option label="公司" value="1"></el-option> + <el-option label="分厂-车间" value="2"></el-option> + <el-option label="工序-班组等" value="3"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="队伍负责人" prop="principalName"> + <el-input v-model="ruleForm.principalName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="负责人部门" prop="principalDepartmentId"> + <el-tree-select v-model="ruleForm.principalDepartmentId" :data="data" class="w100" + :props="propse" clearable placeholder="请选择"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="负责人手机" prop="principalPhone"> + <el-input v-model="ruleForm.principalPhone" placeholder="请填写负责人手机"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="固定电话" prop="telephoneNumber"> + <el-input v-model="ruleForm.telephoneNumber" placeholder="请填写固定电话"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="队伍描述" prop="teamDesc"> + <el-input class="textarea" v-model="ruleForm.teamDesc" type="textarea" maxlength="150" + placeholder="请填写队伍描述"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="相关附件" prop="fileList"> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + :on-change="handleChange" + > + <el-button type="primary">点击上传</el-button> + <template #tip> + <div class="el-upload__tip">添加相关附件</div> + </template> + </el-upload> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> + <el-tab-pane label="应急队伍人员" name="first" > + <el-button type="primary" size="default" @click="onAddEmergencyPersonnel" :disabled="disabled">新增 + </el-button> + <el-table + :data="tableData" + style="width: 100%; margin-top: 15px" + ref="multipleTableRef" + :header-cell-style="{ background: '#f6f7fa', color: '#909399' }" + :disabled="disabled" + > + <el-table-column prop="jobNumber" label="人员工号" show-overflow-tooltip></el-table-column> + <el-table-column prop="name" label="人员名称" show-overflow-tooltip></el-table-column> + <el-table-column prop="phone" label="手机号码" show-overflow-tooltip></el-table-column> + <el-table-column prop="position" label="职位" show-overflow-tooltip></el-table-column> + <el-table-column label="操作" width="250" align="center"> + <template #default="scope"> + <el-button :disabled="disabled" size="small" @click="onEdit('查看应急队伍人员',scope.row.id)">查看 + </el-button> + <el-button :disabled="disabled" size="small" @click="onEdit('修改应急队伍人员',scope.row.id)" + style="margin-right: 5px">编辑 + </el-button> + <el-button :disabled="disabled" size="small" @click="onRowDel(scope.row.id)" + style="margin-right: 5px">删除 + </el-button> + </template> + </el-table-column> + </el-table> + </el-tab-pane> + </el-tabs> + </el-col> + </el-row> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" v-if="disabled == true ? false : true" type="primary" + @click="onSubmit(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <AddEmergencyPersonnel ref="addRef" @myAdd="onMyAdd"/> + <DailogSearchUserManger ref="userRef" @SearchUser="onUser"/> + </div> +</template> + +<script lang="ts"> + import { + reactive, + ref, + defineComponent, + onMounted, + // toRefs, + } from 'vue'; + import { + ElMessage, + ElMessageBox, + } from 'element-plus'; + + import type { + UploadUserFile, + TabsPaneContext, + FormInstance, + FormRules, + } from 'element-plus' + + import { + Search, + FullScreen + } from '@element-plus/icons-vue' + import AddEmergencyPersonnel from "/@/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue"; + import DailogSearchUserManger from "/@/components/DailogSearchUserManger/index.vue" + import {contingencyApi} from "/@/api/contingencyManagement/contingency"; + import {goalManagementApi} from "/@/api/goalManagement"; + // import {releaseDrillPlanApi} from "/@/api/releaseDrillPlan"; + + + export default defineComponent({ + name: 'openAdd', + components: { + AddEmergencyPersonnel, + DailogSearchUserManger, + }, + setup(prop, {emit}) { + const isShowDialog = ref(false); + const ruleFormRef = ref<FormInstance>(); + const ruleForm = ref({ + teamName: '', // 队伍名称 + teamLevel: '', // 队伍级别 + principalUid: '', // 队伍负责人 + principalName: '', + principalDepartmentId: '', //负责人部门 + principalPhone: '', // 负责人手机 + telephoneNumber: '', // 固定电话 + teamDesc: '', //队伍描述 + fileList: [ + { + fileUrl: 'url', + fileName: 'name', + } + ], + memberList: [] + }); + const titles = ref(); + const disabled = ref(); + const peopleInsertBtn = ref(false) + const teamId = ref() + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + teamId.value = id + //如果是新增 无法添加人员 + if(title == '新建应急队伍管理'){ + peopleInsertBtn.value = true + }else{ + peopleInsertBtn.value = false + } + if (title == '查看应急队伍管理' || title == '修改应急队伍管理') { + contingencyApi() + .seeEmergencyTeam(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + listApi() + } + }); + } + } + // 上传附件 + const fileList = ref<UploadUserFile[]>([]) + + //部门树 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + //定义树形下拉框 + const principalDepartmentId = ref() + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + const data = ref() + onMounted(() => { + department(); + }); + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + const onUser = (e: any) => { + ruleForm.value.principalUid = e[0].uid + ruleForm.value.principalName = e[0].realName + }; + //定义tabs切换 + const activeName = ref('first') + const handleClick = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event) + } + + // 必填项提示 + const rules = reactive<FormRules>({ + teamName: [ + { + required: true, + message: '队伍名称不能为空', + trigger: 'change', + }, + ], + teamLevel: [ + { + required: true, + message: '队伍级别不能为空', + trigger: 'change', + }, + ], + principalUid: [ + { + required: true, + message: '队伍负责人不能为空', + trigger: 'change', + }, + ], + principalDepartmentId: [ + { + required: true, + message: '负责人部门不能为空', + trigger: 'change', + }, + ], + principalPhone: [ + { + required: true, + message: '负责人手机不能为空', + trigger: 'change', + }, + ], + telephoneNumber: [ + { + required: true, + message: '固定电话不能为空', + trigger: 'change', + }, + ], + }) + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + const onSubmit = async (title: string, formEl: FormInstance | undefined) => { + if (title == '新建应急队伍管理') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + contingencyApi() + .addEmergencyTeam(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } else if (title == '修改应急队伍管理') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + contingencyApi() + .editEmergencyTeam(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + teamName: '', // 队伍名称 + teamLevel: '', // 队伍级别 + principalUid: '', // 队伍负责人 + principalDepartmentId: '', //负责人部门 + principalPhone: '', // 负责人手机 + telephoneNumber: '', // 固定电话 + teamDesc: '', //队伍描述 + fileList: [ + { + fileUrl: 'url', + fileName: 'name', + } + ], + memberList: [] + }; + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + tableData.value=[] + }; + // 定义表格数据 + const tableData = ref([]); + //添加队伍负责人弹窗 + const addRef = ref(); + const onAddEmergencyPersonnel = () => { + //未添加队伍 无法修改人员 + if(peopleInsertBtn.value == true){ + ElMessage({ + showClose: true, + message: '请先添加应急队伍', + type: 'warning', + }); + }else { + addRef.value.openDialog('新建应急队伍人员','',teamId.value); + } + + }; + // 请求列表数据 + const listApi = async () => { + let res = await contingencyApi().getEmergencyTeamPersonnelList(teamId.value); + if (res.data.code == 200) { + tableData.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }; + // 新增后刷新 + const onMyAdd = (e: object) => { + listApi(); + // console.log(e) + // item.value = e + // tableData.value.push(item.value) + // console.log(tableData) + }; + // 打开修改弹窗 + const onEdit = (val: string, row: object) => { + if (val == '查看应急队伍人员') { + addRef.value.openDialog('查看应急队伍人员', row,teamId.value, true); + } else { + addRef.value.openDialog('修改应急队伍人员', row,teamId.value, false); + } + }; + // 删除 + const onRowDel = (data: any) => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + contingencyApi() + .deleteEmergencyTeamPersonnel(data) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi() + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi() + } + }); + }) + .catch(() => { + }); + }; + return { + openDialog, + fileList, + principalDepartmentId, + data, + activeName, + handleClick, + tableData, + Search, + resetForm, + isShowDialog, + ruleFormRef, + ruleForm, + rules, + addRef, + userRef, + titles, + disabled, + propse, + emit, + onSubmit, + openUser, + onAddEmergencyPersonnel, + toggleFullscreen, + FullScreen, + full, + onUser, + onMyAdd, + listApi, + onEdit, + onRowDel, + department, + peopleInsertBtn, + teamId + }; + }, + }); +</script> +<style scoped lang="scss"> + .textarea { + height: 168px !important; + } + + .textarea ::v-deep .el-textarea__inner { + height: 168px !important; + } + + ::v-deep .el-table__cell { + font-weight: 400; + } +</style> + diff --git a/src/components/contingencyManagement/contingency/component/upData.vue b/src/components/contingencyManagement/contingency/component/upData.vue new file mode 100644 index 0000000..cc3e2d0 --- /dev/null +++ b/src/components/contingencyManagement/contingency/component/upData.vue @@ -0,0 +1,125 @@ +<template> + <el-dialog + v-model="dialogVisible" + title="导入Excel" + width="50%" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + multiple + :on-preview="handlePreview" + :on-remove="handleRemove" + :before-remove="beforeRemove" + :limit="3" + :on-exceed="handleExceed" + > + <el-button size="default">下载模板</el-button> + <el-button size="default" type="primary">点击上传</el-button> + <template #tip> + <div class="el-upload__tip"> + 只允许导入“xls”或“xlsx”格式文件! + </div> + </template> + </el-upload> + </el-dialog> +</template> +<script lang="ts"> +import { ref, + defineComponent, +} from "vue"; +import { + ElMessage, + ElMessageBox +} from "element-plus"; +import type { + UploadProps, + UploadUserFile, +} from "element-plus"; +import { + FullScreen +} from '@element-plus/icons-vue' +export default defineComponent({ + setup() { + let dialogVisible =ref<boolean>(false) + const fileList = ref<UploadUserFile[]>([ + // { + // name: "element-plus-logo.svg", + // url: "https://element-plus.org/images/element-plus-logo.svg", + // }, + // { + // name: "element-plus-logo2.svg", + // url: "https://element-plus.org/images/element-plus-logo.svg", + // }, + ]); + + const handleRemove: UploadProps["onRemove"] = (file, uploadFiles) => { + console.log(file, uploadFiles); + }; + + const handlePreview: UploadProps["onPreview"] = (uploadFile) => { + console.log(uploadFile); + }; + + const handleExceed: UploadProps["onExceed"] = (files, uploadFiles) => { + ElMessage.warning( + `The limit is 3, you selected ${ + files.length + } files this time, add up to ${ + files.length + uploadFiles.length + } totally` + ); + }; + + const beforeRemove: UploadProps["beforeRemove"] = ( + uploadFile, + uploadFiles + ) => { + return ElMessageBox.confirm( + `Cancel the transfert of ${uploadFile.name} ?` + ).then( + () => true, + () => false + ); + }; + // 打开弹窗 + const openDialog = (type:string,value:any,projectList: any,projectId:string) => { + dialogVisible.value=true + } + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + dialogVisible, + fileList, + handleRemove, + handlePreview, + handleExceed, + beforeRemove, + openDialog, + toggleFullscreen, + FullScreen, + full, + }; + }, +}); +</script> +<style scoped lang="scss"> +.el-upload__tip{ + margin-left: 100px; + margin-top: 20px; +} +::v-deep .el-dialog__header{ + border-bottom: 1px solid #e8e8e8; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/contingency/index.vue b/src/components/contingencyManagement/contingency/index.vue new file mode 100644 index 0000000..2196936 --- /dev/null +++ b/src/components/contingencyManagement/contingency/index.vue @@ -0,0 +1,393 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="system-user-search mb15"> + <el-form :inline="true" class="demo-form-inline"> + <el-form-item> + <el-input size="default" v-model="listQuery.searchParams.teamName" placeholder="队伍名称"> </el-input> + </el-form-item> + <el-form-item> + <el-select size="default" v-model="listQuery.searchParams.teamType" placeholder="请选择队伍级别"> + <el-option label="公司" value="1"></el-option> + <el-option label="分厂-车间" value="2"></el-option> + <el-option label="工序-班组等" value="3"></el-option> + </el-select> + </el-form-item> + <el-form-item> + <el-button size="default" type="primary" class="ml10" @click="onSubmit"> + 查询 + </el-button> + <el-button size="default" class="ml10" @click="submitReset"> + 重置 + </el-button> + </el-form-item> + </el-form> + </div> + <div class="button_Line"> + <div class="button_Left"> + <el-button size="default" type="primary" @click="onOpenAdd"> + <el-icon> + <Plus /> + </el-icon>新建 + </el-button> + <el-button size="default" type="warning" plain :disabled="warning"> + <el-icon> + <Edit /> + </el-icon>修改 + </el-button> + <el-button size="default" type="danger" plain :disabled="danger" @click="onDeleteAll"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </div> +<!-- <div class="button_Right">--> +<!-- <el-button size="default" @click="upButton">--> +<!-- <el-icon>--> +<!-- <Upload />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button size="default">--> +<!-- <el-icon>--> +<!-- <Download />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button size="default">--> +<!-- <el-icon>--> +<!-- <Refresh />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- </div>--> + </div> + <el-table + :data="tableData" + style="width: 100%" + ref="multipleTableRef" + @selection-change="handleSelectionChange" + > + <el-table-column + type="selection" + width="55" + /> + <el-table-column prop="teamName" label="队伍名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="teamLevel" label="队伍级别" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.teamLevel == 1">公司</span> + <span v-if="scope.row.teamLevel == 2">分厂-车间</span> + <span v-if="scope.row.teamLevel == 3">工序-班组等</span> + </template> + </el-table-column> + <el-table-column prop="teamDesc" label="队伍描述" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="principalPhone" label="负责人手机" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="attachments" label="相关附件" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="200" align="center" fixed="right"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onEdit('详情',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <View /> + </el-icon>查看 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('修改',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <EditPen /> + </el-icon>修改 + </el-button> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + class="mt15" + :pager-count="5" + :page-sizes="[10, 20, 30]" + v-model:currentPage="pageIndex" + background + v-model:page-size="pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + > + </el-pagination> + </div> + </el-card> + <OpenAdd ref="addRef" @myAdd="onMyAdd" /> + <upData ref="upShow"></upData> + </div> +</template> + +<script lang="ts"> +import { + // toRefs, + reactive, + onMounted, + ref, + defineComponent +} from 'vue'; +import { + ElMessageBox, + ElMessage, +} from 'element-plus'; +import { Plus, + Edit, + Delete, + // Upload, + // Download, + // Refresh, + View, + EditPen, +} from '@element-plus/icons-vue' + +import OpenAdd from '../../contingencyManagement/contingency/component/openAdd.vue' +import UpData from '../../contingencyManagement/contingency/component/upData.vue'; +import {contingencyApi} from "../../../api/contingencyManagement/contingency"; + +export default defineComponent({ + name: 'systemUser', + components: { + OpenAdd, + View, + EditPen, + Plus, + Edit, + Delete, + // Upload, + // Download, + // Refresh, + UpData, + contingencyApi + }, + setup() { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + teamName: "", + teamType: "", + } + }) + // 定义表格数据 + const tableData = ref([]); + // 列表数据请求 + const onSubmit = async () => { + let res = await contingencyApi().getTeamManagementList(listQuery) + if(res.data.code === '200'){ + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + }else{ + ElMessage({ + showClose: true, + type:'error', + message:res.data.msg + }) + } + } + // 重置 + const submitReset = () => { + listQuery.searchParams.teamName = ''; + listQuery.searchParams.teamType = ''; + onSubmit(); + }; + const warning = ref(true); + const danger = ref(true); + const deleteAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deleteAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + + // 上传 + // const upShow=ref() + // const upButton=()=>{ + // upShow.value.openDialog() + // } + // 打开新增应急队伍弹窗 + const addRef = ref(); + const onOpenAdd = () => { + addRef.value.openDialog('新建应急队伍管理'); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + onSubmit(); + } else { + onSubmit(); + } + }; + // 打开修改应急队伍弹窗 + const onEdit = (val: string, row: object) => { + if (val == '详情') { + addRef.value.openDialog('查看应急队伍管理',row,true); + } else { + addRef.value.openDialog('修改应急队伍管理',row,false); + } + }; + // 删除用户 + const onRowDel = (data: any) => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + contingencyApi() + .deleteEmergencyTeam([data]) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }).catch(() => {}); + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + contingencyApi() + .deleteEmergencyTeam(deleteAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const onHandleSizeChange = (val: number) => { + listQuery.pageSize = val; + onSubmit(); + }; + const onHandleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + onSubmit(); + }; + // 页面加载时 + onMounted(() => { + onSubmit(); + }); + return { + listQuery, + onSubmit, + // upButton, + // upShow, + onOpenAdd, //新增 + addRef, + pageIndex, + pageSize, + total, + onEdit, + handleSelectionChange, + submitReset, + onRowDel, + onMyAdd, + tableData, + onDeleteAll, + onHandleSizeChange, + onHandleCurrentChange, + deleteAll, + warning, + danger, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box{ + padding: 20px; + background-color: #fff; +} +.tableForm{ + margin-top: 10px; +} +/*按钮行*/ + .button_Line{ + display: flex; + flex-direction: row; + justify-content: space-between; + margin-bottom: 10px; + } +//分页 +.pages{ + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +.el-form .el-form-item{ + margin-bottom: 0px!important; +} +//弹窗底部边框线 +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +//弹窗顶部边框线 +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending{ + border-bottom-color: #c0c4cc; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/approvalProgress.vue b/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/approvalProgress.vue new file mode 100644 index 0000000..07f4e5f --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/approvalProgress.vue @@ -0,0 +1,841 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + :title="titles" + v-model="isShowDialog" + width="900px" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form + ref="ruleFormRef" + :model="ruleForm" + size="default" + label-width="120px" + > + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练名称" prop="emergencyPlanName"> + <el-input :disabled="true" v-model="ruleForm.emergencyPlanName" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练地点" prop="drillAddress"> + <el-input :disabled="true" v-model="ruleForm.drillAddress" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="主办部门" placeholder="请选择" prop="departmentId"> + <!--<el-tree-select--> + <!--v-model="ruleForm.departmentId"--> + <!--:data="data" class="w100"--> + <!--placeholder="请选择"/>--> + + <el-tree-select :disabled="true" v-model="ruleForm.departmentId" + :data="newTreeList" :props="propse" class="w100" placeholder="请选择" /> + </el-form-item> + + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练方式" prop="drillWay"> + <el-select :disabled="true" v-model="ruleForm.drillWay" class="w100" placeholder="请选择"> + <el-option label="综合" value="0"></el-option> + <el-option label="桌面" value="1"></el-option> + <el-option label="专项" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急预案" prop="drillName" > + <el-input + :disabled="true" + v-model="ruleForm.drillName" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :disabled="true" :icon="Search" @click="daiInpt"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练级别" prop="drillLevel"> + <el-select :disabled="true" v-model="ruleForm.drillLevel" class="w100" placeholder="请选择"> + <el-option label="公司级" value="1"></el-option> + <el-option label="分厂级" value="2"></el-option> + <el-option label="车间级" value="3"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="计划定制日期" prop="makingPlanDate"> + <el-date-picker :disabled="true" v-model="ruleForm.makingPlanDate" + value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="计划演练日期" prop="drillPlanDate"> + <el-date-picker :disabled="true" v-model="ruleForm.drillPlanDate" + value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="修改时间" prop="updateDate"> + <el-date-picker :disabled="true" v-model="ruleForm.updateDate" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="计划定制人" prop="makingUserUid"> + <el-input :disabled="true" v-model="ruleForm.makingUserName" placeholder="请填写计划定制人"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="制定部门" prop="makingDepartmentId"> + <!--<el-tree-select--> + <!--v-model="ruleForm.makingDepartmentId"--> + <!--:data="data" class="w100"--> + <!--placeholder="请选择"/>--> + + <el-tree-select :disabled="true" v-model="ruleForm.makingDepartmentId" + :data="newTreeList" :props="propse" class="w100" placeholder="请选择" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练人员" prop="planUserListString" > + <el-input + :disabled="true" + v-model="ruleForm.planUserListString" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :disabled="true" :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="演练目的" prop="purpose"> + <el-input + :disabled="true" + v-model="ruleForm.purpose" + placeholder="请填写演练目的" + class="input-with-select textarea" + type="textarea" + > + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练负责人" prop="chargeUserListString" > + <el-input + :disabled="true" + v-model="ruleForm.chargeUserListString" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :disabled="true" :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="保险措施" prop="insuranceMeasures"> + <el-input :disabled="true" v-model="ruleForm.insuranceMeasures" placeholder="请填写保险措施"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练经费" prop="drillExpense"> + <el-input :disabled="true" v-model="ruleForm.drillExpense" placeholder="请填写演练经费"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="备注信息" prop="remark"> + <el-input + :disabled="true" + v-model="ruleForm.remark" + placeholder="请填写备注信息" + class="input-with-select textarea" + type="textarea" + > + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" style="margin-bottom: 0!important;"> + <el-form-item label="预案附件"> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + :on-change="handleChange" + > + <el-button type="primary" + >点击上传</el-button> + <template #tip> + <div class="el-upload__tip"> + 添加相关附件 + </div> + </template> + </el-upload> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="实际到场人员" prop="executeUserListString" > + <el-input + v-model="ruleForm.executeUserListString" + placeholder="请选择" + class="input-with-select" + :disabled="true" + > + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="演练过程描述" prop="processDesc"> + <el-input :disabled="true" v-model="ruleForm.processDesc" class="textarea" type="textarea" placeholder="请填写演练过程描述"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练记录人" prop="recordUserName" > + <el-input + v-model="ruleForm.recordUserName" + placeholder="请选择" + class="input-with-select" + :disabled="true" + > + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练记录时间" prop="drillRecordDate"> + <el-date-picker + v-model="ruleForm.drillRecordDate" + class="w100" + type="datetime" + placeholder="选择日期时间" + :disabled="true" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <div class="el-divider--horizontal"> + <div class="el-divider__text"> + <h3>评价</h3> + </div> + </div> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练负责人" prop="evaluationUserListString" > + <el-input + v-model="ruleForm.evaluationUserListString" + placeholder="请选择" + class="input-with-select" + :disabled="disabled" + > + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="预案评审-适宜性" prop="suitable"> + <el-select :disabled="disabled" v-model="ruleForm.suitable" class="w100" placeholder="请选择"> + <el-option label="全部能够执行" value="1"></el-option> + <el-option label="全部不能够执行" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="预案评审-充分性" prop="sufficient"> + <el-select :disabled="disabled" v-model="ruleForm.sufficient" class="w100" placeholder="请选择"> + <el-option label="完全满足应急要求" value="1"></el-option> + <el-option label="不完全满足应急要求" value="2"></el-option> + <el-option label="完全不满足应急要求" value="3"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="人员到位情况" prop="arrival"> + <el-select :disabled="disabled" v-model="ruleForm.arrival" class="w100" placeholder="请选择"> + <el-option label="迅速准确,基本按时到位" value="1"></el-option> + <el-option label="未按时到位" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资到位情况-现场物资" prop="supplies"> + <el-select :disabled="disabled" v-model="ruleForm.supplies" class="w100" placeholder="请选择"> + <el-option label="现场物资充分,全部有效" value="1"></el-option> + <el-option label="现场物资不充分" value="2"></el-option> + <el-option label="现场没有物资" value="3"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资到位情况-个人防护" prop="protection"> + <el-select :disabled="disabled" v-model="ruleForm.protection" class="w100" placeholder="请选择"> + <el-option label="全部人员防护到位" value="1"></el-option> + <el-option label="人员未防护到位" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="协调组织情况-整体组织" prop="whole"> + <el-select :disabled="disabled" v-model="ruleForm.whole" class="w100" placeholder="请选择"> + <el-option label="协调基本顺利,能够满足要求" value="1"></el-option> + <el-option label="协调不顺利" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="协调组织情况-疏散组分工" prop="division"> + <el-select :disabled="disabled" v-model="ruleForm.division" class="w100" placeholder="请选择"> + <el-option label="安全,快速" value="1"></el-option> + <el-option label="安全,不快速" value="2"></el-option> + <el-option label="不安全,快速" value="3"></el-option> + <el-option label="不安全,不快速" value="4"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="实战效果评价" prop="effect"> + <el-select :disabled="disabled" v-model="ruleForm.effect" class="w100" placeholder="请选择"> + <el-option label="基本达到目的,部分环节有待改进" value="1"></el-option> + <el-option label="未达到目的" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="支援部门和协作有效性-报告上级" prop="report"> + <el-select :disabled="disabled" v-model="ruleForm.report" class="w100" placeholder="请选择"> + <el-option label="报告及时" value="1"></el-option> + <el-option label="报告不及时" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="支援部门和协作有效性-安全部门" prop="safety"> + <el-select :disabled="disabled" v-model="ruleForm.safety" class="w100" placeholder="请选择"> + <el-option label="按要求协作" value="1"></el-option> + <el-option label="未按要求协作" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="支援部门和协作有效性-救援后勤部门" prop="rescue"> + <el-select :disabled="disabled" v-model="ruleForm.rescue" class="w100" placeholder="请选择"> + <el-option label="按要求协作" value="1"></el-option> + <el-option label="未按要求协作" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="支援部门和协作有效性-警戒撤离配合" prop="evacuate"> + <el-select :disabled="disabled" v-model="ruleForm.evacuate" class="w100" placeholder="请选择"> + <el-option label="按要求配合" value="1"></el-option> + <el-option label="未按要求配合" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="是否需要修改应急预案" prop="needModify"> + <el-select :disabled="disabled" v-model="ruleForm.needModify" class="w100" placeholder="请选择"> + <el-option label="是" :value="true"></el-option> + <el-option label="否" :value="false"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="存在问题和改进措施" prop="questionAndImprove"> + <el-input :disabled="disabled" v-model="ruleForm.questionAndImprove" class="textarea" type="textarea" placeholder="请填写备注信息"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="修改内容" prop="modifyContent"> + <el-input :disabled="disabled" v-model="ruleForm.modifyContent" class="textarea" type="textarea" placeholder="请填写修改内容"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="附件列表"> + <el-upload + v-model:file-list="ruleForm.userList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + :on-change="handleChange" + > + <el-button type="primary" + >点击上传</el-button> + <template #tip> + <div class="el-upload__tip"> + 添加相关附件 + </div> + </template> + </el-upload> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button v-if="!disabled" size="default" type="primary" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <RegionsDialog ref="Shows" @SearchUser="onUser"/> + <DailogSearchUser ref="userRef" @SearchUser="selectUser"/> +<!-- <RegionsDialog ref="openRef"/>--> + </div> +</template> + +<script lang="ts"> +import { + reactive, + ref, + defineComponent, + onMounted, +} from 'vue'; + +import { + UploadUserFile, + FormInstance, + ElMessage +} from 'element-plus' +import { + Search, + FullScreen +} from '@element-plus/icons-vue' +import UserSelections from "/@/components/userSelections/index.vue" +import RegionsDialog from "/@/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue" +import DailogSearchUser from "/@/components/DailogSearchUser/index.vue" +import {emergencyDrillEvaluationApi} from "/@/api/contingencyManagement/emergencyDrillEvaluation"; +import {goalManagementApi} from "/@/api/goalManagement"; +export default defineComponent({ + name: 'approvalProgress', + components: { + UserSelections, + RegionsDialog, + DailogSearchUser + }, + setup(props, { emit }) { + const isShowDialog = ref(false) + + const ruleFormRef = ref<FormInstance>() + //定义表单 + const ruleForm = ref ({ + drillPlanId: '', + suitable: '', + sufficient: '', + arrival: '', + supplies: '', + protection: '', + whole: '', + division: '', + effect: '', + report: '', + safety: '', + rescue: '', + evacuate: '', + needModify: '', + questionAndImprove: '', + modifyContent: '', + fileList: [ + { + fileName: 'name', + fileUrl: 'url', + } + ], + userList: [ + ] + }); + const titles = ref(); + const disabled = ref(); + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + if (title == '查看演练实施评价') { + emergencyDrillEvaluationApi() + .seeEmergencyDrillEvaluation(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + ruleForm.value.planUserListString='' + ruleForm.value.chargeUserListString='' + ruleForm.value.executeUserListString='' + ruleForm.value.evaluationUserListString='' + //演练人员 + for(var a = 0;a<res.data.data.planUserList.length;a++){ + ruleForm.value.planUserListString += res.data.data.planUserList[a].userName+';' + } + //演练负责人员 + for(var a = 0;a<res.data.data.planChargeUserList.length;a++){ + ruleForm.value.chargeUserListString += res.data.data.planChargeUserList[a].userName+';' + } + //实际到场人员 + for(var a = 0;a<res.data.data.executeUserList.length;a++){ + ruleForm.value.executeUserListString += res.data.data.executeUserList[a].userName+';' + } + //演练负责人(评价) + for(var a = 0;a<res.data.data.evaluationUserList.length;a++){ + ruleForm.value.evaluationUserListString += res.data.data.evaluationUserList[a].userName+';' + } + } + }); + } + if(title=='演练实施评价'){ + emergencyDrillEvaluationApi() + .seeEmergencyDrillEvaluation(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + ruleForm.value.planUserListString='' + ruleForm.value.chargeUserListString='' + ruleForm.value.executeUserListString='' + ruleForm.value.evaluationUserListString='' + for(var a = 0;a<res.data.data.planUserList.length;a++){ + ruleForm.value.planUserListString += res.data.data.planUserList[a].userName+';' + } + for(var a = 0;a<res.data.data.planChargeUserList.length;a++){ + ruleForm.value.chargeUserListString += res.data.data.planChargeUserList[a].userName+';' + } + for(var a = 0;a<res.data.data.executeUserList.length;a++){ + ruleForm.value.executeUserListString += res.data.data.executeUserList[a].userName+';' + } + //演练负责人(评价) + for(var a = 0;a<res.data.data.evaluationUserList.length;a++){ + ruleForm.value.evaluationUserListString += res.data.data.evaluationUserList[a].userName+';' + } + } + }); + } + if(title=='演练实施查看评价'){ + emergencyDrillEvaluationApi() + .seeEmergencyDrillEvaluation(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + ruleForm.value.planUserListString='' + ruleForm.value.chargeUserListString='' + ruleForm.value.executeUserListString='' + ruleForm.value.evaluationUserListString='' + for(var a = 0;a<res.data.data.planUserList.length;a++){ + ruleForm.value.planUserListString += res.data.data.planUserList[a].userName+';' + } + for(var a = 0;a<res.data.data.planChargeUserList.length;a++){ + ruleForm.value.chargeUserListString += res.data.data.planChargeUserList[a].userName+';' + } + for(var a = 0;a<res.data.data.executeUserList.length;a++){ + ruleForm.value.executeUserListString += res.data.data.executeUserList[a].userName+';' + } + //演练负责人(评价) + for(var a = 0;a<res.data.data.evaluationUserList.length;a++){ + ruleForm.value.evaluationUserListString += res.data.data.evaluationUserList[a].userName+';' + } + } + }); + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + // 取消 + const onCancel = () => { + closeDialog(); + }; + //日期选择器 + const value1 = ref('') + // 上传附件 + const fileList = ref<UploadUserFile[]>([]) + // 可选择树 + const treeSelect = ref() + const tree = [ + , + ] + //定义树形下拉框 + const responsibleDepartment = ref() + const data = [ + + ] + // 必填项提示 + // const rules = reactive<FormRules>({ + // teamName: [ + // { + // required: true, + // message: '队伍名称不能为空', + // trigger: 'change', + // }, + // ], + // teamLevel: [ + // { + // required: true, + // message: '队伍级别不能为空', + // trigger: 'change', + // }, + // ], + // teamLeader: [ + // { + // required: true, + // message: '队伍负责人不能为空', + // trigger: 'change', + // }, + // ], + // responsibleDepartment: [ + // { + // required: true, + // message: '负责人部门不能为空', + // trigger: 'change', + // }, + // ], + // teamPhone: [ + // { + // required: true, + // message: '负责人手机不能为空', + // trigger: 'change', + // }, + // ], + // telephone: [ + // { + // required: true, + // message: '固定电话不能为空', + // trigger: 'change', + // }, + // ], + // }) + + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + //演练负责人(评价) + ruleForm.value.userList = ruleForm.value.evaluationUserList + // console.log(ruleForm.value.evaluationUserList) + // ruleForm.value.userList=[] + // for(var a = 0;a<ruleForm.value.evaluationUserList.length;a++){ + // // += res.data.data.evaluationUserList[a].userName+';' + // } + if (title == '演练实施评价') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + // console.log(ruleForm.value) + emergencyDrillEvaluationApi() + .editEmergencyDrillEvaluation(ruleForm.value) + // emergencyDrillExecuteApi() + // .editEmergencyDrillExecute(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '评价成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + isShowDialog.value = false; + formEl.resetFields(); + ruleForm.value = { + drillRecordDate: '', // 演练记录时间 + drillPlanId: '', //演练计划ID + drillName:'', + recordUserUid: '', // 记录人ID + processDesc: '', // 演练过程描述 + userList: [ + { + userUid: '', + }, + { + userUid: '', + } + ] + }; + } + } + // 应急队伍弹窗 + const Shows=ref() + const daiInpt=()=>{ + Shows.value.openDailog() + } + const onUser = (e:any) => { + ruleForm.value.drillPlanId=e.id + }; + // 选择区域弹窗 + const openRef=ref() + const regionsDialog=()=>{ + openRef.value.openDailog() + } + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(0); + }; + + const selectUser = (e) =>{ + ruleForm.value.evaluationUserListString='' + ruleForm.value.evaluationUserList=[] + for(var a = 0;a<e.length;a++){ + ruleForm.value.evaluationUserList.push( + { + userName: e[a].realName, + userUid: e[a].uid, + } + ) + ruleForm.value.evaluationUserListString+=e[a].realName+';' + } + } + //el-tree-select回显 + const propse = { + label: 'depName', + children: 'children', + }; + const newTreeList = []; + //得到部门树 + const department = async () => { + await goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + getTreeList(res.data.data, newTreeList); + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 递归树状数据且修改字段名 + const getTreeList = (treeList, newTreeList) => { + treeList.map((c) => { + let tempData = { + depName: c.depName, + value: c.depId, + children: [], + }; + if (c.children && c.children.length > 0) { + tempData.children = []; + getTreeList(c.children, tempData.children); + } + newTreeList.push(tempData); + }); + }; + onMounted(() => { + department(); + }); + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + onCancel, + fileList, + responsibleDepartment, + data, + Search, + ruleForm, + value1, + treeSelect, + tree, + daiInpt, + Shows, + onUser, + ruleFormRef, + // rules, + openUser, + userRef, + regionsDialog, + openRef, + toggleFullscreen, + FullScreen, + full, + resetForm, + titles, + disabled, + emit, + propse, + department, + newTreeList, + selectUser, + submitForm + }; + }, +}); +</script> +<style scoped lang="scss"> +.el-form .el-form-item{ + margin-bottom: 18px !important; + display: flex; + align-items: flex-start; +} +::v-deep .el-form-item--default .el-form-item__label{ + text-align: right; + height: 100%; +} +.textarea{ + height: 90px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 90px!important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal{ + height: 0; + margin: 0; + border-top: transparent; +} +.el-select{ + width: 100%; +} +.el-divider--horizontal { + display: block; + height: 1px; + width: 100%; + margin: 24px 0; + background-color: #dcdfe6; + position: relative; +} +.el-divider__text { + position: absolute; + background-color: #fff; + padding: 0 20px; + color: #303133; + left: 50%; + font-weight: 500; + font-size: 14px; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue b/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue new file mode 100644 index 0000000..6469b53 --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue @@ -0,0 +1,307 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog title="应急演练计划--修改审批进度" v-model="isShowDialog" width="769px" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <!-- <img class="process-status-img" src=""> --> + <el-tabs type="border-card"> + <el-tab-pane label="流转记录"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流转记录</span> + </div> + </template> + <div> + <el-steps :active="2"> + <el-step title="开始" description="胡海涛,2022-07-09 20:41:50" /> + <el-step title="一级审批" description="管理员,2022-07-09 20:41:50" /> + </el-steps> + </div> + <el-table :data="tableData" stripe style="width: 100%"> + <el-table-column prop="date" label="执行环节" width="120" /> + <el-table-column prop="name" label="执行人" width="120" /> + <el-table-column prop="address" label="开始时间" width="100" /> + <el-table-column prop="address" label="结束时间" width="100" /> + <el-table-column prop="address" label="办理状态" width="100" /> + <el-table-column prop="address" label="审批意见" width="100" /> + <el-table-column prop="address" label="任务历时" width="100" /> + </el-table> + </el-card> + </el-tab-pane> + <el-tab-pane label="流程信息"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流程信息</span> + </div> + </template> + <div> + <el-timeline> + <el-timeline-item timestamp="2018/4/12" placement="top" color="rgb(63, 158, 255)"> + <el-card> + <h4 style="margin: 10px 0; padding-bottom: 10px">一级审批</h4> + <el-row> + <el-col class="tip" :span="22" :offset="1"> + <div class="item"> + <span class="label">审批人:</span> + <span class="value">管理员</span> + </div> + <div class="item"> + <span class="label">办理状态:</span> + <span class="value"> + <!-- <el-tag--> + <!-- v-for="item in items"--> + <!-- :key="item.label"--> + <!-- :type="item.type"--> + <!-- class="mx-1"--> + <!-- effect="dark"--> + <!-- >--> + <!-- {{ item.label }}--> + <!-- </el-tag>--> + <p class="text">等待审核</p> + </span> + </div> + <div class="item"> + <span class="label">审批意见:</span> + <span class="value">等待审核</span> + </div> + <div class="item"> + <span class="label">开始时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">结束时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">用时:</span> + <span class="value">0秒</span> + </div> + </el-col> + </el-row> + </el-card> + </el-timeline-item> + <el-timeline-item timestamp="2018/4/3" placement="top" color="rgb(63, 158, 255)"> + <el-card> + <h4>开始</h4> + <el-row> + <el-col class="tip" :span="22" :offset="1"> + <div class="item"> + <span class="label">审批人:</span> + <span class="value">胡海涛</span> + </div> + <div class="item"> + <span class="label">办理状态:</span> + <span class="value"> + <p class="text">开始</p> + </span> + </div> + <div class="item"> + <span class="label">审批意见:</span> + <span class="value">等待审核</span> + </div> + <div class="item"> + <span class="label">开始时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">结束时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">用时:</span> + <span class="value">0秒</span> + </div> + </el-col> + </el-row> + </el-card> + </el-timeline-item> + </el-timeline> + </div> + </el-card> + </el-tab-pane> + <el-tab-pane label="流程图"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流程图</span> + </div> + </template> + <div></div> + </el-card> + </el-tab-pane> + </el-tabs> + </el-dialog> + <RegionsDialog ref="Shows" /> + <UserCheckbox ref="userRef" /> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent } from 'vue'; + +import type { TagProps } from 'element-plus'; + +import { Search, FullScreen } from '@element-plus/icons-vue'; +import UserCheckbox from '/@/components/userCheckbox/index.vue'; +import RegionsDialog from '/@/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue'; + +export default defineComponent({ + name: 'openAdd', + components: { + RegionsDialog, + UserCheckbox, + }, + setup() { + const isShowDialog = ref(false); + // 打开弹窗 + const openDialog = () => { + // state.ruleForm = row; + isShowDialog.value = true; + }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + const tableData = [ + { + date: '2016-05-03', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-02', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-04', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-01', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + ]; + + type Item = { type: TagProps['type']; label: string }; + + const items = ref<Array<Item>>([{ type: '', label: '等待审核' }]); + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + Search, + tableData, + items, + toggleFullscreen, + FullScreen, + full, + }; + }, +}); +</script> +<style scoped lang="scss"> +.process-status-img { + width: 128px; + height: auto; + position: absolute; + right: 10px; + top: 60px; + z-index: 999; +} +//弹窗底部边框线 +::v-deep .el-dialog__footer { + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +//弹窗顶部边框线 +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +//tabs字体颜色 +::v-deep .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active { + color: #a9d86e !important; +} +.card-header { + display: flex; + justify-content: space-between; + align-items: center; +} +//.box-card { +// width: 480px; +//} +//步骤条字体大小 +::v-deep .el-step__icon-inner { + font-size: 14px !important; +} +//步骤条颜色 +::v-deep .el-step__line { + background-color: #409eff; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending { + border-bottom-color: #c0c4cc; +} + +.tip { + padding: 8px 16px; + background-color: #ecf8ff; + border-radius: 4px; + border-left: 5px solid #50bfff; + margin: 20px 0; +} +.item { + height: 32px; + line-height: 32px; + margin-bottom: 8px; +} +.item .label { + display: inline-block; + height: 100%; + width: 70px; + font-size: 14px; + color: #5e6d82; + text-align: end; + vertical-align: top; +} +.item .value { + padding-left: 10px; + font-size: 14px; + max-width: calc(100% - 90px); + color: #5e6d82; + display: inline-block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.text { + background-color: #409eff; + color: #fff; + border-width: 1px; + border-style: solid; + border-radius: 4px; + height: 24px; + padding: 0 8px; + line-height: 22px; + display: inline-block; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/rectificationDialog.vue b/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/rectificationDialog.vue new file mode 100644 index 0000000..bc66e00 --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/rectificationDialog.vue @@ -0,0 +1,775 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + :title="titles" + v-model="isShowDialog" + width="769px" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form + ref="ruleFormRef" + :model="ruleForm" + size="default" + label-width="120px" + :disabled="disabled" + > + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="整改标题" prop="emergencyPlanName"> + <el-input v-model="ruleForm.emergencyPlanName" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="整改单编号" prop="teamName"> + <el-input v-model="ruleForm.teamName" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="整改来源" prop="teamLeader"> + <el-select v-model="ruleForm.teamLevel" class="w100" placeholder="请选择"> + <el-option label="演练评价等" value="admin"></el-option> + <el-option label="现场处置方案" value="common"></el-option> + <el-option label="专项应急预案" value="common"></el-option> + <el-option label="其他预案" value="common"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="整改对象名称" prop="teamLeader"> + <el-input v-model="ruleForm.teamName" placeholder="请填写整改对象名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="不合格因素" prop="teamLevel"> + <el-input v-model="ruleForm.name" class="textarea" type="textarea"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="整改要求" prop="teamLevel"> + <el-input v-model="ruleForm.name" class="textarea" type="textarea"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="隐患等级" prop="teamLeader"> + <el-select v-model="ruleForm.teamLevel" class="w100" placeholder="请选择"> + <el-option label="一般">一般</el-option> + <el-option label="重大">重大</el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="隐患后果" prop="teamLeader"> + <el-select v-model="ruleForm.teamLevel" class="w100" placeholder="请选择"> + <el-option label="死亡">死亡</el-option> + <el-option label="重伤">重伤</el-option> + <el-option label="轻伤">轻伤</el-option> + <el-option label="火灾">火灾</el-option> + <el-option label="交通事故">交通事故</el-option> + <el-option label="财产损失">财产损失</el-option> + <el-option label="其它">其它</el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="隐患类型" prop="teamLeader"> + <el-select v-model="ruleForm.teamLevel" class="w100" placeholder="请选择"> + <el-option label="化学品管理" value="admin"></el-option> + <el-option label="管理制度缺陷" value="common"></el-option> + <el-option label="设计缺陷" value="admin"></el-option> + <el-option label="其它" value="common"></el-option> + <el-option label="现场管理" value="admin"></el-option> + <el-option label="消防安全" value="common"></el-option> + <el-option label="消防安全" value="common"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="区域名称" prop="telephone"> + <el-input + v-model="ruleForm.teamLeader" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="regionsDialog"/> + </template> + </el-input> + </el-form-item> + </el-col> +<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> +<!-- <el-form-item label="隐患照片" prop="telephone">--> +<!-- <el-upload--> +<!-- class="avatar-uploader"--> +<!-- action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"--> +<!-- :show-file-list="false"--> +<!-- :on-success="handleAvatarSuccess"--> +<!-- :before-upload="beforeAvatarUpload"--> +<!-- >--> +<!-- <img v-if="imageUrl" :src="imageUrl" class="avatar" />--> +<!-- <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>--> +<!-- </el-upload>--> +<!-- </el-form-item>--> +<!-- </el-col>--> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="发现人" prop="telephone" > + <el-input + v-model="ruleForm.teamLeader" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="发现日期" prop="telephone"> + <el-date-picker + v-model="value1" + class="w100" + type="datetime" + placeholder="选择日期时间" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="填报人" prop="telephone" > + <el-input + v-model="ruleForm.teamLeader" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="填报日期" prop="telephone"> + <el-date-picker + v-model="value1" + class="w100" + type="datetime" + placeholder="选择日期时间" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="填报人部门" placeholder="请选择"> + <el-tree-select + v-model="ruleForm.responsibleDepartment" + :data="data" class="w100" + placeholder="请选择"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="现场整改" prop="teamPhone"> + <el-select v-model="ruleForm.teamLevel" class="w100" placeholder="请选择"> + <el-option label="是" value="admin"></el-option> + <el-option label="否" value="common"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="责任部门" placeholder="请选择"> + <el-tree-select + v-model="ruleForm.responsibleDepartment" + :data="data" class="w100" + placeholder="请选择"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> + <el-tab-pane label="组织整改" name="first"> + <el-row style="margin: 0"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" style="padding-left: 17.5px;padding-right: 17.5px;"> + <el-form-item label="整改意见" prop="teamLevel"> + <el-input v-model="ruleForm.name" class="textarea" type="textarea" placeholder="请填写整改意见"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" style="padding-left: 17.5px;padding-right: 17.5px;"> + <el-form-item label="整改期限" prop="telephone"> + <el-date-picker + v-model="value1" + class="w100" + type="datetime" + placeholder="选择日期时间" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" style="padding-left: 17.5px;padding-right: 17.5px;"> + <el-form-item label="填报人" prop="telephone" > + <el-input + v-model="ruleForm.teamLeader" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" style="padding-left: 17.5px;padding-right: 17.5px;"> + <el-form-item label="填报日期" prop="telephone"> + <el-date-picker + v-model="value1" + class="w100" + type="datetime" + placeholder="选择日期时间" + /> + </el-form-item> + </el-col> + </el-row> + </el-tab-pane> + </el-tabs> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" v-if="disabled == true ? false : true" type="primary" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <CheckTemplate ref="Shows"/> + <userSelections ref="userRef"/> + <RegionsDialog ref="openRef"/> + </div> +</template> + +<script lang="ts"> +import { + reactive, + ref, + defineComponent +} from 'vue'; +import { + ElMessage +} +from 'element-plus' +import type { + TabsPaneContext, + FormInstance, + UploadProps, +} from 'element-plus' +import { + Search, + Plus, + FullScreen +} from '@element-plus/icons-vue' +import UserSelections from "/@/components/userSelections/index.vue" +import CheckTemplate from '/@/components/checkTemplate/index.vue' +import RegionsDialog from '/@/components/regionsDialog/index.vue' +import {releaseDrillPlanApi} from "/@/api/contingencyManagement/emergencyDrillPlan"; +import {emergencyDrillEvaluationApi} from "/@/api/contingencyManagement/emergencyDrillEvaluation"; + +export default defineComponent({ + name: 'rectificationDialog', + components: { + CheckTemplate, + UserSelections, + RegionsDialog, + }, + setup(props, { emit }) { + const isShowDialog = ref(false) + + const ruleFormRef = ref<FormInstance>() + //定义表单 + const ruleForm = reactive({ + id: '', + drillPlanId: '', + suitable: '', + sufficient: '', + arrival: '', + supplies: '', + protection: '', + whole: '', + division: '', + effect: '', + report: '', + safety: '', + rescue: '', + evacuate: '', + needModify: '', + questionAndImprove: '', + modifyContent: '', + fileList: [ + { + fileName: 'name', + fileUrl: 'url', + } + ], + userList: [ + { + userUid: '' + }, + { + userUid: '' + } + ] + }); + const titles = ref(); + const disabled = ref(); + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + // if (title == '查看演练实施评价' || title == '修改演练实施评价') { + // releaseDrillPlanApi() + // .seeReleaseDrillPlan(id) + // .then((res) => { + // if (res.data.code == 200) { + // ruleForm.value = res.data.data; + // } + // }); + // } + }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + // 取消 + const onCancel = () => { + closeDialog(); + }; + //日期选择器 + const value1 = ref('') + // 可选择树 + const treeSelect = ref() + const tree = [ + { + value: '1', + label: 'Level one 1', + children: [ + { + value: '11', + label: 'Level two 1-1', + children: [ + { + value: '111', + label: 'Level three 1-1-1', + }, + ], + }, + ], + }, + { + value: '2', + label: 'Level one 2', + children: [ + { + value: '21', + label: 'Level two 2-1', + children: [ + { + value: '211', + label: 'Level three 2-1-1', + }, + ], + }, + { + value: '22', + label: 'Level two 2-2', + children: [ + { + value: '221', + label: 'Level three 2-2-1', + }, + ], + }, + ], + }, + { + value: '3', + label: 'Level one 3', + children: [ + { + value: '31', + label: 'Level two 3-1', + children: [ + { + value: '311', + label: 'Level three 3-1-1', + }, + ], + }, + { + value: '32', + label: 'Level two 3-2', + children: [ + { + value: '321', + label: 'Level three 3-2-1', + }, + ], + }, + ], + }, + ] + //定义树形下拉框 + const responsibleDepartment = ref() + const data = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '11', + label: '经营班子', + children: [], + }, + ], + }, + { + value: '2', + label: '生产运行部', + children: [ + { + value: '21', + label: '灌装一班', + children: [] + }, + { + value: '22', + label: '工艺四班', + children: [], + }, + ], + }, + { + value: '3', + label: '设备部', + children: [ + { + value: '31', + label: '仪表班', + children: [], + }, + { + value: '32', + label: '机修班', + children: [], + }, + ], + }, + ] + // 必填项提示 + // const rules = reactive<FormRules>({ + // teamName: [ + // { + // required: true, + // message: '队伍名称不能为空', + // trigger: 'change', + // }, + // ], + // teamLevel: [ + // { + // required: true, + // message: '队伍级别不能为空', + // trigger: 'change', + // }, + // ], + // teamLeader: [ + // { + // required: true, + // message: '队伍负责人不能为空', + // trigger: 'change', + // }, + // ], + // responsibleDepartment: [ + // { + // required: true, + // message: '负责人部门不能为空', + // trigger: 'change', + // }, + // ], + // teamPhone: [ + // { + // required: true, + // message: '负责人手机不能为空', + // trigger: 'change', + // }, + // ], + // telephone: [ + // { + // required: true, + // message: '固定电话不能为空', + // trigger: 'change', + // }, + // ], + // }) + // 应急队伍弹窗 + // 表单提交验证必填项 + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '查看演练实施评价') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyDrillEvaluationApi() + .addEmergencyDrillEvaluation(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } + else if (title == '修改演练实施评价') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyDrillEvaluationApi() + .editEmergencyDrillEvaluation(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + id: '', + drillPlanId: '', + suitable: '', + sufficient: '', + arrival: '', + supplies: '', + protection: '', + whole: '', + division: '', + effect: '', + report: '', + safety: '', + rescue: '', + evacuate: '', + needModify: '', + questionAndImprove: '', + modifyContent: '', + fileList: [ + { + fileName: 'name', + fileUrl: 'url', + } + ], + userList: [ + { + userUid: '' + }, + { + userUid: '' + } + ] + }; + } + } + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + const Shows=ref() + const daiInpt=()=>{ + Shows.value.openDailog() + } + // 选择区域弹窗 + const openRef=ref() + const regionsDialog=()=>{ + openRef.value.openDailog() + } + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + const activeName = ref('first') + + const handleClick = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event) + } + // 上传图片 + const imageUrl = ref('') + + const handleAvatarSuccess: UploadProps['onSuccess'] = ( + response, + uploadFile + ) => { + imageUrl.value = URL.createObjectURL(uploadFile.raw!) + } + + const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => { + if (rawFile.type !== 'image/jpeg') { + ElMessage.error('Avatar picture must be JPG format!') + return false + } else if (rawFile.size / 1024 / 1024 > 2) { + ElMessage.error('Avatar picture size can not exceed 2MB!') + return false + } + return true + } + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + onCancel, + responsibleDepartment, + data, + Search, + ruleForm, + value1, + treeSelect, + tree, + daiInpt, + Shows, + ruleFormRef, + // rules, + openUser, + userRef, + regionsDialog, + openRef, + activeName, + handleClick, + handleAvatarSuccess, + beforeAvatarUpload, + Plus, + toggleFullscreen, + FullScreen, + full, + submitForm, + emit, + titles, + disabled, + resetForm, + }; + }, +}); +</script> +<style scoped lang="scss"> +.el-form .el-form-item{ + margin-bottom: 18px !important; +} +::v-deep .el-form-item--default .el-form-item__label{ + text-align: right; + height: 100%; +} +.textarea{ + height: 50px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 50px!important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal{ + height: 0; + margin: 0; + border-top: transparent; +} +.el-select{ + width: 100%; +} +.el-divider--horizontal { + display: block; + height: 1px; + width: 100%; + margin: 24px 0; + background-color: #dcdfe6; + position: relative; +} +.el-divider__text { + position: absolute; + background-color: #fff; + padding: 0 20px; + color: #303133; + left: 50%; + font-weight: 500; + font-size: 14px; +} +////上传图片 +//.avatar-uploader .avatar { +// width: 178px; +// height: 178px; +// display: block; +//} + +</style> + +<!--<style scoped>--> +<!--.avatar-uploader .avatar {--> +<!-- width: 178px;--> +<!-- height: 178px;--> +<!-- display: block;--> +<!--}--> +<!--</style>--> +<!--<style>--> +<!--.avatar-uploader .el-upload {--> +<!-- border: 1px dashed var(--el-border-color);--> +<!-- border-radius: 6px;--> +<!-- cursor: pointer;--> +<!-- position: relative;--> +<!-- overflow: hidden;--> +<!-- transition: var(--el-transition-duration-fast);--> +<!--}--> + +<!--.avatar-uploader .el-upload:hover {--> +<!-- border-color: var(--el-color-primary);--> +<!--}--> + +<!--.el-icon.avatar-uploader-icon {--> +<!-- font-size: 28px;--> +<!-- color: #8c939d;--> +<!-- width: 178px;--> +<!-- height: 178px;--> +<!-- text-align: center;--> +<!--}--> +<!--</style>--> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/index.vue b/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/index.vue new file mode 100644 index 0000000..bba7134 --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/drillImplementationEvaluation/index.vue @@ -0,0 +1,502 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> + <el-tab-pane label="待评价" name="first"> + <div class="button_Line mb15"> + <div class="button_Left"> + <!--<el-button size="default" type="danger" plain :disabled="danger" @click="onDeleteAll">--> + <!--<el-icon>--> + <!--<Delete />--> + <!--</el-icon>删除--> + <!--</el-button>--> + </div> +<!-- <div class="button_Right">--> +<!-- <el-button @click="upButton">--> +<!-- <el-icon>--> +<!-- <Upload />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button>--> +<!-- <el-icon>--> +<!-- <Download />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button>--> +<!-- <el-icon>--> +<!-- <Refresh />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- </div>--> + </div> + <el-table + :data="tableData" + style="width: 100%" + ref="multipleTableRef" + @selection-change="handleSelectionChange" + > + <el-table-column + type="selection" + width="55" + /> + <el-table-column prop="drillName" label="演练名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillAddress" label="演练地点" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillWay" label="演练方式" show-overflow-tooltip sortable> + <template #default="scope"> + <div v-if="scope.row.drillWay=='0'">综合</div> + <div v-if="scope.row.drillWay=='1'">桌面</div> + <div v-if="scope.row.drillWay=='2'">专项</div> + </template> + </el-table-column> + <el-table-column prop="drillLevel" label="演练级别" show-overflow-tooltip sortable> + <template #default="scope"> + <div v-if="scope.row.drillLevel=='1'">公司级</div> + <div v-if="scope.row.drillLevel=='2'">分厂级</div> + <div v-if="scope.row.drillLevel=='3'">车间级</div> + </template> + </el-table-column> + <el-table-column prop="drillPlanDate" label="计划演练日期" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillRecordDate" label="演练记录日期" show-overflow-tooltip sortable></el-table-column> +<!-- <el-table-column prop="attachments" label="应急预案" show-overflow-tooltip sortable></el-table-column>--> + <el-table-column label="操作" width="260" align="center" fixed="right"> + <template #default="scope"> + <!--<el-button size="small" text disabled>--> + <!--<el-icon style="margin-right: 5px;">--> + <!--<EditPen />--> + <!--</el-icon>评价--> + <!--</el-button>--> +<!-- <el-button size="small" text type="primary" @click="onFlowChart(scope.row.id)">--> +<!-- 审批进度--> +<!-- </el-button>--> + <!--<el-button size="small" text type="primary" @click="onApprovalProgress('详情',scope.row.id)">--> + <!--<el-icon style="margin-right: 5px;">--> + <!--<EditPen />--> + <!--</el-icon>查看评价--> + <!--</el-button>--> + + <el-button size="small" text type="primary" @click="onApprovalProgress('评价',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <EditPen /> + </el-icon>评价 + </el-button> + + <!--<el-button size="small" text type="primary" @click="onEdit('修改',scope.row.id)">--> + <!--<el-icon style="margin-right: 5px;">--> + <!--<EditPen />--> + <!--</el-icon>整改--> + <!--</el-button>--> + <!--<el-button size="small" text disabled @click="onOpenEdit(scope.row)">--> + <!--查看整改--> + <!--</el-button>--> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-tab-pane> + <el-tab-pane label="已评价" name="second"> + <div class="button_Line mb15"> + <div class="button_Left"> + <el-button size="default" type="danger" plain :disabled="danger" @click="onDeleteAll"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </div> + <!-- <div class="button_Right">--> + <!-- <el-button @click="upButton">--> + <!-- <el-icon>--> + <!-- <Upload />--> + <!-- </el-icon>--> + <!-- </el-button>--> + <!-- <el-button>--> + <!-- <el-icon>--> + <!-- <Download />--> + <!-- </el-icon>--> + <!-- </el-button>--> + <!-- <el-button>--> + <!-- <el-icon>--> + <!-- <Refresh />--> + <!-- </el-icon>--> + <!-- </el-button>--> + <!-- </div>--> + </div> + <el-table + :data="tableData" + style="width: 100%" + ref="multipleTableRef" + @selection-change="handleSelectionChange" + > + <el-table-column + type="selection" + width="55" + /> + <el-table-column prop="drillName" label="演练名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillAddress" label="演练地点" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillWay" label="演练方式" show-overflow-tooltip sortable> + <template #default="scope"> + <div v-if="scope.row.drillWay=='0'">综合</div> + <div v-if="scope.row.drillWay=='1'">桌面</div> + <div v-if="scope.row.drillWay=='2'">专项</div> + </template> + </el-table-column> + <el-table-column prop="drillLevel" label="演练级别" show-overflow-tooltip sortable> + <template #default="scope"> + <div v-if="scope.row.drillLevel=='1'">公司级</div> + <div v-if="scope.row.drillLevel=='2'">分厂级</div> + <div v-if="scope.row.drillLevel=='3'">车间级</div> + </template> + </el-table-column> + <el-table-column prop="drillPlanDate" label="计划演练日期" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillRecordDate" label="演练记录日期" show-overflow-tooltip sortable></el-table-column> + <!-- <el-table-column prop="attachments" label="应急预案" show-overflow-tooltip sortable></el-table-column>--> + <el-table-column label="操作" width="260" align="center" fixed="right"> + <template #default="scope"> + <!--<el-button size="small" text disabled>--> + <!--<el-icon style="margin-right: 5px;">--> + <!--<EditPen />--> + <!--</el-icon>评价--> + <!--</el-button>--> + <!-- <el-button size="small" text type="primary" @click="onFlowChart(scope.row.id)">--> + <!-- 审批进度--> + <!-- </el-button>--> + <el-button size="small" text type="primary" @click="onApprovalProgress('查看评价',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <EditPen /> + </el-icon>查看评价 + </el-button> + <!--<el-button size="small" text type="primary" @click="onEdit('修改',scope.row.id)">--> + <!--<el-icon style="margin-right: 5px;">--> + <!--<EditPen />--> + <!--</el-icon>整改--> + <!--</el-button>--> + <!--<el-button size="small" text disabled @click="onOpenEdit(scope.row)">--> + <!--查看整改--> + <!--</el-button>--> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-tab-pane> + </el-tabs> + </el-card> + <ApprovalProgress ref="approvalRef" @myAdd="onMyAdd" /> +<!-- <FlowChart ref="flowRef" />--> + <RectificationDialog ref="rectificationRef" @myAdd="onMyAdds" /> +<!-- <upData ref="upShow"></upData>--> + </div> +</template> + +<script lang="ts"> +import { + // toRefs, + reactive, + onMounted, + ref, + defineComponent +} from 'vue'; +import { + ElMessage, + ElMessageBox, + TabsPaneContext, +} from 'element-plus'; +import { + Plus, + // Upload, + // Download, + // Refresh, + Delete, + EditPen, +} from '@element-plus/icons-vue' +// import FlowChart from '/@/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue' +import ApprovalProgress from '/@/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/approvalProgress.vue'; +// import UpData from '/@/views/contingencyManagement/panManagement/component/upData.vue'; +import RectificationDialog from '/@/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/rectificationDialog.vue'; +import {emergencyDrillEvaluationApi} from '/@/api/contingencyManagement/emergencyDrillEvaluation' +import {emergencyDrillExecuteApi} from "/@/api/contingencyManagement/emergencyDrillExecute"; + + +// 定义接口来定义对象的类型 +// interface TableDataRow { +// } +export default defineComponent({ + name: 'systemUser', + components: { + EditPen, + Plus, + // Upload, + // Download, + // Refresh, + // UpData, + Delete, + ApprovalProgress, + RectificationDialog, + // FlowChart + }, + setup() { + const activeName = ref('first') + const handleClick = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event) + if(tab.props.name=='first'){ + listQuery.searchParams.status=false + listApi() + }else if(tab.props.name=='second'){ + listQuery.searchParams.status=true + listApi() + } + } + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + status:false + }, + }); + // 定义表格数据 + const tableData = ref([]); + + // 列表数据请求 + const listApi = async () => { + // let res = await emergencyDrillEvaluationApi().getEmergencyDrillEvaluationList(listQuery); + let res = await emergencyDrillExecuteApi().getEmergencyDrillExecuteList(listQuery); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }; + + // 上传 + // const upShow=ref() + // const upButton=()=>{ + // upShow.value.openDialog() + // } + + // 审批进度弹窗 + // const flowRef = ref(); + // const onFlowChart = (row: TableDataRow) => { + // flowRef.value.openDialog(row); + // }; + // 打开修改弹窗 + const rectificationRef = ref(); + const onEdit = (val: string, row: object) => { + if (val == '修改') { + rectificationRef.value.openDialog('修改演练实施评价',row,false); + } else { + // rectificationRef.value.openDialog('修改演练实施评价',row,false); + } + }; + const onMyAdds = (e: boolean) => { + if (e) { + listApi(); + } else { + listApi(); + } + }; + // 审批进度弹窗 + const approvalRef = ref(); + const onApprovalProgress = (val: string, row: object) => { + if (val == '详情') { + approvalRef.value.openDialog('查看演练实施评价', row, true); + } + if (val == '评价') { + approvalRef.value.openDialog('演练实施评价', row, false); + } + if (val == '查看评价') { + approvalRef.value.openDialog('演练实施查看评价', row, true); + } + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + listApi(); + } else { + listApi(); + } + }; + // 整改弹窗 + // const rectificationRef = ref(); + // const onEdit = () => { + // rectificationRef.value.openDialog(); + // }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + emergencyDrillEvaluationApi() + .deleteEmergencyDrillEvaluation(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + listApi(); + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + listApi(); + }; + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + // console.log(deletAll.value); + if (val.length == 1) { + danger.value = false; + } else if (val.length == 0) { + danger.value = true; + } else { + danger.value = false; + } + }; + onMounted(() => { + listApi(); + }); + return { + activeName, + handleClick, + // upButton, + // upShow, + tableData, + // onOpenEdit, //编辑 + pageIndex, + pageSize, + handleSizeChange, + handleCurrentChange, + onApprovalProgress, + approvalRef, + onEdit, + rectificationRef, + // onFlowChart, + // flowRef, + onDeleteAll, + danger, + total, + handleSelectionChange, + onMyAdd, + onMyAdds, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box{ + padding: 20px; + background-color: #fff; +} +.tableForm{ + margin-top: 10px; +} +/*按钮行*/ +.button_Line{ + display: flex; + flex-direction: row; + justify-content: space-between; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending{ + border-bottom-color: #c0c4cc; +} +//分页 +.pages{ + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled{ + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next{ + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue b/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue new file mode 100644 index 0000000..15f3892 --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue @@ -0,0 +1,627 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + :title="titles" + v-model="isShowDialog" + width="769px" + draggable + :fullscreen="full" + @close="resetForm(ruleFormRef)" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form + ref="ruleFormRef" + :model="ruleForm" + size="default" + label-width="120px" + :disabled="disabled" + > + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="演练名称" prop="drillName"> + <el-input + v-model="ruleForm.drillName" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="regionsDialog"/> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + + + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练地点" prop="drillAddress"> + <el-input :disabled="true" v-model="drillRuleForm.drillAddress" placeholder="请填写演练地点"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="主办部门" placeholder="请选择" prop="departmentId"> + <el-tree-select + :disabled="true" + v-model="drillRuleForm.departmentId" + :data="deptData" + check-strictly + class="w100" + :props="propse" + clearable + placeholder="请选择"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练方式" prop="drillWay"> + <el-select :disabled="true" v-model="drillRuleForm.drillWay" class="w100" placeholder="请选择"> + <el-option label="综合" value="0"></el-option> + <el-option label="桌面" value="1"></el-option> + <el-option label="专项" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急预案" prop="planName" > + <el-input + :disabled="true" + v-model="drillRuleForm.planName" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :disabled="true" :icon="Search" @click="daiInpt"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练级别" prop="drillLevel"> + <el-select :disabled="true" v-model="drillRuleForm.drillLevel" class="w100" placeholder="请选择"> + <el-option label="公司级" value="1"></el-option> + <el-option label="分厂级" value="2"></el-option> + <el-option label="车间级" value="3"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="计划定制日期" prop="makingPlanDate"> + <el-date-picker :disabled="true" v-model="drillRuleForm.makingPlanDate" + value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="计划演练日期" prop="drillPlanDate"> + <el-date-picker :disabled="true" v-model="drillRuleForm.drillPlanDate" + value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="修改时间" prop="gmtModitify"> + <el-date-picker :disabled="true" v-model="drillRuleForm.gmtModitify" + value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="计划定制人" prop="makingUserName"> + <el-input :disabled="true" v-model="drillRuleForm.makingUserName" placeholder="请填写计划定制人"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="制定部门" prop="makingDepartmentId"> + <el-tree-select + :disabled="true" + v-model="drillRuleForm.makingDepartmentId" + check-strictly + :data="deptData" + class="w100" + :props="propse" + clearable + placeholder="请选择"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练人员" prop="userListString" > + <el-input + :disabled="true" + v-model="drillRuleForm.userListString" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :disabled="true" :icon="Search" @click="openUser(0)"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="演练目的" prop="purpose"> + <el-input + :disabled="true" + v-model="drillRuleForm.purpose" + placeholder="请填写演练目的" + class="input-with-select textarea" + type="textarea" + > + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练负责人" prop="chargeUserListString" > + <el-input + :disabled="true" + v-model="drillRuleForm.chargeUserListString" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :disabled="true" :icon="Search" @click="openUser(1)"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="保险措施" prop="insuranceMeasures"> + <el-input :disabled="true" v-model="drillRuleForm.insuranceMeasures" placeholder="请填写保险措施"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练经费" prop="drillExpense"> + <el-input :disabled="true" v-model="drillRuleForm.drillExpense" placeholder="请填写演练经费"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="备注信息" prop="remark"> + <el-input + :disabled="true" + v-model="drillRuleForm.remark" + placeholder="请填写备注信息" + class="input-with-select textarea" + type="textarea" + > + </el-input> + </el-form-item> + </el-col> + </el-row> + + + + + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="实际到场人员" prop="autualUserListString" > + <el-input + v-model="ruleForm.autualUserListString" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="演练过程描述" prop="processDesc"> + <el-input + v-model="ruleForm.processDesc" + placeholder="请填写演练目的" + class="textarea" + type="textarea" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练记录人" prop="recordUserName" > + <el-input + v-model="ruleForm.recordUserName" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="daiInpt"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练记录时间" prop="drillRecordDate"> + <el-date-picker + class="w100" + v-model="ruleForm.drillRecordDate" + type="datetime" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" v-if="disabled == true ? false : true" type="primary" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <!--记录人--> + <DailogSearchUser ref="Shows" @SearchUser="onUser"/> + <!--到场人员--> + <DailogSearchUser ref="userRef" @SearchUser="selectDCuser"/> + <RegionsDialog ref="openRef" @SearchUser="onUsers"/> + </div> +</template> + +<script lang="ts"> +import { + // reactive, + ref, + defineComponent, + onMounted, +} from 'vue'; + +import type { + FormInstance, + // FormRules, +} from 'element-plus' +import { ElMessage } from 'element-plus'; +import { + Search, + FullScreen +} from '@element-plus/icons-vue' +import UserCheckbox from "/@/components/userCheckbox/index.vue" +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue' +import RegionsDialog from '/@/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/regionsDialog.vue' +import {emergencyDrillExecuteApi} from "/@/api/contingencyManagement/emergencyDrillExecute"; +import {releaseDrillPlanApi} from "/@/api/contingencyManagement/emergencyDrillPlan"; +import {goalManagementApi} from "/@/api/goalManagement"; + +export default defineComponent({ + name: 'openAdd', + components: { + DailogSearchUser, + UserCheckbox, + RegionsDialog, + }, + setup(props, { emit }) { + const isShowDialog = ref(false) + + const ruleFormRef = ref<FormInstance>() + //定义表单 + const ruleForm = ref ({ + drillRecordDate: '', // 演练记录时间 + drillPlanId: '', //演练计划ID + drillName:'', + recordUserUid: '', // 记录人ID + recordUserName:'', + processDesc: '', // 演练过程描述 + + autualUserListString:'', + userList: [ + { + userUid: '', + }, + { + userUid: '', + } + ] + }); + const titles = ref(); + const disabled = ref(); + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + if (title == '查看应急演练实施' || title == '修改应急演练实施') { + emergencyDrillExecuteApi() + .seeEmergencyDrillExecute(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + ruleForm.value.autualUserListString='' + for(var a = 0;a<res.data.data.userList.length;a++){ + ruleForm.value.autualUserListString += res.data.data.userList[a].userName+';' + } + + releaseDrillPlanApi() + .seeReleaseDrillPlan(res.data.data.drillPlanId) + .then((res1) => { + if (res1.data.code == 200) { + drillRuleForm.value = res1.data.data; + + drillRuleForm.value.userListString='' + drillRuleForm.value.chargeUserListString='' + for(var a = 0;a<res1.data.data.userList.length;a++){ + if(res1.data.data.userList[a].type==1){ + drillRuleForm.value.userListString += res1.data.data.userList[a].userName+';' + } + // if(res.data.data.userList[a].type==2){ + // ruleForm.value.chargeUserListString += res.data.data.userList[a].userName+';' + // } + } + // alert(res.data.data.chargeUserList.length) + for(var a = 0;a<res1.data.data.chargeUserList.length;a++){ + drillRuleForm.value.chargeUserListString += res1.data.data.chargeUserList[a].userName+';' + } + } + }) + } + }); + } + }; + const data = []; + const deptData = [] + //部门树 + // const department = () => { + // goalManagementApi() + // .getTreedepartment() + // .then((res) => { + // if (res.data.code == 200) { + // deptData.value = res.data.data; + // console.log('-------',deptData.value) + // } else { + // ElMessage.error(res.data.msg); + // } + // }); + // }; + // + // const propse = { + // label: 'depName', + // children: 'children', + // value: 'depId', + // }; + //el-tree-select回显 + const propse = { + label: 'depName', + children: 'children', + }; + //得到部门树 + const department = async () => { + await goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + getTreeList(res.data.data, deptData); + console.log('deptData',deptData) + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // 递归树状数据且修改字段名 + const getTreeList = (treeList, deptData) => { + treeList.map((c) => { + let tempData = { + depName: c.depName, + value: c.depId, + children: [], + }; + if (c.children && c.children.length > 0) { + tempData.children = []; + getTreeList(c.children, tempData.children); + } + deptData.push(tempData); + }); + }; + onMounted(() => { + department(); + }); + //日期选择器 + const drillRecordDate = ref('') + // 表单提交验证必填项 + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '新建应急演练实施') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyDrillExecuteApi() + .addEmergencyDrillExecute(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } + else if (title == '修改应急演练实施') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyDrillExecuteApi() + .editEmergencyDrillExecute(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + drillRecordDate: '', // 演练记录时间 + drillPlanId: '', //演练计划ID + drillName:'', + recordUserUid: '', // 记录人ID + processDesc: '', // 演练过程描述 + userList: [ + { + userUid: '', + }, + { + userUid: '', + } + ] + }; + } + } + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + drillRuleForm.value={} + formEl.resetFields(); + }; + + // 演练名称弹窗 + const openRef=ref() + const regionsDialog = () => { + openRef.value.openDailog() + } + //定义表单 + const drillRuleForm = ref ({}) + const onUsers = (e:any) => { + console.log(e) + releaseDrillPlanApi() + .seeReleaseDrillPlan(e.id) + .then((res) => { + if (res.data.code == 200) { + drillRuleForm.value = res.data.data; + + drillRuleForm.value.userListString='' + drillRuleForm.value.chargeUserListString='' + for(var a = 0;a<res.data.data.userList.length;a++){ + if(res.data.data.userList[a].type==1){ + drillRuleForm.value.userListString += res.data.data.userList[a].userName+';' + } + // if(res.data.data.userList[a].type==2){ + // ruleForm.value.chargeUserListString += res.data.data.userList[a].userName+';' + // } + } + // alert(res.data.data.chargeUserList.length) + for(var a = 0;a<res.data.data.chargeUserList.length;a++){ + drillRuleForm.value.chargeUserListString += res.data.data.chargeUserList[a].userName+';' + } + } + }) + ruleForm.value.drillPlanId=e.id + ruleForm.value.drillName=e.drillName + }; + // 实际到场人员弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(0); + }; + const selectDCuser = (e) => { + ruleForm.value.autualUserListString='' + ruleForm.value.userList=[] + for(var a = 0;a<e.length;a++){ + ruleForm.value.userList.push( + { + userName: e[a].realName, + userUid: e[a].uid, + } + ) + ruleForm.value.autualUserListString+=e[a].realName+';' + } + } + // 演练记录人弹窗 + const Shows=ref() + const daiInpt=()=>{ + Shows.value.openDailog() + } + const onUser = (e:any) => { + ruleForm.value.recordUserUid=e.uid + ruleForm.value.recordUserName=e.realName + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + isShowDialog, + Search, + ruleForm, + drillRecordDate, + daiInpt, + Shows, + ruleFormRef, + submitForm, + // rules, + openUser, + userRef, + regionsDialog, + onUsers, + onUser, + openRef, + toggleFullscreen, + FullScreen, + full, + resetForm, + titles, + disabled, + emit, + selectDCuser, + drillRuleForm, + deptData, + propse, + data, + department + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea{ + height: 168px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 168px!important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal{ + height: 0; + margin: 0; + border-top: transparent; +} +.el-select{ + width: 100%; +} +.textarea{ + height: 90px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 90px!important; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/regionsDialog.vue b/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/regionsDialog.vue new file mode 100644 index 0000000..a6cdd4e --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/regionsDialog.vue @@ -0,0 +1,221 @@ +<template> + <el-dialog v-model="dialogVisible" title="选择演练计划" width="900px" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row> + <el-col :span="18"> + <el-row> + <el-col :span="24"> + <el-form ref="ruleFormRef" :inline="true" :model="ruleForm" status-icon> + <el-form-item> + <el-input size="default" v-model="listQuery.searchParams.drillName" placeholder="演练名称" style="max-width: 215px;margin-right: 12px;" /> + </el-form-item> + <el-form-item> + <el-button size="default" type="primary" @click="onSubmit">查询</el-button> + <el-button size="default" @click="submitReset">重置</el-button> + </el-form-item> + </el-form> + </el-col> + <el-col :span="24"> + <el-button size="default" :icon="Delete" style="margin-top: 15px">清除选择</el-button> + </el-col> + </el-row> + <el-table + :data="tableData" + style="width: 100%; + margin-top: 20px" + @cell-click="radio" + > + <el-table-column width="55"> + <template #default="scope"> + <el-radio-group v-model="radio1"> + <el-radio :label="scope.row" size="large">{{ null }}</el-radio> + </el-radio-group> + </template> + </el-table-column> + <el-table-column align="center" prop="drillName" label="演练名称" /> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + /> + </div> + </el-col> + <el-col :span="6"> + <div v-if="dynamicTags[0] == '' ? false : true"> + <el-tag + v-for="tag in dynamicTags" + :key="tag" + class="mx-1" + style="margin: 5px" + closable + :disable-transitions="false" + @close="handleClose(tag)" + > + {{ tag.drillName }} + </el-tag> + </div> + </el-col> + </el-row> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogVisible = false" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref, onMounted } from 'vue'; +import { ElMessage } from 'element-plus'; +import { Delete, FullScreen } from '@element-plus/icons-vue'; +import { emergencyPlanLogApi } from '/@/api/contingencyManagement/emergencyPlanLog'; +import { emergencyPlanApi } from '/@/api/contingencyManagement/emergencyPlan'; +import {releaseDrillPlanApi} from "/@/api/contingencyManagement/emergencyDrillPlan"; +export default defineComponent({ + setup(props, { emit }) { + const dialogVisible = ref<boolean>(false); + const openDailog = () => { + dialogVisible.value = true; + onSubmit() + }; + // 搜索条件 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + drillName: '' + }, + }); + // 列表请求数据 + const onSubmit = async () => { + let res = await releaseDrillPlanApi().getReleaseDrillPlanList(listQuery); + if (res.data.code === '200') { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + type: 'error', + message: res.data.msg, + }); + } + }; + // 定义表格数据 + const tableData = ref([]); + // 重置 + const submitReset = () => { + listQuery.searchParams.drillName = ''; + onSubmit(); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const onHandleSizeChange = (val: number) => { + listQuery.pageSize = val; + }; + // 分页未改变 + const onHandleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + }; + // 右方点击添加后显示标签 + const dynamicTags = ref(['']); + const handleClose = (tag: string) => { + dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1); + radio1.value = ''; + }; + const radio1 = ref(''); + const radio = (event: any) => { + dynamicTags.value[0] = event; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + + const submitForm = () => { + let obj = JSON.parse(JSON.stringify(dynamicTags.value)); + emit('SearchUser', obj[0]); + dialogVisible.value = false; + }; + onMounted(() => { + onSubmit(); + }); + return { + dialogVisible, + openDailog, + tableData, + pageSize, + pageIndex, + onHandleSizeChange, + onHandleCurrentChange, + dynamicTags, + handleClose, + Delete, + radio1, + radio, + toggleFullscreen, + FullScreen, + full, + submitReset, + onMounted, + listQuery, + submitForm, + onSubmit, + total, + }; + }, +}); +</script> +<style scoped> +.el-form--inline .el-form-item { + margin-bottom: 0; + margin-right: 0; +} +/*分页*/ +.pages { + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> diff --git a/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/userSelect.vue b/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/userSelect.vue new file mode 100644 index 0000000..c3a4156 --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/userSelect.vue @@ -0,0 +1,443 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + title="用户选择" + v-model="isShowDialog" + width="1000px" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-container class="layout-container-demo" style="height: 500px;overflow: auto;min-width: 960px"> + <el-aside width="200px"> + <el-input v-model="filterText" placeholder="请输入组织机构过滤" /> + <el-tree + ref="treeRef" + class="filter-tree" + :data="data" + :props="defaultProps" + default-expand-all + :filter-node-method="filterNode" + /> + </el-aside> + <el-container style="margin: 0 15px;min-width:560px;"> + <el-header style="font-size: 12px"> + <el-form :inline="true" :model="formInline" class="demo-form-inline"> + <el-form-item> + <el-input size="default" v-model="formInline.name" placeholder="登录名"> </el-input> + </el-form-item> + <el-form-item> + <el-button size="default" type="primary" class="ml10" @click="onSubmit"> + 查询 + </el-button> + <el-button size="default" class="ml10" @click="submitReset"> + 重置 + </el-button> + </el-form-item> + </el-form> + </el-header> + <el-main style="position: relative;"> + <el-table + :data="tableData" + :header-cell-style="{background:'#f6f7fa',color:'#909399',fontWeight:400}" + > + <el-table-column align="center" width="55"> + <template #default="scope"> + <el-radio-group v-model="radio1" @change="radio"> + <el-radio :label="scope.row.date" size="large">{{null}}</el-radio> + </el-radio-group> + </template> + </el-table-column> + <el-table-column prop="date" label="登录名" width="100" show-overflow-tooltip sortable /> + <el-table-column prop="name" label="用户名" width="100" show-overflow-tooltip sortable /> + <el-table-column prop="address" label="所属机构" width="115" show-overflow-tooltip sortable /> + <el-table-column prop="department" label="所属部门" width="115" show-overflow-tooltip sortable/> + <el-table-column label="状态" + width="80" + prop="tag" + :filters="[ + { text: '正常', value: 'Home' }, + { text: '不正常', value: 'Office' }, + ]" + :filter-method="filterTag" + filter-placement="bottom-end"> + <template #default="scope"> + <el-tag + :type="scope.row.tag === 'Home' ? '' : 'success'" + disable-transitions + >{{ scope.row.tag }}</el-tag + > + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + :small="small" + :disabled="disabled" + :background="background" + layout="total, sizes, prev, pager, next, jumper" + :total="40" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-main> + </el-container> + <div style="width: 200px;"> + <el-tag + v-for="tag in dynamicTags" + :key="tag" + class="mx-1" + style="margin: 5px" + closable + :disable-transitions="false" + @close="handleClose(tag)" + > + {{ tag }} + </el-tag> + </div> + </el-container> + <template #footer> + <span class="dialog-footer"> + <el-button size="default" type="primary" @click="onCancel">确定</el-button> + <el-button size="default" @click="onCancel">关闭</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { + ref, + defineComponent, + watch, + reactive, +} from 'vue'; + +import type { + ElTree, + // ElTable, +} from 'element-plus' +import { + FullScreen +} from '@element-plus/icons-vue' +interface Tree { + id: number + label: string + children?: Tree[] +} +// interface User { +// date: string +// name: string +// address: string +// } +export default defineComponent({ + name: 'userSelections', + components: { + // Search, + }, + setup() { + const isShowDialog = ref(false) + // 打开弹窗 + const openDialog = () => { + isShowDialog.value = true; + }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + // 取消 + const onCancel = () => { + closeDialog(); + }; + + + const filterText = ref('') + const treeRef = ref<InstanceType<typeof ElTree>>() //实例化 + + const defaultProps = { + children: 'children', + label: 'label', + } + + // 监听搜索关键字改变 + watch(filterText, (val) => { + treeRef.value!.filter(val) + }) + + // 节点过滤模糊搜索 + const filterNode = (value: string, data: Tree) => { + if (!value) return true + return data.label.includes(value) + } + + // 树形结构内容 + const data: Tree[] = [ + { + id: 1, + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + id: 4, + label: '经营班子', + children: [] + }, + ], + }, + { + id: 2, + label: '生产运行部', + children: [ + { + id: 5, + label: '工艺二班', + }, + { + id: 6, + label: '灌装一班', + }, + ], + }, + { + id: 3, + label: '设备部', + children: [ + { + id: 7, + label: '仪表班', + }, + { + id: 8, + label: '机修班', + }, + ], + }, + ] + // const item = { + // date: '孙刚', + // name: '龚赛健', + // address: '综合办公室', + // tag: '正常', + // } + // const tableData = ref(Array.from({ length: 7 }).fill(item)) + const tableData = [ + { + date: '孙刚', + name: '孙刚', + address: '', + department: '经营班子', + tag: '正常', + }, + { + date: '谭柏', + name: '谭柏', + address: '', + department: '经营班子', + tag: '正常', + }, + { + date: '倪威', + name: '倪威', + address: '', + department: '经营班子', + tag: '正常', + }, + { + date: '倪玲婕', + name: '倪玲婕', + address: '', + department: '经营班子', + tag: '正常', + }, + ]; + // 定义表单搜索 + const formInline = reactive({ + name: '', + }) + // 搜索按钮 + const onSubmit = () => { + console.log('submit!') + } + + // const multipleTableRef = ref<InstanceType<typeof ElTable>>() + // 右方点击添加后显示标签 + const dynamicTags = ref(['胡海涛']); + const handleClose = (tag: string) => { + dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1); + radio1.value="" + }; + const radio1=ref('谭柏') + const radio=(event:any)=>{ + dynamicTags.value[0]=event + } + + // 分页 + const pageIndex = ref(4); + const pageSize = ref(10); + // 分页改变 + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`); + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + onCancel, + defaultProps, + filterNode, + data, + tableData, + formInline, + onSubmit, + // multipleTableRef, + handleClose, + dynamicTags, + handleSizeChange, + handleCurrentChange, + pageIndex, + pageSize, + radio1, + radio, + toggleFullscreen, + FullScreen, + full, + }; + }, +}); +</script> +<style scoped lang="scss"> +.layout-container-demo .el-header { + position: relative; + color: var(--el-text-color-primary); + line-height: 32px; + --el-header-height: 45px; + padding: 0; +} +.layout-container-demo .el-aside { + padding: 10px; + border: 1px solid #ebeef5; + color: var(--el-text-color-primary); +} +::v-deep .el-input--large .el-input__inner { + height: 32px!important; + line-height: 32px!important; +} +.layout-container-demo .el-menu { + border-right: none; +} +.layout-container-demo .el-main { + padding: 0; +} +.layout-container-demo .toolbar { + display: inline-flex; + align-items: center; + justify-content: center; + height: 100%; + right: 20px; +} +.el-input--large{ + //width: 178px; + height: 32px; +} +.el-tree{ + overflow: auto; +} +::-webkit-scrollbar { + height: 1px; + +} +::-webkit-scrollbar-thumb { + background-color: transparent; +} +// 鼠标悬浮样式 +:hover::-webkit-scrollbar-thumb { + border-radius: 15px; + background-color: #d8d9db; +} +::v-deep .el-input__wrapper{ + width: 215px; +} +::v-deep .el-form-item{ + margin-bottom: 0; + margin-right: 0; +} +//弹窗底部边框线 +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +//弹窗顶部边框线 +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +//单选框圆形 +::v-deep .el-table__header .el-table-column--selection .cell .el-checkbox { + display:none +} +::v-deep .el-table-column--selection .cell{ + text-align: center; +} +::v-deep .el-checkbox__input .el-checkbox__inner{ + border-radius: 50%; +} +/*分页*/ +.pages{ + display: flex; + justify-content: flex-end; + margin-top: 15px; + align-items: center; + //position: absolute; + //bottom: 0; +} +::v-deep .el-pagination{ + width: 100%; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled{ + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next{ + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/index.vue b/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/index.vue new file mode 100644 index 0000000..767809d --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/index.vue @@ -0,0 +1,375 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="button_Line mb15"> + <div class="button_Left"> + <el-button size="default" type="primary" @click="onOpenAdd"> + <el-icon> + <Plus /> + </el-icon>新建 + </el-button> + <el-button size="default" type="danger" plain :disabled="danger" @click="onDeleteAll"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </div> + <div class="button_Right"> +<!-- <el-button @click="upButton">--> +<!-- <el-icon>--> +<!-- <Upload />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button>--> +<!-- <el-icon>--> +<!-- <Download />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button>--> +<!-- <el-icon>--> +<!-- <Refresh />--> +<!-- </el-icon>--> +<!-- </el-button>--> + </div> + </div> + <el-table + :data="tableData" + style="width: 100%" + ref="" + @selection-change="handleSelectionChange" + > + <el-table-column + type="selection" + width="55" + /> + <el-table-column prop="drillName" label="演练名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillAddress" label="演练地点" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillWay" label="演练方式" show-overflow-tooltip sortable> + <template #default="scope"> + <div v-if="scope.row.drillWay=='0'">综合</div> + <div v-if="scope.row.drillWay=='1'">桌面</div> + <div v-if="scope.row.drillWay=='2'">专项</div> + </template> + </el-table-column> + <el-table-column prop="drillLevel" label="演练级别" show-overflow-tooltip sortable> + <template #default="scope"> + <div v-if="scope.row.drillLevel=='1'">公司级</div> + <div v-if="scope.row.drillLevel=='2'">分厂级</div> + <div v-if="scope.row.drillLevel=='3'">车间级</div> + </template> + </el-table-column> + <el-table-column prop="drillPlanDate" label="计划演练日期" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillRecordDate" label="演练记录时间" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="emergencyPlanName" label="应急预案" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="260" align="center" fixed="right"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onEdit('详情',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <View /> + </el-icon>查看 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('修改',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <EditPen /> + </el-icon>修改 + </el-button> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + background + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-card> + <OpenAdd ref="addRef" @myAdd="onMyAdd"/> +<!-- <upData ref="upShow"></upData>--> + </div> +</template> + +<script lang="ts"> +import { + // toRefs, + reactive, + onMounted, + ref, + defineComponent +} from 'vue'; +import { + ElMessageBox, + ElMessage, + // ElTable, +} from 'element-plus'; +import { Plus, + // Edit, + Delete, + // Upload, + // Download, + View, + Refresh, + VideoPause, + EditPen, +} from '@element-plus/icons-vue' +import OpenAdd from '/@/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue'; +import UpData from '/@/views/contingencyManagement/panManagement/component/upData.vue'; +import {emergencyDrillExecuteApi} from "/@/api/contingencyManagement/emergencyDrillExecute"; + +export default defineComponent({ + name: 'systemUser', + components: { + OpenAdd, + EditPen, + Plus, + // Edit, + Delete, + View, + // Upload, + // Download, + Refresh, + VideoPause, + UpData + }, + setup() { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + }, + }); + // 定义表格数据 + const tableData = ref([]); + // 列表数据请求 + const listApi = async () => { + let res = await emergencyDrillExecuteApi().getEmergencyDrillExecuteList(listQuery); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }; + + // 上传 + // const upShow=ref() + // const upButton=()=>{ + // upShow.value.openDialog() + // } + // 打开新增用户弹窗 + const addRef = ref(); + const onOpenAdd = () => { + addRef.value.openDialog('新建应急演练实施',false); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + listApi(); + } else { + listApi(); + } + }; + // 打开修改用户弹窗 + const onEdit = (val: string, row: object) => { + if (val == '详情') { + addRef.value.openDialog('查看应急演练实施',row,true); + } else { + addRef.value.openDialog('修改应急演练实施',row,false); + } + }; + // 删除用户 + const onRowDel = (id: number) => { + let arr = []; + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', '提示',{ + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + emergencyDrillExecuteApi() + .deleteEmergencyDrillExecute(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + if (val.length == 1) { + danger.value = false; + } else if (val.length == 0) { + danger.value = true; + } else { + danger.value = false; + } + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + emergencyDrillExecuteApi() + .deleteEmergencyDrillExecute(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + listApi(); + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + listApi(); + }; + + onMounted(() => { + listApi(); + }); + return { + // upButton, + // upShow, + tableData, + onOpenAdd, //新增 + addRef, + onRowDel, + pageIndex, + pageSize, + handleSizeChange, + handleCurrentChange, + onMyAdd, + total, + onDeleteAll, + handleSelectionChange, + danger, + deletAll, + onEdit, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box{ + padding: 20px; + background-color: #fff; +} +.tableForm{ + margin-top: 10px; +} +/*按钮行*/ +.button_Line{ + display: flex; + flex-direction: row; + justify-content: space-between; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending{ + border-bottom-color: #c0c4cc; +} +//分页开始 +.pages{ + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled{ + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next{ + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +//分页结束 +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue b/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue new file mode 100644 index 0000000..5dad014 --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue @@ -0,0 +1,325 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + title="应急演练计划--修改审批进度" + v-model="isShowDialog" + width="769px" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <!-- <img class="process-status-img" src="src/assets/icon.png"> --> + <el-tabs type="border-card"> + <el-tab-pane label="流转记录"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流转记录</span> + </div> + </template> + <div> + <el-steps :active="2"> + <el-step title="开始" description="胡海涛,2022-07-09 20:41:50" /> + <el-step title="一级审批" description="管理员,2022-07-09 20:41:50" /> + </el-steps> + </div> + <el-table :data="tableData" stripe style="width: 100%"> + <el-table-column prop="date" label="执行环节" width="120" /> + <el-table-column prop="name" label="执行人" width="120" /> + <el-table-column prop="address" label="开始时间" width="100" /> + <el-table-column prop="address" label="结束时间" width="100" /> + <el-table-column prop="address" label="办理状态" width="100" /> + <el-table-column prop="address" label="审批意见" width="100" /> + <el-table-column prop="address" label="任务历时" width="100" /> + </el-table> + </el-card> + </el-tab-pane> + <el-tab-pane label="流程信息"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流程信息</span> + </div> + </template> + <div> + <el-timeline> + <el-timeline-item timestamp="2018/4/12" placement="top" color="rgb(63, 158, 255)"> + <el-card> + <h4 style="margin: 10px 0;padding-bottom: 10px;">一级审批</h4> + <el-row> + <el-col class="tip" :span="22" :offset="1"> + <div class="item"> + <span class="label">审批人:</span> + <span class="value">管理员</span> + </div> + <div class="item"> + <span class="label">办理状态:</span> + <span class="value"> +<!-- <el-tag--> +<!-- v-for="item in items"--> +<!-- :key="item.label"--> +<!-- :type="item.type"--> +<!-- class="mx-1"--> +<!-- effect="dark"--> +<!-- >--> +<!-- {{ item.label }}--> +<!-- </el-tag>--> + <p class="text">等待审核</p> + </span> + </div> + <div class="item"> + <span class="label">审批意见:</span> + <span class="value">等待审核</span> + </div> + <div class="item"> + <span class="label">开始时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">结束时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">用时:</span> + <span class="value">0秒</span> + </div> + </el-col> + </el-row> + </el-card> + </el-timeline-item> + <el-timeline-item timestamp="2018/4/3" placement="top" color="rgb(63, 158, 255)"> + <el-card> + <h4>开始</h4> + <el-row> + <el-col class="tip" :span="22" :offset="1"> + <div class="item"> + <span class="label">审批人:</span> + <span class="value">胡海涛</span> + </div> + <div class="item"> + <span class="label">办理状态:</span> + <span class="value"> + <p class="text">开始</p> + </span> + </div> + <div class="item"> + <span class="label">审批意见:</span> + <span class="value">等待审核</span> + </div> + <div class="item"> + <span class="label">开始时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">结束时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">用时:</span> + <span class="value">0秒</span> + </div> + </el-col> + </el-row> + </el-card> + </el-timeline-item> + </el-timeline> + </div> + </el-card> + </el-tab-pane> + <el-tab-pane label="流程图"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流程图</span> + </div> + </template> + <div> + </div> + </el-card> + </el-tab-pane> + </el-tabs> + </el-dialog> + <RegionsDialog ref="Shows"/> + <UserCheckbox ref="userRef"/> + </div> +</template> + +<script lang="ts"> +import { + + ref, + defineComponent +} from 'vue'; + +import type { + TagProps, +} from 'element-plus' + +import { + Search, + FullScreen +} from '@element-plus/icons-vue' +import UserCheckbox from "/@/components/userCheckbox/index.vue" +import RegionsDialog from "/@/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue" + +export default defineComponent({ + name: 'openAdd', + components: { + RegionsDialog, + UserCheckbox, + }, + setup() { + const isShowDialog = ref(false) + // 打开弹窗 + const openDialog = () => { + // state.ruleForm = row; + isShowDialog.value = true; + }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + const tableData = [ + { + date: '2016-05-03', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-02', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-04', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-01', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + ] + + type Item = { type: TagProps['type']; label: string } + + const items = ref<Array<Item>>([ + { type: '', label: '等待审核' }, + ]) + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + Search, + tableData, + items, + toggleFullscreen, + FullScreen, + full, + }; + }, +}); +</script> +<style scoped lang="scss"> +.process-status-img{ + width: 128px; + height: auto; + position: absolute; + right: 10px; + top: 60px; + z-index: 999; +} +//弹窗底部边框线 +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +//弹窗顶部边框线 +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +//tabs字体颜色 +::v-deep .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{ + color: #a9d86e!important; +} +.card-header { + display: flex; + justify-content: space-between; + align-items: center; +} +//.box-card { +// width: 480px; +//} +//步骤条字体大小 +::v-deep .el-step__icon-inner{ + font-size: 14px!important; +} +//步骤条颜色 +::v-deep .el-step__line{ + background-color: #409eff; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending{ + border-bottom-color: #c0c4cc; +} + +.tip { + padding: 8px 16px; + background-color: #ecf8ff; + border-radius: 4px; + border-left: 5px solid #50bfff; + margin: 20px 0; +} +.item{ + height: 32px; + line-height: 32px; + margin-bottom: 8px; +} +.item .label { + display: inline-block; + height: 100%; + width: 70px; + font-size: 14px; + color: #5e6d82; + text-align: end; + vertical-align: top; +} +.item .value { + padding-left: 10px; + font-size: 14px; + max-width: calc(100% - 90px); + color: #5e6d82; + display: inline-block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.text{ + background-color: #409eff; + color: #fff; + border-width: 1px; + border-style: solid; + border-radius: 4px; + height: 24px; + padding: 0 8px; + line-height: 22px; + display: inline-block; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue b/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue new file mode 100644 index 0000000..a1a8412 --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue @@ -0,0 +1,571 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + :title="titles" + v-model="isShowDialog" + width="769px" + draggable + :fullscreen="full" + @close="resetForm(ruleFormRef)" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form + ref="ruleFormRef" + :model="ruleForm" + size="default" + label-width="120px" + :disabled="disabled" + > + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练名称" prop="drillName"> + <el-input v-model="ruleForm.drillName" placeholder="请填写演练名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练地点" prop="drillAddress"> + <el-input v-model="ruleForm.drillAddress" placeholder="请填写演练地点"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="主办部门" placeholder="请选择" prop="departmentId"> + <el-tree-select + v-model="ruleForm.departmentId" + :data="data" + check-strictly + class="w100" + :props="propse" + clearable + placeholder="请选择"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练方式" prop="drillWay"> + <el-select v-model="ruleForm.drillWay" class="w100" placeholder="请选择"> + <el-option label="综合" value="1"></el-option> + <el-option label="桌面" value="2"></el-option> + <el-option label="专项" value="3"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急预案" prop="planName" > + <el-input + v-model="ruleForm.planName" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="daiInpt"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练级别" prop="drillLevel"> + <el-select v-model="ruleForm.drillLevel" class="w100" placeholder="请选择"> + <el-option label="公司级" value="1"></el-option> + <el-option label="分厂级" value="2"></el-option> + <el-option label="车间级" value="3"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="计划定制日期" prop="makingPlanDate"> + <el-date-picker v-model="ruleForm.makingPlanDate" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="计划演练日期" prop="drillPlanDate"> + <el-date-picker v-model="ruleForm.drillPlanDate" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="修改时间" prop="gmtModitify"> + <el-date-picker v-model="ruleForm.gmtModitify" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="计划定制人" prop="makingUserName"> + <el-input v-model="ruleForm.makingUserName" placeholder="请填写计划定制人" disabled></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="制定部门" prop="makingDepartmentId"> + <el-tree-select + v-model="ruleForm.makingDepartmentId" + check-strictly + :data="data" + class="w100" + :props="propse" + clearable + placeholder="请选择"/> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练人员" prop="userListString" > + <el-input + v-model="ruleForm.userListString" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="openUser(0)"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="演练目的" prop="purpose"> + <el-input + v-model="ruleForm.purpose" + placeholder="请填写演练目的" + class="input-with-select textarea" + type="textarea" + > + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练负责人" prop="chargeUserListString" > + <el-input + v-model="ruleForm.chargeUserListString" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="openUser(1)"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="保险措施" prop="insuranceMeasures"> + <el-input v-model="ruleForm.insuranceMeasures" placeholder="请填写保险措施"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练经费" prop="drillExpense"> + <el-input v-model="ruleForm.drillExpense" placeholder="请填写演练经费"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="备注信息" prop="remark"> + <el-input + v-model="ruleForm.remark" + placeholder="请填写备注信息" + class="input-with-select textarea" + type="textarea" + > + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" style="margin-bottom: 0!important;"> + <el-form-item label="预案附件"> + <!--<el-upload--> + <!--v-model:file-list="fileList"--> + <!--class="upload-demo"--> + <!--action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"--> + <!--:on-change="handleChange"--> + <!-->--> + <!--<el-button type="primary"--> + <!-->点击上传</el-button>--> + <!--<template #tip>--> + <!--<div class="el-upload__tip">--> + <!--添加相关附件--> + <!--</div>--> + <!--</template>--> + <!--</el-upload>--> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" v-if="disabled == true ? false : true" type="primary" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <RegionsDialog ref="Shows" @SearchUser="onUser" /> + <DailogSearchUser ref="userRef" @SearchUser="SearchUser" /> + <DailogSearchUser ref="userFZRef" @SearchUser="SearchFZUser" /> + </div> +</template> + +<script lang="ts"> +import { + // reactive, + ref, + defineComponent, + onMounted, +} from 'vue'; + +import type { + UploadUserFile, + FormInstance, +} from 'element-plus' +import { ElMessage } from 'element-plus'; +import { + Search, + FullScreen +} from '@element-plus/icons-vue' +import DailogSearchUser from "/@/components/DailogSearchUser/index.vue" +import RegionsDialog from "/@/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue" +import {releaseDrillPlanApi} from "/@/api/contingencyManagement/emergencyDrillPlan"; +import {goalManagementApi} from "/@/api/goalManagement"; +import { Session } from '/@/utils/storage'; + +export default defineComponent({ + name: 'openAdd', + components: { + RegionsDialog, + DailogSearchUser + }, + setup(props, { emit }) { + const isShowDialog = ref(false) + + const ruleFormRef = ref<FormInstance>() + //定义表单 + const ruleForm = ref ({ + makingPlanDate: '', // 计划制定日期 + drillPlanDate: '', //计划演练日期 + makingUserUid: '', //计划制定人ID + makingUserName: '', //计划制定人Name + makingDepartmentId: '', // 计划制定部门ID + planId: '', // 应急预案ID + planName: '', // 应急预案name + departmentId: '', // 主办部门ID + drillExpense: '', // 演练经费 + drillLevel: '', //演练级别 + drillAddress: '', //演练地点 + drillName: '', // 演练名称 + drillWay: '', // 演练方式 + insuranceMeasures: '', // 保险措施 + remark: '', // 备注 + purpose: '', // 演练目的 + fileList: [ + ], + userList: [ + ], + chargeUserList:[], + userListString:'',//演练人员字段(回填使用) + chargeUserListString:'',//演练负责人字段(回填使用) + }); + const titles = ref(); + const disabled = ref(); + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + ruleForm.value.makingUserUid = Session.get('uid'); + ruleForm.value.makingUserName = Session.get('realName'); + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + if (title == '查看应急演练计划发布' || title == '修改应急演练计划发布') { + releaseDrillPlanApi() + .seeReleaseDrillPlan(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + ruleForm.value.userListString='' + ruleForm.value.chargeUserListString='' + for(var a = 0;a<res.data.data.userList.length;a++){ + if(res.data.data.userList[a].type==1){ + ruleForm.value.userListString += res.data.data.userList[a].userName+';' + } + // if(res.data.data.userList[a].type==2){ + // ruleForm.value.chargeUserListString += res.data.data.userList[a].userName+';' + // } + } + // alert(res.data.data.chargeUserList.length) + for(var a = 0;a<res.data.data.chargeUserList.length;a++){ + ruleForm.value.chargeUserListString += res.data.data.chargeUserList[a].userName+';' + } + } + }); + } + }; + //日期选择器 + const value1 = ref('') + // 上传附件 + const fileList = ref<UploadUserFile[]>([]) + // 可选择树 + const treeSelect = ref() + const tree = [ + ] + //部门树 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + //定义树形下拉框 + const responsibleDepartment = ref() + const data = ref() + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + onMounted(() => { + department(); + }); + // 表单提交验证必填项 + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + ruleForm.value.userList = ruleForm.value.userList.concat(ruleForm.value.chargeUserList) + if (title == '新建应急演练计划发布') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + releaseDrillPlanApi() + .addReleaseDrillPlan(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } + else if (title == '修改应急演练计划发布') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + releaseDrillPlanApi() + .editReleaseDrillPlan(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + makingPlanDate: '', // 计划制定日期 + drillPlanDate: '', //计划演练日期 + makingUserUid: '', //计划制定人ID + makingDepartmentId: '', // 计划制定部门ID + planId: '', // 应急预案ID + planName: '', // 应急预案name + departmentId: '', // 主办部门ID + drillExpense: '', // 演练经费 + drillLevel: '', //演练级别 + drillAddress: '', //演练地点 + drillName: '', // 演练名称 + drillWay: '', // 演练方式 + insuranceMeasures: '', // 保险措施 + remark: '', // 备注 + purpose: '', // 演练目的 + fileList: [ + ], + userList: [ + ], + chargeUserList:[], + userListString:'',//演练人员字段(回填使用) + chargeUserListString:'',//演练负责人字段(回填使用) + }; + } + } + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + ruleForm.value = { + makingPlanDate: '', // 计划制定日期 + drillPlanDate: '', //计划演练日期 + makingUserUid: '', //计划制定人ID + makingDepartmentId: '', // 计划制定部门ID + planId: '', // 应急预案ID + planName: '', // 应急预案name + departmentId: '', // 主办部门ID + drillExpense: '', // 演练经费 + drillLevel: '', //演练级别 + drillAddress: '', //演练地点 + drillName: '', // 演练名称 + drillWay: '', // 演练方式 + insuranceMeasures: '', // 保险措施 + remark: '', // 备注 + purpose: '', // 演练目的 + fileList: [ + ], + userList: [ + ], + chargeUserList:[], + userListString:'',//演练人员字段(回填使用) + chargeUserListString:'',//演练负责人字段(回填使用) + }; + formEl.resetFields(); + }; + // 应急队伍弹窗 + const Shows=ref() + const daiInpt = () => { + Shows.value.openDailog() + } + const onUser = (e:any) => { + ruleForm.value.planId=e.id + ruleForm.value.planName=e.name + }; + // 打开用户选择弹窗 + const userRef = ref(); + const userFZRef = ref(); + //打开演练人员和演练负责人弹窗 type 0 演练人员 1 演练负责人 + const openUser = (type:number) => { + if(type==0){ + userRef.value.openDailog(0); + }else if(type==1){ + userFZRef.value.openDailog(0); + } + }; + const SearchUser = (e:any) => { + console.log('演练人员',e) + ruleForm.value.userListString='' + ruleForm.value.userList=[] + for(var a = 0;a<e.length;a++){ + ruleForm.value.userList.push( + { + type: 1, + userName: e[a].realName, + userUid: e[a].uid, + } + ) + ruleForm.value.userListString+=e[a].realName+';' + } + + }; + const SearchFZUser = (e:any) => { + console.log('演练负责人员',e[0].userName) + ruleForm.value.chargeUserListString='' + ruleForm.value.chargeUserList=[] + // ruleForm.value.chargeUserList = [] + for(var a = 0;a<e.length;a++){ + ruleForm.value.chargeUserList.push( + { + type: 2, + userName: e[a].realName, + userUid: e[a].uid, + } + ) + ruleForm.value.chargeUserListString+=e[a].realName+';' + } + }; + // 计划定制日期 + const datetime = ref(''); + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + isShowDialog, + fileList, + responsibleDepartment, + data, + department, + propse, + Search, + ruleForm, + value1, + treeSelect, + tree, + daiInpt, + Shows, + ruleFormRef, + submitForm, + openUser, + userRef, + datetime, + toggleFullscreen, + FullScreen, + full, + titles, + disabled, + resetForm, + emit, + onUser, + userFZRef, + SearchUser, + SearchFZUser + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea{ + height: 168px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 168px!important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal{ + height: 0; + margin: 0; + border-top: transparent; +} +.el-select{ + width: 100%; +} +//多行文本框 +.textarea{ + height: 70px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 70px!important; +} +//弹窗底部边框线 +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +//弹窗顶部边框线 +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue b/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue new file mode 100644 index 0000000..ba15f44 --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue @@ -0,0 +1,219 @@ +<template> + <el-dialog v-model="dialogVisible" title="选择应急预案" width="900px" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row> + <el-col :span="18"> + <el-row> + <el-col :span="24"> + <el-form ref="ruleFormRef" :inline="true" :model="ruleForm" status-icon> + <el-form-item> + <el-input size="default" v-model="listQuery.searchParams.name" placeholder="预案名称" style="max-width: 215px;margin-right: 12px;" /> + </el-form-item> + <el-form-item> + <el-button size="default" type="primary" @click="onSubmit">查询</el-button> + <el-button size="default" @click="submitReset">重置</el-button> + </el-form-item> + </el-form> + </el-col> + <el-col :span="24"> + <el-button size="default" :icon="Delete" style="margin-top: 15px">清除选择</el-button> + </el-col> + </el-row> + <el-table + :data="tableData" + style="width: 100%; + margin-top: 20px" + @cell-click="radio" + > + <el-table-column width="55"> + <template #default="scope"> + <el-radio-group v-model="radio1"> + <el-radio :label="scope.row" size="large">{{ null }}</el-radio> + </el-radio-group> + </template> + </el-table-column> + <el-table-column align="center" prop="name" label="预案名称" /> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + /> + </div> + </el-col> + <el-col :span="6"> + <div v-if="dynamicTags[0] == '' ? false : true"> + <el-tag + v-for="tag in dynamicTags" + :key="tag" + class="mx-1" + style="margin: 5px" + closable + :disable-transitions="false" + @close="handleClose(tag)" + > + {{ tag.name }} + </el-tag> + </div> + </el-col> + </el-row> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogVisible = false" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref, onMounted } from 'vue'; +import { ElMessage } from 'element-plus'; +import { Delete, FullScreen } from '@element-plus/icons-vue'; +import { emergencyPlanApi } from '/@/api/contingencyManagement/emergencyPlan'; +export default defineComponent({ + setup(props, { emit }) { + const dialogVisible = ref<boolean>(false); + const openDailog = () => { + dialogVisible.value = true; + onSubmit() + }; + // 搜索条件 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + name: "", type: "", abolishStatus: false + }, + }); + // 定义表格数据 + const tableData = ref([]); + // 重置 + const submitReset = () => { + listQuery.searchParams.name = ''; + onSubmit(); + }; + + // 列表请求数据 + const onSubmit = async () => { + let res = await emergencyPlanApi().getEmergencyPlanList(listQuery); + if (res.data.code === '200') { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + type: 'error', + message: res.data.msg, + }); + } + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const onHandleSizeChange = (val: number) => { + listQuery.pageSize = val; + }; + // 分页未改变 + const onHandleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + }; + // 右方点击添加后显示标签 + const dynamicTags = ref(['']); + const handleClose = (tag: string) => { + dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1); + radio1.value = ''; + }; + const radio1 = ref(''); + const radio = (event: any) => { + dynamicTags.value[0] = event; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + + const submitForm = () => { + let obj = JSON.parse(JSON.stringify(dynamicTags.value)); + emit('SearchUser', obj[0]); + dialogVisible.value = false; + }; + onMounted(() => { + onSubmit(); + }); + return { + dialogVisible, + openDailog, + tableData, + pageSize, + pageIndex, + onHandleSizeChange, + onHandleCurrentChange, + dynamicTags, + handleClose, + Delete, + radio1, + radio, + toggleFullscreen, + FullScreen, + full, + submitReset, + onMounted, + listQuery, + onSubmit, + submitForm, + }; + }, +}); +</script> +<style scoped> +.el-form--inline .el-form-item { + margin-bottom: 0; + margin-right: 0; +} +/*分页*/ +.pages { + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> diff --git a/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue b/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue new file mode 100644 index 0000000..b1a7099 --- /dev/null +++ b/src/components/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue @@ -0,0 +1,404 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="button_Line"> + <div class="button_Left mb15"> + <el-button size="default" type="primary" @click="onOpenAdd"> + <el-icon> + <Plus /> + </el-icon>新建 + </el-button> + <el-button size="default" type="danger" plain :disabled="danger" @click="onDeleteAll"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </div> + <div class="button_Right"> +<!-- <el-button @click="upButton">--> +<!-- <el-icon>--> +<!-- <Upload />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button>--> +<!-- <el-icon>--> +<!-- <Download />--> +<!-- </el-icon>--> +<!-- </el-button>--> +<!-- <el-button>--> +<!-- <el-icon>--> +<!-- <Refresh />--> +<!-- </el-icon>--> +<!-- </el-button>--> + </div> + </div> + <el-table + :data="tableData" + style="width: 100%" + ref="multipleTableRef" + @selection-change="handleSelectionChange" + > + <el-table-column + type="selection" + width="55" + /> + <el-table-column prop="drillName" label="演练名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillAddress" label="演练地点" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillWay" label="演练方式" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.drillWay == 1">综合</span> + <span v-if="scope.row.drillWay == 2">桌面</span> + <span v-if="scope.row.drillWay == 3">专项</span> + </template> + </el-table-column> + <el-table-column prop="drillLevel" label="演练级别" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.drillLevel == 1">公司级</span> + <span v-if="scope.row.drillLevel == 2">分厂级</span> + <span v-if="scope.row.drillLevel == 3">车间级</span> + </template> + </el-table-column> + <el-table-column prop="drillPlanDate" label="计划演练日期" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="gmtModitify" label="修改时间" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="260" align="center"> + <template #default="scope"> + <!--<el-button size="small" text type="primary" @click="releaseOfDrillPlan(0)">--> + <!--<el-icon style="margin-right: 5px;">--> + <!--<VideoPlay />--> + <!--</el-icon>启动--> + <!--</el-button>--> + <el-button size="small" text type="primary" @click="onEdit('详情',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <View /> + </el-icon>查看 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('修改',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <EditPen /> + </el-icon>修改 + </el-button> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-card> + <OpenAdd ref="addRef" @myAdd="onMyAdd"/> +<!-- <FlowChart ref="flowRef"></FlowChart>--> + <upData ref="upShow"></upData> + </div> +</template> + +<script lang="ts"> +import { + // toRefs, + reactive, + onMounted, + ref, + defineComponent +} from 'vue'; +import { + ElMessageBox, + ElMessage, + // ElTable, +} from 'element-plus'; +import { + Plus, + Delete, + // Upload, + // Download, + // Refresh, + View, + VideoPlay, + EditPen, +} from '@element-plus/icons-vue' +import {useRouter} from "vue-router" +import OpenAdd from '/@/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue'; +// import FlowChart from '/@/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue'; +import UpData from '/@/views/contingencyManagement/panManagement/component/upData.vue'; +import { releaseDrillPlanApi } from '/@/api/contingencyManagement/emergencyDrillPlan'; + +export default defineComponent({ + name: 'systemUser', + components: { + OpenAdd, + EditPen, + Plus, + View, + Delete, + // Upload, + // Download, + // Refresh, + VideoPlay, + UpData, + // FlowChart, + }, + setup() { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + drillName: '' + }, + }); + // 定义表格数据 + const tableData = ref([]); + // 列表数据请求 + const listApi = async () => { + let res = await releaseDrillPlanApi().getReleaseDrillPlanList(listQuery); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }; + onMounted(() => { + listApi(); + }); + // 上传 + // const upShow=ref() + // const upButton=()=>{ + // upShow.value.openDialog() + // } + + // 打开新增弹窗 + const addRef = ref(); + const onOpenAdd = () => { + addRef.value.openDialog('新建应急演练计划发布',false); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + listApi(); + } else { + listApi(); + } + }; + // 打开修改用户弹窗 + const onEdit = (val: string, row: object) => { + if (val == '详情') { + addRef.value.openDialog('查看应急演练计划发布',row,true); + } else { + addRef.value.openDialog('修改应急演练计划发布',row,false); + } + }; + // 打开修改用户弹窗 + // const flowRef = ref(); + // const onflowChart = (row: TableDataRow) => { + // flowRef.value.openDialog(row); + // }; + // 删除 + const onRowDel = (id: number) => { + let arr = []; + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', '提示',{ + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + releaseDrillPlanApi() + .deleteReleaseDrillPlan(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + releaseDrillPlanApi() + .deleteReleaseDrillPlan(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + listApi(); + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + listApi(); + }; + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + // console.log(deletAll.value); + if (val.length == 1) { + danger.value = false; + } else if (val.length == 0) { + danger.value = true; + } else { + danger.value = false; + } + }; + + // 启动跳转 + const router=useRouter() + const releaseOfDrillPlan=(data:string)=>{ + router.push({ + path:"/releaseOfDrillStart", + query:{ + type:data + } + }) + } + return { + // upButton, + // upShow, + tableData, + // onflowChart, + // flowRef, + onOpenAdd, //新增 + addRef, + onRowDel, + View , + pageIndex, + listQuery, + pageSize, + handleSizeChange, + handleCurrentChange, + router, + releaseOfDrillPlan, + listApi, + danger, + deletAll, + handleSelectionChange, + onMyAdd, + onDeleteAll, + onEdit, + total, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box{ + padding: 20px; + background-color: #fff; +} +.tableForm{ + margin-top: 10px; +} +/*按钮行*/ +.button_Line{ + display: flex; + flex-direction: row; + justify-content: space-between; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending{ + border-bottom-color: #c0c4cc; +} +//分页 +.pages{ + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled{ + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next{ + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue b/src/components/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue new file mode 100644 index 0000000..e550b77 --- /dev/null +++ b/src/components/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue @@ -0,0 +1,195 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + :title="titles" + v-model="isShowDialog" + width="769px" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form + ref="ruleFormRef" + :model="ruleForm" + size="default" + label-width="120px" + :disabled="disabled" + > + <el-row :gutter="35"> + <el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急预案" prop="planName" > + <el-input + v-model="ruleForm.planName" + placeholder="请选择" + class="input-with-select" + disabled + > + <template #append> + <el-button :icon="Search" disabled @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="备注"> + <el-input + class="textarea" + v-model="ruleForm.remark" + type="textarea" + maxlength="150" + placeholder="请填写备注" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button size="default" @click="resetForm(ruleFormRef)">关闭</el-button> + <el-button size="default" v-if="disabled == true ? false : true" type="primary" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUser ref="userRef" @SearchUser="onUser"/> + <AddEmergencyPersonnel ref="addRef" /> + </div> +</template> + +<script lang="ts"> +import { + ref, + defineComponent +} from 'vue'; +import type { + FormInstance, +} from 'element-plus' +import { ElMessage } from 'element-plus'; +import { + Search, + FullScreen +} from '@element-plus/icons-vue' +import DailogSearchUser from "/@/components/DailogSearchUser/index.vue" +import AddEmergencyPersonnel from "/@/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue"; +import {emergencyPlanLogApi} from "/@/api/contingencyManagement/emergencyPlanLog"; + +export default defineComponent({ + name: 'openEdit', + components: { + DailogSearchUser, + AddEmergencyPersonnel, + }, + setup(props, { emit }) { + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + const ruleForm= ref({ + planId: '', //应急预案人员 + remark: '', // 备注 + }) + const titles = ref(); + const disabled = ref(); + + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + const onUser = (e:any) => { + ruleForm.value.planId=e.id + }; + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + if (title == '查看应急预案启动记录' || title == '修改应急预案启动记录') { + emergencyPlanLogApi() + .seeEmergencyPlanLog(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + } + }); + } + }; + // 表单提交验证必填项 + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '修改应急预案启动记录') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyPlanLogApi() + .editEmergencyPlanLog(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + planId: '', //应急预案人员 + remark: '', // 备注 + }; + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + Search, + ruleFormRef, + openUser, + userRef, + toggleFullscreen, + FullScreen, + full, + titles, + disabled, + emit, + ruleForm, + submitForm, + resetForm, + isShowDialog, + onUser, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea{ + height: 50px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 50px!important; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyPlanStartRecord/component/selectEmergencyPlan.vue b/src/components/contingencyManagement/emergencyPlanStartRecord/component/selectEmergencyPlan.vue new file mode 100644 index 0000000..da6b207 --- /dev/null +++ b/src/components/contingencyManagement/emergencyPlanStartRecord/component/selectEmergencyPlan.vue @@ -0,0 +1,242 @@ +<template> + <el-dialog v-model="dialogVisible" title="选择应急预案" width="900px" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row> + <el-col :span="18"> + <el-row> + <el-col :span="24"> + <el-form ref="ruleFormRef" :inline="true" :model="ruleForm" status-icon> + <el-form-item> + <el-input size="default" v-model="listQuery.searchParams.name" placeholder="预案名称" style="max-width: 215px" /> + </el-form-item> + <el-form-item> + <el-select + size="default" + v-model="listQuery.searchParams.type" + placeholder="请选择预案类型" + class="ml10" + style="max-width: 215px; margin-right: 12px" + > + <el-option label="综合应急预案" value="1"></el-option> + <el-option label="现场处置方案" value="2"></el-option> + <el-option label="专项应急预案" value="3"></el-option> + <el-option label="其他预案" value="4"></el-option> + </el-select> + </el-form-item> + <el-form-item> + <el-button size="default" type="primary" @click="onSubmit">查询</el-button> + <el-button size="default" @click="submitReset">重置</el-button> + </el-form-item> + </el-form> + </el-col> + <el-col :span="24"> + <el-button size="default" :icon="Delete" @click="submitReset" style="margin-top: 15px">清除选择</el-button> + </el-col> + </el-row> + <el-table :data="tableData" style="width: 100%; margin-top: 20px" @cell-click="radio"> + <el-table-column width="55"> + <template #default="scope"> + <el-radio-group v-model="radio1"> + <el-radio :label="scope.row" size="large">{{ null }}</el-radio> + </el-radio-group> + </template> + </el-table-column> + <el-table-column align="center" prop="name" label="预案名称" /> + <el-table-column align="center" prop="type" label="预案类型"> + <template #default="scope"> + <span v-if="scope.row.type == '1'">综合应急预案</span> + <span v-if="scope.row.type == '2'">现场处置方案</span> + <span v-if="scope.row.type == '3'">专项应急预案</span> + <span v-if="scope.row.type == '4'">其他预案</span> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + /> + </div> + </el-col> + <el-col :span="6"> + <div v-if="dynamicTags[0] == '' ? false : true"> + <el-tag + v-for="tag in dynamicTags" + :key="tag" + class="mx-1" + style="margin: 5px" + closable + :disable-transitions="false" + @close="handleClose(tag)" + > + {{ tag.name }} + </el-tag> + </div> + </el-col> + </el-row> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogVisible = false" size="default">关闭</el-button> + <el-button type="primary" @click="submitForm" size="default">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref, onMounted } from 'vue'; +import { ElMessage } from 'element-plus'; +import { Delete, FullScreen } from '@element-plus/icons-vue'; +import { emergencyPlanLogApi } from '/@/api/contingencyManagement/emergencyPlanLog'; +import { emergencyPlanApi } from '/@/api/contingencyManagement/emergencyPlan'; +export default defineComponent({ + setup(props, { emit }) { + const dialogVisible = ref<boolean>(false); + const openDailog = () => { + dialogVisible.value = true; + onSubmit(); + }; + // 搜索条件 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + name: '', + type: '', + abolishStatus: false, + }, + }); + // 定义表格数据 + const tableData = ref([]); + // 请求列表数据 + const onSubmit = async () => { + let res = await emergencyPlanApi().getEmergencyPlanList(listQuery); + if (res.data.code === '200') { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + type: 'error', + message: res.data.msg, + }); + } + }; + // 重置 + const submitReset = () => { + listQuery.searchParams.name = ''; + listQuery.searchParams.type = ''; + radio1.value="" + dynamicTags.value[0]="" + onSubmit(); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const onHandleSizeChange = (val: number) => { + listQuery.pageSize = val; + }; + // 分页未改变 + const onHandleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + }; + // 右方点击添加后显示标签 + const dynamicTags = ref(['']); + const handleClose = (tag: string) => { + dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1); + radio1.value = ''; + }; + const radio1 = ref(''); + const radio = (event: any) => { + dynamicTags.value[0] = event; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + + const submitForm = () => { + let obj = JSON.parse(JSON.stringify(dynamicTags.value)); + emit('SearchUser', obj[0]); + dialogVisible.value = false; + }; + onMounted(() => { + onSubmit(); + }); + return { + dialogVisible, + openDailog, + tableData, + pageSize, + pageIndex, + onHandleSizeChange, + onHandleCurrentChange, + dynamicTags, + handleClose, + Delete, + radio1, + radio, + toggleFullscreen, + FullScreen, + full, + submitReset, + onMounted, + listQuery, + onSubmit, + submitForm, + total, + }; + }, +}); +</script> +<style scoped> +.el-form--inline .el-form-item { + margin-bottom: 0; + margin-right: 0; +} +/*分页*/ +.pages { + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> diff --git a/src/components/contingencyManagement/emergencyPlanStartRecord/index.vue b/src/components/contingencyManagement/emergencyPlanStartRecord/index.vue new file mode 100644 index 0000000..29f589c --- /dev/null +++ b/src/components/contingencyManagement/emergencyPlanStartRecord/index.vue @@ -0,0 +1,405 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="system-user-search mb15"> + <el-form + size="default" + label-width="80px" + :inline="true" + > + <el-form-item prop="telephone" > + <el-input + v-model="listQuery.searchParams.planName" + placeholder="请选择应急预案" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="daiInpt"/> + </template> + </el-input> + </el-form-item> + <el-button size="default" type="primary" class="ml10" @click="onSubmit"> + 查询 + </el-button> + <el-button size="default" class="ml10" @click="submitReset"> + 重置 + </el-button> + </el-form> + </div> + <div class="button_Line"> + <div class="button_Left"> + <el-button size="default" type="warning" plain :disabled="warning"> + <el-icon> + <Edit /> + </el-icon>修改 + </el-button> + <el-button size="default" type="danger" plain :disabled="danger" @click="onDeleteAll"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </div> + <div class="button_Right"> + <el-button> + <el-icon> + <Download /> + </el-icon> + </el-button> + <el-button> + <el-icon> + <Refresh /> + </el-icon> + </el-button> + </div> + </div> + <el-table + :data="tableData" + style="width: 100%" + @selection-change="handleSelectionChange" + > + <el-table-column + type="selection" + width="55" + /> + <el-table-column prop="planName" label="应急预案" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="userName" label="启动人" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="startCreate" label="启动时间" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="remark" label="备注" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="200" align="center" fixed="right"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onEdit('详情',scope.row.id)"> + <el-icon style="margin-right: 5px;"> + <View /> + </el-icon>查看 + </el-button> +<!-- <el-button size="small" text type="primary" @click="onEdit('修改',scope.row.id)">--> +<!-- <el-icon style="margin-right: 5px;">--> +<!-- <EditPen />--> +<!-- </el-icon>修改--> +<!-- </el-button>--> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> + <el-icon> + <Delete /> + </el-icon>删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-card> + <SelectEmergencyPlan ref="showRef" @SearchUser="onUser"/> + <OpenSee ref="editRef" @myAdd="onMyAdd" /> + </div> +</template> + +<script lang="ts"> +import { + // toRefs, + reactive, + onMounted, + ref, + defineComponent +} from 'vue'; +import { + ElMessageBox, + ElMessage, +} from 'element-plus'; +import { + Search, + Delete, + // Upload, + Download, + Refresh, + View, + Edit, + EditPen, +} from '@element-plus/icons-vue' +import OpenSee from '/@/views/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue'; +import SelectEmergencyPlan from '/@/views/contingencyManagement/emergencyPlanStartRecord/component/selectEmergencyPlan.vue' +import {emergencyPlanLogApi} from "/@/api/contingencyManagement/emergencyPlanLog"; +import {contingencyApi} from "/@/api/contingencyManagement/contingency"; + +export default defineComponent({ + name: 'systemUser', + components: { + OpenSee, + View, + EditPen, + Edit, + Delete, + SelectEmergencyPlan, + Download, + Refresh, + }, + setup() { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + planId: '', + }, + }); + // 定义表格数据 + const tableData = ref([]); + + // 请求列表数据 + const onSubmit = async () => { + let res = await emergencyPlanLogApi().getEmergencyPlanLogList(listQuery); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }; + //重置 + const submitReset = () => { + listQuery.searchParams.planId = ''; + listQuery.searchParams.planName = ''; + onSubmit(); + }; + const warning = ref(true); + const danger = ref(true); + const deleteAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deleteAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + // 打开修改应急预案启动记录弹窗 + const editRef = ref(); + const onEdit = (val: string, row: object) => { + if (val == '详情') { + editRef.value.openDialog('查看应急预案启动记录',row,true); + } + else { + editRef.value.openDialog('修改应急预案启动记录',row,false); + } + }; + // 修改后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + onSubmit(); + } else { + onSubmit(); + } + }; + // 应急预案 + const showRef=ref() + const daiInpt=()=>{ + showRef.value.openDailog() + } + const onUser = (e:any) => { + console.log(e) + listQuery.searchParams.planId=e.id + listQuery.searchParams.planName=e.name + }; + // 删除用户 + const onRowDel = (data: any) => { + ElMessageBox.confirm('确定删除所选项吗?', '提示',{ + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + emergencyPlanLogApi() + .deleteEmergencyPlanLog([data]) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }).catch(() => {}); + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + emergencyPlanLogApi() + .deleteEmergencyPlanLog(deleteAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + onSubmit(); + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + onSubmit(); + }; + // 上传 + const upShow=ref() + const upButton=()=>{ + upShow.value.openDialog() + } + onMounted(() => { + onSubmit(); + }); + return { + upButton, + upShow, + tableData, + editRef, + onMyAdd, + onRowDel, + pageIndex, + pageSize, + handleSizeChange, + handleCurrentChange, + onSubmit, + Search, + daiInpt, + showRef, + onMounted, + submitReset, + listQuery, + Edit, + View, + onEdit, + onDeleteAll, + deleteAll, + warning, + danger, + total, + onUser, + handleSelectionChange, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box{ + padding: 20px; + background-color: #fff; +} +.tableForm{ + margin-top: 10px; +} +/*按钮行*/ +.button_Line{ + display: flex; + flex-direction: row; + justify-content: space-between; +} +//弹窗底部边框线 +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +//弹窗顶部边框线 +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending{ + border-bottom-color: #c0c4cc; +} +//分页 +.pages{ + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled{ + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next{ + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyResources/emergencyMaterialsInspection/component/openAdd.vue b/src/components/contingencyManagement/emergencyResources/emergencyMaterialsInspection/component/openAdd.vue new file mode 100644 index 0000000..3137291 --- /dev/null +++ b/src/components/contingencyManagement/emergencyResources/emergencyMaterialsInspection/component/openAdd.vue @@ -0,0 +1,280 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" @close="resetForm(ruleFormRef)" v-model="isShowDialog" width="50%" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :disabled="titles=='查看应急物资检查'?true:false" :rules="rules" :model="ruleForm" size="default" label-width="120px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急物资" prop="suppliesName"> + <el-input v-model="ruleForm.suppliesName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="daiInpt" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="检查结果" prop="inspectResult"> + <el-select v-model="ruleForm.inspectResult" class="w100" placeholder="请选择"> + <el-option label="正常" value="1"></el-option> + <el-option label="异常" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="创建人" prop="userName"> + <el-input v-model="ruleForm.userName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser(0)" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="创建时间" prop="inspectTime"> + <el-date-picker + class="w100" + v-model="ruleForm.inspectTime" + type="datetime" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="选择日期时间" + /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" v-if="titles=='查看应急物资检查'?false:true" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <EmergencySupplies ref="showRef" @SearchUser="onUser" /> + <DailogSearchUser ref="userRef" @SearchUser="onUsers" /> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent, reactive } from 'vue'; + +import type { FormInstance, FormRules } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import EmergencySupplies from '/@/components/emergencySupplies/index.vue'; +import UserSelections from '/@/components/userSelections/index.vue'; +import { emergencyMaterialsInspectionApi } from '/@/api/contingencyManagement/emergencyMaterialsInspection'; +import { maintenanceEmergencyMaterialsApi } from '/@/api/contingencyManagement/maintenanceEmergencyMaterials'; + +export default defineComponent({ + name: 'openAdd', + components: { + DailogSearchUser, + EmergencySupplies, + }, + setup(props, { emit }) { + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + //定义表单 + const ruleForm = ref({ + suppliesId: '', // 物资ID + inspectResult: '', //检查结果 + inspectTime: '', // 创建时间 + userList: [], + }); + const titles = ref(); + const disableds = ref(); + // 打开弹窗 + const openDialog = (title: string, id: number) => { + isShowDialog.value = true; + titles.value = title; + if (title == '查看应急物资检查' || title == '修改应急物资检查') { + emergencyMaterialsInspectionApi() + .seeEmergencyMaterialsInspection(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + let arr = []; + for (let i = 0; i < ruleForm.value.userList.length; i++) { + arr.push(ruleForm.value.userList[i].userName); + } + ruleForm.value.userName = arr.toString(); + } + }); + } + }; + //日期选择器 + const value1 = ref(''); + const rules = reactive<FormRules>({ + nameTitle: [], + inspectResult: [ + { + required: true, + message: '保养结果不能为空', + trigger: 'change', + }, + ], + userName: [ + { + required: true, + message: '创建人不能为空', + trigger: 'change', + }, + ], + inspectTime: [ + { + required: true, + message: '创建时间不能为空', + trigger: 'blur', + }, + ], + }); + // 表单提交验证必填项 + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '新建应急物资检查') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyMaterialsInspectionApi() + .addEmergencyMaterialsInspection(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } else if (title == '修改应急物资检查') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyMaterialsInspectionApi() + .editEmergencyMaterialsInspection(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + // 应急物资弹窗 + const showRef = ref(); + const daiInpt = () => { + showRef.value.openDailog(); + }; + const onUser = (e: any) => { + ruleForm.value.suppliesId = e.id; + ruleForm.value.suppliesName = e.name; + }; + // 编写人弹窗 + const userRef = ref(); + const openUser = (data: any) => { + userRef.value.openDailog(data); + }; + const onUsers = (val: any) => { + let arr = []; + for (let i = 0; i < val.length; i++) { + arr.push(val[i].realName); + ruleForm.value.userList.push({ + userUid: val[i].uid, + userName: val[i].realName, + }); + } + ruleForm.value.userName = arr.toString(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + isShowDialog, + Search, + ruleForm, + value1, + onUsers, + daiInpt, + showRef, + ruleFormRef, + submitForm, + openUser, + rules, + userRef, + resetForm, + toggleFullscreen, + FullScreen, + full, + titles, + disableds, + emit, + onUser, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyResources/emergencyMaterialsInspection/index.vue b/src/components/contingencyManagement/emergencyResources/emergencyMaterialsInspection/index.vue new file mode 100644 index 0000000..5e14343 --- /dev/null +++ b/src/components/contingencyManagement/emergencyResources/emergencyMaterialsInspection/index.vue @@ -0,0 +1,388 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="system-user-search mb15"> + <el-form size="default" label-width="80px" :inline="true"> + <el-form-item prop="telephone"> + <el-input v-model="listQuery.searchParams.suppliesName" placeholder="请选择应急物资" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="daiInpt" /> + </template> + </el-input> + </el-form-item> + <el-button size="default" type="primary" class="ml10" @click="onSubmit"> 查询 </el-button> + <el-button size="default" class="ml10" @click="submitReset"> 重置 </el-button> + </el-form> + </div> + <div class="button_Line"> + <div class="button_Left"> + <el-button size="default" type="primary" @click="onOpenAdd"> + <el-icon> <Plus /> </el-icon>新建 + </el-button> + <el-button size="default" type="warning" plain :disabled="warning"> + <el-icon> <Edit /> </el-icon>修改 + </el-button> + <el-button size="default" type="danger" plain @click="onDeleteAll" :disabled="danger"> + <el-icon> <Delete /> </el-icon>删除 + </el-button> + </div> + <div class="button_Right"> + <el-button> + <el-icon> + <Download /> + </el-icon> + </el-button> + <el-button> + <el-icon> + <Refresh /> + </el-icon> + </el-button> + </div> + </div> + <el-table :data="tableData" style="width: 100%" ref="multipleTableRef" @selection-change="handleSelectionChange"> + <el-table-column align="center" type="selection" width="55" /> + <el-table-column align="center" prop="suppliesName" label="物资名称" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column align="center" label="维修结果" min-width="120" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.inspectResult == 1">正常</span> + <span v-if="scope.row.inspectResult == 2">异常</span> + </template> + </el-table-column> + <el-table-column align="center" prop="inspectTime" label="维修日期" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="200" align="center" fixed="right"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onEdit('查看',scope.row.id)"> + <el-icon style="margin-right: 5px"> <View /> </el-icon>查看 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('修改', scope.row.id)"> + <el-icon style="margin-right: 5px"> <EditPen /> </el-icon>修改 + </el-button> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> + <el-icon> <Delete /> </el-icon>删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-card> + <EmergencySupplies ref="showRef" @SearchUser="onUser" /> + <upData ref="upShow"></upData> + <OpenAdd ref="addRef" @myAdd="onMyAdd" /> + </div> +</template> + +<script lang="ts"> +import { + // toRefs, + reactive, + onMounted, + ref, + defineComponent, +} from 'vue'; +import { + ElMessageBox, + ElMessage, + // ElTable, +} from 'element-plus'; +import { Plus, Search, Delete, Edit, Download, Refresh, View, EditPen } from '@element-plus/icons-vue'; +import UpData from '/@/views/contingencyManagement/panManagement/component/upData.vue'; +import EmergencySupplies from '/@/components/emergencySupplies/index.vue'; +import OpenAdd from '/@/views/contingencyManagement/emergencyResources/emergencyMaterialsInspection/component/openAdd.vue'; +import { emergencyMaterialsInspectionApi } from '/@/api/contingencyManagement/emergencyMaterialsInspection'; + +export default defineComponent({ + name: 'index', + components: { + View, + OpenAdd, + EditPen, + Plus, + Edit, + Delete, + EmergencySupplies, + Download, + Refresh, + UpData, + }, + setup() { + //定义表单 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + suppliesId: '', + }, + }); + // 定义表格数据 + const tableData = ref([]); + // 搜索按钮 + const onSubmit = async () => { + let res = await emergencyMaterialsInspectionApi().getEmergencyMaterialsInspectionList(listQuery); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }; + // 重置 + const submitReset = () => { + listQuery.searchParams.suppliesId = ''; + listQuery.searchParams.suppliesName="" + onSubmit(); + }; + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + // 打开新建用户弹窗 + const addRef = ref(); + const onOpenAdd = () => { + addRef.value.openDialog('新建应急物资检查'); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + onSubmit(); + } else { + onSubmit(); + } + }; + // 打开修改用户弹窗 + const onEdit = (val: string, row: object) => { + if (val == '查看') { + addRef.value.openDialog('查看应急物资检查', row); + } else { + addRef.value.openDialog('修改应急物资检查', row); + } + }; + // 删除 + const onRowDel = (id: number) => { + let arr = []; + arr.push(id); + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + emergencyMaterialsInspectionApi() + .deleteEmergencyMaterialsInspection(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }) + .catch(() => {}); + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + emergencyMaterialsInspectionApi() + .deleteEmergencyMaterialsInspection(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }) + .catch(() => {}); + }; + // 上传 + const upShow = ref(); + const upButton = () => { + upShow.value.openDialog(); + }; + + // 应急物资弹窗 + const showRef = ref(); + const daiInpt = () => { + showRef.value.openDailog(); + }; + const onUser = (e: any) => { + listQuery.searchParams.suppliesId = e.id; + listQuery.searchParams.suppliesName=e.name + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + onSubmit(); + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + onSubmit(); + }; + // 页面加载时 + onMounted(() => { + onSubmit(); + }); + return { + upButton, + upShow, + Edit, + onRowDel, + pageIndex, + pageSize, + handleSizeChange, + handleCurrentChange, + Search, + daiInpt, + showRef, + onOpenAdd, //新增 + addRef, + onSubmit, + View, + submitReset, + tableData, + onMyAdd, + onEdit, + onDeleteAll, + handleSelectionChange, + listQuery, + warning, + danger, + total, + onUser, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box { + padding: 20px; + background-color: #fff; +} +.tableForm { + margin-top: 10px; +} +/*按钮行*/ +.button_Line { + display: flex; + flex-direction: row; + justify-content: space-between; +} +//弹窗底部边框线 +::v-deep .el-dialog__footer { + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +//弹窗顶部边框线 +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending { + border-bottom-color: #c0c4cc; +} +//分页 +.pages { + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/inspect.vue b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/inspect.vue new file mode 100644 index 0000000..0953d51 --- /dev/null +++ b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/inspect.vue @@ -0,0 +1,224 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog title="修改应急物资检查" v-model="isShowDialog" @close="resetForm(ruleFormRef)" width="50%" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" size="default" label-width="120px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急物资"> + <el-input v-model="nameTitle" disabled placeholder="请选择" class="input-with-select"> + <!-- <template #append> + <el-button :icon="Search" @click="daiInpt" /> + </template> --> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="检查结果" prop="inspectResult"> + <el-select v-model="ruleForm.inspectResult" class="w100" placeholder="请选择"> + <el-option label="正常" value="1"></el-option> + <el-option label="异常" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="创建人" prop="userName"> + <el-input v-model="ruleForm.userName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser(0)" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="创建时间" prop="inspectTime"> + <el-date-picker + class="w100" + v-model="ruleForm.inspectTime" + type="datetime" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" @click="submitForm(ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <!-- <EmergencySupplies ref="showRef" @SearchUser="onUser"/> --> + <DailogSearchUser ref="userRef" @SearchUser="onUsers" /> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent,reactive } from 'vue'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; +import type { FormInstance,FormRules } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import EmergencySupplies from '/@/components/emergencySupplies/index.vue'; +import UserSelections from '/@/components/userSelections/index.vue'; +import { emergencyMaterialsInspectionApi } from '/@/api/contingencyManagement/emergencyMaterialsInspection'; + +export default defineComponent({ + name: 'inspect', + components: { + UserSelections, + EmergencySupplies, + DailogSearchUser, + }, + setup(props, { emit }) { + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + //定义表单 + const ruleForm = ref({ + suppliesId: '', // 物资ID + inspectResult: '', //保养结果 + inspectTime: '', // 创建时间 + userList: [], + }); + const disabled = ref(); + // 打开弹窗 + const nameTitle = ref(); + const openDialog = (data: string) => { + isShowDialog.value = true; + ruleForm.value.suppliesId = data.id; + nameTitle.value = data.name; + }; + const rules = reactive<FormRules>({ + nameTitle: [], + inspectResult: [ + { + required: true, + message: '保养结果不能为空', + trigger: 'change', + }, + ], + userName: [ + { + required: true, + message: '创建人不能为空', + trigger: 'change', + }, + ], + inspectTime: [ + { + required: true, + message: '创建时间不能为空', + trigger: 'blur', + }, + ], + }); + // 表单提交验证必填项 + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyMaterialsInspectionApi() + .addEmergencyMaterialsInspection(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + formEl.resetFields(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + }); + } else { + console.log('error submit!', fields); + } + }); + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + + //日期选择器 + const value1 = ref(''); + + // 编写人弹窗 + const userRef = ref(); + const openUser = (type: any) => { + userRef.value.openDailog(type); + }; + const onUsers = (val: any) => { + let arr = []; + for (let i = 0; i < val.length; i++) { + arr.push(val[i].realName); + ruleForm.value.userList.push({ + userUid: val[i].uid, + userName: val[i].realName, + }); + } + ruleForm.value.userName = arr.toString(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + nameTitle, + openDialog, + isShowDialog, + resetForm, + rules, + Search, + ruleForm, + value1, + onUsers, + ruleFormRef, + submitForm, + openUser, + userRef, + toggleFullscreen, + FullScreen, + full, + disabled, + emit, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/maintain.vue b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/maintain.vue new file mode 100644 index 0000000..b30bcc2 --- /dev/null +++ b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/maintain.vue @@ -0,0 +1,235 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog title="修改应急物资保养" @close="resetForm(ruleFormRef)" v-model="isShowDialog" width="50%" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" size="default" label-width="120px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急物资" prop="nameTitle"> + <el-input v-model="nameTitle" disabled placeholder="请选择" class="input-with-select"> + <!-- <template #append> + <el-button :icon="Search" @click="daiInpt"/> + </template> --> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="保养结果" prop="maintainResult"> + <el-select v-model="ruleForm.maintainResult" class="w100" placeholder="请选择"> + <el-option label="正常" value="1"></el-option> + <el-option label="异常" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="创建人" prop="userName"> + <el-input v-model="ruleForm.userName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser(0)" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="创建时间" prop="maintainTime"> + <el-date-picker + class="w100" + v-model="ruleForm.maintainTime" + type="datetime" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" @click="submitForm(ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <EmergencySupplies ref="showRef" @SearchUser="onUser" /> + <DailogSearchUser ref="userRef" @SearchUser="onUsers" /> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent, reactive } from 'vue'; + +import type { FormInstance, FormRules } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import EmergencySupplies from '/@/components/emergencySupplies/index.vue'; +import DailogSearchUser from '../../../../../components/DailogSearchUser/index.vue'; +import { maintenanceEmergencyMaterialsApi } from '/@/api/contingencyManagement/maintenanceEmergencyMaterials'; + +export default defineComponent({ + name: 'maintain', + components: { + DailogSearchUser, + EmergencySupplies, + }, + setup(props, { emit }) { + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + //定义表单 + const ruleForm = ref({ + suppliesId: '', // 物资ID + maintainResult: '', //保养结果 + maintainTime: '', // 创建时间 + userList: [], + }); + const disabled = ref(); + // 打开弹窗 + const nameTitle = ref(); + const openDialog = (data: string) => { + isShowDialog.value = true; + ruleForm.value.suppliesId = data.id; + nameTitle.value = data.name; + }; + const rules = reactive<FormRules>({ + nameTitle: [], + maintainResult: [ + { + required: true, + message: '保养结果不能为空', + trigger: 'change', + }, + ], + userName: [ + { + required: true, + message: '创建人不能为空', + trigger: 'change', + }, + ], + maintainTime: [ + { + required: true, + message: '创建时间不能为空', + trigger: 'blur', + }, + ], + }); + // 表单提交验证必填项 + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + maintenanceEmergencyMaterialsApi() + .addMaintenanceEmergencyMaterials(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + + //日期选择器 + const value1 = ref(''); + + // 应急物资弹窗 + const showRef = ref(); + const daiInpt = () => { + showRef.value.openDailog(); + }; + const onUser = (e: any) => { + ruleForm.value.suppliesId = e.id; + }; + + // 编写人弹窗 + const userRef = ref(); + const openUser = (type: any) => { + userRef.value.openDailog(type); + }; + const onUsers = (val: any) => { + let arr = []; + for (let i = 0; i < val.length; i++) { + arr.push(val[i].realName); + ruleForm.value.userList.push({ + userUid: val[i].uid, + userName: val[i].realName, + }); + } + ruleForm.value.userName = arr.toString(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + rules, + isShowDialog, + resetForm, + Search, + ruleForm, + value1, + daiInpt, + onUsers, + showRef, + ruleFormRef, + onUser, + submitForm, + openUser, + userRef, + toggleFullscreen, + FullScreen, + full, + disabled, + emit, + nameTitle, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/openAdd.vue b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/openAdd.vue new file mode 100644 index 0000000..17defc0 --- /dev/null +++ b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/openAdd.vue @@ -0,0 +1,515 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" v-model="isShowDialog" @close="resetForm(ruleFormRef)" width="50%" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :rules="rules" :model="ruleForm" size="default" label-width="120px" :disabled="disabled"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资名称" prop="name"> + <el-input v-model="ruleForm.name" placeholder="请填写物资名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资编号" prop="number"> + <el-input v-model="ruleForm.number" placeholder="请填写物资编号"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资用途" prop="use"> + <el-input v-model="ruleForm.use" placeholder="请填写物资用途"></el-input> + </el-form-item> + </el-col> + <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">--> + <!-- <el-form-item label="所属区域">--> + <!-- <el-input v-model="ruleForm.areaId" placeholder="请选择" class="input-with-select">--> + <!-- <template #append>--> + <!-- <el-button :icon="Search" @click="regionsDialog" />--> + <!-- </template>--> + <!-- </el-input>--> + <!-- </el-form-item>--> + <!-- </el-col>--> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资型号" prop="model"> + <el-input v-model="ruleForm.model" placeholder="请填写物资型号"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="负责部门" prop="departmentId"> + <el-tree-select + v-model="ruleForm.departmentId" + check-strictly + :data="data" + :props="propse" + class="w100" + clearable + :render-after-expand="false" + placeholder="请选择" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资分类" prop="classification"> + <el-select v-model="ruleForm.classification" class="w100" placeholder="请选择"> + <el-option label="事故气体吸收装置" value="1"></el-option> + <el-option label="通讯设施" value="2"></el-option> + <el-option label="交通运输工具" value="3"></el-option> + <el-option label="照明装置" value="4"></el-option> + <el-option label="防护器材" value="5"></el-option> + <el-option label="其它" value="6"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="存放位置" prop="place"> + <el-input v-model="ruleForm.place" placeholder="请填写存放位置"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="存储数量" prop="count"> + <el-input v-model.number="ruleForm.count" maxlength="6" placeholder="请填写存储数量"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="生产日期" prop="productionDate"> + <el-date-picker + v-model="ruleForm.productionDate" + type="datetime" + class="w100" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="使用期限(天)" prop="usePeriod"> + <el-input v-model.number="ruleForm.usePeriod" maxlength="6" placeholder="请填写使用期限"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资状态" prop="status"> + <el-select v-model="ruleForm.status" class="w100" placeholder="请选择"> + <el-option label="完好" :value="1"></el-option> + <el-option label="维修" :value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="检查周期月" prop="inspectPeriod"> + <el-input v-model.number="ruleForm.inspectPeriod" type="" maxlength="4" placeholder="请填写使用期限"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="投用日期" prop="useDate"> + <el-date-picker v-model="ruleForm.useDate" type="datetime" class="w100" placeholder="选择日期时间" value-format="YYYY-MM-DD HH:mm:ss" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="使用说明" prop="useExplain"> + <el-input v-model="ruleForm.useExplain" type="textarea" placeholder="请填写使用说明"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="检查日期" prop="inspectDate"> + <el-date-picker + v-model="ruleForm.inspectDate" + type="datetime" + class="w100" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="下次检查日期" prop="nextInspectDate"> + <el-date-picker + v-model="ruleForm.nextInspectDate" + type="datetime" + value-format="YYYY-MM-DD HH:mm:ss" + class="w100" + placeholder="选择日期时间" + /> + </el-form-item> + </el-col> + <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">--> + <!-- <el-form-item label="经度(度)">--> + <!-- <el-input v-model="ruleForm.longitude" placeholder="请填写经度(度)"></el-input>--> + <!-- </el-form-item>--> + <!-- </el-col>--> + <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">--> + <!-- <el-form-item label="纬度(度)">--> + <!-- <el-input v-model="ruleForm.latitude" placeholder="请填写纬度(度)"></el-input>--> + <!-- </el-form-item>--> + <!-- </el-col>--> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="负责人" prop="principalUserName"> + <el-input v-model="ruleForm.principalUserName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="daiInpt" /> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" v-if="disabled == true ? false : true" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUser ref="Shows" @SearchUser="onUser"></DailogSearchUser> + <userSelections ref="userRef" /> + <RegionsCheckbox ref="openRef" /> + </div> +</template> + +<script lang="ts"> +import { reactive, ref, defineComponent, onMounted } from 'vue'; + +import type { FormInstance, FormRules } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import UserSelections from '/@/components/userSelections/index.vue'; +import PersonInCharge from '/@/views/contingencyManagement/emergencyResources/emergencySupplies/component/personInCharge.vue'; +import RegionsCheckbox from '/@/views/contingencyManagement/emergencyResources/emergencySupplies/component/regionsCheckbox.vue'; +import { emergencySuppliesApi } from '/@/api/contingencyManagement/emergencyResources'; +import { goalManagementApi } from '/@/api/goalManagement'; + +export default defineComponent({ + name: 'openAdd', + components: { + PersonInCharge, + UserSelections, + RegionsCheckbox, + DailogSearchUser, + }, + setup(props, { emit }) { + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + //定义表单 + const ruleForm = ref({ + productionDate: '', + useDate: '', + inspectDate: '', + nextInspectDate: '', + inspectPeriod: '', + count: '', + usePeriod: '', + departmentId: '', + principalUserUid: '', + principalUserName: '', + status: '', + classification: '', + name: '', + number: '', + model: '', + longitude: '', + latitude: '', + use: '', + areaId: null, + place: '', + useExplain: '', + }); + const titles = ref(); + const disabled = ref(); + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + if (title == '查看应急物资代码' || title == '修改应急物资代码') { + emergencySuppliesApi() + .seeEmergencySupplies(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + } + }); + } + }; + //日期选择器 + const value1 = ref(''); + //部门树 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + //定义树形下拉框 + const responsibleDepartment = ref(); + const data = ref(); + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + onMounted(() => { + department(); + }); + // 必填项提示 + const rules = reactive<FormRules>({ + name: [ + { + required: true, + message: '物资名称不能为空', + trigger: 'change', + }, + ], + number: [ + { + required: true, + message: '物资编号不能为空', + trigger: 'change', + }, + ], + use: [ + { + required: true, + message: '物资用途不能为空', + trigger: 'change', + }, + ], + model: [ + { + required: true, + message: '物资型号不能为空', + trigger: 'change', + }, + ], + departmentId: [ + { + required: true, + message: '负责部门不能为空', + trigger: 'change', + }, + ], + classification: [ + { + required: true, + message: '物资分类不能为空', + trigger: 'change', + }, + ], + place: [ + { + required: true, + message: '存放位置不能为空', + trigger: 'change', + }, + ], + count: [ + { + required: true, + message: '存储数量不能为空', + trigger: 'change', + }, + { type: 'number', message: '请输入数字类型', trigger: 'change' }, + ], + productionDate: [ + { + required: true, + message: '生产日期不能为空', + trigger: 'change', + }, + ], + usePeriod: [ + { + required: true, + message: '使用期限不能为空', + trigger: 'change', + }, + { type: 'number', message: '请输入数字类型', trigger: 'change' }, + ], + status: [ + { + required: true, + message: '物资状态不能为空', + trigger: 'change', + }, + ], + inspectPeriod: [ + { + required: true, + message: '检查周期月不能为空', + trigger: 'change', + }, + { type: 'number', message: '请输入数字类型', trigger: 'change' }, + ], + useDate: [ + { + required: true, + message: '投用日期不能为空', + trigger: 'change', + }, + ], + inspectDate: [ + { + required: true, + message: '检查日期不能为空', + trigger: 'change', + }, + ], + nextInspectDate: [ + { + required: true, + message: '下次检查日期不能为空', + trigger: 'change', + }, + ], + principalUserName:[], + useExplain:[] + }); + // 表单提交验证必填项 + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '新建应急物资代码') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencySuppliesApi() + .addEmergencySupplies(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } else if (title == '修改应急物资代码') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencySuppliesApi() + .editEmergencySupplies(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + // 人名 + const Shows = ref(); + const daiInpt = () => { + Shows.value.openDailog(); + }; + // 选择区域弹窗 + const openRef = ref(); + const regionsDialog = () => { + openRef.value.openDailog(); + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + const onUser = (e: any) => { + ruleForm.value.principalUserUid = e.uid; + ruleForm.value.principalUserName = e.realName; + }; + return { + openDialog, + isShowDialog, + responsibleDepartment, + data, + propse, + department, + Search, + ruleForm, + value1, + daiInpt, + Shows, + ruleFormRef, + submitForm, + rules, + openUser, + userRef, + regionsDialog, + openRef, + toggleFullscreen, + FullScreen, + full, + resetForm, + titles, + disabled, + emit, + onUser + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/openEdit.vue b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/openEdit.vue new file mode 100644 index 0000000..f5b2e61 --- /dev/null +++ b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/openEdit.vue @@ -0,0 +1,549 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" v-model="isShowDialog" @close="resetForm(ruleFormRef)" width="50%" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :rules="rules" :model="ruleForm" size="default" label-width="120px" :disabled="disabled"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资名称" prop="name"> + <el-input v-model="ruleForm.name" placeholder="请填写物资名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资编号" prop="number"> + <el-input v-model="ruleForm.number" placeholder="请填写物资编号"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资用途" prop="use"> + <el-input v-model="ruleForm.use" placeholder="请填写物资用途"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="投用日期" prop="useDate"> + <el-date-picker v-model="ruleForm.useDate" type="datetime" class="w100" placeholder="选择日期时间" value-format="YYYY-MM-DD HH:mm:ss" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资型号" prop="model"> + <el-input v-model="ruleForm.model" placeholder="请填写物资型号"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="负责部门" prop="departmentId"> + <el-tree-select v-model="ruleForm.departmentId" :data="data" class="w100" :props="propse" placeholder="请选择" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资分类" prop="classification"> + <el-select v-model="ruleForm.classification" class="w100" placeholder="请选择"> + <el-option label="事故气体吸收装置" value="1"></el-option> + <el-option label="通讯设施" value="2"></el-option> + <el-option label="交通运输工具" value="3"></el-option> + <el-option label="照明装置" value="4"></el-option> + <el-option label="防护器材" value="5"></el-option> + <el-option label="其它" value="6"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="存放位置" prop="place"> + <el-input v-model="ruleForm.place" placeholder="请填写存放位置"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="存储数量" prop="count"> + <el-input v-model.number="ruleForm.count" maxlength="6" placeholder="请填写存储数量"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="生产日期" prop="productionDate"> + <el-date-picker + v-model="ruleForm.productionDate" + type="datetime" + class="w100" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="使用期限(天)" prop="usePeriod"> + <el-input v-model.number="ruleForm.usePeriod" maxlength="6" placeholder="请填写使用期限"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="物资状态" prop="status"> + <el-select v-model="ruleForm.status" class="w100" placeholder="请选择"> + <el-option label="完好" value="1"></el-option> + <el-option label="维修" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="检查周期月" prop="inspectPeriod"> + <el-input v-model.number="ruleForm.inspectPeriod" type="" maxlength="4" placeholder="请填写使用期限"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="使用说明"> + <el-input v-model="ruleForm.useExplain" type="textarea" placeholder="请填写使用说明"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="检查日期" prop="inspectDate"> + <el-date-picker + v-model="ruleForm.inspectDate" + type="datetime" + class="w100" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="下次检查日期" prop="nextInspectDate"> + <el-date-picker + v-model="ruleForm.nextInspectDate" + type="datetime" + value-format="YYYY-MM-DD HH:mm:ss" + class="w100" + placeholder="选择日期时间" + /> + </el-form-item> + </el-col> + <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">--> + <!-- <el-form-item label="经度(度)">--> + <!-- <el-input v-model="ruleForm.longitude" placeholder="请填写经度(度)"></el-input>--> + <!-- </el-form-item>--> + <!-- </el-col>--> + <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">--> + <!-- <el-form-item label="纬度(度)">--> + <!-- <el-input v-model="ruleForm.latitude" placeholder="请填写纬度(度)"></el-input>--> + <!-- </el-form-item>--> + <!-- </el-col>--> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="负责人" prop="principalUserName"> + <el-input v-model="ruleForm.principalUserName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="daiInpt" /> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="保养记录"> + <el-table :data="ruleForm.maintainList" highlight-current-row> + <el-table-column align="center" label="保养结果" prop="maintainResult"> + <template #default="scope"> + <el-select size="mini" disabled v-model="scope.row.maintainResult"> + <el-option label="正常" value="1"></el-option> + <el-option label="异常" value="2"></el-option> + </el-select> + </template> + </el-table-column> + <el-table-column align="center" label="创建人" prop="userName"></el-table-column> + <el-table-column align="center" label="创建时间" prop="maintainTime"></el-table-column> + </el-table> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="检查记录"> + <el-table :data="ruleForm.inspectList" highlight-current-row> + <el-table-column align="center" label="检查结果" prop="maintainResult"> + <template #default="scope"> + <el-select size="mini" disabled v-model="scope.row.inspectResult"> + <el-option label="正常" value="1"></el-option> + <el-option label="异常" value="2"></el-option> + </el-select> + </template> + </el-table-column> + <el-table-column align="center" label="创建人" prop="userName"></el-table-column> + <el-table-column align="center" label="创建时间" prop="inspectTime"></el-table-column> + </el-table> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" v-if="disabled == true ? false : true" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUser ref="Shows" @SearchUser="onUser"></DailogSearchUser> + <userSelections ref="userRef" /> + <RegionsCheckbox ref="openRef" /> + </div> +</template> + +<script lang="ts"> +import { reactive, ref, defineComponent } from 'vue'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; +import type { FormInstance, FormRules } from 'element-plus'; +import { ElMessage } from 'element-plus'; + +import { Search, FullScreen } from '@element-plus/icons-vue'; +import UserSelections from '../../../../../components/userSelections/index.vue'; +import PersonInCharge from '../component/personInCharge.vue'; +import RegionsCheckbox from '../component/regionsCheckbox.vue'; +import { emergencySuppliesApi } from '../../../../../api/contingencyManagement/emergencyResources'; +import { goalManagementApi } from '/@/api/goalManagement'; +import { AnyAaaaRecord } from 'dns'; +export default defineComponent({ + name: 'openAdd', + components: { + DailogSearchUser, + UserSelections, + RegionsCheckbox, + }, + setup(props, { emit }) { + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + //定义表单 + const ruleForm = ref({ + productionDate: '', + useDate: '', + inspectDate: '', + nextInspectDate: '', + inspectPeriod: '', + count: '', + usePeriod: '', + departmentId: '', + principalUserUid: '', + principalUserName:"", + status: '', + classification: '', + name: '', + number: '', + model: '', + longitude: '', + latitude: '', + use: '', + areaId: null, + place: '', + useExplain: '', + }); + const titles = ref(); + const disabled = ref(); + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + department() + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + if (title == '查看应急物资代码' || title == '修改应急物资代码') { + emergencySuppliesApi() + .seeEmergencySupplies(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + userNames(res.data.data.maintainList) + userNames(res.data.data.inspectList) + } + }); + } + }; + const userNames=(data:AnyAaaaRecord)=>{ + for(let i=0;i<data.length;i++){ + let arr=[] + for(let s=0;s<data[i].userList.length;s++){ + arr.push(data[i].userList[s].userName) + } + + data[i].userName=arr.toString() + } + } + //日期选择器 + const value1 = ref(''); + // 可选择树 + const treeSelect = ref(); + //部门树 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + //定义树形下拉框 + const responsibleDepartment = ref(); + const data = ref(); + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + // 必填项提示 + const rules = reactive<FormRules>({ + name: [ + { + required: true, + message: '物资名称不能为空', + trigger: 'change', + }, + ], + number: [ + { + required: true, + message: '物资编号不能为空', + trigger: 'change', + }, + ], + use: [ + { + required: true, + message: '物资用途不能为空', + trigger: 'change', + }, + ], + model: [ + { + required: true, + message: '物资型号不能为空', + trigger: 'change', + }, + ], + departmentId: [ + { + required: true, + message: '负责部门不能为空', + trigger: 'change', + }, + ], + classification: [ + { + required: true, + message: '物资分类不能为空', + trigger: 'change', + }, + ], + place: [ + { + required: true, + message: '存放位置不能为空', + trigger: 'change', + }, + ], + count: [ + { + required: true, + message: '存储数量不能为空', + trigger: 'change', + }, + { type: 'number', message: '请输入数字类型', trigger: 'change' }, + ], + productionDate: [ + { + required: true, + message: '生产日期不能为空', + trigger: 'blur', + }, + ], + usePeriod: [ + { + required: true, + message: '使用期限不能为空', + trigger: 'blur', + }, + { type: 'number', message: '请输入数字类型', trigger: 'change' }, + ], + status: [ + { + required: true, + message: '物资状态不能为空', + trigger: 'change', + }, + ], + inspectPeriod: [ + { + required: true, + message: '检查周期月不能为空', + trigger: 'change', + }, + { type: 'number', message: '请输入数字类型', trigger: 'change' }, + ], + useDate: [ + { + required: true, + message: '投用日期不能为空', + trigger: 'blur', + }, + ], + inspectDate: [ + { + required: true, + message: '检查日期不能为空', + trigger: 'blur', + }, + ], + nextInspectDate: [ + { + required: true, + message: '下次检查日期不能为空', + trigger: 'blur', + }, + ], + principalUserName:[], + }); + // 表单提交验证必填项 + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '新建应急物资代码') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencySuppliesApi() + .addEmergencySupplies(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } else if (title == '修改应急物资代码') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencySuppliesApi() + .editEmergencySupplies(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + // 人名 + const Shows = ref(); + const daiInpt = () => { + Shows.value.openDailog(); + }; + // 选择区域弹窗 + const openRef = ref(); + const regionsDialog = () => { + openRef.value.openDailog(); + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + const dataList = ref(); + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + const onUser = (e: any) => { + ruleForm.value.principalUserUid = e.uid; + ruleForm.value.principalUserName = e.realName; + }; + return { + onUser, + userNames, + openDialog, + isShowDialog, + responsibleDepartment, + data, + Search, + ruleForm, + value1, + treeSelect, + daiInpt, + Shows, + ruleFormRef, + submitForm, + rules, + openUser, + userRef, + regionsDialog, + openRef, + toggleFullscreen, + FullScreen, + full, + resetForm, + titles, + disabled, + emit, + dataList, + propse, + department + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/personInCharge.vue b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/personInCharge.vue new file mode 100644 index 0000000..2e719ea --- /dev/null +++ b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/personInCharge.vue @@ -0,0 +1,213 @@ +<template> + <el-dialog + v-model="dialogVisible" + title="选择岗位id" + width="900px" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row> + <el-col :span="18"> + <el-row> + <el-col :span="24"> + <el-form ref="ruleFormRef" :model="ruleForm" :inline="true" status-icon> + <el-form-item> + <el-input size="default" v-model="ruleForm.pass" placeholder="编号" style="max-width: 215px;"/> + </el-form-item> + <el-form-item> + <el-input size="default" v-model="ruleForm.checkPass" placeholder="姓名" style="max-width: 215px;padding: 0 12px;"/> + </el-form-item> + <el-form-item> + <el-button size="default" type="primary" @click="submitForm(ruleFormRef)">查询</el-button> + <el-button size="default" @click="resetForm(ruleFormRef)">重置</el-button> + </el-form-item> + </el-form> + </el-col> + <el-col :span="24"> + <el-button size="default" :icon="Delete" style="margin-top: 15px;">清除选择</el-button> + </el-col> + </el-row> + <el-table + :data="tableData" + ref="multipleTableRef" + style="width: 100%;margin-top:20px" + > + <el-table-column align="center" width="55"> + <template #default="scope"> + <el-radio-group v-model="radio1" @change="radio"> + <el-radio :label="scope.row.name" size="large">{{null}}</el-radio> + </el-radio-group> + </template> + </el-table-column> + <el-table-column align="center" prop="date" label="编号" /> + <el-table-column align="center" prop="name" label="姓名"/> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[100, 200, 300, 400]" + :small="small" + :disabled="disabled" + :background="background" + layout="total, sizes, prev, pager, next, jumper" + :total="400" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-col> + <el-col :span="6" style="padding-left: 15px"> + <el-tag + v-for="tag in dynamicTags" + :key="tag" + class="mx-1" + style="margin: 5px" + closable + :disable-transitions="false" + @close="handleClose(tag)" + > + {{ tag }} + </el-tag> + </el-col> + </el-row> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogVisible = false" size="default">关闭</el-button> + <el-button type="primary" @click="dialogVisible = false" size="default">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { + defineComponent, + reactive, + ref, +} from 'vue'; +import { + Delete, + FullScreen +} from '@element-plus/icons-vue'; +interface User { + date: string + name: string + address: string +} +export default defineComponent({ + setup() { + const dialogVisible = ref<boolean>(false); + const openDailog = () => { + dialogVisible.value = true; + }; + // 搜索条件 + const ruleForm = reactive({ + pass: '', + checkPass: '', + }); + // 表格 + const tableData = [ + { + date: '6421cbc6cbb5493eabf9b27e83372d78', + name: '金伟', + }, + { + date: '6421cbc6cbb5493eabf9b27e83372d78', + name: '施凯健', + }, + { + date: '6421cbc6cbb5493eabf9b27e83372d78', + name: '程雪', + }, + { + date: '6421cbc6cbb5493eabf9b27e83372d78', + name: '杨恒', + }, + ]; + const pageSize4 = ref(100); + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`); + }; + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`); + }; + // 右方点击添加后显示标签 + const dynamicTags = ref(['杨恒']); + const handleClose = (tag: string) => { + dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1); + radio1.value="" + }; + const radio1=ref('金伟') + const radio=(event:any)=>{ + dynamicTags.value[0]=event + } + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + dialogVisible, + openDailog, + ruleForm, + tableData, + pageSize4, + handleSizeChange, + handleCurrentChange, + dynamicTags, + handleClose, + Delete, + radio1, + radio, + toggleFullscreen, + FullScreen, + full, + }; + }, +}); +</script> +<style scoped> +.el-form--inline .el-form-item{ + margin-bottom: 0; + margin-right: 0; +} +/*分页*/ +.pages{ + /*display: flex;*/ + /*justify-content: flex-end;*/ + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled{ + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next{ + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> diff --git a/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/regionsCheckbox.vue b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/regionsCheckbox.vue new file mode 100644 index 0000000..d8d1973 --- /dev/null +++ b/src/components/contingencyManagement/emergencyResources/emergencySupplies/component/regionsCheckbox.vue @@ -0,0 +1,164 @@ +<template> + <el-dialog + v-model="dialogVisible" + title="选择区域" + width="900px" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row> + <el-col :span="18"> + <el-form :inline="true" ref="ruleFormRef" :model="ruleForm" status-icon> + <el-form-item> + <el-input size="default" v-model="ruleForm.checkPass" placeholder="风险区域名称" style="max-width: 215px;" /> + </el-form-item> + <el-form-item> + <el-button size="default" type="primary" @click="submitForm(ruleFormRef)" style="margin-left: 12px;">查询</el-button> + <el-button size="default" @click="resetForm(ruleFormRef)">重置</el-button> + </el-form-item> + <el-button size="default" :icon="Delete" style="margin-left: 12px;">清除选择</el-button> + </el-form> + <el-table :data="tableData" style="width: 100%;margin-top:20px;"> + <el-table-column align="center" width="55"> + <template #default="scope"> + <el-radio-group v-model="radio1" @change="radio"> + <el-radio :label="scope.row.name" size="large">{{null}}</el-radio> + </el-radio-group> + </template> + </el-table-column> + <el-table-column align="center" prop="name" label="风险区域名称"/> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + :small="small" + :disabled="disabled" + :background="background" + layout="total, sizes, prev, pager, next, jumper" + :total="40" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-col> + <el-col :span="6" style="padding-left: 15px;"> + <el-tag + v-for="tag in dynamicTags" + :key="tag" + class="mx-1" + style="margin: 5px" + closable + :disable-transitions="false" + @close="handleClose(tag)" + > + {{ tag }} + </el-tag> + </el-col> + </el-row> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogVisible = false" size="default">关闭</el-button> + <el-button type="primary" @click="dialogVisible = false" size="default">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { + defineComponent, + reactive, + ref +} from 'vue'; +import { + Delete, + FullScreen +} from '@element-plus/icons-vue'; +export default defineComponent({ + setup() { + const dialogVisible = ref<boolean>(false); + const openDailog = () => { + dialogVisible.value = true; + }; + // 搜索条件 + const ruleForm = reactive({ + checkPass: '', + }); + // 表格 + const tableData = [ + { + name: '1#LNG储罐单元', + }, + { + name: 'LNG装车区', + }, + { + name: '丙烷储罐区', + }, + { + name: '4#LNG储罐单元', + }, + ]; + // 右方点击添加后显示标签 + const dynamicTags = ref(['LNG装车区']); + const handleClose = (tag: string) => { + dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1); + radio1.value="" + }; + const radio1=ref('1#LNG储罐单元') + const radio=(event:any)=>{ + dynamicTags.value[0]=event + } + + // 分页 + const pageIndex = ref(4); + const pageSize = ref(10); + // 分页改变 + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`); + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + dialogVisible, + openDailog, + ruleForm, + tableData, + handleSizeChange, + handleCurrentChange, + pageIndex, + pageSize, + radio1, + radio, + dynamicTags, + handleClose, + Delete, + toggleFullscreen, + FullScreen, + full, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +.el-form--inline .el-form-item{ + margin: 0; +} +</style> diff --git a/src/components/contingencyManagement/emergencyResources/emergencySupplies/index.vue b/src/components/contingencyManagement/emergencyResources/emergencySupplies/index.vue new file mode 100644 index 0000000..3f9dc77 --- /dev/null +++ b/src/components/contingencyManagement/emergencyResources/emergencySupplies/index.vue @@ -0,0 +1,396 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="system-user-search mb15"> + <el-input size="default" v-model="listQuery.searchParams.name" placeholder="物资名称" style="max-width: 215px" /> + <el-button size="default" type="primary" class="ml10" @click="listApi"> 查询 </el-button> + <el-button size="default" class="ml10" @click="submitReset"> 重置 </el-button> + </div> + <div class="button_Line"> + <div class="button_Left"> + <el-button size="default" type="primary" @click="onOpenAdd"> + <el-icon> <Plus /> </el-icon>新建 + </el-button> + <el-button size="default" type="warning" plain :disabled="warning"> + <el-icon> <Edit /> </el-icon>修改 + </el-button> + <el-button size="default" type="danger" plain @click="onDeleteAll" :disabled="danger"> + <el-icon> <Delete /> </el-icon>删除 + </el-button> + </div> + <div class="button_Right"> + <!-- <el-button @click="upButton">--> + <!-- <el-icon>--> + <!-- <Upload />--> + <!-- </el-icon>--> + <!-- </el-button>--> + <!-- <el-button>--> + <!-- <el-icon>--> + <!-- <Refresh />--> + <!-- </el-icon>--> + <!-- </el-button>--> + </div> + </div> + <el-table :data="tableData" style="width: 100%" ref="multipleTableRef" @selection-change="handleSelectionChange"> + <el-table-column align="center" type="selection" width="55" /> + <el-table-column align="center" prop="name" label="物资名称" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column align="center" prop="number" label="物资编号" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column align="center" prop="deptName" label="负责部门" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column align="center" label="物资分类" min-width="120" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.classification == 1">事故气体吸收装置</span><span v-if="scope.row.classification == 2">通讯设施</span + ><span v-if="scope.row.classification == 3">交通运输工具</span><span v-if="scope.row.classification == 4">照明装置</span + ><span v-if="scope.row.classification == 5">防护器材</span><span v-if="scope.row.classification == 6">其它</span> + </template> + </el-table-column> + <el-table-column align="center" prop="place" label="存放位置" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column align="center" prop="count" label="存储数量" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="200" align="center" fixed="right"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onMaintain(scope.row)"> + <el-icon style="margin-right: 5px"> <EditPen /> </el-icon>保养 + </el-button> + <el-button size="small" text type="primary" @click="onInspect(scope.row)"> + <el-icon style="margin-right: 5px"> <EditPen /> </el-icon>检查 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('详情', scope.row.id)"> + <el-icon style="margin-right: 5px"> <View /> </el-icon>查看 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('修改', scope.row.id)"> + <el-icon style="margin-right: 5px"> + <EditPen /> + </el-icon> + 修改 + </el-button> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> + <el-icon> <Delete /> </el-icon>删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-card> + <Maintain ref="seeRef" @myadd="onMaintainAdd" /> + <Inspect ref="spectRef" @myadd="onInspectAdd" /> + <OpenAdd ref="addRef" @myAdd="onMyAdd" /> + <OpenEdit ref="editRef" @myAdd="onMyAdds" /> + <!-- <upData ref="upShow"></upData>--> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent, reactive, onMounted } from 'vue'; +import { + ElMessageBox, + ElMessage, + // ElTable +} from 'element-plus'; +import { Plus, Edit, Delete, Upload, Refresh, View, EditPen } from '@element-plus/icons-vue'; +import OpenAdd from '/@/views/contingencyManagement/emergencyResources/emergencySupplies/component/openAdd.vue'; +import Maintain from '/@/views/contingencyManagement/emergencyResources/emergencySupplies/component/maintain.vue'; +import Inspect from '/@/views/contingencyManagement/emergencyResources/emergencySupplies/component/inspect.vue'; +import OpenEdit from '/@/views/contingencyManagement/emergencyResources/emergencySupplies/component/openEdit.vue'; +import UpData from '/@/views/contingencyManagement/panManagement/component/upData.vue'; +import { emergencySuppliesApi } from '/@/api/contingencyManagement/emergencyResources'; + +export default defineComponent({ + name: 'systemUser', + components: { + OpenAdd, + Maintain, + View, + OpenEdit, + EditPen, + Plus, + Edit, + Delete, + Upload, + // Download, + Inspect, + Refresh, + UpData, + }, + setup() { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + name: '', + }, + }); + // 定义表格数据 + const tableData = ref([]); + // 请求列表数据 + const listApi = async () => { + let res = await emergencySuppliesApi().getEmergencySuppliesList(listQuery); + // console.log(res); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }; + //重置 + const submitReset = () => { + listQuery.searchParams.name = ''; + listApi(); + }; + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + // console.log(deletAll.value); + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + // 页面加载时 + onMounted(() => { + listApi(); + }); + // 上传 + // const upShow = ref(); + // const upButton = () => { + // upShow.value.openDialog(); + // }; + + //新增应急物资检查弹窗 + const seeRef = ref(); + const onMaintain = (data: any) => { + seeRef.value.openDialog(data); + }; + // 应急物资保养新增后刷新 + const onMaintainAdd = () => { + listApi(); + }; + //修改应急物资检查弹窗 + const spectRef = ref(); + const onInspect = (data: any) => { + spectRef.value.openDialog(data); + }; + // 应急物资检查新增后刷新 + const onInspectAdd = (e: boolean) => { + if (e) { + listApi(); + } else { + listApi(); + } + }; + // 新建应急物资代码弹窗 + const addRef = ref(); + const onOpenAdd = () => { + addRef.value.openDialog('新建应急物资代码', false); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + listApi(); + } else { + listApi(); + } + }; + // 打开修改用户弹窗 + const editRef = ref(); + const onEdit = (val: string, row: object) => { + if (val == '详情') { + editRef.value.openDialog('查看应急物资代码', row, true); + } else { + editRef.value.openDialog('修改应急物资代码', row, false); + } + }; + // 新增后刷新 + const onMyAdds = (e: boolean) => { + if (e) { + listApi(); + } else { + listApi(); + } + }; + // 删除用户 + const onRowDel = (id: number) => { + let arr = []; + arr.push(id); + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + emergencySuppliesApi() + .deleteEmergencySupplies(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + emergencySuppliesApi() + .deleteEmergencySupplies(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + listApi(); + } + }); + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页条数 + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + listQuery.pageSize = val; + }; + // 分页数 + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + listQuery.pageIndex = val; + }; + return { + // upButton, + // upShow, + tableData, + onMaintain, //保养 + seeRef, + onOpenAdd, //新增 + addRef, + onRowDel, + pageIndex, + pageSize, + total, + handleSizeChange, + handleCurrentChange, + listQuery, + listApi, + onMounted, + submitReset, + onMyAdd, + onEdit, + editRef, + onDeleteAll, + handleSelectionChange, + warning, + danger, + spectRef, + onInspect, + onMaintainAdd, + onInspectAdd, + onMyAdds, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box { + padding: 20px; + background-color: #fff; +} +.tableForm { + margin-top: 10px; +} +/*按钮行*/ +.button_Line { + display: flex; + flex-direction: row; + justify-content: space-between; +} +//分页 +.pages { + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue b/src/components/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue new file mode 100644 index 0000000..7bcfdce --- /dev/null +++ b/src/components/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue @@ -0,0 +1,271 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" v-model="isShowDialog" width="50%" @close="resetForm(ruleFormRef)" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :rules="rules" :model="ruleForm" size="default" label-width="120px" :disabled="disabled"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急物资" prop="suppliesName"> + <el-input v-model="ruleForm.suppliesName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="daiInpt" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="保养结果" prop="maintainResult"> + <el-select v-model="ruleForm.maintainResult" class="w100" placeholder="请选择"> + <el-option label="正常" value="1"></el-option> + <el-option label="异常" value="2"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="创建人" prop="userName"> + <el-input v-model="ruleForm.userName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser(0)" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="创建时间" prop="maintainTime"> + <el-date-picker + class="w100" + v-model="ruleForm.maintainTime" + type="datetime" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="选择日期时间" + /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" v-if="disabled == true ? false : true" @click="submitForm(ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <EmergencySupplies ref="showRef" @SearchUser="onUser" /> + <DailogSearchUser ref="userRef" @SearchUser="onUsers" /> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent, reactive } from 'vue'; + +import type { FormInstance, FormRules } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import EmergencySupplies from '../../../../../components/emergencySupplies/index.vue'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; +import { maintenanceEmergencyMaterialsApi } from '../../../../../api/contingencyManagement/maintenanceEmergencyMaterials'; + +export default defineComponent({ + name: 'openAdd', + components: { + DailogSearchUser, + EmergencySupplies, + }, + setup(props, { emit }) { + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + //定义表单 + const ruleForm = ref({ + suppliesId: '', // 物资ID + maintainResult: '', //保养结果 + maintainTime: '', // 创建时间 + userList: [], + }); + const titles = ref(); + const disabled = ref(); + // 打开弹窗 + const openDialog = (title: string, id: number) => { + isShowDialog.value = true; + titles.value = `${title}应急物资保养`; + disabled.value = title == '查看' ? true : false; + if (title == '查看' || title == '修改') { + maintenanceEmergencyMaterialsApi() + .seeMaintenanceEmergencyMaterials(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + let arr = []; + for (let i = 0; i < ruleForm.value.userList.length; i++) { + arr.push(ruleForm.value.userList[i].userName); + } + ruleForm.value.userName = arr.toString(); + } + }); + } + }; + //日期选择器 + const maintainTime = ref(''); + // 表单提交验证必填项 + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + if (titles.value == '新建应急物资保养') { + isShowDialog.value = false; + maintenanceEmergencyMaterialsApi() + .addMaintenanceEmergencyMaterials(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + }); + } else if (titles.value == '修改应急物资保养') { + isShowDialog.value = false; + maintenanceEmergencyMaterialsApi() + .editMaintenanceEmergencyMaterials(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + const rules = reactive<FormRules>({ + nameTitle: [], + maintainResult: [ + { + required: true, + message: '保养结果不能为空', + trigger: 'change', + }, + ], + userName: [ + { + required: true, + message: '创建人不能为空', + trigger: 'change', + }, + ], + maintainTime: [ + { + required: true, + message: '创建时间不能为空', + trigger: 'blur', + }, + ], + }); + // 应急物资弹窗 + const showRef = ref(); + const daiInpt = () => { + showRef.value.openDailog(); + }; + const onUser = (e: any) => { + ruleForm.value.suppliesId = e.id; + ruleForm.value.suppliesName = e.name; + }; + // 编写人弹窗 + const userRef = ref(); + const openUser = (data: any) => { + userRef.value.openDailog(data); + }; + const onUsers = (val: any) => { + let arr = []; + for (let i = 0; i < val.length; i++) { + arr.push(val[i].realName); + ruleForm.value.userList.push({ + userUid: val[i].uid, + userName: val[i].realName, + }); + } + ruleForm.value.userName = arr.toString(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + isShowDialog, + Search, + ruleForm, + maintainTime, + daiInpt, + onUser, + onUsers, + rules, + showRef, + ruleFormRef, + submitForm, + openUser, + userRef, + toggleFullscreen, + FullScreen, + full, + resetForm, + titles, + disabled, + emit, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/index.vue b/src/components/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/index.vue new file mode 100644 index 0000000..3544d06 --- /dev/null +++ b/src/components/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/index.vue @@ -0,0 +1,392 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="system-user-search mb15"> + <el-form size="default" label-width="80px" :inline="true"> + <el-form-item prop="telephone"> + <el-input v-model="listQuery.searchParams.suppliesName" placeholder="请选择应急物资" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="daiInpt" /> + </template> + </el-input> + </el-form-item> + <el-button size="default" type="primary" class="ml10" @click="onSubmit"> 查询 </el-button> + <el-button size="default" class="ml10" @click="submitReset"> 重置 </el-button> + </el-form> + </div> + <div class="button_Line"> + <div class="button_Left"> + <el-button size="default" type="primary" @click="onOpenAdd('新建')"> + <el-icon> <Plus /> </el-icon>新建 + </el-button> + <el-button size="default" type="warning" plain :disabled="warning"> + <el-icon> <Edit /> </el-icon>修改 + </el-button> + <el-button size="default" type="danger" plain @click="onDeleteAll" :disabled="danger"> + <el-icon> <Delete /> </el-icon>删除 + </el-button> + </div> + <div class="button_Right"> + <el-button> + <el-icon> + <Download /> + </el-icon> + </el-button> + <el-button> + <el-icon> + <Refresh /> + </el-icon> + </el-button> + </div> + </div> + <el-table :data="tableData" style="width: 100%" ref="multipleTableRef" @selection-change="handleSelectionChange"> + <el-table-column align="center" type="selection" width="55" /> + <el-table-column align="center" prop="suppliesName" label="应急物资" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column align="center" label="保养结果" min-width="120" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.maintainResult == 1">正常</span> + <span v-if="scope.row.maintainResult == 2">异常</span> + </template> + </el-table-column> + <el-table-column align="center" prop="maintainTime" label="保养日期" min-width="120" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="200" align="center" fixed="right"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onEdit('查看', scope.row.id)"> + <el-icon style="margin-right: 5px"> <View /> </el-icon>查看 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('修改', scope.row.id)"> + <el-icon style="margin-right: 5px"> <EditPen /> </el-icon>修改 + </el-button> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> + <el-icon> <Delete /> </el-icon>删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </el-card> + <EmergencySupplies ref="showRef" @SearchUser="onUser" /> + <OpenSee ref="editRef" /> + <upData ref="upShow"></upData> + <OpenAdd ref="addRef" @myAdd="onMyAdd" /> + </div> +</template> + +<script lang="ts"> +import { reactive, onMounted, ref, defineComponent } from 'vue'; +import { + ElMessageBox, + ElMessage, + // ElTable, + // FormInstance, +} from 'element-plus'; +import { Plus, Search, Delete, Edit, Download, Refresh, View, EditPen } from '@element-plus/icons-vue'; +// import OpenSee from '/@/views/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue'; +// import UpData from '/@/views/contingencyManagement/panManagement/component/upData.vue'; +// import EmergencySupplies from '/@/components/emergencySupplies/index.vue'; +// import OpenAdd from '/@/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue'; +// import { contingencyApi } from '/@/api/contingency'; +// import { emergencySuppliesMaintainApi } from '/@/api/emergencySuppliesMaintain'; + +import OpenSee from '../../emergencyPlanStartRecord/component/openSee.vue'; +import UpData from '../../panManagement/component/upData.vue'; +import EmergencySupplies from '../../../../components/emergencySupplies/index.vue'; +import OpenAdd from '../maintenanceOfEmergencyMaterials/component/openAdd.vue'; +import { maintenanceEmergencyMaterialsApi } from '/@/api/contingencyManagement/maintenanceEmergencyMaterials'; + +export default defineComponent({ + name: 'systemUser', + components: { + OpenSee, + View, + OpenAdd, + EditPen, + Plus, + Edit, + Delete, + EmergencySupplies, + Download, + Refresh, + UpData, + }, + setup() { + //定义表单 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + suppliesId: '', + }, + }); + // 定义表格数据 + const tableData = ref([]); + // 请求列表数据 + const onSubmit = async () => { + let res = await maintenanceEmergencyMaterialsApi().getMaintenanceEmergencyMaterialsList(listQuery); + if (res.data.code == 200) { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }; + // 重置 + const submitReset = () => { + listQuery.searchParams.suppliesId = ''; + listQuery.searchParams.suppliesName=""; + onSubmit(); + }; + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + + // 打开新建用户弹窗 + const addRef = ref(); + const onOpenAdd = (data:any) => { + addRef.value.openDialog(data); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + onSubmit(); + } else { + onSubmit(); + } + }; + // 打开修改用户弹窗 + const onEdit = (val: string, row: object) => { + if (val == '详情') { + addRef.value.openDialog(val, row); + } else { + addRef.value.openDialog(val, row); + } + }; + // 删除 + const onRowDel = (data: any) => { + let arr=[] + arr.push(data) + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + maintenanceEmergencyMaterialsApi() + .deleteMaintenanceEmergencyMaterials(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }) + .catch(() => {}); + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + maintenanceEmergencyMaterialsApi() + .deleteMaintenanceEmergencyMaterials(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }) + .catch(() => {}); + }; + // 上传 + const upShow = ref(); + const upButton = () => { + upShow.value.openDialog(); + }; + // 应急物资弹窗 + const showRef = ref(); + const daiInpt = () => { + showRef.value.openDailog(); + }; + const onUser = (e: any) => { + listQuery.searchParams.suppliesId = e.id; + listQuery.searchParams.suppliesName=e.name + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + onSubmit(); + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + onSubmit(); + }; + // 页面加载时 + onMounted(() => { + onSubmit(); + }); + return { + upButton, + upShow, + Edit, + onRowDel, + handleSizeChange, + handleCurrentChange, + Search, + daiInpt, + showRef, + onOpenAdd, //新增 + addRef, + onSubmit, + submitReset, + onMyAdd, + listQuery, + warning, + danger, + tableData, + pageIndex, + pageSize, + total, + handleSelectionChange, + onDeleteAll, + onEdit, + onUser, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box { + padding: 20px; + background-color: #fff; +} +.tableForm { + margin-top: 10px; +} +/*按钮行*/ +.button_Line { + display: flex; + flex-direction: row; + justify-content: space-between; +} +//弹窗底部边框线 +::v-deep .el-dialog__footer { + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +//弹窗顶部边框线 +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending { + border-bottom-color: #c0c4cc; +} +//分页 +.pages { + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/panManagement/component/abolishLibrary.vue b/src/components/contingencyManagement/panManagement/component/abolishLibrary.vue new file mode 100644 index 0000000..f13523f --- /dev/null +++ b/src/components/contingencyManagement/panManagement/component/abolishLibrary.vue @@ -0,0 +1,219 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog title="废止库" v-model="isShowDialog" width="60%" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-table + :data="tableData" + style="width: 100%; margin-top: 15px" + ref="multipleTableRef" + :model="formInline" + :header-cell-style="{ background: '#f6f7fa', color: '#909399' }" + > + <el-table-column prop="name" label="预案名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="type" label="预案类型" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="authorUid" label="编写人" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="releaseDate" label="发布实施日期" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="200" align="center"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onReduction(scope.row.id)">还原 </el-button> + </template> + </el-table-column> + </el-table> + </el-col> + </el-row> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + class="mt15" + background + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + /> + </div> + <template #footer> + <span class="dialog-footer"> + <el-button @click="onCancel">取消</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { ref, reactive, defineComponent, onMounted } from 'vue'; + +import type { FormInstance } from 'element-plus'; +import { + // ElMessageBox, + ElMessage, +} from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import { emergencyPlanApi } from '../../../../api/contingencyManagement/emergencyPlan'; +export default defineComponent({ + name: 'abolishLibrary', + components: {}, + setup(prop, { emit }) { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + abolishStatus: true, + }, + }); + // 定义表格数据 + const tableData = ref([]); + + // 列表数据请求 + const openDialog = async () => { + isShowDialog.value = true; + let res = await emergencyPlanApi().getEmergencyPlanList(listQuery); + if (res.data.code === '200') { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + type: 'error', + message: res.data.msg, + }); + } + }; + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + // 打开弹窗 + // const openDialog = () => { + // isShowDialog.value = true; + // }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + // 取消 + const onCancel = () => { + closeDialog(); + }; + const onReduction = async (id: number) => { + isShowDialog.value = false; + emergencyPlanApi() + .reductionEmergencyTeam(id) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + openDialog(); + } + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + onCancel, + tableData, + Search, + ruleFormRef, + pageIndex, + pageSize, + handleSizeChange, + handleCurrentChange, + toggleFullscreen, + FullScreen, + full, + listQuery, + // onSubmit, + total, + emit, + onReduction, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +//分页 +.pages { + display: flex; + justify-content: flex-end; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/panManagement/component/approval.vue b/src/components/contingencyManagement/panManagement/component/approval.vue new file mode 100644 index 0000000..b6db937 --- /dev/null +++ b/src/components/contingencyManagement/panManagement/component/approval.vue @@ -0,0 +1,224 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" v-model="isShowDialog" width="40%" draggable :fullscreen="full" :close-on-click-modal="false"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" size="default" label-width="120px" :disabled="disabled"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批名称" prop="workName"> + <el-input v-model="ruleForm.workName" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批标题" prop="title"> + <el-input v-model="ruleForm.title" placeholder="请填写审批名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批人" prop="approvePersonId"> + <el-input v-model="ruleForm.approvePersonName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="审批结果" prop="authorUid"> + <el-radio-group v-model="ruleForm.approveResult"> + <el-radio :label="false">不通过</el-radio> + <el-radio :label="true">通过</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="审批意见" prop="approveMemo"> + <el-input v-model="ruleForm.approveMemo" type="textarea" placeholder="请填写审批意见"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="是否完成" prop="authorUid" @change="typeChang"> + <el-radio-group v-model="ruleForm.complete"> + <el-radio :label="false">是</el-radio> + <el-radio :label="true">否</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col v-if="ruleForm.complete" :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批名称" prop="workName"> + <el-input v-model="ruleForm.twoWorkName" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col v-if="ruleForm.complete" :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批标题" prop="title"> + <el-input v-model="ruleForm.twoTitle" placeholder="请填写审批名称"></el-input> + </el-form-item> + </el-col> + <el-col v-if="ruleForm.complete" :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批人" prop="authorUid"> + <el-input v-model="ruleForm.twoApprovePersonName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser" /> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" v-if="disabled == true ? false : true" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUserManger ref="userRef" @SearchUser="onUser" /> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent } from 'vue'; + +import type { FormInstance } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogSearchUserManger from '/@/components/DailogSearchUserManger/index.vue'; +import { emergencyPlanApi } from '/@/api/contingencyManagement/emergencyPlan'; + +export default defineComponent({ + name: 'openAdd', + components: { + DailogSearchUserManger, + }, + setup(prop, { emit }) { + const isShowDialog = ref(false); + const ruleFormRef = ref<FormInstance>(); + const ruleForm = ref({ + approveId: '', + workName: '', // 审批名称 + title: '', //审批标题 + approvePersonId: '', // + approvePersonName: '', // 审批人 + approveStatus: 2, //审批状态 + relateType: 1, //业务类型 + approveResult: false, //审批结果 + approveMemo: '', //审批意见 + relateId: '', + twoWorkName:'', + twoTitle:'', + twoApprovePersonId:'', + twoApprovePersonName:'' + }); + const titles = ref(); + const disabled = ref(); + const uid = ref(); + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + ruleForm.value.relateId = id; + uid.value = id; + if(title == '查看审批' || title == '修改审批') { + emergencyPlanApi() + .approvalProcessEmergencyPlan(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + } + }); + } + }; + const submitForm = async () => { + ruleForm.value.workName = ruleForm.value.twoWorkName + ruleForm.value.title = ruleForm.value.twoTitle + ruleForm.value.approvePersonId = ruleForm.value.twoApprovePersonId + ruleForm.value.approvePersonName = ruleForm.value.twoApprovePersonName + isShowDialog.value = false; + emergencyPlanApi() + .editApprovalEmergencyPlan(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + }); + }; + const resetForm = () => { + isShowDialog.value = false; + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + //回显 + const onUser = (e: any) => { + ruleForm.value.twoApprovePersonId = e[0].uid; + ruleForm.value.twoApprovePersonName = e[0].realName; + }; + const typeChang = () => { + console.log('tag', ruleForm); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + Search, + submitForm, + openUser, + userRef, + toggleFullscreen, + FullScreen, + full, + titles, + disabled, + emit, + isShowDialog, + ruleFormRef, + ruleForm, + resetForm, + onUser, + typeChang, + uid, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/panManagement/component/approvalProcess.vue b/src/components/contingencyManagement/panManagement/component/approvalProcess.vue new file mode 100644 index 0000000..2356a0b --- /dev/null +++ b/src/components/contingencyManagement/panManagement/component/approvalProcess.vue @@ -0,0 +1,202 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog title="查看审批流程" v-model="isShowDialog" width="60%" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-table + :data="tableData" + style="width: 100%; margin-top: 15px" + ref="multipleTableRef" + :model="formInline" + :header-cell-style="{ background: '#f6f7fa', color: '#909399' }" + > + <el-table-column prop="workName" label="审批人" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="title" label="审批标题" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="approvePersonName" label="编写人" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="approveMemo" label="审批意见" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="200" align="center"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="onReduction(scope.row.id)">还原</el-button> + </template> + </el-table-column> + </el-table> + </el-col> + </el-row> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + class="mt15" + background + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + /> + </div> + <template #footer> + <span class="dialog-footer"> + <el-button @click="onCancel">取消</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { ref, reactive, defineComponent, onMounted } from 'vue'; + +import type { FormInstance } from 'element-plus'; +import { + // ElMessageBox, + ElMessage, +} from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import { emergencyPlanApi } from '../../../../api/contingencyManagement/emergencyPlan'; +export default defineComponent({ + name: 'abolishLibrary', + components: {}, + setup(prop, { emit }) { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + relateType: 1, + relateId: '', + startTime: '', + endTime: '', + }, + }); + // 定义表格数据 + const tableData = ref([]); + + // 列表数据请求 + const openDialog = async () => { + isShowDialog.value = true; + let res = await emergencyPlanApi().processEmergencyPlan(listQuery); + if (res.data.code === '200') { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + type: 'error', + message: res.data.msg, + }); + } + }; + + const isShowDialog = ref(false); + + const ruleFormRef = ref<FormInstance>(); + // 打开弹窗 + // const openDialog = () => { + // isShowDialog.value = true; + // }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + // 取消 + const onCancel = () => { + closeDialog(); + }; + const onReduction = async () => { + isShowDialog.value = false; + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const handleSizeChange = (val: number) => { + listQuery.pageSize = val; + }; + // 分页未改变 + const handleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + onCancel, + tableData, + Search, + ruleFormRef, + pageIndex, + pageSize, + handleSizeChange, + handleCurrentChange, + toggleFullscreen, + FullScreen, + full, + listQuery, + // onSubmit, + total, + emit, + onReduction, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +//分页 +.pages { + display: flex; + justify-content: flex-end; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/panManagement/component/initiateApproval.vue b/src/components/contingencyManagement/panManagement/component/initiateApproval.vue new file mode 100644 index 0000000..eb2afa2 --- /dev/null +++ b/src/components/contingencyManagement/panManagement/component/initiateApproval.vue @@ -0,0 +1,159 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog title="发起审批" v-model="isShowDialog" width="40%" draggable :fullscreen="full" :close-on-click-modal="false"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" size="default" label-width="120px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批名称" prop="workName"> + <el-input v-model="ruleForm.workName" placeholder="请填写审批名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批标题" prop="title"> + <el-input v-model="ruleForm.title" placeholder="请填写审批名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="审批人" prop="approvePersonId"> + <el-input v-model="ruleForm.approvePersonName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser" /> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm" size="default">关闭</el-button> + <el-button size="default" type="primary" @click="submitForm">确定</el-button> + </span> + </template> + </el-dialog> + <DailogSearchUserManger ref="userRef" @SearchUser="onUser" /> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent } from 'vue'; + +import type { FormInstance } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogSearchUserManger from '/@/components/DailogSearchUserManger/index.vue'; +import { emergencyPlanApi } from '/@/api/contingencyManagement/emergencyPlan'; + +export default defineComponent({ + name: 'openAdd', + components: { + DailogSearchUserManger, + }, + setup(prop, { emit }) { + const isShowDialog = ref(false); + const ruleFormRef = ref<FormInstance>(); + const ruleForm = ref({ + workName: '', // 审批名称 + title: '', //审批标题 + approvePersonId: '', + approvePersonName: '', + approveStatus: 2, + relateType: 1, + relateId: '', + }); + const titles = ref(); + + // 打开弹窗 + const openDialog = (title: string, id: number) => { + isShowDialog.value = true; + titles.value = title; + ruleForm.value.relateId = id; + uid.value = id; + }; + const uid = ref(); + const submitForm = async () => { + isShowDialog.value = false; + + emergencyPlanApi() + .approvalEmergencyPlan(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + }); + }; + const resetForm = () => { + isShowDialog.value = false; + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + //回显 + const onUser = (e: any) => { + ruleForm.value.approvePersonId = e[0].uid; + ruleForm.value.approvePersonName = e[0].realName; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + Search, + submitForm, + openUser, + userRef, + toggleFullscreen, + FullScreen, + full, + titles, + emit, + isShowDialog, + ruleFormRef, + ruleForm, + resetForm, + onUser, + uid, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/panManagement/component/openAdd.vue b/src/components/contingencyManagement/panManagement/component/openAdd.vue new file mode 100644 index 0000000..02c44c0 --- /dev/null +++ b/src/components/contingencyManagement/panManagement/component/openAdd.vue @@ -0,0 +1,419 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog :title="titles" v-model="isShowDialog" width="50%" draggable :fullscreen="full" :close-on-click-modal="false"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form ref="ruleFormRef" :model="ruleForm" size="default" label-width="120px" :disabled="disabled"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="预案名称" prop="name"> + <el-input v-model="ruleForm.name" placeholder="请填写队伍名称"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="适用部门" prop="responsibleDepartment"> + <el-tree-select + v-model="ruleForm.responsibleDepartment" + :data="data" + multiple + :render-after-expand="false" + :props="propse" + clearable + show-checkbox + check-strictly + check-on-click-node + placeholder="请选择" + /> + <el-divider /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="预案类型" prop="type"> + <el-select v-model="ruleForm.type" class="w100" placeholder="请选择"> + <el-option label="综合应急预案" value="1"></el-option> + <el-option label="现场处置方案" value="2"></el-option> + <el-option label="专项应急预案" value="3"></el-option> + <el-option label="其他预案" value="4"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="危险源关联" prop="associatedDanger"> + <el-select v-model="ruleForm.associatedDanger" class="w100" placeholder="请选择"> + <el-option label="是" :value="false"></el-option> + <el-option label="否" :value="true"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="预案级别" prop="level"> + <el-select v-model="ruleForm.level" class="w100" placeholder="请选择"> + <el-option label="公司级" value="1"></el-option> + <el-option label="分厂级" value="2"></el-option> + <el-option label="车间级" value="3"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="编写人" prop="authorId"> + <el-input v-model="ruleForm.authorName" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="openUser" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="编写部门" prop="authorDeptId"> + <el-tree-select + v-model="ruleForm.authorDeptId" + check-strictly + :data="data" + class="w100" + :props="propse" + clearable + :render-after-expand="false" + placeholder="请选择" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="发布实施日期" prop="releaseDate"> + <el-date-picker + v-model="ruleForm.releaseDate" + type="datetime" + class="w100" + placeholder="选择日期时间" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急队伍" prop="emergencyTeam"> + <el-input v-model="ruleForm.emergencyTeam" placeholder="请选择" class="input-with-select"> + <template #append> + <el-button :icon="Search" @click="daiInpt(0)" /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="相关附件"> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + :on-change="handleChange" + > + <el-button type="primary">点击上传</el-button> + <template #tip> + <div class="el-upload__tip">添加相关附件</div> + </template> + </el-upload> + </el-form-item> + </el-col> + <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">--> + <!-- <el-form-item label="区域名称" prop="areaName">--> + <!-- <el-input--> + <!-- v-model="ruleForm.areaName"--> + <!-- placeholder="请选择"--> + <!-- class="input-with-select"--> + <!-- >--> + <!-- <template #append>--> + <!-- <el-button :icon="Search" @click="regionsDialog"/>--> + <!-- </template>--> + <!-- </el-input>--> + <!-- </el-form-item>--> + <!-- </el-col>--> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button> + <el-button size="default" type="primary" v-if="disabled == true ? false : true" @click="submitForm(titles, ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + <CheckTemplate ref="Shows" @SearchUser="SearchUser" /> + <DailogSearchUserManger ref="userRef" @SearchUser="onUser" /> + <RegionsDialog ref="openRef" /> + </div> +</template> + +<script lang="ts"> +import { ref, defineComponent, onMounted } from 'vue'; + +import type { UploadUserFile, FormInstance } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { Search, FullScreen } from '@element-plus/icons-vue'; +import DailogSearchUserManger from '/@/components/DailogSearchUserManger/index.vue'; +import CheckTemplate from '/@/components/checkTemplate/index.vue'; +import RegionsDialog from '/@/components/regionsDialog/index.vue'; +import { emergencyPlanApi } from '/@/api/contingencyManagement/emergencyPlan'; +import { goalManagementApi } from '/@/api/goalManagement'; + +export default defineComponent({ + name: 'openAdd', + components: { + CheckTemplate, + DailogSearchUserManger, + RegionsDialog, + }, + setup(prop, { emit }) { + const isShowDialog = ref(false); + const ruleFormRef = ref<FormInstance>(); + const ruleForm = ref({ + name: '', // 预案名称 + type: '', //预案类型 + associatedDanger: '', // 危险源关联 + level: '', // 预案级别 + authorUid: '', // 编写人 + authorName: '', + authorDeptId: '', // 编写部门 + releaseDate: '', // 发布实施日期 + fileList: [ + // { + // fileUrl: 'url', + // fileName: 'name', + // }, + ], + emergencyTeam: '', //应急队伍 + areaList: [], //区域列表 + teamList: [], + deptList: [], + abolishStatus: false, + }); + const titles = ref(); + const disabled = ref(); + + // 打开弹窗 + const openDialog = (title: string, id: number, type: boolean) => { + isShowDialog.value = true; + titles.value = title; + disabled.value = type; + if (title == '查看应急预案管理' || title == '修改应急预案管理') { + emergencyPlanApi() + .seeEmergencyTeam(id) + .then((res) => { + if (res.data.code == 200) { + ruleForm.value = res.data.data; + let arr = []; + for (let i = 0; i < ruleForm.value.teamList.length; i++) { + arr.push(ruleForm.value.teamList[i].emergencyTeam); + } + ruleForm.value.emergencyTeam = arr.toString(); + } + }); + } + }; + //日期选择器 + const releaseDate = ref(''); + // 上传附件 + const fileList = ref<UploadUserFile[]>([]); + //部门树 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + const treeSelect = ref(); + // const trees = ref(); + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + onMounted(() => { + department(); + }); + //定义树形下拉框 + const responsibleDepartment = ref(); + const data = ref(); + + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '新建应急预案管理') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyPlanApi() + .addEmergencyPlan(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + } else if (title == '修改应急预案管理') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyPlanApi() + .editEmergencyTeam(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: '修改成功', + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + } else { + console.log('error submit!', fields); + } + }); + formEl.resetFields(); + ruleForm.value = { + name: '', // 预案名称 + type: '', //预案类型 + associatedDanger: '', // 危险源关联 + level: '', // 预案级别 + authorUid: '', // 编写人 + authorName: '', + authorDeptId: '', // 编写部门 + releaseDate: '', // 发布实施日期 + fileList: [ + // { + // fileUrl: 'url', + // fileName: 'name', + // }, + ], + emergencyTeam: '', //应急队伍 + areaList: [], //区域列表 + teamList: [ + ], + deptList: [], + abolishStatus: false, + }; + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + // 应急队伍弹窗 + const Shows = ref(); + const daiInpt = (data: any) => { + Shows.value.openDailog(data); + }; + const SearchUser = (val: any) => { + let arr = []; + for (let i = 0; i < val.length; i++) { + arr.push(val[i].teamName); + ruleForm.value.teamList.push({ + userUid: val[i].uid, + emergencyTeam: val[i].teamName, + }); + } + ruleForm.value.emergencyTeam = arr.toString(); + }; + // 选择区域弹窗 + const openRef = ref(); + const regionsDialog = () => { + openRef.value.openDailog(); + }; + // 打开用户选择弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDailog(); + }; + //回显 + const onUser = (e: any) => { + ruleForm.value.authorUid = e[0].uid; + ruleForm.value.authorName = e[0].realName; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + fileList, + responsibleDepartment, + data, + Search, + releaseDate, + treeSelect, + // trees, + propse, + department, + daiInpt, + Shows, + SearchUser, + submitForm, + openUser, + userRef, + regionsDialog, + openRef, + toggleFullscreen, + FullScreen, + full, + titles, + disabled, + emit, + isShowDialog, + ruleFormRef, + ruleForm, + resetForm, + onUser, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea { + height: 168px !important; +} +.textarea ::v-deep .el-textarea__inner { + height: 168px !important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal { + height: 0; + margin: 0; + border-top: transparent; +} +.el-select { + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/panManagement/component/startUp.vue b/src/components/contingencyManagement/panManagement/component/startUp.vue new file mode 100644 index 0000000..49f5500 --- /dev/null +++ b/src/components/contingencyManagement/panManagement/component/startUp.vue @@ -0,0 +1,160 @@ +<template> + <div class="system-edit-user-container"> + <el-dialog + :title="titles" + v-model="isShowDialog" + width="30%" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="ruleForm" ref="ruleFormRef" label-width="80px"> + <el-form-item label="备注" > + <el-input v-model="ruleForm.remark" type="textarea" autocomplete="off" /> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)" size="default">取消</el-button> + <el-button size="default" type="primary" @click="submitForm(titles,ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { + ref, + defineComponent +} from 'vue'; + +import type { + FormInstance, +} from 'element-plus' +import { ElMessage } from 'element-plus'; +import { + Search, + FullScreen +} from '@element-plus/icons-vue' +import {emergencyPlanLogApi} from "/@/api/contingencyManagement/emergencyPlanLog"; + +export default defineComponent({ + name: 'openAdd', + components: { + }, + setup(prop, {emit}) { + const isShowDialog = ref(false); + const ruleFormRef = ref<FormInstance>(); + + const ruleForm = ref({ + // id: id, + remark: '', + }) + const titles = ref(); + const disabled = ref(); + // 打开弹窗 + // const openDialog = (title: string ,id: number,) => { + // isShowDialog.value = true; + // titles.value = title; + // if (title == '启动') { + // emergencyPlanLogApi() + // .seeEmergencyPlanLog(id) + // .then((res) => { + // if (res.data.code == 200) { + // ruleForm.value = res.data.data; + // } + // }); + // } + // }; + const openDialog = (title: string) => { + isShowDialog.value = true; + titles.value = title; + }; + const submitForm = async (title: string, formEl: FormInstance | undefined) => { + if (title == '启动') { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + isShowDialog.value = false; + emergencyPlanLogApi() + .addEmergencyPlanLog(ruleForm.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + formEl.resetFields(); + }); + ruleForm.value = { + // id: id, + remark: '', + } + } else { + console.log('error submit!', fields); + } + }); + } + }; + const resetForm = (formEl: FormInstance | undefined) => { + isShowDialog.value = false; + if (!formEl) return; + formEl.resetFields(); + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + Search, + toggleFullscreen, + FullScreen, + full, + titles, + emit, + isShowDialog, + ruleFormRef, + ruleForm, + submitForm, + disabled, + resetForm, + }; + }, +}); +</script> +<style scoped lang="scss"> +.textarea{ + height: 168px!important; +} +.textarea ::v-deep .el-textarea__inner{ + height: 168px!important; +} +::v-deep .el-table__cell { + font-weight: 400; +} +.el-divider--horizontal{ + height: 0; + margin: 0; + border-top: transparent; +} +.el-select{ + width: 100%; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/panManagement/component/upData.vue b/src/components/contingencyManagement/panManagement/component/upData.vue new file mode 100644 index 0000000..cc3e2d0 --- /dev/null +++ b/src/components/contingencyManagement/panManagement/component/upData.vue @@ -0,0 +1,125 @@ +<template> + <el-dialog + v-model="dialogVisible" + title="导入Excel" + width="50%" + draggable + :fullscreen="full" + > + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + multiple + :on-preview="handlePreview" + :on-remove="handleRemove" + :before-remove="beforeRemove" + :limit="3" + :on-exceed="handleExceed" + > + <el-button size="default">下载模板</el-button> + <el-button size="default" type="primary">点击上传</el-button> + <template #tip> + <div class="el-upload__tip"> + 只允许导入“xls”或“xlsx”格式文件! + </div> + </template> + </el-upload> + </el-dialog> +</template> +<script lang="ts"> +import { ref, + defineComponent, +} from "vue"; +import { + ElMessage, + ElMessageBox +} from "element-plus"; +import type { + UploadProps, + UploadUserFile, +} from "element-plus"; +import { + FullScreen +} from '@element-plus/icons-vue' +export default defineComponent({ + setup() { + let dialogVisible =ref<boolean>(false) + const fileList = ref<UploadUserFile[]>([ + // { + // name: "element-plus-logo.svg", + // url: "https://element-plus.org/images/element-plus-logo.svg", + // }, + // { + // name: "element-plus-logo2.svg", + // url: "https://element-plus.org/images/element-plus-logo.svg", + // }, + ]); + + const handleRemove: UploadProps["onRemove"] = (file, uploadFiles) => { + console.log(file, uploadFiles); + }; + + const handlePreview: UploadProps["onPreview"] = (uploadFile) => { + console.log(uploadFile); + }; + + const handleExceed: UploadProps["onExceed"] = (files, uploadFiles) => { + ElMessage.warning( + `The limit is 3, you selected ${ + files.length + } files this time, add up to ${ + files.length + uploadFiles.length + } totally` + ); + }; + + const beforeRemove: UploadProps["beforeRemove"] = ( + uploadFile, + uploadFiles + ) => { + return ElMessageBox.confirm( + `Cancel the transfert of ${uploadFile.name} ?` + ).then( + () => true, + () => false + ); + }; + // 打开弹窗 + const openDialog = (type:string,value:any,projectList: any,projectId:string) => { + dialogVisible.value=true + } + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + dialogVisible, + fileList, + handleRemove, + handlePreview, + handleExceed, + beforeRemove, + openDialog, + toggleFullscreen, + FullScreen, + full, + }; + }, +}); +</script> +<style scoped lang="scss"> +.el-upload__tip{ + margin-left: 100px; + margin-top: 20px; +} +::v-deep .el-dialog__header{ + border-bottom: 1px solid #e8e8e8; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/panManagement/index.vue b/src/components/contingencyManagement/panManagement/index.vue new file mode 100644 index 0000000..cc2ec1b --- /dev/null +++ b/src/components/contingencyManagement/panManagement/index.vue @@ -0,0 +1,626 @@ +<template> + <div class="system-user-container"> + <el-card shadow="hover"> + <div class="system-user-search mb15"> + <el-form :inline="true" class="demo-form-inline"> + <el-form-item> + <el-input size="default" v-model="listQuery.searchParams.name" placeholder="预案名称" style="max-width: 215px"> </el-input> + </el-form-item> + <el-form-item> + <el-select size="default" v-model="listQuery.searchParams.type" placeholder="请选择预案类型" class="ml10" style="max-width: 215px"> + <el-option label="综合应急预案" value="admin"></el-option> + <el-option label="现场处置方案" value="common"></el-option> + <el-option label="专项应急预案" value="common"></el-option> + <el-option label="其他预案" value="common"></el-option> + </el-select> + </el-form-item> + <el-form-item> + <el-button size="default" type="primary" class="ml10" @click="onSubmit"> 查询 </el-button> + <el-button size="default" class="ml10" @click="submitReset"> 重置 </el-button> + </el-form-item> + </el-form> + </div> + <div class="button_Line"> + <div class="button_Left"> + <el-button size="default" type="primary" @click="onOpenAdd"> + <el-icon> + <Plus /> </el-icon + >新建 + </el-button> + <el-button size="default" type="warning" plain :disabled="warning"> + <el-icon> + <Edit /> </el-icon + >修改 + </el-button> + <el-button size="default" type="danger" plain :disabled="danger" @click="onDeleteAll"> + <el-icon> + <Delete /> </el-icon + >删除 + </el-button> + <el-button size="default" type="primary" @click="onabolishLibrary"> 废止库 </el-button> + </div> + <div class="button_Right"> + <!-- <el-button size="default" @click="upButton">--> + <!-- <el-icon>--> + <!-- <Upload />--> + <!-- </el-icon>--> + <!-- </el-button>--> + <!-- <el-button size="default">--> + <!-- <el-icon>--> + <!-- <Download />--> + <!-- </el-icon>--> + <!-- </el-button>--> + <!-- <el-button size="default">--> + <!-- <el-icon>--> + <!-- <Refresh />--> + <!-- </el-icon>--> + <!-- </el-button>--> + </div> + </div> + <el-table :data="tableData" style="width: 100%" ref="multipleTableRef" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55" /> + <el-table-column prop="name" label="预案名称" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="type" label="预案类型" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.type == 1">综合应急预案</span> + <span v-if="scope.row.type == 2">现场处置方案</span> + <span v-if="scope.row.type == 3">专项应急预案</span> + <span v-if="scope.row.type == 4">其他预案</span> + </template> + </el-table-column> + <el-table-column prop="level" label="预案级别" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.level == 1">综合应急预案</span> + <span v-if="scope.row.level == 2">现场处置方案</span> + <span v-if="scope.row.level == 3">专项应急预案</span> + </template> + </el-table-column> + <el-table-column prop="releaseDate" label="发布实施日期" show-overflow-tooltip sortable></el-table-column> + <el-table-column label="操作" width="260" align="center" fixed="right"> + <template #default="scope"> + <el-button size="small" text type="primary" @click="isDialogFormVisible(scope.row.id)"> + <el-icon style="margin-right: 5px"> + <VideoPlay /> </el-icon + >启动 + </el-button> + <el-button size="small" text type="primary" @click="abolish(scope.row.id)"> + <el-icon style="margin-right: 5px"> + <VideoPause /> </el-icon + >废止 + </el-button> + <el-button size="small" text type="primary" @click="onEdit('修改', scope.row.id)"> + <el-icon style="margin-right: 5px"> + <EditPen /> </el-icon + >修改 + </el-button> + <el-button + size="small" + text + type="primary" + v-if="scope.row.approveStatus === 0 || scope.row.approveStatus === null" + @click="initiateApproval(scope.row.id)" + > + 发起审批 + </el-button> + <el-button + size="small" + text + type="primary" + v-if="scope.row.approveStatus === 2 && scope.row.checkApprove === true" + @click="onApproval('修改',scope.row.approveId)" + > + 审批 + </el-button> + <el-button + size="small" + text + type="primary" + v-if="scope.row.approveStatus === 2 && scope.row.checkApprove === false" + @click="onApproval('详情',scope.row.id)" + > + 查看审批 + </el-button> + <el-button size="small" text type="primary" v-if="scope.row.approveStatus === 3" @click="onApprovalProcess(scope.row.id)"> + 查看审批流程 + </el-button> + <!-- <el-button size="small" text type="primary" @click="jumpFrom(0)">--> + <!-- <el-icon style="margin-right: 5px;">--> + <!-- <EditPen />--> + <!-- </el-icon>修改--> + <!-- </el-button>--> + <!-- <el-button size="small" text type="primary" @click="abolish(0)">--> + <!-- 发起审批--> + <!-- </el-button>--> + <el-button size="small" text type="primary" @click="onRowDel(scope.row.id)"> + <el-icon> + <Delete /> </el-icon + >删除 + </el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-if="tableData.length == 0 ? false : true" + v-model:currentPage="pageIndex" + v-model:page-size="pageSize" + :page-sizes="[10, 20, 30]" + :pager-count="5" + class="mt15" + background + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + /> + </div> + </el-card> + <OpenAdd ref="addRef" @myAdd="onMyAdd" /> + <AbolishLibrary ref="abolishRef" @myAdd="onMyAdd" /> + <InitiateApproval ref="initiateApprovalRef" @myAdd="onMyAdd" /> + <Approval ref="approvalRef" @myAdd="onMyAdd" /> + <ApprovalProcess ref="processRef" @myAdd="onMyAdd" /> + <!-- <StartUp ref="startRef" @myAdd="startUp"/>--> + <el-dialog v-model="dialogFormVisible" width="30%" title="启动" :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" ref="ruleFormRef" label-width="80px"> + <el-form-item label="备注"> + <el-input v-model="form.remark" type="textarea" autocomplete="off" /> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogFormVisible = false">取消</el-button> + <el-button type="primary" @click="onDetermine">确定</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { reactive, onMounted, ref, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage } from 'element-plus'; +// import {useRouter} from "vue-router" +import type {} from // FormInstance, +'element-plus'; +import { Plus, Edit, Delete, Upload, Download, Refresh, VideoPause, VideoPlay, EditPen, FullScreen } from '@element-plus/icons-vue'; +import OpenAdd from '/@/views/contingencyManagement/panManagement/component/openAdd.vue'; +// import StartUp from '/@/views/contingencyManagement/panManagement/component/startUp.vue'; +import AbolishLibrary from '/@/views/contingencyManagement/panManagement/component/abolishLibrary.vue'; +import ApprovalProcess from '/@/views/contingencyManagement/panManagement/component/approvalProcess.vue'; +import InitiateApproval from '/@/views/contingencyManagement/panManagement/component/initiateApproval.vue'; +import Approval from '/@/views/contingencyManagement/panManagement/component/approval.vue'; +// import UpData from '/@/views/contingencyManagement/panManagement/component/upData.vue'; +import { emergencyPlanApi } from '/@/api/contingencyManagement/emergencyPlan'; +import { emergencyPlanLogApi } from '/@/api/contingencyManagement/emergencyPlanLog'; + +export default defineComponent({ + name: 'systemUser', + components: { + OpenAdd, + // StartUp, + InitiateApproval, + AbolishLibrary, + Approval, + EditPen, + Plus, + Edit, + Delete, + Upload, + Download, + Refresh, + VideoPause, + VideoPlay, + ApprovalProcess, + // UpData, + emergencyPlanApi, + }, + setup(prop, { emit }) { + // 列表参数 + const listQuery = reactive({ + pageIndex: 1, + pageSize: 10, + searchParams: { + name: '', + type: '', + abolishStatus: false, + }, + }); + // 定义表格数据 + const tableData = ref([]); + // 列表数据请求 + const onSubmit = async () => { + let res = await emergencyPlanApi().getEmergencyPlanList(listQuery); + if (res.data.code === '200') { + tableData.value = res.data.data; + pageIndex.value = res.data.pageIndex; + pageSize.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage({ + showClose: true, + type: 'error', + message: res.data.msg, + }); + } + }; + // 重置 + const submitReset = () => { + listQuery.searchParams.name = ''; + listQuery.searchParams.type = ''; + onSubmit(); + }; + const warning = ref(true); + const danger = ref(true); + + // 上传 + // const upShow=ref() + // const upButton=()=>{ + // upShow.value.openDialog() + // } + // 启动弹窗 + const isDialogFormVisible = (data: any) => { + dialogFormVisible.value = true; + form.value.planId = data; + }; + const dialogFormVisible = ref(false); + const form = ref({ + remark: '', + }); + const onDetermine = () => { + dialogFormVisible.value = false; + emergencyPlanLogApi() + .addEmergencyPlanLog(form.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('myAdd', true); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + emit('myAdd', true); + } + }); + form.value = { + remark: '', + }; + }; + // 打开新增用户弹窗 + const addRef = ref(); + const onOpenAdd = () => { + addRef.value.openDialog('新建应急预案管理', false); + }; + // 新增后刷新 + const onMyAdd = (e: boolean) => { + if (e) { + onSubmit(); + } else { + onSubmit(); + } + }; + // 打开修改应急预案管理弹窗 + const onEdit = (val: string, row: object) => { + if (val == '详情') { + addRef.value.openDialog('查看应急预案管理', row, true); + } else { + addRef.value.openDialog('修改应急预案管理', row, false); + } + }; + + //打开废止库弹窗 + const abolishRef = ref(); + const onabolishLibrary = () => { + abolishRef.value.openDialog(); + }; + // 废止 + const abolish = (data: any) => { + ElMessageBox.confirm('确定要废止所选项吗?', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + emergencyPlanApi() + .EmergencyTeam(data) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }) + .catch(() => {}); + }; + + // 删除用户 + const onRowDel = (id: number) => { + let arr = []; + arr.push(id); + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + emergencyPlanApi() + .deleteEmergencyTeam(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }) + .catch(() => {}); + }; + + const deleteAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deleteAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + // 多选删除 + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + emergencyPlanApi() + .deleteEmergencyTeam(deleteAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + onSubmit(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + onSubmit(); + } + }); + }) + .catch(() => {}); + }; + // 分页 + const pageIndex = ref(); + const pageSize = ref(); + const total = ref(); + // 分页改变 + const onHandleSizeChange = (val: number) => { + listQuery.pageSize = val; + }; + // 分页未改变 + const onHandleCurrentChange = (val: number) => { + listQuery.pageIndex = val; + }; + + // const router=useRouter() + // 修改跳转 + // const jumpFrom=(data:string)=>{ + // router.push({ + // path:"/processForm", + // query:{ + // type:data + // } + // }) + // } + // 发起审批跳转 + // const abolish=(data:string)=>{ + // router.push({ + // path:"/abolishDialog", + // query:{ + // type:data + // } + // }) + // } + // 发起审批弹窗 + const initiateApprovalRef = ref(); + const initiateApproval = (row: object) => { + initiateApprovalRef.value.openDialog('发起审批',row, true); + }; + // 审批 + const approvalRef = ref(); + const onApproval = (val: string,row: object) => { + if(val=='详情'){ + approvalRef.value.openDialog('查看审批', row, true); + } else { + approvalRef.value.openDialog('修改审批', row, false); + } + }; + // 审批流程 + const processRef = ref(); + const onApprovalProcess = () => { + processRef.value.openDialog(); + }; + + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + // 页面加载时 + onMounted(() => { + onSubmit(); + }); + return { + tableData, + onSubmit, + onOpenAdd, //新增 + addRef, + onabolishLibrary, + abolishRef, + abolish, + onRowDel, + onHandleSizeChange, + onHandleCurrentChange, + toggleFullscreen, + FullScreen, + full, + listQuery, + pageIndex, + pageSize, + total, + submitReset, + onMounted, + deleteAll, + warning, + danger, + handleSelectionChange, + onMyAdd, + onDeleteAll, + dialogFormVisible, + isDialogFormVisible, + form, + emit, + onDetermine, + onEdit, + initiateApproval, + initiateApprovalRef, + onApproval, + approvalRef, + onApprovalProcess, + processRef, + }; + }, +}); +</script> +<style scoped lang="scss"> +.table_Box { + padding: 20px; + background-color: #fff; +} +.tableForm { + margin-top: 10px; +} +/*按钮行*/ +.button_Line { + display: flex; + flex-direction: row; + justify-content: space-between; + margin-bottom: 10px; +} +.el-form .el-form-item { + margin-bottom: 0 !important; +} +.el-button--text { + margin-right: 15px; +} +.el-select { + width: 300px; +} +.el-input { + width: 300px; +} +.dialog-footer button:first-child { + margin-right: 10px; +} +//弹窗底部边框线 +::v-deep .el-dialog__footer { + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +//弹窗顶部边框线 +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +//表头 +::v-deep .el-table th.el-table__cell { + background-color: #f6f7fa; + font-weight: 400; + color: #909399; +} +.el-table .sort-caret.ascending { + border-bottom-color: #c0c4cc; +} +//分页 +.pages { + display: flex; + justify-content: flex-end; + margin-top: 15px; +} +::v-deep .el-pagination .el-pager li { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination .el-pager li.is-active { + background-color: #409eff; + color: #fff; +} +::v-deep .el-pagination .btn-prev { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +::v-deep .el-pagination button:disabled { + color: #c0c4cc; +} +::v-deep .el-pagination .btn-next { + margin: 0 5px; + background-color: #f4f4f5; + color: #606266; + min-width: 30px; + border-radius: 2px; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/processForm/component/formInformationTop.vue b/src/components/contingencyManagement/processForm/component/formInformationTop.vue new file mode 100644 index 0000000..ef75063 --- /dev/null +++ b/src/components/contingencyManagement/processForm/component/formInformationTop.vue @@ -0,0 +1,144 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="安全目标指标"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="目标指标编号"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="年度"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="指标值"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" style="padding: 0 20px"> + <el-tab-pane label="考核指标" name="1"> + <el-table :data="tableData" style="width: 100%"> + <el-table-column align="center" type="index" label="序号" width="70" /> + <el-table-column align="center" prop="date" label="责任部门" /> + <el-table-column align="center" prop="name" label="考核指标" /> + <el-table-column align="center" prop="address" label="制定部门" /> + <el-table-column align="center" prop="address" label="制定日期" /> + <el-table-column align="center" label="检查值"> + <template #default> + <el-input v-model="form.name" placeholder=""></el-input> + </template> + </el-table-column> + <el-table-column align="center" prop="address" label="检查人" /> + <el-table-column align="center" prop="address" label="检查时间" /> + </el-table> + <div class="tiao"> + <div class="typeS">审批</div> + </div> + <el-row style="padding:20px 0"> + <el-col :span="6" style="text-align:right">一级审批:</el-col> + <el-col :span="18">同意</el-col> + </el-row> + <el-row style="padding:0 0 20px 0"> + <el-col :span="6"></el-col> + <el-col :span="18"><span class="logoColor">同意</span><span style="margin-right: 8px;">杜建喜</span><span>2021-05-24 04:47:42</span></el-col> + </el-row> + </el-tab-pane> + </el-tabs> +</template> +<script lang="ts"> +import { defineComponent,ref,reactive } from 'vue' + +export default defineComponent({ + setup() { + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + const tableData = [ + { + date: '2016-05-03', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + ]; + const activeName = ref('1'); + return{ + form, + tableData, + activeName + } + }, +}) +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:0 0 20px 0 ; +} +</style> diff --git a/src/components/contingencyManagement/processForm/component/formInformationTops.vue b/src/components/contingencyManagement/processForm/component/formInformationTops.vue new file mode 100644 index 0000000..53eed6a --- /dev/null +++ b/src/components/contingencyManagement/processForm/component/formInformationTops.vue @@ -0,0 +1,312 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="12"> + <el-form-item label="预案名称"> + <el-input v-model="form.name" placeholder="请填写预案名称"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="适用部门"> + <el-tree-select + class="select" + placeholder="请选择" + v-model="value" + :data="data" + :render-after-expand="false" + show-checkbox + multiple + clearable + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预案类型"> + <el-select class="select" v-model="form.region" placeholder="请选择"> + <el-option label="综合应急预案" value="shanghai" /> + <el-option label="现场处置方案" value="beijing" /> + <el-option label="专项应急预案" value="shanghai" /> + <el-option label="其它预案" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="危险源关联"> + <el-select class="select" v-model="form.region" placeholder="请选择"> + <el-option label="是" value="shanghai" /> + <el-option label="否" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预案级别"> + <el-select class="select" v-model="form.region" placeholder="请选择"> + <el-option label="公司及" value="shanghai" /> + <el-option label="分厂级" value="beijing" /> + <el-option label="车间级" value="beijing" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="编写人"> + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="openUser"/> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="编写部门" placeholder="请选择"> + <el-tree-select + class="select" + v-model="value2" + :data="dataSelect" + :render-after-expand="false" + multiple + check-strictly + check-on-click-node + clearable + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="发布实施日期"> + <el-date-picker v-model="datetime" type="datetime" placeholder="选择日期时间" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="应急队伍" prop="telephone" @click="daiInpt" > + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search"/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="预案附件"> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + :on-change="handleChange" + > + <el-button type="primary" + >点击上传</el-button> + <template #tip> + <div class="el-upload__tip"> + 添加相关附件 + </div> + </template> + </el-upload> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="区域名称" prop="telephone"> + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + > + <template #append> + <el-button :icon="Search" @click="regionsDialog"/> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <checkTemplate ref="ShowRef"/> + <userSelections ref="userRef"/> + <RegionsDialog ref="openRef"/> +</template> +<script lang="ts"> +import { + defineComponent, + ref, + reactive +} from 'vue'; +import { + Search +} from '@element-plus/icons-vue' +import UserSelections from "/@/components/userSelections/index.vue" +import CheckTemplate from "/@/components/checkTemplate/index.vue" +import RegionsDialog from "/@/components/regionsDialog/index.vue"; +export default defineComponent({ + components: { + CheckTemplate, + UserSelections, + RegionsDialog, + }, + setup() { + const form = reactive({ + name: '', + value: '', + value2: '', + teamLeader: '', + + // data: '', + // dataSelect: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + + // 可选择树形选择框 + const value = ref() + + const data = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '1-1', + label: '生产运行部', + children: [ + { + value: '1-1-1', + label: '工艺二班', + }, + ], + }, + ], + } + ] + // 树形选择框 + const value2 = ref() + + const dataSelect = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '1-1', + label: '生产运行部', + children: [ + { + value: '1-1-1', + label: '工艺二班', + }, + ], + }, + ], + } + ] + // 应急队伍弹窗 + const ShowRef=ref() + const daiInpt=()=>{ + ShowRef.value.openDailog() + } + // 选择区域弹窗 + const openRef=ref() + const regionsDialog=()=>{ + openRef.value.openDailog() + } + // 打开编写人选择用户弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + // 日期选择 + const datetime = ref('') + return { + form, + value, + data, + value2, + dataSelect, + openUser, + userRef, + Search, + ShowRef, + daiInpt, + openRef, + datetime, + regionsDialog, + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box { + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao { + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0; + position: relative; +} +.typeS { + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor { + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns { + width: 100%; + padding: 20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); +} +.title2 { + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:0 0 20px 0; +} +.select{ + width: 100%; +} +.select ::v-deep .el-select{ + width: 100%; +} +</style> diff --git a/src/components/contingencyManagement/processForm/component/lowerPlate.vue b/src/components/contingencyManagement/processForm/component/lowerPlate.vue new file mode 100644 index 0000000..cbb82fb --- /dev/null +++ b/src/components/contingencyManagement/processForm/component/lowerPlate.vue @@ -0,0 +1,120 @@ +<template> + <div class="box"> + <el-form ref="formS" :model="form" :rules="rules" label-width="120px"> + <el-row> + <el-col :span="15"> + <el-form-item label="流程标题"> + <el-input v-model="form.names" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label="下级审批日期"> + <el-date-picker v-model="form.date1" type="date" placeholder="下级审批日期" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.delivery" label="是否抄送" @change="typeChang"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.delivery"> + <el-col :span="15"> + <el-form-item label="抄送给" prop="resource"> + <el-input v-model="form.resource" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.type" label="指定下一步处理者(不设置就使用默认处理人)"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.type"> + <el-col :span="15"> + <el-form-item label="指定" prop="desc"> + <el-input v-model="form.desc" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> + <DailogSearchUser ref="ShowUser"></DailogSearchUser> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue' +import { Search } from '@element-plus/icons-vue'; +import type { FormInstance, FormRules } from 'element-plus' +export default defineComponent({ + components:{DailogSearchUser}, + setup() { + const formS=ref<FormInstance>() + let form = reactive({ + names: '', + region: '', + date1: '', + date2: '', + delivery: "", + type: "", + resource: '', + desc: '', + }); + const typeChang=()=>{ + console.log('tag',form) + } + const rules = reactive<FormRules>({ + resource: [ + { + type: 'array', + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ], + desc: [ + { + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ]}) + const ShowUser=ref() + const openDai =()=>{ + ShowUser.value.openDailog() + } + return { + form, + rules, + formS, + typeChang, + ShowUser, + openDai, + Search, + }; + }, +}); +</script> + +<style scoped> +.box { + margin: 30px 0 100px 0; + background-color: #fff; + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); + padding: 20px; +} +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/processForm/processForm.vue b/src/components/contingencyManagement/processForm/processForm.vue new file mode 100644 index 0000000..98218a0 --- /dev/null +++ b/src/components/contingencyManagement/processForm/processForm.vue @@ -0,0 +1,137 @@ +<template> + <div class="system-user-container"> + <h4 class="title">胡海涛2022-07-01 16:08:42发起了目标检查上报(检查)--检查</h4> + <div class="box"> + <el-menu + :default-active="activeIndex" + class="el-menu-demo" + background-color="#ebeef5" + text-color="#fff" + active-text-color="#fff" + mode="horizontal" + @select="handleSelect" + > + <el-menu-item index="1">表单信息</el-menu-item> + <el-menu-item index="2">流程图</el-menu-item> + </el-menu> + <div v-if="activeIndex == 1" class="navType"> + <formInformationTop v-if="false"></formInformationTop> + <formInformationTops></formInformationTops> + </div> + <div v-if="activeIndex == 2" class="navType" style="padding:20px 20px 0 20px"> + <div class="title2">流程图</div> + <div style="width:100%;height:400px"></div> + </div> + </div> + <lowerPlate></lowerPlate> + <div class="btns"> + <el-button type="primary">启动</el-button> + </div> + </div> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref,onMounted } from 'vue'; +import { useRouter } from 'vue-router'; +import formInformationTop from './component/formInformationTop.vue' +import formInformationTops from './component/formInformationTops.vue' +import lowerPlate from './component/lowerPlate.vue' +export default defineComponent({ + components:{lowerPlate,formInformationTop,formInformationTops}, + setup() { + const activeIndex = ref('1'); + const handleSelect = (key: string, keyPath: string[]) => { + // console.log(key, keyPath); + activeIndex.value = key; + }; + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + + const router=useRouter() + const Type=onMounted(()=>{ + // console.log("xxxxxxx",router) + }) + + return { + activeIndex, + handleSelect, + form, + router, + Type + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; + padding: 15px; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} + +/*弹窗底部边框线*/ +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +/*弹窗顶部边框线*/ +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +</style> diff --git a/src/components/contingencyManagement/releaseOfDrillStart/component/formInformationTop.vue b/src/components/contingencyManagement/releaseOfDrillStart/component/formInformationTop.vue new file mode 100644 index 0000000..ef75063 --- /dev/null +++ b/src/components/contingencyManagement/releaseOfDrillStart/component/formInformationTop.vue @@ -0,0 +1,144 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="安全目标指标"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="目标指标编号"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="年度"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="指标值"> + <el-input v-model="form.name"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-tabs v-model="activeName" style="padding: 0 20px"> + <el-tab-pane label="考核指标" name="1"> + <el-table :data="tableData" style="width: 100%"> + <el-table-column align="center" type="index" label="序号" width="70" /> + <el-table-column align="center" prop="date" label="责任部门" /> + <el-table-column align="center" prop="name" label="考核指标" /> + <el-table-column align="center" prop="address" label="制定部门" /> + <el-table-column align="center" prop="address" label="制定日期" /> + <el-table-column align="center" label="检查值"> + <template #default> + <el-input v-model="form.name" placeholder=""></el-input> + </template> + </el-table-column> + <el-table-column align="center" prop="address" label="检查人" /> + <el-table-column align="center" prop="address" label="检查时间" /> + </el-table> + <div class="tiao"> + <div class="typeS">审批</div> + </div> + <el-row style="padding:20px 0"> + <el-col :span="6" style="text-align:right">一级审批:</el-col> + <el-col :span="18">同意</el-col> + </el-row> + <el-row style="padding:0 0 20px 0"> + <el-col :span="6"></el-col> + <el-col :span="18"><span class="logoColor">同意</span><span style="margin-right: 8px;">杜建喜</span><span>2021-05-24 04:47:42</span></el-col> + </el-row> + </el-tab-pane> + </el-tabs> +</template> +<script lang="ts"> +import { defineComponent,ref,reactive } from 'vue' + +export default defineComponent({ + setup() { + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + const tableData = [ + { + date: '2016-05-03', + name: 'Tom', + address: 'No. 189, Grove St, Los Angeles', + }, + ]; + const activeName = ref('1'); + return{ + form, + tableData, + activeName + } + }, +}) +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:0 0 20px 0 ; +} +</style> diff --git a/src/components/contingencyManagement/releaseOfDrillStart/component/formInformationTops.vue b/src/components/contingencyManagement/releaseOfDrillStart/component/formInformationTops.vue new file mode 100644 index 0000000..8a1f2a5 --- /dev/null +++ b/src/components/contingencyManagement/releaseOfDrillStart/component/formInformationTops.vue @@ -0,0 +1,440 @@ +<template> + <el-form ref="form" :model="form" label-width="120px"> + <el-row> + <el-col :span="12"> + <el-form-item label="演练名称"> + <el-input v-model="form.name" placeholder="请填写预案名称" disabled></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="演练地点"> + <el-input v-model="form.teamName" placeholder="请填写演练地点" disabled></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="主办部门"> + <el-tree-select + v-model="form.responsibleDepartment" + :data="data" class="w100" + placeholder="请选择" + disabled + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="演练方式" prop="teamLevel"> + <el-select v-model="form.teamLevel" class="w100" placeholder="请选择" disabled> + <el-option label="综合" value="admin"></el-option> + <el-option label="桌面" value="common3"></el-option> + <el-option label="专项" value="common2"></el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="应急预案" prop="telephone" > + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + disabled + > + <template #append> + <el-button :icon="Search" @click="daiInpt" disabled/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="演练级别" prop="teamPhone"> + <el-select v-model="form.teamLevel" class="w100" placeholder="请选择" disabled> + <el-option label="公司级" value="admin"></el-option> + <el-option label="分厂级" value="common"></el-option> + <el-option label="车间级" value="common1"></el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="计划定制日期" prop="teamPhone"> + <el-date-picker v-model="datetime" type="datetime" placeholder="选择日期时间" disabled style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="计划演练日期" prop="teamPhone"> + <el-date-picker v-model="drillDate" type="datetime" placeholder="选择日期时间" disabled style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="修改时间" prop="teamPhone"> + <el-date-picker v-model="editDate" class="w100" type="datetime" placeholder="选择日期时间" disabled style="width: 100%" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="计划定制人" prop="teamPhone"> + <el-input v-model="form.planCustomizer" disabled placeholder="请填写演练地点"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="制定部门" prop="telephone"> + <el-tree-select + v-model="form.responsibleDepartment" + :data="data" class="w100" + placeholder="请选择" + disabled + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练人员" prop="telephone" > + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + disabled + > + <template #append> + <el-button :icon="Search" @click="openUser" disabled/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="演练目的" prop="telephone"> + <el-input + v-model="form.teamLeader" + placeholder="请填写演练目的" + class="input-with-select textarea" + type="textarea" + disabled + > + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练负责人" prop="telephone" > + <el-input + v-model="form.teamLeader" + placeholder="请选择" + class="input-with-select" + disabled + > + <template #append> + <el-button :icon="Search" @click="openUser" disabled/> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="保险措施" prop="teamName"> + <el-input v-model="form.teamName" placeholder="请填写演练名称" disabled></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="演练经费" prop="teamName"> + <el-input v-model="form.teamName" placeholder="请填写演练名称" disabled></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="备注信息" prop="telephone"> + <el-input + v-model="form.teamLeader" + placeholder="请填写备注信息" + class="input-with-select textarea" + type="textarea" + disabled + > + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" style="margin-bottom: 0!important;"> + <el-form-item label="预案附件"> + <el-upload + v-model:file-list="fileList" + class="upload-demo" + action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" + :on-change="handleChange" + disabled + > + <el-button type="primary" disabled + >点击上传</el-button> + <template #tip> + <div class="el-upload__tip"> + 添加相关附件 + </div> + </template> + </el-upload> + </el-form-item> + </el-col> + </el-row> + </el-form> + <checkTemplate ref="ShowRef"/> + <userSelections ref="userRef"/> + <RegionsDialog ref="openRef"/> +</template> +<script lang="ts"> +import { + defineComponent, + ref, + reactive +} from 'vue'; +import { + Search +} from '@element-plus/icons-vue' +import type { + UploadUserFile, + // FormRules, +} from 'element-plus' +import UserSelections from "/@/components/userSelections/index.vue" +import CheckTemplate from "/@/components/checkTemplate/index.vue" +import RegionsDialog from "/@/components/regionsDialog/index.vue"; +export default defineComponent({ + components: { + CheckTemplate, + UserSelections, + RegionsDialog, + }, + setup() { + const form = reactive({ + name: '', + teamName: '', + responsibleDepartment: '', + teamLevel: '', + teamLeader: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + // 上传附件 + const fileList = ref<UploadUserFile[]>([]) + // 可选择树 + const treeSelect = ref() + const tree = [ + { + value: '1', + label: 'Level one 1', + children: [ + { + value: '1-1', + label: 'Level two 1-1', + children: [ + { + value: '1-1-1', + label: 'Level three 1-1-1', + }, + ], + }, + ], + }, + { + value: '2', + label: 'Level one 2', + children: [ + { + value: '2-1', + label: 'Level two 2-1', + children: [ + { + value: '2-1-1', + label: 'Level three 2-1-1', + }, + ], + }, + { + value: '2-2', + label: 'Level two 2-2', + children: [ + { + value: '2-2-1', + label: 'Level three 2-2-1', + }, + ], + }, + ], + }, + { + value: '3', + label: 'Level one 3', + children: [ + { + value: '3-1', + label: 'Level two 3-1', + children: [ + { + value: '3-1-1', + label: 'Level three 3-1-1', + }, + ], + }, + { + value: '3-2', + label: 'Level two 3-2', + children: [ + { + value: '3-2-1', + label: 'Level three 3-2-1', + }, + ], + }, + ], + }, + ] + //定义树形下拉框 + const responsibleDepartment = ref() + const data = [ + { + value: '1', + label: '广汇能源综合物流发展有限责任公司', + children: [ + { + value: '1-1', + label: '经营班子', + children: [], + }, + ], + }, + { + value: '2', + label: '生产运行部', + children: [ + { + value: '2-1', + label: '灌装一班', + children: [] + }, + { + value: '2-2', + label: '工艺四班', + children: [], + }, + ], + }, + { + value: '3', + label: '设备部', + children: [ + { + value: '3-1', + label: '仪表班', + children: [], + }, + { + value: '3-2', + label: '机修班', + children: [], + }, + ], + }, + ] + // 计划定制日期 + const datetime = ref('') + // 计划演练日期 + const drillDate = ref('') + // 修改时间 + const editDate = ref('') + // 应急队伍弹窗 + const ShowRef=ref() + const daiInpt=()=>{ + ShowRef.value.openDailog() + } + // 选择区域弹窗 + const openRef=ref() + const regionsDialog=()=>{ + openRef.value.openDailog() + } + // 打开编写人选择用户弹窗 + const userRef = ref(); + const openUser = () => { + userRef.value.openDialog(); + }; + return { + form, + data, + treeSelect, + tree, + drillDate, + editDate, + openUser, + userRef, + Search, + ShowRef, + daiInpt, + responsibleDepartment, + openRef, + datetime, + regionsDialog, + fileList, + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box { + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; +} +.tiao { + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0; + position: relative; +} +.typeS { + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor { + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns { + width: 100%; + padding: 20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); +} +.title2 { + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} +.el-row{ + padding:0 0 20px 0; +} +.select{ + width: 100%; +} +.select ::v-deep .el-select{ + width: 100%; +} +</style> diff --git a/src/components/contingencyManagement/releaseOfDrillStart/component/lowerPlate.vue b/src/components/contingencyManagement/releaseOfDrillStart/component/lowerPlate.vue new file mode 100644 index 0000000..cbb82fb --- /dev/null +++ b/src/components/contingencyManagement/releaseOfDrillStart/component/lowerPlate.vue @@ -0,0 +1,120 @@ +<template> + <div class="box"> + <el-form ref="formS" :model="form" :rules="rules" label-width="120px"> + <el-row> + <el-col :span="15"> + <el-form-item label="流程标题"> + <el-input v-model="form.names" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label="下级审批日期"> + <el-date-picker v-model="form.date1" type="date" placeholder="下级审批日期" style="width: 100%" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.delivery" label="是否抄送" @change="typeChang"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.delivery"> + <el-col :span="15"> + <el-form-item label="抄送给" prop="resource"> + <el-input v-model="form.resource" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="15"> + <el-form-item label=""> + <el-checkbox v-model="form.type" label="指定下一步处理者(不设置就使用默认处理人)"/> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="form.type"> + <el-col :span="15"> + <el-form-item label="指定" prop="desc"> + <el-input v-model="form.desc" placeholder=""> + <template #append> <el-button :icon="Search" @click="openDai" /> </template + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> + <DailogSearchUser ref="ShowUser"></DailogSearchUser> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import DailogSearchUser from '/@/components/DailogSearchUser/index.vue' +import { Search } from '@element-plus/icons-vue'; +import type { FormInstance, FormRules } from 'element-plus' +export default defineComponent({ + components:{DailogSearchUser}, + setup() { + const formS=ref<FormInstance>() + let form = reactive({ + names: '', + region: '', + date1: '', + date2: '', + delivery: "", + type: "", + resource: '', + desc: '', + }); + const typeChang=()=>{ + console.log('tag',form) + } + const rules = reactive<FormRules>({ + resource: [ + { + type: 'array', + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ], + desc: [ + { + required: true, + message: '用户不能为空', + trigger: 'change', + }, + ]}) + const ShowUser=ref() + const openDai =()=>{ + ShowUser.value.openDailog() + } + return { + form, + rules, + formS, + typeChang, + ShowUser, + openDai, + Search, + }; + }, +}); +</script> + +<style scoped> +.box { + margin: 30px 0 100px 0; + background-color: #fff; + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); + padding: 20px; +} +.el-row { + padding: 0 0 20px 0; +} +</style> \ No newline at end of file diff --git a/src/components/contingencyManagement/releaseOfDrillStart/releaseOfDrillStart.vue b/src/components/contingencyManagement/releaseOfDrillStart/releaseOfDrillStart.vue new file mode 100644 index 0000000..98218a0 --- /dev/null +++ b/src/components/contingencyManagement/releaseOfDrillStart/releaseOfDrillStart.vue @@ -0,0 +1,137 @@ +<template> + <div class="system-user-container"> + <h4 class="title">胡海涛2022-07-01 16:08:42发起了目标检查上报(检查)--检查</h4> + <div class="box"> + <el-menu + :default-active="activeIndex" + class="el-menu-demo" + background-color="#ebeef5" + text-color="#fff" + active-text-color="#fff" + mode="horizontal" + @select="handleSelect" + > + <el-menu-item index="1">表单信息</el-menu-item> + <el-menu-item index="2">流程图</el-menu-item> + </el-menu> + <div v-if="activeIndex == 1" class="navType"> + <formInformationTop v-if="false"></formInformationTop> + <formInformationTops></formInformationTops> + </div> + <div v-if="activeIndex == 2" class="navType" style="padding:20px 20px 0 20px"> + <div class="title2">流程图</div> + <div style="width:100%;height:400px"></div> + </div> + </div> + <lowerPlate></lowerPlate> + <div class="btns"> + <el-button type="primary">启动</el-button> + </div> + </div> +</template> +<script lang="ts"> +import { defineComponent, reactive, ref,onMounted } from 'vue'; +import { useRouter } from 'vue-router'; +import formInformationTop from './component/formInformationTop.vue' +import formInformationTops from './component/formInformationTops.vue' +import lowerPlate from './component/lowerPlate.vue' +export default defineComponent({ + components:{lowerPlate,formInformationTop,formInformationTops}, + setup() { + const activeIndex = ref('1'); + const handleSelect = (key: string, keyPath: string[]) => { + // console.log(key, keyPath); + activeIndex.value = key; + }; + const form = reactive({ + name: '', + region: '', + date1: '', + date2: '', + delivery: false, + type: [], + resource: '', + desc: '', + }); + + const router=useRouter() + const Type=onMounted(()=>{ + // console.log("xxxxxxx",router) + }) + + return { + activeIndex, + handleSelect, + form, + router, + Type + }; + }, +}); +</script> +<style scoped> +.title { + text-align: center; + font-size: 16px; + margin-bottom: 20px; +} +.box{ + border: 1px solid #dcdfe6; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%); +} +.navType { + background-color: #fff; + padding: 15px; +} +.tiao{ + width: 100%; + height: 1px; + background-color: #dcdfe6; + margin: 30px 0 ; + position: relative; +} +.typeS{ + width: 80px; + background-color: #fff; + position: absolute; + left: 30px; + top: -9px; + font-size: 14px; + text-align: center; +} +.logoColor{ + background-color: #67c23a; + color: #fff; + padding: 5px 8px; + border-radius: 5px; + margin-right: 5px; +} +.btns{ + width: 100%; + padding:20px 0; + background-color: #fff; + position: fixed; + bottom: 0px; + left: 0px; + text-align: center; + box-shadow: 0 -3px 5px 0 rgb(0 0 0 / 12%); + +} +.title2{ + padding: 20px 0 20px 10px; + width: 100%; + border: 1px solid #dcdfe6; +} + +/*弹窗底部边框线*/ +::v-deep .el-dialog__footer{ + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +/*弹窗顶部边框线*/ +::v-deep .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; +} +</style> diff --git a/src/components/emergencySupplies/index.vue b/src/components/emergencySupplies/index.vue index 903a5fa..8bb4aba 100644 --- a/src/components/emergencySupplies/index.vue +++ b/src/components/emergencySupplies/index.vue @@ -78,7 +78,7 @@ FullScreen } from '@element-plus/icons-vue'; import { ElMessage } from 'element-plus'; -import {emergencySuppliesApi} from "/@/api/emergencyResources"; +import {emergencySuppliesApi} from "/@/api/contingencyManagement/emergencyResources"; export default defineComponent({ setup(props, { emit }) { const dialogVisible = ref<boolean>(false); diff --git a/src/components/equipmentDailog/Dailog.vue b/src/components/equipmentDailog/Dailog.vue index 249d42e..f56333f 100644 --- a/src/components/equipmentDailog/Dailog.vue +++ b/src/components/equipmentDailog/Dailog.vue @@ -1,20 +1,20 @@ <template> - <el-dialog v-model="dialogVisible" :fullscreen="full" :before-close="resetForm" draggable :title="titles" width="60%"> + <el-dialog v-model="dialogVisible" :fullscreen="full" @close="resetForm(ruleFormRef)" draggable :title="titles" width="60%"> <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> - <el-form :model="form" :disabled="disabled" label-width="120px" class="formType"> - <el-form-item label="装置设施名称" size="default"> + <el-form :model="form" ref="ruleFormRef" :rules="rules" :disabled="disabled" label-width="120px" class="formType"> + <el-form-item label="装置设施名称" size="default" prop="qName"> <el-input v-model="form.qName" placeholder="请填写装置设施名称" /> </el-form-item> - <el-form-item label="装置设施位号" size="default"> + <el-form-item label="装置设施位号" size="default" prop="positionNum"> <el-input v-model="form.positionNum" placeholder="请填写装置设施位号" /> </el-form-item> - <el-form-item label="装置设施用途" size="default"> + <el-form-item label="装置设施用途" size="default" prop="qUsage"> <el-input v-model="form.qUsage" placeholder="请填写装置设施用途" /> </el-form-item> - <el-form-item label="装置设施型号" size="default"> + <el-form-item label="装置设施型号" size="default" prop="model"> <el-input v-model="form.model" placeholder="请填写装置设施型号" /> </el-form-item> - <el-form-item label="类型/类别外键" size="default"> + <el-form-item label="类型/类别外键" size="default" prop="equipmentTypeId"> <el-input v-model="form.equipmentTypeId" placeholder="请选择"> <template #append> <el-button :icon="Search" @click="opencategory"></el-button> @@ -28,43 +28,43 @@ </template> </el-input> </el-form-item> --> - <el-form-item label="单位部门" size="default"> + <el-form-item label="单位部门" size="default" prop="departmentId"> <el-tree-select v-model="form.departmentId" :data="data" check-strictly="true" class="w100" :props="propse" placeholder="请选择" /> </el-form-item> - <el-form-item label="设置部位" size="default"> + <el-form-item label="设置部位" size="default" prop="setPart"> <el-input v-model="form.setPart" placeholder="请填写设置部位" /> </el-form-item> - <el-form-item label="生产日期" size="default"> + <el-form-item label="生产日期" size="default" prop="produceTime"> <el-date-picker v-model="form.produceTime" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> </el-form-item> - <el-form-item label="使用期限(天)" size="default"> + <el-form-item label="使用期限(天)" size="default" prop="useEndDay"> <el-input v-model="form.useEndDay" placeholder="请填写使用期限" /> </el-form-item> - <el-form-item label="生命周期" size="default"> + <el-form-item label="生命周期" size="default" prop="lifeCycle"> <el-select v-model="form.lifeCycle" placeholder="请选择" style="width: 100%"> - <el-option label="已投用" value="1" /> - <el-option label="库存中" value="2" /> - <el-option label="报废" value="3" /> + <el-option label="已投用" :value="1" /> + <el-option label="库存中" :value="2" /> + <el-option label="报废" :value="3" /> </el-select> </el-form-item> - <el-form-item label="投用日期" size="default"> + <el-form-item label="投用日期" size="default" prop="useDate"> <el-date-picker v-model="form.useDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> </el-form-item> - <el-form-item label="维修状态" size="default"> + <el-form-item label="维修状态" size="default" prop="repairStatus"> <el-select v-model="form.repairStatus" placeholder="请选择" style="width: 100%"> - <el-option label="维修中" value="1" /> - <el-option label="已修好" value="2" /> + <el-option label="维修中" :value="1" /> + <el-option label="已修好" :value="2" /> </el-select> </el-form-item> - <el-form-item label="停用状态" size="default"> + <el-form-item label="停用状态" size="default" prop="stopStatus"> <el-select v-model="form.stopStatus" placeholder="请选择" style="width: 100%"> - <el-option label="停用" value="1" /> - <el-option label="在用" value="2" /> - <el-option label="维修" value="3" /> - <el-option label="报废" value="4" /> + <el-option label="停用" :value="1" /> + <el-option label="在用" :value="2" /> + <el-option label="维修" :value="3" /> + <el-option label="报废" :value="4" /> </el-select> </el-form-item> - <el-form-item label="上次检查日期" size="default"> + <el-form-item label="上次检查日期" size="default" prop="previousCheckDate"> <el-date-picker v-model="form.previousCheckDate" format="YYYY-MM-DD HH:mm:ss" @@ -73,10 +73,10 @@ style="width: 100%" /> </el-form-item> - <el-form-item label="上次检测日期" size="default"> + <el-form-item label="上次检测日期" size="default" prop="previousTestDate"> <el-date-picker v-model="form.previousTestDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> </el-form-item> - <el-form-item label="上次保养日期" size="default"> + <el-form-item label="上次保养日期" size="default" prop="previousTakecareDate"> <el-date-picker v-model="form.previousTakecareDate" format="YYYY-MM-DD HH:mm:ss" @@ -85,23 +85,23 @@ style="width: 100%" /> </el-form-item> - <el-form-item label="下次检查日期" size="default"> + <el-form-item label="下次检查日期" size="default" prop="nextCheckDate"> <el-date-picker v-model="form.nextCheckDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> </el-form-item> - <el-form-item label="下次检测日期" size="default"> + <el-form-item label="下次检测日期" size="default" prop="nextTestDate"> <el-date-picker v-model="form.nextTestDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> </el-form-item> - <el-form-item label="下次保养日期" size="default"> + <el-form-item label="下次保养日期" size="default" prop="nextTakecareDate"> <el-date-picker v-model="form.nextTakecareDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> </el-form-item> - <el-form-item label="负责人" size="default"> - <el-input v-model="form.leadingPersonId" placeholder="请选择"> + <el-form-item label="负责人" size="default" prop="leadingPersonName"> + <el-input v-model="form.leadingPersonName" placeholder="请选择"> <template #append> - <el-button :icon="Search" @click="openUser(0)"></el-button> + <el-button :icon="Search" @click="openUser(1)"></el-button> </template> </el-input> </el-form-item> - <el-form-item label="负责人部门" size="default"> + <el-form-item label="负责人部门" size="default" prop="leadingPersonDepartmentId"> <el-tree-select v-model="form.leadingPersonDepartmentId" :data="data" @@ -111,80 +111,80 @@ placeholder="请选择" /> </el-form-item> - <el-form-item label="供应商" size="default"> + <el-form-item label="供应商" size="default" prop="supplyName"> <el-input v-model="form.supplyName" placeholder="请填写供应商" /> </el-form-item> - <el-form-item label="使用说明" size="default"> + <el-form-item label="使用说明" size="default" prop="useMemo"> <el-input v-model="form.useMemo" placeholder="请填写使用说明" /> </el-form-item> - <el-form-item label="是否检查" size="default"> + <el-form-item label="是否检查" size="default" prop="isNeedCheck"> <el-select v-model="form.isNeedCheck" placeholder="请选择" style="width: 100%"> - <el-option label="是" value="1" /> - <el-option label="否" value="2" /> + <el-option label="是" :value="1" /> + <el-option label="否" :value="2" /> </el-select> </el-form-item> - <el-form-item label="检查周期" size="default"> + <el-form-item label="检查周期" size="default" prop="checkCycle"> <el-input v-model="form.checkCycle" placeholder="请填写检查周期" /> </el-form-item> - <el-form-item label="检查提前提醒" size="default"> + <el-form-item label="检查提前提醒" size="default" prop="checkWarn"> <el-input v-model="form.checkWarn" placeholder="请填写检查提前提醒" /> </el-form-item> - <el-form-item label="是否检测" size="default"> + <el-form-item label="是否检测" size="default" prop="isNeedTest"> <el-select v-model="form.isNeedTest" placeholder="请选择" style="width: 100%"> - <el-option label="是" value="1" /> - <el-option label="否" value="2" /> + <el-option label="是" :value="1" /> + <el-option label="否" :value="2" /> </el-select> </el-form-item> - <el-form-item label="检测周期" size="default"> + <el-form-item label="检测周期" size="default" prop="testCycle"> <el-input v-model="form.testCycle" placeholder="请填写检测周期" /> </el-form-item> - <el-form-item label="检测提前提醒" size="default"> + <el-form-item label="检测提前提醒" size="default" prop="testWarn"> <el-input v-model="form.testWarn" placeholder="请填写检测提前提醒" /> </el-form-item> - <el-form-item label="是否保养" size="default"> + <el-form-item label="是否保养" size="default" prop="isNeedTakecare"> <el-select v-model="form.isNeedTakecare" placeholder="请选择" style="width: 100%"> - <el-option label="是" value="1" /> - <el-option label="否" value="2" /> + <el-option label="是" :value="1" /> + <el-option label="否" :value="2" /> </el-select> </el-form-item> - <el-form-item label="检查内容" size="default"> + <el-form-item label="检查内容" size="default" prop="checkContent"> <el-input v-model="form.checkContent" placeholder="请填写检查内容" /> </el-form-item> - <el-form-item label="负责部门" size="default"> + <el-form-item label="负责部门" size="default" prop="leadingDepartmentId"> <el-tree-select v-model="form.leadingDepartmentId" :data="data" check-strictly="true" class="w100" :props="propse" placeholder="请选择" /> </el-form-item> - <el-form-item label="检查指标" size="default"> + <el-form-item label="检查指标" size="default" prop="checkPoint"> <el-input v-model="form.checkPoint" placeholder="请填写检查指标" /> </el-form-item> - <el-form-item label="预警值" size="default"> + <el-form-item label="预警值" size="default" prop="alertNum"> <el-input v-model="form.alertNum" placeholder="请填写预警值" /> </el-form-item> - <el-form-item label="联锁值" size="default"> + <el-form-item label="联锁值" size="default" prop="lockNum"> <el-input v-model="form.lockNum" placeholder="请填写联锁值" /> </el-form-item> - <el-form-item label="停用理由" size="default"> + <el-form-item label="停用理由" size="default" prop="stopReason"> <el-input v-model="form.stopReason" placeholder="请填写停用理由" /> </el-form-item> - <el-form-item label="停用后措施" size="default"> + <el-form-item label="停用后措施" size="default" prop="afterStopStep"> <el-input v-model="form.afterStopStep" placeholder="请填写停用后措施" /> </el-form-item> - <el-form-item label="实际停用日期" size="default"> + <el-form-item label="实际停用日期" size="default" prop="actualStopDate"> <el-date-picker v-model="form.actualStopDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> </el-form-item> - <el-form-item label="停用提交人" size="default"> - <el-input v-model="form.stopSubmitPersonId" placeholder="请选择"> + <el-form-item label="停用提交人" size="default" prop="stopSubmitPersonName"> + <el-input v-model="form.stopSubmitPersonName" placeholder="请选择"> <template #append> - <el-button :icon="Search" @click="openUser(1)"></el-button> + <el-button :icon="Search" @click="openUser(2)"></el-button> </template> </el-input> </el-form-item> - <el-form-item label="停用提交日期" size="default"> + <el-form-item label="停用提交日期" size="default" prop="stopSubmitDate"> <el-date-picker v-model="form.stopSubmitDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" /> </el-form-item> - <el-form-item label="恢复理由" size="default"> + <el-form-item label="恢复理由" size="default" prop="recoveryReason"> <el-input v-model="form.recoveryReason" placeholder="请填写恢复理由" /> </el-form-item> - <el-form-item label="恢复填报日期" size="default"> + <el-form-item label="恢复填报日期" size="default" prop="recoverySubmitDate"> <el-date-picker v-model="form.recoverySubmitDate" format="YYYY-MM-DD HH:mm:ss" @@ -193,7 +193,7 @@ style="width: 100%" /> </el-form-item> - <el-form-item label="实际恢复日期" size="default"> + <el-form-item label="实际恢复日期" size="default" prop="actualRecoveryDate"> <el-date-picker v-model="form.actualRecoveryDate" format="YYYY-MM-DD HH:mm:ss" @@ -202,10 +202,10 @@ style="width: 100%" /> </el-form-item> - <el-form-item label="报废理由" size="default"> + <el-form-item label="报废理由" size="default" prop="destoryReason"> <el-input v-model="form.destoryReason" placeholder="请填写报废理由" /> </el-form-item> - <el-form-item label="报废填报日期" size="default"> + <el-form-item label="报废填报日期" size="default" prop="destorySubmitDate"> <el-date-picker v-model="form.destorySubmitDate" format="YYYY-MM-DD HH:mm:ss" @@ -214,7 +214,7 @@ style="width: 100%" /> </el-form-item> - <el-form-item label="实际报废日期" size="default"> + <el-form-item label="实际报废日期" size="default" prop="actualDestoryDate"> <el-date-picker v-model="form.actualDestoryDate" format="YYYY-MM-DD HH:mm:ss" @@ -226,10 +226,10 @@ </el-form> <el-tabs v-model="activeName" class="demo-tabs"> <el-tab-pane label="设备保养" name="first"> - <el-button type="primary" size="default" @click="openMaintenance('新增', '')">新增</el-button> + <el-button type="primary" size="default" :disabled="disabled" @click="openMaintenance('新增', '')">新增</el-button> <el-table :data="form.takecareDetailList" style="width: 100%"> <el-table-column align="center" prop="takecareMemo" label="保养情况" /> - <el-table-column align="center" prop="leadingPersonId" label="保养负责人" /> + <el-table-column align="center" prop="leadingPersonName" label="保养负责人" /> <el-table-column align="center" prop="takecareDate" :formatter="timeDate" label="保养日期" /> <el-table-column align="center" prop="leadingPersonDepartmentId" label="保养负责人单位" /> <el-table-column align="center" label="操作"> @@ -242,7 +242,7 @@ </el-table> </el-tab-pane> <el-tab-pane label="设备检测" name="second"> - <el-button type="primary" size="default" @click="openDetect('新增', '')">新增</el-button> + <el-button type="primary" size="default" :disabled="disabled" @click="openDetect('新增', '')">新增</el-button> <el-table :data="form.testDetailList" style="width: 100%"> <el-table-column align="center" prop="testPersonId" label="检测人" /> <el-table-column align="center" prop="testDate" :formatter="timeDate" label="检测日期" /> @@ -260,7 +260,7 @@ </el-table> </el-tab-pane> <el-tab-pane label="设备维修" name="third"> - <el-button type="primary" size="default" @click="openRepair('新增', '')">新增</el-button> + <el-button type="primary" size="default" :disabled="disabled" @click="openRepair('新增', '')">新增</el-button> <el-table :data="form.repaireDetailList" style="width: 100%"> <el-table-column align="center" prop="exceptionInfo" label="设施异常项" /> <el-table-column align="center" prop="repairStatus" label="维修状态" /> @@ -279,7 +279,7 @@ </el-table> </el-tab-pane> <el-tab-pane label="检查标准设置" name="fourth"> - <el-button type="primary" size="default" @click="openStandard('新增', '')">新增</el-button> + <el-button type="primary" size="default" :disabled="disabled" @click="openStandard('新增', '')">新增</el-button> <el-table :data="form.checkStandardeDetailList" style="width: 100%"> <el-table-column align="center" prop="indexNum" label="序号" width="75" /> <el-table-column align="center" prop="checkContent" label="检查内容" /> @@ -328,8 +328,8 @@ </el-tabs> <template #footer> <span class="dialog-footer"> - <el-button @click="resetForm">关闭</el-button> - <el-button type="primary" @click="submitForm">确定</el-button> + <el-button @click="resetForm(ruleFormRef)">关闭</el-button> + <el-button type="primary" @click="submitForm(ruleFormRef)">确定</el-button> </span> </template> </el-dialog> @@ -349,18 +349,18 @@ import maintenanceDailog from './maintenanceDailog.vue'; import detectDailog from './detectDailog.vue'; import repairDailog from './repairDailog.vue'; -import {timeDate} from '/@/assets/index.ts' +import { timeDate } from '/@/assets/index.ts'; import standardDailog from './standardDailog.vue'; import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; -import { ElMessage, ElMessageBox } from 'element-plus'; +import { ElMessage, ElMessageBox, FormInstance, FormRules } from 'element-plus'; import type { UploadProps, UploadUserFile } from 'element-plus'; import { facilityManagementApi } from '/@/api/facilityManagement'; import { goalManagementApi } from '/@/api/goalManagement'; -import { number } from 'echarts'; export default defineComponent({ components: { categoryDailog, regionDailog, DailogSearchUser, maintenanceDailog, detectDailog, repairDailog, standardDailog }, setup(props, { emit }) { const dialogVisible = ref(false); + const ruleFormRef = ref<FormInstance>(); const form = ref({ supplyName: '', @@ -409,6 +409,7 @@ checkPoint: '', leadingPersonId: '', + leadingPersonName: '', qName: '', @@ -467,7 +468,7 @@ lockNum: '', stopSubmitPersonId: '', - + stopSubmitPersonName: '', afterStopStep: '', lifeCycle: '', @@ -512,272 +513,94 @@ } }); }; + const rules = reactive<FormRules>({ + qName: [], + positionNum: [], + qUsage: [], + model: [], + equipmentTypeId: [], + departmentId: [], + setPart: [], + produceTime: [], + useEndDay: [], + lifeCycle: [], + useDate: [], + repairStatus: [], + stopStatus: [], + previousCheckDate: [], + previousTestDate: [], + previousTakecareDate: [], + nextCheckDate: [], + nextTestDate: [], + nextTakecareDate: [], + leadingPersonName: [], + leadingPersonDepartmentId: [], + supplyName: [], + useMemo: [], + isNeedCheck: [], + checkCycle: [], + checkWarn: [], + isNeedTest: [], + testCycle: [], + testWarn: [], + isNeedTakecare: [], + checkContent: [], + leadingDepartmentId: [], + checkPoint: [], + alertNum: [], + lockNum: [], + stopReason: [], + afterStopStep: [], + actualStopDate: [], + stopSubmitPersonName: [], + stopSubmitDate: [], + recoveryReason: [], + recoverySubmitDate: [], + actualRecoveryDate: [], + destoryReason: [], + destorySubmitDate: [], + actualDestoryDate: [], + }); // 提交 - const submitForm = () => { - form.value.delTakecareDetails = deleteAId.value.toString(); - form.value.delTestDetails = deleteBId.value.toString(); - form.value.delRepaireDetails = deleteCId.value.toString(); - form.value.delCheckStandardeDetails = deleteDId.value.toString(); - dialogVisible.value = false; - facilityManagementApi() - .getequipmentInfoAddOrUpdate(form.value) - .then((res) => { - if (res.data.code == 200) { - ElMessage({ - message: res.data.msg, - type: 'success', + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + form.value.delTakecareDetails = deleteAId.value.toString(); + form.value.delTestDetails = deleteBId.value.toString(); + form.value.delRepaireDetails = deleteCId.value.toString(); + form.value.delCheckStandardeDetails = deleteDId.value.toString(); + dialogVisible.value = false; + facilityManagementApi() + .getequipmentInfoAddOrUpdate(form.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + emit('navAddorUpdata'); + } else { + ElMessage.error(res.data.msg); + } }); - emit('navAddorUpdata'); - } else { - ElMessage.error(res.data.msg); - } - }); - form.value = { - supplyName: '', - - nextTestDate: '', - - qUsage: '', - - departmentId: '', - - produceTime: '', - - actualStopDate: '', - - takecareDetailList: [], - - infoType: '', - - leadingDepartmentId: '', - - useEndDay: '', - - previousTakecareDate: '', - - previousCheckDate: '', - - model: '', - - stopStatus: '', - - testWarn: '', - - stopSubmitDate: '', - - repairStatus: '', - - takecareStardardeDetailList: [ - { - filePath: '123', - }, - ], - - nextCheckDate: '', - - checkCycle: '', - - checkPoint: '', - - leadingPersonId: '', - - qName: '', - - nextTakecareDate: '', - - setPart: '', - - checkStandardeDetailList: [], - - actualDestoryDate: '', - - isNeedTest: '', - - alertNum: '', - - checkContent: '', - - useMemo: '', - - previousTestDate: '', - - isNeedTakecare: '', - - destoryReason: '', - - checkDetailList: [], - - positionNum: '', - - testCycle: '', - - recoveryReason: '', - - isNeedCheck: '', - - actualRecoveryDate: '', - - leadingPersonDepartmentId: '', - - stopReason: '', - - destorySubmitDate: '', - - testDetailList: [], - - checkWarn: '', - - repaireDetailList: [], - - equipmentTypeId: 1, - - useDate: '', - - recoverySubmitDate: '', - - lockNum: '', - - stopSubmitPersonId: '', - - afterStopStep: '', - - lifeCycle: '', - - delCheckStandardeDetails: '', - - delTakecareStardardeDetails: '', - - delTakecareDetails: '', - - delRepaireDetails: '', - - delTestDetails: '', - }; + } + }); + formEl.resetFields(); + form.value.takecareDetailList = []; + form.value.testDetailList = []; + form.value.repaireDetailList = []; + form.value.checkStandardeDetailList = []; }; // 取消 - const resetForm = () => { + const resetForm = (formEl: FormInstance | undefined) => { + if (!formEl) return; + formEl.resetFields(); + form.value.takecareDetailList = []; + form.value.testDetailList = []; + form.value.repaireDetailList = []; + form.value.checkStandardeDetailList = []; dialogVisible.value = false; - form.value = { - supplyName: '', - - nextTestDate: '', - - qUsage: '', - - departmentId: '', - - produceTime: '', - - actualStopDate: '', - - takecareDetailList: [], - - infoType: '', - - leadingDepartmentId: '', - - useEndDay: '', - - previousTakecareDate: '', - - previousCheckDate: '', - - model: '', - - stopStatus: '', - - testWarn: '', - - stopSubmitDate: '', - - repairStatus: '', - - takecareStardardeDetailList: [ - { - filePath: '123', - }, - ], - - nextCheckDate: '', - - checkCycle: '', - - checkPoint: '', - - leadingPersonId: '', - - qName: '', - - nextTakecareDate: '', - - setPart: '', - - checkStandardeDetailList: [], - - actualDestoryDate: '', - - isNeedTest: '', - - alertNum: '', - - checkContent: '', - - useMemo: '', - - previousTestDate: '', - - isNeedTakecare: '', - - destoryReason: '', - - checkDetailList: [], - - positionNum: '', - - testCycle: '', - - recoveryReason: '', - - isNeedCheck: '', - - actualRecoveryDate: '', - - leadingPersonDepartmentId: '', - - stopReason: '', - - destorySubmitDate: '', - - testDetailList: [], - - checkWarn: '', - - repaireDetailList: [], - - equipmentTypeId: 1, - - useDate: '', - - recoverySubmitDate: '', - - lockNum: '', - - stopSubmitPersonId: '', - - afterStopStep: '', - - lifeCycle: '', - - delCheckStandardeDetails: '', - - delTakecareStardardeDetails: '', - - delTakecareDetails: '', - - delRepaireDetails: '', - - delTestDetails: '', - }; }; const activeName = ref('first'); const index = ref<any>(); @@ -895,10 +718,12 @@ }; const userId = (val: any, type: number) => { console.log(val, type); - if (type == 0) { + if (type == 1) { form.value.leadingPersonId = val.uid; - } else if (type == 1) { + form.value.leadingPersonName = val.realName; + } else if (type == 2) { form.value.stopSubmitPersonId = val.uid; + form.value.stopSubmitPersonName = val.realName; } }; //全屏 @@ -929,6 +754,7 @@ }; const data = ref(); return { + rules, userId, department, propse, @@ -978,7 +804,8 @@ full, toggleFullscreen, FullScreen, - timeDate, + timeDate, + ruleFormRef, }; }, }); diff --git a/src/components/equipmentDailog/DailogS.vue b/src/components/equipmentDailog/DailogS.vue index ff4fe8f..749925a 100644 --- a/src/components/equipmentDailog/DailogS.vue +++ b/src/components/equipmentDailog/DailogS.vue @@ -40,7 +40,7 @@ </el-col> <el-col :span="11" :offset="2"> <el-form-item label="联系人" size="default"> - <el-input v-model="form.connectPersonId" placeholder="请选择"> + <el-input v-model="form.connectPersonName" placeholder="请选择"> <template #append> <el-button :icon="Search" @click="openUser(0)"></el-button> </template> @@ -51,7 +51,7 @@ <el-row> <el-col :span="11"> <el-form-item label="录入人" size="default"> - <el-input v-model="form.inputPersonId" placeholder="请选择"> + <el-input v-model="form.inputPersonName" placeholder="请选择"> <template #append> <el-button :icon="Search" @click="openUser(1)"></el-button> </template> @@ -60,7 +60,7 @@ </el-col> <el-col :span="11" :offset="2"> <el-form-item label="责任人" size="default"> - <el-input v-model="form.responsibilityPersonId" placeholder="请选择"> + <el-input v-model="form.responsibilityPersonName" placeholder="请选择"> <template #append> <el-button :icon="Search" @click="openUser(2)"></el-button> </template> @@ -148,8 +148,8 @@ <el-table-column align="center" label="操作"> <template #default="scope"> <el-button link type="primary" @click="openMaintenance('查看', scope.row)" size="small">查看</el-button> - <el-button link type="primary" @click="openMaintenance('修改', scope.row)" size="small">修改</el-button> - <el-button link type="primary" @click="deleteA(scope.row)" size="small">删除</el-button> + <el-button link type="primary" @click="openMaintenance('修改', scope.row)" size="small">修改</el-button> + <el-button link type="primary" @click="deleteA(scope.row)" size="small">删除</el-button> </template> </el-table-column> </el-table> @@ -166,8 +166,8 @@ <el-table-column align="center" label="操作"> <template #default="scope"> <el-button link type="primary" @click="openDetect('查看', scope.row)" size="small">查看</el-button> - <el-button link type="primary" @click="openDetect('修改', scope.row)" size="small">修改</el-button> - <el-button link type="primary" @click="deleteB(scope.row)" size="small">删除</el-button> + <el-button link type="primary" @click="openDetect('修改', scope.row)" size="small">修改</el-button> + <el-button link type="primary" @click="deleteB(scope.row)" size="small">删除</el-button> </template> </el-table-column> </el-table> @@ -185,14 +185,13 @@ <el-table-column align="center" label="操作"> <template #default="scope"> <el-button link type="primary" @click="openRepair('查看', scope.row)" size="small">查看</el-button> - <el-button link type="primary" @click="openRepair('修改', scope.row)" size="small">修改</el-button> - <el-button link type="primary" @click="deleteC(scope.row)" size="small">删除</el-button> + <el-button link type="primary" @click="openRepair('修改', scope.row)" size="small">修改</el-button> + <el-button link type="primary" @click="deleteC(scope.row)" size="small">删除</el-button> </template> </el-table-column> </el-table> </el-tab-pane> - <el-tab-pane label="检查标准设置" name="fourth" - > + <el-tab-pane label="检查标准设置" name="fourth"> <el-button type="primary" size="default" @click="openStandard('新增', '')">新增</el-button> <el-table :data="form.checkStandardeDetailList" style="width: 100%"> <el-table-column align="center" type="indexNum" label="序号" width="75" /> @@ -204,8 +203,8 @@ <el-table-column align="center" label="操作"> <template #default="scope"> <el-button link type="primary" @click="openStandard('查看', scope.row)" size="small">查看</el-button> - <el-button link type="primary" @click="openStandard('修改', scope.row)" size="small">修改</el-button> - <el-button link type="primary" @click="deleteD(scope.row)" size="small">删除</el-button> + <el-button link type="primary" @click="openStandard('修改', scope.row)" size="small">修改</el-button> + <el-button link type="primary" @click="deleteD(scope.row)" size="small">删除</el-button> </template> </el-table-column> </el-table> @@ -249,7 +248,9 @@ </el-dialog> <categoryDailog ref="categoryShow"></categoryDailog> <RegionsDialog ref="planShow" @SearchUser="onUser"></RegionsDialog> - <DailogSearchUser ref="UserShow" @SearchUser="userId"></DailogSearchUser> + <DailogSearchUser ref="UserOneShow" @SearchUser="userId"></DailogSearchUser> +<!-- <DailogSearchUser ref="UserTwoShow" @SearchUser="userId"></DailogSearchUser>--> +<!-- <DailogSearchUser ref="UserThreeShow" @SearchUser="userId"></DailogSearchUser>--> <maintenanceDailog ref="maintenanceShow" @onMain="main"></maintenanceDailog> <detectDailog ref="detectShow" @onDelect="delect"></detectDailog> <repairDailog ref="repairShow" @onRepair="Repair"></repairDailog> @@ -258,7 +259,7 @@ <script lang="ts"> import { defineComponent, ref } from 'vue'; import { Search, Plus, FullScreen } from '@element-plus/icons-vue'; -import {timeDate} from '/@/assets/index.ts' +import { timeDate } from '/@/assets/index.ts'; import categoryDailog from './categoryDailog.vue'; import RegionsDialog from '../../views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue'; import maintenanceDailog from './maintenanceDailog.vue'; @@ -269,7 +270,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'; import type { UploadProps, UploadUserFile } from 'element-plus'; import { facilityManagementApi } from '/@/api/facilityManagement'; -import {goalManagementApi} from "/@/api/goalManagement"; +import { goalManagementApi } from '/@/api/goalManagement'; export default defineComponent({ components: { categoryDailog, RegionsDialog, DailogSearchUser, maintenanceDailog, detectDailog, repairDailog, standardDailog }, setup(props, { emit }) { @@ -280,7 +281,7 @@ treatment: '', inputPersonId: '', - + inputPersonName:'', departmentId: '', delRepaireDetailList: [], @@ -288,148 +289,170 @@ delTestDetailList: [], takecareDetailList: [], - checkDetailList: [], + checkDetailList: [], - responsibilityPersonId: '', + responsibilityPersonId: '', + responsibilityPersonName:'', + delTakecareStardardeDetailList: [], - delTakecareStardardeDetailList: [], + connectPersonId: '', + connectPersonName:'', - connectPersonId: '', + scenePic: '', - scenePic: '', + partType: '', - partType: '', + toDangerous: '', - toDangerous: '', + dangerousElement: '', - dangerousElement: '', - - takecareStardardeDetailList: [ + takecareStardardeDetailList: [ { filePath: '', }, ], - testDetailList: [], - checkCycle: '', - repaireDetailList: [], - delCheckStandardeDetailList: [], + testDetailList: [], + checkCycle: '', + repaireDetailList: [], + delCheckStandardeDetailList: [], - leadingPersonName: '', + leadingPersonName: '', - name: '', + name: '', delTakecareDetailList: [], - position: '', + position: '', - emergencePlanId: '', + emergencePlanId: '', - checkStandardeDetailList: [], - infoTpe: '', - delCheckStandardeDetails: '', + checkStandardeDetailList: [], + infoTpe: '', + delCheckStandardeDetails: '', - delTakecareStardardeDetails: '', + delTakecareStardardeDetails: '', - delTakecareDetails: '', + delTakecareDetails: '', - delRepaireDetails: '', + delRepaireDetails: '', - delTestDetails: '', + delTestDetails: '', }); - const titles = ref(); - const disabled = ref(false); - const Dailogtype = ref(false); + const titles = ref(); + const disabled = ref(false); + const Dailogtype = ref(false); const openDailog = (title: string, type: boolean, id: number, num: any) => { dialogVisible.value = true; - department(); + department(); Dailogtype.value = type; - if (num == 0) { - titles.value = `${title}仪表信息`; - form.value.infoTpe = num; - } else if (num == 1) { - titles.value = `${title}设备设施`; - form.value.infoTpe = num; - } else if (num == 2) { - titles.value = `${title}设备设施`; - form.value.infoTpe = num; - } + if (num == 0) { + titles.value = `${title}仪表信息`; + form.value.infoTpe = num; + } else if (num == 1) { + titles.value = `${title}设备设施`; + form.value.infoTpe = num; + } else if (num == 2) { + titles.value = `${title}设备设施`; + form.value.infoTpe = num; + } - disabled.value = title == '查看' ? true : false; - if (title == '查看' || title == '修改') - facilityManagementApi() - .getkeypointEquipmentInfoDetail(id) - .then((res) => { - if (res.data.code == 200) { - form.value = res.data.data; - } else { - ElMessage.error(res.data.msg); - } - }); + disabled.value = title == '查看' ? true : false; + if (title == '查看' || title == '修改') + facilityManagementApi() + .getkeypointEquipmentInfoDetail(id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); }; - // 提交 - const submitForm = () => { - form.value.delTakecareDetails =deleteAId.value.toString() - form.value.delTestDetails =deleteBId.value.toString() - form.value.delRepaireDetails =deleteCId.value.toString() - form.value.delCheckStandardeDetails =deleteDId.value.toString() - dialogVisible.value = false; - facilityManagementApi() - .getkeypointEquipmentInfoAddOrUpdate(form.value) - .then((res) => { - if (res.data.code == 200) { - ElMessage({ - message: res.data.msg, - type: 'success', - }); - emit('navAddorUpdata'); - } else { - ElMessage.error(res.data.msg); - } - }); - // form.value = null; - }; - // 取消 - const resetForm = () => { - dialogVisible.value = false; - }; + // 提交 + const submitForm = () => { + form.value.delTakecareDetails = deleteAId.value.toString(); + form.value.delTestDetails = deleteBId.value.toString(); + form.value.delRepaireDetails = deleteCId.value.toString(); + form.value.delCheckStandardeDetails = deleteDId.value.toString(); + dialogVisible.value = false; + facilityManagementApi() + .getkeypointEquipmentInfoAddOrUpdate(form.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + emit('navAddorUpdata'); + } else { + ElMessage.error(res.data.msg); + } + }); + // form.value = null; + }; + // 取消 + const resetForm = () => { + dialogVisible.value = false; + }; const activeName = ref('first'); - const index = ref<any>(); - const categoryShow = ref(); - const opencategory = () => { - categoryShow.value.openDailog(); - }; + const index = ref<any>(); + const categoryShow = ref(); + const opencategory = () => { + categoryShow.value.openDailog(); + }; - // 应急预案弹窗 + // 应急预案弹窗 const planShow = ref(); const openPlan = () => { planShow.value.openDailog(); }; - const onUser = (e:any) => { - form.value.emergencePlanId=e.id - }; + const onUser = (e: any) => { + form.value.emergencePlanId = e.id; + }; - const UserShow = ref(); - const openUser = (type: any) => { - UserShow.value.openDailog(type); + const UserOneShow = ref(); + // const UserTwoShow = ref(); + // const UserThreeShow = ref(); + const openUser = (type: number) => { + // if (type == 0) { + // UserOneShow.value.openDailog(); + // } else if (type == 1) { + // UserTwoShow.value.openDailog(); + // } else if (type == 2) { + // UserThreeShow.value.openDailog(); + // } + UserOneShow.value.openDailog(); + }; + const userId = ( type: number,val: any) => { + if (type == 0) { + form.value.connectPersonId = val.uid; + form.value.connectPersonName = val.realName; + } else if (type == 1) { + form.value.inputPersonId = val.uid; + form.value.inputPersonName = val.username; + } else if (type == 2) { + form.value.responsibilityPersonId = val.id; + form.value.responsibilityPersonName = val.username; + } }; const maintenanceShow = ref(); const openMaintenance = (title: string, data: any) => { - index.value = form.value.takecareDetailList.indexOf(data); + index.value = form.value.takecareDetailList.indexOf(data); maintenanceShow.value.openDailog(title, data); }; const detectShow = ref(); const openDetect = (title: string, data: any) => { - index.value = form.value.testDetailList.indexOf(data); + index.value = form.value.testDetailList.indexOf(data); detectShow.value.openDailog(title, data); }; const repairShow = ref(); const openRepair = (title: string, data: any) => { - index.value = form.value.repaireDetailList.indexOf(data); + index.value = form.value.repaireDetailList.indexOf(data); repairShow.value.openDailog(title, data); }; const standardShow = ref(); const openStandard = (title: string, data: any) => { - index.value = form.value.checkStandardeDetailList.indexOf(data); + index.value = form.value.checkStandardeDetailList.indexOf(data); standardShow.value.openDailog(title, data); }; // 上传 @@ -462,56 +485,56 @@ () => false ); }; - const deleteAId = ref([]); - const deleteBId = ref([]); - const deleteCId = ref([]); - const deleteDId = ref([]); - // 删除 - const deleteA = (tag: any) => { - form.value.takecareDetailList.splice(form.value.takecareDetailList.indexOf(tag), 1); - deleteAId.value.push(tag.id); - }; - const deleteB = (tag: any) => { - form.value.testDetailList.splice(form.value.testDetailList.indexOf(tag), 1); - deleteBId.value.push(tag.id); - }; - const deleteC = (tag: any) => { - form.value.repaireDetailList.splice(form.value.repaireDetailList.indexOf(tag), 1); - deleteCId.value.push(tag.id); - }; - const deleteD = (tag: any) => { - form.value.checkStandardeDetailList.splice(form.value.checkStandardeDetailList.indexOf(tag), 1); - deleteDId.value.push(tag.id); - }; - // 回传 - const main = (val: any) => { - if (index.value == -1) { - form.value.takecareDetailList.push(val); - } else { - form.value.takecareDetailList[index.value] = val; - } - }; - const delect = (val: any) => { - if (index.value == -1) { - form.value.testDetailList.push(val); - } else { - form.value.testDetailList[index.value] = val; - } - }; - const Repair= (val:any)=>{ - if (index.value == -1) { - form.value.repaireDetailList.push(val); - } else { - form.value.repaireDetailList[index.value] = val; - } - } - const Stand=(val:any)=>{ - if (index.value == -1) { - form.value.checkStandardeDetailList.push(val); - } else { - form.value.checkStandardeDetailList[index.value] = val; - } - } + const deleteAId = ref([]); + const deleteBId = ref([]); + const deleteCId = ref([]); + const deleteDId = ref([]); + // 删除 + const deleteA = (tag: any) => { + form.value.takecareDetailList.splice(form.value.takecareDetailList.indexOf(tag), 1); + deleteAId.value.push(tag.id); + }; + const deleteB = (tag: any) => { + form.value.testDetailList.splice(form.value.testDetailList.indexOf(tag), 1); + deleteBId.value.push(tag.id); + }; + const deleteC = (tag: any) => { + form.value.repaireDetailList.splice(form.value.repaireDetailList.indexOf(tag), 1); + deleteCId.value.push(tag.id); + }; + const deleteD = (tag: any) => { + form.value.checkStandardeDetailList.splice(form.value.checkStandardeDetailList.indexOf(tag), 1); + deleteDId.value.push(tag.id); + }; + // 回传 + const main = (val: any) => { + if (index.value == -1) { + form.value.takecareDetailList.push(val); + } else { + form.value.takecareDetailList[index.value] = val; + } + }; + const delect = (val: any) => { + if (index.value == -1) { + form.value.testDetailList.push(val); + } else { + form.value.testDetailList[index.value] = val; + } + }; + const Repair = (val: any) => { + if (index.value == -1) { + form.value.repaireDetailList.push(val); + } else { + form.value.repaireDetailList[index.value] = val; + } + }; + const Stand = (val: any) => { + if (index.value == -1) { + form.value.checkStandardeDetailList.push(val); + } else { + form.value.checkStandardeDetailList[index.value] = val; + } + }; //图片提交 const imageUrl = ref(''); @@ -531,34 +554,24 @@ return true; }; - const userId = (val: any, type: number) => { - console.log(val, type); - if (type == 0) { - form.value.connectPersonId = val.uid; - } else if (type == 1) { - form.value.inputPersonId = val.uid; - } else if (type == 2){ - form.value.responsibilityPersonId = val.uid; - } - }; - //部门树 - const department = () => { - goalManagementApi() - .getTreedepartment() - .then((res) => { - if (res.data.code == 200) { - data.value = res.data.data; - } else { - ElMessage.error(res.data.msg); - } - }); - }; - const propse = { - label: 'depName', - children: 'children', - value: 'depId', - }; - const data = ref(); + //部门树 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + const data = ref(); //全屏 const full = ref(false); const toggleFullscreen = () => { @@ -569,26 +582,28 @@ } }; return { - propse, - data, + propse, + data, submitForm, dialogVisible, Dailogtype, form, openDailog, Search, - main, - delect, - Repair, - Stand, - index, + main, + delect, + Repair, + Stand, + index, activeName, categoryShow, opencategory, planShow, - onUser, + onUser, openPlan, - UserShow, + UserOneShow, + // UserTwoShow, + // UserThreeShow, openUser, maintenanceShow, openMaintenance, @@ -597,14 +612,14 @@ repairShow, openRepair, standardShow, - userId, + userId, openStandard, fileList, handleRemove, handlePreview, handleExceed, - disabled, - titles, + disabled, + titles, beforeRemove, imageUrl, handleAvatarSuccess, @@ -614,15 +629,15 @@ toggleFullscreen, FullScreen, resetForm, - deleteAId, - deleteBId, - deleteCId, - deleteDId, - deleteA, - deleteB, - deleteC, - deleteD, - timeDate, + deleteAId, + deleteBId, + deleteCId, + deleteDId, + deleteA, + deleteB, + deleteC, + deleteD, + timeDate, }; }, }); diff --git a/src/components/equipmentDailog/detectDailog.vue b/src/components/equipmentDailog/detectDailog.vue index 96a8f76..71279e3 100644 --- a/src/components/equipmentDailog/detectDailog.vue +++ b/src/components/equipmentDailog/detectDailog.vue @@ -1,11 +1,11 @@ <template> - <el-dialog v-model="dialogVisible" :fullscreen="full" :title="titles" width="50%" draggable> + <el-dialog v-model="dialogVisible" @close="resetForm" :fullscreen="full" :title="titles" width="50%" draggable> <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> <el-form :model="form" :disabled="disabled" label-width="120px"> <el-row> <el-col :span="11"> <el-form-item label="检测人" size="default"> - <el-input v-model="form.testPersonId"> + <el-input v-model="form.testPersonName"> <template #append> <el-button :icon="Search" @click="openUser" /> </template ></el-input> </el-form-item> @@ -19,10 +19,7 @@ <el-row> <el-col :span="11"> <el-form-item label="检测人单位" size="default"> - <el-select v-model="form.testPersonDepartmentId" placeholder="请选择" style="width: 100%"> - <el-option label="xxx单位1" value="1" /> - <el-option label="xxx单位2" value="2" /> - </el-select> + <el-tree-select v-model="form.testPersonDepartmentId" :data="data" check-strictly="true" class="w100" :props="propse" placeholder="请选择" /> </el-form-item> </el-col> <el-col :span="11" :offset="2"> @@ -59,13 +56,16 @@ </template> <script lang="ts"> import { defineComponent, ref, reactive } from 'vue'; +import { ElMessage, ElMessageBox} from 'element-plus'; import { Search, FullScreen } from '@element-plus/icons-vue'; import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; +import { goalManagementApi } from '/@/api/goalManagement'; export default defineComponent({ components: { DailogSearchUser }, setup(props, { emit }) { const form = ref({ testPersonId: '', + testPersonName:'', testDate: '', testPersonDepartmentId: '', testMemo: '', @@ -77,6 +77,7 @@ const disabled = ref(false); const dialogVisible = ref(false); const openDailog = (title: string, data: any) => { + department() dialogVisible.value = true; titles.value = `${title}设备检测`; if (title == '查看') { @@ -94,6 +95,7 @@ }; const User = (val: any) => { form.value.testPersonId = val.uid; + form.value.testPersonName=val.realName; }; // 提交 const submitForm = () => { @@ -101,24 +103,28 @@ emit('onDelect', form.value); form.value = { testPersonId: '', + testPersonName:'', testDate: '', testPersonDepartmentId: '', testMemo: '', testResult: '', testStatus: '', }; + disabled.value = false; }; // 取消 const resetForm = () => { dialogVisible.value = false; form.value = { testPersonId: '', + testPersonName:'', testDate: '', testPersonDepartmentId: '', testMemo: '', testResult: '', testStatus: '', }; + disabled.value = false; }; //全屏 const full = ref(false); @@ -129,7 +135,28 @@ full.value = false; } }; + //部门树 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + const data = ref(); return { + department, + propse, + data, form, titles, User, diff --git a/src/components/equipmentDailog/maintenanceDailog.vue b/src/components/equipmentDailog/maintenanceDailog.vue index 2b92a9a..e742cd7 100644 --- a/src/components/equipmentDailog/maintenanceDailog.vue +++ b/src/components/equipmentDailog/maintenanceDailog.vue @@ -1,16 +1,16 @@ <template> - <el-dialog :fullscreen="full" v-model="dialogVisible" :title="titles" width="50%" draggable> + <el-dialog :fullscreen="full" v-model="dialogVisible" @close="resetForms(ruleFormRefs)" :title="titles" width="50%" draggable> <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> - <el-form :model="form" :disabled="disabled" label-width="120px"> + <el-form :model="form" ref="ruleFormRefs" :rules="rules" :disabled="disabled" label-width="120px"> <el-row> <el-col :span="11"> - <el-form-item label="保养情况" size="default"> + <el-form-item label="保养情况" size="default" prop="takecareMemo"> <el-input v-model="form.takecareMemo" /> </el-form-item> </el-col> <el-col :span="11" :offset="2"> - <el-form-item label="保养负责人" size="default"> - <el-input v-model="form.leadingPersonId"> + <el-form-item label="保养负责人" size="default" prop="leadingPersonName"> + <el-input v-model="form.leadingPersonName"> <template #append> <el-button :icon="Search" @click="openUser" /> </template ></el-input> </el-form-item> @@ -18,16 +18,13 @@ </el-row> <el-row> <el-col :span="11"> - <el-form-item label="保养日期" size="default"> + <el-form-item label="保养日期" size="default" prop="takecareDate"> <el-date-picker v-model="form.takecareDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" style="width: 100%" /> </el-form-item> </el-col> <el-col :span="11" :offset="2"> - <el-form-item label="保养负责人单位" size="default"> - <el-select v-model="form.leadingPersonDepartmentId" style="width: 100%"> - <el-option label="xxx单位1" value="1" /> - <el-option label="xxx单位2" value="2" /> - </el-select> + <el-form-item label="保养负责人单位" size="default" prop="leadingPersonDepartmentId"> + <el-tree-select v-model="form.leadingPersonDepartmentId" :data="data" check-strictly="true" class="w100" :props="propse" placeholder="请选择" /> </el-form-item> </el-col> </el-row> @@ -35,8 +32,8 @@ <template #footer> <span class="dialog-footer"> <!-- <el-button type="primary" @click="dialogVisible = false" size="default">继续添加</el-button> --> - <el-button @click="resetForm" size="default">关闭</el-button> - <el-button type="primary" @click="submitForm" size="default">确定</el-button> + <el-button @click="resetForms(ruleFormRefs)" size="default">关闭</el-button> + <el-button type="primary" @click="submitForms(ruleFormRefs)" size="default">确定</el-button> </span> </template> </el-dialog> @@ -44,32 +41,68 @@ </template> <script lang="ts"> import { defineComponent, ref, reactive } from 'vue'; +import { ElMessage, ElMessageBox} from 'element-plus'; import { Search, FullScreen } from '@element-plus/icons-vue'; +import type { FormInstance, FormRules } from 'element-plus'; import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; +import { goalManagementApi } from '/@/api/goalManagement'; export default defineComponent({ components: { DailogSearchUser }, setup(props, { emit }) { + const ruleFormRefs = ref<FormInstance>(); const form = ref({ takecareMemo: '', leadingPersonId: '', + leadingPersonName: '', takecareDate: '', leadingPersonDepartmentId: '', }); // 开启弹窗 - const titles=ref() - const disabled=ref(false) + const titles = ref(); + const disabled = ref(false); const dialogVisible = ref(false); - const openDailog = (title:string,data:any) => { + const openDailog = (title: string, data: any) => { + department() dialogVisible.value = true; - titles.value=`${title}仪器仪表` - if(title=='查看'){ - disabled.value=true - form.value=data - }else if(title == '修改'){ - disabled.value=false - form.value=data + titles.value = `${title}仪器仪表`; + if (title == '查看') { + disabled.value = true; + form.value = data; + } else if (title == '修改') { + disabled.value = false; + form.value = data; } }; + const rules = reactive<FormRules>({ + takecareMemo: [ + // { + // required: true, + // message: '保养情况不能为空', + // trigger: 'change', + // }, + ], + leadingPersonName: [ + // { + // required: true, + // message: '保养负责人不能为空', + // trigger: 'change', + // }, + ], + takecareDate: [ + // { + // required: true, + // message: '保养日期不能为空', + // trigger: 'change', + // }, + ], + leadingPersonDepartmentId: [ + // { + // required: true, + // message: '保养负责人单位不能为空', + // trigger: 'change', + // }, + ], + }); // 开启用户弹窗 const Show = ref(); const openUser = () => { @@ -77,27 +110,42 @@ }; const User = (val: any) => { form.value.leadingPersonId = val.uid; + form.value.leadingPersonName = val.realName; }; // 提交 - const submitForm = () => { - dialogVisible.value = false; - emit('onMain', form.value); + const submitForms = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + dialogVisible.value = false; + emit('onMain', form.value); + } else { + console.log('error submit!', fields); + } + }); form.value = { takecareMemo: '', leadingPersonId: '', + leadingPersonName: '', takecareDate: '', leadingPersonDepartmentId: '', }; + disabled.value = false; + // formEl.resetFields(); }; // 取消 - const resetForm = () => { - dialogVisible.value = false; - form.value = { + const resetForms = (formEl: FormInstance | undefined) => { + if (!formEl) return; + form.value = { takecareMemo: '', leadingPersonId: '', + leadingPersonName: '', takecareDate: '', leadingPersonDepartmentId: '', }; + // formEl.resetFields(); + dialogVisible.value = false; + disabled.value = false; }; //全屏 const full = ref(false); @@ -108,15 +156,38 @@ full.value = false; } }; + //部门树 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + const data = ref(); return { + department, + propse, + data, disabled, + rules, titles, - submitForm, - resetForm, + submitForms, + resetForms, form, User, dialogVisible, openDailog, + ruleFormRefs, Show, openUser, Search, diff --git a/src/components/equipmentDailog/repairDailog.vue b/src/components/equipmentDailog/repairDailog.vue index bb40c91..0c3baff 100644 --- a/src/components/equipmentDailog/repairDailog.vue +++ b/src/components/equipmentDailog/repairDailog.vue @@ -25,7 +25,7 @@ </el-col> <el-col :span="11" :offset="2"> <el-form-item label="维修负责人" size="default"> - <el-input v-model="form.repairPersonId" placeholder="请选择"> + <el-input v-model="form.repairPersonName" placeholder="请选择"> <template #append> <el-button :icon="Search" @click="openUser" /> </template ></el-input> </el-form-item> @@ -34,10 +34,7 @@ <el-row> <el-col :span="11"> <el-form-item label="维修负责人单位" size="default"> - <el-select v-model="form.repairPersonDepartmentId" placeholder="请选择" style="width: 100%"> - <el-option label="xxxxx单位" value="1" /> - <el-option label="xxx单位" value="2" /> - </el-select> + <el-tree-select v-model="form.repairPersonDepartmentId" :data="data" check-strictly="true" class="w100" :props="propse" placeholder="请选择" /> </el-form-item> </el-col> <el-col :span="11" :offset="2"> @@ -66,8 +63,10 @@ </template> <script lang="ts"> import { defineComponent, ref, reactive } from 'vue'; +import { ElMessage, ElMessageBox} from 'element-plus'; import { Search, FullScreen } from '@element-plus/icons-vue'; import DailogSearchUser from '/@/components/DailogSearchUser/index.vue'; +import { goalManagementApi } from '/@/api/goalManagement'; export default defineComponent({ components: { DailogSearchUser }, setup(props, { emit }) { @@ -76,6 +75,7 @@ repairStatus: '', repairMemo: '', repairPersonId: '', + repairPersonName:'', repairPersonDepartmentId: "", repairStartDate: '', repairEndDate: '', @@ -85,6 +85,7 @@ const disabled = ref(false); const dialogVisible = ref(false); const openDailog = (title: string, data: any) => { + department() dialogVisible.value = true; titles.value = `${title}设备维修`; if (title == '查看') { @@ -102,6 +103,7 @@ }; const User = (val: any) => { form.value.repairPersonId = val.uid; + form.value.repairPersonName = val.realName; }; // 提交 const submitForm = () => { @@ -112,10 +114,12 @@ repairStatus: '', repairMemo: '', repairPersonId: '', + repairPersonName:'', repairPersonDepartmentId: "", repairStartDate: '', repairEndDate: '', }; + disabled.value = false; }; // 取消 const resetForm = () => { @@ -125,10 +129,12 @@ repairStatus: '', repairMemo: '', repairPersonId: '', + repairPersonName:"", repairPersonDepartmentId: "", repairStartDate: '', repairEndDate: '', }; + disabled.value = false; }; //全屏 const full = ref(false); @@ -139,7 +145,28 @@ full.value = false; } }; + //部门树 + const department = () => { + goalManagementApi() + .getTreedepartment() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + const propse = { + label: 'depName', + children: 'children', + value: 'depId', + }; + const data = ref(); return { + department, + propse, + data, form, titles, disabled, diff --git a/src/components/equipmentDailog/standardDailog.vue b/src/components/equipmentDailog/standardDailog.vue index 85febd2..a1f901e 100644 --- a/src/components/equipmentDailog/standardDailog.vue +++ b/src/components/equipmentDailog/standardDailog.vue @@ -96,6 +96,7 @@ checkPart: "", rate: '', }; + disabled.value = false; }; // 取消 const resetForm = () => { @@ -108,6 +109,7 @@ checkPart: "", rate: '', }; + disabled.value = false; }; //全屏 const full = ref(false); diff --git a/src/components/facilityManagement/EquipmentStatistics/index.vue b/src/components/facilityManagement/EquipmentStatistics/index.vue new file mode 100644 index 0000000..07a359f --- /dev/null +++ b/src/components/facilityManagement/EquipmentStatistics/index.vue @@ -0,0 +1,91 @@ +<template> + <div class="box"> + <div class="title">设备设施统计</div> + <div ref="main" style="width: 100%; height: 400px"></div> + </div> +</template> +<script lang="ts"> +import { defineComponent, onMounted, ref } from 'vue'; +import * as echarts from 'echarts'; +import { ElMessage } from 'element-plus'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +export default defineComponent({ + setup() { + const listApi = () => { + facilityManagementApi() + .getequipmentInfoStatistics() + .then((res) => { + if (res.data.code == 200) { + let arr=[] + arr=res.data.data + let date=[] + for (let i = 0; i < arr.length; i++) { + date.push(arr[i].count) + } + init(date); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + onMounted(() => { + listApi(); + }); + const main = ref(); + const init = (data:any) => { + var myChart = echarts.init(main.value); + var option = { + tooltip: {}, + grid: { + left: '3%', + right: '4%', + bottom: '5%', + containLabel: true, + }, + xAxis: { + type: 'category', + data: ['在用数', '报废数', '维修数', '停用数'], + }, + yAxis: { + type: 'value', + name: '数量', + nameTextStyle: { + color: '#aaa', + nameLocation: 'start', + }, + }, + color: ['#6394f9'], + series: [ + { + data: data, + type: 'bar', + }, + ], + }; + + myChart.setOption(option); + }; + return { + init, + onMounted, + main, + listApi, + }; + }, +}); +</script> +<style scoped> +.box { + background-color: #fff; + box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%); +} +.title { + font-size: 16px; + border-bottom: 1px solid #eee; + padding: 20px; +} +</style> diff --git a/src/components/facilityManagement/InstrumentationInformation/index.vue b/src/components/facilityManagement/InstrumentationInformation/index.vue new file mode 100644 index 0000000..d4e4308 --- /dev/null +++ b/src/components/facilityManagement/InstrumentationInformation/index.vue @@ -0,0 +1,376 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.qName" placeholder="装置设施名称" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-row> + <el-col :span="4"> + <el-input v-model="filterText" style="height: 30px" placeholder="请输入关键字" /> + <div class="tree"> + <!-- <el-tree ref="treeRef" class="filter-tree" :data="data" :props="props" :filter-node-method="filterNode" /> --> + <el-tree ref="treeRef" :data="data" :props="props" @node-click="handleNodeClick" :filter-node-method="filterNode" /> + </div> + </el-col> + <el-col :span="20"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen">修改</el-button> + <el-button size="default" :disabled="danger" type="danger" :icon="Delete" @click="onDeleteAll" plain>删除</el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Upload" @click="openUp"></el-button> + <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <div style="padding-left: 10px"> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" @selection-change="handleSelectionChange"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClicks" style="margin: 0 5%"> + <el-tab-pane label="设备保养" name="first"> + <el-table ref="multipleTableRef" :data="scope.row.takecareDetailList" style="width: 100%"> + <el-table-column property="takecareMemo" align="center" label="保养情况" sortable /> + <el-table-column property="leadingPersonId" align="center" label="保养负责人" sortable /> + <el-table-column property="takecareDate" align="center" :formatter="timeDate" label="保养日期" sortable /> + <el-table-column property="leadingPersonDepartmentId" align="center" label="保养负责人单位" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备检查" name="second" + ><el-table ref="multipleTableRef" :data="scope.row.checkDetailList" style="width: 100%"> + <el-table-column property="leadingPersonId" align="center" label="检查人" sortable /> + <el-table-column property="createTime" align="center" :formatter="timeDate" label="检查日期" sortable /> + <el-table-column property="name" align="center" label="检查人部门" sortable /> + <el-table-column property="takecareMemo" align="center" label="检查结果" sortable /> + <el-table-column property="name" align="center" label="检查状态" sortable /> </el-table + ></el-tab-pane> + <el-tab-pane label="设备检测" name="third"> + <el-table ref="multipleTableRef" :data="scope.row.testDetailList" style="width: 100%"> + <el-table-column property="testPersonId" align="center" label="检测人" sortable /> + <el-table-column property="testDate" align="center" :formatter="timeDate" label="检测日期" sortable /> + <el-table-column property="testPersonDepartmentId" align="center" label="检测人单位" sortable /> + <el-table-column property="testMemo" align="center" label="检测内容" sortable /> + <el-table-column property="testResult" align="center" label="检测结果" sortable /> + <el-table-column property="testStatus" align="center" label="检测状态" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备维修" name="fourth"> + <el-table ref="multipleTableRef" :data="scope.row.repaireDetailList" style="width: 100%"> + <el-table-column property="exceptionInfo" align="center" label="设施异常项" sortable /> + <el-table-column property="repairStatus" align="center" label="维修状态" sortable /> + <el-table-column property="repairMemo" align="center" label="维修情况" sortable /> + <el-table-column property="repairPersonId" align="center" label="维修负责人" sortable /> + <el-table-column property="repairPersonDepartmentId" align="center" label="维修负责人单位" sortable /> + <el-table-column property="repairStartDate" align="center" :formatter="timeDate" label="维修开始日期" sortable /> + <el-table-column property="repairEndDate" align="center" :formatter="timeDate" label="维修结束日期" sortable /> + </el-table> + </el-tab-pane> + </el-tabs> + </template> + </el-table-column> + <el-table-column property="qName" label="装置设施名称" align="center" sortable /> + <el-table-column property="positionNum" align="center" label="装置设施位号" sortable /> + <el-table-column property="qUsage" align="center" label="装置设施用途" sortable /> + <el-table-column property="model" label="装置设施型号" align="center" sortable show-overflow-tooltip /> + <el-table-column property="equipmentTypeId" label="类型/类别外键" align="center" sortable show-overflow-tooltip /> + <el-table-column property="setPart" label="设施部位" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-col> + </el-row> + <!-- <updata ref="Show"></updata> --> + <Dailog ref="openAdd" @navAddorUpdata="onAddorUpdata"></Dailog> + </div> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive, watch, onMounted } from 'vue'; +import { timeDate } from '/@/assets/index.ts'; +import updata from '/@/components/updata/updata.vue'; +import Dailog from '/@/components/equipmentDailog/Dailog.vue'; +import { ElTree, TabsPaneContext, ElMessage, ElMessageBox } from 'element-plus'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +import { EditPen, View, Plus, Delete, Download, Refresh, Upload } from '@element-plus/icons-vue'; +interface Tree { + label: string; + children?: Tree[]; +} +export default defineComponent({ + components: { updata, Dailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////名称 + positionNum: '', ////位号 + infoType: 0, ////具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.positionNum = ''; + listApi(); + }; + const listApi = () => { + facilityManagementApi() + .getequipmentInfoList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 弹窗 + const openAdd = ref(); + const openD = (title: String, id: number) => { + openAdd.value.openDailog(title, false, id, 0); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + const filterText = ref(''); + const treeRef = ref<InstanceType<typeof ElTree>>(); + // 树形 + const listApiTree = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + const props = { + label: 'typeName', + children: 'childList', + value: 'id', + }; + watch(filterText, (val) => { + treeRef.value!.filter(val); + }); + + const filterNode = (value: string, data: Tree) => { + if (!value) return true; + return data.typeName.includes(value); + }; + const handleNodeClick = (data: Tree) => { + ruleForm.searchParams.positionNum = data.id; + listApi(); + }; + const data = ref([]); + onMounted(() => { + listApiTree(); + }); + const handleClicks = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event); + }; + + const activeName = ref('first'); + // const Show=ref() + // const openUp=()=>{ + // Show.value.openDialog() + // } + return { + handleNodeClick, + ruleForm, + timeDate, + resetForm, + listApi, + onAddorUpdata, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + listApiTree, + handleClicks, + filterText, + treeRef, + props, + filterNode, + data, + openAdd, + openD, + activeName, + Plus, + EditPen, + Delete, + Download, + Refresh, + View, + Upload, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} +.tree { + height: 750px; + background-color: #fff; + overflow: hidden; + overflow-y: auto; +} +.btns { + padding: 10px 0px 10px 10px; + display: flex; + justify-content: space-between; + background-color: #fff; +} +</style> diff --git a/src/components/facilityManagement/ProductionEquipment/index.vue b/src/components/facilityManagement/ProductionEquipment/index.vue new file mode 100644 index 0000000..ab8551e --- /dev/null +++ b/src/components/facilityManagement/ProductionEquipment/index.vue @@ -0,0 +1,375 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.qName" placeholder="装置设施名称" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-row> + <el-col :span="4"> + <el-input v-model="filterText" style="height: 30px" placeholder="请输入关键字" /> + <div class="tree"> + + <!-- <el-tree ref="treeRef" class="filter-tree" :data="data" :props="props" :filter-node-method="filterNode" /> --> + <el-tree ref="treeRef" :data="data" :props="props" @node-click="handleNodeClick" :filter-node-method="filterNode" /> + </div> + </el-col> + <el-col :span="20"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen">修改</el-button> + <el-button size="default" :disabled="danger" type="danger" :icon="Delete" @click="onDeleteAll" plain>删除</el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Upload" @click="openUp"></el-button> + <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <div style="padding-left: 10px"> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClicks" style="margin: 0 5%"> + <el-tab-pane label="设备保养" name="first"> + <el-table ref="multipleTableRef" :data="scope.row.takecareDetailList" style="width: 100%"> + <el-table-column property="takecareMemo" align="center" label="保养情况" sortable /> + <el-table-column property="leadingPersonId" align="center" label="保养负责人" sortable /> + <el-table-column property="takecareDate" align="center" label="保养日期" sortable /> + <el-table-column property="leadingPersonDepartmentId" align="center" label="保养负责人单位" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备检查" name="second" + ><el-table ref="multipleTableRef" :data="scope.row.checkDetailList" style="width: 100%"> + <el-table-column property="leadingPersonId" align="center" label="检查人" sortable /> + <el-table-column property="createTime" align="center" label="检查日期" sortable /> + <el-table-column property="name" align="center" label="检查人部门" sortable /> + <el-table-column property="takecareMemo" align="center" label="检查结果" sortable /> + <el-table-column property="name" align="center" label="检查状态" sortable /> </el-table + ></el-tab-pane> + <el-tab-pane label="设备检测" name="third"> + <el-table ref="multipleTableRef" :data="scope.row.testDetailList" style="width: 100%"> + <el-table-column property="testPersonId" align="center" label="检测人" sortable /> + <el-table-column property="testDate" align="center" label="检测日期" sortable /> + <el-table-column property="testPersonDepartmentId" align="center" label="检测人单位" sortable /> + <el-table-column property="testMemo" align="center" label="检测内容" sortable /> + <el-table-column property="testResult" align="center" label="检测结果" sortable /> + <el-table-column property="testStatus" align="center" label="检测状态" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备维修" name="fourth"> + <el-table ref="multipleTableRef" :data="scope.row.repaireDetailList" style="width: 100%"> + <el-table-column property="exceptionInfo" align="center" label="设施异常项" sortable /> + <el-table-column property="repairStatus" align="center" label="维修状态" sortable /> + <el-table-column property="repairMemo" align="center" label="维修情况" sortable /> + <el-table-column property="repairPersonId" align="center" label="维修负责人" sortable /> + <el-table-column property="repairPersonDepartmentId" align="center" label="维修负责人单位" sortable /> + <el-table-column property="repairStartDate" align="center" label="维修开始日期" sortable /> + <el-table-column property="repairEndDate" align="center" label="维修结束日期" sortable /> + </el-table> + </el-tab-pane> + </el-tabs> + </template> + </el-table-column> + <el-table-column property="qName" label="装置设施名称" align="center" sortable /> + <el-table-column property="positionNum" align="center" label="装置设施位号" sortable /> + <el-table-column property="qUsage" align="center" label="装置设施用途" sortable /> + <el-table-column property="model" label="装置设施型号" align="center" sortable show-overflow-tooltip /> + <el-table-column property="equipmentTypeId" label="类型/类别外键" align="center" sortable show-overflow-tooltip /> + <el-table-column property="setPart" label="设施部位" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-col> + </el-row> + <!-- <updata ref="Show"></updata> --> + <Dailog ref="openAdd" @navAddorUpdata="onAddorUpdata"></Dailog> + </div> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive, watch, onMounted } from 'vue'; +import updata from '/@/components/updata/updata.vue'; +import Dailog from '/@/components/equipmentDailog/Dailog.vue'; +import { ElTree, TabsPaneContext, ElMessage, ElMessageBox } from 'element-plus'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +import { EditPen, View, Plus, Delete, Download, Refresh, Upload } from '@element-plus/icons-vue'; +interface Tree { + label: string; + children?: Tree[]; +} +export default defineComponent({ + components: { updata, Dailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////名称 + positionNum: '', ////位号 + infoType: 0, ////具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.positionNum = ''; + listApi(); + }; + const listApi = () => { + facilityManagementApi() + .getequipmentInfoList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 弹窗 + const openAdd = ref(); + const openD = (title: String, id: number) => { + openAdd.value.openDailog(title,true,id,1); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + const filterText = ref(''); + const treeRef = ref<InstanceType<typeof ElTree>>(); + // 树形 + const listApiTree = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + data.value= res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + const props = { + label: 'typeName', + children: 'childList', + value: 'id', + } + watch(filterText, (val) => { + treeRef.value!.filter(val); + }); + + const filterNode = (value: string, data: Tree) => { + if (!value) return true; + return data.typeName.includes(value); + }; + const handleNodeClick=(data: Tree)=>{ + ruleForm.searchParams.positionNum=data.id + listApi(); + } + const data=ref([]) + onMounted(() => { + listApiTree(); + }); + const handleClicks = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event); + }; + + const activeName = ref('first'); + // const Show=ref() + // const openUp=()=>{ + // Show.value.openDialog() + // } + return { + handleNodeClick, + ruleForm, + resetForm, + listApi, + onAddorUpdata, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + listApiTree, + handleClicks, + filterText, + treeRef, + props, + filterNode, + data, + openAdd, + openD, + activeName, + Plus, + EditPen, + Delete, + Download, + Refresh, + View, + Upload, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} +.tree { + height: 750px; + background-color: #fff; + overflow: hidden; + overflow-y: auto; +} +.btns { + padding: 10px 0px 10px 10px; + display: flex; + justify-content: space-between; + background-color: #fff; +} +</style> diff --git a/src/components/facilityManagement/deviceType/component/Dailog.vue b/src/components/facilityManagement/deviceType/component/Dailog.vue new file mode 100644 index 0000000..576135f --- /dev/null +++ b/src/components/facilityManagement/deviceType/component/Dailog.vue @@ -0,0 +1,190 @@ +<template> + <el-dialog v-model="dialogVisible" :fullscreen="full" @close="resetForm(ruleFormRef)" :title="titles" width="50%" draggable> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <el-form :model="form" :disabled="disabled" ref="ruleFormRef" :rules="rules" label-width="120px"> + <el-row> + <el-col :span="11"> + <el-form-item label="是否为设备内容" size="default" prop="isContent"> + <el-select v-model="form.isContent" placeholder="请选择" style="width: 100%"> + <el-option label="是" value="1" /> + <el-option label="否" value="2" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="父级编号" size="default" prop="parentId"> + <el-tree-select clearable check-strictly="true" v-model="form.parentId" :data="data" :props="propst" class="w100" placeholder="请选择" /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="类别名称" size="default" prop="typeName"> + <el-input v-model="form.typeName" /> + </el-form-item> + </el-col> + <el-col :span="11" :offset="2"> + <el-form-item label="排列序列" size="default" prop="sortNum"> + <el-input v-model.number="form.sortNum" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="resetForm(ruleFormRef)">关闭</el-button> + <el-button type="primary" @click="submitForm(ruleFormRef)">确定</el-button> + </span> + </template> + </el-dialog> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive } from 'vue'; +import type { FormInstance, FormRules } from 'element-plus'; +import { FullScreen } from '@element-plus/icons-vue'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +import { ElMessage } from 'element-plus'; +import { type } from 'os'; +export default defineComponent({ + setup(prpos, { emit }) { + const dialogVisible = ref(false); + const form = ref({ + isContent: '', ////是否为设备内容 1:是 2:否 + typeName: '', ////类别名称 + parentId: "", ////父级ID,如果没有父级,为0 + isCheck: 0, ////是否检测 1:是 2:否 + isVisit: 0, ////是否巡检 1:是 2:否 + sortNum: '', //排列序列 + id: '', //设备类型ID ,更新时必填 + }); + const titles = ref(); + const disabled = ref(false); + const openDailog = (title: string, id: number) => { + listApi(); + dialogVisible.value = true; + titles.value = `${title}设备设施类型管理`; + if (title == '查看') { + disabled.value = true; + detail(id); + } else if (title == '修改') { + detail(id); + } else if (title == '添加') { + form.value.parentId=id + } + }; + const detail = (id: number) => { + facilityManagementApi() + .getequipmentTypeMngDetail(id) + .then((res) => { + if (res.data.code == 200) { + form.value = res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + // 列表 + const listApi = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + data.value = res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + const data = ref([]); + const propst = { + label: 'typeName', + children: 'childList', + value: 'id', + }; + const ruleFormRef = ref<FormInstance>(); + const rules = reactive<FormRules>({ + isContent: [{ required: true, message: '是否为设备内容不能为空', trigger: 'change' }], + parentId: [], + typeName: [{ required: true, message: '类别名称不能为空', trigger: 'change' }], + sortNum: [ + { required: true, message: '排列序列不能为空', trigger: 'change' }, + { type: 'number', message: '请输入数字!', trigger: 'change' }, + ], + }); + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + facilityManagementApi() + .getequipmentTypeMngAddOrUpdate(form.value) + .then((res) => { + if (res.data.code == 200) { + dialogVisible.value = false; + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + emit('onAdd'); + formEl.resetFields(); + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + } else { + console.log('error submit!', fields); + } + }); + }; + const resetForm = (formEl: FormInstance | undefined) => { + if (!formEl) return; + formEl.resetFields(); + dialogVisible.value = false; + }; + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + detail, + rules, + ruleFormRef, + listApi, + propst, + submitForm, + resetForm, + data, + disabled, + dialogVisible, + form, + titles, + openDailog, + full, + toggleFullscreen, + FullScreen, + }; + }, +}); +</script> +<style scoped> +.el-row { + padding: 0 0 20px 0; +} +</style> diff --git a/src/components/facilityManagement/deviceType/index.vue b/src/components/facilityManagement/deviceType/index.vue new file mode 100644 index 0000000..11958ec --- /dev/null +++ b/src/components/facilityManagement/deviceType/index.vue @@ -0,0 +1,130 @@ +<template> + <div class="box"> + <el-button type="primary" :icon="Plus" @click="openD('新建', 0)" size="default">新建</el-button> + <el-table :data="tableData" style="width: 100%" row-key="id" :tree-props="propse"> + <el-table-column align="center" label="是否为设备内容"> + <template #default="scope"> + <span v-if="scope.row.isContent == 1">是</span> + <span v-if="scope.row.isContent == 2">否</span> + </template> + </el-table-column> + <el-table-column align="center" label="巡检"> + <template #default="scope"> + <span v-if="scope.row.isVisit == 0">-</span> + <span v-if="scope.row.isVisit == 1">是</span> + <span v-if="scope.row.isVisit == 2">否</span> + </template> + </el-table-column> + <el-table-column align="center" label="检测"> + <template #default="scope"> + <span v-if="scope.row.isCheck == 0">-</span> + <span v-if="scope.row.isCheck == 1">是</span> + <span v-if="scope.row.isCheck == 2">否</span> + </template> + </el-table-column> + <el-table-column align="center" prop="typeName" label="类别名称" /> + <el-table-column align="center" label="操作"> + <template #default="scope"> + <el-button type="primary" link :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button type="primary" link :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button type="primary" link :icon="Delete" @click="Deletes(scope.row.id)">删除</el-button> + <el-button type="primary" link :icon="CirclePlus" @click="openD('添加', scope.row.id)">添加下级设备设施类型管理</el-button> + </template> + </el-table-column> + </el-table> + <Dailog ref="Show" @onAdd="add"></Dailog> + </div> +</template> +<script lang="ts"> +import { defineComponent, onMounted, ref } from 'vue'; +import { Plus, View, EditPen, Delete, CirclePlus } from '@element-plus/icons-vue'; +import Dailog from './component/Dailog.vue'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +import { ElMessage,ElMessageBox } from 'element-plus'; +export default defineComponent({ + components: { Dailog }, + setup() { + // 列表 + const listApi = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + onMounted(() => { + listApi(); + }); + // 删除 + const Deletes = (id: number) => { + let arr = []; + arr.push(id); + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentTypeMngDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + const add = () => { + listApi(); + }; + const tableData = ref(); + const propse = { + children: 'childList', + }; + const Show = ref(); + const openD = (title: string, id: number) => { + Show.value.openDailog(title, id); + }; + return { + propse, + add, + tableData, + Show, + Deletes, + openD, + listApi, + Plus, + View, + EditPen, + CirclePlus, + Delete, + }; + }, +}); +</script> +<style scoped> +.box { + padding: 20px; + background-color: #fff; +} +</style> diff --git a/src/components/facilityManagement/keyEquipment/index.vue b/src/components/facilityManagement/keyEquipment/index.vue new file mode 100644 index 0000000..7e987d6 --- /dev/null +++ b/src/components/facilityManagement/keyEquipment/index.vue @@ -0,0 +1,384 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.qName" placeholder="装置/部位名称" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-row> + <el-col :span="4"> + <el-input v-model="filterText" style="height: 30px" placeholder="请输入关键字" /> + <div class="tree"> + <!-- <el-input v-model="filterText" style="height: 30px" placeholder="Filter keyword" />--> + <el-tree ref="treeRef" :data="data" :props="props" @node-click="handleNodeClick" :filter-node-method="filterNode" /> + </div> + </el-col> + <el-col :span="20"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen">修改</el-button> + <el-button size="default" :disabled="danger" type="danger" :icon="Delete" @click="onDeleteAll" plain>删除</el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Upload" @click="openUp"></el-button> + <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <div style="padding-left: 10px"> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick" style="margin: 0 5%"> + <el-tab-pane label="设备保养" name="first"> + <el-table ref="multipleTableRef" :data="scope.row.takecareDetailList" style="width: 100%"> + <el-table-column property="takecareMemo" align="center" label="保养情况" sortable /> + <el-table-column property="leadingPersonId" align="center" label="保养负责人" sortable /> + <el-table-column property="takecareDate" align="center" :formatter="timeDate" label="保养日期" sortable /> + <el-table-column property="leadingPersonDepartmentId" align="center" label="保养负责人单位" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备检查" name="second" + ><el-table ref="multipleTableRef" :data="scope.row.checkDetailList" style="width: 100%"> + <el-table-column property="leadingPersonId" align="center" label="检查人" sortable /> + <el-table-column property="createTime" align="center" :formatter="timeDate" label="检查日期" sortable /> + <el-table-column property="name" align="center" label="检查人部门" sortable /> + <el-table-column property="takecareMemo" align="center" label="检查结果" sortable /> + <el-table-column property="name" align="center" label="检查状态" sortable /> </el-table + ></el-tab-pane> + <el-tab-pane label="设备检测" name="third"> + <el-table ref="multipleTableRef" :data="scope.row.testDetailList" style="width: 100%"> + <el-table-column property="testPersonId" align="center" label="检测人" sortable /> + <el-table-column property="testDate" align="center" :formatter="timeDate" label="检测日期" sortable /> + <el-table-column property="testPersonDepartmentId" align="center" label="检测人单位" sortable /> + <el-table-column property="testMemo" align="center" label="检测内容" sortable /> + <el-table-column property="testResult" align="center" label="检测结果" sortable /> + <el-table-column property="testStatus" align="center" label="检测状态" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备维修" name="fourth"> + <el-table ref="multipleTableRef" :data="scope.row.repaireDetailList" style="width: 100%"> + <el-table-column property="exceptionInfo" align="center" label="设施异常项" sortable /> + <el-table-column property="repairStatus" align="center" label="维修状态" sortable /> + <el-table-column property="repairMemo" align="center" label="维修情况" sortable /> + <el-table-column property="repairPersonId" align="center" label="维修负责人" sortable /> + <el-table-column property="repairPersonDepartmentId" align="center" label="维修负责人单位" sortable /> + <el-table-column property="repairStartDate" align="center" :formatter="timeDate" label="维修开始日期" sortable /> + <el-table-column property="repairEndDate" align="center" :formatter="timeDate" label="维修结束日期" sortable /> + </el-table> + </el-tab-pane> + </el-tabs> + </template> + </el-table-column> + <el-table-column property="equipmentTypeId" align="center" label="类型/类别外键" sortable /> + <el-table-column property="qName" align="center" label="装置/部位名称" sortable /> + <el-table-column property="departmentId" label="所属部门" align="center" sortable show-overflow-tooltip /> + <el-table-column property="position" label="具体位置" align="center" sortable show-overflow-tooltip /> + <el-table-column property="leadingPersonName" label="负责人姓名" align="center" sortable show-overflow-tooltip /> + <el-table-column property="connectPersonId" label="装置部位分类" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-col> + </el-row> + <!-- <updata ref="Show"></updata>--> + <DailogS ref="ShowD" @navAddorUpdata="onAddorUpdata"></DailogS> + </div> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive, watch, onMounted } from 'vue'; +// import updata from '/@/components/updata/updata.vue' +import DailogS from '/@/components/equipmentDailog/DailogS.vue'; +import { ElTree, TabsPaneContext, ElMessage, ElMessageBox } from 'element-plus'; +import { EditPen, Plus, Delete, Download, Refresh, Upload, View } from '@element-plus/icons-vue'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +import {timeDate} from '/@/assets/index.ts' +interface Tree { + label: string; + children?: Tree[]; +} +export default defineComponent({ + components: { + // updata, + DailogS, + }, + setup() { + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + equipmentTypeId: '', ////类型/类别外键 + qName: '', ////装置/部位名称 + // departmentId: '',////所属部门 + // position: '', ////具体位置 + // leadingPersonName: '', ////负责人姓名 + // connectPersonId: '',////装置部位分类 + infoTpe: 0, ////具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施 3:重点监管装置/设备 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.qName = ''; + listApi(); + }; + const listApi = () => { + facilityManagementApi() + .getkeypointEquipmentInfoAddOrList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + const filterText = ref(''); + const treeRef = ref<InstanceType<typeof ElTree>>(); + // 树形 + const listApiTree = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + console.log(res.data.data); + data.value = res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + const props = { + label: 'typeName', + children: 'childList', + value: 'id', + } + watch(filterText, (val) => { + treeRef.value!.filter(val); + }); + const filterNode = (value: string, data: Tree) => { + if (!value) return true; + return data.typeName.includes(value); + }; + const handleNodeClick = (data: Tree) => { + console.log(data) + ruleForm.searchParams.qName = data.typeName; + + listApi(); + }; + const data = ref([]); + onMounted(() => { + listApiTree(); + }); + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getkeypointEquipmentInfoDetele(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr; + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getkeypointEquipmentInfoDetele(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + + const activeName = ref('first'); + + const handleClick = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event); + }; + // const Show=ref() + // const openUp=()=>{ + // Show.value.openDialog() + // } + // 新增弹窗 + const ShowD = ref(); + const openD = (title: String, id: number) => { + ShowD.value.openDailog(title, false, id, 2); + }; + return { + activeName, + handleClick, + ruleForm, + filterText, + treeRef, + props, + filterNode, + data, + tableData, + // Show, + // openUp, + ShowD, + danger, + openD, + // openEdit, + Plus, + EditPen, + listApiTree, + Delete, + View, + Download, + Refresh, + Upload, + resetForm, + listApi, + handleCurrentChange, + handleSizeChange, + onAddorUpdata, + total, + currentPage4, + pageSize4, + onDelete, + warning, + handleSelectionChange, + onDeleteAll, + handleNodeClick, + timeDate, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} +.tree { + height: 750px; + background-color: #fff; + overflow: hidden; + overflow-y: auto; +} +.btns { + padding: 10px 0px 10px 10px; + display: flex; + justify-content: space-between; + background-color: #fff; +} +</style> diff --git a/src/components/facilityManagement/safetyEquipment/index.vue b/src/components/facilityManagement/safetyEquipment/index.vue new file mode 100644 index 0000000..576cfb7 --- /dev/null +++ b/src/components/facilityManagement/safetyEquipment/index.vue @@ -0,0 +1,377 @@ +<template> + <div> + <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle"> + <el-row> + <el-col :span="4"> + <el-form-item size="default"> + <el-input v-model="ruleForm.searchParams.qName" placeholder="装置设施名称" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button size="default" type="primary" @click="listApi">查询</el-button> + <el-button size="default" @click="resetForm">重置</el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-row> + <el-col :span="4"> + <el-input v-model="filterText" style="height: 30px" placeholder="请输入关键字" /> + <div class="tree"> + + <!-- <el-tree ref="treeRef" class="filter-tree" :data="data" :props="props" :filter-node-method="filterNode" /> --> + <el-tree ref="treeRef" :data="data" :props="props" @node-click="handleNodeClick" :filter-node-method="filterNode" /> + </div> + </el-col> + <el-col :span="20"> + <div class="btns"> + <div> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> + <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen">修改</el-button> + <el-button size="default" :disabled="danger" type="danger" :icon="Delete" @click="onDeleteAll" plain>删除</el-button> + </div> + <div> + <!-- <el-button size="default" :icon="Upload" @click="openUp"></el-button> + <el-button size="default" :icon="Download"></el-button> + <el-button size="default" :icon="Refresh"></el-button> --> + </div> + </div> + <div style="padding-left: 10px"> + <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%"> + <el-table-column type="selection" align="center" width="55" /> + <el-table-column type="expand"> + <template #default="scope"> + <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClicks" style="margin: 0 5%"> + <el-tab-pane label="设备保养" name="first"> + <el-table ref="multipleTableRef" :data="scope.row.takecareDetailList" style="width: 100%"> + <el-table-column property="takecareMemo" align="center" label="保养情况" sortable /> + <el-table-column property="leadingPersonId" align="center" label="保养负责人" sortable /> + <el-table-column property="takecareDate" align="center" :formatter="timeDate" label="保养日期" sortable /> + <el-table-column property="leadingPersonDepartmentId" align="center" label="保养负责人单位" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备检查" name="second" + ><el-table ref="multipleTableRef" :data="scope.row.checkDetailList" style="width: 100%"> + <el-table-column property="leadingPersonId" align="center" label="检查人" sortable /> + <el-table-column property="createTime" align="center" :formatter="timeDate" label="检查日期" sortable /> + <el-table-column property="name" align="center" label="检查人部门" sortable /> + <el-table-column property="takecareMemo" align="center" label="检查结果" sortable /> + <el-table-column property="name" align="center" label="检查状态" sortable /> </el-table + ></el-tab-pane> + <el-tab-pane label="设备检测" name="third"> + <el-table ref="multipleTableRef" :data="scope.row.testDetailList" style="width: 100%"> + <el-table-column property="testPersonId" align="center" label="检测人" sortable /> + <el-table-column property="testDate" align="center" :formatter="timeDate" label="检测日期" sortable /> + <el-table-column property="testPersonDepartmentId" align="center" label="检测人单位" sortable /> + <el-table-column property="testMemo" align="center" label="检测内容" sortable /> + <el-table-column property="testResult" align="center" label="检测结果" sortable /> + <el-table-column property="testStatus" align="center" label="检测状态" sortable /> + </el-table> + </el-tab-pane> + <el-tab-pane label="设备维修" name="fourth"> + <el-table ref="multipleTableRef" :data="scope.row.repaireDetailList" style="width: 100%"> + <el-table-column property="exceptionInfo" align="center" label="设施异常项" sortable /> + <el-table-column property="repairStatus" align="center" label="维修状态" sortable /> + <el-table-column property="repairMemo" align="center" label="维修情况" sortable /> + <el-table-column property="repairPersonId" align="center" label="维修负责人" sortable /> + <el-table-column property="repairPersonDepartmentId" align="center" label="维修负责人单位" sortable /> + <el-table-column property="repairStartDate" align="center" :formatter="timeDate" label="维修开始日期" sortable /> + <el-table-column property="repairEndDate" align="center" :formatter="timeDate" label="维修结束日期" sortable /> + </el-table> + </el-tab-pane> + </el-tabs> + </template> + </el-table-column> + <el-table-column property="qName" label="装置设施名称" align="center" sortable /> + <el-table-column property="positionNum" align="center" label="装置设施位号" sortable /> + <el-table-column property="qUsage" align="center" label="装置设施用途" sortable /> + <el-table-column property="model" label="装置设施型号" align="center" sortable show-overflow-tooltip /> + <el-table-column property="equipmentTypeId" label="类型/类别外键" align="center" sortable show-overflow-tooltip /> + <el-table-column property="setPart" label="设施部位" align="center" sortable show-overflow-tooltip /> + <el-table-column label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="default" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button> + <el-button link type="primary" size="default" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button> + <el-button link type="primary" size="default" :icon="Delete" @click="onDelete(scope.row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pages"> + <el-pagination + v-model:currentPage="currentPage4" + v-model:page-size="pageSize4" + :page-sizes="[10, 20, 30, 40]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + </div> + </el-col> + </el-row> + <!-- <updata ref="Show"></updata> --> + <Dailog ref="openAdd" @navAddorUpdata="onAddorUpdata"></Dailog> + </div> +</template> +<script lang="ts"> +import { defineComponent, ref, reactive, watch, onMounted } from 'vue'; +import updata from '/@/components/updata/updata.vue'; +import Dailog from '/@/components/equipmentDailog/Dailog.vue'; +import { ElTree, TabsPaneContext, ElMessage, ElMessageBox } from 'element-plus'; +import { facilityManagementApi } from '/@/api/facilityManagement'; +import {timeDate} from '/@/assets/index.ts' +import { EditPen, View, Plus, Delete, Download, Refresh, Upload } from '@element-plus/icons-vue'; +interface Tree { + label: string; + children?: Tree[]; +} +export default defineComponent({ + components: { updata, Dailog }, + setup() { + // 搜索条件 + const ruleForm = reactive({ + pageSize: 10, + pageIndex: 1, + searchParams: { + qName: '', ////名称 + positionNum: '', ////位号 + infoType: 0, ////具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施 + }, + }); + // 重置 + const resetForm = () => { + ruleForm.searchParams.qName = ''; + ruleForm.searchParams.positionNum = ''; + listApi(); + }; + const listApi = () => { + facilityManagementApi() + .getequipmentInfoList(ruleForm) + .then((res) => { + if (res.data.code == 200) { + tableData.value = res.data.data; + currentPage4.value = res.data.pageIndex; + pageSize4.value = res.data.pageSize; + total.value = res.data.total; + } else { + ElMessage.error(res.data.msg); + } + }); + }; + // + onMounted(() => { + listApi(); + }); + const onAddorUpdata = () => { + listApi(); + }; + // 表格 + const tableData = ref(); + const currentPage4 = ref(); + const pageSize4 = ref(); + const total = ref(); + const handleSizeChange = (val: number) => { + // console.log(`${val} items per page`); + ruleForm.pageSize = val; + listApi(); + }; + const handleCurrentChange = (val: number) => { + // console.log(`current page: ${val}`); + ruleForm.pageIndex = val; + listApi(); + }; + // 弹窗 + const openAdd = ref(); + const openD = (title: String, id: number) => { + openAdd.value.openDailog(title,false,id,2); + }; + // 删除 + const onDelete = (id: number) => { + let arr=[] + arr.push(id) + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(arr) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + ElMessage({ + type: 'info', + message: 'Delete canceled', + }); + }); + }; + // 批量删除 + const warning = ref(true); + const danger = ref(true); + const deletAll = ref(); + const handleSelectionChange = (val: any) => { + let valId = JSON.parse(JSON.stringify(val)); + let arr = []; + for (let i = 0; i < valId.length; i++) { + arr.push(valId[i].id); + } + deletAll.value = arr + if (val.length == 1) { + warning.value = false; + danger.value = false; + } else if (val.length == 0) { + warning.value = true; + danger.value = true; + } else { + warning.value = true; + danger.value = false; + } + }; + const onDeleteAll = () => { + ElMessageBox.confirm('确定删除所选项吗?', 'Warning', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + facilityManagementApi() + .getequipmentInfoDelete(deletAll.value) + .then((res) => { + if (res.data.code == 200) { + ElMessage({ + message: res.data.msg, + type: 'success', + }); + listApi(); + } else { + ElMessage.error(res.data.msg); + } + }); + }) + .catch(() => { + // ElMessage({ + // type: 'info', + // message: 'Delete canceled', + // }); + }); + }; + const filterText = ref(''); + const treeRef = ref<InstanceType<typeof ElTree>>(); + // 树形 + const listApiTree = () => { + facilityManagementApi() + .getequipmentTypeMngTreeData() + .then((res) => { + if (res.data.code == 200) { + data.value= res.data.data; + } else { + ElMessage({ + showClose: true, + message: res.data.msg, + type: 'error', + }); + } + }); + }; + const props = { + label: 'typeName', + children: 'childList', + value: 'id', + } + watch(filterText, (val) => { + treeRef.value!.filter(val); + }); + + const filterNode = (value: string, data: Tree) => { + if (!value) return true; + return data.typeName.includes(value); + }; + const handleNodeClick=(data: Tree)=>{ + ruleForm.searchParams.positionNum=data.id + listApi(); + } + const data=ref([]) + onMounted(() => { + listApiTree(); + }); + const handleClicks = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event); + }; + + const activeName = ref('first'); + // const Show=ref() + // const openUp=()=>{ + // Show.value.openDialog() + // } + return { + handleNodeClick, + ruleForm, + resetForm, + listApi, + onAddorUpdata, + tableData, + currentPage4, + pageSize4, + total, + handleSizeChange, + handleCurrentChange, + onDelete, + warning, + danger, + deletAll, + handleSelectionChange, + onDeleteAll, + listApiTree, + handleClicks, + filterText, + treeRef, + props, + filterNode, + data, + openAdd, + openD, + activeName, + Plus, + EditPen, + Delete, + Download, + Refresh, + View, + Upload, + timeDate, + }; + }, +}); +</script> +<style scoped> +.topTitle { + background-color: #fff; + padding: 20px 0px 20px 0px; + margin-bottom: 10px; +} +.tree { + height: 750px; + background-color: #fff; + overflow: hidden; + overflow-y: auto; +} +.btns { + padding: 10px 0px 10px 10px; + display: flex; + justify-content: space-between; + background-color: #fff; +} +</style> diff --git a/src/components/iconSelector/index.vue b/src/components/iconSelector/index.vue index 3010e16..f4547d9 100644 --- a/src/components/iconSelector/index.vue +++ b/src/components/iconSelector/index.vue @@ -1,252 +1,231 @@ -<!--<template>--> -<!-- <div class="icon-selector w100 h100">--> -<!-- <el-popover--> -<!-- placement="bottom"--> -<!-- :width="fontIconWidth"--> -<!-- trigger="click"--> -<!-- transition="el-zoom-in-top"--> -<!-- popper-class="icon-selector-popper"--> -<!-- @show="onPopoverShow"--> -<!-- >--> -<!-- <template #reference>--> -<!-- <el-input--> -<!-- v-model="fontIconSearch"--> -<!-- :placeholder="fontIconPlaceholder"--> -<!-- :clearable="clearable"--> -<!-- :disabled="disabled"--> -<!-- :size="size"--> -<!-- ref="inputWidthRef"--> -<!-- @clear="onClearFontIcon"--> -<!-- @focus="onIconFocus"--> -<!-- @blur="onIconBlur"--> -<!-- >--> -<!-- <template #prepend>--> -<!-- <SvgIcon--> -<!-- :name="fontIconPrefix === '' ? prepend : fontIconPrefix"--> -<!-- class="font14"--> -<!-- v-if="fontIconPrefix === '' ? prepend?.indexOf('ele-') > -1 : fontIconPrefix?.indexOf('ele-') > -1"--> -<!-- />--> -<!-- <i v-else :class="fontIconPrefix === '' ? prepend : fontIconPrefix" class="font14"></i>--> -<!-- </template>--> -<!-- </el-input>--> -<!-- </template>--> -<!-- <template #default>--> -<!-- <div class="icon-selector-warp">--> -<!-- <div class="icon-selector-warp-title flex">--> -<!-- <div class="flex-auto">{{ title }}</div>--> -<!-- <div class="icon-selector-warp-title-tab" v-if="type === 'all'">--> -<!-- <span :class="{ 'span-active': fontIconType === 'ali' }" @click="onIconChange('ali')" class="ml10" title="iconfont 图标">ali</span>--> -<!-- <span :class="{ 'span-active': fontIconType === 'ele' }" @click="onIconChange('ele')" class="ml10" title="elementPlus 图标">ele</span>--> -<!-- <span :class="{ 'span-active': fontIconType === 'awe' }" @click="onIconChange('awe')" class="ml10" title="fontawesome 图标">awe</span>--> -<!-- </div>--> -<!-- </div>--> -<!-- <div class="icon-selector-warp-row">--> -<!-- <el-scrollbar ref="selectorScrollbarRef">--> -<!-- <el-row :gutter="10" v-if="fontIconSheetsFilterList.length > 0">--> -<!-- <el-col :xs="6" :sm="4" :md="4" :lg="4" :xl="4" @click="onColClick(v)" v-for="(v, k) in fontIconSheetsFilterList" :key="k">--> -<!-- <div class="icon-selector-warp-item" :class="{ 'icon-selector-active': fontIconPrefix === v }">--> -<!-- <div class="flex-margin">--> -<!-- <div class="icon-selector-warp-item-value">--> -<!-- <SvgIcon :name="v" />--> -<!-- </div>--> -<!-- </div>--> -<!-- </div>--> -<!-- </el-col>--> -<!-- </el-row>--> -<!-- <el-empty :image-size="100" v-if="fontIconSheetsFilterList.length <= 0" :description="emptyDescription"></el-empty>--> -<!-- </el-scrollbar>--> -<!-- </div>--> -<!-- </div>--> -<!-- </template>--> -<!-- </el-popover>--> -<!-- </div>--> -<!--</template>--> +<template> + <div class="icon-selector w100 h100"> + <el-popover placement="bottom" :width="fontIconWidth" trigger="click" transition="el-zoom-in-top" popper-class="icon-selector-popper" @show="onPopoverShow"> + <template #reference> + <el-input v-model="fontIconSearch" :placeholder="fontIconPlaceholder" :clearable="clearable" :disabled="disabled" :size="size" ref="inputWidthRef" @clear="onClearFontIcon" @focus="onIconFocus" @blur="onIconBlur"> + <template #prepend> + <SvgIcon :name="fontIconPrefix === '' ? prepend : fontIconPrefix" class="font14" v-if="fontIconPrefix === '' ? prepend?.indexOf('ele-') > -1 : fontIconPrefix?.indexOf('ele-') > -1" /> + <i v-else :class="fontIconPrefix === '' ? prepend : fontIconPrefix" class="font14"></i> + </template> + </el-input> + </template> + <template #default> + <div class="icon-selector-warp"> + <div class="icon-selector-warp-title flex"> + <div class="flex-auto">{{ title }}</div> + <div class="icon-selector-warp-title-tab" v-if="type === 'all'"> + <span :class="{ 'span-active': fontIconType === 'ali' }" @click="onIconChange('ali')" class="ml10" title="iconfont 图标">ali</span> + <span :class="{ 'span-active': fontIconType === 'ele' }" @click="onIconChange('ele')" class="ml10" title="elementPlus 图标">ele</span> + <span :class="{ 'span-active': fontIconType === 'awe' }" @click="onIconChange('awe')" class="ml10" title="fontawesome 图标">awe</span> + </div> + </div> + <div class="icon-selector-warp-row"> + <el-scrollbar ref="selectorScrollbarRef"> + <el-row :gutter="10" v-if="fontIconSheetsFilterList.length > 0"> + <el-col :xs="6" :sm="4" :md="4" :lg="4" :xl="4" @click="onColClick(v)" v-for="(v, k) in fontIconSheetsFilterList" :key="k"> + <div class="icon-selector-warp-item" :class="{ 'icon-selector-active': fontIconPrefix === v }"> + <div class="flex-margin"> + <div class="icon-selector-warp-item-value"> + <SvgIcon :name="v" /> + </div> + </div> + </div> + </el-col> + </el-row> + <el-empty :image-size="100" v-if="fontIconSheetsFilterList.length <= 0" :description="emptyDescription"></el-empty> + </el-scrollbar> + </div> + </div> + </template> + </el-popover> + </div> +</template> -<!--<script lang="ts">--> -<!--import { ref, toRefs, reactive, onMounted, nextTick, computed, watch, defineComponent } from 'vue';--> -<!--import initIconfont from '/@/utils/getStyleSheets';--> +<script lang="ts"> +import { ref, toRefs, reactive, onMounted, nextTick, computed, watch, defineComponent } from 'vue'; +// import initIconfont from '/@/utils/getStyleSheets'; -<!--export default defineComponent({--> -<!-- name: 'iconSelector',--> -<!-- emits: ['update:modelValue', 'get', 'clear'],--> -<!-- props: {--> -<!-- // 输入框前置内容--> -<!-- prepend: {--> -<!-- type: String,--> -<!-- default: () => 'ele-Pointer',--> -<!-- },--> -<!-- // 输入框占位文本--> -<!-- placeholder: {--> -<!-- type: String,--> -<!-- default: () => '请输入内容搜索图标或者选择图标',--> -<!-- },--> -<!-- // 输入框占位文本--> -<!-- size: {--> -<!-- type: String,--> -<!-- default: () => 'default',--> -<!-- },--> -<!-- // 弹窗标题--> -<!-- title: {--> -<!-- type: String,--> -<!-- default: () => '请选择图标',--> -<!-- },--> -<!-- // icon 图标类型--> -<!-- type: {--> -<!-- type: String,--> -<!-- default: () => 'ele',--> -<!-- },--> -<!-- // 禁用--> -<!-- disabled: {--> -<!-- type: Boolean,--> -<!-- default: () => false,--> -<!-- },--> -<!-- // 是否可清空--> -<!-- clearable: {--> -<!-- type: Boolean,--> -<!-- default: () => true,--> -<!-- },--> -<!-- // 自定义空状态描述文字--> -<!-- emptyDescription: {--> -<!-- type: String,--> -<!-- default: () => '无相关图标',--> -<!-- },--> -<!-- // 双向绑定值,默认为 modelValue,--> -<!-- // 参考:https://v3.cn.vuejs.org/guide/migration/v-model.html#%E8%BF%81%E7%A7%BB%E7%AD%96%E7%95%A5--> -<!-- // 参考:https://v3.cn.vuejs.org/guide/component-custom-events.html#%E5%A4%9A%E4%B8%AA-v-model-%E7%BB%91%E5%AE%9A--> -<!-- modelValue: String,--> -<!-- },--> -<!-- setup(props, { emit }) {--> -<!-- const inputWidthRef = ref();--> -<!-- const selectorScrollbarRef = ref();--> -<!-- const state = reactive({--> -<!-- fontIconPrefix: '',--> -<!-- fontIconWidth: 0,--> -<!-- fontIconSearch: '',--> -<!-- fontIconTabsIndex: 0,--> -<!-- fontIconSheetsList: [],--> -<!-- fontIconPlaceholder: '',--> -<!-- fontIconType: 'ali',--> -<!-- fontIconShow: true,--> -<!-- });--> -<!-- // 处理 input 获取焦点时,modelValue 有值时,改变 input 的 placeholder 值--> -<!-- const onIconFocus = () => {--> -<!-- if (!props.modelValue) return false;--> -<!-- state.fontIconSearch = '';--> -<!-- state.fontIconPlaceholder = props.modelValue;--> -<!-- };--> -<!-- // 处理 input 失去焦点时,为空将清空 input 值,为点击选中图标时,将取原先值--> -<!-- const onIconBlur = () => {--> -<!-- setTimeout(() => {--> -<!-- const icon = state.fontIconSheetsList.filter((icon: string) => icon === state.fontIconSearch);--> -<!-- if (icon.length <= 0) state.fontIconSearch = '';--> -<!-- }, 300);--> -<!-- };--> -<!-- // 处理 icon 双向绑定数值回显--> -<!-- const initModeValueEcho = () => {--> -<!-- if (props.modelValue === '') return ((<string | undefined>state.fontIconPlaceholder) = props.placeholder);--> -<!-- (<string | undefined>state.fontIconPlaceholder) = props.modelValue;--> -<!-- (<string | undefined>state.fontIconPrefix) = props.modelValue;--> -<!-- };--> -<!-- // 处理 icon type 类型为 all 时,类型 ali、ele、awe 回显问题--> -<!-- const initFontIconTypeEcho = () => {--> -<!-- if ((<any>props.modelValue)?.indexOf('iconfont') > -1) onIconChange('ali');--> -<!-- else if ((<any>props.modelValue)?.indexOf('ele-') > -1) onIconChange('ele');--> -<!-- else if ((<any>props.modelValue)?.indexOf('fa') > -1) onIconChange('awe');--> -<!-- else onIconChange('ali');--> -<!-- };--> -<!-- // 图标搜索及图标数据显示--> -<!-- const fontIconSheetsFilterList = computed(() => {--> -<!-- if (!state.fontIconSearch) return state.fontIconSheetsList;--> -<!-- let search = state.fontIconSearch.trim().toLowerCase();--> -<!-- return state.fontIconSheetsList.filter((item: any) => {--> -<!-- if (item.toLowerCase().indexOf(search) !== -1) return item;--> -<!-- });--> -<!-- });--> -<!-- // 获取 input 的宽度--> -<!-- const getInputWidth = () => {--> -<!-- nextTick(() => {--> -<!-- state.fontIconWidth = inputWidthRef.value.$el.offsetWidth;--> -<!-- });--> -<!-- };--> -<!-- // 监听页面宽度改变--> -<!-- const initResize = () => {--> -<!-- window.addEventListener('resize', () => {--> -<!-- getInputWidth();--> -<!-- });--> -<!-- };--> -<!-- // 初始化数据--> -<!-- const initFontIconData = async (type: string) => {--> -<!-- state.fontIconSheetsList = [];--> -<!-- if (type === 'ali') {--> -<!-- await initIconfont.ali().then((res: any) => {--> -<!-- // 阿里字体图标使用 `iconfont xxx`--> -<!-- state.fontIconSheetsList = res.map((i: string) => `iconfont ${i}`);--> -<!-- });--> -<!-- } else if (type === 'ele') {--> -<!-- await initIconfont.ele().then((res: any) => {--> -<!-- state.fontIconSheetsList = res;--> -<!-- });--> -<!-- } else if (type === 'awe') {--> -<!-- await initIconfont.awe().then((res: any) => {--> -<!-- // fontawesome字体图标使用 `fa xxx`--> -<!-- state.fontIconSheetsList = res.map((i: string) => `fa ${i}`);--> -<!-- });--> -<!-- }--> -<!-- // 初始化 input 的 placeholder--> -<!-- // 参考(单项数据流):https://cn.vuejs.org/v2/guide/components-props.html?#%E5%8D%95%E5%90%91%E6%95%B0%E6%8D%AE%E6%B5%81--> -<!-- state.fontIconPlaceholder = props.placeholder;--> -<!-- // 初始化双向绑定回显--> -<!-- initModeValueEcho();--> -<!-- };--> -<!-- // 图标点击切换--> -<!-- const onIconChange = (type: string) => {--> -<!-- state.fontIconType = type;--> -<!-- initFontIconData(type);--> -<!-- };--> -<!-- // 获取当前点击的 icon 图标--> -<!-- const onColClick = (v: any) => {--> -<!-- state.fontIconPlaceholder = v;--> -<!-- state.fontIconPrefix = v;--> -<!-- emit('get', state.fontIconPrefix);--> -<!-- emit('update:modelValue', state.fontIconPrefix);--> -<!-- };--> -<!-- // 清空当前点击的 icon 图标--> -<!-- const onClearFontIcon = () => {--> -<!-- state.fontIconPrefix = '';--> -<!-- emit('clear', state.fontIconPrefix);--> -<!-- emit('update:modelValue', state.fontIconPrefix);--> -<!-- };--> -<!-- // 监听 Popover 打开,用于双向绑定值回显--> -<!-- const onPopoverShow = () => {--> -<!-- initModeValueEcho();--> -<!-- initFontIconTypeEcho();--> -<!-- };--> -<!-- // 页面加载时--> -<!-- onMounted(() => {--> -<!-- initModeValueEcho();--> -<!-- initResize();--> -<!-- getInputWidth();--> -<!-- });--> +export default defineComponent({ + name: 'iconSelector', + emits: ['update:modelValue', 'get', 'clear'], + props: { + // 输入框前置内容 + prepend: { + type: String, + default: () => 'ele-Pointer' + }, + // 输入框占位文本 + placeholder: { + type: String, + default: () => '请输入内容搜索图标或者选择图标' + }, + // 输入框占位文本 + size: { + type: String, + default: () => 'default' + }, + // 弹窗标题 + title: { + type: String, + default: () => '请选择图标' + }, + // icon 图标类型 + type: { + type: String, + default: () => 'ele' + }, + // 禁用 + disabled: { + type: Boolean, + default: () => false + }, + // 是否可清空 + clearable: { + type: Boolean, + default: () => true + }, + // 自定义空状态描述文字 + emptyDescription: { + type: String, + default: () => '无相关图标' + }, + // 双向绑定值,默认为 modelValue, + // 参考:https://v3.cn.vuejs.org/guide/migration/v-model.html#%E8%BF%81%E7%A7%BB%E7%AD%96%E7%95%A5 + // 参考:https://v3.cn.vuejs.org/guide/component-custom-events.html#%E5%A4%9A%E4%B8%AA-v-model-%E7%BB%91%E5%AE%9A + modelValue: String + }, + setup(props, { emit }) { + const inputWidthRef = ref(); + const selectorScrollbarRef = ref(); + const state = reactive({ + fontIconPrefix: '', + fontIconWidth: 0, + fontIconSearch: '', + fontIconTabsIndex: 0, + fontIconSheetsList: [], + fontIconPlaceholder: '', + fontIconType: 'ali', + fontIconShow: true + }); + // 处理 input 获取焦点时,modelValue 有值时,改变 input 的 placeholder 值 + const onIconFocus = () => { + if (!props.modelValue) return false; + state.fontIconSearch = ''; + state.fontIconPlaceholder = props.modelValue; + }; + // 处理 input 失去焦点时,为空将清空 input 值,为点击选中图标时,将取原先值 + const onIconBlur = () => { + setTimeout(() => { + const icon = state.fontIconSheetsList.filter((icon: string) => icon === state.fontIconSearch); + if (icon.length <= 0) state.fontIconSearch = ''; + }, 300); + }; + // 处理 icon 双向绑定数值回显 + const initModeValueEcho = () => { + if (props.modelValue === '') return ((<string | undefined>state.fontIconPlaceholder) = props.placeholder); + (<string | undefined>state.fontIconPlaceholder) = props.modelValue; + (<string | undefined>state.fontIconPrefix) = props.modelValue; + }; + // 处理 icon type 类型为 all 时,类型 ali、ele、awe 回显问题 + const initFontIconTypeEcho = () => { + if ((<any>props.modelValue)?.indexOf('iconfont') > -1) onIconChange('ali'); + else if ((<any>props.modelValue)?.indexOf('ele-') > -1) onIconChange('ele'); + else if ((<any>props.modelValue)?.indexOf('fa') > -1) onIconChange('awe'); + else onIconChange('ali'); + }; + // 图标搜索及图标数据显示 + const fontIconSheetsFilterList = computed(() => { + if (!state.fontIconSearch) return state.fontIconSheetsList; + let search = state.fontIconSearch.trim().toLowerCase(); + return state.fontIconSheetsList.filter((item: any) => { + if (item.toLowerCase().indexOf(search) !== -1) return item; + }); + }); + // 获取 input 的宽度 + const getInputWidth = () => { + nextTick(() => { + state.fontIconWidth = inputWidthRef.value.$el.offsetWidth; + }); + }; + // 监听页面宽度改变 + const initResize = () => { + window.addEventListener('resize', () => { + getInputWidth(); + }); + }; + // 初始化数据 + const initFontIconData = async (type: string) => { + state.fontIconSheetsList = []; + if (type === 'ali') { + await initIconfont.ali().then((res: any) => { + // 阿里字体图标使用 `iconfont xxx` + state.fontIconSheetsList = res.map((i: string) => `iconfont ${i}`); + }); + } else if (type === 'ele') { + await initIconfont.ele().then((res: any) => { + state.fontIconSheetsList = res; + }); + } else if (type === 'awe') { + await initIconfont.awe().then((res: any) => { + // fontawesome字体图标使用 `fa xxx` + state.fontIconSheetsList = res.map((i: string) => `fa ${i}`); + }); + } + // 初始化 input 的 placeholder + // 参考(单项数据流):https://cn.vuejs.org/v2/guide/components-props.html?#%E5%8D%95%E5%90%91%E6%95%B0%E6%8D%AE%E6%B5%81 + state.fontIconPlaceholder = props.placeholder; + // 初始化双向绑定回显 + initModeValueEcho(); + }; + // 图标点击切换 + const onIconChange = (type: string) => { + state.fontIconType = type; + initFontIconData(type); + }; + // 获取当前点击的 icon 图标 + const onColClick = (v: any) => { + state.fontIconPlaceholder = v; + state.fontIconPrefix = v; + emit('get', state.fontIconPrefix); + emit('update:modelValue', state.fontIconPrefix); + }; + // 清空当前点击的 icon 图标 + const onClearFontIcon = () => { + state.fontIconPrefix = ''; + emit('clear', state.fontIconPrefix); + emit('update:modelValue', state.fontIconPrefix); + }; + // 监听 Popover 打开,用于双向绑定值回显 + const onPopoverShow = () => { + initModeValueEcho(); + initFontIconTypeEcho(); + }; + // 页面加载时 + onMounted(() => { + initModeValueEcho(); + initResize(); + getInputWidth(); + }); -<!-- // 监听双向绑定 modelValue 的变化--> -<!-- watch(--> -<!-- () => props.modelValue,--> -<!-- () => {--> -<!-- initModeValueEcho();--> -<!-- }--> -<!-- );--> -<!-- return {--> -<!-- inputWidthRef,--> -<!-- selectorScrollbarRef,--> -<!-- fontIconSheetsFilterList,--> -<!-- onColClick,--> -<!-- onIconChange,--> -<!-- onClearFontIcon,--> -<!-- onIconFocus,--> -<!-- onIconBlur,--> -<!-- onPopoverShow,--> -<!-- ...toRefs(state),--> -<!-- };--> -<!-- },--> -<!--});--> -<!--</script>--> + // 监听双向绑定 modelValue 的变化 + watch( + () => props.modelValue, + () => { + initModeValueEcho(); + } + ); + return { + inputWidthRef, + selectorScrollbarRef, + fontIconSheetsFilterList, + onColClick, + onIconChange, + onClearFontIcon, + onIconFocus, + onIconBlur, + onPopoverShow, + ...toRefs(state) + }; + } +}); +</script> diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue index e0e0ba4..415e04e 100644 --- a/src/layout/navBars/breadcrumb/user.vue +++ b/src/layout/navBars/breadcrumb/user.vue @@ -7,20 +7,14 @@ <template #dropdown> <el-dropdown-menu> <el-dropdown-item command="large" :disabled="disabledSize === 'large'">{{ $t('message.user.dropdownLarge') }}</el-dropdown-item> - <el-dropdown-item command="default" :disabled="disabledSize === 'default'">{{ - $t('message.user.dropdownDefault') - }}</el-dropdown-item> + <el-dropdown-item command="default" :disabled="disabledSize === 'default'">{{ $t('message.user.dropdownDefault') }}</el-dropdown-item> <el-dropdown-item command="small" :disabled="disabledSize === 'small'">{{ $t('message.user.dropdownSmall') }}</el-dropdown-item> </el-dropdown-menu> </template> </el-dropdown> <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange"> <div class="layout-navbars-breadcrumb-user-icon"> - <i - class="iconfont" - :class="disabledI18n === 'en' ? 'icon-fuhao-yingwen' : 'icon-fuhao-zhongwen'" - :title="$t('message.user.title1')" - ></i> + <i class="iconfont" :class="disabledI18n === 'en' ? 'icon-fuhao-yingwen' : 'icon-fuhao-zhongwen'" :title="$t('message.user.title1')"></i> </div> <template #dropdown> <el-dropdown-menu> @@ -35,29 +29,25 @@ <ele-Search /> </el-icon> </div> - <div class="layout-navbars-breadcrumb-user-icon" @click="onLayoutSetingClick"> - <i class="icon-skin iconfont" :title="$t('message.user.title3')"></i> - </div> - <div class="layout-navbars-breadcrumb-user-icon"> - <el-popover placement="bottom" trigger="click" transition="el-zoom-in-top" :width="300" :persistent="false"> - <template #reference> - <el-badge :is-dot="true"> - <el-icon :title="$t('message.user.title4')"> - <ele-Bell /> - </el-icon> - </el-badge> - </template> - <template #default> - <UserNews /> - </template> - </el-popover> - </div> + <!-- <div class="layout-navbars-breadcrumb-user-icon" @click="onLayoutSetingClick">--> + <!-- <i class="icon-skin iconfont" :title="$t('message.user.title3')"></i>--> + <!-- </div>--> + <!-- <div class="layout-navbars-breadcrumb-user-icon">--> + <!-- <el-popover placement="bottom" trigger="click" transition="el-zoom-in-top" :width="300" :persistent="false">--> + <!-- <template #reference>--> + <!-- <el-badge :is-dot="true">--> + <!-- <el-icon :title="$t('message.user.title4')">--> + <!-- <ele-Bell />--> + <!-- </el-icon>--> + <!-- </el-badge>--> + <!-- </template>--> + <!-- <template #default>--> + <!-- <UserNews />--> + <!-- </template>--> + <!-- </el-popover>--> + <!-- </div>--> <div class="layout-navbars-breadcrumb-user-icon mr10" @click="onScreenfullClick"> - <i - class="iconfont" - :title="isScreenfull ? $t('message.user.title6') : $t('message.user.title5')" - :class="!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'" - ></i> + <i class="iconfont" :title="isScreenfull ? $t('message.user.title6') : $t('message.user.title5')" :class="!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'"></i> </div> <el-dropdown :show-timeout="70" :hide-timeout="50" @command="onHandleCommandClick"> <span class="layout-navbars-breadcrumb-user-link"> diff --git a/src/stores/themeConfig.ts b/src/stores/themeConfig.ts index 198e155..fd74bd9 100644 --- a/src/stores/themeConfig.ts +++ b/src/stores/themeConfig.ts @@ -10,137 +10,137 @@ * 2、或者点击布局配置最底部 `一键恢复默认` 按钮即可看到效果 */ export const useThemeConfig = defineStore('themeConfig', { - state: (): ThemeConfigStates => ({ - themeConfig: { - // 是否开启布局配置抽屉 - isDrawer: false, + state: (): ThemeConfigStates => ({ + themeConfig: { + // 是否开启布局配置抽屉 + isDrawer: false, - /** - * 全局主题 - */ - // 默认 primary 主题颜色 - primary: '#409eff', - // 是否开启深色模式 - isIsDark: false, + /** + * 全局主题 + */ + // 默认 primary 主题颜色 + primary: '#409eff', + // 是否开启深色模式 + isIsDark: false, - /** - * 菜单 / 顶栏 - * 注意:v1.0.17 版本去除设置布局切换,重置主题样式(initSetLayoutChange), - * 切换布局需手动设置样式,设置的样式自动同步各布局, - * 代码位置:/@/layout/navBars/breadcrumb/setings.vue - */ - // 默认顶栏导航背景颜色 - topBar: '#ffffff', - // 默认顶栏导航字体颜色 - topBarColor: '#606266', - // 是否开启顶栏背景颜色渐变 - isTopBarColorGradual: false, - // 默认菜单导航背景颜色 - menuBar: '#545c64', - // 默认菜单导航字体颜色 - menuBarColor: '#eaeaea', - // 是否开启菜单背景颜色渐变 - isMenuBarColorGradual: false, - // 默认分栏菜单背景颜色 - columnsMenuBar: '#545c64', - // 默认分栏菜单字体颜色 - columnsMenuBarColor: '#e6e6e6', - // 是否开启分栏菜单背景颜色渐变 - isColumnsMenuBarColorGradual: false, + /** + * 菜单 / 顶栏 + * 注意:v1.0.17 版本去除设置布局切换,重置主题样式(initSetLayoutChange), + * 切换布局需手动设置样式,设置的样式自动同步各布局, + * 代码位置:/@/layout/navBars/breadcrumb/setings.vue + */ + // 默认顶栏导航背景颜色 + topBar: '#ffffff', + // 默认顶栏导航字体颜色 + topBarColor: '#606266', + // 是否开启顶栏背景颜色渐变 + isTopBarColorGradual: false, + // 默认菜单导航背景颜色 + menuBar: '#545c64', + // 默认菜单导航字体颜色 + menuBarColor: '#eaeaea', + // 是否开启菜单背景颜色渐变 + isMenuBarColorGradual: false, + // 默认分栏菜单背景颜色 + columnsMenuBar: '#545c64', + // 默认分栏菜单字体颜色 + columnsMenuBarColor: '#e6e6e6', + // 是否开启分栏菜单背景颜色渐变 + isColumnsMenuBarColorGradual: false, - /** - * 界面设置 - */ - // 是否开启菜单水平折叠效果 - isCollapse: false, - // 是否开启菜单手风琴效果 - isUniqueOpened: false, - // 是否开启固定 Header - isFixedHeader: false, - // 初始化变量,用于更新菜单 el-scrollbar 的高度,请勿删除 - isFixedHeaderChange: false, - // 是否开启经典布局分割菜单(仅经典布局生效) - isClassicSplitMenu: false, - // 是否开启自动锁屏 - isLockScreen: false, - // 开启自动锁屏倒计时(s/秒) - lockScreenTime: 30, + /** + * 界面设置 + */ + // 是否开启菜单水平折叠效果 + isCollapse: false, + // 是否开启菜单手风琴效果 + isUniqueOpened: false, + // 是否开启固定 Header + isFixedHeader: false, + // 初始化变量,用于更新菜单 el-scrollbar 的高度,请勿删除 + isFixedHeaderChange: false, + // 是否开启经典布局分割菜单(仅经典布局生效) + isClassicSplitMenu: false, + // 是否开启自动锁屏 + isLockScreen: false, + // 开启自动锁屏倒计时(s/秒) + lockScreenTime: 30, - /** - * 界面显示 - */ - // 是否开启侧边栏 Logo - isShowLogo: false, - // 初始化变量,用于 el-scrollbar 的高度更新,请勿删除 - isShowLogoChange: false, - // 是否开启 Breadcrumb,强制经典、横向布局不显示 - isBreadcrumb: true, - // 是否开启 Tagsview - isTagsview: true, - // 是否开启 Breadcrumb 图标 - isBreadcrumbIcon: false, - // 是否开启 Tagsview 图标 - isTagsviewIcon: false, - // 是否开启 TagsView 缓存 - isCacheTagsView: false, - // 是否开启 TagsView 拖拽 - isSortableTagsView: true, - // 是否开启 TagsView 共用 - isShareTagsView: false, - // 是否开启 Footer 底部版权信息 - isFooter: false, - // 是否开启灰色模式 - isGrayscale: false, - // 是否开启色弱模式 - isInvert: false, - // 是否开启水印 - isWartermark: false, - // 水印文案 - wartermarkText: 'small@小柒', + /** + * 界面显示 + */ + // 是否开启侧边栏 Logo + isShowLogo: false, + // 初始化变量,用于 el-scrollbar 的高度更新,请勿删除 + isShowLogoChange: false, + // 是否开启 Breadcrumb,强制经典、横向布局不显示 + isBreadcrumb: true, + // 是否开启 Tagsview + isTagsview: true, + // 是否开启 Breadcrumb 图标 + isBreadcrumbIcon: false, + // 是否开启 Tagsview 图标 + isTagsviewIcon: false, + // 是否开启 TagsView 缓存 + isCacheTagsView: false, + // 是否开启 TagsView 拖拽 + isSortableTagsView: true, + // 是否开启 TagsView 共用 + isShareTagsView: false, + // 是否开启 Footer 底部版权信息 + isFooter: false, + // 是否开启灰色模式 + isGrayscale: false, + // 是否开启色弱模式 + isInvert: false, + // 是否开启水印 + isWartermark: false, + // 水印文案 + wartermarkText: 'small@小柒', - /** - * 其它设置 - */ - // Tagsview 风格:可选值"<tags-style-one|tags-style-four|tags-style-five>",默认 tags-style-five - // 定义的值与 `/src/layout/navBars/tagsView/tagsView.vue` 中的 class 同名 - tagsStyle: 'tags-style-five', - // 主页面切换动画:可选值"<slide-right|slide-left|opacitys>",默认 slide-right - animation: 'slide-right', - // 分栏高亮风格:可选值"<columns-round|columns-card>",默认 columns-round - columnsAsideStyle: 'columns-round', - // 分栏布局风格:可选值"<columns-horizontal|columns-vertical>",默认 columns-horizontal - columnsAsideLayout: 'columns-vertical', + /** + * 其它设置 + */ + // Tagsview 风格:可选值"<tags-style-one|tags-style-four|tags-style-five>",默认 tags-style-five + // 定义的值与 `/src/layout/navBars/tagsView/tagsView.vue` 中的 class 同名 + tagsStyle: 'tags-style-five', + // 主页面切换动画:可选值"<slide-right|slide-left|opacitys>",默认 slide-right + animation: 'slide-right', + // 分栏高亮风格:可选值"<columns-round|columns-card>",默认 columns-round + columnsAsideStyle: 'columns-round', + // 分栏布局风格:可选值"<columns-horizontal|columns-vertical>",默认 columns-horizontal + columnsAsideLayout: 'columns-vertical', - /** - * 布局切换 - * 注意:为了演示,切换布局时,颜色会被还原成默认,代码位置:/@/layout/navBars/breadcrumb/setings.vue - * 中的 `initSetLayoutChange(设置布局切换,重置主题样式)` 方法 - */ - // 布局切换:可选值"<defaults|classic|transverse|columns>",默认 defaults - layout: 'defaults', + /** + * 布局切换 + * 注意:为了演示,切换布局时,颜色会被还原成默认,代码位置:/@/layout/navBars/breadcrumb/setings.vue + * 中的 `initSetLayoutChange(设置布局切换,重置主题样式)` 方法 + */ + // 布局切换:可选值"<defaults|classic|transverse|columns>",默认 defaults + layout: 'classic', - /** - * 后端控制路由 - */ - // 是否开启后端控制路由 - isRequestRoutes: true, + /** + * 后端控制路由 + */ + // 是否开启后端控制路由 + isRequestRoutes: true, - /** - * 全局网站标题 / 副标题 - */ - // 网站主标题(菜单导航、浏览器当前网页标题) - globalTitle: 'vue-next-admin', - // 网站副标题(登录页顶部文字) - globalViceTitle: 'vueNextAdmin', - // 默认初始语言,可选值"<zh-cn|en|zh-tw>",默认 zh-cn - globalI18n: 'zh-cn', - // 默认全局组件大小,可选值"<large|'default'|small>",默认 'large' - globalComponentSize: 'large', - }, - }), - actions: { - setThemeConfig(data: ThemeConfigState) { - this.themeConfig = data; - }, - }, + /** + * 全局网站标题 / 副标题 + */ + // 网站主标题(菜单导航、浏览器当前网页标题) + globalTitle: 'vue-next-admin', + // 网站副标题(登录页顶部文字) + globalViceTitle: 'vueNextAdmin', + // 默认初始语言,可选值"<zh-cn|en|zh-tw>",默认 zh-cn + globalI18n: 'zh-cn', + // 默认全局组件大小,可选值"<large|'default'|small>",默认 'large' + globalComponentSize: 'large' + } + }), + actions: { + setThemeConfig(data: ThemeConfigState) { + this.themeConfig = data; + } + } }); diff --git a/src/utils/request.ts b/src/utils/request.ts index 9b5d13d..14169b4 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -50,12 +50,16 @@ // 对响应数据做点什么 if (response.data.code && response.data.code === 'A0213') { ElMessage.error('用户uid不存在'); - Session.clear(); - window.location.href = '/'; + setTimeout(() => { + Session.clear(); + window.location.href = '/'; + }, 1000); } else if (response.data.code && response.data.code === 'A0215') { ElMessage.error('token失效'); - Session.clear(); - window.location.href = '/'; + setTimeout(() => { + Session.clear(); + window.location.href = '/'; + }, 1000); } // if(response.data.code && response.data.code !== '200'){ return Promise.resolve(response); @@ -83,8 +87,16 @@ // 对响应错误做点什么 if (error.message.indexOf('timeout') != -1) { ElMessage.error('网络超时'); + setTimeout(() => { + Session.clear(); + window.location.href = '/'; + }, 1000); } else if (error.message == 'Network Error') { ElMessage.error('网络连接错误'); + setTimeout(() => { + Session.clear(); + window.location.href = '/'; + }, 1000); } else { if (error.response.data) ElMessage.error(error.response.data.error); else ElMessage.error('接口路径找不到'); diff --git a/src/views/contingencyManagement/abolishDialog/abolishDialog.vue b/src/views/contingencyManagement/abolishDialog/abolishDialog.vue index c0ee5e8..69dba30 100644 --- a/src/views/contingencyManagement/abolishDialog/abolishDialog.vue +++ b/src/views/contingencyManagement/abolishDialog/abolishDialog.vue @@ -20,7 +20,7 @@ </div> <div v-if="activeIndex == 2" class="navType" style="padding:20px 20px 0 20px"> <div class="title2">流程图 - <img src="src"> + <!-- <img src=""> --> </div> <div style="width:100%;height:400px"></div> </div> @@ -40,7 +40,7 @@ export default defineComponent({ components:{lowerPlate,formInformationTop,formInformationTops}, setup() { - const activeIndex = ref('1'); + const activeIndex = ref<any>('1'); const handleSelect = (key: string, keyPath: string[]) => { // console.log(key, keyPath); activeIndex.value = key; diff --git a/src/views/contingencyManagement/contingency/component/dialog.vue b/src/views/contingencyManagement/contingency/component/dialog.vue deleted file mode 100644 index add861a..0000000 --- a/src/views/contingencyManagement/contingency/component/dialog.vue +++ /dev/null @@ -1,200 +0,0 @@ -<template> - <div class="system-add-user-container"> - <el-dialog title="查看应急队伍管理" v-model="isShowDialog" width="769px"> - <el-form :model="ruleForm" size="default" label-width="90px"> - <el-row :gutter="35"> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="账户名称"> - <el-input v-model="ruleForm.userName" placeholder="请输入账户名称" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="用户昵称"> - <el-input v-model="ruleForm.userNickname" placeholder="请输入用户昵称" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="关联角色"> - <el-select v-model="ruleForm.roleSign" placeholder="请选择" clearable class="w100"> - <el-option label="超级管理员" value="admin"></el-option> - <el-option label="普通用户" value="common"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="部门"> - <el-cascader - :options="deptData" - :props="{ checkStrictly: true, value: 'deptName', label: 'deptName' }" - placeholder="请选择部门" - clearable - class="w100" - v-model="ruleForm.department" - > - <template #default="{ node, data }"> - <span>{{ data.deptName }}</span> - <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> - </template> - </el-cascader> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="手机号"> - <el-input v-model="ruleForm.phone" placeholder="请输入手机号" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="邮箱"> - <el-input v-model="ruleForm.email" placeholder="请输入" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="性别"> - <el-select v-model="ruleForm.sex" placeholder="请选择" clearable class="w100"> - <el-option label="男" value="男"></el-option> - <el-option label="女" value="女"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="账户密码"> - <el-input v-model="ruleForm.password" placeholder="请输入" type="password" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="账户过期"> - <el-date-picker v-model="ruleForm.overdueTime" type="date" placeholder="请选择" class="w100"> </el-date-picker> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="用户状态"> - <el-switch v-model="ruleForm.status" inline-prompt active-text="启" inactive-text="禁"></el-switch> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="用户描述"> - <el-input v-model="ruleForm.describe" type="textarea" placeholder="请输入用户描述" maxlength="150"></el-input> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="onCancel" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmit" size="default">新 增</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script lang="ts"> -import { reactive, toRefs, onMounted, defineComponent } from 'vue'; - -// 定义接口来定义对象的类型 -interface DeptData { - deptName: string; - createTime: string; - status: boolean; - sort: number | string; - describe: string; - id: number; - children?: DeptData[]; -} -interface UserState { - isShowDialog: boolean; - ruleForm: { - userName: string; - userNickname: string; - roleSign: string; - department: any; - phone: string; - email: string; - sex: string; - password: string; - overdueTime: string; - status: boolean; - describe: string; - }; - deptData: Array<DeptData>; -} - -export default defineComponent({ - name: 'systemAddUser', - setup() { - const state = reactive<UserState>({ - isShowDialog: false, - ruleForm: { - userName: '', // 账户名称 - userNickname: '', // 用户昵称 - roleSign: '', // 关联角色 - department: [], // 部门 - phone: '', // 手机号 - email: '', // 邮箱 - sex: '', // 性别 - password: '', // 账户密码 - overdueTime: '', // 账户过期 - status: true, // 用户状态 - describe: '', // 用户描述 - }, - deptData: [], // 部门数据 - }); - // 打开弹窗 - const openDialog = () => { - state.isShowDialog = true; - }; - // 关闭弹窗 - const closeDialog = () => { - state.isShowDialog = false; - }; - // 取消 - const onCancel = () => { - closeDialog(); - }; - // 新增 - const onSubmit = () => { - closeDialog(); - }; - // 初始化部门数据 - const initTableData = () => { - state.deptData.push({ - deptName: 'vueNextAdmin', - createTime: new Date().toLocaleString(), - status: true, - sort: Math.random(), - describe: '顶级部门', - id: Math.random(), - children: [ - { - deptName: 'IT外包服务', - createTime: new Date().toLocaleString(), - status: true, - sort: Math.random(), - describe: '总部', - id: Math.random(), - }, - { - deptName: '资本控股', - createTime: new Date().toLocaleString(), - status: true, - sort: Math.random(), - describe: '分部', - id: Math.random(), - }, - ], - }); - }; - // 页面加载时 - onMounted(() => { - initTableData(); - }); - return { - openDialog, - closeDialog, - onCancel, - onSubmit, - ...toRefs(state), - }; - }, -}); -</script> diff --git a/src/views/contingencyManagement/contingency/component/editEmergencyPersonnel.vue b/src/views/contingencyManagement/contingency/component/editEmergencyPersonnel.vue deleted file mode 100644 index 3effe20..0000000 --- a/src/views/contingencyManagement/contingency/component/editEmergencyPersonnel.vue +++ /dev/null @@ -1,240 +0,0 @@ -<template> - <div class="system-edit-user-container"> - <el-dialog - title="修改应急队伍人员" - v-model="isShowDialog" - width="769px" - draggable - :fullscreen="full" - > - <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> - <el-form - ref="ruleFormRef" - :model="ruleForm" - size="default" - :rules="rules" - label-width="90px"> - <el-row :gutter="35"> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="选择人员" prop="selectPeople"> - <el-input - v-model="ruleForm.selectPeople" - placeholder="请选择" - class="input-with-select" - > - <template #append> - <el-button :icon="Search"/> - </template> - </el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="人员工号" prop="jobNumber"> - <el-input v-model="ruleForm.jobNumber" placeholder="请填写人员工号"></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="人员名称" prop="personnelName"> - <el-input v-model="ruleForm.personnelName" placeholder="请填写人员名称"></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="人员性别" prop="personnelGender"> - <el-radio-group v-model="ruleForm.personnelGender"> - <el-radio label="男" /> - <el-radio label="女" /> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="手机号码" prop="phone"> - <el-input v-model="ruleForm.phone" placeholder="请填写手机号码"></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="职位" prop="position"> - <el-input v-model="ruleForm.position" placeholder="请填写职位"></el-input> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button size="default" type="primary" @click="submitForm(ruleFormRef)">继续添加</el-button> - <el-button size="default" @click="onCancel">关闭</el-button> - <el-button size="default" type="primary" @click="submitForm(ruleFormRef)">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script lang="ts"> -import { - ref, - reactive, - toRefs, - defineComponent -} from 'vue'; - -import type { - FormRules, - FormInstance, -} from 'element-plus' - -import { - Search, - FullScreen, -} from '@element-plus/icons-vue' -// 定义接口来定义对象的类型 -interface DeptData { - deptName: string; - createTime: string; - status: boolean; - sort: number | string; - describe: string; - id: number; - children?: DeptData[]; -} - -interface RuleFormRow { - // teamName: string; - // teamLevel: string; - // teamLeader: string; - // responsibleDepartment: any - // teamPhone: string; - // telephone: string; - // describe: string; - // selectPeople: string -} -interface UserState { - isShowDialog: boolean; - ruleForm: RuleFormRow; - deptData: Array<DeptData>; -} -export default defineComponent({ - name: 'editTeamLeader', - components: { - // Search, - }, - setup() { - const state = reactive<UserState>({ - isShowDialog: false, - ruleForm: { - selectPeople:'', //选择人员 - jobNumber: '', // 人员工号 - phone: '', // 手机号码 - personnelGender: '', //人员性别 - position: '', //职位 - personnelName: '', // 人员名称 - }, - deptData: [], // 部门数据 - }); - // const isShowDialog = ref(false) - const ruleFormRef = ref<FormInstance>() - // 打开弹窗 - const openDialog = (row: RuleFormRow) => { - // isShowDialog.value = true; - state.ruleForm = row; - state.isShowDialog = true; - }; - // 关闭弹窗 - const closeDialog = () => { - // isShowDialog.value = false; - state.isShowDialog = false; - }; - // 取消 - const onCancel = () => { - closeDialog(); - }; - const rules = reactive<FormRules>({ - selectPeople:[ - { - required: true, - message: '人员不能为空', - trigger: 'change', - }, - ], - jobNumber: [ - { - required: true, - message: '人员工号不能为空', - trigger: 'change', - }, - ], - personnelName: [ - { - required: true, - message: '人员名称不能为空', - trigger: 'change', - }, - ], - personnelGender: [ - { - required: true, - message: '人员性别不能为空', - trigger: 'change', - }, - ], - phone: [ - { - required: true, - message: '手机号码不能为空', - trigger: 'change', - }, - ], - position: [ - { - required: true, - message: '职位不能为空', - trigger: 'change', - }, - ], - }) - const submitForm = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate((valid, fields) => { - if (valid) { - console.log('submit!') - } else { - console.log('error submit!', fields) - } - }) - } - //全屏 - const full = ref(false); - const toggleFullscreen = () => { - if (full.value == false) { - full.value = true; - } else { - full.value = false; - } - }; - return { - openDialog, - closeDialog, - // isShowDialog, - ruleFormRef, - submitForm, - onCancel, - rules, - Search, - ...toRefs(state), - toggleFullscreen, - FullScreen, - full, - }; - }, -}); -</script> -<style scoped lang="scss"> -.textarea{ - height: 168px!important; -} -.textarea ::v-deep .el-textarea__inner{ - height: 168px!important; -} -::v-deep .el-table__cell { - font-weight: 400; -} -</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/contingency/component/openAdd.vue b/src/views/contingencyManagement/contingency/component/openAdd.vue index 4ae9379..e853358 100644 --- a/src/views/contingencyManagement/contingency/component/openAdd.vue +++ b/src/views/contingencyManagement/contingency/component/openAdd.vue @@ -13,9 +13,9 @@ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="队伍级别" prop="teamLevel"> <el-select v-model="ruleForm.teamLevel" class="w100" placeholder="请选择"> - <el-option label="公司" value="公司"></el-option> - <el-option label="分厂-车间" value="分厂-车间"></el-option> - <el-option label="工序-班组等" value="工序-班组等"></el-option> + <el-option label="公司" value="1"></el-option> + <el-option label="分厂-车间" value="2"></el-option> + <el-option label="工序-班组等" value="3"></el-option> </el-select> </el-form-item> </el-col> diff --git a/src/views/contingencyManagement/contingency/component/openSee.vue b/src/views/contingencyManagement/contingency/component/openSee.vue deleted file mode 100644 index 066f66d..0000000 --- a/src/views/contingencyManagement/contingency/component/openSee.vue +++ /dev/null @@ -1,425 +0,0 @@ -<template> - <div class="system-edit-user-container"> - <el-dialog - :title="title" - v-model="isShowDialog" - width="769px" - draggable - :fullscreen="full" - > - <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> - <el-form - :model="ruleForm" - size="default" - :rules="rules" - label-width="120px" - > - <el-row :gutter="35"> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="队伍名称" prop="teamName"> - <el-input v-model="ruleForm.teamName" :disabled="true"></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="队伍级别" prop="teamLevel"> - <el-select v-model="ruleForm.teamLevel" :disabled="true" class="w100"> - <el-option label="公司" value="admin"></el-option> - <el-option label="分厂-车间" value="common"></el-option> - <el-option label="工序-班组等" value="shang"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="队伍负责人" prop="principalUid"> - <el-input - v-model="ruleForm.principalUid" - placeholder="Please input" - class="input-with-select" - :disabled="true" - > - <template #append> - <el-button :icon="Search"/> - </template> - </el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="负责人部门" prop="principalDepartmentId"> - <el-tree-select v-model="ruleForm.principalDepartmentId" :data="data" :disabled="true" class="w100"/> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="负责人手机" prop="principalPhone"> - <el-input v-model="ruleForm.principalPhone" :disabled="true"></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="固定电话" prop="telephoneNumber"> - <el-input v-model="ruleForm.telephoneNumber" :disabled="true"></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="队伍描述" prop="teamDesc"> - <el-input class="textarea" v-model="ruleForm.teamDesc" type="textarea" :disabled="true" maxlength="150"></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="相关附件" prop="fileList"> - <el-upload - v-model:file-list="fileList" - class="upload-demo" - action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" - :on-change="handleChange" - > - <el-button type="primary" disabled - >点击上传</el-button> - <template #tip> - <div class="el-upload__tip"> - 添加相关附件 - </div> - </template> - </el-upload> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> - <el-tab-pane label="应急队伍人员" name="first"> - <el-button type="primary" size="default" disabled>新增</el-button> - <el-table - :data="tableData" - style="width: 100%;margin-top: 15px;" - ref="multipleTableRef" - :header-cell-style="{background:'#f6f7fa',color:'#909399'}" - > - <el-table-column prop="jobNo" label="人员工号" show-overflow-tooltip></el-table-column> - <el-table-column prop="personnelName" label="人员名称" show-overflow-tooltip></el-table-column> - <el-table-column prop="phone" label="手机号码" show-overflow-tooltip></el-table-column> - <el-table-column prop="position" label="职位" show-overflow-tooltip></el-table-column> - <el-table-column label="操作" width="200" align="center"> - <template #default="scope"> - <el-button disabled size="small" text="plain" >查看 - </el-button> - <el-button disabled size="small" text="plain" style="margin-right: 5px;">编辑 - </el-button> - <el-button disabled size="small" text="plain" style="margin-right: 5px;">删除 - </el-button> - </template> - </el-table-column> - </el-table> - </el-tab-pane> - </el-tabs> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="onCancel" size="default">关闭</el-button> - </span> - </template> - </el-dialog> -<!-- <AddTeamLeader ref="addRef" />--> - </div> -</template> - -<script lang="ts"> -import { reactive, toRefs, ref, onMounted, defineComponent } from 'vue'; -import type { - UploadUserFile, - TabsPaneContext, - FormRules, -} from 'element-plus' -import { - Search, - FullScreen -} from '@element-plus/icons-vue' -// import AddTeamLeader from '/@/views/contingency/component/addEmergencyPersonnel.vue'; -// 定义接口来定义对象的类型 -interface MenuDataTree { - id: number; - label: string; - children?: MenuDataTree[]; -} - -// 定义表格数据类型 -interface User { - personnelName: string - jobNo: string - phone: string; - position: string; -} - -interface RoleState { - title:string, - // buttonName:string, - isShowDialog: boolean; - ruleForm: { - teamName: string; - teamLevel: string; - principalUid: number; - principalDepartmentId: number; - principalPhone: string; - telephoneNumber: string; - teamDesc: string; - fileList: string, - }; - menuData: Array<MenuDataTree>; -} -export default defineComponent({ - name: 'openSee', - components: { - // Search, - }, - setup() { - const state = reactive<RoleState>({ - isShowDialog: false, - title:'', - // buttonName:'', - ruleForm: { - teamName: '', // 队伍名称 - teamLevel: '', // 队伍级别 - principalUid: 1, // 队伍负责人 - principalDepartmentId: 2, //负责人部门 - principalPhone: '', // 负责人手机 - telephoneNumber: '', // 固定电话 - teamDesc: '', //队伍描述 - fileList: [], - }, - menuData: [], - }); - // 打开弹窗 - const openDialog = (type: string, value: any) => { - state.isShowDialog = true; - if(type === '查看'){ - state.title = '查看应急队伍管理' - // state.buttonName = '新增' - state.ruleForm = { - teamName: '', // 队伍名称 - teamLevel: '', // 队伍级别 - principalUid: 1, // 队伍负责人 - principalDepartmentId: 2, //负责人部门 - principalPhone: '', // 负责人手机 - telephoneNumber: '', // 固定电话 - teamDesc: '', //队伍描述 - fileList: [], - } - }else{ - // state.title = '修改应急队伍管理' - // // state.buttonName = '确定' - // state.ruleForm = JSON.parse(JSON.stringify(value)) - } - }; - // 关闭弹窗 - const closeDialog = () => { - state.isShowDialog = false; - }; - // 取消 - const onCancel = () => { - closeDialog(); - }; - // // 初始化部门数据 - // const initTableData = () => { - // state.deptData.push({ - // deptName: 'vueNextAdmin', - // createTime: new Date().toLocaleString(), - // status: true, - // sort: Math.random(), - // describe: '顶级部门', - // id: Math.random(), - // children: [ - // { - // deptName: 'IT外包服务', - // createTime: new Date().toLocaleString(), - // status: true, - // sort: Math.random(), - // describe: '总部', - // id: Math.random(), - // }, - // { - // deptName: '资本控股', - // createTime: new Date().toLocaleString(), - // status: true, - // sort: Math.random(), - // describe: '分部', - // id: Math.random(), - // }, - // ], - // }); - // }; - // // 页面加载时 - // onMounted(() => { - // initTableData(); - // }); - // 上传附件 - const fileList = ref<UploadUserFile[]>([]) - - //定义树形下拉框 - const responsibleDepartment = ref() - const data = [ - { - value: '1', - label: '广汇能源综合物流发展有限责任公司', - children: [ - { - value: '1-1', - label: '经营班子', - children: [], - }, - ], - }, - { - value: '2', - label: '生产运行部', - children: [ - { - value: '2-1', - label: '灌装一班', - children: [] - }, - { - value: '2-2', - label: '工艺四班', - children: [], - }, - ], - }, - { - value: '3', - label: '设备部', - children: [ - { - value: '3-1', - label: '仪表班', - children: [], - }, - { - value: '3-2', - label: '机修班', - children: [], - }, - ], - }, - ] - //定义tabs切换 - const activeName = ref('first') - - const handleClick = (tab: TabsPaneContext, event: Event) => { - console.log(tab, event) - } - - //定义表格数据 - const multipleSelection = ref<User[]>([]) - const tableData: User[] = [ - { - personnelName: '张志刚', - jobNo: '1037', - position: '副组长', - phone: '13673321356', - }, - { - personnelName: '张志刚', - jobNo: '1037', - position: '副组长', - phone: '13673321356', - }, - { - personnelName: '张志刚', - jobNo: '1037', - position: '副组长', - phone: '13673321356', - }, - { - personnelName: '张志刚', - jobNo: '1037', - position: '副组长', - phone: '13673321356', - } - ] - - // 必填项提示 - const rules = reactive<FormRules>({ - teamName: [ - { - required: true, - message: '队伍名称不能为空', - trigger: 'change', - }, - ], - teamLevel: [ - { - required: true, - message: '队伍级别不能为空', - trigger: 'change', - }, - ], - principalUid: [ - { - required: true, - message: '队伍负责人不能为空', - trigger: 'change', - }, - ], - principalDepartmentId: [ - { - required: true, - message: '负责人部门不能为空', - trigger: 'change', - }, - ], - principalPhone: [ - { - required: true, - message: '负责人手机不能为空', - trigger: 'change', - }, - ], - telephoneNumber: [ - { - required: true, - message: '固定电话不能为空', - trigger: 'change', - }, - ], - }) - //全屏 - const full = ref(false); - const toggleFullscreen = () => { - if(full.value == false) { - full.value = true; - } else { - full.value = false; - } - }; - return { - openDialog, - closeDialog, - onCancel, - fileList, - responsibleDepartment, - data, - activeName, - handleClick, - tableData, - multipleSelection, - Search, - // addRef, - // onAddTeamLeader, - ...toRefs(state), - toggleFullscreen, - FullScreen, - full, - rules, - }; - }, -}); -</script> -<style scoped lang="scss"> -.textarea{ - height: 168px!important; -} -.textarea ::v-deep .el-textarea__inner{ - height: 168px!important; -} -::v-deep .el-table__cell { - font-weight: 400; -} -</style> \ No newline at end of file diff --git a/src/views/contingencyManagement/contingency/index.vue b/src/views/contingencyManagement/contingency/index.vue index 1be771a..2196936 100644 --- a/src/views/contingencyManagement/contingency/index.vue +++ b/src/views/contingencyManagement/contingency/index.vue @@ -8,9 +8,9 @@ </el-form-item> <el-form-item> <el-select size="default" v-model="listQuery.searchParams.teamType" placeholder="请选择队伍级别"> - <el-option label="公司" value="shanghai"></el-option> - <el-option label="分厂-车间" value="beijing"></el-option> - <el-option label="工序-班组等" value="beijing"></el-option> + <el-option label="公司" value="1"></el-option> + <el-option label="分厂-车间" value="2"></el-option> + <el-option label="工序-班组等" value="3"></el-option> </el-select> </el-form-item> <el-form-item> @@ -70,7 +70,13 @@ width="55" /> <el-table-column prop="teamName" label="队伍名称" show-overflow-tooltip sortable></el-table-column> - <el-table-column prop="teamLevel" label="队伍级别" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="teamLevel" label="队伍级别" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.teamLevel == 1">公司</span> + <span v-if="scope.row.teamLevel == 2">分厂-车间</span> + <span v-if="scope.row.teamLevel == 3">工序-班组等</span> + </template> + </el-table-column> <el-table-column prop="teamDesc" label="队伍描述" show-overflow-tooltip sortable></el-table-column> <el-table-column prop="principalPhone" label="负责人手机" show-overflow-tooltip sortable></el-table-column> <el-table-column prop="attachments" label="相关附件" show-overflow-tooltip sortable></el-table-column> @@ -137,8 +143,6 @@ View, EditPen, } from '@element-plus/icons-vue' -// import OpenAdd from '/@/views/contingencyManagement/contingency/component/openAdd.vue'; -// import OpenSee from '/@/views/contingencyManagement/contingency/component/openSee.vue'; import OpenAdd from '../../contingencyManagement/contingency/component/openAdd.vue' import UpData from '../../contingencyManagement/contingency/component/upData.vue'; diff --git a/src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue b/src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue index 8e18978..6469b53 100644 --- a/src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue +++ b/src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue @@ -1,325 +1,307 @@ <template> - <div class="system-edit-user-container"> - <el-dialog - title="应急演练计划--修改审批进度" - v-model="isShowDialog" - width="769px" - draggable - :fullscreen="full" - > - <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> - <img class="process-status-img" src="src/assets/icon.png"> - <el-tabs type="border-card"> - <el-tab-pane label="流转记录"> - <el-card class="box-card" shadow="hover"> - <template #header> - <div class="card-header"> - <span>流转记录</span> - </div> - </template> - <div> - <el-steps :active="2"> - <el-step title="开始" description="胡海涛,2022-07-09 20:41:50" /> - <el-step title="一级审批" description="管理员,2022-07-09 20:41:50" /> - </el-steps> - </div> - <el-table :data="tableData" stripe style="width: 100%"> - <el-table-column prop="date" label="执行环节" width="120" /> - <el-table-column prop="name" label="执行人" width="120" /> - <el-table-column prop="address" label="开始时间" width="100" /> - <el-table-column prop="address" label="结束时间" width="100" /> - <el-table-column prop="address" label="办理状态" width="100" /> - <el-table-column prop="address" label="审批意见" width="100" /> - <el-table-column prop="address" label="任务历时" width="100" /> - </el-table> - </el-card> - </el-tab-pane> - <el-tab-pane label="流程信息"> - <el-card class="box-card" shadow="hover"> - <template #header> - <div class="card-header"> - <span>流程信息</span> - </div> - </template> - <div> - <el-timeline> - <el-timeline-item timestamp="2018/4/12" placement="top" color="rgb(63, 158, 255)"> - <el-card> - <h4 style="margin: 10px 0;padding-bottom: 10px;">一级审批</h4> - <el-row> - <el-col class="tip" :span="22" :offset="1"> - <div class="item"> - <span class="label">审批人:</span> - <span class="value">管理员</span> - </div> - <div class="item"> - <span class="label">办理状态:</span> - <span class="value"> -<!-- <el-tag--> -<!-- v-for="item in items"--> -<!-- :key="item.label"--> -<!-- :type="item.type"--> -<!-- class="mx-1"--> -<!-- effect="dark"--> -<!-- >--> -<!-- {{ item.label }}--> -<!-- </el-tag>--> - <p class="text">等待审核</p> - </span> - </div> - <div class="item"> - <span class="label">审批意见:</span> - <span class="value">等待审核</span> - </div> - <div class="item"> - <span class="label">开始时间:</span> - <span class="value">2022-07-09 20:41:50</span> - </div> - <div class="item"> - <span class="label">结束时间:</span> - <span class="value">2022-07-09 20:41:50</span> - </div> - <div class="item"> - <span class="label">用时:</span> - <span class="value">0秒</span> - </div> - </el-col> - </el-row> - </el-card> - </el-timeline-item> - <el-timeline-item timestamp="2018/4/3" placement="top" color="rgb(63, 158, 255)"> - <el-card> - <h4>开始</h4> - <el-row> - <el-col class="tip" :span="22" :offset="1"> - <div class="item"> - <span class="label">审批人:</span> - <span class="value">胡海涛</span> - </div> - <div class="item"> - <span class="label">办理状态:</span> - <span class="value"> - <p class="text">开始</p> - </span> - </div> - <div class="item"> - <span class="label">审批意见:</span> - <span class="value">等待审核</span> - </div> - <div class="item"> - <span class="label">开始时间:</span> - <span class="value">2022-07-09 20:41:50</span> - </div> - <div class="item"> - <span class="label">结束时间:</span> - <span class="value">2022-07-09 20:41:50</span> - </div> - <div class="item"> - <span class="label">用时:</span> - <span class="value">0秒</span> - </div> - </el-col> - </el-row> - </el-card> - </el-timeline-item> - </el-timeline> - </div> - </el-card> - </el-tab-pane> - <el-tab-pane label="流程图"> - <el-card class="box-card" shadow="hover"> - <template #header> - <div class="card-header"> - <span>流程图</span> - </div> - </template> - <div> - </div> - </el-card> - </el-tab-pane> - </el-tabs> - </el-dialog> - <RegionsDialog ref="Shows"/> - <UserCheckbox ref="userRef"/> - </div> + <div class="system-edit-user-container"> + <el-dialog title="应急演练计划--修改审批进度" v-model="isShowDialog" width="769px" draggable :fullscreen="full"> + <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> + <!-- <img class="process-status-img" src=""> --> + <el-tabs type="border-card"> + <el-tab-pane label="流转记录"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流转记录</span> + </div> + </template> + <div> + <el-steps :active="2"> + <el-step title="开始" description="胡海涛,2022-07-09 20:41:50" /> + <el-step title="一级审批" description="管理员,2022-07-09 20:41:50" /> + </el-steps> + </div> + <el-table :data="tableData" stripe style="width: 100%"> + <el-table-column prop="date" label="执行环节" width="120" /> + <el-table-column prop="name" label="执行人" width="120" /> + <el-table-column prop="address" label="开始时间" width="100" /> + <el-table-column prop="address" label="结束时间" width="100" /> + <el-table-column prop="address" label="办理状态" width="100" /> + <el-table-column prop="address" label="审批意见" width="100" /> + <el-table-column prop="address" label="任务历时" width="100" /> + </el-table> + </el-card> + </el-tab-pane> + <el-tab-pane label="流程信息"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流程信息</span> + </div> + </template> + <div> + <el-timeline> + <el-timeline-item timestamp="2018/4/12" placement="top" color="rgb(63, 158, 255)"> + <el-card> + <h4 style="margin: 10px 0; padding-bottom: 10px">一级审批</h4> + <el-row> + <el-col class="tip" :span="22" :offset="1"> + <div class="item"> + <span class="label">审批人:</span> + <span class="value">管理员</span> + </div> + <div class="item"> + <span class="label">办理状态:</span> + <span class="value"> + <!-- <el-tag--> + <!-- v-for="item in items"--> + <!-- :key="item.label"--> + <!-- :type="item.type"--> + <!-- class="mx-1"--> + <!-- effect="dark"--> + <!-- >--> + <!-- {{ item.label }}--> + <!-- </el-tag>--> + <p class="text">等待审核</p> + </span> + </div> + <div class="item"> + <span class="label">审批意见:</span> + <span class="value">等待审核</span> + </div> + <div class="item"> + <span class="label">开始时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">结束时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">用时:</span> + <span class="value">0秒</span> + </div> + </el-col> + </el-row> + </el-card> + </el-timeline-item> + <el-timeline-item timestamp="2018/4/3" placement="top" color="rgb(63, 158, 255)"> + <el-card> + <h4>开始</h4> + <el-row> + <el-col class="tip" :span="22" :offset="1"> + <div class="item"> + <span class="label">审批人:</span> + <span class="value">胡海涛</span> + </div> + <div class="item"> + <span class="label">办理状态:</span> + <span class="value"> + <p class="text">开始</p> + </span> + </div> + <div class="item"> + <span class="label">审批意见:</span> + <span class="value">等待审核</span> + </div> + <div class="item"> + <span class="label">开始时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">结束时间:</span> + <span class="value">2022-07-09 20:41:50</span> + </div> + <div class="item"> + <span class="label">用时:</span> + <span class="value">0秒</span> + </div> + </el-col> + </el-row> + </el-card> + </el-timeline-item> + </el-timeline> + </div> + </el-card> + </el-tab-pane> + <el-tab-pane label="流程图"> + <el-card class="box-card" shadow="hover"> + <template #header> + <div class="card-header"> + <span>流程图</span> + </div> + </template> + <div></div> + </el-card> + </el-tab-pane> + </el-tabs> + </el-dialog> + <RegionsDialog ref="Shows" /> + <UserCheckbox ref="userRef" /> + </div> </template> <script lang="ts"> -import { +import { ref, defineComponent } from 'vue'; - ref, - defineComponent -} from 'vue'; +import type { TagProps } from 'element-plus'; -import type { - TagProps, -} from 'element-plus' - -import { - Search, - FullScreen -} from '@element-plus/icons-vue' -import UserCheckbox from "/@/components/userCheckbox/index.vue" -import RegionsDialog from "/@/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue" +import { Search, FullScreen } from '@element-plus/icons-vue'; +import UserCheckbox from '/@/components/userCheckbox/index.vue'; +import RegionsDialog from '/@/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue'; export default defineComponent({ - name: 'openAdd', - components: { - RegionsDialog, - UserCheckbox, - }, - setup() { - const isShowDialog = ref(false) - // 打开弹窗 - const openDialog = () => { - // state.ruleForm = row; - isShowDialog.value = true; - }; - // 关闭弹窗 - const closeDialog = () => { - isShowDialog.value = false; - }; - const tableData = [ - { - date: '2016-05-03', - name: 'Tom', - address: '2022-07-09 20:41:50', - }, - { - date: '2016-05-02', - name: 'Tom', - address: '2022-07-09 20:41:50', - }, - { - date: '2016-05-04', - name: 'Tom', - address: '2022-07-09 20:41:50', - }, - { - date: '2016-05-01', - name: 'Tom', - address: '2022-07-09 20:41:50', - }, - ] + name: 'openAdd', + components: { + RegionsDialog, + UserCheckbox, + }, + setup() { + const isShowDialog = ref(false); + // 打开弹窗 + const openDialog = () => { + // state.ruleForm = row; + isShowDialog.value = true; + }; + // 关闭弹窗 + const closeDialog = () => { + isShowDialog.value = false; + }; + const tableData = [ + { + date: '2016-05-03', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-02', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-04', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + { + date: '2016-05-01', + name: 'Tom', + address: '2022-07-09 20:41:50', + }, + ]; - type Item = { type: TagProps['type']; label: string } + type Item = { type: TagProps['type']; label: string }; - const items = ref<Array<Item>>([ - { type: '', label: '等待审核' }, - ]) - //全屏 - const full = ref(false); - const toggleFullscreen = () => { - if (full.value == false) { - full.value = true; - } else { - full.value = false; - } - }; - return { - openDialog, - closeDialog, - isShowDialog, - Search, - tableData, - items, - toggleFullscreen, - FullScreen, - full, - }; - }, + const items = ref<Array<Item>>([{ type: '', label: '等待审核' }]); + //全屏 + const full = ref(false); + const toggleFullscreen = () => { + if (full.value == false) { + full.value = true; + } else { + full.value = false; + } + }; + return { + openDialog, + closeDialog, + isShowDialog, + Search, + tableData, + items, + toggleFullscreen, + FullScreen, + full, + }; + }, }); </script> <style scoped lang="scss"> -.process-status-img{ - width: 128px; - height: auto; - position: absolute; - right: 10px; - top: 60px; - z-index: 999; +.process-status-img { + width: 128px; + height: auto; + position: absolute; + right: 10px; + top: 60px; + z-index: 999; } //弹窗底部边框线 -::v-deep .el-dialog__footer{ - border-top: 1px solid #e8e8e8; - border-radius: 0 0 4px 4px; +::v-deep .el-dialog__footer { + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; } //弹窗顶部边框线 ::v-deep .el-dialog__header { - border-bottom: 1px solid #e8e8e8; - margin-right: 0; - border-radius: 4px 4px 0 0; + border-bottom: 1px solid #e8e8e8; + margin-right: 0; + border-radius: 4px 4px 0 0; } //tabs字体颜色 -::v-deep .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{ - color: #a9d86e!important; +::v-deep .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active { + color: #a9d86e !important; } .card-header { - display: flex; - justify-content: space-between; - align-items: center; + display: flex; + justify-content: space-between; + align-items: center; } //.box-card { // width: 480px; //} //步骤条字体大小 -::v-deep .el-step__icon-inner{ - font-size: 14px!important; +::v-deep .el-step__icon-inner { + font-size: 14px !important; } //步骤条颜色 -::v-deep .el-step__line{ - background-color: #409eff; +::v-deep .el-step__line { + background-color: #409eff; } //表头 ::v-deep .el-table th.el-table__cell { - background-color: #f6f7fa; - font-weight: 400; - color: #909399; + background-color: #f6f7fa; + font-weight: 400; + color: #909399; } -.el-table .sort-caret.ascending{ - border-bottom-color: #c0c4cc; +.el-table .sort-caret.ascending { + border-bottom-color: #c0c4cc; } .tip { - padding: 8px 16px; - background-color: #ecf8ff; - border-radius: 4px; - border-left: 5px solid #50bfff; - margin: 20px 0; + padding: 8px 16px; + background-color: #ecf8ff; + border-radius: 4px; + border-left: 5px solid #50bfff; + margin: 20px 0; } -.item{ - height: 32px; - line-height: 32px; - margin-bottom: 8px; +.item { + height: 32px; + line-height: 32px; + margin-bottom: 8px; } .item .label { - display: inline-block; - height: 100%; - width: 70px; - font-size: 14px; - color: #5e6d82; - text-align: end; - vertical-align: top; + display: inline-block; + height: 100%; + width: 70px; + font-size: 14px; + color: #5e6d82; + text-align: end; + vertical-align: top; } .item .value { - padding-left: 10px; - font-size: 14px; - max-width: calc(100% - 90px); - color: #5e6d82; - display: inline-block; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; + padding-left: 10px; + font-size: 14px; + max-width: calc(100% - 90px); + color: #5e6d82; + display: inline-block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } -.text{ - background-color: #409eff; - color: #fff; - border-width: 1px; - border-style: solid; - border-radius: 4px; - height: 24px; - padding: 0 8px; - line-height: 22px; - display: inline-block; +.text { + background-color: #409eff; + color: #fff; + border-width: 1px; + border-style: solid; + border-radius: 4px; + height: 24px; + padding: 0 8px; + line-height: 22px; + display: inline-block; } </style> \ No newline at end of file diff --git a/src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue b/src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue index 094d1b1..15f3892 100644 --- a/src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue +++ b/src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue @@ -55,7 +55,6 @@ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="演练方式" prop="drillWay"> <el-select :disabled="true" v-model="drillRuleForm.drillWay" class="w100" placeholder="请选择"> - <el-option label="综合" value="0"></el-option> <el-option label="桌面" value="1"></el-option> <el-option label="专项" value="2"></el-option> diff --git a/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue index 8e18978..5dad014 100644 --- a/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue +++ b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue @@ -8,7 +8,7 @@ :fullscreen="full" > <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> - <img class="process-status-img" src="src/assets/icon.png"> + <!-- <img class="process-status-img" src="src/assets/icon.png"> --> <el-tabs type="border-card"> <el-tab-pane label="流转记录"> <el-card class="box-card" shadow="hover"> diff --git a/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue index 2e903f9..a1a8412 100644 --- a/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue +++ b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue @@ -42,10 +42,9 @@ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="演练方式" prop="drillWay"> <el-select v-model="ruleForm.drillWay" class="w100" placeholder="请选择"> - - <el-option label="综合" value="0"></el-option> - <el-option label="桌面" value="1"></el-option> - <el-option label="专项" value="2"></el-option> + <el-option label="综合" value="1"></el-option> + <el-option label="桌面" value="2"></el-option> + <el-option label="专项" value="3"></el-option> </el-select> </el-form-item> </el-col> diff --git a/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue index 5f85b72..b1a7099 100644 --- a/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue +++ b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue @@ -44,8 +44,20 @@ /> <el-table-column prop="drillName" label="演练名称" show-overflow-tooltip sortable></el-table-column> <el-table-column prop="drillAddress" label="演练地点" show-overflow-tooltip sortable></el-table-column> - <el-table-column prop="drillWay" label="演练方式" show-overflow-tooltip sortable></el-table-column> - <el-table-column prop="drillLevel" label="演练级别" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="drillWay" label="演练方式" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.drillWay == 1">综合</span> + <span v-if="scope.row.drillWay == 2">桌面</span> + <span v-if="scope.row.drillWay == 3">专项</span> + </template> + </el-table-column> + <el-table-column prop="drillLevel" label="演练级别" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.drillLevel == 1">公司级</span> + <span v-if="scope.row.drillLevel == 2">分厂级</span> + <span v-if="scope.row.drillLevel == 3">车间级</span> + </template> + </el-table-column> <el-table-column prop="drillPlanDate" label="计划演练日期" show-overflow-tooltip sortable></el-table-column> <el-table-column prop="gmtModitify" label="修改时间" show-overflow-tooltip sortable></el-table-column> <el-table-column label="操作" width="260" align="center"> diff --git a/src/views/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue b/src/views/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue index afc2ebf..e550b77 100644 --- a/src/views/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue +++ b/src/views/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue @@ -52,7 +52,6 @@ </el-dialog> <DailogSearchUser ref="userRef" @SearchUser="onUser"/> <AddEmergencyPersonnel ref="addRef" /> - <EditEmergencyPersonnel ref="editRef" /> </div> </template> @@ -71,7 +70,6 @@ } from '@element-plus/icons-vue' import DailogSearchUser from "/@/components/DailogSearchUser/index.vue" import AddEmergencyPersonnel from "/@/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue"; -import EditEmergencyPersonnel from "/@/views/contingencyManagement/contingency/component/editEmergencyPersonnel.vue"; import {emergencyPlanLogApi} from "/@/api/contingencyManagement/emergencyPlanLog"; export default defineComponent({ @@ -79,7 +77,6 @@ components: { DailogSearchUser, AddEmergencyPersonnel, - EditEmergencyPersonnel }, setup(props, { emit }) { const isShowDialog = ref(false); diff --git a/src/views/contingencyManagement/panManagement/component/openAdd.vue b/src/views/contingencyManagement/panManagement/component/openAdd.vue index a5d978a..02c44c0 100644 --- a/src/views/contingencyManagement/panManagement/component/openAdd.vue +++ b/src/views/contingencyManagement/panManagement/component/openAdd.vue @@ -1,6 +1,6 @@ <template> <div class="system-edit-user-container"> - <el-dialog :title="titles" v-model="isShowDialog" width="40%" draggable :fullscreen="full" :close-on-click-modal="false"> + <el-dialog :title="titles" v-model="isShowDialog" width="50%" draggable :fullscreen="full" :close-on-click-modal="false"> <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button> <el-form ref="ruleFormRef" :model="ruleForm" size="default" label-width="120px" :disabled="disabled"> <el-row :gutter="35"> @@ -12,14 +12,16 @@ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="适用部门" prop="responsibleDepartment"> <el-tree-select - v-model="ruleForm.treeSelect" + v-model="ruleForm.responsibleDepartment" :data="data" multiple - :render-after-expand="true" + :render-after-expand="false" :props="propse" - show-checkbox clearable - check-strictly + show-checkbox + check-strictly + check-on-click-node + placeholder="请选择" /> <el-divider /> </el-form-item> @@ -27,10 +29,10 @@ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="预案类型" prop="type"> <el-select v-model="ruleForm.type" class="w100" placeholder="请选择"> - <el-option label="综合应急预案" value="综合应急预案"></el-option> - <el-option label="现场处置方案" value="现场处置方案"></el-option> - <el-option label="专项应急预案" value="专项应急预案"></el-option> - <el-option label="其他预案" value="其他预案"></el-option> + <el-option label="综合应急预案" value="1"></el-option> + <el-option label="现场处置方案" value="2"></el-option> + <el-option label="专项应急预案" value="3"></el-option> + <el-option label="其他预案" value="4"></el-option> </el-select> </el-form-item> </el-col> @@ -45,9 +47,9 @@ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="预案级别" prop="level"> <el-select v-model="ruleForm.level" class="w100" placeholder="请选择"> - <el-option label="公司级" value="公司级"></el-option> - <el-option label="分厂级" value="分厂级"></el-option> - <el-option label="车间级" value="车间级"></el-option> + <el-option label="公司级" value="1"></el-option> + <el-option label="分厂级" value="2"></el-option> + <el-option label="车间级" value="3"></el-option> </el-select> </el-form-item> </el-col> @@ -169,15 +171,14 @@ authorDeptId: '', // 编写部门 releaseDate: '', // 发布实施日期 fileList: [ - { - fileUrl: 'url', - fileName: 'name', - }, + // { + // fileUrl: 'url', + // fileName: 'name', + // }, ], emergencyTeam: '', //应急队伍 areaList: [], //区域列表 - teamList: [ - ], + teamList: [], deptList: [], abolishStatus: false, }); @@ -194,7 +195,12 @@ .seeEmergencyTeam(id) .then((res) => { if (res.data.code == 200) { - ruleForm.value = res.data.data; + ruleForm.value = res.data.data; + let arr = []; + for (let i = 0; i < ruleForm.value.teamList.length; i++) { + arr.push(ruleForm.value.teamList[i].emergencyTeam); + } + ruleForm.value.emergencyTeam = arr.toString(); } }); } @@ -209,12 +215,7 @@ .getTreedepartment() .then((res) => { if (res.data.code == 200) { - ruleForm.value = res.data.data; - let arr = []; - for (let i = 0; i < ruleForm.value.teamList.length; i++) { - arr.push(ruleForm.value.teamList[i].userName); - } - ruleForm.value.userName = arr.toString(); + data.value = res.data.data; } else { ElMessage.error(res.data.msg); } @@ -304,10 +305,10 @@ authorDeptId: '', // 编写部门 releaseDate: '', // 发布实施日期 fileList: [ - { - fileUrl: 'url', - fileName: 'name', - }, + // { + // fileUrl: 'url', + // fileName: 'name', + // }, ], emergencyTeam: '', //应急队伍 areaList: [], //区域列表 @@ -321,28 +322,6 @@ const resetForm = (formEl: FormInstance | undefined) => { isShowDialog.value = false; if (!formEl) return; - ruleForm.value = { - name: '', // 预案名称 - type: '', //预案类型 - associatedDanger: '', // 危险源关联 - level: '', // 预案级别 - authorUid: '', // 编写人 - authorName: '', - authorDeptId: '', // 编写部门 - releaseDate: '', // 发布实施日期 - fileList: [ - { - fileUrl: 'url', - fileName: 'name', - }, - ], - emergencyTeam: '', //应急队伍 - areaList: [], //区域列表 - teamList: [ - ], - deptList: [], - abolishStatus: false, - }; formEl.resetFields(); }; // 应急队伍弹窗 @@ -350,16 +329,16 @@ const daiInpt = (data: any) => { Shows.value.openDailog(data); }; - const SearchUser = (e: any) => { + const SearchUser = (val: any) => { let arr = []; for (let i = 0; i < val.length; i++) { - arr.push(val[i].realName); - ruleForm.value.userList.push({ + arr.push(val[i].teamName); + ruleForm.value.teamList.push({ userUid: val[i].uid, - userName: val[i].realName, + emergencyTeam: val[i].teamName, }); } - ruleForm.value.userName = arr.toString(); + ruleForm.value.emergencyTeam = arr.toString(); }; // 选择区域弹窗 const openRef = ref(); diff --git a/src/views/contingencyManagement/panManagement/index.vue b/src/views/contingencyManagement/panManagement/index.vue index 0daee03..cc2ec1b 100644 --- a/src/views/contingencyManagement/panManagement/index.vue +++ b/src/views/contingencyManagement/panManagement/index.vue @@ -60,8 +60,21 @@ <el-table :data="tableData" style="width: 100%" ref="multipleTableRef" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" /> <el-table-column prop="name" label="预案名称" show-overflow-tooltip sortable></el-table-column> - <el-table-column prop="type" label="预案类型" show-overflow-tooltip sortable></el-table-column> - <el-table-column prop="level" label="预案级别" show-overflow-tooltip sortable></el-table-column> + <el-table-column prop="type" label="预案类型" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.type == 1">综合应急预案</span> + <span v-if="scope.row.type == 2">现场处置方案</span> + <span v-if="scope.row.type == 3">专项应急预案</span> + <span v-if="scope.row.type == 4">其他预案</span> + </template> + </el-table-column> + <el-table-column prop="level" label="预案级别" show-overflow-tooltip sortable> + <template #default="scope"> + <span v-if="scope.row.level == 1">综合应急预案</span> + <span v-if="scope.row.level == 2">现场处置方案</span> + <span v-if="scope.row.level == 3">专项应急预案</span> + </template> + </el-table-column> <el-table-column prop="releaseDate" label="发布实施日期" show-overflow-tooltip sortable></el-table-column> <el-table-column label="操作" width="260" align="center" fixed="right"> <template #default="scope"> diff --git a/src/views/facilityManagement/InstrumentationInformation/index.vue b/src/views/facilityManagement/InstrumentationInformation/index.vue index e64297f..d4e4308 100644 --- a/src/views/facilityManagement/InstrumentationInformation/index.vue +++ b/src/views/facilityManagement/InstrumentationInformation/index.vue @@ -46,14 +46,14 @@ <el-table ref="multipleTableRef" :data="scope.row.takecareDetailList" style="width: 100%"> <el-table-column property="takecareMemo" align="center" label="保养情况" sortable /> <el-table-column property="leadingPersonId" align="center" label="保养负责人" sortable /> - <el-table-column property="takecareDate" align="center" label="保养日期" sortable /> + <el-table-column property="takecareDate" align="center" :formatter="timeDate" label="保养日期" sortable /> <el-table-column property="leadingPersonDepartmentId" align="center" label="保养负责人单位" sortable /> </el-table> </el-tab-pane> <el-tab-pane label="设备检查" name="second" ><el-table ref="multipleTableRef" :data="scope.row.checkDetailList" style="width: 100%"> <el-table-column property="leadingPersonId" align="center" label="检查人" sortable /> - <el-table-column property="createTime" align="center" label="检查日期" sortable /> + <el-table-column property="createTime" align="center" :formatter="timeDate" label="检查日期" sortable /> <el-table-column property="name" align="center" label="检查人部门" sortable /> <el-table-column property="takecareMemo" align="center" label="检查结果" sortable /> <el-table-column property="name" align="center" label="检查状态" sortable /> </el-table @@ -61,7 +61,7 @@ <el-tab-pane label="设备检测" name="third"> <el-table ref="multipleTableRef" :data="scope.row.testDetailList" style="width: 100%"> <el-table-column property="testPersonId" align="center" label="检测人" sortable /> - <el-table-column property="testDate" align="center" label="检测日期" sortable /> + <el-table-column property="testDate" align="center" :formatter="timeDate" label="检测日期" sortable /> <el-table-column property="testPersonDepartmentId" align="center" label="检测人单位" sortable /> <el-table-column property="testMemo" align="center" label="检测内容" sortable /> <el-table-column property="testResult" align="center" label="检测结果" sortable /> @@ -75,8 +75,8 @@ <el-table-column property="repairMemo" align="center" label="维修情况" sortable /> <el-table-column property="repairPersonId" align="center" label="维修负责人" sortable /> <el-table-column property="repairPersonDepartmentId" align="center" label="维修负责人单位" sortable /> - <el-table-column property="repairStartDate" align="center" label="维修开始日期" sortable /> - <el-table-column property="repairEndDate" align="center" label="维修结束日期" sortable /> + <el-table-column property="repairStartDate" align="center" :formatter="timeDate" label="维修开始日期" sortable /> + <el-table-column property="repairEndDate" align="center" :formatter="timeDate" label="维修结束日期" sortable /> </el-table> </el-tab-pane> </el-tabs> @@ -116,6 +116,7 @@ </template> <script lang="ts"> import { defineComponent, ref, reactive, watch, onMounted } from 'vue'; +import { timeDate } from '/@/assets/index.ts'; import updata from '/@/components/updata/updata.vue'; import Dailog from '/@/components/equipmentDailog/Dailog.vue'; import { ElTree, TabsPaneContext, ElMessage, ElMessageBox } from 'element-plus'; @@ -317,6 +318,7 @@ return { handleNodeClick, ruleForm, + timeDate, resetForm, listApi, onAddorUpdata, diff --git a/src/views/facilityManagement/keyEquipment/index.vue b/src/views/facilityManagement/keyEquipment/index.vue index 52374a7..7e987d6 100644 --- a/src/views/facilityManagement/keyEquipment/index.vue +++ b/src/views/facilityManagement/keyEquipment/index.vue @@ -26,7 +26,7 @@ <el-col :span="20"> <div class="btns"> <div> - <el-button size="default" type="primary" :icon="Plus" @click="openD">新建</el-button> + <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button> <el-button size="default" :disabled="warning" type="warning" plain :icon="EditPen">修改</el-button> <el-button size="default" :disabled="danger" type="danger" :icon="Delete" @click="onDeleteAll" plain>删除</el-button> </div> diff --git a/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue b/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue index 3af583a..4e37911 100644 --- a/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue +++ b/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue @@ -1,953 +1,813 @@ <template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <el-col :span="12"> - <div class="grid-content topInfo"> - <el-select v-model="searchType" @change="changeSearch" placeholder="任务名称"> - <el-option label="巡检任务类型" value="巡检任务类型" /> - <el-option label="创建人" value="创建人" /> - <el-option label="巡检班组" value="巡检班组" /> - <el-option label="检查频次" value="检查频次" /> - <el-option label="开始时间" value="开始时间" /> - </el-select> - <el-input v-model="searchContent" v-if="searchType == '任务名称'" placeholder="请输入任务名称"></el-input> - <el-input - v-else-if="searchType == '检查频次'" - v-model="searchContent" - placeholder="请输入检查频次" - > - <template #append> - <el-select v-model="searchUnit" placeholder="选择单位"> - <el-option label="分钟" value="分钟" /> - <el-option label="小时" value="小时" /> - <el-option label="天" value="天" /> - </el-select> - </template> - </el-input> - <el-select v-model="searchContent" v-else-if="searchType == '巡检任务类型'" placeholder="请选择任务类型"> - <el-option v-for="(item,index) in typeOptions" :label="item.name" :value="item.value" :key="index"/> - </el-select> - <el-select v-model="searchContent" v-else-if="searchType == '创建人'" placeholder="请选择创建人"> - <el-option v-for="(item,index) in createrOptions" :label="item.name" :value="item.value" :key="index"/> - </el-select> - <el-select v-model="searchContent" v-else-if="searchType == '巡检班组'" placeholder="请选择巡检班组"> - <el-option v-for="(item,index) in inspectorOptions" :label="item.name" :value="item.value" :key="index"/> - </el-select> - <el-date-picker - v-model="searchContent" - type="date" - v-else - :placeholder="'请选择' + searchType" - size="large" - style="margin-right: 20px" - /> - <el-button type="primary">查询</el-button> - <el-button plain>重置</el-button> - </div> - </el-col> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> - <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> - </el-col> - <el-button type="primary" :icon="Refresh" size="default"/> - </el-row> - <el-table - ref="multipleTableRef" - :data="tableData" - style="width: 100%" - height="calc(100% - 100px)" - :header-cell-style="{background: '#fafafa'}" - @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="55" /> - <el-table-column property="name" label="任务名称" width="200"/> - <el-table-column property="type" label="任务类型"/> - <el-table-column property="execClassgroup" label="巡检班组"/> - <el-table-column property="frequency" label="检查频次"/> - <el-table-column property="unit" label="频次单位"/> - <el-table-column property="chainLength" label="巡检链长度" width="160"/> - <el-table-column property="startTime" label="任务开始时间" width="180"/> -<!-- <el-table-column property="validTime" label="任务有效时间" width="180"/>--> - <el-table-column property="creater" label="创建人"/> - <el-table-column property="createTime" label="创建时间" width="180"/> - <el-table-column property="status" label="状态" width="60"/> - <el-table-column fixed="right" label="操作" align="center" width="300"> - <template #default="scope"> - <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> - <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index ,scope.row)">修改</el-button> - <el-switch - v-model="scope.row.status" - inline-prompt - active-text="开" - inactive-text="关" - active-value="开启" - inactive-value="关闭" - style="margin: 0 10px" - /> - <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination - v-model:currentPage="currentPage" - v-model:page-size="pageSize" - :page-sizes="[10, 15]" - small=false - background - layout="total, sizes, prev, pager, next, jumper" - :total="100" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> - </div> - </div> - </div> + <div class="home-container"> + <div style="height: 100%"> + <el-row class="homeCard"> + <el-col :span="12"> + <div class="grid-content topInfo"> + <el-select v-model="searchType" @change="changeSearch" placeholder="任务名称"> + <el-option label="巡检任务类型" value="巡检任务类型" /> + <el-option label="创建人" value="创建人" /> + <el-option label="巡检班组" value="巡检班组" /> + <el-option label="检查频次" value="检查频次" /> + <el-option label="开始时间" value="开始时间" /> + </el-select> + <el-input v-model="searchContent" v-if="searchType == '任务名称'" placeholder="请输入任务名称"></el-input> + <el-input v-else-if="searchType == '检查频次'" v-model="searchContent" placeholder="请输入检查频次"> + <template #append> + <el-select v-model="searchUnit" placeholder="选择单位"> + <el-option label="分钟" value="分钟" /> + <el-option label="小时" value="小时" /> + <el-option label="天" value="天" /> + </el-select> + </template> + </el-input> + <el-select v-model="searchContent" v-else-if="searchType == '巡检任务类型'" placeholder="请选择任务类型"> + <el-option v-for="(item, index) in typeOptions" :label="item.name" :value="item.value" :key="index" /> + </el-select> + <el-select v-model="searchContent" v-else-if="searchType == '创建人'" placeholder="请选择创建人"> + <el-option v-for="(item, index) in createrOptions" :label="item.name" :value="item.value" :key="index" /> + </el-select> + <el-select v-model="searchContent" v-else-if="searchType == '巡检班组'" placeholder="请选择巡检班组"> + <el-option v-for="(item, index) in inspectorOptions" :label="item.name" :value="item.value" :key="index" /> + </el-select> + <el-date-picker v-model="searchContent" type="date" v-else :placeholder="'请选择' + searchType" size="large" style="margin-right: 20px" /> + <el-button type="primary">查询</el-button> + <el-button plain>重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <div class="main-card"> + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" /> + </el-row> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55" /> + <el-table-column property="name" label="任务名称" width="200" /> + <el-table-column property="type" label="任务类型" /> + <el-table-column property="execClassgroup" label="巡检班组" /> + <el-table-column property="frequency" label="检查频次" /> + <el-table-column property="unit" label="频次单位" /> + <el-table-column property="chainLength" label="巡检链长度" width="160" /> + <el-table-column property="startTime" label="任务开始时间" width="180" /> + <!-- <el-table-column property="validTime" label="任务有效时间" width="180"/>--> + <el-table-column property="creater" label="创建人" /> + <el-table-column property="createTime" label="创建时间" width="180" /> + <el-table-column property="status" label="状态" width="60" /> + <el-table-column fixed="right" label="操作" align="center" width="300"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecord(scope.$index, scope.row)">修改</el-button> + <el-switch v-model="scope.row.status" inline-prompt active-text="开" inactive-text="关" active-value="开启" inactive-value="关闭" style="margin: 0 10px" /> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecord(scope.$index)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination v-model:currentPage="currentPage" v-model:page-size="pageSize" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="100" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> + </div> + </div> + </div> + </div> - <el-dialog v-model="dialogDetails" title="巡检任务"> - <el-form :model="details" label-width="120px"> - <el-row> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="任务名称"> - <el-input - v-model="details.name" - readonly - /> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="任务类型"> - <el-input - v-model="details.type" - readonly - /> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="巡检部门"> - <el-input - v-model="details.execDepId" - readonly - /> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="巡检班组"> - <el-input - v-model="details.execClassgroup" - readonly - /> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="检查频次" prop="frequency"> - <el-input - v-model="details.frequency" - readonly - > - <template #append> - <el-input - v-model="details.unit" - readonly - /> - </template> - </el-input> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="提前通知时间"> - <el-input - v-model="details.noticeTime" - readonly - /> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="任务开始时间"> - <el-input - v-model="details.startTime" - readonly - /> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="周期有效时间"> - <el-input - v-model="details.validTime" - readonly - /> - </el-form-item> - </el-col> - <el-col :span="24" style="margin-bottom: 20px"> - <el-form-item label="巡检链"> - <div style="width: 100%;margin-left: -30px"> - <div v-for="(item,index) in details.shiftSteps" class="stepItem"> - <div class="stepNum">{{index+1}}</div> - <div class="stepCard"> - <el-card class="box-card"> - <template #header> - <div class="card-header"> - <div>{{item.pointId}}</div> - </div> - </template> - <div class="text item">所属设备区域:<span>{{item.regionUuid}}</span></div> - <div class="text item">关联RFID:<span>{{item.rfidId}}</span></div> - <div class="text item">巡检指标:<span>{{item.quotaId}}</span></div> - <div class="text item">数据填报类型:<span>{{item.dataReportType}}</span></div> - <div class="text item">数据参考值:<span>{{item.firstReferenceValue?item.firstReferenceValue:(item.secondReferenceValue?item.secondReferenceValue:item.thirdReferenceValue)}}</span></div> - </el-card> - </div> - </div> - </div> - </el-form-item> - </el-col> - <el-form-item> - <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> - </el-form-item> - </el-row> - </el-form> - </el-dialog> + <el-dialog v-model="dialogDetails" title="巡检任务"> + <el-form :model="details" label-width="120px"> + <el-row> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="任务名称"> + <el-input v-model="details.name" readonly /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="任务类型"> + <el-input v-model="details.type" readonly /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="巡检部门"> + <el-input v-model="details.execDepId" readonly /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="巡检班组"> + <el-input v-model="details.execClassgroup" readonly /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="检查频次" prop="frequency"> + <el-input v-model="details.frequency" readonly> + <template #append> + <el-input v-model="details.unit" readonly /> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="提前通知时间"> + <el-input v-model="details.noticeTime" readonly /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="任务开始时间"> + <el-input v-model="details.startTime" readonly /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="周期有效时间"> + <el-input v-model="details.validTime" readonly /> + </el-form-item> + </el-col> + <el-col :span="24" style="margin-bottom: 20px"> + <el-form-item label="巡检链"> + <div style="width: 100%; margin-left: -30px"> + <div v-for="(item, index) in details.shiftSteps" class="stepItem"> + <div class="stepNum">{{ index + 1 }}</div> + <div class="stepCard"> + <el-card class="box-card"> + <template #header> + <div class="card-header"> + <div>{{ item.pointId }}</div> + </div> + </template> + <div class="text item"> + 所属设备区域:<span>{{ item.regionUuid }}</span> + </div> + <div class="text item"> + 关联RFID:<span>{{ item.rfidId }}</span> + </div> + <div class="text item"> + 巡检指标:<span>{{ item.quotaId }}</span> + </div> + <div class="text item"> + 数据填报类型:<span>{{ item.dataReportType }}</span> + </div> + <div class="text item"> + 数据参考值:<span>{{ item.firstReferenceValue ? item.firstReferenceValue : item.secondReferenceValue ? item.secondReferenceValue : item.thirdReferenceValue }}</span> + </div> + </el-card> + </div> + </div> + </div> + </el-form-item> + </el-col> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-row> + </el-form> + </el-dialog> - <el-dialog v-model="dialogAddRecord" title="巡检任务编辑" @close="closeAdd" @open="openAdd"> - <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-row> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="任务名称" prop="name"> - <el-input - v-model="addRecord.name" - > - </el-input> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="任务类型" prop="type"> - <el-select v-model="addRecord.type"> - <el-option label="日常检查" value="日常检查" /> - <el-option label="周期检查" value="周期检查" /> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="巡检部门" prop="validTime"> - <el-select v-model="addRecord.execDepId" placeholder="请选择"> - <el-option label="部门一" value="部门一" /> - <el-option label="部门二" value="部门二" /> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="巡检班组" prop="execClassgroupId"> - <el-select v-model="addRecord.execClassgroup" placeholder="请选择"> - <el-option label="班组1" value="班组1" /> - <el-option label="班组2" value="班组2" /> - <el-option label="班组3" value="班组3" /> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="检查频次" prop="frequency"> - <el-input - v-model="addRecord.frequency" - placeholder="请输入检查频次" - > - <template #append> - <el-select v-model="addRecord.unit" placeholder="选择单位"> - <el-option label="分钟" value="分钟" /> - <el-option label="小时" value="小时" /> - <el-option label="天" value="天" /> - </el-select> - </template> - </el-input> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="提前通知时间" prop="noticeTime"> - <el-select v-model="addRecord.noticeTime" placeholder="选择时间"> - <el-option label="15分钟" value="15分钟" /> - <el-option label="30分钟" value="30分钟" /> - <el-option label="45分钟" value="45分钟" /> - <el-option label="60分钟" value="60分钟" /> - <el-option label="75分钟" value="75分钟" /> - <el-option label="90分钟" value="90分钟" /> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="周期开始时间" prop="startTime"> - <el-date-picker - v-model="addRecord.startTime" - type="datetime" - format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" - /> - </el-form-item> - </el-col> - <el-col :span="12" style="margin-bottom: 20px"> - <el-form-item label="任务有效时间" prop="validTime"> - <el-select v-model="addRecord.validTime" placeholder="选择时间"> - <el-option label="15分钟" value="15分钟" /> - <el-option label="30分钟" value="30分钟" /> - <el-option label="45分钟" value="45分钟" /> - <el-option label="60分钟" value="60分钟" /> - <el-option label="75分钟" value="75分钟" /> - <el-option label="90分钟" value="90分钟" /> - </el-select> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="创建巡检链"> - <div style="width: 100%;margin-bottom: 20px"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddShift = true">新增巡检点</el-button> - </div> - <div style="width: 100%;margin-left: -30px"> - <div v-for="(item,index) in addRecord.shiftSteps" class="stepItem"> - <div class="stepNum">{{index+1}}</div> - <div class="stepCard"> - <el-card class="box-card"> - <template #header> - <div class="card-header"> - <div>{{item.pointId}}</div> - </div> - </template> - <div class="text item">所属设备区域:<span>{{item.regionUuid}}</span></div> - <div class="text item">关联RFID:<span>{{item.rfidId}}</span></div> - <div class="text item">巡检指标:<span>{{item.quotaId}}</span></div> - <div class="text item">数据填报类型:<span>{{item.dataReportType}}</span></div> - <div class="text item">数据参考值:<span>{{item.firstReferenceValue?item.firstReferenceValue:(item.secondReferenceValue?item.secondReferenceValue:item.thirdReferenceValue)}}</span></div> - </el-card> - </div> - <div> -<!-- <el-button type="primary" size="default" @click="addFlow(index)">新增下一区域</el-button>--> - <el-button type="primary" size="default" @click="editFlow(index)">修改</el-button> - <el-button type="danger" size="default" @click="deleteFlow(index)">删除</el-button> - </div> - </div> - </div> - </el-form-item> - </el-col> - </el-row> - <el-form-item> - <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> - <span>您确定要删除该条记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - </span> - </template> - </el-dialog> - <el-dialog v-model="deleteShiftDialog" title="提示" width="30%" center @close="indexShiftClear"> - <span>您确定要删除该巡检点吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteShiftDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmShiftDelete" size="default">确认</el-button> - </span> - </template> - </el-dialog> - <el-dialog v-model="dialogAddShift" title="新增巡检点" @close="closeAddShift"> - <el-form :model="addShift" label-width="120px" ref="addShiftRef" :rules="addShiftRules"> - <el-form-item label="选择巡检点" prop="pointId"> - <el-select v-model="addShift.pointId"> - <el-option label="73011" value="73011" /> - <el-option label="73012" value="73012" /> - </el-select> - </el-form-item> - <el-form-item label="所属设备区域"> - <el-input - v-model="addShift.regionId" - readonly - /> - </el-form-item> - <el-form-item label="关联RFID"> - <el-input - v-model="addShift.rfidId" - readonly - /> - </el-form-item> - <el-form-item label="选择巡检指标" prop="quotaId"> - <el-input v-model="addShift.quotaId" placeholder="Please input"> - <template #append>{{addShift.quotaUnit}}</template> - </el-input> - </el-form-item> - <el-form-item label="数据填报类型" prop="dataReportType"> - <el-select v-model="addShift.dataReportType"> - <el-option label="选择" value="选择" /> - <el-option label="填空" value="填空" /> - <el-option label="选择并填空" value="选择并填空" /> - </el-select> - </el-form-item> - <el-form-item v-if="addShift.dataReportType == '选择' || addShift.dataReportType == '选择并填空'" label="数据参考值" prop="firstReferenceValue"> - <el-select v-model="addShift.firstReferenceValue"> - <el-option label="正常" value="正常" /> - <el-option label="异常" value="异常" /> - </el-select> - </el-form-item> - <el-form-item v-if="addShift.dataReportType == '填空' || addShift.dataReportType == '选择并填空'" label="数据参考值"> - <el-input - v-model="addShift.secondReferenceValue" - type="number" - placeholder="请根据需求选择前方符号后再填写参考值,非必填" - > - <template #prepend> - <el-select v-model="addShift.secondReferenceSign" placeholder="Select" style="width: 115px"> - <el-option label=">" value=">" /> - <el-option label=">=" value=">=" /> - </el-select> - </template> - </el-input> - </el-form-item> - <el-form-item v-if="addShift.dataReportType == '填空' || addShift.dataReportType == '选择并填空'" label=""> - <el-input - v-model="addShift.thirdReferenceValue" - type="number" - placeholder="请根据需求选择前方符号后再填写参考值,非必填" - > - <template #prepend> - <el-select v-model="addShift.thirdReferenceSign" placeholder="Select" style="width: 115px"> - <el-option label="<" value="<"/> - <el-option label="<=" value="<="/> - </el-select> - </template> - </el-input> - </el-form-item> - <el-form-item> - <el-button type="warning" @click="dialogAddShift = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="confirmAddShift(addShiftRef)" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - </div> + <el-dialog v-model="dialogAddRecord" title="巡检任务编辑" @close="closeAdd" @open="openAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-row> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="任务名称" prop="name"> + <el-input v-model="addRecord.name"> </el-input> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="任务类型" prop="type"> + <el-select v-model="addRecord.type"> + <el-option label="日常检查" value="日常检查" /> + <el-option label="周期检查" value="周期检查" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="巡检部门" prop="validTime"> + <el-select v-model="addRecord.execDepId" placeholder="请选择"> + <el-option label="部门一" value="部门一" /> + <el-option label="部门二" value="部门二" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="巡检班组" prop="execClassgroupId"> + <el-select v-model="addRecord.execClassgroup" placeholder="请选择"> + <el-option label="班组1" value="班组1" /> + <el-option label="班组2" value="班组2" /> + <el-option label="班组3" value="班组3" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="检查频次" prop="frequency"> + <el-input v-model="addRecord.frequency" placeholder="请输入检查频次"> + <template #append> + <el-select v-model="addRecord.unit" placeholder="选择单位"> + <el-option label="分钟" value="分钟" /> + <el-option label="小时" value="小时" /> + <el-option label="天" value="天" /> + </el-select> + </template> + </el-input> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="提前通知时间" prop="noticeTime"> + <el-select v-model="addRecord.noticeTime" placeholder="选择时间"> + <el-option label="15分钟" value="15分钟" /> + <el-option label="30分钟" value="30分钟" /> + <el-option label="45分钟" value="45分钟" /> + <el-option label="60分钟" value="60分钟" /> + <el-option label="75分钟" value="75分钟" /> + <el-option label="90分钟" value="90分钟" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="周期开始时间" prop="startTime"> + <el-date-picker v-model="addRecord.startTime" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" /> + </el-form-item> + </el-col> + <el-col :span="12" style="margin-bottom: 20px"> + <el-form-item label="任务有效时间" prop="validTime"> + <el-select v-model="addRecord.validTime" placeholder="选择时间"> + <el-option label="15分钟" value="15分钟" /> + <el-option label="30分钟" value="30分钟" /> + <el-option label="45分钟" value="45分钟" /> + <el-option label="60分钟" value="60分钟" /> + <el-option label="75分钟" value="75分钟" /> + <el-option label="90分钟" value="90分钟" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="创建巡检链"> + <div style="width: 100%; margin-bottom: 20px"> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddShift = true">新增巡检点</el-button> + </div> + <div style="width: 100%; margin-left: -30px"> + <div v-for="(item, index) in addRecord.shiftSteps" class="stepItem"> + <div class="stepNum">{{ index + 1 }}</div> + <div class="stepCard"> + <el-card class="box-card"> + <template #header> + <div class="card-header"> + <div>{{ item.pointId }}</div> + </div> + </template> + <div class="text item"> + 所属设备区域:<span>{{ item.regionUuid }}</span> + </div> + <div class="text item"> + 关联RFID:<span>{{ item.rfidId }}</span> + </div> + <div class="text item"> + 巡检指标:<span>{{ item.quotaId }}</span> + </div> + <div class="text item"> + 数据填报类型:<span>{{ item.dataReportType }}</span> + </div> + <div class="text item"> + 数据参考值:<span>{{ item.firstReferenceValue ? item.firstReferenceValue : item.secondReferenceValue ? item.secondReferenceValue : item.thirdReferenceValue }}</span> + </div> + </el-card> + </div> + <div> + <!-- <el-button type="primary" size="default" @click="addFlow(index)">新增下一区域</el-button>--> + <el-button type="primary" size="default" @click="editFlow(index)">修改</el-button> + <el-button type="danger" size="default" @click="deleteFlow(index)">删除</el-button> + </div> + </div> + </div> + </el-form-item> + </el-col> + </el-row> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="deleteShiftDialog" title="提示" width="30%" center @close="indexShiftClear"> + <span>您确定要删除该巡检点吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteShiftDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmShiftDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="dialogAddShift" title="新增巡检点" @close="closeAddShift"> + <el-form :model="addShift" label-width="120px" ref="addShiftRef" :rules="addShiftRules"> + <el-form-item label="选择巡检点" prop="pointId"> + <el-select v-model="addShift.pointId"> + <el-option label="73011" value="73011" /> + <el-option label="73012" value="73012" /> + </el-select> + </el-form-item> + <el-form-item label="所属设备区域"> + <el-input v-model="addShift.regionId" readonly /> + </el-form-item> + <el-form-item label="关联RFID"> + <el-input v-model="addShift.rfidId" readonly /> + </el-form-item> + <el-form-item label="选择巡检指标" prop="quotaId"> + <el-input v-model="addShift.quotaId" placeholder="Please input"> + <template #append>{{ addShift.quotaUnit }}</template> + </el-input> + </el-form-item> + <el-form-item label="数据填报类型" prop="dataReportType"> + <el-select v-model="addShift.dataReportType"> + <el-option label="选择" value="选择" /> + <el-option label="填空" value="填空" /> + <el-option label="选择并填空" value="选择并填空" /> + </el-select> + </el-form-item> + <el-form-item v-if="addShift.dataReportType == '选择' || addShift.dataReportType == '选择并填空'" label="数据参考值" prop="firstReferenceValue"> + <el-select v-model="addShift.firstReferenceValue"> + <el-option label="正常" value="正常" /> + <el-option label="异常" value="异常" /> + </el-select> + </el-form-item> + <el-form-item v-if="addShift.dataReportType == '填空' || addShift.dataReportType == '选择并填空'" label="数据参考值"> + <el-input v-model="addShift.secondReferenceValue" type="number" placeholder="请根据需求选择前方符号后再填写参考值,非必填"> + <template #prepend> + <el-select v-model="addShift.secondReferenceSign" placeholder="Select" style="width: 115px"> + <el-option label=">" value=">" /> + <el-option label=">=" value=">=" /> + </el-select> + </template> + </el-input> + </el-form-item> + <el-form-item v-if="addShift.dataReportType == '填空' || addShift.dataReportType == '选择并填空'" label=""> + <el-input v-model="addShift.thirdReferenceValue" type="number" placeholder="请根据需求选择前方符号后再填写参考值,非必填"> + <template #prepend> + <el-select v-model="addShift.thirdReferenceSign" placeholder="Select" style="width: 115px"> + <el-option label="<" value="<" /> + <el-option label="<=" value="<=" /> + </el-select> + </template> + </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddShift = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddShift(addShiftRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + </div> </template> <script lang="ts"> - import { toRefs, reactive, ref } from 'vue'; - import { storeToRefs } from 'pinia'; - import { initBackEndControlRoutes } from '/@/router/backEnd'; - import {useUserInfo} from "/@/stores/userInfo"; - import { Session } from '/@/utils/storage'; - import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' - import { ElTable, ElMessage } from 'element-plus' - import { FormInstance, FormRules } from 'element-plus' - let global: any = { - homeChartOne: null, - homeChartTwo: null, - homeCharThree: null, - dispose: [null, '', undefined], - }; +import { toRefs, reactive, ref } from 'vue'; +import { storeToRefs } from 'pinia'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { Session } from '/@/utils/storage'; +import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; +import { ElTable, ElMessage } from 'element-plus'; +import { FormInstance, FormRules } from 'element-plus'; +let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined] +}; - interface stateType { - homeOne: Array <type> - } - interface type { +interface stateType { + homeOne: Array<type>; +} +interface type {} +export default { + name: 'index', + components: {}, + setup() { + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); - } - export default { - name: 'workingHoursSet', - components: {}, - setup() { - const userInfo = useUserInfo() - const {userInfos} = storeToRefs(userInfo); + const state = reactive({ + searchType: '任务名称', + typeOptions: [ + { + name: '日常检查', + value: '日常检查' + }, + { + name: '周期检查', + value: '周期检查' + } + ], + createrOptions: [ + { + name: '张三', + value: '张三' + }, + { + name: '李四', + value: '李四' + } + ], + inspectorOptions: [ + { + name: '李四', + value: '李四' + }, + { + name: '张三', + value: '张三' + } + ], + searchUnit: '小时', + searchContent: '', + currentPage: 1, + pageSize: 10, + chosenIndex: null, + chosenShiftIndex: null, + chosenInspectionIndex: null, + dialogDetails: false, + dialogAddRecord: false, + deleteDialog: false, + deleteShiftDialog: false, + deleteInspectionDialog: false, + dialogAddShift: false, + tableData: [], + addRecord: { + name: '', + type: '', + creater: '', + inspector: '', + frequency: 1, + unit: '小时', + startTime: '', + validTime: '', + createTime: '', + chainLength: 0, + status: '开启', + shiftSteps: [] + }, + addShift: { + secondReferenceSign: '>', + thirdReferenceSign: '<' + }, + details: {} + }); - const state = reactive({ - searchType: '任务名称', - typeOptions: [ - { - name: '日常检查', - value: '日常检查' - }, - { - name: '周期检查', - value: '周期检查' - } - ], - createrOptions: [ - { - name: '张三', - value: '张三' - }, - { - name: '李四', - value: '李四' - } - ], - inspectorOptions: [ - { - name: '李四', - value: '李四' - }, - { - name: '张三', - value: '张三' - } - ], - searchUnit: '小时', - searchContent: '', - currentPage: 1, - pageSize: 10, - chosenIndex: null, - chosenShiftIndex: null, - chosenInspectionIndex: null, - dialogDetails: false, - dialogAddRecord: false, - deleteDialog: false, - deleteShiftDialog: false, - deleteInspectionDialog: false, - dialogAddShift: false, - tableData: [ - { - name: '甲醛装置()列现场岗位巡检', - type: '周期检查', - creater: '管理员A', - execClassgroup: '张三', - frequency: 2, - unit: '小时', - noticeTime: '2022-07-02 13:01:37', - startTime: '2022-07-02 13:01:37', - validTime: '30分钟', - createTime: '2022-07-02 12:03:47', - chainLength: 20, - status: '开启', - shiftSteps: [ - { - pointId: 73011, - regionUuid: '风机系统', - rfidId: 21054, - quotaId: '压力', - dataReportType: '选择' - }, - { - name: 'A场所', - inspectorData: [ - { - sort: 1, - name: '73021', - section: '风机系统', - rfid: '风机系统1标签', - norm: '风机声音', - reference: '10<正常<50' - }, - { - sort: 2, - name: '73022', - section: '风机系统', - rfid: '风机系统2标签', - norm: '设备温度', - reference: '20<正常<50' - }, - { - sort: 3, - name: '73023', - section: '风机系统', - rfid: '风机系统3标签', - norm: '风机震动', - reference: '30<正常<50' - } - ] - } - ] - }, - { - name: 'A车间日常巡检', - type: '日常检查', - creater: '管理员B', - execClassgroup: '李四', - frequency: 4, - unit: '小时', - noticeTime: '2022-07-02 13:01:37', - startTime: '2022-07-02 12:45:37', - validTime: '30分钟', - createTime: '2022-07-02 08:15:41', - chainLength: 15, - status: '开启' - } - ], - addRecord: { - name: '', - type: '', - creater: '', - inspector: '', - frequency: 1, - unit: '小时', - startTime: '', - validTime: '', - createTime: '', - chainLength: 0, - status: '开启', - shiftSteps: [] - }, - addShift: { - secondReferenceSign: '>', - thirdReferenceSign: '<' - }, - details: {} - }) + //获取巡检任务数据 + const getInspectionTask = () => {}; - // 顶部筛选搜索 - const changeSearch = () => { - state.searchContent = '' - } + // 顶部筛选搜索 + const changeSearch = () => { + state.searchContent = ''; + }; - const handleSizeChange = (val: number) => { - console.log(`${val} items per page`) - } - const handleCurrentChange = (val: number) => { - console.log(`current page: ${val}`) - } + const handleSizeChange = (val: number) => { + console.log(`${val} items per page`); + }; + const handleCurrentChange = (val: number) => { + console.log(`current page: ${val}`); + }; - // 时间格式化 - const timeForm = { - hour12: false, - year: 'numeric', - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit', - second: '2-digit' - } - const handleChange = (value) => { - state.addRecord.content = [] - console.log(JSON.parse(JSON.stringify(value))) - } - const addRef = ref<FormInstance>() - const addShiftRef = ref<FormInstance>() - const addInspectionRef = ref<FormInstance>() + // 时间格式化 + const timeForm = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + }; + const handleChange = (value) => { + state.addRecord.content = []; + console.log(JSON.parse(JSON.stringify(value))); + }; + const addRef = ref<FormInstance>(); + const addShiftRef = ref<FormInstance>(); + const addInspectionRef = ref<FormInstance>(); - // 表单校验 - const addRules = reactive<FormRules>({ - name: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - type: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - execClassgroupId: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - frequency: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - unit: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - noticeTime: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - startTime: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - validTime: [{required: true, message: '该内容不能为空', trigger: 'blur'}] - }) - const addShiftRules = reactive<FormRules>({ - pointId: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - quotaId: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - dataReportType: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - firstReferenceValue: [{required: true, message: '该内容不能为空', trigger: 'blur'}] - }) + // 表单校验 + const addRules = reactive<FormRules>({ + name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + type: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + execClassgroupId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + frequency: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + unit: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + noticeTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + validTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + const addShiftRules = reactive<FormRules>({ + pointId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + quotaId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + dataReportType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + firstReferenceValue: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); - // 查看记录 - const viewRecord = (row) => { - state.details = JSON.parse(JSON.stringify(row)) - state.dialogDetails = true - } + // 查看记录 + const viewRecord = (row) => { + state.details = JSON.parse(JSON.stringify(row)); + state.dialogDetails = true; + }; - // 删除记录 - const deleteRecord = (index) => { - state.chosenIndex = index - state.deleteDialog = true - } - const conFirmDelete = () => { - state.tableData.splice(state.chosenIndex, 1) - state.deleteDialog = false - } + // 删除记录 + const deleteRecord = (index) => { + state.chosenIndex = index; + state.deleteDialog = true; + }; + const conFirmDelete = () => { + state.tableData.splice(state.chosenIndex, 1); + state.deleteDialog = false; + }; - // 修改添加记录 - const editRecord = (index, row) => { - state.chosenIndex = index - state.dialogAddRecord = true - state.addRecord = JSON.parse(JSON.stringify(row)) - } - const confirmAddRecord = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate((valid, fields) => { - if (valid) { - if (state.chosenIndex == null) { - if (!state.addRecord.shiftSteps || state.addRecord.shiftSteps.length == 0) { - ElMessage({ - message: '请先设置巡检链后再提交', - type: 'warning', - }) - return - } else { - state.addRecord.createTime = new Date().toLocaleString('zh', timeForm).replace(/\//g, '-') - state.addRecord.chainLength = state.addRecord.shiftSteps.length - state.addRecord.status = '开启' - state.tableData.unshift(state.addRecord) - } - } else { - if (state.addRecord.shiftSteps.length == 0) { - ElMessage({ - message: '请先设置巡检链后再提交', - type: 'warning', - }) - return - } else { - state.tableData[state.chosenIndex] = state.addRecord - } - } - state.dialogAddRecord = false - } else { - console.log('error submit!', fields) - } - }) + // 修改添加记录 + const editRecord = (index, row) => { + state.chosenIndex = index; + state.dialogAddRecord = true; + state.addRecord = JSON.parse(JSON.stringify(row)); + }; + const confirmAddRecord = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + if (state.chosenIndex == null) { + if (!state.addRecord.shiftSteps || state.addRecord.shiftSteps.length == 0) { + ElMessage({ + message: '请先设置巡检链后再提交', + type: 'warning' + }); + return; + } else { + state.addRecord.createTime = new Date().toLocaleString('zh', timeForm).replace(/\//g, '-'); + state.addRecord.chainLength = state.addRecord.shiftSteps.length; + state.addRecord.status = '开启'; + state.tableData.unshift(state.addRecord); + } + } else { + if (state.addRecord.shiftSteps.length == 0) { + ElMessage({ + message: '请先设置巡检链后再提交', + type: 'warning' + }); + return; + } else { + state.tableData[state.chosenIndex] = state.addRecord; + } + } + state.dialogAddRecord = false; + } else { + console.log('error submit!', fields); + } + }); + }; - } + // 添加弹窗打开前预操作 + const openAdd = () => { + state.addRecord.unit = '小时'; + }; - // 添加弹窗打开前预操作 - const openAdd = () => { - state.addRecord.unit = '小时' - } + // 弹窗关闭后判断数据初始化 + const closeAdd = () => { + state.addRecord = {}; + state.chosenIndex = null; + state.addShift = {}; + state.chosenShiftIndex = null; + }; + const indexClear = () => { + state.chosenIndex = null; + }; + const indexShiftClear = () => { + state.chosenShiftIndex = null; + }; - // 弹窗关闭后判断数据初始化 - const closeAdd = () => { - state.addRecord = {} - state.chosenIndex = null - state.addShift = {} - state.chosenShiftIndex = null - } - const indexClear = () => { - state.chosenIndex = null - } - const indexShiftClear = () => { - state.chosenShiftIndex = null - } + // 排序 + // function compare(key) { + // return function (value1, value2) { + // var val1 = value1[key]; + // var val2 = value2[key]; + // return val1 - val2; + // } + // } - // 排序 - // function compare(key) { - // return function (value1, value2) { - // var val1 = value1[key]; - // var val2 = value2[key]; - // return val1 - val2; - // } - // } + // 添加删除巡检设施区域 + // const addFlow = (index) => { + // state.dialogAddShift = true + // state.chosenShiftIndex = index + // } - // 添加删除巡检设施区域 - // const addFlow = (index) => { - // state.dialogAddShift = true - // state.chosenShiftIndex = index - // } + // 编辑巡检点 + const editFlow = (index) => { + state.chosenShiftIndex = index; + state.addShift = JSON.parse(JSON.stringify(state.addRecord.shiftSteps[index])); + state.dialogAddShift = true; + }; - // 编辑巡检点 - const editFlow = (index) =>{ - state.chosenShiftIndex = index - state.addShift = JSON.parse(JSON.stringify(state.addRecord.shiftSteps[index])) - state.dialogAddShift = true - } + // 删除巡检点 + const deleteFlow = (index) => { + state.deleteShiftDialog = true; + state.chosenShiftIndex = index; + }; + const conFirmShiftDelete = () => { + state.addRecord.shiftSteps.splice(state.chosenShiftIndex, 1); + state.deleteShiftDialog = false; + }; + // 增加修改巡检点 + const confirmAddShift = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + if (state.chosenShiftIndex == null) { + if (!state.addRecord.shiftSteps) { + state.addRecord.shiftSteps = []; + } + state.addRecord.shiftSteps.push(state.addShift); + } else { + state.addRecord.shiftSteps[state.chosenShiftIndex] = state.addShift; + } + state.dialogAddShift = false; + } else { + console.log('error submit!', fields); + } + }); + }; - // 删除巡检点 - const deleteFlow = (index) => { - state.deleteShiftDialog = true - state.chosenShiftIndex = index - } - const conFirmShiftDelete = () => { - state.addRecord.shiftSteps.splice(state.chosenShiftIndex, 1) - state.deleteShiftDialog = false - } - // 增加修改巡检点 - const confirmAddShift = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate((valid, fields) => { - if (valid) { - if(state.chosenShiftIndex == null){ - if(!state.addRecord.shiftSteps){state.addRecord.shiftSteps = []} - state.addRecord.shiftSteps.push(state.addShift) - }else{ - state.addRecord.shiftSteps[state.chosenShiftIndex] = state.addShift - } - state.dialogAddShift = false - } else { - console.log('error submit!', fields) - } - }) - } + const closeAddShift = () => { + state.addShift = {}; + state.chosenShiftIndex = null; + }; - const closeAddShift = () => { - state.addShift = {} - state.chosenShiftIndex = null - } - - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId', value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - - return { - addRef, - addShiftRef, - addInspectionRef, - addRules, - addShiftRules, - View, - Edit, - Delete, - Refresh, - Plus, - changeSearch, - handleSizeChange, - handleCurrentChange, - handleChange, - viewRecord, - deleteRecord, - conFirmDelete, - openAdd, - editRecord, - confirmAddRecord, - closeAdd, - conFirmShiftDelete, - confirmAddShift, - closeAddShift, - editFlow, - deleteFlow, - indexClear, - indexShiftClear, - renderMenu, - ...toRefs(state) - } - } - } + return { + addRef, + addShiftRef, + addInspectionRef, + addRules, + addShiftRules, + View, + Edit, + Delete, + Refresh, + Plus, + changeSearch, + handleSizeChange, + handleCurrentChange, + handleChange, + viewRecord, + deleteRecord, + conFirmDelete, + openAdd, + editRecord, + confirmAddRecord, + closeAdd, + conFirmShiftDelete, + confirmAddShift, + closeAddShift, + editFlow, + deleteFlow, + indexClear, + indexShiftClear, + ...toRefs(state) + }; + } +}; </script> <style scoped lang="scss"> - $homeNavLengh: 8; - .home-container { - height: calc(100vh - 114px); - box-sizing: border-box; - overflow: hidden; - .homeCard{ - width: 100%; - padding: 20px; - box-sizing: border-box; - background: #fff; - border-radius: 4px; +$homeNavLengh: 8; +.home-container { + height: calc(100vh - 114px); + box-sizing: border-box; + overflow: hidden; + .homeCard { + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; - .main-card{ - width: 100%; - height: 100%; - .cardTop{ - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; - .mainCardBtn{ - margin: 0; - } - } - .pageBtn{ - height: 60px; - display: flex; - align-items: center; - justify-content: right; + .main-card { + width: 100%; + height: 100%; + .cardTop { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn { + margin: 0; + } + } + .pageBtn { + height: 60px; + display: flex; + align-items: center; + justify-content: right; - .demo-pagination-block + .demo-pagination-block { - margin-top: 10px; - } - .demo-pagination-block .demonstration { - margin-bottom: 16px; - } - } - } - &:last-of-type{ - height: calc(100% - 100px); - } - } - .el-row{ - display: flex; - align-items: center; - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - .grid-content{ - align-items: center; - min-height: 36px; - } + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type { + height: calc(100% - 100px); + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } - .topInfo { - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; - &>div{ - white-space: nowrap; - margin-right: 20px; - } - } - } - } - .stepItem{ - width: 100%; - display: flex; - align-items: flex-start; - margin-bottom: 30px; - margin-left: 30px; - padding-bottom: 30px; - border-left: 2px solid #ccc; - &:first-of-type{ - margin-top: 30px; - } - &:last-of-type{ - margin-bottom: 0; - border-left: none; - } - .stepNum { - width: 30px; - height: 30px; - border-radius: 15px; - box-sizing: border-box; - color: #333; - border: 1px solid #999; - line-height: 28px; - text-align: center; - margin-right: 10px; - margin-left: -16px; - margin-top: -30px; - } - .stepCard { - width: 100%; - margin-top: -30px; + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } +} +.stepItem { + width: 100%; + display: flex; + align-items: flex-start; + margin-bottom: 30px; + margin-left: 30px; + padding-bottom: 30px; + border-left: 2px solid #ccc; + &:first-of-type { + margin-top: 30px; + } + &:last-of-type { + margin-bottom: 0; + border-left: none; + } + .stepNum { + width: 30px; + height: 30px; + border-radius: 15px; + box-sizing: border-box; + color: #333; + border: 1px solid #999; + line-height: 28px; + text-align: center; + margin-right: 10px; + margin-left: -16px; + margin-top: -30px; + } + .stepCard { + width: 100%; + margin-top: -30px; - .box-card { - width: 100%; - &:deep(.el-card__header){ - padding: 10px 15px - } - .card-header { - width: 100%; - display: flex; - justify-content: space-between; - align-items: center; - &>div:first-of-type{ - margin-right: 80px; - font-size: 18px; - font-weight: bold; - } - } - } - } - &:hover .card-header{ - color: #0098F5; - } - &:hover .stepNum{ - border: 2px solid #0098F5; - color: #0098F5; - } - } - .el-input{ - width: 100% !important; - } - :deep(.el-date-editor){ - width: 100%; - } - .el-select{ - width: 100%; - } + .box-card { + width: 100%; + &:deep(.el-card__header) { + padding: 10px 15px; + } + .card-header { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + & > div:first-of-type { + margin-right: 80px; + font-size: 18px; + font-weight: bold; + } + } + } + } + &:hover .card-header { + color: #0098f5; + } + &:hover .stepNum { + border: 2px solid #0098f5; + color: #0098f5; + } +} +.el-input { + width: 100% !important; +} +:deep(.el-date-editor) { + width: 100%; +} +.el-select { + width: 100%; +} </style> diff --git a/src/views/system/menu/component/menuDialog.vue b/src/views/system/menu/component/menuDialog.vue index 0830adb..3df8384 100644 --- a/src/views/system/menu/component/menuDialog.vue +++ b/src/views/system/menu/component/menuDialog.vue @@ -168,7 +168,6 @@ btnPower: '' }; } else { - debugger; state.buttonName = '修改'; state.title = '修改菜单'; state.ruleForm = JSON.parse(JSON.stringify(value)); diff --git a/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue b/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue index 5d3d46f..eb9e387 100644 --- a/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue @@ -109,8 +109,8 @@ import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; import { ElTable } from 'element-plus'; import { FormInstance, FormRules, ElMessage } from 'element-plus'; -import { workingHoursApi } from '/@/api/basicDateManage/personShiftManage/workingHours'; -import {workingHoursSetApi} from "/@/api/basicDateManage/personShiftManage/workingHoursSet"; +import { workingHoursApi } from '/@/api/systemManage/basicDateManage/personShiftManage/workingHours'; +import { workingHoursSetApi } from '/@/api/systemManage/basicDateManage/personShiftManage/workingHoursSet'; // 定义接口来定义对象的类型 interface stateType { @@ -344,7 +344,7 @@ // 批量删除 const deleteBatchBtn = async () => { if (state.deleteArr.length > 0) { - state.deleteSetDialog = true + state.deleteSetDialog = true; } else { ElMessage({ type: 'warning', @@ -355,20 +355,20 @@ const conFirmDeleteBatch = async () => { let res = await workingHoursApi().deleteBatchWorkTimePeriod({ ids: state.deleteArr }); if (res.data.code === '200') { - state.deleteSetDialog = false + state.deleteSetDialog = false; ElMessage({ type: 'success', message: res.data.msg }); - getListByPage() + getListByPage(); } else { ElMessage({ type: 'warning', message: res.data.msg }); - state.deleteSetDialog = false + state.deleteSetDialog = false; } - } + }; const handleSizeChange = (val: number) => { state.pageSize = val; diff --git a/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue b/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue index edb8aa9..64702cf 100644 --- a/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue @@ -1,706 +1,662 @@ <template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <el-col :span="8"> - <div class="grid-content topInfo"> - <el-input v-model="searchWord" placeholder="休息日名称"></el-input> - <el-button type="primary" @click="searchRecord">查询</el-button> - <el-button plain @click="clearSearch">重置</el-button> - </div> - </el-col> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> -<!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> - <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> - </el-col> - <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()"/> - </el-row> - <el-table - ref="multipleTableRef" - :data="tableData" - style="width: 100%" - height="calc(100% - 100px)" - :header-cell-style="{background: '#fafafa'}" - @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="100" /> - <el-table-column property="name" label="休息日名称"/> - <el-table-column property="typeName" label="休息日类型"/> - <el-table-column property="ruleName" label="休息日规则"/> - <el-table-column property="ruleNumber" label="休息日"/> - <el-table-column property="info" label="描述信息"/> - <el-table-column fixed="right" label="操作" align="center" width="250"> - <template #default="scope"> - <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> - <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index ,scope.row)">修改</el-button> - <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination - v-model:currentPage="pageIndex" - v-model:page-size="pageSize" - :page-sizes="[10, 15]" - small=false - background - layout="total, sizes, prev, pager, next, jumper" - :total="totalSize" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> - </div> - </div> - </div> - <el-dialog v-model="dialogDetails" title="休息时间"> - <el-form :model="details" label-width="120px"> - <el-form-item label="名称"> - <el-input - v-model="details.name" - readonly - /> - </el-form-item> - <el-form-item label="休假类型"> - <el-input - v-model="details.typeName" - readonly - /> - </el-form-item> - <el-form-item label="休假规则" v-if="details.type == 2"> - <el-input - v-model="details.ruleName" - readonly - /> - </el-form-item> - <el-form-item label="休假时间" v-if="details.type == 2"> - <el-input - v-model="details.ruleNumber" - readonly - /> - </el-form-item> - <el-form-item label="描述信息" v-if="details.info"> - <el-input - v-model="details.info" - type="textarea" - readonly - /> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="dialogAddRecord" title="休息时间编辑" @close="closeAdd"> - <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="休息日名称" prop="name"> - <el-input - v-model="addRecord.name" - > - </el-input> - </el-form-item> - <el-form-item label="休假类型" prop="type"> - <el-select v-model="addRecord.type" placeholder="请选择休假类型" style="width: 100%" @change="typeChange"> - <el-option v-for="(item,index) in typeList" :key="index" :label="item.name" :value="item.value"/> - </el-select> - </el-form-item> - <el-form-item label="休假规则" prop="rule" v-if="addRecord.type == '自定义休息日' || addRecord.type == 2"> - <el-select v-model="addRecord.rule" placeholder="请选择休假规则" style="width: 100%" @change="ruleChange"> - <el-option v-for="(item,index) in ruleList" :key="index" :label="item.name" :value="item.value"/> - </el-select> - </el-form-item> - <el-form-item label="选择休假时间" prop="ruleNumber" v-if="addRecord.rule == '每周'|| addRecord.rule == 1"> - <el-checkbox-group v-model="addRecord.ruleNumber"> - <el-checkbox v-for="(item,i) in weekDays" :label="item.value" :key="i">{{item.name}}</el-checkbox> - </el-checkbox-group> - </el-form-item> - <el-form-item label="选择休假时间" prop="ruleNumber" v-if="addRecord.rule == '每月'|| addRecord.rule == 2"> - <el-checkbox-group v-model="addRecord.ruleNumber"> - <el-checkbox v-for="index in 31" :label="index" :key="index"/> - </el-checkbox-group> - </el-form-item> - <el-form-item label="描述信息" prop="info"> - <el-input - v-model="addRecord.info" - type="textarea" - > - </el-input> - </el-form-item> - <el-form-item> - <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> - <span>您确定要删除该条记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - </span> - </template> - </el-dialog> - <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> - <span>您确定要删除这些记录吗?</span> - <template #footer> + <div class="home-container"> + <div style="height: 100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="休息日名称"></el-input> + <el-button type="primary" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <div class="main-card"> + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" /> + </el-row> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="100" /> + <el-table-column property="name" label="休息日名称" /> + <el-table-column property="typeName" label="休息日类型" /> + <el-table-column property="ruleName" label="休息日规则" /> + <el-table-column property="ruleNumber" label="休息日" /> + <el-table-column property="info" label="描述信息" /> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index, scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination v-model:currentPage="pageIndex" v-model:page-size="pageSize" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> + </div> + </div> + </div> + </div> + <el-dialog v-model="dialogDetails" title="休息时间"> + <el-form :model="details" label-width="120px"> + <el-form-item label="名称"> + <el-input v-model="details.name" readonly /> + </el-form-item> + <el-form-item label="休假类型"> + <el-input v-model="details.typeName" readonly /> + </el-form-item> + <el-form-item label="休假规则" v-if="details.type == 2"> + <el-input v-model="details.ruleName" readonly /> + </el-form-item> + <el-form-item label="休假时间" v-if="details.type == 2"> + <el-input v-model="details.ruleNumber" readonly /> + </el-form-item> + <el-form-item label="描述信息" v-if="details.info"> + <el-input v-model="details.info" type="textarea" readonly /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="休息时间编辑" @close="closeAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="休息日名称" prop="name"> + <el-input v-model="addRecord.name"> </el-input> + </el-form-item> + <el-form-item label="休假类型" prop="type"> + <el-select v-model="addRecord.type" placeholder="请选择休假类型" style="width: 100%" @change="typeChange"> + <el-option v-for="(item, index) in typeList" :key="index" :label="item.name" :value="item.value" /> + </el-select> + </el-form-item> + <el-form-item label="休假规则" prop="rule" v-if="addRecord.type == '自定义休息日' || addRecord.type == 2"> + <el-select v-model="addRecord.rule" placeholder="请选择休假规则" style="width: 100%" @change="ruleChange"> + <el-option v-for="(item, index) in ruleList" :key="index" :label="item.name" :value="item.value" /> + </el-select> + </el-form-item> + <el-form-item label="选择休假时间" prop="ruleNumber" v-if="addRecord.rule == '每周' || addRecord.rule == 1"> + <el-checkbox-group v-model="addRecord.ruleNumber"> + <el-checkbox v-for="(item, i) in weekDays" :label="item.value" :key="i">{{ item.name }}</el-checkbox> + </el-checkbox-group> + </el-form-item> + <el-form-item label="选择休假时间" prop="ruleNumber" v-if="addRecord.rule == '每月' || addRecord.rule == 2"> + <el-checkbox-group v-model="addRecord.ruleNumber"> + <el-checkbox v-for="index in 31" :label="index" :key="index" /> + </el-checkbox-group> + </el-form-item> + <el-form-item label="描述信息" prop="info"> + <el-input v-model="addRecord.info" type="textarea"> </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> + <span>您确定要删除这些记录吗?</span> + <template #footer> <span class="dialog-footer"> <el-button @click="deleteSetDialog = false" size="default">取消</el-button> <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button> </span> - </template> - </el-dialog> - </div> + </template> + </el-dialog> + </div> </template> <script lang="ts"> - import { toRefs, reactive, ref, onMounted } from 'vue'; - import { storeToRefs } from 'pinia'; - import { initBackEndControlRoutes } from '/@/router/backEnd'; - import {useUserInfo} from "/@/stores/userInfo"; - import { Session } from '/@/utils/storage'; - import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' - import { ElTable } from 'element-plus' - import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { holidayTimeApi } from '/@/api/basicDateManage/personShiftManage/holidayTime'; - import {workingHoursSetApi} from "/@/api/basicDateManage/personShiftManage/workingHoursSet"; +import { toRefs, reactive, ref, onMounted } from 'vue'; +import { storeToRefs } from 'pinia'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { Session } from '/@/utils/storage'; +import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; +import { ElTable } from 'element-plus'; +import { FormInstance, FormRules, ElMessage } from 'element-plus'; +import { holidayTimeApi } from '/@/api/systemManage/basicDateManage/personShiftManage/holidayTime'; +import { workingHoursSetApi } from '/@/api/systemManage/basicDateManage/personShiftManage/workingHoursSet'; +// 定义接口来定义对象的类型 +interface stateType { + tableData: Array<string>; + multipleSelection: Array<any>; + deleteArr: Array<any>; + weekDays: Array<any>; + typeList: Array<any>; + ruleList: Array<any>; + dialogDetails: boolean; + dialogAddRecord: boolean; + deleteDialog: boolean; + deleteSetDialog: boolean; + pageIndex: number; + pageSize: number; + searchWord: string; + chosenIndex: null | number; + casProps: object; + deleteId: null | number; + totalSize: number; + addRecord: { + name: string; + type: number | string; + rule: number | string; + ruleNumber: Array<number> | string; + info: string; + }; + details: { + name: string; + type: string; + rule: string; + ruleNumber: string; + info: string; + }; +} - - // 定义接口来定义对象的类型 - interface stateType { - tableData: Array<string>, - multipleSelection: Array<any>, - deleteArr: Array<any>, - weekDays: Array<any>, - typeList: Array<any>, - ruleList: Array<any>, - dialogDetails: boolean, - dialogAddRecord: boolean, - deleteDialog: boolean, - deleteSetDialog: boolean, - pageIndex: number, - pageSize: number, - searchWord: string, - chosenIndex: null| number, - casProps: object, - deleteId: null| number, - totalSize: number, - addRecord: { - name: string, - type: number | string, - rule: number | string, - ruleNumber: Array<number> | string, - info: string - }, - details: { - name: string, - type: string, - rule: string, - ruleNumber: string, - info: string - } - } - - export default { +export default { name: 'workingHours', - components:{}, + components: {}, setup() { - const userInfo = useUserInfo() - const {userInfos} = storeToRefs(userInfo); + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); - const state = reactive<stateType>({ - pageIndex: 1, - pageSize: 10, - totalSize: 0, - chosenIndex: null, - searchWord: '', - tableData: [], - typeList: [ - { - name: '每周公休假日', - value: 0 - }, - { - name: '国家法定节假日', - value: 1 - }, - { - name: '自定义休息日', - value: 2 - } - ], - ruleList: [ - { - name: '每周', - value: 1 - }, - { - name: '每月', - value: 2 - } - ], - multipleSelection: [], - dialogDetails: false, - dialogAddRecord: false, - deleteDialog: false, - deleteSetDialog: false, - weekDays: [ - { - name: '周一', - value: 1 - }, - { - name: '周二', - value: 2 - }, - { - name: '周三', - value: 3 - }, - { - name: '周四', - value: 4 - }, - { - name: '周五', - value: 5 - }, - { - name: '周六', - value: 6 - }, - { - name: '周日', - value: 7 - } - ], - casProps: { - expandTrigger: 'hover', - }, - addRecord: { - name: '', - type: '', - rule: '', - ruleNumber: [], - info: '' - }, - details: { - name: '', - type: '', - rule: '', - ruleNumber: '', - info: '' - }, - deleteId: null, - deleteArr: [] - }) - interface User { - name: string, - type: number | string, - rule: number | string, - ruleNumber: Array<number> | string, - info: string - } + const state = reactive<stateType>({ + pageIndex: 1, + pageSize: 10, + totalSize: 0, + chosenIndex: null, + searchWord: '', + tableData: [], + typeList: [ + { + name: '每周公休假日', + value: 0 + }, + { + name: '国家法定节假日', + value: 1 + }, + { + name: '自定义休息日', + value: 2 + } + ], + ruleList: [ + { + name: '每周', + value: 1 + }, + { + name: '每月', + value: 2 + } + ], + multipleSelection: [], + dialogDetails: false, + dialogAddRecord: false, + deleteDialog: false, + deleteSetDialog: false, + weekDays: [ + { + name: '周一', + value: 1 + }, + { + name: '周二', + value: 2 + }, + { + name: '周三', + value: 3 + }, + { + name: '周四', + value: 4 + }, + { + name: '周五', + value: 5 + }, + { + name: '周六', + value: 6 + }, + { + name: '周日', + value: 7 + } + ], + casProps: { + expandTrigger: 'hover' + }, + addRecord: { + name: '', + type: '', + rule: '', + ruleNumber: [], + info: '' + }, + details: { + name: '', + type: '', + rule: '', + ruleNumber: '', + info: '' + }, + deleteId: null, + deleteArr: [] + }); + interface User { + name: string; + type: number | string; + rule: number | string; + ruleNumber: Array<number> | string; + info: string; + } - // 排序 - const compare = (x,y)=> { - if (x < y) { - return -1; - } else if (x > y) { - return 1; - } else { - return 0; - } - } + // 排序 + const compare = (x, y) => { + if (x < y) { + return -1; + } else if (x > y) { + return 1; + } else { + return 0; + } + }; - const handleChange = (value) => { - state.addRecord.content = [] - console.log(JSON.parse(JSON.stringify(value))) - } + const handleChange = (value) => { + state.addRecord.content = []; + console.log(JSON.parse(JSON.stringify(value))); + }; - const multipleTableRef = ref<InstanceType<typeof ElTable>>() - const toggleSelection = (rows?: User[]) => { - if (rows) { - rows.forEach((row) => { - // TODO: improvement typing when refactor table - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - multipleTableRef.value!.toggleRowSelection(row, undefined) - }) - } else { - multipleTableRef.value!.clearSelection() - } - } + const multipleTableRef = ref<InstanceType<typeof ElTable>>(); + const toggleSelection = (rows?: User[]) => { + if (rows) { + rows.forEach((row) => { + // TODO: improvement typing when refactor table + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + multipleTableRef.value!.toggleRowSelection(row, undefined); + }); + } else { + multipleTableRef.value!.clearSelection(); + } + }; - // 休息类型改变时操作 - const typeChange =()=>{ - state.addRecord.rule = '' - state.addRecord.ruleNumber = [] - } - // 休息规则改变时操作 - const ruleChange =()=>{ - state.addRecord.ruleNumber = [] - } + // 休息类型改变时操作 + const typeChange = () => { + state.addRecord.rule = ''; + state.addRecord.ruleNumber = []; + }; + // 休息规则改变时操作 + const ruleChange = () => { + state.addRecord.ruleNumber = []; + }; - // 多选 - const handleSelectionChange = (val: User[]) => { - state.multipleSelection = JSON.parse(JSON.stringify(val)) - state.deleteArr = state.multipleSelection.map((item)=>{ - item = item.id - return item - }) - } + // 多选 + const handleSelectionChange = (val: User[]) => { + state.multipleSelection = JSON.parse(JSON.stringify(val)); + state.deleteArr = state.multipleSelection.map((item) => { + item = item.id; + return item; + }); + }; - const addRef = ref<FormInstance>() - const addRules = reactive<FormRules>({ - name: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - type: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - rule: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - ruleNumber: [{required: true, message: '该内容不能为空', trigger: 'blur'}] - }) + const addRef = ref<FormInstance>(); + const addRules = reactive<FormRules>({ + name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + type: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + rule: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + ruleNumber: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); - // 页面载入时执行方法 - onMounted(() => { - // getWorkTimePeriod() - getListByPage() - }) + // 页面载入时执行方法 + onMounted(() => { + // getWorkTimePeriod() + getListByPage(); + }); - // 休假类型格式化 - // const typeName =(row, column, cellValue, index) =>{ - // return row.type == 0? '每周公休假日':(row.type == 1? '国家法定节假日': '自定义休息日') - // } + // 休假类型格式化 + // const typeName =(row, column, cellValue, index) =>{ + // return row.type == 0? '每周公休假日':(row.type == 1? '国家法定节假日': '自定义休息日') + // } - // 分页获取工作时段列表 - const getListByPage = async ()=>{ - const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}} - let res = await holidayTimeApi().getAllBreakTimeRuleByPage(data); - if (res.data.code === '200') { - state.tableData = res.data.data.map((item)=>{ - item.typeName = item.type===0?'每周公休假日':(item.type===1?'国家法定节假日':(item.type===2?'自定义休息日':'')) - item.ruleName = item.rule===1?'每周':(item.rule===2?'每月':'') - return item - }) - console.log(state.tableData,'列表获取的tableData') - state.totalSize = res.data.total - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // 分页获取工作时段列表 + const getListByPage = async () => { + const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { name: state.searchWord } }; + let res = await holidayTimeApi().getAllBreakTimeRuleByPage(data); + if (res.data.code === '200') { + state.tableData = res.data.data.map((item) => { + item.typeName = item.type === 0 ? '每周公休假日' : item.type === 1 ? '国家法定节假日' : item.type === 2 ? '自定义休息日' : ''; + item.ruleName = item.rule === 1 ? '每周' : item.rule === 2 ? '每月' : ''; + return item; + }); + console.log(state.tableData, '列表获取的tableData'); + state.totalSize = res.data.total; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 关键词查询记录 - const searchRecord = async()=>{ - if(state.searchWord==''){ - ElMessage({ - type: 'warning', - message: '请输入查询关键词' - }); - }else{ - getListByPage() - } - } + // 关键词查询记录 + const searchRecord = async () => { + if (state.searchWord == '') { + ElMessage({ + type: 'warning', + message: '请输入查询关键词' + }); + } else { + getListByPage(); + } + }; - const clearSearch = async()=>{ - state.searchWord='' - getListByPage() - } + const clearSearch = async () => { + state.searchWord = ''; + getListByPage(); + }; - // 添加休息时间 - const addRecord = async (data:any) => { - let res = await holidayTimeApi().addBreakTime(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; + // 添加休息时间 + const addRecord = async (data: any) => { + let res = await holidayTimeApi().addBreakTime(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 修改休息时间 - const editRecordBtn = (index, row) => { - state.dialogAddRecord = true - state.chosenIndex = index - console.log(row,'编辑时的row') - console.log(state.tableData,'编辑时的tableData') - state.addRecord = JSON.parse(JSON.stringify(row)) - state.addRecord.ruleNumber = row.ruleNumber.split(',').map((i)=>{ - return Number(i) - }) - console.log(state.addRecord) - } + // 修改休息时间 + const editRecordBtn = (index, row) => { + state.dialogAddRecord = true; + state.chosenIndex = index; + console.log(row, '编辑时的row'); + console.log(state.tableData, '编辑时的tableData'); + state.addRecord = JSON.parse(JSON.stringify(row)); + state.addRecord.ruleNumber = row.ruleNumber.split(',').map((i) => { + return Number(i); + }); + console.log(state.addRecord); + }; - const editRecord = async (data:any) => { - let res = await holidayTimeApi().updateBreakTime(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + const editRecord = async (data: any) => { + let res = await holidayTimeApi().updateBreakTime(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 新增修改记录 - const confirmAddRecord = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate(async (valid, fields) => { - if (valid) { - const data = { - name: state.addRecord.name, - info: state.addRecord.info, - type: Number(state.addRecord.type), - rule: Number(state.addRecord.rule), - ruleNumber: state.addRecord.ruleNumber.sort(compare).join(',') - } - if (state.chosenIndex == null) { - if(data.type == 2 && data.ruleNumber==''){ - ElMessage({ - type: 'warning', - message: '请至少选择一个休息时间' - }); - return - } else{ - await addRecord(data) - } - } else { - data.id = state.addRecord.id, - console.log(data,'提交时的参数data') - await editRecord(data) - } - state.dialogAddRecord = false - } else { - console.log('error submit!', fields) - } - }) + // 新增修改记录 + const confirmAddRecord = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate(async (valid, fields) => { + if (valid) { + const data = { + name: state.addRecord.name, + info: state.addRecord.info, + type: Number(state.addRecord.type), + rule: Number(state.addRecord.rule), + ruleNumber: state.addRecord.ruleNumber.sort(compare).join(',') + }; + if (state.chosenIndex == null) { + if (data.type == 2 && data.ruleNumber == '') { + ElMessage({ + type: 'warning', + message: '请至少选择一个休息时间' + }); + return; + } else { + await addRecord(data); + } + } else { + (data.id = state.addRecord.id), console.log(data, '提交时的参数data'); + await editRecord(data); + } + state.dialogAddRecord = false; + } else { + console.log('error submit!', fields); + } + }); + }; + const closeAdd = () => { + state.addRecord = { + name: '', + type: '', + rule: '', + ruleNumber: [], + info: '' + }; + state.chosenIndex = null; + }; - } - const closeAdd = () => { - state.addRecord = { - name: '', - type: '', - rule: '', - ruleNumber: [], - info: '' - } - state.chosenIndex = null - } + // 删除工作时段 + const deleteRecord = async (data: any) => { + let res = await holidayTimeApi().deleteBreakTime(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 删除工作时段 - const deleteRecord = async (data:any) => { - let res = await holidayTimeApi().deleteBreakTime(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + const deleteRecordBtn = (row) => { + state.deleteId = row.id; + state.deleteDialog = true; + }; - const deleteRecordBtn = (row) => { - state.deleteId = row.id - state.deleteDialog = true - } + const conFirmDelete = () => { + deleteRecord({ id: state.deleteId }); + state.deleteDialog = false; + }; - const conFirmDelete = () => { - deleteRecord({ id: state.deleteId }) - state.deleteDialog = false - } + // 批量删除 + const deleteBatchBtn = async () => { + if (state.deleteArr.length > 0) { + state.deleteSetDialog = true; + } else { + ElMessage({ + type: 'warning', + message: '请先选择要删除的记录' + }); + } + }; - // 批量删除 - const deleteBatchBtn = async () => { - if (state.deleteArr.length > 0) { - state.deleteSetDialog = true - } else { - ElMessage({ - type: 'warning', - message: '请先选择要删除的记录' - }); - } - }; + const conFirmDeleteBatch = async () => { + let res = await holidayTimeApi().deleteBatch({ ids: state.deleteArr }); + if (res.data.code === '200') { + state.deleteSetDialog = false; + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.deleteSetDialog = false; + } + }; - const conFirmDeleteBatch = async () => { - let res = await holidayTimeApi().deleteBatch({ids: state.deleteArr}); - if (res.data.code === '200') { - state.deleteSetDialog = false - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - state.deleteSetDialog = false - } - } + const handleSizeChange = (val: number) => { + state.pageSize = val; + getListByPage(); + }; + const handleCurrentChange = (val: number) => { + state.pageIndex = val; + getListByPage(); + }; - const handleSizeChange = (val: number) => { - state.pageSize = val - getListByPage() - } - const handleCurrentChange = (val: number) => { - state.pageIndex = val - getListByPage() - } + // 查看记录 + const viewRecord = (row) => { + state.details = JSON.parse(JSON.stringify(row)); + state.dialogDetails = true; + }; - // 查看记录 - const viewRecord = (row) => { - state.details = JSON.parse(JSON.stringify(row)) - state.dialogDetails = true - } + // 刷新 + const reLoadData = async () => { + getListByPage(); + }; - // 刷新 - const reLoadData = async () =>{ - getListByPage() - } + const indexClear = () => { + state.deleteId = null; + }; - const indexClear = () => { - state.deleteId = null - } - - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId', value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - addRef, - addRules, - View, - Edit, - Delete, - Refresh, - Plus, - typeChange, - ruleChange, - compare, - toggleSelection, - handleSelectionChange, - deleteBatchBtn, - conFirmDeleteBatch, - searchRecord, - clearSearch, - viewRecord, - deleteRecordBtn, - conFirmDelete, - getListByPage, - reLoadData, - deleteRecord, - handleSizeChange, - handleCurrentChange, - confirmAddRecord, - closeAdd, - indexClear, - editRecordBtn, - ...toRefs(state) - }; - } - } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; + return { + addRef, + addRules, + View, + Edit, + Delete, + Refresh, + Plus, + typeChange, + ruleChange, + compare, + toggleSelection, + handleSelectionChange, + deleteBatchBtn, + conFirmDeleteBatch, + searchRecord, + clearSearch, + viewRecord, + deleteRecordBtn, + conFirmDelete, + getListByPage, + reLoadData, + deleteRecord, + handleSizeChange, + handleCurrentChange, + confirmAddRecord, + closeAdd, + indexClear, + editRecordBtn, + ...toRefs(state) + }; + } +}; </script> <style scoped lang="scss"> - $homeNavLengh: 8; - .home-container { - height: calc(100vh - 114px); - box-sizing: border-box; - overflow: hidden; - .homeCard{ - width: 100%; - padding: 20px; - box-sizing: border-box; - background: #fff; - border-radius: 4px; +$homeNavLengh: 8; +.home-container { + height: calc(100vh - 114px); + box-sizing: border-box; + overflow: hidden; + .homeCard { + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; - .main-card{ - width: 100%; - height: 100%; - .cardTop{ - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; - .mainCardBtn{ - margin: 0; - } - } - .pageBtn{ - height: 60px; - display: flex; - align-items: center; - justify-content: right; + .main-card { + width: 100%; + height: 100%; + .cardTop { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn { + margin: 0; + } + } + .pageBtn { + height: 60px; + display: flex; + align-items: center; + justify-content: right; - .demo-pagination-block + .demo-pagination-block { - margin-top: 10px; - } - .demo-pagination-block .demonstration { - margin-bottom: 16px; - } - } - } - &:last-of-type{ - height: calc(100% - 100px); - } - } - .el-row{ - display: flex; - align-items: center; - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - .grid-content{ - align-items: center; - min-height: 36px; - } + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type { + height: calc(100% - 100px); + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } - .topInfo { - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; - &>div{ - white-space: nowrap; - margin-right: 20px; - } - } - } - } - .el-input{ - width: 100% !important; - } - .el-date-editor::v-deep{ - width: 100%; - } - .el-select{ - width: 100%; - } + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } +} +.el-input { + width: 100% !important; +} +.el-date-editor::v-deep { + width: 100%; +} +.el-select { + width: 100%; +} </style> diff --git a/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue b/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue index b71469e..43195dc 100644 --- a/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue @@ -1,597 +1,560 @@ <template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <el-col :span="8"> - <div class="grid-content topInfo"> - <el-input v-model="searchWord" placeholder="休息时间组名称"></el-input> - <el-button type="primary" @click="searchRecord">查询</el-button> - <el-button plain @click="clearSearch">重置</el-button> - </div> - </el-col> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> -<!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> - <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> - </el-col> - <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()"/> - </el-row> - <el-table - ref="multipleTableRef" - :data="tableData" - style="width: 100%" - height="calc(100% - 100px)" - :header-cell-style="{background: '#fafafa'}" - @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="100" /> - <el-table-column property="name" label="休息时间组名称"/> - <el-table-column property="list" :formatter="toNames" label="关联休息时间"/> - <el-table-column property="info" label="描述信息"/> - <el-table-column fixed="right" label="操作" align="center" width="250"> - <template #default="scope"> - <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> - <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index ,scope.row)">修改</el-button> - <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination - v-model:currentPage="pageIndex" - v-model:page-size="pageSize" - :page-sizes="[10, 15]" - small=false - background - layout="total, sizes, prev, pager, next, jumper" - :total="totalSize" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> - </div> - </div> - </div> - <el-dialog v-model="dialogDetails" title="休息时间组"> - <el-form :model="details" label-width="120px"> - <el-form-item label="时间组名称"> - <el-input - v-model="details.name" - readonly - /> - </el-form-item> - <el-form-item label="关联休息时间" v-if="details.list.length>0"> - <el-input - v-model="details.list" - readonly - /> - </el-form-item> - <el-form-item label="描述信息" v-if="details.info"> - <el-input - v-model="details.info" - type="textarea" - readonly - /> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="dialogAddRecord" title="休息时间组编辑" @close="closeAdd" @open="openAdd"> - <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="时间组名称" prop="name"> - <el-input - v-model="addRecord.name" - > - </el-input> - </el-form-item> - <el-form-item label="关联休息时间" prop="list"> - <el-select v-model="addRecord.list" multiple> - <el-option v-for="(item,index) in holidayTimeList" :key="index" :label="item.name" :value="item.id" /> - </el-select> - </el-form-item> - <el-form-item label="描述信息" prop="info"> - <el-input - v-model="addRecord.info" - type="textarea" - > - </el-input> - </el-form-item> - <el-form-item> - <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> - <span>您确定要删除该条记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - </span> - </template> - </el-dialog> - <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> - <span>您确定要删除这些记录吗?</span> - <template #footer> + <div class="home-container"> + <div style="height: 100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="休息时间组名称"></el-input> + <el-button type="primary" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <div class="main-card"> + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" /> + </el-row> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="100" /> + <el-table-column property="name" label="休息时间组名称" /> + <el-table-column property="list" :formatter="toNames" label="关联休息时间" /> + <el-table-column property="info" label="描述信息" /> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index, scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination v-model:currentPage="pageIndex" v-model:page-size="pageSize" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> + </div> + </div> + </div> + </div> + <el-dialog v-model="dialogDetails" title="休息时间组"> + <el-form :model="details" label-width="120px"> + <el-form-item label="时间组名称"> + <el-input v-model="details.name" readonly /> + </el-form-item> + <el-form-item label="关联休息时间" v-if="details.list.length > 0"> + <el-input v-model="details.list" readonly /> + </el-form-item> + <el-form-item label="描述信息" v-if="details.info"> + <el-input v-model="details.info" type="textarea" readonly /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="休息时间组编辑" @close="closeAdd" @open="openAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="时间组名称" prop="name"> + <el-input v-model="addRecord.name"> </el-input> + </el-form-item> + <el-form-item label="关联休息时间" prop="list"> + <el-select v-model="addRecord.list" multiple> + <el-option v-for="(item, index) in holidayTimeList" :key="index" :label="item.name" :value="item.id" /> + </el-select> + </el-form-item> + <el-form-item label="描述信息" prop="info"> + <el-input v-model="addRecord.info" type="textarea"> </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> + <span>您确定要删除这些记录吗?</span> + <template #footer> <span class="dialog-footer"> <el-button @click="deleteSetDialog = false" size="default">取消</el-button> <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button> </span> - </template> - </el-dialog> - </div> + </template> + </el-dialog> + </div> </template> <script lang="ts"> - import { toRefs, reactive, ref, onMounted } from 'vue'; - import { storeToRefs } from 'pinia'; - import { initBackEndControlRoutes } from '/@/router/backEnd'; - import {useUserInfo} from "/@/stores/userInfo"; - import { Session } from '/@/utils/storage'; - import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' - import { ElTable } from 'element-plus' - import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { holidayGroupApi } from '/@/api/basicDateManage/personShiftManage/holidayTimeGroup'; +import { toRefs, reactive, ref, onMounted } from 'vue'; +import { storeToRefs } from 'pinia'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { Session } from '/@/utils/storage'; +import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; +import { ElTable } from 'element-plus'; +import { FormInstance, FormRules, ElMessage } from 'element-plus'; +import { holidayGroupApi } from '/@/api/systemManage/basicDateManage/personShiftManage/holidayTimeGroup'; +// 定义接口来定义对象的类型 +interface stateType { + tableData: Array<string>; + holidayTimeList: Array<string>; + multipleSelection: Array<any>; + deleteArr: Array<any>; + dialogDetails: boolean; + dialogAddRecord: boolean; + deleteDialog: boolean; + deleteSetDialog: boolean; + pageIndex: number; + pageSize: number; + chosenIndex: null | number; + deleteId: null | number; + searchWord: string; + totalSize: number; + addRecord: { + name: string; + list: Array<any>; + info: string; + }; + details: { + name: string; + list: Array<any>; + info: string; + }; +} - // 定义接口来定义对象的类型 - interface stateType { - tableData: Array<string>, - holidayTimeList: Array<string>, - multipleSelection: Array<any>, - deleteArr: Array<any>, - dialogDetails: boolean, - dialogAddRecord: boolean, - deleteDialog: boolean, - deleteSetDialog: boolean; - pageIndex: number, - pageSize: number, - chosenIndex: null | number, - deleteId: null | number, - searchWord: string, - totalSize: number, - addRecord: { - name: string, - list: Array<any>, - info: string - }, - details: { - name: string, - list: Array<any>, - info: string - } - } - - export default { +export default { name: 'workingHours', - components:{}, + components: {}, setup() { - const userInfo = useUserInfo() - const {userInfos} = storeToRefs(userInfo); + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); - const state = reactive<stateType>({ - pageIndex: 1, - pageSize: 10, - totalSize: 0, - chosenIndex: null, - searchWord: '', - tableData: [], - holidayTimeList: [], - multipleSelection: [], - dialogDetails: false, - dialogAddRecord: false, - deleteDialog: false, - deleteSetDialog: false, - addRecord: { - name: '', - list: [], - info: '' - }, - details: { - name: '', - list: [], - info: '' - }, - deleteId: null, - deleteArr: [] - }) - interface User { - name: string, - list: Array<any>, - info: string - } - const multipleTableRef = ref<InstanceType<typeof ElTable>>() - const toggleSelection = (rows?: User[]) => { - if (rows) { - rows.forEach((row) => { - // TODO: improvement typing when refactor table - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - multipleTableRef.value!.toggleRowSelection(row, undefined) - }) - } else { - multipleTableRef.value!.clearSelection() - } - } + const state = reactive<stateType>({ + pageIndex: 1, + pageSize: 10, + totalSize: 0, + chosenIndex: null, + searchWord: '', + tableData: [], + holidayTimeList: [], + multipleSelection: [], + dialogDetails: false, + dialogAddRecord: false, + deleteDialog: false, + deleteSetDialog: false, + addRecord: { + name: '', + list: [], + info: '' + }, + details: { + name: '', + list: [], + info: '' + }, + deleteId: null, + deleteArr: [] + }); + interface User { + name: string; + list: Array<any>; + info: string; + } + const multipleTableRef = ref<InstanceType<typeof ElTable>>(); + const toggleSelection = (rows?: User[]) => { + if (rows) { + rows.forEach((row) => { + // TODO: improvement typing when refactor table + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + multipleTableRef.value!.toggleRowSelection(row, undefined); + }); + } else { + multipleTableRef.value!.clearSelection(); + } + }; - // 多选 - const handleSelectionChange = (val: User[]) => { - state.multipleSelection = JSON.parse(JSON.stringify(val)) - state.deleteArr = state.multipleSelection.map((item)=>{ - item = item.id - return item - }) - } + // 多选 + const handleSelectionChange = (val: User[]) => { + state.multipleSelection = JSON.parse(JSON.stringify(val)); + state.deleteArr = state.multipleSelection.map((item) => { + item = item.id; + return item; + }); + }; - const addRef = ref<FormInstance>() - const addRules = reactive<FormRules>({ - name: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - list: [{required: true, message: '该内容不能为空', trigger: 'blur'}] - }) + const addRef = ref<FormInstance>(); + const addRules = reactive<FormRules>({ + name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + list: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); - // 页面载入时执行方法 - onMounted(() => { - getListByPage() - getAllBreak() - }) + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + getAllBreak(); + }); - // 分页获取休息时间组列表 - const getListByPage = async ()=>{ - const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}} - let res = await holidayGroupApi().getRecordPage(data); - if (res.data.code === '200') { - state.tableData = res.data.data.map((item)=>{ - if(item.list == null){ - item.list = [] - }else{ - item.list= Array.from(item.list,({breakTimeRuleId})=>breakTimeRuleId) - } - return item - }) - state.totalSize = res.data.total - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // 分页获取休息时间组列表 + const getListByPage = async () => { + const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { name: state.searchWord } }; + let res = await holidayGroupApi().getRecordPage(data); + if (res.data.code === '200') { + state.tableData = res.data.data.map((item) => { + if (item.list == null) { + item.list = []; + } else { + item.list = Array.from(item.list, ({ breakTimeRuleId }) => breakTimeRuleId); + } + return item; + }); + state.totalSize = res.data.total; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 表格数据格式化 - const toNames =(row, column, cellValue, index) => { - if(row.list==[]){ - return [] - }else{ - const nameList = [] - for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.holidayTimeList.length;t++){ - if(row.list[i]==state.holidayTimeList[t].id){ - nameList.push(state.holidayTimeList[t].name) - } - } - } - return nameList.join() - } - } + // 表格数据格式化 + const toNames = (row, column, cellValue, index) => { + if (row.list == []) { + return []; + } else { + const nameList = []; + for (let i = 0; i < row.list.length; i++) { + for (let t = 0; t < state.holidayTimeList.length; t++) { + if (row.list[i] == state.holidayTimeList[t].id) { + nameList.push(state.holidayTimeList[t].name); + } + } + } + return nameList.join(); + } + }; - // 获取工作时段列表 - const getAllBreak = async () => { - let res = await holidayGroupApi().getAllBreak(); - if (res.data.code === '200') { - state.holidayTimeList = res.data.data - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // 获取工作时段列表 + const getAllBreak = async () => { + let res = await holidayGroupApi().getAllBreak(); + if (res.data.code === '200') { + state.holidayTimeList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 关键词查询记录 - const searchRecord = async()=>{ - if(state.searchWord==''){ - ElMessage({ - type: 'warning', - message: '请输入查询关键词' - }); - }else{ - getListByPage() - } - } + // 关键词查询记录 + const searchRecord = async () => { + if (state.searchWord == '') { + ElMessage({ + type: 'warning', + message: '请输入查询关键词' + }); + } else { + getListByPage(); + } + }; - const clearSearch = async()=>{ - state.searchWord='' - getListByPage() - } + const clearSearch = async () => { + state.searchWord = ''; + getListByPage(); + }; - // 添加工作时段方法 - const addRecord = async (data:any) => { - let res = await holidayGroupApi().addRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; + // 添加工作时段方法 + const addRecord = async (data: any) => { + let res = await holidayGroupApi().addRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 修改工作时段方法 - const editRecord = async (data:any) => { - let res = await holidayGroupApi().updateRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // 修改工作时段方法 + const editRecord = async (data: any) => { + let res = await holidayGroupApi().updateRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 新增修改记录 - const confirmAddRecord = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate(async (valid, fields) => { - if (valid) { - const data = { - name: state.addRecord.name, - info: state.addRecord.info, - breakTimeRuleIds: state.addRecord.list - } - if (state.chosenIndex == null) { - await addRecord(data) - } else { - data.id = JSON.stringify(state.addRecord.id), - await editRecord(data) - } - state.dialogAddRecord = false - } else { - console.log('error submit!', fields) - } - }) + // 新增修改记录 + const confirmAddRecord = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate(async (valid, fields) => { + if (valid) { + const data = { + name: state.addRecord.name, + info: state.addRecord.info, + breakTimeRuleIds: state.addRecord.list + }; + if (state.chosenIndex == null) { + await addRecord(data); + } else { + (data.id = JSON.stringify(state.addRecord.id)), await editRecord(data); + } + state.dialogAddRecord = false; + } else { + console.log('error submit!', fields); + } + }); + }; - } + // 删除工作时间组方法 + const deleteRecord = async (data: any) => { + let res = await holidayGroupApi().deleteRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 删除工作时间组方法 - const deleteRecord = async (data:any) => { - let res = await holidayGroupApi().deleteRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + const deleteRecordBtn = (row) => { + state.deleteId = row.id; + state.deleteDialog = true; + }; - const deleteRecordBtn = (row) => { - state.deleteId = row.id - state.deleteDialog = true - } + const conFirmDelete = () => { + deleteRecord({ id: state.deleteId }); + state.deleteDialog = false; + }; - const conFirmDelete = () => { - deleteRecord({ id: state.deleteId }) - state.deleteDialog = false - } + // 批量删除 + const deleteBatchBtn = async () => { + if (state.deleteArr.length > 0) { + state.deleteSetDialog = true; + } else { + ElMessage({ + type: 'warning', + message: '请先选择要删除的记录' + }); + } + }; - // 批量删除 - const deleteBatchBtn = async () => { - if (state.deleteArr.length > 0) { - state.deleteSetDialog = true - } else { - ElMessage({ - type: 'warning', - message: '请先选择要删除的记录' - }); - } - }; + const conFirmDeleteBatch = async () => { + let res = await holidayGroupApi().deletBatchRecord({ ids: state.deleteArr }); + if (res.data.code === '200') { + state.deleteSetDialog = false; + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.deleteSetDialog = false; + } + }; - const conFirmDeleteBatch = async () => { - let res = await holidayGroupApi().deletBatchRecord({ids: state.deleteArr}); - if (res.data.code === '200') { - state.deleteSetDialog = false - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - state.deleteSetDialog = false - } - } + const handleSizeChange = (val: number) => { + state.pageSize = val; + getListByPage(); + }; + const handleCurrentChange = (val: number) => { + state.pageIndex = val; + getListByPage(); + }; - const handleSizeChange = (val: number) => { - state.pageSize = val - getListByPage() - } - const handleCurrentChange = (val: number) => { - state.pageIndex = val - getListByPage() - } + // 查看记录 + const viewRecord = (row) => { + state.details = JSON.parse(JSON.stringify(row)); + if (row.list == []) { + state.details.list = []; + } else { + state.details.list = []; + for (let i = 0; i < row.list.length; i++) { + for (let t = 0; t < state.holidayTimeList.length; t++) { + if (row.list[i] == state.holidayTimeList[t].id) { + state.details.list.push(state.holidayTimeList[t].name); + } + } + } + } + state.dialogDetails = true; + }; - // 查看记录 - const viewRecord = (row) => { - state.details = JSON.parse(JSON.stringify(row)) - if(row.list==[]){ - state.details.list = [] - }else{ - state.details.list = [] - for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.holidayTimeList.length;t++){ - if(row.list[i]==state.holidayTimeList[t].id){ - state.details.list.push(state.holidayTimeList[t].name) - } - } - } - } - state.dialogDetails = true - } + // 刷新 + const reLoadData = async () => { + getListByPage(); + }; + // 点击修改 + const editRecordBtn = (index, row) => { + state.dialogAddRecord = true; + state.chosenIndex = index; + state.addRecord = JSON.parse(JSON.stringify(row)); + }; + const closeAdd = () => { + state.addRecord = {}; + state.chosenIndex = null; + }; + const openAdd = () => { + if (state.chosenIndex == null) { + state.addRecord.info = ''; + } + }; + const indexClear = () => { + state.deleteId = null; + }; - // 刷新 - const reLoadData = async () =>{ - getListByPage() - } - // 点击修改 - const editRecordBtn = (index, row) => { - state.dialogAddRecord = true - state.chosenIndex = index - state.addRecord = JSON.parse(JSON.stringify(row)) - } - const closeAdd = () => { - state.addRecord = {} - state.chosenIndex = null - } - const openAdd = () => { - if (state.chosenIndex == null) { - state.addRecord.info = '' - } - } - const indexClear = () => { - state.deleteId = null - } - - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId', value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - addRef, - addRules, - View, - Edit, - Delete, - Refresh, - Plus, - toNames, - toggleSelection, - handleSelectionChange, - searchRecord, - clearSearch, - viewRecord, - deleteRecordBtn, - conFirmDelete, - getListByPage, - getAllBreak, - reLoadData, - deleteRecord, - deleteBatchBtn, - conFirmDeleteBatch, - handleSizeChange, - handleCurrentChange, - confirmAddRecord, - closeAdd, - openAdd, - indexClear, - editRecordBtn, - ...toRefs(state) - }; - } - } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; + return { + addRef, + addRules, + View, + Edit, + Delete, + Refresh, + Plus, + toNames, + toggleSelection, + handleSelectionChange, + searchRecord, + clearSearch, + viewRecord, + deleteRecordBtn, + conFirmDelete, + getListByPage, + getAllBreak, + reLoadData, + deleteRecord, + deleteBatchBtn, + conFirmDeleteBatch, + handleSizeChange, + handleCurrentChange, + confirmAddRecord, + closeAdd, + openAdd, + indexClear, + editRecordBtn, + ...toRefs(state) + }; + } +}; </script> <style scoped lang="scss"> - $homeNavLengh: 8; - .home-container { - height: calc(100vh - 114px); - box-sizing: border-box; - overflow: hidden; - .homeCard{ - width: 100%; - padding: 20px; - box-sizing: border-box; - background: #fff; - border-radius: 4px; +$homeNavLengh: 8; +.home-container { + height: calc(100vh - 114px); + box-sizing: border-box; + overflow: hidden; + .homeCard { + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; - .main-card{ - width: 100%; - height: 100%; - .cardTop{ - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; - .mainCardBtn{ - margin: 0; - } - } - .pageBtn{ - height: 60px; - display: flex; - align-items: center; - justify-content: right; + .main-card { + width: 100%; + height: 100%; + .cardTop { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn { + margin: 0; + } + } + .pageBtn { + height: 60px; + display: flex; + align-items: center; + justify-content: right; - .demo-pagination-block + .demo-pagination-block { - margin-top: 10px; - } - .demo-pagination-block .demonstration { - margin-bottom: 16px; - } - } - } - &:last-of-type{ - height: calc(100% - 100px); - } - } - .el-row{ - display: flex; - align-items: center; - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - .grid-content{ - align-items: center; - min-height: 36px; - } + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type { + height: calc(100% - 100px); + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } - .topInfo { - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; - &>div{ - white-space: nowrap; - margin-right: 20px; - } - } - } - } - .el-input{ - width: 100% !important; - } - .el-date-editor::v-deep{ - width: 100%; - } - .el-select{ - width: 100%; - } + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } +} +.el-input { + width: 100% !important; +} +.el-date-editor::v-deep { + width: 100%; +} +.el-select { + width: 100%; +} </style> diff --git a/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue b/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue index 45800d3..c789039 100644 --- a/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue @@ -1,626 +1,587 @@ <template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <el-col :span="8"> - <div class="grid-content topInfo"> - <el-input v-model="searchWord" placeholder="时间策略名称"></el-input> - <el-button type="primary" @click="searchRecord">查询</el-button> - <el-button plain @click="clearSearch">重置</el-button> - </div> - </el-col> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> -<!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> - <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> - </el-col> - <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()"/> - </el-row> - <el-table - ref="multipleTableRef" - :data="tableData" - style="width: 100%" - height="calc(100% - 100px)" - :header-cell-style="{background: '#fafafa'}" - @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="100" /> - <el-table-column property="name" label="时间策略名称"/> - <el-table-column property="workList" label="关联工作时间组"/> - <el-table-column property="restList" label="关联休息时间组"/> - <el-table-column property="info" label="描述信息"/> - <el-table-column fixed="right" label="操作" align="center" width="250"> - <template #default="scope"> - <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> - <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index ,scope.row)">修改</el-button> - <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination - v-model:currentPage="pageIndex" - v-model:page-size="pageSize" - :page-sizes="[10, 15]" - small=false - background - layout="total, sizes, prev, pager, next, jumper" - :total="totalSize" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> - </div> - </div> - </div> - <el-dialog v-model="dialogDetails" title="时间策略"> - <el-form :model="details" label-width="120px"> - <el-form-item label="策略名称"> - <el-input - v-model="details.name" - readonly - /> - </el-form-item> - <el-form-item label="关联工作时间组"> - <el-input - v-model="details.workList" - readonly - /> - </el-form-item> - <el-form-item label="关联休息时间组"> - <el-input - v-model="details.restList" - readonly - /> - </el-form-item> - <el-form-item label="描述信息" v-if="details.info"> - <el-input - v-model="details.info" - type="textarea" - readonly - /> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="dialogAddRecord" title="时间策略编辑" @close="closeAdd" @open="openAdd"> - <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="策略名称" prop="name"> - <el-input - v-model="addRecord.name" - > - </el-input> - </el-form-item> - <el-form-item label="关联工作时间组" prop="workList"> - <el-select v-model="addRecord.workList"> - <el-option v-for="(item,index) in workTimeList" :key="index" :label="item.name" :value="item.id" /> - </el-select> - </el-form-item> - <el-form-item label="关联休息时间组" prop="restList"> - <el-select v-model="addRecord.restList"> - <el-option v-for="(item,index) in restTimeList" :key="index" :label="item.name" :value="item.id" /> - </el-select> - </el-form-item> - <el-form-item label="描述信息" prop="info"> - <el-input - v-model="addRecord.info" - type="textarea" - > - </el-input> - </el-form-item> - <el-form-item> - <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> - <span>您确定要删除该条记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - </span> - </template> - </el-dialog> - <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> - <span>您确定要删除这些记录吗?</span> - <template #footer> + <div class="home-container"> + <div style="height: 100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="时间策略名称"></el-input> + <el-button type="primary" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <div class="main-card"> + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" /> + </el-row> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="100" /> + <el-table-column property="name" label="时间策略名称" /> + <el-table-column property="workList" label="关联工作时间组" /> + <el-table-column property="restList" label="关联休息时间组" /> + <el-table-column property="info" label="描述信息" /> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index, scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination v-model:currentPage="pageIndex" v-model:page-size="pageSize" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> + </div> + </div> + </div> + </div> + <el-dialog v-model="dialogDetails" title="时间策略"> + <el-form :model="details" label-width="120px"> + <el-form-item label="策略名称"> + <el-input v-model="details.name" readonly /> + </el-form-item> + <el-form-item label="关联工作时间组"> + <el-input v-model="details.workList" readonly /> + </el-form-item> + <el-form-item label="关联休息时间组"> + <el-input v-model="details.restList" readonly /> + </el-form-item> + <el-form-item label="描述信息" v-if="details.info"> + <el-input v-model="details.info" type="textarea" readonly /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="时间策略编辑" @close="closeAdd" @open="openAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="策略名称" prop="name"> + <el-input v-model="addRecord.name"> </el-input> + </el-form-item> + <el-form-item label="关联工作时间组" prop="workList"> + <el-select v-model="addRecord.workList"> + <el-option v-for="(item, index) in workTimeList" :key="index" :label="item.name" :value="item.id" /> + </el-select> + </el-form-item> + <el-form-item label="关联休息时间组" prop="restList"> + <el-select v-model="addRecord.restList"> + <el-option v-for="(item, index) in restTimeList" :key="index" :label="item.name" :value="item.id" /> + </el-select> + </el-form-item> + <el-form-item label="描述信息" prop="info"> + <el-input v-model="addRecord.info" type="textarea"> </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> + <span>您确定要删除这些记录吗?</span> + <template #footer> <span class="dialog-footer"> <el-button @click="deleteSetDialog = false" size="default">取消</el-button> <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button> </span> - </template> - </el-dialog> - </div> + </template> + </el-dialog> + </div> </template> <script lang="ts"> - import { toRefs, reactive, ref, onMounted } from 'vue'; - import { storeToRefs } from 'pinia'; - import { initBackEndControlRoutes } from '/@/router/backEnd'; - import {useUserInfo} from "/@/stores/userInfo"; - import { Session } from '/@/utils/storage'; - import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' - import { ElTable } from 'element-plus' - import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { timeStrategyApi } from '/@/api/basicDateManage/personShiftManage/timeStrategy'; +import { toRefs, reactive, ref, onMounted } from 'vue'; +import { storeToRefs } from 'pinia'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { Session } from '/@/utils/storage'; +import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; +import { ElTable } from 'element-plus'; +import { FormInstance, FormRules, ElMessage } from 'element-plus'; +import { timeStrategyApi } from '/@/api/systemManage/basicDateManage/personShiftManage/timeStrategy'; +// 定义接口来定义对象的类型 +interface stateType { + tableData: Array<string>; + workTimeList: Array<string>; + restTimeList: Array<string>; + multipleSelection: Array<any>; + deleteArr: Array<any>; + dialogDetails: boolean; + dialogAddRecord: boolean; + deleteDialog: boolean; + deleteSetDialog: boolean; + pageIndex: number; + pageSize: number; + chosenIndex: null | number; + deleteId: null | number; + searchWord: string; + totalSize: number; + addRecord: { + name: string; + workList: string; + restList: string; + info: string; + }; + details: { + name: string; + workList: string; + restList: string; + info: string; + }; +} - // 定义接口来定义对象的类型 - interface stateType { - tableData: Array<string>, - workTimeList: Array<string>, - restTimeList: Array<string>, - multipleSelection: Array<any>, - deleteArr: Array<any>, - dialogDetails: boolean, - dialogAddRecord: boolean, - deleteDialog: boolean, - deleteSetDialog: boolean; - pageIndex: number, - pageSize: number, - chosenIndex: null | number, - deleteId: null | number, - searchWord: string, - totalSize: number, - addRecord: { - name: string, - workList: string, - restList: string, - info: string - }, - details: { - name: string, - workList: string, - restList: string, - info: string - } - } - - export default { +export default { name: 'workingHours', - components:{}, + components: {}, setup() { - const userInfo = useUserInfo() - const {userInfos} = storeToRefs(userInfo); + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); - const state = reactive<stateType>({ - pageIndex: 1, - pageSize: 10, - totalSize: 0, - chosenIndex: null, - searchWord: '', - tableData: [], - workTimeList: [], - restTimeList: [], - multipleSelection: [], - dialogDetails: false, - dialogAddRecord: false, - deleteDialog: false, - deleteSetDialog: false, - addRecord: { - name: '', - workList: '', - restList: '', - info: '' - }, - details: { - name: '', - workList: '', - restList: '', - info: '' - }, - deleteId: null, - deleteArr: [] - }) - interface User { - name: string, - workList: string, - restList: string, - info: string - } - const multipleTableRef = ref<InstanceType<typeof ElTable>>() - const toggleSelection = (rows?: User[]) => { - if (rows) { - rows.forEach((row) => { - // TODO: improvement typing when refactor table - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - multipleTableRef.value!.toggleRowSelection(row, undefined) - }) - } else { - multipleTableRef.value!.clearSelection() - } - } + const state = reactive<stateType>({ + pageIndex: 1, + pageSize: 10, + totalSize: 0, + chosenIndex: null, + searchWord: '', + tableData: [], + workTimeList: [], + restTimeList: [], + multipleSelection: [], + dialogDetails: false, + dialogAddRecord: false, + deleteDialog: false, + deleteSetDialog: false, + addRecord: { + name: '', + workList: '', + restList: '', + info: '' + }, + details: { + name: '', + workList: '', + restList: '', + info: '' + }, + deleteId: null, + deleteArr: [] + }); + interface User { + name: string; + workList: string; + restList: string; + info: string; + } + const multipleTableRef = ref<InstanceType<typeof ElTable>>(); + const toggleSelection = (rows?: User[]) => { + if (rows) { + rows.forEach((row) => { + // TODO: improvement typing when refactor table + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + multipleTableRef.value!.toggleRowSelection(row, undefined); + }); + } else { + multipleTableRef.value!.clearSelection(); + } + }; - // 多选 - const handleSelectionChange = (val: User[]) => { - state.multipleSelection = JSON.parse(JSON.stringify(val)) - state.deleteArr = state.multipleSelection.map((item)=>{ - item = item.id - return item - }) - } + // 多选 + const handleSelectionChange = (val: User[]) => { + state.multipleSelection = JSON.parse(JSON.stringify(val)); + state.deleteArr = state.multipleSelection.map((item) => { + item = item.id; + return item; + }); + }; - const addRef = ref<FormInstance>() - const addRules = reactive<FormRules>({ - name: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - workList: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - restList: [{required: true, message: '该内容不能为空', trigger: 'blur'}] - }) + const addRef = ref<FormInstance>(); + const addRules = reactive<FormRules>({ + name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workList: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + restList: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); - // 页面载入时执行方法 - onMounted(() => { - getListByPage() - getWorkTimeList() - getRestTimeList() - }) + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + getWorkTimeList(); + getRestTimeList(); + }); - // 分页获取休息时间组列表 - const getListByPage = async ()=>{ - const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}} - let res = await timeStrategyApi().getRecordPage(data); - if (res.data.code === '200') { - state.tableData = res.data.data.map((item)=>{ - // if(item.workTimeGroupRespDTO == null || item.workTimeGroupRespDTO.list == []){ - // item.workList = [] - // }else{ - // item.workList= Array.from(item.workTimeGroupRespDTO.list,({workTimeGroupId})=>workTimeGroupId) - // } - // if(item.breakTimeGroupRespDTO == null || item.breakTimeGroupRespDTO.list == []){ - // item.restList = [] - // }else{ - // item.restList= Array.from(item.breakTimeGroupRespDTO.list,({breakTimeGroupId})=>breakTimeGroupId) - // } - if(item.workTimeGroupRespDTO == null){ - item.workList = '' - }else{ - item.workList= item.workTimeGroupRespDTO.name - } - if(item.breakTimeGroupRespDTO == null){ - item.restList = '' - }else{ - item.restList= item.breakTimeGroupRespDTO.name - } - return item - }) - console.log(state.tableData,'state.tableData') - state.totalSize = res.data.total - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // 分页获取休息时间组列表 + const getListByPage = async () => { + const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { name: state.searchWord } }; + let res = await timeStrategyApi().getRecordPage(data); + if (res.data.code === '200') { + state.tableData = res.data.data.map((item) => { + // if(item.workTimeGroupRespDTO == null || item.workTimeGroupRespDTO.list == []){ + // item.workList = [] + // }else{ + // item.workList= Array.from(item.workTimeGroupRespDTO.list,({workTimeGroupId})=>workTimeGroupId) + // } + // if(item.breakTimeGroupRespDTO == null || item.breakTimeGroupRespDTO.list == []){ + // item.restList = [] + // }else{ + // item.restList= Array.from(item.breakTimeGroupRespDTO.list,({breakTimeGroupId})=>breakTimeGroupId) + // } + if (item.workTimeGroupRespDTO == null) { + item.workList = ''; + } else { + item.workList = item.workTimeGroupRespDTO.name; + } + if (item.breakTimeGroupRespDTO == null) { + item.restList = ''; + } else { + item.restList = item.breakTimeGroupRespDTO.name; + } + return item; + }); + console.log(state.tableData, 'state.tableData'); + state.totalSize = res.data.total; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 获取工作时间组列表 - const getWorkTimeList = async () => { - let res = await timeStrategyApi().getWorkTimeList(); - if (res.data.code === '200') { - state.workTimeList = res.data.data - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // 获取工作时间组列表 + const getWorkTimeList = async () => { + let res = await timeStrategyApi().getWorkTimeList(); + if (res.data.code === '200') { + state.workTimeList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 获取休息时间组列表 - const getRestTimeList = async () => { - let res = await timeStrategyApi().getRestTimeList(); - if (res.data.code === '200') { - state.restTimeList = res.data.data - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // 获取休息时间组列表 + const getRestTimeList = async () => { + let res = await timeStrategyApi().getRestTimeList(); + if (res.data.code === '200') { + state.restTimeList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 关键词查询记录 - const searchRecord = async()=>{ - if(state.searchWord==''){ - ElMessage({ - type: 'warning', - message: '请输入查询关键词' - }); - }else{ - getListByPage() - } - } + // 关键词查询记录 + const searchRecord = async () => { + if (state.searchWord == '') { + ElMessage({ + type: 'warning', + message: '请输入查询关键词' + }); + } else { + getListByPage(); + } + }; - const clearSearch = async()=>{ - state.searchWord='' - getListByPage() - } + const clearSearch = async () => { + state.searchWord = ''; + getListByPage(); + }; - // 添加工作时段方法 - const addRecord = async (data:any) => { - let res = await timeStrategyApi().addRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; + // 添加工作时段方法 + const addRecord = async (data: any) => { + let res = await timeStrategyApi().addRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 修改工作时段方法 - const editRecord = async (data:any) => { - let res = await timeStrategyApi().updateRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // 修改工作时段方法 + const editRecord = async (data: any) => { + let res = await timeStrategyApi().updateRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 新增修改记录 - const confirmAddRecord = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate(async (valid, fields) => { - if (valid) { - const data = { - name: state.addRecord.name, - info: state.addRecord.info, - workTimeGroupId: state.addRecord.workList, - breakTimeGroupId: state.addRecord.restList - } - if (state.chosenIndex == null) { - await addRecord(data) - } else { - data.id = JSON.stringify(state.addRecord.id) - if(typeof state.addRecord.workList == 'string'){ - data.workTimeGroupId = state.addRecord.workTimeGroupId - } - if(typeof state.addRecord.restList == 'string'){ - data.breakTimeGroupId = state.addRecord.breakTimeGroupId - } - await editRecord(data) - } - state.dialogAddRecord = false - } else { - console.log('error submit!', fields) - } - }) + // 新增修改记录 + const confirmAddRecord = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate(async (valid, fields) => { + if (valid) { + const data = { + name: state.addRecord.name, + info: state.addRecord.info, + workTimeGroupId: state.addRecord.workList, + breakTimeGroupId: state.addRecord.restList + }; + if (state.chosenIndex == null) { + await addRecord(data); + } else { + data.id = JSON.stringify(state.addRecord.id); + if (typeof state.addRecord.workList == 'string') { + data.workTimeGroupId = state.addRecord.workTimeGroupId; + } + if (typeof state.addRecord.restList == 'string') { + data.breakTimeGroupId = state.addRecord.breakTimeGroupId; + } + await editRecord(data); + } + state.dialogAddRecord = false; + } else { + console.log('error submit!', fields); + } + }); + }; - } + // 删除工作时间组方法 + const deleteRecord = async (data: any) => { + let res = await timeStrategyApi().deleteRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 删除工作时间组方法 - const deleteRecord = async (data:any) => { - let res = await timeStrategyApi().deleteRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + const deleteRecordBtn = (row) => { + state.deleteId = row.id; + state.deleteDialog = true; + }; - const deleteRecordBtn = (row) => { - state.deleteId = row.id - state.deleteDialog = true - } + const conFirmDelete = () => { + deleteRecord({ id: state.deleteId }); + state.deleteDialog = false; + }; - const conFirmDelete = () => { - deleteRecord({ id: state.deleteId }) - state.deleteDialog = false - } + // 批量删除 + const deleteBatchBtn = async () => { + if (state.deleteArr.length > 0) { + state.deleteSetDialog = true; + } else { + ElMessage({ + type: 'warning', + message: '请先选择要删除的记录' + }); + } + }; - // 批量删除 - const deleteBatchBtn = async () => { - if (state.deleteArr.length > 0) { - state.deleteSetDialog = true - } else { - ElMessage({ - type: 'warning', - message: '请先选择要删除的记录' - }); - } - }; + const conFirmDeleteBatch = async () => { + let res = await timeStrategyApi().deletBatchRecord({ ids: state.deleteArr }); + if (res.data.code === '200') { + state.deleteSetDialog = false; + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.deleteSetDialog = false; + } + }; - const conFirmDeleteBatch = async () => { - let res = await timeStrategyApi().deletBatchRecord({ids: state.deleteArr}); - if (res.data.code === '200') { - state.deleteSetDialog = false - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - state.deleteSetDialog = false - } - } + const handleSizeChange = (val: number) => { + state.pageSize = val; + getListByPage(); + }; + const handleCurrentChange = (val: number) => { + state.pageIndex = val; + getListByPage(); + }; - const handleSizeChange = (val: number) => { - state.pageSize = val - getListByPage() - } - const handleCurrentChange = (val: number) => { - state.pageIndex = val - getListByPage() - } + // 查看记录 + const viewRecord = (row) => { + state.details = JSON.parse(JSON.stringify(row)); + state.dialogDetails = true; + }; - // 查看记录 - const viewRecord = (row) => { - state.details = JSON.parse(JSON.stringify(row)) - state.dialogDetails = true - } + // 刷新 + const reLoadData = async () => { + getListByPage(); + }; + // 点击修改 + const editRecordBtn = (index, row) => { + state.dialogAddRecord = true; + state.chosenIndex = index; + state.addRecord = JSON.parse(JSON.stringify(row)); + console.log(state.addRecord, 'state.addRecord'); + }; + const closeAdd = () => { + state.addRecord = {}; + state.chosenIndex = null; + }; + const openAdd = () => { + if (state.chosenIndex == null) { + state.addRecord.info = ''; + } + }; + const indexClear = () => { + state.deleteId = null; + }; - // 刷新 - const reLoadData = async () =>{ - getListByPage() - } - // 点击修改 - const editRecordBtn = (index, row) => { - state.dialogAddRecord = true - state.chosenIndex = index - state.addRecord = JSON.parse(JSON.stringify(row)) - console.log(state.addRecord,'state.addRecord') - } - const closeAdd = () => { - state.addRecord = {} - state.chosenIndex = null - } - const openAdd = () => { - if (state.chosenIndex == null) { - state.addRecord.info = '' - } - } - const indexClear = () => { - state.deleteId = null - } - - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId', value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - addRef, - addRules, - View, - Edit, - Delete, - Refresh, - Plus, - toggleSelection, - handleSelectionChange, - searchRecord, - clearSearch, - viewRecord, - deleteRecordBtn, - conFirmDelete, - getListByPage, - getWorkTimeList, - getRestTimeList, - reLoadData, - deleteRecord, - deleteBatchBtn, - conFirmDeleteBatch, - handleSizeChange, - handleCurrentChange, - confirmAddRecord, - closeAdd, - openAdd, - indexClear, - editRecordBtn, - ...toRefs(state) - }; - } - } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; + return { + addRef, + addRules, + View, + Edit, + Delete, + Refresh, + Plus, + toggleSelection, + handleSelectionChange, + searchRecord, + clearSearch, + viewRecord, + deleteRecordBtn, + conFirmDelete, + getListByPage, + getWorkTimeList, + getRestTimeList, + reLoadData, + deleteRecord, + deleteBatchBtn, + conFirmDeleteBatch, + handleSizeChange, + handleCurrentChange, + confirmAddRecord, + closeAdd, + openAdd, + indexClear, + editRecordBtn, + ...toRefs(state) + }; + } +}; </script> <style scoped lang="scss"> - $homeNavLengh: 8; - .home-container { - height: calc(100vh - 114px); - box-sizing: border-box; - overflow: hidden; - .homeCard{ - width: 100%; - padding: 20px; - box-sizing: border-box; - background: #fff; - border-radius: 4px; +$homeNavLengh: 8; +.home-container { + height: calc(100vh - 114px); + box-sizing: border-box; + overflow: hidden; + .homeCard { + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; - .main-card{ - width: 100%; - height: 100%; - .cardTop{ - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; - .mainCardBtn{ - margin: 0; - } - } - .pageBtn{ - height: 60px; - display: flex; - align-items: center; - justify-content: right; + .main-card { + width: 100%; + height: 100%; + .cardTop { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn { + margin: 0; + } + } + .pageBtn { + height: 60px; + display: flex; + align-items: center; + justify-content: right; - .demo-pagination-block + .demo-pagination-block { - margin-top: 10px; - } - .demo-pagination-block .demonstration { - margin-bottom: 16px; - } - } - } - &:last-of-type{ - height: calc(100% - 100px); - } - } - .el-row{ - display: flex; - align-items: center; - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - .grid-content{ - align-items: center; - min-height: 36px; - } + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type { + height: calc(100% - 100px); + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } - .topInfo { - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; - &>div{ - white-space: nowrap; - margin-right: 20px; - } - } - } - } - .el-input{ - width: 100% !important; - } - .el-date-editor::v-deep{ - width: 100%; - } - .el-select{ - width: 100%; - } + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } +} +.el-input { + width: 100% !important; +} +.el-date-editor::v-deep { + width: 100%; +} +.el-select { + width: 100%; +} </style> diff --git a/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue b/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue index 160f8d3..d9e62c5 100644 --- a/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue +++ b/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue @@ -1,600 +1,563 @@ <template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <el-col :span="8"> - <div class="grid-content topInfo"> - <el-input v-model="searchWord" placeholder="休息时间组名称"></el-input> - <el-button type="primary" @click="searchRecord">查询</el-button> - <el-button plain @click="clearSearch">重置</el-button> - </div> - </el-col> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> -<!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> - <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> - </el-col> - <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()"/> - </el-row> - <el-table - ref="multipleTableRef" - :data="tableData" - style="width: 100%" - height="calc(100% - 100px)" - :header-cell-style="{background: '#fafafa'}" - @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="100" /> - <el-table-column property="name" label="工作时间组名称"/> - <el-table-column property="list" :formatter="toNames" label="关联工作时段"/> - <el-table-column property="info" label="描述信息"/> - <el-table-column fixed="right" label="操作" align="center" width="250"> - <template #default="scope"> - <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> - <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index ,scope.row)">修改</el-button> - <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination - v-model:currentPage="pageIndex" - v-model:page-size="pageSize" - :page-sizes="[10, 15]" - small=false - background - layout="total, sizes, prev, pager, next, jumper" - :total="totalSize" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> - </div> - </div> - </div> - <el-dialog v-model="dialogDetails" title="工作时间组"> - <el-form :model="details" label-width="120px"> - <el-form-item label="时间组名称"> - <el-input - v-model="details.name" - readonly - /> - </el-form-item> - <el-form-item label="关联工作时段" v-if="details.list.length>0"> - <el-input - v-model="details.list" - readonly - /> - </el-form-item> - <el-form-item label="描述信息" v-if="details.info"> - <el-input - v-model="details.info" - type="textarea" - readonly - /> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="dialogAddRecord" title="工作时间组编辑" @close="closeAdd" @open="openAdd"> - <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="时间组名称" prop="name"> - <el-input - v-model="addRecord.name" - > - </el-input> - </el-form-item> - <el-form-item label="关联工作时段" prop="list"> - <el-select v-model="addRecord.list" multiple> - <el-option v-for="(item,index) in workTimeList" :key="index" :label="item.name" :value="item.id" /> - </el-select> - </el-form-item> - <el-form-item label="描述信息" prop="info"> - <el-input - v-model="addRecord.info" - type="textarea" - > - </el-input> - </el-form-item> - <el-form-item> - <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> - <span>您确定要删除该条记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - </span> - </template> - </el-dialog> - <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> - <span>您确定要删除这些记录吗?</span> - <template #footer> + <div class="home-container"> + <div style="height: 100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="休息时间组名称"></el-input> + <el-button type="primary" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <div class="main-card"> + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" /> + </el-row> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="100" /> + <el-table-column property="name" label="工作时间组名称" /> + <el-table-column property="list" :formatter="toNames" label="关联工作时段" /> + <el-table-column property="info" label="描述信息" /> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index, scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination v-model:currentPage="pageIndex" v-model:page-size="pageSize" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> + </div> + </div> + </div> + </div> + <el-dialog v-model="dialogDetails" title="工作时间组"> + <el-form :model="details" label-width="120px"> + <el-form-item label="时间组名称"> + <el-input v-model="details.name" readonly /> + </el-form-item> + <el-form-item label="关联工作时段" v-if="details.list.length > 0"> + <el-input v-model="details.list" readonly /> + </el-form-item> + <el-form-item label="描述信息" v-if="details.info"> + <el-input v-model="details.info" type="textarea" readonly /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="工作时间组编辑" @close="closeAdd" @open="openAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="时间组名称" prop="name"> + <el-input v-model="addRecord.name"> </el-input> + </el-form-item> + <el-form-item label="关联工作时段" prop="list"> + <el-select v-model="addRecord.list" multiple> + <el-option v-for="(item, index) in workTimeList" :key="index" :label="item.name" :value="item.id" /> + </el-select> + </el-form-item> + <el-form-item label="描述信息" prop="info"> + <el-input v-model="addRecord.info" type="textarea"> </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> + <span>您确定要删除这些记录吗?</span> + <template #footer> <span class="dialog-footer"> <el-button @click="deleteSetDialog = false" size="default">取消</el-button> <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button> </span> - </template> - </el-dialog> - </div> + </template> + </el-dialog> + </div> </template> <script lang="ts"> - import { toRefs, reactive, ref, onMounted } from 'vue'; - import { storeToRefs } from 'pinia'; - import { initBackEndControlRoutes } from '/@/router/backEnd'; - import {useUserInfo} from "/@/stores/userInfo"; - import { Session } from '/@/utils/storage'; - import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' - import { ElTable } from 'element-plus' - import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { workingHoursSetApi } from '/@/api/basicDateManage/personShiftManage/workingHoursSet'; - import { workingHoursApi } from '/@/api/basicDateManage/personShiftManage/workingHours'; +import { toRefs, reactive, ref, onMounted } from 'vue'; +import { storeToRefs } from 'pinia'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { Session } from '/@/utils/storage'; +import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; +import { ElTable } from 'element-plus'; +import { FormInstance, FormRules, ElMessage } from 'element-plus'; +import { workingHoursSetApi } from '/@/api/systemManage/basicDateManage/personShiftManage/workingHoursSet'; +import { workingHoursApi } from '/@/api/systemManage/basicDateManage/personShiftManage/workingHours'; +// 定义接口来定义对象的类型 +interface stateType { + tableData: Array<string>; + workTimeList: Array<string>; + multipleSelection: Array<any>; + deleteArr: Array<any>; + dialogDetails: boolean; + dialogAddRecord: boolean; + deleteDialog: boolean; + deleteSetDialog: boolean; + pageIndex: number; + pageSize: number; + chosenIndex: null | number; + deleteId: null | number; + searchWord: string; + totalSize: number; + addRecord: { + name: string; + list: Array<any>; + info: string; + }; + details: { + name: string; + list: Array<any>; + info: string; + }; +} - // 定义接口来定义对象的类型 - interface stateType { - tableData: Array<string>, - workTimeList: Array<string>, - multipleSelection: Array<any>, - deleteArr: Array<any>, - dialogDetails: boolean, - dialogAddRecord: boolean, - deleteDialog: boolean, - deleteSetDialog: boolean; - pageIndex: number, - pageSize: number, - chosenIndex: null | number, - deleteId: null | number, - searchWord: string, - totalSize: number, - addRecord: { - name: string, - list: Array<any>, - info: string - }, - details: { - name: string, - list: Array<any>, - info: string - } - } - - export default { +export default { name: 'workingHours', - components:{}, + components: {}, setup() { - const userInfo = useUserInfo() - const {userInfos} = storeToRefs(userInfo); + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); - const state = reactive<stateType>({ - pageIndex: 1, - pageSize: 10, - totalSize: 0, - chosenIndex: null, - searchWord: '', - tableData: [], - workTimeList: [], - multipleSelection: [], - dialogDetails: false, - dialogAddRecord: false, - deleteDialog: false, - deleteSetDialog: false, - addRecord: { - name: '', - list: [], - info: '' - }, - details: { - name: '', - list: [], - info: '' - }, - deleteId: null, - deleteArr: [] - }) - interface User { - name: string, - list: [], - info: string - } - const multipleTableRef = ref<InstanceType<typeof ElTable>>() - const toggleSelection = (rows?: User[]) => { - if (rows) { - rows.forEach((row) => { - // TODO: improvement typing when refactor table - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - multipleTableRef.value!.toggleRowSelection(row, undefined) - }) - } else { - multipleTableRef.value!.clearSelection() - } - } + const state = reactive<stateType>({ + pageIndex: 1, + pageSize: 10, + totalSize: 0, + chosenIndex: null, + searchWord: '', + tableData: [], + workTimeList: [], + multipleSelection: [], + dialogDetails: false, + dialogAddRecord: false, + deleteDialog: false, + deleteSetDialog: false, + addRecord: { + name: '', + list: [], + info: '' + }, + details: { + name: '', + list: [], + info: '' + }, + deleteId: null, + deleteArr: [] + }); + interface User { + name: string; + list: []; + info: string; + } + const multipleTableRef = ref<InstanceType<typeof ElTable>>(); + const toggleSelection = (rows?: User[]) => { + if (rows) { + rows.forEach((row) => { + // TODO: improvement typing when refactor table + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + multipleTableRef.value!.toggleRowSelection(row, undefined); + }); + } else { + multipleTableRef.value!.clearSelection(); + } + }; - // 多选 - const handleSelectionChange = (val: User[]) => { - state.multipleSelection = JSON.parse(JSON.stringify(val)) - state.deleteArr = state.multipleSelection.map((item)=>{ - item = item.id - return item - }) - } + // 多选 + const handleSelectionChange = (val: User[]) => { + state.multipleSelection = JSON.parse(JSON.stringify(val)); + state.deleteArr = state.multipleSelection.map((item) => { + item = item.id; + return item; + }); + }; - const addRef = ref<FormInstance>() - const addRules = reactive<FormRules>({ - name: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - list: [{required: true, message: '该内容不能为空', trigger: 'blur'}] - }) + const addRef = ref<FormInstance>(); + const addRules = reactive<FormRules>({ + name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + list: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); - // 页面载入时执行方法 - onMounted(() => { - getListByPage() - getWorkTimePeriod() - }) + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + getWorkTimePeriod(); + }); - // 分页获取工作时间组列表 - const getListByPage = async ()=>{ - const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord}} - let res = await workingHoursSetApi().postWorkTimeGroupPage(data); - if (res.data.code === '200') { - state.tableData = res.data.data.map((item)=>{ - if(item.list == null){ - item.list = [] - }else{ - item.list= Array.from(item.list,({workTimePeriodId})=>workTimePeriodId) - } - return item - }) - state.totalSize = res.data.total - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // 分页获取工作时间组列表 + const getListByPage = async () => { + const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { name: state.searchWord } }; + let res = await workingHoursSetApi().postWorkTimeGroupPage(data); + if (res.data.code === '200') { + state.tableData = res.data.data.map((item) => { + if (item.list == null) { + item.list = []; + } else { + item.list = Array.from(item.list, ({ workTimePeriodId }) => workTimePeriodId); + } + return item; + }); + state.totalSize = res.data.total; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 表格数据格式化 - const toNames =(row, column, cellValue, index) => { - if(row.list==[]){ - return [] - }else{ - const nameList = [] - for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.workTimeList.length;t++){ - if(row.list[i]==state.workTimeList[t].id){ - nameList.push(state.workTimeList[t].name) - } - } - } - return nameList.join() - } - } + // 表格数据格式化 + const toNames = (row, column, cellValue, index) => { + if (row.list == []) { + return []; + } else { + const nameList = []; + for (let i = 0; i < row.list.length; i++) { + for (let t = 0; t < state.workTimeList.length; t++) { + if (row.list[i] == state.workTimeList[t].id) { + nameList.push(state.workTimeList[t].name); + } + } + } + return nameList.join(); + } + }; - // 获取工作时段列表 - const getWorkTimePeriod = async () => { - let res = await workingHoursApi().getWorkTimePeriod(); - if (res.data.code === '200') { - state.workTimeList = res.data.data - console.log(state.workTimeList,'list') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // 获取工作时段列表 + const getWorkTimePeriod = async () => { + let res = await workingHoursApi().getWorkTimePeriod(); + if (res.data.code === '200') { + state.workTimeList = res.data.data; + console.log(state.workTimeList, 'list'); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 关键词查询记录 - const searchRecord = async()=>{ - if(state.searchWord==''){ - ElMessage({ - type: 'warning', - message: '请输入查询关键词' - }); - }else{ - getListByPage() - } - } + // 关键词查询记录 + const searchRecord = async () => { + if (state.searchWord == '') { + ElMessage({ + type: 'warning', + message: '请输入查询关键词' + }); + } else { + getListByPage(); + } + }; - const clearSearch = async()=>{ - state.searchWord='' - getListByPage() - } + const clearSearch = async () => { + state.searchWord = ''; + getListByPage(); + }; - // 添加工作时段方法 - const addRecord = async (data:any) => { - let res = await workingHoursSetApi().addWorkTimeGroup(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; + // 添加工作时段方法 + const addRecord = async (data: any) => { + let res = await workingHoursSetApi().addWorkTimeGroup(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 修改工作时段方法 - const editRecord = async (data:any) => { - let res = await workingHoursSetApi().updateWorkTimeGroup(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + // 修改工作时段方法 + const editRecord = async (data: any) => { + let res = await workingHoursSetApi().updateWorkTimeGroup(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 新增修改记录 - const confirmAddRecord = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate(async (valid, fields) => { - if (valid) { - const data = { - name: state.addRecord.name, - info: state.addRecord.info, - workTimePeriodIds: state.addRecord.list - } - if (state.chosenIndex == null) { - await addRecord(data) - } else { - data.id = JSON.stringify(state.addRecord.id), - console.log(data,'修改参数') - await editRecord(data) - } - state.dialogAddRecord = false - } else { - console.log('error submit!', fields) - } - }) + // 新增修改记录 + const confirmAddRecord = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate(async (valid, fields) => { + if (valid) { + const data = { + name: state.addRecord.name, + info: state.addRecord.info, + workTimePeriodIds: state.addRecord.list + }; + if (state.chosenIndex == null) { + await addRecord(data); + } else { + (data.id = JSON.stringify(state.addRecord.id)), console.log(data, '修改参数'); + await editRecord(data); + } + state.dialogAddRecord = false; + } else { + console.log('error submit!', fields); + } + }); + }; - } + // 删除工作时间组方法 + const deleteRecord = async (data: any) => { + let res = await workingHoursSetApi().deleteWorkTimeGroup(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 删除工作时间组方法 - const deleteRecord = async (data:any) => { - let res = await workingHoursSetApi().deleteWorkTimeGroup(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + const deleteRecordBtn = (row) => { + state.deleteId = row.id; + state.deleteDialog = true; + }; - const deleteRecordBtn = (row) => { - state.deleteId = row.id - state.deleteDialog = true - } + const conFirmDelete = () => { + deleteRecord({ id: state.deleteId }); + state.deleteDialog = false; + }; - const conFirmDelete = () => { - deleteRecord({ id: state.deleteId }) - state.deleteDialog = false - } + // 批量删除 + const deleteBatchBtn = async () => { + if (state.deleteArr.length > 0) { + state.deleteSetDialog = true; + } else { + ElMessage({ + type: 'warning', + message: '请先选择要删除的记录' + }); + } + }; - // 批量删除 - const deleteBatchBtn = async () => { - if (state.deleteArr.length > 0) { - state.deleteSetDialog = true - } else { - ElMessage({ - type: 'warning', - message: '请先选择要删除的记录' - }); - } - }; + const conFirmDeleteBatch = async () => { + let res = await workingHoursSetApi().deletBatchWorkTimeGroup({ ids: state.deleteArr }); + if (res.data.code === '200') { + state.deleteSetDialog = false; + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.deleteSetDialog = false; + } + }; - const conFirmDeleteBatch = async () => { - let res = await workingHoursSetApi().deletBatchWorkTimeGroup({ids: state.deleteArr}); - if (res.data.code === '200') { - state.deleteSetDialog = false - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - state.deleteSetDialog = false - } - } + const handleSizeChange = (val: number) => { + state.pageSize = val; + getListByPage(); + }; + const handleCurrentChange = (val: number) => { + state.pageIndex = val; + getListByPage(); + }; - const handleSizeChange = (val: number) => { - state.pageSize = val - getListByPage() - } - const handleCurrentChange = (val: number) => { - state.pageIndex = val - getListByPage() - } + // 查看记录 + const viewRecord = (row) => { + state.details = JSON.parse(JSON.stringify(row)); + if (row.list == []) { + state.details.list = []; + } else { + state.details.list = []; + for (let i = 0; i < row.list.length; i++) { + for (let t = 0; t < state.workTimeList.length; t++) { + if (row.list[i] == state.workTimeList[t].id) { + state.details.list.push(state.workTimeList[t].name); + } + } + } + } + state.dialogDetails = true; + }; - // 查看记录 - const viewRecord = (row) => { - state.details = JSON.parse(JSON.stringify(row)) - if(row.list==[]){ - state.details.list = [] - }else{ - state.details.list = [] - for(let i=0;i<row.list.length;i++){ - for(let t=0;t<state.workTimeList.length;t++){ - if(row.list[i]==state.workTimeList[t].id){ - state.details.list.push(state.workTimeList[t].name) - } - } - } - } - state.dialogDetails = true - } + // 刷新 + const reLoadData = async () => { + getListByPage(); + }; + // 点击修改 + const editRecordBtn = (index, row) => { + state.dialogAddRecord = true; + state.chosenIndex = index; + state.addRecord = JSON.parse(JSON.stringify(row)); + }; + const closeAdd = () => { + state.addRecord = {}; + state.chosenIndex = null; + }; + const openAdd = () => { + if (state.chosenIndex == null) { + state.addRecord.info = ''; + } + }; + const indexClear = () => { + state.deleteId = null; + }; - // 刷新 - const reLoadData = async () =>{ - getListByPage() - } - // 点击修改 - const editRecordBtn = (index, row) => { - state.dialogAddRecord = true - state.chosenIndex = index - state.addRecord = JSON.parse(JSON.stringify(row)) - } - const closeAdd = () => { - state.addRecord = {} - state.chosenIndex = null - } - const openAdd = () => { - if (state.chosenIndex == null) { - state.addRecord.info = '' - } - } - const indexClear = () => { - state.deleteId = null - } - - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId', value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - addRef, - addRules, - View, - Edit, - Delete, - Refresh, - Plus, - toNames, - toggleSelection, - handleSelectionChange, - searchRecord, - clearSearch, - viewRecord, - deleteRecordBtn, - conFirmDelete, - getListByPage, - getWorkTimePeriod, - reLoadData, - deleteRecord, - deleteBatchBtn, - conFirmDeleteBatch, - handleSizeChange, - handleCurrentChange, - confirmAddRecord, - closeAdd, - openAdd, - indexClear, - editRecordBtn, - ...toRefs(state) - }; - } - } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; + return { + addRef, + addRules, + View, + Edit, + Delete, + Refresh, + Plus, + toNames, + toggleSelection, + handleSelectionChange, + searchRecord, + clearSearch, + viewRecord, + deleteRecordBtn, + conFirmDelete, + getListByPage, + getWorkTimePeriod, + reLoadData, + deleteRecord, + deleteBatchBtn, + conFirmDeleteBatch, + handleSizeChange, + handleCurrentChange, + confirmAddRecord, + closeAdd, + openAdd, + indexClear, + editRecordBtn, + ...toRefs(state) + }; + } +}; </script> <style scoped lang="scss"> - $homeNavLengh: 8; - .home-container { - height: calc(100vh - 114px); - box-sizing: border-box; - overflow: hidden; - .homeCard{ - width: 100%; - padding: 20px; - box-sizing: border-box; - background: #fff; - border-radius: 4px; +$homeNavLengh: 8; +.home-container { + height: calc(100vh - 114px); + box-sizing: border-box; + overflow: hidden; + .homeCard { + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; - .main-card{ - width: 100%; - height: 100%; - .cardTop{ - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; - .mainCardBtn{ - margin: 0; - } - } - .pageBtn{ - height: 60px; - display: flex; - align-items: center; - justify-content: right; + .main-card { + width: 100%; + height: 100%; + .cardTop { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn { + margin: 0; + } + } + .pageBtn { + height: 60px; + display: flex; + align-items: center; + justify-content: right; - .demo-pagination-block + .demo-pagination-block { - margin-top: 10px; - } - .demo-pagination-block .demonstration { - margin-bottom: 16px; - } - } - } - &:last-of-type{ - height: calc(100% - 100px); - } - } - .el-row{ - display: flex; - align-items: center; - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - .grid-content{ - align-items: center; - min-height: 36px; - } + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type { + height: calc(100% - 100px); + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } - .topInfo { - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; - &>div{ - white-space: nowrap; - margin-right: 20px; - } - } - } - } - .el-input{ - width: 100% !important; - } - .el-date-editor::v-deep{ - width: 100%; - } - .el-select{ - width: 100%; - } + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } +} +.el-input { + width: 100% !important; +} +.el-date-editor::v-deep { + width: 100%; +} +.el-select { + width: 100%; +} </style> diff --git a/src/views/system/personShiftManage/scheduleManage/schedule/index.vue b/src/views/system/personShiftManage/scheduleManage/schedule/index.vue new file mode 100644 index 0000000..0d693ed --- /dev/null +++ b/src/views/system/personShiftManage/scheduleManage/schedule/index.vue @@ -0,0 +1,576 @@ +<template> + <div class="home-container"> + <div style="height: 100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="时间策略名称"></el-input> + <el-button type="primary" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <div class="main-card"> + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" /> + </el-row> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="100" /> + <el-table-column property="groupName" label="班组名称" /> + <el-table-column property="groupMembers" label="班组人员" width="180" :show-overflow-tooltip="true" /> + <el-table-column property="groupInfo" label="描述" /> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index, scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination v-model:currentPage="pageIndex" v-model:page-size="pageSize" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> + </div> + </div> + </div> + </div> + <el-dialog v-model="dialogDetails" title="时间策略"> + <el-form :model="details" label-width="120px"> + <el-form-item label="班组名称"> + <el-input v-model="details.groupName" readonly /> + </el-form-item> + <el-form-item label="班组人员"> + <el-input v-model="details.groupMembers" type="textarea" readonly /> + </el-form-item> + <el-form-item label="描述"> + <el-input v-model="details.groupInfo" type="textarea" readonly /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="时间策略编辑" @close="closeAdd" @open="openAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="班组名称" prop="groupName"> + <el-input v-model="addRecord.groupName"> </el-input> + </el-form-item> + <el-form-item label="选择部门" prop="department"> + <el-cascader v-model="addRecord.department" :options="departmentList" :props="casProps" :show-all-levels="false" @change="handleChange" /> + </el-form-item> + <el-form-item label="选择人员" prop="groupMembers" v-if="addRecord.department !== ''"> + <el-select v-model="addRecord.groupMembers" multiple> + <el-option v-for="(item, index) in workerList" :label="item.username" :key="index" :value="item.uid">{{ item.username }}</el-option> + </el-select> + </el-form-item> + <el-form-item label="描述" prop="groupInfo"> + <el-input v-model="addRecord.groupInfo" type="textarea"> </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> + <span>您确定要删除这些记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteSetDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { toRefs, reactive, ref, onMounted } from 'vue'; +import { storeToRefs } from 'pinia'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { Session } from '/@/utils/storage'; +import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; +import { ElTable } from 'element-plus'; +import { FormInstance, FormRules, ElMessage } from 'element-plus'; +import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage'; + +// 定义接口来定义对象的类型 +interface stateType { + tableData: Array<string>; + departmentList: Array<any>; + workerList: Array<string>; + casProps: {}; + multipleSelection: Array<any>; + deleteArr: Array<any>; + dialogDetails: boolean; + dialogAddRecord: boolean; + deleteDialog: boolean; + deleteSetDialog: boolean; + pageIndex: number; + pageSize: number; + chosenIndex: null | number; + deleteId: null | number; + searchWord: string; + totalSize: number; + addRecord: { + groupName: string; + department: number | null; + depId: number | null; + groupMembers: Array<any>; + groupInfo: string; + }; + details: { + groupName: string; + department: number | null; + groupMembers: Array<any>; + groupInfo: string; + }; +} + +export default { + name: 'workingHours', + components: {}, + setup() { + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); + + const state = reactive<stateType>({ + pageIndex: 1, + pageSize: 10, + totalSize: 0, + chosenIndex: null, + searchWord: '', + tableData: [], + departmentList: [], + department: '', + workerList: [], + casProps: { + expandTrigger: 'hover', + emitPath: false, + value: 'depId', + label: 'depName' + }, + multipleSelection: [], + dialogDetails: false, + dialogAddRecord: false, + deleteDialog: false, + deleteSetDialog: false, + addRecord: { + groupName: '', + department: null, + groupMembers: [], + depId: null, + groupInfo: '' + }, + details: { + groupName: '', + department: null, + groupMembers: [], + depId: null, + groupInfo: '' + }, + deleteId: null, + deleteArr: [] + }); + interface User { + groupName: string; + department: number | null; + depId: number; + groupMembers: Array<any>; + groupInfo: string; + } + const multipleTableRef = ref<InstanceType<typeof ElTable>>(); + const toggleSelection = (rows?: User[]) => { + if (rows) { + rows.forEach((row) => { + // TODO: improvement typing when refactor table + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + multipleTableRef.value!.toggleRowSelection(row, undefined); + }); + } else { + multipleTableRef.value!.clearSelection(); + } + }; + + // 多选 + const handleSelectionChange = (val: User[]) => { + state.multipleSelection = JSON.parse(JSON.stringify(val)); + state.deleteArr = state.multipleSelection.map((item) => { + item = item.id; + return item; + }); + }; + + const addRef = ref<FormInstance>(); + const addRules = reactive<FormRules>({ + groupName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + department: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + groupMembers: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + getAllDepartment(); + }); + + // 分页获取班组管理列表 + const getListByPage = async () => { + const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { groupName: state.searchWord, containGroupMemberEnable: true } }; + let res = await teamManageApi().getRecordPage(data); + if (res.data.code === '200') { + state.tableData = res.data.data.map((item) => { + if (!item.groupMembers || item.groupMembers == null) { + item.groupMembers = []; + } else { + item.groupMembers = Array.from(item.groupMembers, ({ username }) => username); + } + return item; + }); + state.totalSize = res.data.total; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 获取部门列表 + const getAllDepartment = async () => { + let res = await teamManageApi().getAllDepartment(); + if (res.data.code === '200') { + state.departmentList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const handleChange = async (value) => { + state.addRecord.depId = value; + console.log(state.addRecord.department, 'de'); + let res = await teamManageApi().getAllMember(value); + if (res.data.code === '200') { + state.workerList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 关键词查询记录 + const searchRecord = async () => { + if (state.searchWord == '') { + ElMessage({ + type: 'warning', + message: '请输入查询关键词' + }); + } else { + getListByPage(); + } + }; + + const clearSearch = async () => { + state.searchWord = ''; + getListByPage(); + }; + + // 添加班组管理方法 + const addRecord = async (data: any) => { + let res = await teamManageApi().addRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 修改工作时段方法 + const editRecordBtn = async (index, row) => { + state.addRecord = JSON.parse(JSON.stringify(row)); + state.addRecord.department = ''; + state.addRecord.groupMembers = []; + state.dialogAddRecord = true; + state.chosenIndex = index; + }; + + const editRecord = async (data: any) => { + let res = await teamManageApi().updateRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 新增修改记录 + const confirmAddRecord = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate(async (valid, fields) => { + if (valid) { + const data = { + groupName: state.addRecord.groupName, + groupInfo: state.addRecord.groupInfo, + depId: state.addRecord.depId, + groupMemberIds: state.addRecord.groupMembers + }; + if (state.chosenIndex == null) { + await addRecord(data); + } else { + data.groupId = JSON.stringify(state.addRecord.groupId); + await editRecord(data); + } + state.dialogAddRecord = false; + } else { + console.log('error submit!', fields); + } + }); + }; + + // 删除工作时间组方法 + const deleteRecord = async (data: any) => { + let res = await teamManageApi().deleteRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const deleteRecordBtn = (row) => { + console.log(row, 'row'); + state.deleteId = row.groupId; + state.deleteDialog = true; + }; + + const conFirmDelete = () => { + deleteRecord({ groupId: state.deleteId }); + state.deleteDialog = false; + }; + + // 批量删除 + const deleteBatchBtn = async () => { + ElMessage({ + type: 'warning', + message: '抱歉,本页面暂不支持批量删除' + }); + // if (state.deleteArr.length > 0) { + // state.deleteSetDialog = true + // } else { + // ElMessage({ + // type: 'warning', + // message: '请先选择要删除的记录' + // }); + // } + }; + + // const conFirmDeleteBatch = async () => { + // let res = await teamManageApi().deletBatchRecord({ids: state.deleteArr}); + // if (res.data.code === '200') { + // state.deleteSetDialog = false + // ElMessage({ + // type: 'success', + // message: res.data.msg + // }); + // getListByPage() + // } else { + // ElMessage({ + // type: 'warning', + // message: res.data.msg + // }); + // state.deleteSetDialog = false + // } + // } + + const handleSizeChange = (val: number) => { + state.pageSize = val; + getListByPage(); + }; + const handleCurrentChange = (val: number) => { + state.pageIndex = val; + getListByPage(); + }; + + // 查看记录 + const viewRecord = (row) => { + state.details = JSON.parse(JSON.stringify(row)); + state.dialogDetails = true; + }; + + // 刷新 + const reLoadData = async () => { + getListByPage(); + }; + + const closeAdd = () => { + state.addRecord = {}; + state.chosenIndex = null; + }; + const openAdd = () => { + if (state.chosenIndex == null) { + state.addRecord.info = ''; + } + }; + const indexClear = () => { + state.deleteId = null; + }; + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; + return { + addRef, + addRules, + View, + Edit, + Delete, + Refresh, + Plus, + handleChange, + toggleSelection, + handleSelectionChange, + searchRecord, + clearSearch, + viewRecord, + deleteRecordBtn, + conFirmDelete, + getListByPage, + reLoadData, + deleteRecord, + deleteBatchBtn, + handleSizeChange, + handleCurrentChange, + confirmAddRecord, + closeAdd, + openAdd, + indexClear, + editRecordBtn, + ...toRefs(state) + }; + } +}; +</script> + +<style scoped lang="scss"> +$homeNavLengh: 8; +.home-container { + height: calc(100vh - 114px); + box-sizing: border-box; + overflow: hidden; + .homeCard { + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + + .main-card { + width: 100%; + height: 100%; + .cardTop { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn { + margin: 0; + } + } + .pageBtn { + height: 60px; + display: flex; + align-items: center; + justify-content: right; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type { + height: calc(100% - 100px); + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } +} +.el-input { + width: 100% !important; +} +.el-date-editor::v-deep { + width: 100%; +} +.el-select { + width: 100%; +} +</style> diff --git a/src/views/system/personShiftManage/scheduleManage/strategy/index.vue b/src/views/system/personShiftManage/scheduleManage/strategy/index.vue new file mode 100644 index 0000000..95e396f --- /dev/null +++ b/src/views/system/personShiftManage/scheduleManage/strategy/index.vue @@ -0,0 +1,673 @@ +<template> + <div class="home-container"> + <div style="height: 100%"> + <el-row class="homeCard"> + <el-col :span="8"> + <div class="grid-content topInfo"> + <el-input v-model="searchWord" placeholder="时间策略名称"></el-input> + <el-button type="primary" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> + </div> + </el-col> + </el-row> + <div class="homeCard"> + <div class="main-card"> + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新建</el-button> + <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> + <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" /> + </el-row> + <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="100" /> + <el-table-column property="groupStrategyName" label="班组策略名称" /> + <el-table-column property="timeStrategy" label="时间策略" width="180" :show-overflow-tooltip="true" /> + <el-table-column property="cycleName" label="循环类型" :show-overflow-tooltip="true" /> + <el-table-column property="groupNames" label="班组" /> + <el-table-column property="cycleStartTime" label="排班开始时间" width="160" /> + <el-table-column property="groupStrategyInfo" label="描述信息" /> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index, scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination v-model:currentPage="pageIndex" v-model:page-size="pageSize" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> + </div> + </div> + </div> + </div> + <el-dialog v-model="dialogDetails" title="班组策略"> + <el-form :model="details" label-width="120px"> + <el-form-item label="策略名称"> + <el-input v-model="details.groupStrategyName" readonly /> + </el-form-item> + <el-form-item label="时间策略"> + <el-input v-model="details.timeStrategy" readonly /> + </el-form-item> + <el-form-item label="循环类型"> + <el-input v-model="details.cycleName" readonly /> + </el-form-item> + <el-form-item label="班组"> + <el-input v-model="details.groupNames" type="textarea" readonly /> + </el-form-item> + <el-form-item label="排班开始时间"> + <el-input v-model="details.cycleStartTime" readonly /> + </el-form-item> + <el-form-item label="描述信息" v-if="details.groupStrategyInfo"> + <el-input v-model="details.groupStrategyInfo" type="textarea" readonly /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogAddRecord" title="班组策略编辑" @close="closeAdd" @open="openAdd"> + <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> + <el-form-item label="策略名称" prop="groupStrategyName"> + <el-input v-model="addRecord.groupStrategyName"> </el-input> + </el-form-item> + <el-form-item label="时间策略" prop="timeStrategyId"> + <el-select v-model="addRecord.timeStrategyId"> + <el-option v-for="(item, index) in timeList" :key="index" :label="item.name" :value="item.id" /> + </el-select> + </el-form-item> + <el-form-item label="循环类型" prop="cycle"> + <el-select v-model="addRecord.cycle"> + <el-option v-for="(item, index) in cycleList" :key="index" :label="item.name" :value="item.value" /> + </el-select> + </el-form-item> + <el-form-item label="班组选择" prop="groupIds"> + <el-select v-model="addRecord.groupIds" multiple> + <el-option v-for="(item, index) in teamList" :key="index" :label="item.groupName" :value="item.id" /> + </el-select> + </el-form-item> + <el-form-item label="排班开始时间" prop="cycleStartTime"> + <el-date-picker v-model="addRecord.cycleStartTime" type="date" value-format="YYYY-MM-DD" /> + </el-form-item> + <el-form-item label="描述信息" prop="groupStrategyInfo"> + <el-input v-model="addRecord.groupStrategyInfo" type="textarea"> </el-input> + </el-form-item> + <el-form-item> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要删除该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> + <span>您确定要删除这些记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteSetDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +import { toRefs, reactive, ref, onMounted } from 'vue'; +import { storeToRefs } from 'pinia'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { Session } from '/@/utils/storage'; +import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; +import { ElTable } from 'element-plus'; +import { FormInstance, FormRules, ElMessage } from 'element-plus'; +import { teamStrategyApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamStrategy'; +import { timeStrategyApi } from '/@/api/systemManage/basicDateManage/personShiftManage/timeStrategy'; +import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage'; + +// 定义接口来定义对象的类型 +interface stateType { + tableData: Array<string>; + pageRecord: Array<string>; + timeList: Array<any>; + teamList: Array<any>; + cycleList: Array<any>; + multipleSelection: Array<any>; + deleteArr: Array<any>; + dialogDetails: boolean; + dialogAddRecord: boolean; + deleteDialog: boolean; + deleteSetDialog: boolean; + pageIndex: number; + pageSize: number; + chosenIndex: null | number; + deleteId: null | number; + searchWord: string; + totalSize: number; + addRecord: { + groupStrategyName: string; + timeStrategyId: number | null; + timeStrategy: string; + groupIds: Array<number>; + cycle: number | null; + cycleName: string; + cycleStartTime: string; + groupStrategyInfo: string; + groupStrategyId: number | null; + }; + details: { + groupStrategyName: string; + timeStrategyId: number | null; + timeStrategy: string; + groups: Array<any>; + cycle: number | null; + cycleName: string; + cycleStartTime: string; + groupStrategyInfo: string; + }; +} + +export default { + name: 'teamStrategy', + components: {}, + setup() { + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); + + const state = reactive<stateType>({ + pageIndex: 1, + pageSize: 10, + totalSize: 0, + chosenIndex: null, + searchWord: '', + tableData: [], + pageRecord: [], + timeList: [], + teamList: [], + cycleList: [ + { + name: '周', + value: 3 + }, + { + name: '月', + value: 2 + }, + { + name: '年', + value: 1 + } + ], + multipleSelection: [], + dialogDetails: false, + dialogAddRecord: false, + deleteDialog: false, + deleteSetDialog: false, + addRecord: { + groupStrategyName: '', + timeStrategyId: null, + timeStrategy: '', + groupIds: [], + cycle: null, + cycleName: '', + cycleStartTime: '', + groupStrategyInfo: '', + groupStrategyId: null + }, + details: { + groupStrategyName: '', + timeStrategyId: null, + timeStrategy: '', + groups: [], + cycle: null, + cycleName: '', + cycleStartTime: '', + groupStrategyInfo: '' + }, + deleteId: null, + deleteArr: [] + }); + interface User { + groupStrategyName: string; + timeStrategyId: null | number; + timeStrategy: string; + groups: Array<any>; + cycle: null | number; + cycleName: string; + cycleStartTime: string; + groupStrategyInfo: string; + } + const multipleTableRef = ref<InstanceType<typeof ElTable>>(); + const toggleSelection = (rows?: User[]) => { + if (rows) { + rows.forEach((row) => { + // TODO: improvement typing when refactor table + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + multipleTableRef.value!.toggleRowSelection(row, undefined); + }); + } else { + multipleTableRef.value!.clearSelection(); + } + }; + + // 多选 + const handleSelectionChange = (val: User[]) => { + state.multipleSelection = JSON.parse(JSON.stringify(val)); + state.deleteArr = state.multipleSelection.map((item) => { + item = item.id; + return item; + }); + }; + + const addRef = ref<FormInstance>(); + const addRules = reactive<FormRules>({ + groupStrategyName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + timeStrategyId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + groupIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cycle: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cycleStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + getTimeList(); + getTeamList(); + }); + + // 分页获取班组策略列表 + const getListByPage = async () => { + const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { name: state.searchWord, containGroupEnable: true } }; + let res = await teamStrategyApi().getRecordPage(data); + if (res.data.code === '200') { + state.pageRecord = res.data.data; + state.tableData = res.data.data.map((item) => { + item.cycleName = item.cycle == 1 ? '年' : item.cycle == 2 ? '月' : item.cycle == 3 ? '周' : ''; + if (!item.groups || item.groups == null) { + item.groups = []; + } else { + item.groups = item.groups.map((i) => { + return Object.assign({}, { groupId: i.groupId, groupName: i.groupName }); + }); + item.groupIds = Array.from(item.groups, ({ groupId }) => groupId); + item.groupNames = Array.from(item.groups, ({ groupName }) => groupName); + } + return item; + }); + state.tableData.map(async (item) => { + if (!item.timeStrategyId || item.timeStrategyId == null) { + item.timeStrategy = ''; + } else { + let op = await timeStrategyApi().getRecordById({ id: item.timeStrategyId }); + if (op.data.code && op.data.code === '200') { + if (op.data.data) { + item.timeStrategy = op.data.data.name; + } else { + item.timeStrategy = ''; + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + return item; + }); + console.log(state.tableData, 'state.tableData'); + state.totalSize = res.data.total; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 循环类型格式化 + // const toNames =(row, column, cellValue, index) =>{ + // return row.cycle == 1? '年':(row.type == 2? '月': '周') + // } + + // 时间策略格式化 + // const timeName = async (row, column, cellValue, index) =>{ + // let res = await timeStrategyApi().getRecordById({id: row.timeStrategyId}) + // if (res.data.code === '200') { + // return row.timeStrategyId = res.name + // } else { + // ElMessage({ + // type: 'warning', + // message: res.data.msg + // }); + // } + // } + + // 获取时间策略列表 + const getTimeList = async () => { + let res = await timeStrategyApi().getAllRecord(); + if (res.data.code === '200') { + console.log(res.data.data, 'timestrategy'); + state.timeList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 获取班组列表 + const getTeamList = async () => { + let res = await teamManageApi().getRecord({ name: '' }); + if (res.data.code === '200') { + state.teamList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 关键词查询记录 + const searchRecord = async () => { + if (state.searchWord == '') { + ElMessage({ + type: 'warning', + message: '请输入查询关键词' + }); + } else { + getListByPage(); + } + }; + + const clearSearch = async () => { + state.searchWord = ''; + getListByPage(); + }; + + // 添加班组策略方法 + const addRecord = async (data: any) => { + let res = await teamStrategyApi().addRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 修改工作时段方法 + const editRecord = async (data: any) => { + let res = await teamStrategyApi().updateRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 新增修改记录 + const confirmAddRecord = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate(async (valid, fields) => { + if (valid) { + const data = { + groupStrategyName: state.addRecord.groupStrategyName, + groupStrategyInfo: state.addRecord.groupStrategyInfo, + groupStrategyCycleType: state.addRecord.cycle, + timeStrategyId: state.addRecord.timeStrategyId, + groupIds: state.addRecord.groupIds, + cycleStartTime: state.addRecord.cycleStartTime + }; + if (state.chosenIndex == null) { + await addRecord(data); + } else { + data.groupStrategyId = JSON.stringify(state.addRecord.groupStrategyId); + await editRecord(data); + } + state.dialogAddRecord = false; + } else { + console.log('error submit!', fields); + } + }); + }; + + // 删除班组策略方法 + const deleteRecord = async (data: any) => { + let res = await teamStrategyApi().deleteRecord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const deleteRecordBtn = (row) => { + state.deleteId = row.groupStrategyId; + state.deleteDialog = true; + }; + + const conFirmDelete = () => { + deleteRecord({ groupStrategyId: state.deleteId }); + state.deleteDialog = false; + }; + + // 批量删除 + const deleteBatchBtn = async () => { + ElMessage({ + type: 'warning', + message: '抱歉,本页面暂不支持批量删除' + }); + // if (state.deleteArr.length > 0) { + // state.deleteSetDialog = true + // } else { + // ElMessage({ + // type: 'warning', + // message: '请先选择要删除的记录' + // }); + // } + }; + + // const conFirmDeleteBatch = async () => { + // let res = await timeStrategyApi().deletBatchRecord({ids: state.deleteArr}); + // if (res.data.code === '200') { + // state.deleteSetDialog = false + // ElMessage({ + // type: 'success', + // message: res.data.msg + // }); + // getListByPage() + // } else { + // ElMessage({ + // type: 'warning', + // message: res.data.msg + // }); + // state.deleteSetDialog = false + // } + // } + + const handleSizeChange = (val: number) => { + state.pageSize = val; + getListByPage(); + }; + const handleCurrentChange = (val: number) => { + state.pageIndex = val; + getListByPage(); + }; + + // 查看记录 + const viewRecord = (row) => { + state.details = JSON.parse(JSON.stringify(row)); + state.dialogDetails = true; + }; + + // 刷新 + const reLoadData = async () => { + getListByPage(); + }; + // 点击修改 + const editRecordBtn = (index, row) => { + state.dialogAddRecord = true; + state.chosenIndex = index; + state.addRecord = JSON.parse(JSON.stringify(row)); + console.log(state.addRecord, 'state.addRecord'); + }; + const closeAdd = () => { + state.addRecord = {}; + state.chosenIndex = null; + }; + const openAdd = () => { + if (state.chosenIndex == null) { + state.addRecord.info = ''; + } + }; + const indexClear = () => { + state.deleteId = null; + }; + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; + return { + addRef, + addRules, + View, + Edit, + Delete, + Refresh, + Plus, + toggleSelection, + handleSelectionChange, + searchRecord, + clearSearch, + viewRecord, + deleteRecordBtn, + conFirmDelete, + getListByPage, + reLoadData, + deleteRecord, + deleteBatchBtn, + handleSizeChange, + handleCurrentChange, + confirmAddRecord, + closeAdd, + openAdd, + indexClear, + editRecordBtn, + ...toRefs(state) + }; + } +}; +</script> + +<style scoped lang="scss"> +$homeNavLengh: 8; +.home-container { + height: calc(100vh - 114px); + box-sizing: border-box; + overflow: hidden; + .homeCard { + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + + .main-card { + width: 100%; + height: 100%; + .cardTop { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn { + margin: 0; + } + } + .pageBtn { + height: 60px; + display: flex; + align-items: center; + justify-content: right; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type { + height: calc(100% - 100px); + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } +} +.el-input { + width: 100% !important; +} +.el-date-editor::v-deep { + width: 100%; +} +.el-select { + width: 100%; +} +</style> diff --git a/src/views/system/personShiftManage/shiftManage/teamManage/index.vue b/src/views/system/personShiftManage/shiftManage/teamManage/index.vue deleted file mode 100644 index 56e9ca5..0000000 --- a/src/views/system/personShiftManage/shiftManage/teamManage/index.vue +++ /dev/null @@ -1,611 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <el-col :span="8"> - <div class="grid-content topInfo"> - <el-input v-model="searchWord" placeholder="时间策略名称"></el-input> - <el-button type="primary" @click="searchRecord">查询</el-button> - <el-button plain @click="clearSearch">重置</el-button> - </div> - </el-col> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> -<!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> - <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> - </el-col> - <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()"/> - </el-row> - <el-table - ref="multipleTableRef" - :data="tableData" - style="width: 100%" - height="calc(100% - 100px)" - :header-cell-style="{background: '#fafafa'}" - @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="100" /> - <el-table-column property="groupName" label="班组名称"/> - <el-table-column property="groupMembers" label="班组人员" width="180" :show-overflow-tooltip="true"/> - <el-table-column property="groupInfo" label="描述"/> - <el-table-column fixed="right" label="操作" align="center" width="250"> - <template #default="scope"> - <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> - <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index ,scope.row)">修改</el-button> - <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination - v-model:currentPage="pageIndex" - v-model:page-size="pageSize" - :page-sizes="[10, 15]" - small=false - background - layout="total, sizes, prev, pager, next, jumper" - :total="totalSize" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> - </div> - </div> - </div> - <el-dialog v-model="dialogDetails" title="时间策略"> - <el-form :model="details" label-width="120px"> - <el-form-item label="班组名称"> - <el-input - v-model="details.groupName" - readonly - /> - </el-form-item> - <el-form-item label="班组人员"> - <el-input v-model="details.groupMembers" type="textarea" readonly/> - </el-form-item> - <el-form-item label="描述"> - <el-input v-model="details.groupInfo" type="textarea" readonly/> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="dialogAddRecord" title="时间策略编辑" @close="closeAdd" @open="openAdd"> - <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="班组名称" prop="groupName"> - <el-input - v-model="addRecord.groupName" - > - </el-input> - </el-form-item> - <el-form-item label="选择部门" prop="department"> - <el-cascader - v-model="addRecord.department" - :options="departmentList" - :props="casProps" - :show-all-levels="false" - @change="handleChange" - /> - </el-form-item> - <el-form-item label="选择人员" prop="groupMembers" v-if="addRecord.department !== ''"> - <el-select v-model="addRecord.groupMembers" multiple> - <el-option v-for="(item,index) in workerList" :label="item.username" :key="index" :value="item.uid">{{item.username}}</el-option> - </el-select> - </el-form-item> - <el-form-item label="描述" prop="groupInfo"> - <el-input - v-model="addRecord.groupInfo" - type="textarea" - > - </el-input> - </el-form-item> - <el-form-item> - <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> - <span>您确定要删除该条记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - </span> - </template> - </el-dialog> - <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> - <span>您确定要删除这些记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteSetDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script lang="ts"> - import { toRefs, reactive, ref, onMounted } from 'vue'; - import { storeToRefs } from 'pinia'; - import { initBackEndControlRoutes } from '/@/router/backEnd'; - import {useUserInfo} from "/@/stores/userInfo"; - import { Session } from '/@/utils/storage'; - import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' - import { ElTable } from 'element-plus' - import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { teamManageApi } from '/@/api/basicDateManage/personShiftManage/teamManage'; - - - // 定义接口来定义对象的类型 - interface stateType { - tableData: Array<string>, - departmentList: Array<any>, - workerList: Array<string>, - casProps: {}, - multipleSelection: Array<any>, - deleteArr: Array<any>, - dialogDetails: boolean, - dialogAddRecord: boolean, - deleteDialog: boolean, - deleteSetDialog: boolean; - pageIndex: number, - pageSize: number, - chosenIndex: null | number, - deleteId: null | number, - searchWord: string, - totalSize: number, - addRecord: { - groupName: string, - department: number | null, - depId: number | null, - groupMembers: Array<any>, - groupInfo: string - }, - details: { - groupName: string, - department: number | null, - groupMembers: Array<any>, - groupInfo: string - } - } - - export default { - name: 'workingHours', - components:{}, - setup() { - const userInfo = useUserInfo() - const {userInfos} = storeToRefs(userInfo); - - const state = reactive<stateType>({ - pageIndex: 1, - pageSize: 10, - totalSize: 0, - chosenIndex: null, - searchWord: '', - tableData: [], - departmentList: [], - department: '', - workerList: [], - casProps: { - expandTrigger: 'hover', - emitPath: false, - value: 'depId', - label: 'depName' - }, - multipleSelection: [], - dialogDetails: false, - dialogAddRecord: false, - deleteDialog: false, - deleteSetDialog: false, - addRecord: { - groupName: '', - department: null, - groupMembers: [], - depId: null, - groupInfo: '' - }, - details: { - groupName: '', - department: null, - groupMembers: [], - depId: null, - groupInfo: '' - }, - deleteId: null, - deleteArr: [] - }) - interface User { - groupName: string, - department: number | null, - depId: number, - groupMembers: Array<any>, - groupInfo: string - } - const multipleTableRef = ref<InstanceType<typeof ElTable>>() - const toggleSelection = (rows?: User[]) => { - if (rows) { - rows.forEach((row) => { - // TODO: improvement typing when refactor table - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - multipleTableRef.value!.toggleRowSelection(row, undefined) - }) - } else { - multipleTableRef.value!.clearSelection() - } - } - - // 多选 - const handleSelectionChange = (val: User[]) => { - state.multipleSelection = JSON.parse(JSON.stringify(val)) - state.deleteArr = state.multipleSelection.map((item)=>{ - item = item.id - return item - }) - } - - const addRef = ref<FormInstance>() - const addRules = reactive<FormRules>({ - groupName: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - department: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - groupMembers: [{required: true, message: '该内容不能为空', trigger: 'blur'}] - }) - - // 页面载入时执行方法 - onMounted(() => { - getListByPage() - getAllDepartment() - }) - - // 分页获取班组管理列表 - const getListByPage = async ()=>{ - const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{groupName: state.searchWord,containGroupMemberEnable: true}} - let res = await teamManageApi().getRecordPage(data); - if (res.data.code === '200') { - state.tableData = res.data.data.map((item)=>{ - if(!item.groupMembers || item.groupMembers == null){ - item.groupMembers = [] - }else{ - item.groupMembers= Array.from(item.groupMembers,({username})=>username) - } - return item - }) - state.totalSize = res.data.total - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 获取部门列表 - const getAllDepartment = async () => { - let res = await teamManageApi().getAllDepartment(); - if (res.data.code === '200') { - state.departmentList = res.data.data - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - const handleChange = async (value)=>{ - state.addRecord.depId = value - console.log(state.addRecord.department,'de') - let res = await teamManageApi().getAllMember(value); - if(res.data.code === '200'){ - state.workerList = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 关键词查询记录 - const searchRecord = async()=>{ - if(state.searchWord==''){ - ElMessage({ - type: 'warning', - message: '请输入查询关键词' - }); - }else{ - getListByPage() - } - } - - const clearSearch = async()=>{ - state.searchWord='' - getListByPage() - } - - // 添加班组管理方法 - const addRecord = async (data:any) => { - let res = await teamManageApi().addRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; - - // 修改工作时段方法 - const editRecordBtn = async (index, row) => { - state.addRecord = JSON.parse(JSON.stringify(row)) - state.addRecord.department = '' - state.addRecord.groupMembers = [] - state.dialogAddRecord = true - state.chosenIndex = index - } - - const editRecord = async (data:any) => { - let res = await teamManageApi().updateRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 新增修改记录 - const confirmAddRecord = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate(async (valid, fields) => { - if (valid) { - const data = { - groupName: state.addRecord.groupName, - groupInfo: state.addRecord.groupInfo, - depId: state.addRecord.depId, - groupMemberIds: state.addRecord.groupMembers - } - if (state.chosenIndex == null) { - await addRecord(data) - } else { - data.groupId = JSON.stringify(state.addRecord.groupId) - await editRecord(data) - } - state.dialogAddRecord = false - } else { - console.log('error submit!', fields) - } - }) - - } - - // 删除工作时间组方法 - const deleteRecord = async (data:any) => { - let res = await teamManageApi().deleteRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - const deleteRecordBtn = (row) => { - console.log(row,'row') - state.deleteId = row.groupId - state.deleteDialog = true - } - - const conFirmDelete = () => { - deleteRecord({ groupId: state.deleteId }) - state.deleteDialog = false - } - - // 批量删除 - const deleteBatchBtn = async () => { - ElMessage({ - type: 'warning', - message: '抱歉,本页面暂不支持批量删除' - }); - // if (state.deleteArr.length > 0) { - // state.deleteSetDialog = true - // } else { - // ElMessage({ - // type: 'warning', - // message: '请先选择要删除的记录' - // }); - // } - }; - - // const conFirmDeleteBatch = async () => { - // let res = await teamManageApi().deletBatchRecord({ids: state.deleteArr}); - // if (res.data.code === '200') { - // state.deleteSetDialog = false - // ElMessage({ - // type: 'success', - // message: res.data.msg - // }); - // getListByPage() - // } else { - // ElMessage({ - // type: 'warning', - // message: res.data.msg - // }); - // state.deleteSetDialog = false - // } - // } - - const handleSizeChange = (val: number) => { - state.pageSize = val - getListByPage() - } - const handleCurrentChange = (val: number) => { - state.pageIndex = val - getListByPage() - } - - // 查看记录 - const viewRecord = (row) => { - state.details = JSON.parse(JSON.stringify(row)) - state.dialogDetails = true - } - - // 刷新 - const reLoadData = async () =>{ - getListByPage() - } - - const closeAdd = () => { - state.addRecord = {} - state.chosenIndex = null - } - const openAdd = () => { - if (state.chosenIndex == null) { - state.addRecord.info = '' - } - } - const indexClear = () => { - state.deleteId = null - } - - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId', value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - addRef, - addRules, - View, - Edit, - Delete, - Refresh, - Plus, - handleChange, - toggleSelection, - handleSelectionChange, - searchRecord, - clearSearch, - viewRecord, - deleteRecordBtn, - conFirmDelete, - getListByPage, - reLoadData, - deleteRecord, - deleteBatchBtn, - handleSizeChange, - handleCurrentChange, - confirmAddRecord, - closeAdd, - openAdd, - indexClear, - editRecordBtn, - ...toRefs(state) - }; - } - } -</script> - -<style scoped lang="scss"> - $homeNavLengh: 8; - .home-container { - height: calc(100vh - 114px); - box-sizing: border-box; - overflow: hidden; - .homeCard{ - width: 100%; - padding: 20px; - box-sizing: border-box; - background: #fff; - border-radius: 4px; - - .main-card{ - width: 100%; - height: 100%; - .cardTop{ - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; - .mainCardBtn{ - margin: 0; - } - } - .pageBtn{ - height: 60px; - display: flex; - align-items: center; - justify-content: right; - - .demo-pagination-block + .demo-pagination-block { - margin-top: 10px; - } - .demo-pagination-block .demonstration { - margin-bottom: 16px; - } - } - } - &:last-of-type{ - height: calc(100% - 100px); - } - } - .el-row{ - display: flex; - align-items: center; - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - .grid-content{ - align-items: center; - min-height: 36px; - } - - .topInfo { - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; - - &>div{ - white-space: nowrap; - margin-right: 20px; - } - } - } - } - .el-input{ - width: 100% !important; - } - .el-date-editor::v-deep{ - width: 100%; - } - .el-select{ - width: 100%; - } -</style> diff --git a/src/views/system/personShiftManage/shiftManage/teamStrategy/index.vue b/src/views/system/personShiftManage/shiftManage/teamStrategy/index.vue deleted file mode 100644 index a31fdcd..0000000 --- a/src/views/system/personShiftManage/shiftManage/teamStrategy/index.vue +++ /dev/null @@ -1,718 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <el-col :span="8"> - <div class="grid-content topInfo"> - <el-input v-model="searchWord" placeholder="时间策略名称"></el-input> - <el-button type="primary" @click="searchRecord">查询</el-button> - <el-button plain @click="clearSearch">重置</el-button> - </div> - </el-col> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord=true">新建</el-button> -<!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>--> - <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button> - </el-col> - <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()"/> - </el-row> - <el-table - ref="multipleTableRef" - :data="tableData" - style="width: 100%" - height="calc(100% - 100px)" - :header-cell-style="{background: '#fafafa'}" - @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="100" /> - <el-table-column property="groupStrategyName" label="班组策略名称"/> - <el-table-column property="timeStrategy" label="时间策略" width="180" :show-overflow-tooltip="true"/> - <el-table-column property="cycleName" label="循环类型" :show-overflow-tooltip="true"/> - <el-table-column property="groupNames" label="班组"/> - <el-table-column property="cycleStartTime" label="排班开始时间" width="160"/> - <el-table-column property="groupStrategyInfo" label="描述信息"/> - <el-table-column fixed="right" label="操作" align="center" width="250"> - <template #default="scope"> - <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> - <el-button link type="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index ,scope.row)">修改</el-button> - <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination - v-model:currentPage="pageIndex" - v-model:page-size="pageSize" - :page-sizes="[10, 15]" - small=false - background - layout="total, sizes, prev, pager, next, jumper" - :total="totalSize" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> - </div> - </div> - </div> - <el-dialog v-model="dialogDetails" title="班组策略"> - <el-form :model="details" label-width="120px"> - <el-form-item label="策略名称"> - <el-input - v-model="details.groupStrategyName" - readonly - /> - </el-form-item> - <el-form-item label="时间策略"> - <el-input - v-model="details.timeStrategy" - readonly - /> - </el-form-item> - <el-form-item label="循环类型"> - <el-input - v-model="details.cycleName" - readonly - /> - </el-form-item> - <el-form-item label="班组"> - <el-input - v-model="details.groupNames" - type="textarea" - readonly - /> - </el-form-item> - <el-form-item label="排班开始时间"> - <el-input - v-model="details.cycleStartTime" - readonly - /> - </el-form-item> - <el-form-item label="描述信息" v-if="details.groupStrategyInfo"> - <el-input - v-model="details.groupStrategyInfo" - type="textarea" - readonly - /> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="dialogAddRecord" title="班组策略编辑" @close="closeAdd" @open="openAdd"> - <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="策略名称" prop="groupStrategyName"> - <el-input - v-model="addRecord.groupStrategyName" - > - </el-input> - </el-form-item> - <el-form-item label="时间策略" prop="timeStrategyId"> - <el-select v-model="addRecord.timeStrategyId"> - <el-option v-for="(item,index) in timeList" :key="index" :label="item.name" :value="item.id" /> - </el-select> - </el-form-item> - <el-form-item label="循环类型" prop="cycle"> - <el-select v-model="addRecord.cycle"> - <el-option v-for="(item,index) in cycleList" :key="index" :label="item.name" :value="item.value" /> - </el-select> - </el-form-item> - <el-form-item label="班组选择" prop="groupIds" > - <el-select v-model="addRecord.groupIds" multiple> - <el-option v-for="(item,index) in teamList" :key="index" :label="item.groupName" :value="item.id" /> - </el-select> - </el-form-item> - <el-form-item label="排班开始时间" prop="cycleStartTime"> - <el-date-picker v-model="addRecord.cycleStartTime" type="date" value-format="YYYY-MM-DD"/> - </el-form-item> - <el-form-item label="描述信息" prop="groupStrategyInfo"> - <el-input - v-model="addRecord.groupStrategyInfo" - type="textarea" - > - </el-input> - </el-form-item> - <el-form-item> - <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> - <span>您确定要删除该条记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> - </span> - </template> - </el-dialog> - <el-dialog v-model="deleteSetDialog" title="提示" width="30%" center> - <span>您确定要删除这些记录吗?</span> - <template #footer> - <span class="dialog-footer"> - <el-button @click="deleteSetDialog = false" size="default">取消</el-button> - <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script lang="ts"> - import { toRefs, reactive, ref, onMounted } from 'vue'; - import { storeToRefs } from 'pinia'; - import { initBackEndControlRoutes } from '/@/router/backEnd'; - import {useUserInfo} from "/@/stores/userInfo"; - import { Session } from '/@/utils/storage'; - import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue' - import { ElTable } from 'element-plus' - import { FormInstance, FormRules, ElMessage } from 'element-plus' - import { teamStrategyApi } from '/@/api/basicDateManage/personShiftManage/teamStrategy'; - import { timeStrategyApi } from '/@/api/basicDateManage/personShiftManage/timeStrategy'; - import { teamManageApi } from '/@/api/basicDateManage/personShiftManage/teamManage'; - - // 定义接口来定义对象的类型 - interface stateType { - tableData: Array<string>, - pageRecord: Array<string>, - timeList: Array<any>, - teamList: Array<any>, - cycleList: Array<any>, - multipleSelection: Array<any>, - deleteArr: Array<any>, - dialogDetails: boolean, - dialogAddRecord: boolean, - deleteDialog: boolean, - deleteSetDialog: boolean; - pageIndex: number, - pageSize: number, - chosenIndex: null | number, - deleteId: null | number, - searchWord: string, - totalSize: number, - addRecord: { - groupStrategyName: string, - timeStrategyId: number | null, - timeStrategy: string, - groupIds: Array<number>, - cycle: number | null, - cycleName: string, - cycleStartTime: string, - groupStrategyInfo: string, - groupStrategyId: number | null - }, - details: { - groupStrategyName: string, - timeStrategyId: number | null, - timeStrategy: string, - groups: Array<any>, - cycle: number | null, - cycleName: string, - cycleStartTime: string, - groupStrategyInfo: string - } - } - - export default { - name: 'teamStrategy', - components:{}, - setup() { - const userInfo = useUserInfo() - const {userInfos} = storeToRefs(userInfo); - - const state = reactive<stateType>({ - pageIndex: 1, - pageSize: 10, - totalSize: 0, - chosenIndex: null, - searchWord: '', - tableData: [], - pageRecord: [], - timeList: [], - teamList: [], - cycleList: [ - { - name: '周', - value: 3 - }, - { - name: '月', - value: 2 - }, - { - name: '年', - value: 1 - } - ], - multipleSelection: [], - dialogDetails: false, - dialogAddRecord: false, - deleteDialog: false, - deleteSetDialog: false, - addRecord: { - groupStrategyName: '', - timeStrategyId: null, - timeStrategy: '', - groupIds: [], - cycle: null, - cycleName: '', - cycleStartTime: '', - groupStrategyInfo: '', - groupStrategyId: null - }, - details: { - groupStrategyName: '', - timeStrategyId: null, - timeStrategy: '', - groups: [], - cycle: null, - cycleName: '', - cycleStartTime: '', - groupStrategyInfo: '' - }, - deleteId: null, - deleteArr: [] - }) - interface User { - groupStrategyName: string, - timeStrategyId: null | number, - timeStrategy: string, - groups: Array<any>, - cycle: null | number, - cycleName: string, - cycleStartTime: string, - groupStrategyInfo: string - } - const multipleTableRef = ref<InstanceType<typeof ElTable>>() - const toggleSelection = (rows?: User[]) => { - if (rows) { - rows.forEach((row) => { - // TODO: improvement typing when refactor table - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - multipleTableRef.value!.toggleRowSelection(row, undefined) - }) - } else { - multipleTableRef.value!.clearSelection() - } - } - - // 多选 - const handleSelectionChange = (val: User[]) => { - state.multipleSelection = JSON.parse(JSON.stringify(val)) - state.deleteArr = state.multipleSelection.map((item)=>{ - item = item.id - return item - }) - } - - const addRef = ref<FormInstance>() - const addRules = reactive<FormRules>({ - groupStrategyName: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - timeStrategyId: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - groupIds: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - cycle: [{required: true, message: '该内容不能为空', trigger: 'blur'}], - cycleStartTime: [{required: true, message: '该内容不能为空', trigger: 'blur'}] - }) - - // 页面载入时执行方法 - onMounted(() => { - getListByPage() - getTimeList() - getTeamList() - }) - - // 分页获取班组策略列表 - const getListByPage = async ()=>{ - const data = {pageSize: state.pageSize,pageIndex: state.pageIndex,searchParams:{name: state.searchWord,containGroupEnable:true}} - let res = await teamStrategyApi().getRecordPage(data); - if (res.data.code === '200') { - state.pageRecord = res.data.data - state.tableData = res.data.data.map((item)=>{ - item.cycleName = item.cycle==1?'年':(item.cycle==2?'月':(item.cycle==3?'周':'')) - if(!item.groups || item.groups == null){ - item.groups = [] - }else{ - item.groups = item.groups.map((i) =>{ - return Object.assign({},{'groupId':i.groupId,'groupName':i.groupName}) - }) - item.groupIds= Array.from(item.groups,({groupId})=> groupId) - item.groupNames= Array.from(item.groups,({groupName})=> groupName) - } - return item - }) - state.tableData.map(async(item)=>{ - if(!item.timeStrategyId || item.timeStrategyId == null){ - item.timeStrategy = '' - }else{ - let op = await timeStrategyApi().getRecordById({id: item.timeStrategyId}) - if(op.data.code&&op.data.code === '200'){ - if(op.data.data){ - item.timeStrategy = op.data.data.name - }else{ - item.timeStrategy = '' - } - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - return item - }) - console.log(state.tableData,'state.tableData') - state.totalSize = res.data.total - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 循环类型格式化 - // const toNames =(row, column, cellValue, index) =>{ - // return row.cycle == 1? '年':(row.type == 2? '月': '周') - // } - - // 时间策略格式化 - // const timeName = async (row, column, cellValue, index) =>{ - // let res = await timeStrategyApi().getRecordById({id: row.timeStrategyId}) - // if (res.data.code === '200') { - // return row.timeStrategyId = res.name - // } else { - // ElMessage({ - // type: 'warning', - // message: res.data.msg - // }); - // } - // } - - // 获取时间策略列表 - const getTimeList = async () => { - let res = await timeStrategyApi().getAllRecord(); - if (res.data.code === '200') { - console.log(res.data.data,'timestrategy') - state.timeList = res.data.data - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 获取班组列表 - const getTeamList = async () => { - let res = await teamManageApi().getRecord({name: ''}); - if (res.data.code === '200') { - state.teamList = res.data.data - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 关键词查询记录 - const searchRecord = async()=>{ - if(state.searchWord==''){ - ElMessage({ - type: 'warning', - message: '请输入查询关键词' - }); - }else{ - getListByPage() - } - } - - const clearSearch = async()=>{ - state.searchWord='' - getListByPage() - } - - // 添加班组策略方法 - const addRecord = async (data:any) => { - let res = await teamStrategyApi().addRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; - - // 修改工作时段方法 - const editRecord = async (data:any) => { - let res = await teamStrategyApi().updateRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - // 新增修改记录 - const confirmAddRecord = async (formEl: FormInstance | undefined) => { - if (!formEl) return - await formEl.validate(async (valid, fields) => { - if (valid) { - const data = { - groupStrategyName: state.addRecord.groupStrategyName, - groupStrategyInfo: state.addRecord.groupStrategyInfo, - groupStrategyCycleType: state.addRecord.cycle, - timeStrategyId: state.addRecord.timeStrategyId, - groupIds: state.addRecord.groupIds, - cycleStartTime: state.addRecord.cycleStartTime - } - if (state.chosenIndex == null) { - await addRecord(data) - } else { - data.groupStrategyId = JSON.stringify(state.addRecord.groupStrategyId) - await editRecord(data) - } - state.dialogAddRecord = false - } else { - console.log('error submit!', fields) - } - }) - - } - - // 删除班组策略方法 - const deleteRecord = async (data:any) => { - let res = await teamStrategyApi().deleteRecord(data); - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: res.data.msg - }); - getListByPage() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } - - const deleteRecordBtn = (row) => { - state.deleteId = row.groupStrategyId - state.deleteDialog = true - } - - const conFirmDelete = () => { - deleteRecord({ groupStrategyId: state.deleteId }) - state.deleteDialog = false - } - - // 批量删除 - const deleteBatchBtn = async () => { - ElMessage({ - type: 'warning', - message: '抱歉,本页面暂不支持批量删除' - }); - // if (state.deleteArr.length > 0) { - // state.deleteSetDialog = true - // } else { - // ElMessage({ - // type: 'warning', - // message: '请先选择要删除的记录' - // }); - // } - }; - - // const conFirmDeleteBatch = async () => { - // let res = await timeStrategyApi().deletBatchRecord({ids: state.deleteArr}); - // if (res.data.code === '200') { - // state.deleteSetDialog = false - // ElMessage({ - // type: 'success', - // message: res.data.msg - // }); - // getListByPage() - // } else { - // ElMessage({ - // type: 'warning', - // message: res.data.msg - // }); - // state.deleteSetDialog = false - // } - // } - - const handleSizeChange = (val: number) => { - state.pageSize = val - getListByPage() - } - const handleCurrentChange = (val: number) => { - state.pageIndex = val - getListByPage() - } - - // 查看记录 - const viewRecord = (row) => { - state.details = JSON.parse(JSON.stringify(row)) - state.dialogDetails = true - } - - // 刷新 - const reLoadData = async () =>{ - getListByPage() - } - // 点击修改 - const editRecordBtn = (index, row) => { - state.dialogAddRecord = true - state.chosenIndex = index - state.addRecord = JSON.parse(JSON.stringify(row)) - console.log(state.addRecord,'state.addRecord') - } - const closeAdd = () => { - state.addRecord = {} - state.chosenIndex = null - } - const openAdd = () => { - if (state.chosenIndex == null) { - state.addRecord.info = '' - } - } - const indexClear = () => { - state.deleteId = null - } - - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId', value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - addRef, - addRules, - View, - Edit, - Delete, - Refresh, - Plus, - toggleSelection, - handleSelectionChange, - searchRecord, - clearSearch, - viewRecord, - deleteRecordBtn, - conFirmDelete, - getListByPage, - reLoadData, - deleteRecord, - deleteBatchBtn, - handleSizeChange, - handleCurrentChange, - confirmAddRecord, - closeAdd, - openAdd, - indexClear, - editRecordBtn, - ...toRefs(state) - }; - } - } -</script> - -<style scoped lang="scss"> - $homeNavLengh: 8; - .home-container { - height: calc(100vh - 114px); - box-sizing: border-box; - overflow: hidden; - .homeCard{ - width: 100%; - padding: 20px; - box-sizing: border-box; - background: #fff; - border-radius: 4px; - - .main-card{ - width: 100%; - height: 100%; - .cardTop{ - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; - .mainCardBtn{ - margin: 0; - } - } - .pageBtn{ - height: 60px; - display: flex; - align-items: center; - justify-content: right; - - .demo-pagination-block + .demo-pagination-block { - margin-top: 10px; - } - .demo-pagination-block .demonstration { - margin-bottom: 16px; - } - } - } - &:last-of-type{ - height: calc(100% - 100px); - } - } - .el-row{ - display: flex; - align-items: center; - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - .grid-content{ - align-items: center; - min-height: 36px; - } - - .topInfo { - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; - - &>div{ - white-space: nowrap; - margin-right: 20px; - } - } - } - } - .el-input{ - width: 100% !important; - } - .el-date-editor::v-deep{ - width: 100%; - } - .el-select{ - width: 100%; - } -</style> -- Gitblit v1.9.2