From fe4005fe29aafa104485ffa2392598bd8dccd347 Mon Sep 17 00:00:00 2001
From: Your Name <123456>
Date: 星期一, 08 八月 2022 14:59:15 +0800
Subject: [PATCH] lct
---
src/views/doublePrevent/riskLevel/event/components/safetyRiskEventDialog.vue | 2
src/api/systemManage/personShiftManage/workingHours/index.ts | 58
src/views/accidentManagementSystem/workInjuryDeclaration/index.vue | 406
src/views/contingencyManagement/panManagement/component/approval.vue | 224
src/views/contingencyManagement/contingency/component/openAdd.vue | 503
src/views/contingencyManagement/abolishDialog/component/formInformationTop.vue | 144
src/views/goalManagement/Goalsummary/index.vue | 213
src/router/route.ts | 8
src/views/contingencyManagement/emergencyResources/emergencySupplies/component/openEdit.vue | 549
src/components/equipmentDailog/planDailog.vue | 156
src/api/systemManage/basicDateManage/personShiftManage/workingHours/index.ts | 0
src/views/contingencyManagement/emergencyResources/emergencySupplies/component/openAdd.vue | 515
src/views/intellectInspect/intelligentMap/index.vue | 1294 +-
src/components/equipmentDailog/regionDailog.vue | 156
src/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue | 314
src/components/emergencySupplies/index.vue | 215
src/views/goalManagement/processForms/component/lowerPlate.vue | 120
src/api/contingencyManagement/emergencyResources/index.ts | 45
.env.development | 5
src/views/goalManagement/targetImprovements/component/Dailogprove.vue | 105
src/views/goalManagement/targetSettings/component/search.vue | 52
src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/rectificationDialog.vue | 775 +
src/views/contingencyManagement/releaseOfDrillStart/component/formInformationTop.vue | 144
src/views/accidentManagementSystem/accidentReport/component/openAdd.vue | 665 +
src/views/facilityManagement/ProductionEquipment/index.vue | 375
src/views/doublePrevent/riskCheckManage/checkTaskManage/checkWork/index.vue | 4
src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue | 325
src/components/equipmentDailog/repairDailog.vue | 165
src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue | 219
src/components/equipmentDailog/Dailog.vue | 1003 +
src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue | 628
src/views/goalManagement/targetDecompositionMonth/index.vue | 282
src/views/system/menu/component/menuDialog.vue | 1
src/api/systemManage/user/index.ts | 8
src/components/DailogSearch/DailogSearch.vue | 193
src/views/contingencyManagement/processForm/component/formInformationTops.vue | 312
src/views/goalManagement/safetyAssessment/index.vue | 212
src/api/systemManage/role/index.ts | 10
src/views/contingencyManagement/contingency/component/openSee.vue | 425
src/components/userSelections/index.vue | 446
src/views/accidentManagementSystem/accidentReport/index.vue | 387
src/api/systemManage/personShiftManage/teamStrategy/index.ts | 50
src/views/goalManagement/targetEscalation/index.vue | 198
src/views/goalManagement/IncentiveRecording/component/DailogAdd.vue | 177
src/components/checkTemplate/index.vue | 239
src/views/contingencyManagement/processForm/processForm.vue | 137
src/views/goalManagement/safetyAssessment/component/Dailog.vue | 137
vite.config.ts | 2
src/views/contingencyManagement/emergencyResources/emergencySupplies/component/maintain.vue | 235
src/api/contingencyManagement/emergencyDrillEvaluation/index.ts | 45
src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/regionsDialog.vue | 221
src/api/systemManage/personShiftManage/teamManage/index.ts | 94
src/views/contingencyManagement/releaseOfDrillStart/releaseOfDrillStart.vue | 137
src/views/goalManagement/processForms/component/formInformationTop.vue | 144
src/api/facilityManagement/index.ts | 104
src/views/contingencyManagement/panManagement/component/upData.vue | 125
src/views/facilityManagement/InstrumentationInformation/index.vue | 374
src/views/goalManagement/performanceAppraisal/component/DailogSearch.vue | 177
src/components/equipmentDailog/maintenanceDailog.vue | 134
src/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/index.vue | 392
src/views/facilityManagement/deviceType/component/Dailog.vue | 190
src/views/contingencyManagement/panManagement/component/abolishLibrary.vue | 219
src/views/contingencyManagement/panManagement/component/approvalProcess.vue | 202
src/views/doublePrevent/riskCheckManage/hiddenManagement/hiddenReport/index.vue | 2
src/views/goalManagement/targetSettings/index.vue | 297
src/views/contingencyManagement/emergencyResources/emergencySupplies/index.vue | 396
src/api/systemManage/personShiftManage/holidayTime/index.ts | 0
src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/index.vue | 502
src/views/contingencyManagement/releaseOfDrillStart/component/formInformationTops.vue | 440
src/api/systemManage/menu/index.ts | 10
src/views/contingencyManagement/emergencyResources/emergencySupplies/component/inspect.vue | 224
src/assets/index.ts | 17
src/main.ts | 2
src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/userSelect.vue | 443
src/views/contingencyManagement/emergencyResources/emergencySupplies/component/personInCharge.vue | 213
src/views/contingencyManagement/panManagement/component/startUp.vue | 160
src/views/goalManagement/targetDecompositionYear/component/DailogAdd.vue | 220
src/views/accidentManagementSystem/workInjuryDeclaration/component/accidentName.vue | 240
src/views/contingencyManagement/contingency/index.vue | 389
src/api/contingencyManagement/maintenanceEmergencyMaterials/index.ts | 45
src/api/contingencyManagement/contingency/index.ts | 83
src/components/equipmentDailog/detectDailog.vue | 155
src/views/facilityManagement/safetyEquipment/index.vue | 377
src/views/goalManagement/performanceAppraisal/component/DailogAq.vue | 367
src/api/accidentManagementSystem/index.ts | 106
src/components/equipmentDailog/standardDailog.vue | 143
src/views/goalManagement/processForms/component/formInformationTops.vue | 162
src/api/systemManage/personShiftManage/holidayTimeGroup/index.ts | 0
src/views/facilityManagement/deviceType/index.vue | 130
src/components/updata/updata.vue | 89
src/views/accidentManagementSystem/accidentExpress/index.vue | 346
src/views/goalManagement/processForms/processForms.vue | 124
src/api/systemManage/basicDateManage/personShiftManage/workingHoursSet/index.ts | 0
src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue | 325
src/api/contingencyManagement/emergencyMaterialsInspection/index.ts | 45
src/api/contingencyManagement/emergencyPlan/index.ts | 91
src/components/DailogSearchUser/index.vue | 237
src/views/goalManagement/Incentivestandard/component/DailogAdd.vue | 147
src/views/contingencyManagement/contingency/component/editEmergencyPersonnel.vue | 240
src/views/doublePrevent/riskLevel/action/components/riskControlMeasureDialog.vue | 13
src/views/goalManagement/Incentivestandard/index.vue | 282
src/api/contingencyManagement/emergencyDrillPlan/index.ts | 45
src/router/index.ts | 44
src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue | 392
src/api/login/index.ts | 4
src/views/contingencyManagement/contingency/component/upData.vue | 125
src/views/goalManagement/targetImprovements/index.vue | 307
src/views/contingencyManagement/panManagement/index.vue | 613
src/api/systemManage/department/index.ts | 10
src/utils/request.ts | 4
src/views/goalManagement/index.vue | 14
src/views/contingencyManagement/panManagement/component/initiateApproval.vue | 159
src/views/goalManagement/TargetBook/index.vue | 281
src/api/systemManage/basicDateManage/personShiftManage/teamStrategy/index.ts | 0
src/components/equipmentDailog/categoryDailog.vue | 161
src/views/accidentManagementSystem/workInjuryDeclaration/component/openEdit.vue | 400
src/views/contingencyManagement/abolishDialog/abolishDialog.vue | 139
src/components/DailogSearchUserManger/index.vue | 223
src/views/goalManagement/IncentiveRecording/index.vue | 294
src/views/intellectInspect/inspectBigScreen/index.vue | 704 +
src/views/contingencyManagement/emergencyResources/emergencySupplies/component/regionsCheckbox.vue | 164
src/components/equipmentDailog/DailogS.vue | 661 +
src/views/contingencyManagement/abolishDialog/component/formInformationTops.vue | 318
src/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue | 271
src/views/contingencyManagement/processForm/component/lowerPlate.vue | 120
src/views/goalManagement/targetDecompositionYear/index.vue | 280
.env.production | 3
src/api/goalManagement/index.ts | 276
src/views/goalManagement/TargetBook/component/DailogAdd.vue | 206
src/views/goalManagement/targetEscalation/component/Dailog.vue | 53
src/views/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue | 510
src/api/contingencyManagement/emergencyDrillExecute/index.ts | 45
src/views/goalManagement/performanceAppraisal/component/DailogKh.vue | 241
src/api/systemManage/personShiftManage/workingHoursSet/index.ts | 50
src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue | 572
src/views/facilityManagement/keyEquipment/index.vue | 384
src/views/contingencyManagement/panManagement/component/openAdd.vue | 440
src/views/goalManagement/IncentiveRecording/component/DailogSearch.vue | 206
src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/approvalProgress.vue | 841 +
src/views/goalManagement/performanceAppraisal/index.vue | 521
src/views/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue | 198
src/views/goalManagement/targetDecompositionYear/component/Dailog.vue | 237
src/api/systemManage/basicDateManage/personShiftManage/holidayTime/index.ts | 0
src/components/userCheckbox/index.vue | 422
src/components/uploaderImg/index.vue | 65
src/components/regionsDialog/index.vue | 129
src/views/contingencyManagement/releaseOfDrillStart/component/lowerPlate.vue | 120
src/api/systemManage/basicDateManage/personShiftManage/teamManage/index.ts | 0
src/api/systemManage/basicDateManage/personShiftManage/timeStrategy/index.ts | 0
src/api/contingencyManagement/emergencyPlanLog/index.ts | 45
src/api/systemManage/personShiftManage/timeStrategy/index.ts | 83
src/views/contingencyManagement/contingency/component/dialog.vue | 200
src/api/systemManage/basicDateManage/personShiftManage/holidayTimeGroup/index.ts | 0
src/views/contingencyManagement/abolishDialog/component/lowerPlate.vue | 120
src/views/doublePrevent/riskLevel/action/index.vue | 2
src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/index.vue | 375
src/views/contingencyManagement/emergencyPlanStartRecord/index.vue | 405
.env | 2
src/api/workInjuryDeclaration/index.ts | 123
src/views/goalManagement/TargetBook/component/DailogSearch.vue | 175
src/views/contingencyManagement/emergencyResources/emergencyMaterialsInspection/index.vue | 388
src/views/contingencyManagement/processForm/component/formInformationTop.vue | 144
src/views/contingencyManagement/emergencyPlanStartRecord/component/selectEmergencyPlan.vue | 242
src/views/contingencyManagement/emergencyResources/emergencyMaterialsInspection/component/openAdd.vue | 280
src/views/goalManagement/performanceAppraisal/component/DailogKhS.vue | 133
/dev/null | 358
src/views/accidentManagementSystem/accidentExpress/component/numberOfCasualties.vue | 461
src/views/doublePrevent/riskLevel/device/index.vue | 4
src/views/accidentManagementSystem/accidentExpress/component/openAdd.vue | 474
src/views/goalManagement/targetSettings/component/dailogAdd.vue | 198
src/views/facilityManagement/EquipmentStatistics/index.vue | 91
src/assets/index.css | 10
172 files changed, 36,957 insertions(+), 1,066 deletions(-)
diff --git a/.env b/.env
index 30b8e66..1287485 100644
--- a/.env
+++ b/.env
@@ -5,4 +5,4 @@
VITE_OPEN = false
# public path 配置线上环境路径(打包)、本地通过 http-server 访问时,请置空即可
-VITE_PUBLIC_PATH = /vue-next-admin-preview/
+VITE_PUBLIC_PATH = 'http://121.239.169.27:6006'
diff --git a/.env.development b/.env.development
index b1428e8..0f86f0b 100644
--- a/.env.development
+++ b/.env.development
@@ -2,6 +2,7 @@
ENV = 'development'
# 本地环境接口地址
-#VITE_API_URL = 'http://192.168.0.35:8008'
+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.29:8008'
-VITE_API_URL = 'http://192.168.0.69:8008'
+#VITE_API_URL = 'http://192.168.0.69:8008'
diff --git a/.env.production b/.env.production
index 0336f50..bf8d144 100644
--- a/.env.production
+++ b/.env.production
@@ -2,4 +2,5 @@
ENV = 'production'
# 线上环境接口地址
-VITE_API_URL = 'https://lyt-top.gitee.io/vue-next-admin-preview/'
\ No newline at end of file
+VITE_API_URL = 'http://121.239.169.27:16008/safeplatform'
+VITE_API_URL_OUT = 'http://121.239.169.27:16008/safeplatform-out'
diff --git a/src/api/accidentManagementSystem/index.ts b/src/api/accidentManagementSystem/index.ts
new file mode 100644
index 0000000..1094a53
--- /dev/null
+++ b/src/api/accidentManagementSystem/index.ts
@@ -0,0 +1,106 @@
+import request from '/@/utils/request';
+
+export function accidentManagementSystemApi(){
+ return {
+ // 事故快报一览
+ accidentList:(params:object)=>{
+ return request({
+ url:"/accidentExpress/page/list",
+ method:"post",
+ data:params
+ })
+ },
+ // 事故快报新增
+ accidentAdd:(params:object)=>{
+ return request({
+ url:"/accidentExpress/add",
+ method:"post",
+ data:params
+ })
+ },
+ // 事故快报详情
+ accidentScarh:(params:number)=>{
+ return request({
+ url:`/accidentExpress/info/${params}`,
+ method:"get",
+ })
+ },
+ // 事故快报修改
+ accidentView:(params:object)=>{
+ return request({
+ url:"/accidentExpress/update",
+ method:"post",
+ data:params
+ })
+ },
+ // 事故快报删除
+ accidentDele:(params:object)=>{
+ return request({
+ url:`/accidentExpress/batchDelete`,
+ method:"post",
+ data:params
+ })
+ },
+ // 工伤申报一览
+ workList:(params:object)=>{
+ return request({
+ url:"/workInjuryDeclaration/page/list",
+ method:"post",
+ data:params
+ })
+ },
+ // 工伤申报新增
+ workAdd:(params:object)=>{
+ return request({
+ url:"/workInjuryDeclaration/add",
+ method:"post",
+ data:params
+ })
+ },
+ // 工伤申报详情
+ workScarh:(params:number)=>{
+ return request({
+ url:`/workInjuryDeclaration/info/${params}`,
+ method:"get",
+ })
+ },
+ // 工伤申报修改
+ workView:(params:object)=>{
+ return request({
+ url:"/workInjuryDeclaration/update",
+ method:"post",
+ data:params
+ })
+ },
+ // 工伤申报删除/批量删除
+ workDelete:(params:object)=>{
+ return request({
+ url:`/workInjuryDeclaration/batchDelete`,
+ method:"post",
+ data:params
+ })
+ },
+ // 伤亡人员一览
+ casualtyList:(id:number)=>{
+ return request({
+ url:`/accidentExpress/casualty/list/${id}`,
+ method:"get",
+ })
+ },
+ // 伤亡人员新增
+ casualtyAdd:(params:object)=>{
+ return request({
+ url:`/accidentExpress/casualty/add`,
+ method:"post",
+ data:params
+ })
+ },
+ // 伤亡人员删除
+ casualtyDel:(id:number)=>{
+ return request({
+ url:`/accidentExpress/casualty/del/${id}`,
+ method:"get",
+ })
+ },
+ }
+}
\ No newline at end of file
diff --git a/src/api/contingencyManagement/contingency/index.ts b/src/api/contingencyManagement/contingency/index.ts
new file mode 100644
index 0000000..d3222b2
--- /dev/null
+++ b/src/api/contingencyManagement/contingency/index.ts
@@ -0,0 +1,83 @@
+import request from '/@/utils/request';
+
+export function contingencyApi(){
+ return{
+ //应急队伍一览
+ getTeamManagementList: (params: object) => {
+ return request({
+ url: `/emergencyTeam/page/list`,
+ method: 'post',
+ data:params
+ })
+ },
+ // 应急队伍新增
+ addEmergencyTeam: (params:object) => {
+ return request({
+ url: `/emergencyTeam/add`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急队伍详情
+ seeEmergencyTeam: (params:number) => {
+ return request({
+ url: `/emergencyTeam/info/${params}`,
+ method: 'get'
+ });
+ },
+ // 应急队伍编辑
+ editEmergencyTeam: (params: object) => {
+ return request({
+ url: `/emergencyTeam/update`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急队伍删除
+ deleteEmergencyTeam: (params:object) => {
+ return request({
+ url: `/emergencyTeam/batchDelete`,
+ method: 'post',
+ data:params
+ });
+ },
+ // 应急队伍人员一览
+ getEmergencyTeamPersonnelList: (params: number) => {
+ return request({
+ url: `/emergencyTeam/memberList/${params}`,
+ method: 'get',
+ // data:params
+ })
+ },
+ // 应急队伍人员新增
+ addEmergencyTeamPersonnel: (params:object) => {
+ return request({
+ url: `/emergencyTeam/addMember`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急队伍人员详情
+ seeEmergencyTeamPersonnel: (params:number) => {
+ return request({
+ url: `/emergencyTeam/infoMember/${params}`,
+ method: 'get'
+ });
+ },
+ // 应急队伍人员编辑
+ editEmergencyTeamPersonnel: (params: object) => {
+ return request({
+ url: `/emergencyTeam/updateMember`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急队伍人员删除
+ deleteEmergencyTeamPersonnel: (params:object) => {
+ return request({
+ url: `/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
new file mode 100644
index 0000000..547de4c
--- /dev/null
+++ b/src/api/contingencyManagement/emergencyDrillEvaluation/index.ts
@@ -0,0 +1,45 @@
+import request from '/@/utils/request';
+
+export function emergencyDrillEvaluationApi(){
+ return{
+ // 应急演练实施评价一览
+ getEmergencyDrillEvaluationList: (params: object) => {
+ return request({
+ url: '/emergencyDrillEvaluation/page/list',
+ method: 'post',
+ data:params
+ })
+ },
+ // 应急演练实施评价新增
+ addEmergencyDrillEvaluation: (params:object) => {
+ return request({
+ url: `/emergencyDrillEvaluation/add`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急演练实施评价详情
+ seeEmergencyDrillEvaluation: (params:number) => {
+ return request({
+ url: `/emergencyDrillEvaluation/info/${params}`,
+ method: 'get'
+ });
+ },
+ // 应急演练实施评价编辑
+ editEmergencyDrillEvaluation: (params: object) => {
+ return request({
+ url: `/emergencyDrillEvaluation/update`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急演练实施评价删除
+ deleteEmergencyDrillEvaluation: (params:object) => {
+ return request({
+ url: `/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
new file mode 100644
index 0000000..a5b380a
--- /dev/null
+++ b/src/api/contingencyManagement/emergencyDrillExecute/index.ts
@@ -0,0 +1,45 @@
+import request from '/@/utils/request';
+
+export function emergencyDrillExecuteApi(){
+ return{
+ // 应急演练实施一览
+ getEmergencyDrillExecuteList: (params: object) => {
+ return request({
+ url: '/emergencyDrillExecute/page/list',
+ method: 'post',
+ data:params
+ })
+ },
+ // 应急演练实施新增
+ addEmergencyDrillExecute: (params:object) => {
+ return request({
+ url: `/emergencyDrillExecute/add`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急演练实施详情
+ seeEmergencyDrillExecute: (params:number) => {
+ return request({
+ url: `/emergencyDrillExecute/info/${params}`,
+ method: 'get'
+ });
+ },
+ // 应急演练实施编辑
+ editEmergencyDrillExecute: (params: object) => {
+ return request({
+ url: `/emergencyDrillExecute/update`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急演练实施删除
+ deleteEmergencyDrillExecute: (params:any) => {
+ return request({
+ url: `/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
new file mode 100644
index 0000000..e4ad774
--- /dev/null
+++ b/src/api/contingencyManagement/emergencyDrillPlan/index.ts
@@ -0,0 +1,45 @@
+import request from '/@/utils/request';
+
+export function releaseDrillPlanApi(){
+ return{
+ //演练计划发布一览
+ getReleaseDrillPlanList: (params: object) => {
+ return request({
+ url: '/emergencyDrillPlan/page/list',
+ method: 'post',
+ data:params
+ })
+ },
+ // 演练计划发布新增
+ addReleaseDrillPlan: (params:object) => {
+ return request({
+ url: `/emergencyDrillPlan/add`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 演练计划发布详情
+ seeReleaseDrillPlan: (params:number) => {
+ return request({
+ url: `/emergencyDrillPlan/info/${params}`,
+ method: 'get'
+ });
+ },
+ // 演练计划发布编辑
+ editReleaseDrillPlan: (params: object) => {
+ return request({
+ url: `/emergencyDrillPlan/update`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 演练计划发布删除
+ deleteReleaseDrillPlan: (params:object) => {
+ return request({
+ url: `/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
new file mode 100644
index 0000000..d9571c4
--- /dev/null
+++ b/src/api/contingencyManagement/emergencyMaterialsInspection/index.ts
@@ -0,0 +1,45 @@
+import request from '/@/utils/request';
+
+export function emergencyMaterialsInspectionApi(){
+ return{
+ //应急物资检查一览
+ getEmergencyMaterialsInspectionList: (params: object) => {
+ return request({
+ url: '/emergencySuppliesInspect/page/list',
+ method: 'post',
+ data:params
+ })
+ },
+ // 应急物资检查新增
+ addEmergencyMaterialsInspection: (params:object) => {
+ return request({
+ url: `/emergencySuppliesInspect/add`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急物资检查详情
+ seeEmergencyMaterialsInspection: (params:number) => {
+ return request({
+ url: `/emergencySuppliesInspect/info/${params}`,
+ method: 'get'
+ });
+ },
+ // 应急物资检查编辑
+ editEmergencyMaterialsInspection: (params: object) => {
+ return request({
+ url: `/emergencySuppliesInspect/update`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急物资检查删除
+ deleteEmergencyMaterialsInspection: (params:object) => {
+ return request({
+ url: `/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
new file mode 100644
index 0000000..fb79a63
--- /dev/null
+++ b/src/api/contingencyManagement/emergencyPlan/index.ts
@@ -0,0 +1,91 @@
+import request from '/@/utils/request';
+
+export function emergencyPlanApi(){
+ return{
+ // 应急预案管理一览
+ getEmergencyPlanList: (params: object) => {
+ return request({
+ url: '/emergencyPlan/page/list',
+ method: 'post',
+ data:params
+ })
+ },
+ // 应急预案管理新增
+ addEmergencyPlan: (params: object) => {
+ return request({
+ url: `/emergencyPlan/add`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急队伍详情
+ seeEmergencyTeam: (params:number) => {
+ return request({
+ url: `/emergencyPlan/info/${params}`,
+ method: 'get'
+ });
+ },
+ // 应急队伍编辑
+ editEmergencyTeam: (params: object) => {
+ return request({
+ url: `/emergencyPlan/update`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急队伍删除
+ deleteEmergencyTeam: (params:object) => {
+ return request({
+ url: `/emergencyPlan/batchDelete`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急队伍废止
+ EmergencyTeam: (params:object) => {
+ return request({
+ url: `/emergencyPlan/updateAbolish?id=${params}&abolishStatus=true`,
+ method: 'get',
+ });
+ },
+ // 应急队伍还原
+ reductionEmergencyTeam: (params:number) => {
+ return request({
+ url: `/emergencyPlan/updateAbolish?id=${params}&abolishStatus=false`,
+ method: 'get',
+ });
+ },
+ // 应急预案管理审批新增
+ approvalEmergencyPlan: (params: object) => {
+ return request({
+ url: `/emergencyWorkApprove/add`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急预案管理审批修改
+ editApprovalEmergencyPlan: (params: object) => {
+ return request({
+ url: `/emergencyWorkApprove/update`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急预案管理审批查看
+ approvalProcessEmergencyPlan: (params: number) => {
+ return request({
+ url: `/emergencyWorkApprove/info/${params}`,
+ method: 'get',
+ data: params
+ });
+ },
+ // 审批一览
+ processEmergencyPlan: (params: object) => {
+ return request({
+ url: `/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
new file mode 100644
index 0000000..ce58752
--- /dev/null
+++ b/src/api/contingencyManagement/emergencyPlanLog/index.ts
@@ -0,0 +1,45 @@
+import request from '/@/utils/request';
+
+export function emergencyPlanLogApi(){
+ return{
+ // 应急预案启动记录一览
+ getEmergencyPlanLogList: (params: object) => {
+ return request({
+ url: '/emergencyPlanLog/page/list',
+ method: 'post',
+ data:params
+ })
+ },
+ // 应急预案启动记录新增
+ addEmergencyPlanLog:(params:object)=>{
+ return request({
+ url:"/emergencyPlanLog/add",
+ method:"post",
+ data:params
+ })
+ },
+ // 应急预案启动记录详情
+ seeEmergencyPlanLog:(params:number)=>{
+ return request({
+ url:`/emergencyPlanLog/info/${params}`,
+ method:"get",
+ })
+ },
+ // 应急预案启动记录修改
+ editEmergencyPlanLog:(params:object)=>{
+ return request({
+ url:"/emergencyPlanLog/update",
+ method:"post",
+ data:params
+ })
+ },
+ // 应急预案启动记录删除
+ deleteEmergencyPlanLog:(params:object)=>{
+ return request({
+ url:`/emergencyPlanLog/batchDelete`,
+ method:"post",
+ data:params
+ })
+ },
+ }
+}
\ No newline at end of file
diff --git a/src/api/contingencyManagement/emergencyResources/index.ts b/src/api/contingencyManagement/emergencyResources/index.ts
new file mode 100644
index 0000000..15f2778
--- /dev/null
+++ b/src/api/contingencyManagement/emergencyResources/index.ts
@@ -0,0 +1,45 @@
+import request from '/@/utils/request';
+
+export function emergencySuppliesApi(){
+ return{
+ // 应急物资一览
+ getEmergencySuppliesList:(params:object)=>{
+ return request({
+ url:"/emergencySupplies/page/list",
+ method:'post',
+ data:params,
+ });
+ },
+ // 应急物资新增
+ addEmergencySupplies:(params:object)=>{
+ return request({
+ url:"/emergencySupplies/add",
+ method:"post",
+ data:params
+ })
+ },
+ // 应急物资详情
+ seeEmergencySupplies: (params:number) => {
+ return request({
+ url: `/emergencySupplies/info/${params}`,
+ method: 'get'
+ });
+ },
+ // 应急物资编辑
+ editEmergencySupplies: (params: object) => {
+ return request({
+ url: `/emergencySupplies/update`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急物资删除
+ deleteEmergencySupplies: (params:object) => {
+ return request({
+ url: `/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
new file mode 100644
index 0000000..b0412ce
--- /dev/null
+++ b/src/api/contingencyManagement/maintenanceEmergencyMaterials/index.ts
@@ -0,0 +1,45 @@
+import request from '/@/utils/request';
+
+export function maintenanceEmergencyMaterialsApi(){
+ return{
+ //应急物资保养一览
+ getMaintenanceEmergencyMaterialsList: (params: object) => {
+ return request({
+ url: '/emergencySuppliesMaintain/page/list',
+ method: 'post',
+ data:params
+ })
+ },
+ // 应急物资保养新增
+ addMaintenanceEmergencyMaterials: (params:object) => {
+ return request({
+ url: `/emergencySuppliesMaintain/add`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急物资保养详情
+ seeMaintenanceEmergencyMaterials: (params:number) => {
+ return request({
+ url: `/emergencySuppliesMaintain/info/${params}`,
+ method: 'get'
+ });
+ },
+ // 应急物资保养编辑
+ editMaintenanceEmergencyMaterials: (params: object) => {
+ return request({
+ url: `/emergencySuppliesMaintain/update`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 应急物资保养删除
+ deleteMaintenanceEmergencyMaterials: (params:object) => {
+ return request({
+ url: `/emergencySuppliesMaintain/batchDelete`,
+ method: 'post',
+ data: params
+ });
+ },
+ }
+}
\ No newline at end of file
diff --git a/src/api/facilityManagement/index.ts b/src/api/facilityManagement/index.ts
new file mode 100644
index 0000000..52ea447
--- /dev/null
+++ b/src/api/facilityManagement/index.ts
@@ -0,0 +1,104 @@
+import request from '/@/utils/request';
+export function facilityManagementApi(){
+ return{
+ // 设备设施类型管理 查询单条数据
+ getequipmentTypeMngDetail:(params:any)=>{
+ return request({
+ url:`/equipmentTypeMng/selectOne/${params}`,
+ method:"get"
+ })
+ },
+ // 设备设施类型管理 新增或者修改数据
+ getequipmentTypeMngAddOrUpdate:(params:object)=>{
+ return request({
+ url:"/equipmentTypeMng/addOrUpdate",
+ method:"post",
+ data:params
+ })
+ },
+ // 设备设施类型管理 删除
+ getequipmentTypeMngDelete:(params:any)=>{
+ return request({
+ url:`/equipmentTypeMng/delete`,
+ method:"post",
+ data:params
+ })
+ },
+ // 设备设施类型管理 查询树状数据
+ getequipmentTypeMngTreeData:()=>{
+ return request({
+ url:`/equipmentTypeMng/treeData`,
+ method:"get"
+ })
+ },
+ // 仪器仪表信息、生产设备设施、安全设备设施 查询单条数据
+ getequipmentInfoDetail:(params:any)=>{
+ return request({
+ url:`/equipmentInfo/selectOne/${params}`,
+ method:"get"
+ })
+ },
+ // 仪器仪表信息、生产设备设施、安全设备设施 新增或者修改数据
+ getequipmentInfoAddOrUpdate:(params:object)=>{
+ return request({
+ url:"/equipmentInfo/addOrUpdate",
+ method:"post",
+ data:params
+ })
+ },
+ // 仪器仪表信息、生产设备设施、安全设备设施 删除
+ getequipmentInfoDelete:(params:any)=>{
+ return request({
+ url:`/equipmentInfo/delete`,
+ method:"post",
+ data:params
+ })
+ },
+ // 仪器仪表信息、生产设备设施、安全设备设施 分页查询数据
+ getequipmentInfoList:(params:object)=>{
+ return request({
+ url:"/equipmentInfo/page/list",
+ method:"post",
+ data:params
+ })
+ },
+ // 仪器仪表信息、生产设备设施、安全设备设施 统计
+ getequipmentInfoStatistics:()=>{
+ return request({
+ url:`/equipmentInfo/statistics`,
+ method:"get"
+ })
+ },
+ // 重点监管装置/设备 查询单条数据
+ getkeypointEquipmentInfoDetail:(params:any)=>{
+ return request({
+ url:`/keypointEquipmentInfo/selectOne/${params}`,
+ method:"get"
+ })
+ },
+ // 重点监管装置/设备 新增或者修改数据
+ getkeypointEquipmentInfoAddOrUpdate:(params:object)=>{
+ return request({
+ url:`/keypointEquipmentInfo/addOrUpdate`,
+ method:"post",
+ data:params
+ })
+ },
+ // 重点监管装置/设备 删除
+ getkeypointEquipmentInfoDetele:(params:any)=>{
+ return request({
+ url:`/keypointEquipmentInfo/delete`,
+ method:"post",
+ data:params
+ })
+ },
+ // 重点监管装置/设备 分页查询数据
+ getkeypointEquipmentInfoAddOrList:(params:object)=>{
+ return request({
+ url:`/keypointEquipmentInfo/page/list`,
+ method:"post",
+ data:params
+ })
+ },
+ }
+}
\ No newline at end of file
diff --git a/src/api/goalManagement/index.ts b/src/api/goalManagement/index.ts
new file mode 100644
index 0000000..83745aa
--- /dev/null
+++ b/src/api/goalManagement/index.ts
@@ -0,0 +1,276 @@
+
+import request from '/@/utils/request';
+export function goalManagementApi() {
+ return {
+ // 目标设置、目标指标分解列表
+ getTargetMngList: (params: object) => {
+ return request({
+ url: "/targetMng/page/list",
+ method: "post",
+ data: params
+ })
+ },
+ // 目标设置详情
+ getTargetMngDetail: (params: any) => {
+ return request({
+ url: `/targetMng/selectOne/${params}`,
+ method: "get",
+ })
+ },
+ // 目标设置新增或者修改数据
+ getTargetMngAddOrupdata: (params: object) => {
+ return request({
+ url: "/targetMng/addOrUpdate",
+ method: "post",
+ data: params
+ })
+ },
+ // 目标设置删除
+ getTargetMngDelete: (params: any) => {
+ return request({
+ url: `/targetMng/delete`,
+ method: "post",
+ data:params
+ })
+ },
+ // 目标指标分解-新增或者修改数据
+ gettargetDivideDetail: (params: object) => {
+ return request({
+ url: "/targetDivideDetail/addOrUpdate",
+ method: "post",
+ data: params
+ })
+ },
+ // 统计
+ getEquipmentInfo: () => {
+ return request({
+ url: "/equipmentInfo/statistics",
+ method: "get"
+ })
+ },
+ // 目标责任书 分页查询数据
+ gettargetDutyfileInfoList: (params: object) => {
+ return request({
+ url: "/targetDutyfileInfo/page/list",
+ method: "post",
+ data: params
+ })
+ },
+ // 目标责任书 查询单条数据
+ gettargetDutyfileInfoDetail: (params: number) => {
+ return request({
+ url: `/targetDutyfileInfo/selectOne/${params}`,
+ method: "get"
+ })
+ },
+ // 目标责任书 新增或者修改数据
+ gettargetDutyfileInfoAddorUpdata: (params: any) => {
+ return request({
+ url: `/targetDutyfileInfo/addOrUpdate`,
+ method: "post",
+ data: params
+ })
+ },
+ // 目标责任书 删除
+ gettargetDutyfileInfoDelete: (params: any) => {
+ return request({
+ url: `/targetDutyfileInfo/delete`,
+ method: "post",
+ data:params
+ })
+ },
+ // 奖惩标准设定 分页查询数据
+ getrewardPunishmentStandardList: (params: object) => {
+ return request({
+ url: "/rewardPunishmentStandard/page/list",
+ method: "post",
+ data: params
+ })
+ },
+ // 奖惩标准设定 查询单条数据
+ getrewardPunishmentStandardDetail: (params: any) => {
+ return request({
+ url: `/rewardPunishmentStandard/selectOne/${params}`,
+ method: "get",
+ })
+ },
+ // 奖惩标准设定 新增或者修改数据
+ getrewardPunishmentStandardaddOrUpdate: (params: object) => {
+ return request({
+ url: "/rewardPunishmentStandard/addOrUpdate",
+ method: "post",
+ data: params
+ })
+ },
+ // 奖惩标准设定 删除
+ getrewardPunishmentStandardDelete: (params: any) => {
+ return request({
+ url: `/rewardPunishmentStandard/delete`,
+ method: "post",
+ data:params
+ })
+ },
+ // 奖惩记录 分页查询数据
+ getrewardPunishmentList: (params: object) => {
+ return request({
+ url: "/rewardPunishmentDetail/page/list",
+ method: "post",
+ data: params
+ })
+ },
+ // 奖惩记录 查询单条数据
+ getrewardPunishmentDetail: (params: any) => {
+ return request({
+ url: `/rewardPunishmentDetail/selectOne/${params}`,
+ method: "get",
+ })
+ },
+ // 奖惩记录 新增或者修改数据
+ getrewardPunishmentAddOrUpdate: (params: object) => {
+ return request({
+ url: `/rewardPunishmentDetail/addOrUpdate`,
+ method: "post",
+ data: params
+ })
+ },
+ // 奖惩记录 删除
+ getrewardPunishmentDelete: (params: any) => {
+ return request({
+ url: `/rewardPunishmentDetail/delete`,
+ method: "post",
+ data:params
+ })
+ },
+ // 绩效考核管理 安全考核管理 分页查询数据
+ getexamineMngList: (params: object) => {
+ return request({
+ url: "/examineMng/page/list",
+ method: "post",
+ data: params
+ })
+ },
+ // 绩效考核管理 安全考核管理 查询单条数据
+ getexamineMngDetail: (params: any) => {
+ return request({
+ url: `/examineMng/selectOne/${params}`,
+ method: "get",
+ })
+ },
+ // 绩效考核管理 安全考核管理 新增或者修改数据
+ getexamineMngAddOrUpdate: (params: object) => {
+ return request({
+ url: `/examineMng/addOrUpdate`,
+ method: "post",
+ data: params
+ })
+ },
+ // 绩效考核管理 安全考核管理 删除
+ getexamineMngDelete: (params: any) => {
+ return request({
+ url: `/examineMng/delete`,
+ method: "post",
+ data:params
+ })
+ },
+ // 绩效考核管理 考核标准设定 分页查询数据
+ getexamineTemplateList: (params: object) => {
+ return request({
+ url: "/examineTemplate/page/list",
+ method: "post",
+ data: params
+ })
+ },
+ // 绩效考核管理 考核标准设定 查询单条数据
+ getexamineTemplateDetail: (params: any) => {
+ return request({
+ url: `/examineTemplate/selectOne/${params}`,
+ method: "get",
+ })
+ },
+ // 绩效考核管理 考核标准设定 新增或者修改数据
+ getexamineTemplateAddOrUpdate: (params: object) => {
+ return request({
+ url: `/examineTemplate/addOrUpdate`,
+ method: "post",
+ data: params
+ })
+ },
+ // 绩效考核管理 考核标准设定 删除
+ getexamineTemplateDelete: (params: any) => {
+ return request({
+ url: `/examineTemplate/delete`,
+ method: "post",
+ data:params
+ })
+ },
+ // 目标汇总 分页查询数据
+ gettargetDutySummaryList: (params: object) => {
+ return request({
+ url: "/targetDutySummary/page/list",
+ method: "post",
+ data: params
+ })
+ },
+ // 目标汇总 查询单条数据
+ gettargetDutySummaryDetail: (params: any) => {
+ return request({
+ url: `/targetDutySummary/selectOne/${params}`,
+ method: "get",
+ })
+ },
+ // 目标汇总 新增或者修改数据
+ gettargetDutySummaryAddOrUpdate: (params: object) => {
+ return request({
+ url: `/targetDutySummary/addOrUpdate`,
+ method: "post",
+ data: params
+ })
+ },
+ // 目标汇总 删除
+ gettargetDutySummaryDelete: (params: any) => {
+ return request({
+ url: `/targetDutySummary/delete?ids=${params}`,
+ method: "get",
+ })
+ },
+ // 安全目标考核 查询单条数据
+ gettargetExamineDetail: (params: any) => {
+ return request({
+ url: `/targetExamine/selectOne/${params}`,
+ method: "get"
+ })
+ },
+ // 安全目标考核 新增或者修改数据
+ gettargetExamineAddOrUpdate: (params: object) => {
+ return request({
+ url: "/targetExamine/addOrUpdate",
+ method: "post",
+ data: params
+ })
+ },
+ // 目标检查上报 (有疑问) 新增或者修改数据 ---???
+ getworkApproveAddOrUpdate: (params: object) => {
+ return request({
+ url: "/workApprove/submitApprove",
+ method: "post",
+ data: params
+ })
+ },
+ // 部门树
+ getTreedepartment: () => {
+ return request({
+ url:"/department/list",
+ method: "post"
+ })
+
+ },
+ // 人员
+ getManName:(params:any)=>{
+ return request({
+ url:`/account/dep/list?depId=${params}`,
+ method:"get"
+ })
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/api/login/index.ts b/src/api/login/index.ts
index 0cd50c5..ac55ce0 100644
--- a/src/api/login/index.ts
+++ b/src/api/login/index.ts
@@ -10,7 +10,7 @@
// v1
signIn: (params: object) => {
return request({
- url: '/auth/login',
+ url: import.meta.env.VITE_API_URL + '/auth/login',
method: 'post',
data: params
});
@@ -18,7 +18,7 @@
// v1
signOut: () => {
return request({
- url: '/auth/logout',
+ url: import.meta.env.VITE_API_URL + '/auth/logout',
method: 'post'
});
}
diff --git a/src/api/basicDateManage/personShiftManage/holidayTime/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/holidayTime/index.ts
similarity index 100%
rename from src/api/basicDateManage/personShiftManage/holidayTime/index.ts
rename to src/api/systemManage/basicDateManage/personShiftManage/holidayTime/index.ts
diff --git a/src/api/basicDateManage/personShiftManage/holidayTimeGroup/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/holidayTimeGroup/index.ts
similarity index 100%
rename from src/api/basicDateManage/personShiftManage/holidayTimeGroup/index.ts
rename to src/api/systemManage/basicDateManage/personShiftManage/holidayTimeGroup/index.ts
diff --git a/src/api/basicDateManage/personShiftManage/teamManage/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/teamManage/index.ts
similarity index 100%
rename from src/api/basicDateManage/personShiftManage/teamManage/index.ts
rename to src/api/systemManage/basicDateManage/personShiftManage/teamManage/index.ts
diff --git a/src/api/basicDateManage/personShiftManage/teamStrategy/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/teamStrategy/index.ts
similarity index 100%
rename from src/api/basicDateManage/personShiftManage/teamStrategy/index.ts
rename to src/api/systemManage/basicDateManage/personShiftManage/teamStrategy/index.ts
diff --git a/src/api/basicDateManage/personShiftManage/timeStrategy/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/timeStrategy/index.ts
similarity index 100%
rename from src/api/basicDateManage/personShiftManage/timeStrategy/index.ts
rename to src/api/systemManage/basicDateManage/personShiftManage/timeStrategy/index.ts
diff --git a/src/api/basicDateManage/personShiftManage/workingHours/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/workingHours/index.ts
similarity index 100%
rename from src/api/basicDateManage/personShiftManage/workingHours/index.ts
rename to src/api/systemManage/basicDateManage/personShiftManage/workingHours/index.ts
diff --git a/src/api/basicDateManage/personShiftManage/workingHoursSet/index.ts b/src/api/systemManage/basicDateManage/personShiftManage/workingHoursSet/index.ts
similarity index 100%
rename from src/api/basicDateManage/personShiftManage/workingHoursSet/index.ts
rename to src/api/systemManage/basicDateManage/personShiftManage/workingHoursSet/index.ts
diff --git a/src/api/systemManage/department/index.ts b/src/api/systemManage/department/index.ts
index 3733527..fb22c65 100644
--- a/src/api/systemManage/department/index.ts
+++ b/src/api/systemManage/department/index.ts
@@ -5,14 +5,14 @@
// v2
getDepartmentList: () => {
return request({
- url: `/department/list`,
+ url: import.meta.env.VITE_API_URL + `/department/list`,
method: 'post'
});
},
// v2
addDepartment: (data: object) => {
return request({
- url: `/department/add`,
+ url: import.meta.env.VITE_API_URL + `/department/add`,
method: 'post',
data: data
});
@@ -20,7 +20,7 @@
// v2
modDepartment: (data: object) => {
return request({
- url: `/department/mod`,
+ url: import.meta.env.VITE_API_URL + `/department/mod`,
method: 'post',
data: data
});
@@ -28,10 +28,10 @@
// v1
deleteDepartment: (value?: object) => {
return request({
- url: `/department/del`,
+ url: import.meta.env.VITE_API_URL + `/department/del`,
method: 'post',
data: value
});
- },
+ }
};
}
diff --git a/src/api/systemManage/menu/index.ts b/src/api/systemManage/menu/index.ts
index ddfda6c..85514f2 100644
--- a/src/api/systemManage/menu/index.ts
+++ b/src/api/systemManage/menu/index.ts
@@ -11,14 +11,14 @@
// v2
getMenuAdmin: (value?: string) => {
return request({
- url: `/auth/menu?projectId= ${value}`,
+ url: import.meta.env.VITE_API_URL + `/auth/menu?projectId= ${value}`,
method: 'post'
});
},
// v1
addMenu: (value?: object) => {
return request({
- url: `/menu/add`,
+ url: import.meta.env.VITE_API_URL + `/menu/add`,
method: 'post',
data: value
});
@@ -26,7 +26,7 @@
// v1
modMenu: (value?: object) => {
return request({
- url: `/menu/mod`,
+ url: import.meta.env.VITE_API_URL + `/menu/mod`,
method: 'post',
data: value
});
@@ -34,7 +34,7 @@
// v1
deleteMenu: (value?: object) => {
return request({
- url: `/menu/del`,
+ url: import.meta.env.VITE_API_URL + `/menu/del`,
method: 'post',
data: value
});
@@ -42,7 +42,7 @@
// v1
getProjectList: () => {
return request({
- url: `/project/list`,
+ url: import.meta.env.VITE_API_URL + `/project/list`,
method: 'post'
});
}
diff --git a/src/api/systemManage/personShiftManage/holidayTime/index.ts b/src/api/systemManage/personShiftManage/holidayTime/index.ts
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/systemManage/personShiftManage/holidayTime/index.ts
diff --git a/src/api/systemManage/personShiftManage/holidayTimeGroup/index.ts b/src/api/systemManage/personShiftManage/holidayTimeGroup/index.ts
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/systemManage/personShiftManage/holidayTimeGroup/index.ts
diff --git a/src/api/systemManage/personShiftManage/teamManage/index.ts b/src/api/systemManage/personShiftManage/teamManage/index.ts
new file mode 100644
index 0000000..d378691
--- /dev/null
+++ b/src/api/systemManage/personShiftManage/teamManage/index.ts
@@ -0,0 +1,94 @@
+import request from '/@/utils/request';
+
+export function teamManageApi() {
+ return {
+ //班组分页列表
+ getRecordPage: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/schedule/group/page/list`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ //班组列表
+ getRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/schedule/group/list`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ //班组-班组成员分页列表
+ getAllRecordPage: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/schedule/group/member/page/list`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ //所有部门列表
+ getAllDepartment: () => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/department/list`,
+ method: 'post'
+ });
+ },
+
+ //用户-部门所有用户
+ getAllMember: (data: number) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/account/dep/list?depId=${data}`,
+ method: 'get',
+ data: data
+ });
+ },
+
+ // 班组-班组成员列表
+ getAllRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/schedule/group/member/list`,
+ method: 'get',
+ data: data
+ });
+ },
+
+ // 班组新增
+ addRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/schedule/group/add`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 班组修改
+ updateRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/schedule/group/mod`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 班组删除
+ deleteRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/schedule/group/del`,
+ method: 'post',
+ data: data
+ });
+ }
+
+ // 时间策略批量删除
+ // deletBatchRecord: (data: object)=>{
+ // return request({
+ // url: `/timeStrategy/deleteBatchTimeStrategy`,
+ // method: 'post',
+ // data: data
+ // })
+ // },
+ };
+}
diff --git a/src/api/systemManage/personShiftManage/teamStrategy/index.ts b/src/api/systemManage/personShiftManage/teamStrategy/index.ts
new file mode 100644
index 0000000..1e9365f
--- /dev/null
+++ b/src/api/systemManage/personShiftManage/teamStrategy/index.ts
@@ -0,0 +1,50 @@
+import request from '/@/utils/request';
+
+export function teamStrategyApi() {
+ return {
+ //获取班组策略分页列表
+ getRecordPage: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/schedule/groupStrategy/page/list`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 班组策略新增
+ addRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/schedule/groupStrategy/add`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 班组策略修改
+ updateRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/schedule/groupStrategy/mod`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 班组策略删除
+ deleteRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/schedule/groupStrategy/del`,
+ method: 'post',
+ data: data
+ });
+ }
+
+ // 时间策略批量删除
+ // deletBatchRecord: (data: object)=>{
+ // return request({
+ // url: `/timeStrategy/deleteBatchTimeStrategy`,
+ // method: 'post',
+ // data: data
+ // })
+ // },
+ };
+}
diff --git a/src/api/systemManage/personShiftManage/timeStrategy/index.ts b/src/api/systemManage/personShiftManage/timeStrategy/index.ts
new file mode 100644
index 0000000..e33a1cd
--- /dev/null
+++ b/src/api/systemManage/personShiftManage/timeStrategy/index.ts
@@ -0,0 +1,83 @@
+import request from '/@/utils/request';
+
+export function timeStrategyApi() {
+ return {
+ //获取工作时间组列表
+ getWorkTimeList: () => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/getWorkTimeGroup`,
+ method: 'get'
+ });
+ },
+
+ //获取休息时间组列表
+ getRestTimeList: () => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/breakTime/getAllBreakTimeGroup`,
+ method: 'get'
+ });
+ },
+
+ //时间策略分页列表
+ getRecordPage: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/timeStrategy/getAllTimeStrategyByPage`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 时间策略全部列表
+ getAllRecord: () => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/timeStrategy/getAllTimeStrategy`,
+ method: 'get'
+ });
+ },
+
+ //根据id获取时间策略列表
+ getRecordById: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/timeStrategy/getTimeStrategyById`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 时间策略新增
+ addRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/timeStrategy/addTimeStrategy`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 时间策略修改
+ updateRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/timeStrategy/updateTimeStrategy`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 时间策略删除
+ deleteRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/timeStrategy/deleteTimeStrategy`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 时间策略批量删除
+ deletBatchRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/timeStrategy/deleteBatchTimeStrategy`,
+ method: 'post',
+ data: data
+ });
+ }
+ };
+}
diff --git a/src/api/systemManage/personShiftManage/workingHours/index.ts b/src/api/systemManage/personShiftManage/workingHours/index.ts
new file mode 100644
index 0000000..590bbf5
--- /dev/null
+++ b/src/api/systemManage/personShiftManage/workingHours/index.ts
@@ -0,0 +1,58 @@
+import request from '/@/utils/request';
+
+export function workingHoursApi() {
+ return {
+ // 获取工作时间段列表
+ getWorkTimePeriod: (value: { name: string }) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/getWorkTimePeriod`,
+ method: 'get'
+ });
+ },
+
+ //工作时间段分页列表
+ postPeriodPage: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/getWorkTimePeriodByPage?pageSiz`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 新增工作时间段
+ postWorkTimePeriod: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/addWorkTimePeriod`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 修改工作时间段
+ updateWorkTimePeriod: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/updateWorkTimePeriod`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 删除工作时间段
+ deletWorkTimePeriod: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/deletWorkTimePeriod`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 批量删除
+ deleteBatchWorkTimePeriod: (data: any) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/deleteBatchWorkTimePeriod`,
+ method: 'post',
+ data: data
+ });
+ }
+ };
+}
diff --git a/src/api/systemManage/personShiftManage/workingHoursSet/index.ts b/src/api/systemManage/personShiftManage/workingHoursSet/index.ts
new file mode 100644
index 0000000..564f5e4
--- /dev/null
+++ b/src/api/systemManage/personShiftManage/workingHoursSet/index.ts
@@ -0,0 +1,50 @@
+import request from '/@/utils/request';
+
+export function workingHoursSetApi() {
+ return {
+ //工作时间组分页列表
+ postWorkTimeGroupPage: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/getWorkTimeGroupByPage`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 工作时间组新增
+ addWorkTimeGroup: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/addWorkTimeGroup`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 工作时间组修改
+ updateWorkTimeGroup: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/updateWorkTimeGroup`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 工作时间组删除
+ deleteWorkTimeGroup: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/deleteWorkTimeGroup`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 工作时间组批量删除
+ deletBatchWorkTimeGroup: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/workTime/deletBatchWorkTimeGroup`,
+ method: 'post',
+ data: data
+ });
+ }
+ };
+}
diff --git a/src/api/systemManage/role/index.ts b/src/api/systemManage/role/index.ts
index 3b85d45..85b00cf 100644
--- a/src/api/systemManage/role/index.ts
+++ b/src/api/systemManage/role/index.ts
@@ -5,14 +5,14 @@
// v2
getRoleList: () => {
return request({
- url: `/role/list`,
+ url: import.meta.env.VITE_API_URL + `/role/list`,
method: 'post'
});
},
// v2
addRole: (data: object) => {
return request({
- url: `/role/add`,
+ url: import.meta.env.VITE_API_URL + `/role/add`,
method: 'post',
data: data
});
@@ -20,7 +20,7 @@
// v2
modRole: (data: object) => {
return request({
- url: `/role/mod`,
+ url: import.meta.env.VITE_API_URL + `/role/mod`,
method: 'post',
data: data
});
@@ -28,10 +28,10 @@
// v2
deleteRole: (value?: object) => {
return request({
- url: `/role/del`,
+ url: import.meta.env.VITE_API_URL + `/role/del`,
method: 'post',
data: value
});
- },
+ }
};
}
diff --git a/src/api/systemManage/user/index.ts b/src/api/systemManage/user/index.ts
index 1f8f991..c7d4261 100644
--- a/src/api/systemManage/user/index.ts
+++ b/src/api/systemManage/user/index.ts
@@ -5,7 +5,7 @@
// v1
getUserList: (data: any) => {
return request({
- url: `/account/page/list`,
+ url: import.meta.env.VITE_API_URL + `/account/page/list`,
method: 'post',
data: data
});
@@ -13,7 +13,7 @@
// v1
addUser: (data: object) => {
return request({
- url: `/account/add`,
+ url: import.meta.env.VITE_API_URL + `/account/add`,
method: 'post',
data: data
});
@@ -21,7 +21,7 @@
// v1
modUser: (data: object) => {
return request({
- url: `/account/mod`,
+ url: import.meta.env.VITE_API_URL + `/account/mod`,
method: 'post',
data: data
});
@@ -29,7 +29,7 @@
// v1
getUserLByDepartment: (depId: number | null) => {
return request({
- url: `/account/dep/list?depId=${depId == null ? '' : depId}`,
+ url: import.meta.env.VITE_API_URL + `/account/dep/list?depId=${depId == null ? '' : depId}`,
method: 'get'
});
}
diff --git a/src/api/workInjuryDeclaration/index.ts b/src/api/workInjuryDeclaration/index.ts
new file mode 100644
index 0000000..e8edf72
--- /dev/null
+++ b/src/api/workInjuryDeclaration/index.ts
@@ -0,0 +1,123 @@
+import request from '/@/utils/request';
+
+export function accidentManagementSystemApi(){
+ return {
+ // 事故快报一览
+ accidentList:(params:object)=>{
+ return request({
+ url:"/accidentExpress/page/list",
+ method:"post",
+ data:params
+ })
+ },
+ // 事故快报新增
+ accidentAdd:(params:object)=>{
+ return request({
+ url:"/accidentExpress/add",
+ method:"post",
+ data:params
+ })
+ },
+ // 事故快报详情
+ accidentScarh:(params:number)=>{
+ return request({
+ url:`/accidentExpress/info/${params}`,
+ method:"get",
+ })
+ },
+ // 事故快报修改
+ accidentView:(params:object)=>{
+ return request({
+ url:"/accidentExpress/update",
+ method:"post",
+ data:params
+ })
+ },
+ // 事故快报删除
+ accidentDele:(params:object)=>{
+ return request({
+ url:`/accidentExpress/batchDelete/${params}`,
+ method:"get",
+ })
+ },
+
+ // 事故报告一览
+ getAccidentReportList: (params: object) => {
+ return request({
+ url: '/accidentReport/page/list',
+ method: 'post',
+ data:params
+ })
+ },
+ // 事故报告新增
+ addAccidentReport: (params: object) => {
+ return request({
+ url: `/accidentReport/add`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 事故报告详情
+ seeAccidentReport: (params:number) => {
+ return request({
+ url: `/accidentReport/info/${params}`,
+ method: 'get'
+ });
+ },
+ // 事故报告编辑
+ editAccidentReport: (params: object) => {
+ return request({
+ url: `/accidentReport/update`,
+ method: 'post',
+ data: params
+ });
+ },
+ // 事故报告删除
+ deleteAccidentReport: (params:object) => {
+ return request({
+ url: `/accidentReport/batchDelete`,
+ method: 'post',
+ data:params
+ });
+ },
+
+ // 工伤申报一览
+ workList:(params:object)=>{
+ return request({
+ url:"/workInjuryDeclaration/page/list",
+ method:"post",
+ data:params
+ })
+ },
+ // 工伤申报新增
+ workAdd:(params:object)=>{
+ return request({
+ url:"/workInjuryDeclaration/add",
+ method:"post",
+ data:params
+ })
+ },
+ // 工伤申报详情
+ seeAccidentManagementSystem:(params:number)=>{
+ return request({
+ url:`workInjuryDeclaration/info/${params}`,
+ method:"get",
+ })
+ },
+ // 工伤申报修改
+ workView:(params:object)=>{
+ return request({
+ url:"/workInjuryDeclaration/update",
+ method:"post",
+ data:params
+ })
+ },
+ // 工伤申报删除/批量删除
+ workDelete:(params:object)=>{
+ return request({
+ url:`/workInjuryDeclaration/batchDelete/${params}`,
+ method:"get",
+ })
+ },
+ }
+}
\ No newline at end of file
diff --git a/src/assets/index.css b/src/assets/index.css
new file mode 100644
index 0000000..08d6baa
--- /dev/null
+++ b/src/assets/index.css
@@ -0,0 +1,10 @@
+.pot {
+ position: absolute;
+ top: 19px;
+ right: 40px;
+ border: none !important;
+ padding: 0;
+}
+.pot:focus,.pot:hover{
+ background-color: #fff !important;
+}
\ No newline at end of file
diff --git a/src/assets/index.ts b/src/assets/index.ts
new file mode 100644
index 0000000..de3e571
--- /dev/null
+++ b/src/assets/index.ts
@@ -0,0 +1,17 @@
+export function timeDate(row: any, column: any, cellValue: any, index: any) {
+ const daterc = row[column.property]
+ if (daterc != null) {
+ var date = new Date(daterc);
+ var year = date.getFullYear();
+ /* 在日期格式中,月份是从0开始,11结束,因此要加0
+ * 使用三元表达式在小于10的前面加0,以达到格式统一 如 09:11:05
+ * */
+ var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
+ var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+ var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+ var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+ var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+ // 拼接
+ return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
+ }
+}
\ No newline at end of file
diff --git a/src/components/DailogSearch/DailogSearch.vue b/src/components/DailogSearch/DailogSearch.vue
new file mode 100644
index 0000000..9a993bc
--- /dev/null
+++ b/src/components/DailogSearch/DailogSearch.vue
@@ -0,0 +1,193 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="选择安全目标指标" width="50%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-row>
+ <el-col :span="17">
+ <el-form ref="ruleFormRef" :model="ruleForm" status-icon>
+ <el-row>
+ <el-col :span="6">
+ <el-form-item size="default">
+ <el-input v-model="ruleForm.searchParams.qName" placeholder="安全目标指标" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6" :offset="1">
+ <el-form-item size="default">
+ <el-input v-model="ruleForm.searchParams.indexNum" placeholder="目标指标编号" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6" :offset="1">
+ <el-form-item>
+ <el-button type="primary" @click="listApi">查询</el-button>
+ <el-button @click="resetForm">重置</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <el-button size="default" :icon="Delete" @click="clear">清除选择</el-button>
+ <el-table :data="tableData" style="width: 100%; margin-top: 20px">
+ <el-table-column align="center">
+ <template #default="scope">
+ <el-radio-group v-model="radio1">
+ <el-radio :label="scope.row.id" @click="radio(scope.row)" size="large">{{ null }}</el-radio>
+ </el-radio-group>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" prop="qName" label="安全目标指标" width="180" />
+ <el-table-column align="center" prop="indexNum" label="目标指标编号" width="180" />
+ <el-table-column align="center" prop="year" label="年度" />
+ <el-table-column align="center" prop="value" label="指标值" />
+ </el-table>
+ <el-pagination
+ style="padding: 20px 0; border-bottom: 1px solid #dedede"
+ 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"
+ />
+ </el-col>
+ <el-col :span="7">
+ <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.qName }}
+ </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 { Delete, FullScreen } from '@element-plus/icons-vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ setup(props,{emit}) {
+ const dialogVisible = ref<boolean>(false);
+ const openDailog = (type:any) => {
+ dialogVisible.value = true;
+ ruleForm.searchParams.targetType=type
+ listApi();
+ };
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ qName: '', ////安全目标指标
+ indexNum: '', ////目标指标编号
+ targetType: '', ////指标类型 1:年指标 2:月指标
+ divideStatus: '2', ////分解状态 1:已分解 2:未分解
+ },
+ });
+ // 下方导航与表格
+ const tableData = ref([]);
+ const currentPage4 = ref();
+ const pageSize4 = ref();
+ const total = ref();
+ const resetForm = () => {
+ ruleForm.searchParams.qName = '';
+ ruleForm.searchParams.indexNum = '';
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .getTargetMngList(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(() => {
+ });
+
+ 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 dynamicTags = ref(['']);
+ const handleClose = (tag: string) => {
+ dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1);
+ radio1.value = '';
+ };
+ const radio1 = ref('');
+ const radio = (data: any) => {
+ dynamicTags.value[0] = data;
+ };
+ const clear=()=>{
+ dynamicTags.value=['']
+ radio1.value=""
+ }
+ //全屏
+ 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("backNum",obj[0])
+ dialogVisible.value = false
+ }
+ return {
+ dialogVisible,
+ openDailog,
+ ruleForm,
+ tableData,
+ currentPage4,
+ total,
+ pageSize4,
+ resetForm,
+ listApi,
+ handleSizeChange,
+ handleCurrentChange,
+ dynamicTags,
+ handleClose,
+ radio1,
+ radio,
+ full,
+ toggleFullscreen,
+ Delete,
+ FullScreen,
+ clear,
+ submitForm
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
diff --git a/src/components/DailogSearchUser/index.vue b/src/components/DailogSearchUser/index.vue
new file mode 100644
index 0000000..e7f8eb1
--- /dev/null
+++ b/src/components/DailogSearchUser/index.vue
@@ -0,0 +1,237 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="用户选择" width="60%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-row>
+ <el-col :span="6">
+ <div class="userTree">
+ <el-input v-model="filterText" placeholder="请输入组织机构过滤"></el-input>
+ <div class="tree">
+ <el-tree ref="treeRef" :data="data" :props="propse" @node-click="handleNodeClick" :filter-node-method="filterNode" />
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="14" style="padding: 20px">
+ <el-form ref="ruleFormRef" :model="ruleForm" status-icon>
+ <el-row>
+ <el-col :span="10" :offset="1">
+ <el-form-item size="default">
+ <el-input v-model="ruleForm.pass" placeholder="登录名" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8" :offset="1">
+ <el-form-item>
+ <el-button size="default" type="primary" >查询</el-button>
+ <el-button size="default">重置</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <el-table :data="tableData" style="width: 100%; margin-top: 20px" @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="55" v-if="types==0"/>
+ <el-table-column align="center" v-if="types!=0">
+ <template #default="scope">
+ <el-radio-group v-model="radio1">
+ <el-radio :label="scope.row.uid" @click="radio(scope.row)" size="large">{{ null }}</el-radio>
+ </el-radio-group>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" prop="realName" label="登录名" />
+ <el-table-column align="center" prop="username" label="用户名" />
+ <el-table-column align="center" prop="address" label="所属机构" />
+ <el-table-column align="center" prop="address" label="所属部门" />
+ <el-table-column align="center" prop="type" label="状态" />
+ </el-table>
+ <el-pagination
+ style="padding: 20px 0; border-bottom: 1px solid #dedede"
+ 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"
+ />
+ </el-col>
+ <el-col :span="4">
+ <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.realName }}
+ </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, ref, onMounted, reactive, watch } from 'vue';
+import { FullScreen } from '@element-plus/icons-vue';
+import { ElMessageBox, ElTree, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus';
+import { goalManagementApi } from '/@/api/goalManagement';
+interface Tree {
+ label: string;
+ children?: Tree[];
+}
+export default defineComponent({
+ setup(props, { emit }) {
+ //部门树
+ 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 filterText = ref('');
+ const treeRef = ref<InstanceType<typeof ElTree>>();
+ watch(filterText, (val) => {
+ treeRef.value!.filter(val);
+ });
+ const filterNode = (depName: string, data: Tree) => {
+ if (!depName) return true;
+ return data.depName.includes(depName);
+ };
+ onMounted(() => {
+ department();
+ });
+ //左边树形部分点击获取回调
+ const names = ref<any>();
+ const handleNodeClick = (data: Tree) => {
+ goalManagementApi()
+ .getManName(data.depId)
+ .then((res) => {
+ if (res.data.code == 200) {
+ tableData.value=res.data.data
+ total.value=tableData.value.length
+ }else{
+ ElMessage.error(res.data.msg);
+ }
+ });
+ };
+
+ const data = ref();
+ //中间表格
+ // 搜索条件
+ const ruleForm = reactive({
+ pass: '',
+ checkPass: '',
+ });
+ // 表格
+ const tableData = ref();
+ const currentPage4 = ref(1);
+ const pageSize4 = ref(10);
+ const total=ref()
+ const handleSizeChange = (val: number) => {
+ // console.log(`${val} items per page`);
+ pageSize4.value=val
+ };
+ const handleCurrentChange = (val: number) => {
+ // console.log(`current page: ${val}`);
+ currentPage4.value=val
+ };
+ // 右方点击添加后显示标签
+ const dynamicTags = ref(['']);
+ const handleClose = (tag: any) => {
+ dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1);
+ radio1.value = '';
+ };
+ const radio1 = ref('');
+ const radio = (data: any) => {
+ dynamicTags.value[0] = data;
+ };
+ const handleSelectionChange = (val:any) => {
+ dynamicTags.value=val
+}
+ const types=ref()
+ // 开启弹窗
+ const dialogVisible = ref(false);
+ const openDailog = (type:any) => {
+ types.value=type
+ dialogVisible.value = true;
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ const submitForm = () => {
+ if(types.value==0){
+ emit('SearchUser', dynamicTags.value,types.value);
+ }else {
+ emit('SearchUser', dynamicTags.value[0],types.value);
+ }
+
+ dialogVisible.value = false;
+ };
+ return {
+ total,
+ types,
+ filterText,
+ treeRef,
+ filterNode,
+ propse,
+ dialogVisible,
+ names,
+ data,
+ handleNodeClick,
+ openDailog,
+ ruleForm,
+ tableData,
+ currentPage4,
+ pageSize4,
+ handleSizeChange,
+ handleCurrentChange,
+ handleSelectionChange,
+ radio1,
+ dynamicTags,
+ handleClose,
+ FullScreen,
+ full,
+ toggleFullscreen,
+ radio,
+ submitForm,
+ };
+ },
+});
+</script>
+<style scoped>
+.userTree {
+ border: 1px solid #ebeef5;
+}
+.userTree .el-input {
+ padding: 10px;
+ border-bottom: 1px solid #ebeef5;
+}
+.tree {
+ height: 500px;
+ overflow: hidden;
+ overflow-y: auto;
+}
+</style>
diff --git a/src/components/DailogSearchUserManger/index.vue b/src/components/DailogSearchUserManger/index.vue
new file mode 100644
index 0000000..1632e6a
--- /dev/null
+++ b/src/components/DailogSearchUserManger/index.vue
@@ -0,0 +1,223 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="用户选择" width="60%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-row>
+ <el-col :span="6">
+ <div class="userTree">
+ <el-input v-model="filterText" placeholder="请输入组织机构过滤"></el-input>
+ <div class="tree">
+ <el-tree ref="treeRef" :data="data" :props="propse" @node-click="handleNodeClick" :filter-node-method="filterNode" />
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="14" style="padding: 20px">
+ <el-form ref="ruleFormRef" :model="ruleForm" status-icon>
+ <el-row>
+ <el-col :span="10" :offset="1">
+ <el-form-item size="default">
+ <el-input v-model="ruleForm.pass" placeholder="登录名" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8" :offset="1">
+ <el-form-item>
+ <el-button size="default" type="primary" >查询</el-button>
+ <el-button size="default">重置</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <el-table :data="tableData" style="width: 100%; margin-top: 20px" @cell-click="radio">
+ <el-table-column align="center">
+ <template #default="scope">
+ <el-radio-group v-model="radio1">
+ <el-radio :label="scope.row.uid" size="large">{{ null }}</el-radio>
+ </el-radio-group>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" prop="realName" label="登录名" />
+ <el-table-column align="center" prop="username" label="用户名" />
+ <el-table-column align="center" prop="address" label="所属机构" />
+ <el-table-column align="center" prop="address" label="所属部门" />
+ <el-table-column align="center" prop="type" label="状态" />
+ </el-table>
+ <el-pagination
+ style="padding: 20px 0; border-bottom: 1px solid #dedede"
+ v-model:currentPage="currentPage4"
+ v-model:page-size="pageSize4"
+ :page-sizes="[100, 200, 300, 400]"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="400"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </el-col>
+ <el-col :span="4">
+ <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.realName }}
+ </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, ref, onMounted, reactive, watch } from 'vue';
+import { FullScreen } from '@element-plus/icons-vue';
+import { ElMessageBox, ElTree, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus';
+import { goalManagementApi } from '/@/api/goalManagement';
+interface Tree {
+ label: string;
+ children?: Tree[];
+}
+export default defineComponent({
+ setup(props, { emit }) {
+ //部门树
+ 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 filterText = ref('');
+ const treeRef = ref<InstanceType<typeof ElTree>>();
+ watch(filterText, (val) => {
+ treeRef.value!.filter(val);
+ });
+ const filterNode = (depName: string, data: Tree) => {
+ if (!depName) return true;
+ return data.depName.includes(depName);
+ };
+ onMounted(() => {
+ department();
+ });
+ //左边树形部分点击获取回调
+ const names = ref<any>();
+ const handleNodeClick = (data: Tree) => {
+ goalManagementApi()
+ .getManName(data.depId)
+ .then((res) => {
+ if (res.data.code == 200) {
+ tableData.value=res.data.data
+ }else{
+ ElMessage.error(res.data.msg);
+ }
+ });
+ };
+
+ const data = ref();
+ //中间表格
+ // 搜索条件
+ const ruleForm = reactive({
+ pass: '',
+ checkPass: '',
+ });
+ // 表格
+ const tableData = ref();
+ const currentPage4 = ref();
+ const pageSize4 = ref();
+ 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: any) => {
+ dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1);
+ radio1.value = '';
+ };
+ const radio1 = ref('');
+ const radio = (event: any) => {
+ dynamicTags.value[0] = event;
+ };
+ const types=ref()
+ // 开启弹窗
+ const dialogVisible = ref(false);
+ const openDailog = (type:any) => {
+ console.log(type)
+ types.value=type
+ dialogVisible.value = true;
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ const submitForm = () => {
+ emit('SearchUser', dynamicTags.value);
+ dialogVisible.value = false;
+ };
+ return {
+ types,
+ filterText,
+ treeRef,
+ filterNode,
+ propse,
+ dialogVisible,
+ names,
+ data,
+ handleNodeClick,
+ openDailog,
+ ruleForm,
+ tableData,
+ currentPage4,
+ pageSize4,
+ handleSizeChange,
+ handleCurrentChange,
+ radio1,
+ dynamicTags,
+ handleClose,
+ FullScreen,
+ full,
+ toggleFullscreen,
+ radio,
+ submitForm,
+ };
+ },
+});
+</script>
+<style scoped>
+.userTree {
+ border: 1px solid #ebeef5;
+}
+.userTree .el-input {
+ padding: 10px;
+ border-bottom: 1px solid #ebeef5;
+}
+.tree {
+ height: 500px;
+ overflow: hidden;
+ overflow-y: auto;
+}
+</style>
diff --git a/src/components/checkTemplate/index.vue b/src/components/checkTemplate/index.vue
new file mode 100644
index 0000000..15734ac
--- /dev/null
+++ b/src/components/checkTemplate/index.vue
@@ -0,0 +1,239 @@
+<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" status-icon>
+ <el-form-item>
+ <el-input size="default" v-model="listQuery.searchParams.id" placeholder="id" style="max-width: 215px;"/>
+ </el-form-item>
+ <el-form-item>
+ <el-input size="default" v-model="listQuery.searchParams.teamName" placeholder="队伍名称" style="max-width: 215px;padding: 0 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;" @click="submitReset">清除选择</el-button>
+ </el-col>
+ </el-row>
+ <el-table
+ :data="tableData"
+ ref="multipleTableRef"
+ 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.id" @click="radio(scope.row)" size="large">{{ null }}</el-radio>
+ </el-radio-group>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" prop="id" label="id" />
+ <el-table-column align="center" prop="teamName" label="队伍名称"/>
+ </el-table>
+ <div class="pages">
+ <el-pagination
+ v-model:currentPage="pageIndex"
+ v-model:page-size="pageSize"
+ :page-sizes="[10, 20, 30, 40]"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ </el-col>
+ <el-col :span="6" style="padding-left: 15px">
+ <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.teamName }}
+ </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 {
+ Delete,
+ FullScreen
+} from '@element-plus/icons-vue';
+import {
+ ElMessage,
+} from 'element-plus';
+import {contingencyApi} from "/@/api/contingency";
+
+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: {
+ teamName: "",
+ id: "",
+ }
+ });
+ // 列表数据请求
+ 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 submitForm = () => {
+ let obj = JSON.parse(JSON.stringify(dynamicTags.value));
+ emit('SearchUser', obj[0]);
+ dialogVisible.value = false;
+ };
+ // 重置
+ const submitReset = () => {
+ listQuery.searchParams.teamName = '';
+ listQuery.searchParams.id = '';
+ radio1.value=""
+ dynamicTags.value[0]=""
+ onSubmit();
+ };
+ // 表格
+ const tableData = ref();
+ // 分页
+ 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 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;
+ };
+ onMounted(() => {
+ onSubmit();
+ });
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ dialogVisible,
+ openDailog,
+ tableData,
+ pageSize,
+ pageIndex,
+ handleSizeChange,
+ handleCurrentChange,
+ dynamicTags,
+ handleClose,
+ Delete,
+ toggleFullscreen,
+ FullScreen,
+ full,
+ onSubmit,
+ listQuery,
+ submitReset,
+ total,
+ radio,
+ radio1,
+ submitForm,
+
+ };
+ },
+});
+</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/emergencySupplies/index.vue b/src/components/emergencySupplies/index.vue
new file mode 100644
index 0000000..903a5fa
--- /dev/null
+++ b/src/components/emergencySupplies/index.vue
@@ -0,0 +1,215 @@
+<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-form ref="ruleFormRef" :model="ruleForm" :inline="true" 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-button size="default" :icon="Delete">清除选择</el-button>
+ </el-form-item>
+ </el-form>
+ </el-row>
+ <el-table :data="tableData" style="width: 100%;margin-top:20px">
+ <el-table-column width="55">
+ <template #default="scope">
+ <el-radio-group v-model="radio1">
+ <el-radio :label="scope.row" @click="radio(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="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </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
+} from 'vue';
+import {
+ Delete,
+ FullScreen
+} from '@element-plus/icons-vue';
+import { ElMessage } from 'element-plus';
+import {emergencySuppliesApi} from "/@/api/emergencyResources";
+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: '',
+ }
+ });
+ // 定义表格数据
+ const tableData = ref([]);
+ // 列表请求数据
+ const onSubmit = async () => {
+ let res = await emergencySuppliesApi().getEmergencySuppliesList(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 = '';
+ onSubmit();
+ };
+ const pageIndex = ref();
+ const pageSize = ref();
+ const total = ref();
+ const handleSizeChange = (val: number) => {
+ listQuery.pageSize = val;
+ };
+ const handleCurrentChange = (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;
+ };
+ return {
+ dialogVisible,
+ openDailog,
+ listQuery,
+ onSubmit,
+ tableData,
+ submitReset,
+ handleSizeChange,
+ handleCurrentChange,
+ dynamicTags,
+ handleClose,
+ Delete,
+ toggleFullscreen,
+ FullScreen,
+ full,
+ pageIndex,
+ pageSize,
+ radio1,
+ radio,
+ 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/equipmentDailog/Dailog.vue b/src/components/equipmentDailog/Dailog.vue
new file mode 100644
index 0000000..249d42e
--- /dev/null
+++ b/src/components/equipmentDailog/Dailog.vue
@@ -0,0 +1,1003 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" :before-close="resetForm" 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-input v-model="form.qName" placeholder="请填写装置设施名称" />
+ </el-form-item>
+ <el-form-item label="装置设施位号" size="default">
+ <el-input v-model="form.positionNum" placeholder="请填写装置设施位号" />
+ </el-form-item>
+ <el-form-item label="装置设施用途" size="default">
+ <el-input v-model="form.qUsage" placeholder="请填写装置设施用途" />
+ </el-form-item>
+ <el-form-item label="装置设施型号" size="default">
+ <el-input v-model="form.model" placeholder="请填写装置设施型号" />
+ </el-form-item>
+ <el-form-item label="类型/类别外键" size="default">
+ <el-input v-model="form.equipmentTypeId" placeholder="请选择">
+ <template #append>
+ <el-button :icon="Search" @click="opencategory"></el-button>
+ </template>
+ </el-input>
+ </el-form-item>
+ <!-- <el-form-item label="区域名称" size="default">
+ <el-input v-model="form.name" placeholder="请选择">
+ <template #append>
+ <el-button :icon="Search" @click="openRegion"></el-button>
+ </template>
+ </el-input>
+ </el-form-item> -->
+ <el-form-item label="单位部门" size="default">
+ <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-input v-model="form.setPart" placeholder="请填写设置部位" />
+ </el-form-item>
+ <el-form-item label="生产日期" size="default">
+ <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-input v-model="form.useEndDay" placeholder="请填写使用期限" />
+ </el-form-item>
+ <el-form-item label="生命周期" size="default">
+ <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-select>
+ </el-form-item>
+ <el-form-item label="投用日期" size="default">
+ <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-select v-model="form.repairStatus" placeholder="请选择" style="width: 100%">
+ <el-option label="维修中" value="1" />
+ <el-option label="已修好" value="2" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="停用状态" size="default">
+ <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-select>
+ </el-form-item>
+ <el-form-item label="上次检查日期" size="default">
+ <el-date-picker
+ v-model="form.previousCheckDate"
+ format="YYYY-MM-DD HH:mm:ss"
+ type="datetime"
+ placeholder="选择日期时间"
+ style="width: 100%"
+ />
+ </el-form-item>
+ <el-form-item label="上次检测日期" size="default">
+ <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-date-picker
+ v-model="form.previousTakecareDate"
+ format="YYYY-MM-DD HH:mm:ss"
+ type="datetime"
+ placeholder="选择日期时间"
+ style="width: 100%"
+ />
+ </el-form-item>
+ <el-form-item label="下次检查日期" size="default">
+ <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-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-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="请选择">
+ <template #append>
+ <el-button :icon="Search" @click="openUser(0)"></el-button>
+ </template>
+ </el-input>
+ </el-form-item>
+ <el-form-item label="负责人部门" size="default">
+ <el-tree-select
+ v-model="form.leadingPersonDepartmentId"
+ :data="data"
+ check-strictly="true"
+ class="w100"
+ :props="propse"
+ placeholder="请选择"
+ />
+ </el-form-item>
+ <el-form-item label="供应商" size="default">
+ <el-input v-model="form.supplyName" placeholder="请填写供应商" />
+ </el-form-item>
+ <el-form-item label="使用说明" size="default">
+ <el-input v-model="form.useMemo" placeholder="请填写使用说明" />
+ </el-form-item>
+ <el-form-item label="是否检查" size="default">
+ <el-select v-model="form.isNeedCheck" placeholder="请选择" style="width: 100%">
+ <el-option label="是" value="1" />
+ <el-option label="否" value="2" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="检查周期" size="default">
+ <el-input v-model="form.checkCycle" placeholder="请填写检查周期" />
+ </el-form-item>
+ <el-form-item label="检查提前提醒" size="default">
+ <el-input v-model="form.checkWarn" placeholder="请填写检查提前提醒" />
+ </el-form-item>
+ <el-form-item label="是否检测" size="default">
+ <el-select v-model="form.isNeedTest" placeholder="请选择" style="width: 100%">
+ <el-option label="是" value="1" />
+ <el-option label="否" value="2" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="检测周期" size="default">
+ <el-input v-model="form.testCycle" placeholder="请填写检测周期" />
+ </el-form-item>
+ <el-form-item label="检测提前提醒" size="default">
+ <el-input v-model="form.testWarn" placeholder="请填写检测提前提醒" />
+ </el-form-item>
+ <el-form-item label="是否保养" size="default">
+ <el-select v-model="form.isNeedTakecare" placeholder="请选择" style="width: 100%">
+ <el-option label="是" value="1" />
+ <el-option label="否" value="2" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="检查内容" size="default">
+ <el-input v-model="form.checkContent" placeholder="请填写检查内容" />
+ </el-form-item>
+ <el-form-item label="负责部门" size="default">
+ <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-input v-model="form.checkPoint" placeholder="请填写检查指标" />
+ </el-form-item>
+ <el-form-item label="预警值" size="default">
+ <el-input v-model="form.alertNum" placeholder="请填写预警值" />
+ </el-form-item>
+ <el-form-item label="联锁值" size="default">
+ <el-input v-model="form.lockNum" placeholder="请填写联锁值" />
+ </el-form-item>
+ <el-form-item label="停用理由" size="default">
+ <el-input v-model="form.stopReason" placeholder="请填写停用理由" />
+ </el-form-item>
+ <el-form-item label="停用后措施" size="default">
+ <el-input v-model="form.afterStopStep" placeholder="请填写停用后措施" />
+ </el-form-item>
+ <el-form-item label="实际停用日期" size="default">
+ <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="请选择">
+ <template #append>
+ <el-button :icon="Search" @click="openUser(1)"></el-button>
+ </template>
+ </el-input>
+ </el-form-item>
+ <el-form-item label="停用提交日期" size="default">
+ <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-input v-model="form.recoveryReason" placeholder="请填写恢复理由" />
+ </el-form-item>
+ <el-form-item label="恢复填报日期" size="default">
+ <el-date-picker
+ v-model="form.recoverySubmitDate"
+ format="YYYY-MM-DD HH:mm:ss"
+ type="datetime"
+ placeholder="选择日期时间"
+ style="width: 100%"
+ />
+ </el-form-item>
+ <el-form-item label="实际恢复日期" size="default">
+ <el-date-picker
+ v-model="form.actualRecoveryDate"
+ 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.destoryReason" placeholder="请填写报废理由" />
+ </el-form-item>
+ <el-form-item label="报废填报日期" size="default">
+ <el-date-picker
+ v-model="form.destorySubmitDate"
+ format="YYYY-MM-DD HH:mm:ss"
+ type="datetime"
+ placeholder="选择日期时间"
+ style="width: 100%"
+ />
+ </el-form-item>
+ <el-form-item label="实际报废日期" size="default">
+ <el-date-picker
+ v-model="form.actualDestoryDate"
+ format="YYYY-MM-DD HH:mm:ss"
+ type="datetime"
+ placeholder="选择日期时间"
+ style="width: 100%"
+ />
+ </el-form-item>
+ </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-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="takecareDate" :formatter="timeDate" label="保养日期" />
+ <el-table-column align="center" prop="leadingPersonDepartmentId" label="保养负责人单位" />
+ <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>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="设备检测" name="second">
+ <el-button type="primary" size="default" @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="检测日期" />
+ <el-table-column align="center" prop="testPersonDepartmentId" label="检测人单位" />
+ <el-table-column align="center" prop="testMemo" label="检测内容" />
+ <el-table-column align="center" prop="testResult" label="检测结果" />
+ <el-table-column align="center" prop="testStatus" label="检测状态" />
+ <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>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="设备维修" name="third">
+ <el-button type="primary" size="default" @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="维修状态" />
+ <el-table-column align="center" prop="repairMemo" label="维修情况" />
+ <el-table-column align="center" prop="repairPersonId" label="维修负责人" />
+ <el-table-column align="center" prop="repairPersonDepartmentId" label="维修负责人单位" />
+ <el-table-column align="center" prop="repairStartDate" :formatter="timeDate" label="维修开始日期" />
+ <el-table-column align="center" prop="repairEndDate" :formatter="timeDate" label="维修结束日期" />
+ <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>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ <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" prop="indexNum" label="序号" width="75" />
+ <el-table-column align="center" prop="checkContent" label="检查内容" />
+ <el-table-column align="center" prop="checkTarget" label="检查指标" />
+ <el-table-column align="center" prop="unit" label="单位" />
+ <el-table-column align="center" prop="checkPart" label="巡检部位" />
+ <el-table-column align="center" prop="rate" label="频次" />
+ <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>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="巡检记录" size="default" name="five">
+ <el-table :data="name" style="width: 100%">
+ <el-table-column align="center" type="selection" width="75" />
+ <el-table-column align="center" sortable prop="name" label="任务编号" />
+ <el-table-column align="center" sortable prop="address" label="任务名称" />
+ <el-table-column align="center" sortable prop="address" label="点位类型" />
+ <el-table-column align="center" sortable prop="address" label="检查频次" />
+ <el-table-column align="center" sortable prop="address" :formatter="timeDate" label="巡检时间" />
+ <el-table-column align="center" sortable prop="address" label="巡检人" />
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="保养维修标准" name="six" v-if="Dailogtype">
+ <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 type="primary">点击上传</el-button>
+ <template #tip>
+ <div class="el-upload__tip"></div>
+ </template>
+ </el-upload>
+ </el-tab-pane>
+ </el-tabs>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="resetForm">关闭</el-button>
+ <el-button type="primary" @click="submitForm">确定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <categoryDailog ref="categoryShow"></categoryDailog>
+ <regionDailog ref="regionShow"></regionDailog>
+ <DailogSearchUser ref="UserShow" @SearchUser="userId"></DailogSearchUser>
+ <maintenanceDailog ref="maintenanceShow" @onMain="main"></maintenanceDailog>
+ <detectDailog ref="detectShow" @onDelect="delect"></detectDailog>
+ <repairDailog ref="repairShow" @onRepair="Repair"></repairDailog>
+ <standardDailog ref="standardShow" @onStand="Stand"></standardDailog>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import categoryDailog from './categoryDailog.vue';
+import regionDailog from './regionDailog.vue';
+import maintenanceDailog from './maintenanceDailog.vue';
+import detectDailog from './detectDailog.vue';
+import repairDailog from './repairDailog.vue';
+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 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 form = ref({
+ 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 titles = ref();
+ const disabled = ref(false);
+ const Dailogtype = ref(false);
+ const openDailog = (title: string, type: boolean, id: number, num: any) => {
+ dialogVisible.value = true;
+ department();
+ Dailogtype.value = type;
+ if (num == 0) {
+ titles.value = `${title}仪表信息`;
+ form.value.infoType = num;
+ } else if (num == 1) {
+ titles.value = `${title}设备设施`;
+ form.value.infoType = num;
+ } else if (num == 2) {
+ titles.value = `${title}设备设施`;
+ form.value.infoType = num;
+ }
+
+ disabled.value = title == '查看' ? true : false;
+ if (title == '查看' || title == '修改')
+ facilityManagementApi()
+ .getequipmentInfoDetail(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()
+ .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);
+ }
+ });
+ 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 resetForm = () => {
+ 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>();
+ const categoryShow = ref();
+ const opencategory = () => {
+ categoryShow.value.openDailog();
+ };
+ const regionShow = ref();
+ const openRegion = () => {
+ regionShow.value.openDailog();
+ };
+ const UserShow = ref();
+ const openUser = (type: any) => {
+ UserShow.value.openDailog(type);
+ };
+ const maintenanceShow = ref();
+ const openMaintenance = (title: string, data: any) => {
+ 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);
+ detectShow.value.openDailog(title, data);
+ };
+ const repairShow = ref();
+ const openRepair = (title: string, data: any) => {
+ 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);
+ standardShow.value.openDailog(title, data);
+ };
+ // 上传
+ 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 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 userId = (val: any, type: number) => {
+ console.log(val, type);
+ if (type == 0) {
+ form.value.leadingPersonId = val.uid;
+ } else if (type == 1) {
+ form.value.stopSubmitPersonId = val.uid;
+ }
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ 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 {
+ userId,
+ department,
+ propse,
+ data,
+ deleteAId,
+ deleteBId,
+ deleteCId,
+ deleteDId,
+ deleteA,
+ deleteB,
+ deleteC,
+ deleteD,
+ main,
+ index,
+ delect,
+ Repair,
+ Stand,
+ resetForm,
+ submitForm,
+ titles,
+ dialogVisible,
+ disabled,
+ Dailogtype,
+ form,
+ openDailog,
+ Search,
+ activeName,
+ categoryShow,
+ opencategory,
+ regionShow,
+ openRegion,
+ UserShow,
+ openUser,
+ maintenanceShow,
+ openMaintenance,
+ detectShow,
+ openDetect,
+ repairShow,
+ openRepair,
+ standardShow,
+ openStandard,
+ fileList,
+ handleRemove,
+ handlePreview,
+ handleExceed,
+ beforeRemove,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ timeDate,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-form-item {
+ width: 400px;
+}
+.formType:after {
+ content: '';
+ width: 400px;
+}
+.formType {
+ padding: 20px 20px;
+ display: flex;
+ justify-content: space-between;
+ flex-wrap: wrap;
+}
+.el-form .el-form-item:last-of-type {
+ margin-bottom: 22px !important;
+}
+</style>
\ No newline at end of file
diff --git a/src/components/equipmentDailog/DailogS.vue b/src/components/equipmentDailog/DailogS.vue
new file mode 100644
index 0000000..ff4fe8f
--- /dev/null
+++ b/src/components/equipmentDailog/DailogS.vue
@@ -0,0 +1,661 @@
+<template>
+ <el-dialog :fullscreen="full" v-model="dialogVisible" draggable :title="titles" width="60%">
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-form :model="form" label-width="130px" :disabled="disabled">
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="类型/类别外键" size="default">
+ <el-input v-model="form.equipmentTypeId" placeholder="请选择">
+ <template #append>
+ <el-button :icon="Search" @click="opencategory"></el-button>
+ </template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="装置/部位名称" size="default">
+ <el-input v-model="form.name" placeholder="请选择" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="所属部门" size="default">
+ <el-tree-select v-model="form.departmentId" :data="data" check-strictly="true" placeholder="请选择" :props="propse" style="width: 100%">
+ </el-tree-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="具体位置" size="default">
+ <el-input v-model="form.position" placeholder="请填写具体位置" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="负责人姓名" size="default">
+ <el-input v-model="form.leadingPersonName" placeholder="请填写负责人姓名" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="联系人" size="default">
+ <el-input v-model="form.connectPersonId" placeholder="请选择">
+ <template #append>
+ <el-button :icon="Search" @click="openUser(0)"></el-button>
+ </template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="录入人" size="default">
+ <el-input v-model="form.inputPersonId" placeholder="请选择">
+ <template #append>
+ <el-button :icon="Search" @click="openUser(1)"></el-button>
+ </template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="责任人" size="default">
+ <el-input v-model="form.responsibilityPersonId" placeholder="请选择">
+ <template #append>
+ <el-button :icon="Search" @click="openUser(2)"></el-button>
+ </template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="装置部位分类" size="default">
+ <el-select v-model="form.partType" placeholder="请选择" style="width: 100%">
+ <el-option label="关键装置" value="关键装置" />
+ <el-option label="重点部位" value="重点部位" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="检查周期" size="default">
+ <el-input v-model="form.checkCycle" placeholder="请选择检查周期" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="相关应急预案" size="default">
+ <el-input v-model="form.emergencePlanId" placeholder="请选择">
+ <template #append>
+ <el-button :icon="Search" @click="openPlan"></el-button>
+ </template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="主要危险有害因素" size="default">
+ <el-input v-model="form.dangerousElement" placeholder="请选择" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="易导致风险" size="default">
+ <el-input v-model="form.toDangerous" placeholder="请选择易导致风险" />
+ </el-form-item>
+ </el-col>
+
+ <el-col :span="11" :offset="2">
+ <el-form-item label="应急处置措施" size="default">
+ <el-input v-model="form.treatment" placeholder="请选择应急处置措施" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="现场图片">
+ <el-upload
+ v-model="form.scenePic"
+ 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-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="备注信息" size="default"> <el-input v-model="form.name" placeholder="请选择应急处置措施" /> </el-form-item>
+ </el-col>
+ </el-row>
+ </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-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="takecareDate" :formatter="timeDate" label="保养日期" />
+ <el-table-column align="center" prop="leadingPersonDepartmentId" label="保养负责人单位" />
+ <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>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="设备检测" name="second">
+ <el-button type="primary" size="default" @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="检测日期" />
+ <el-table-column align="center" prop="testPersonDepartmentId" label="检测人单位" />
+ <el-table-column align="center" prop="testMemo" label="检测内容" />
+ <el-table-column align="center" prop="testResult" label="检测结果" />
+ <el-table-column align="center" prop="testStatus" label="检测状态" />
+ <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>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="设备维修" name="third">
+ <el-button type="primary" size="default" @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="维修状态" />
+ <el-table-column align="center" prop="repairMemo" label="维修情况" />
+ <el-table-column align="center" prop="repairPersonId" label="维修负责人" />
+ <el-table-column align="center" prop="repairPersonDepartmentId" label="维修负责人单位" />
+ <el-table-column align="center" prop="repairStartDate" :formatter="timeDate" label="维修开始日期" />
+ <el-table-column align="center" prop="repairEndDate" :formatter="timeDate" label="维修结束日期" />
+ <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>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ <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" />
+ <el-table-column align="center" prop="checkContent" label="检查内容" />
+ <el-table-column align="center" prop="checkTarget" label="检查指标" />
+ <el-table-column align="center" prop="unit" label="单位" />
+ <el-table-column align="center" prop="checkPart" label="巡检部位" />
+ <el-table-column align="center" prop="rate" label="频次" />
+ <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>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="巡检记录" name="five">
+ <el-table :data="name" style="width: 100%">
+ <el-table-column align="center" type="selection" width="75" />
+ <el-table-column align="center" sortable prop="name" label="任务编号" />
+ <el-table-column align="center" sortable prop="address" label="任务名称" />
+ <el-table-column align="center" sortable prop="address" label="点位类型" />
+ <el-table-column align="center" sortable prop="address" label="检查频次" />
+ <el-table-column align="center" sortable prop="address" :formatter="timeDate" label="巡检时间" />
+ <el-table-column align="center" sortable prop="address" label="巡检人" />
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="保养维修标准" name="six" v-if="Dailogtype">
+ <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 type="primary">点击上传</el-button>
+ <template #tip>
+ <div class="el-upload__tip"></div>
+ </template>
+ </el-upload>
+ </el-tab-pane>
+ </el-tabs>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="resetForm">关闭</el-button>
+ <el-button type="primary" @click="submitForm">确定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <categoryDailog ref="categoryShow"></categoryDailog>
+ <RegionsDialog ref="planShow" @SearchUser="onUser"></RegionsDialog>
+ <DailogSearchUser ref="UserShow" @SearchUser="userId"></DailogSearchUser>
+ <maintenanceDailog ref="maintenanceShow" @onMain="main"></maintenanceDailog>
+ <detectDailog ref="detectShow" @onDelect="delect"></detectDailog>
+ <repairDailog ref="repairShow" @onRepair="Repair"></repairDailog>
+ <standardDailog ref="standardShow" @onStand="Stand"></standardDailog>
+</template>
+<script lang="ts">
+import { defineComponent, ref } from 'vue';
+import { Search, Plus, FullScreen } from '@element-plus/icons-vue';
+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';
+import detectDailog from './detectDailog.vue';
+import repairDailog from './repairDailog.vue';
+import standardDailog from './standardDailog.vue';
+import DailogSearchUser from '/@/components/DailogSearchUser/index.vue';
+import { ElMessage, ElMessageBox } from 'element-plus';
+import type { UploadProps, UploadUserFile } from 'element-plus';
+import { facilityManagementApi } from '/@/api/facilityManagement';
+import {goalManagementApi} from "/@/api/goalManagement";
+export default defineComponent({
+ components: { categoryDailog, RegionsDialog, DailogSearchUser, maintenanceDailog, detectDailog, repairDailog, standardDailog },
+ setup(props, { emit }) {
+ const dialogVisible = ref(false);
+ const form = ref({
+ equipmentTypeId: '',
+
+ treatment: '',
+
+ inputPersonId: '',
+
+ departmentId: '',
+
+ delRepaireDetailList: [],
+
+ delTestDetailList: [],
+
+ takecareDetailList: [],
+ checkDetailList: [],
+
+ responsibilityPersonId: '',
+
+ delTakecareStardardeDetailList: [],
+
+ connectPersonId: '',
+
+ scenePic: '',
+
+ partType: '',
+
+ toDangerous: '',
+
+ dangerousElement: '',
+
+ takecareStardardeDetailList: [
+ {
+ filePath: '',
+ },
+ ],
+ testDetailList: [],
+ checkCycle: '',
+ repaireDetailList: [],
+ delCheckStandardeDetailList: [],
+
+ leadingPersonName: '',
+
+ name: '',
+
+ delTakecareDetailList: [],
+
+ position: '',
+
+ emergencePlanId: '',
+
+ checkStandardeDetailList: [],
+ infoTpe: '',
+ delCheckStandardeDetails: '',
+
+ delTakecareStardardeDetails: '',
+
+ delTakecareDetails: '',
+
+ delRepaireDetails: '',
+
+ delTestDetails: '',
+ });
+ 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();
+ 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;
+ }
+
+ 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 activeName = ref('first');
+ 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 UserShow = ref();
+ const openUser = (type: any) => {
+ UserShow.value.openDailog(type);
+ };
+ const maintenanceShow = ref();
+ const openMaintenance = (title: string, data: any) => {
+ 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);
+ detectShow.value.openDailog(title, data);
+ };
+ const repairShow = ref();
+ const openRepair = (title: string, data: any) => {
+ 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);
+ standardShow.value.openDailog(title, data);
+ };
+ // 上传
+ 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 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('');
+
+ 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 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 full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ propse,
+ data,
+ submitForm,
+ dialogVisible,
+ Dailogtype,
+ form,
+ openDailog,
+ Search,
+ main,
+ delect,
+ Repair,
+ Stand,
+ index,
+ activeName,
+ categoryShow,
+ opencategory,
+ planShow,
+ onUser,
+ openPlan,
+ UserShow,
+ openUser,
+ maintenanceShow,
+ openMaintenance,
+ detectShow,
+ openDetect,
+ repairShow,
+ openRepair,
+ standardShow,
+ userId,
+ openStandard,
+ fileList,
+ handleRemove,
+ handlePreview,
+ handleExceed,
+ disabled,
+ titles,
+ beforeRemove,
+ imageUrl,
+ handleAvatarSuccess,
+ beforeAvatarUpload,
+ Plus,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ resetForm,
+ deleteAId,
+ deleteBId,
+ deleteCId,
+ deleteDId,
+ deleteA,
+ deleteB,
+ deleteC,
+ deleteD,
+ timeDate,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+.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/equipmentDailog/categoryDailog.vue b/src/components/equipmentDailog/categoryDailog.vue
new file mode 100644
index 0000000..4338c2d
--- /dev/null
+++ b/src/components/equipmentDailog/categoryDailog.vue
@@ -0,0 +1,161 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="选择类型/类别外键" width="50%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-row>
+ <el-col :span="17">
+ <el-form ref="ruleFormRef" :model="ruleForm" status-icon>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item size="default">
+ <el-input v-model="ruleForm.pass" placeholder="类别名称" />
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="6" :offset="1">
+ <el-form-item>
+ <el-input v-model="ruleForm.checkPass" placeholder="目标指标编号" />
+ </el-form-item>
+ </el-col> -->
+ <el-col :span="11" :offset="1">
+ <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-col>
+ </el-row>
+ </el-form>
+ <el-button size="default" :icon="Delete">清除选择</el-button>
+ <el-table :data="tableData" style="width: 100%; margin-top: 20px">
+ <el-table-column align="center">
+ <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 align="center" prop="date" label="id" />
+ <el-table-column align="center" prop="name" label="类别名称" />
+ </el-table>
+ <el-pagination
+ style="padding: 20px 0; border-bottom: 1px solid #dedede"
+ 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"
+ />
+ </el-col>
+ <el-col :span="7">
+ <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({
+ pass: '',
+ checkPass: '',
+ });
+ // 表格
+ const tableData = [
+ {
+ date: '2016-05-03',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-02',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-04',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-01',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ ];
+ 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(['2016-05-03']);
+ const handleClose = (tag: string) => {
+ dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1);
+ radio1.value = '';
+ };
+ const radio1 = ref('2016-05-03');
+ 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,
+ radio1,
+ radio,
+ Delete,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
diff --git a/src/components/equipmentDailog/detectDailog.vue b/src/components/equipmentDailog/detectDailog.vue
new file mode 100644
index 0000000..96a8f76
--- /dev/null
+++ b/src/components/equipmentDailog/detectDailog.vue
@@ -0,0 +1,155 @@
+<template>
+ <el-dialog v-model="dialogVisible" :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">
+ <template #append> <el-button :icon="Search" @click="openUser" /> </template
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="检测日期" size="default">
+ <el-date-picker v-model="form.testDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <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-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="检测内容" size="default">
+ <el-input v-model="form.testMemo" placeholder="请填写检测内容" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="检测结果" size="default">
+ <el-select v-model="form.testResult" 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">
+ <el-input v-model="form.testStatus" placeholder="请填写检测状态" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <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>
+ </span>
+ </template>
+ </el-dialog>
+ <DailogSearchUser ref="Show" @SearchUser="User"></DailogSearchUser>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import DailogSearchUser from '/@/components/DailogSearchUser/index.vue';
+export default defineComponent({
+ components: { DailogSearchUser },
+ setup(props, { emit }) {
+ const form = ref({
+ testPersonId: '',
+ testDate: '',
+ testPersonDepartmentId: '',
+ testMemo: '',
+ testResult: '',
+ testStatus: '',
+ });
+ // 开启弹窗
+ const titles = ref();
+ const disabled = ref(false);
+ const dialogVisible = ref(false);
+ const openDailog = (title: string, data: any) => {
+ dialogVisible.value = true;
+ titles.value = `${title}设备检测`;
+ if (title == '查看') {
+ disabled.value = true;
+ form.value = data;
+ } else if(title == '修改'){
+ disabled.value = false;
+ form.value = data;
+ }
+ };
+ // 开启用户弹窗
+ const Show = ref();
+ const openUser = () => {
+ Show.value.openDailog();
+ };
+ const User = (val: any) => {
+ form.value.testPersonId = val.uid;
+ };
+ // 提交
+ const submitForm = () => {
+ dialogVisible.value = false;
+ emit('onDelect', form.value);
+ form.value = {
+ testPersonId: '',
+ testDate: '',
+ testPersonDepartmentId: '',
+ testMemo: '',
+ testResult: '',
+ testStatus: '',
+ };
+ };
+ // 取消
+ const resetForm = () => {
+ dialogVisible.value = false;
+ form.value = {
+ testPersonId: '',
+ testDate: '',
+ testPersonDepartmentId: '',
+ testMemo: '',
+ testResult: '',
+ testStatus: '',
+ };
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ form,
+ titles,
+ User,
+ disabled,
+ dialogVisible,
+ openDailog,
+ submitForm,
+ resetForm,
+ Show,
+ openUser,
+ Search,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
diff --git a/src/components/equipmentDailog/maintenanceDailog.vue b/src/components/equipmentDailog/maintenanceDailog.vue
new file mode 100644
index 0000000..2b92a9a
--- /dev/null
+++ b/src/components/equipmentDailog/maintenanceDailog.vue
@@ -0,0 +1,134 @@
+<template>
+ <el-dialog :fullscreen="full" v-model="dialogVisible" :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.takecareMemo" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="保养负责人" size="default">
+ <el-input v-model="form.leadingPersonId">
+ <template #append> <el-button :icon="Search" @click="openUser" /> </template
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="保养日期" size="default">
+ <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>
+ </el-col>
+ </el-row>
+ </el-form>
+ <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>
+ </span>
+ </template>
+ </el-dialog>
+ <DailogSearchUser ref="Show" @SearchUser="User"></DailogSearchUser>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import DailogSearchUser from '/@/components/DailogSearchUser/index.vue';
+export default defineComponent({
+ components: { DailogSearchUser },
+ setup(props, { emit }) {
+ const form = ref({
+ takecareMemo: '',
+ leadingPersonId: '',
+ takecareDate: '',
+ leadingPersonDepartmentId: '',
+ });
+ // 开启弹窗
+ const titles=ref()
+ const disabled=ref(false)
+ const dialogVisible = ref(false);
+ const openDailog = (title:string,data:any) => {
+ dialogVisible.value = true;
+ titles.value=`${title}仪器仪表`
+ if(title=='查看'){
+ disabled.value=true
+ form.value=data
+ }else if(title == '修改'){
+ disabled.value=false
+ form.value=data
+ }
+ };
+ // 开启用户弹窗
+ const Show = ref();
+ const openUser = () => {
+ Show.value.openDailog();
+ };
+ const User = (val: any) => {
+ form.value.leadingPersonId = val.uid;
+ };
+ // 提交
+ const submitForm = () => {
+ dialogVisible.value = false;
+ emit('onMain', form.value);
+ form.value = {
+ takecareMemo: '',
+ leadingPersonId: '',
+ takecareDate: '',
+ leadingPersonDepartmentId: '',
+ };
+ };
+ // 取消
+ const resetForm = () => {
+ dialogVisible.value = false;
+ form.value = {
+ takecareMemo: '',
+ leadingPersonId: '',
+ takecareDate: '',
+ leadingPersonDepartmentId: '',
+ };
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ disabled,
+ titles,
+ submitForm,
+ resetForm,
+ form,
+ User,
+ dialogVisible,
+ openDailog,
+ Show,
+ openUser,
+ Search,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
diff --git a/src/components/equipmentDailog/planDailog.vue b/src/components/equipmentDailog/planDailog.vue
new file mode 100644
index 0000000..d79f2d7
--- /dev/null
+++ b/src/components/equipmentDailog/planDailog.vue
@@ -0,0 +1,156 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="选择所属重大危险源单元" width="50%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-row>
+ <el-col :span="17">
+ <el-form ref="ruleFormRef" :model="ruleForm" status-icon>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item size="default">
+ <el-input v-model="ruleForm.pass" placeholder="预案名称" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="1">
+ <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-col>
+ </el-row>
+ </el-form>
+ <el-button size="default" :icon="Delete">清除选择</el-button>
+ <el-table :data="tableData" style="width: 100%; margin-top: 20px">
+ <el-table-column align="center" width="80">
+ <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 align="center" prop="date" label="id"/> -->
+ <el-table-column align="center" prop="name" label="预案名称" />
+ </el-table>
+ <el-pagination
+ style="padding: 20px 0; border-bottom: 1px solid #dedede"
+ 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"
+ />
+ </el-col>
+ <el-col :span="7">
+ <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({
+ pass: '',
+ checkPass: '',
+ });
+ // 表格
+ const tableData = [
+ {
+ date: '2016-05-03',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-02',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-04',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-01',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ ];
+ 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(['2016-05-03']);
+ const handleClose = (tag: string) => {
+ dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1);
+ radio1.value = '';
+ };
+ const radio1 = ref('2016-05-03');
+ 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,
+ radio1,
+ radio,
+ Delete,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/components/equipmentDailog/regionDailog.vue b/src/components/equipmentDailog/regionDailog.vue
new file mode 100644
index 0000000..66c37a4
--- /dev/null
+++ b/src/components/equipmentDailog/regionDailog.vue
@@ -0,0 +1,156 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="选择区域名称" width="50%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-row>
+ <el-col :span="17">
+ <el-form ref="ruleFormRef" :model="ruleForm" status-icon>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item size="default">
+ <el-input v-model="ruleForm.pass" placeholder="风险区域名称" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="1">
+ <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-col>
+ </el-row>
+ </el-form>
+ <el-button size="default" :icon="Delete">清除选择</el-button>
+ <el-table :data="tableData" style="width: 100%; margin-top: 20px">
+ <el-table-column align="center" width="80">
+ <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 align="center" prop="date" label="id"/> -->
+ <el-table-column align="center" prop="name" label="风险区域名称" />
+ </el-table>
+ <el-pagination
+ style="padding: 20px 0; border-bottom: 1px solid #dedede"
+ 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"
+ />
+ </el-col>
+ <el-col :span="7">
+ <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({
+ pass: '',
+ checkPass: '',
+ });
+ // 表格
+ const tableData = [
+ {
+ date: '2016-05-03',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-02',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-04',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-01',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ ];
+ 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(['2016-05-03']);
+ const handleClose = (tag: string) => {
+ dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1);
+ radio1.value = '';
+ };
+ const radio1 = ref('2016-05-03');
+ 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,
+ radio1,
+ radio,
+ Delete,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/components/equipmentDailog/repairDailog.vue b/src/components/equipmentDailog/repairDailog.vue
new file mode 100644
index 0000000..bb40c91
--- /dev/null
+++ b/src/components/equipmentDailog/repairDailog.vue
@@ -0,0 +1,165 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" :before-close="resetForm" :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.exceptionInfo" placeholder="请填写设施异常项" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="维修状态" size="default">
+ <el-select v-model="form.repairStatus" placeholder="请选择" style="width: 100%">
+ <el-option label="维修中" value="1" />
+ <el-option label="已修好" value="2" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="维修情况" size="default">
+ <el-input v-model="form.repairMemo" placeholder="请填写维修情况" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="维修负责人" size="default">
+ <el-input v-model="form.repairPersonId" placeholder="请选择">
+ <template #append> <el-button :icon="Search" @click="openUser" /> </template
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <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-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="维修开始日期" size="default">
+ <el-date-picker v-model="form.repairStartDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="维修结束日期" size="default">
+ <el-date-picker v-model="form.repairEndDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择日期时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <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>
+ </span>
+ </template>
+ </el-dialog>
+ <DailogSearchUser ref="Show" @SearchUser="User"></DailogSearchUser>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import DailogSearchUser from '/@/components/DailogSearchUser/index.vue';
+export default defineComponent({
+ components: { DailogSearchUser },
+ setup(props, { emit }) {
+ const form = ref({
+ exceptionInfo: '',
+ repairStatus: '',
+ repairMemo: '',
+ repairPersonId: '',
+ repairPersonDepartmentId: "",
+ repairStartDate: '',
+ repairEndDate: '',
+ });
+ // 开启弹窗
+ const titles = ref();
+ const disabled = ref(false);
+ const dialogVisible = ref(false);
+ const openDailog = (title: string, data: any) => {
+ dialogVisible.value = true;
+ titles.value = `${title}设备维修`;
+ if (title == '查看') {
+ disabled.value = true;
+ form.value = data;
+ } else if(title == '修改') {
+ disabled.value = false;
+ form.value = data;
+ }
+ };
+ // 开启用户弹窗
+ const Show = ref();
+ const openUser = () => {
+ Show.value.openDailog();
+ };
+ const User = (val: any) => {
+ form.value.repairPersonId = val.uid;
+ };
+ // 提交
+ const submitForm = () => {
+ dialogVisible.value = false;
+ emit('onRepair', form.value);
+ form.value = {
+ exceptionInfo: '',
+ repairStatus: '',
+ repairMemo: '',
+ repairPersonId: '',
+ repairPersonDepartmentId: "",
+ repairStartDate: '',
+ repairEndDate: '',
+ };
+ };
+ // 取消
+ const resetForm = () => {
+ dialogVisible.value = false;
+ form.value = {
+ exceptionInfo: '',
+ repairStatus: '',
+ repairMemo: '',
+ repairPersonId: '',
+ repairPersonDepartmentId: "",
+ repairStartDate: '',
+ repairEndDate: '',
+ };
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ form,
+ titles,
+ disabled,
+ dialogVisible,
+ openDailog,
+ Show,
+ User,
+ openUser,
+ submitForm,
+ resetForm,
+ Search,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/components/equipmentDailog/standardDailog.vue b/src/components/equipmentDailog/standardDailog.vue
new file mode 100644
index 0000000..85febd2
--- /dev/null
+++ b/src/components/equipmentDailog/standardDailog.vue
@@ -0,0 +1,143 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" :before-close="resetForm" :title="titles" width="50%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-form :model="form" label-width="120px" :disabled="disabled">
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="序号" size="default">
+ <el-input v-model="form.indexNum" placeholder="请填写序号" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2" size="default">
+ <el-form-item label="检查内容">
+ <el-input v-model="form.checkContent" placeholder="请填写检查内容" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="检查指标" size="default">
+ <el-input v-model="form.checkTarget" placeholder="请填写检查指标" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="单位" size="default">
+ <el-input v-model="form.unit" placeholder="请填写单位" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="巡检部位" size="default">
+ <el-input v-model="form.checkPart" placeholder="请填写巡检部位" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="频次" size="default">
+ <el-input v-model="form.rate" placeholder="请填写频次" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <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>
+ </span>
+ </template>
+ </el-dialog>
+ <!-- <DailogSearchUser ref="Show"></DailogSearchUser> -->
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import DailogSearchUser from '/@/components/DailogSearchUser/index.vue';
+export default defineComponent({
+ components: { DailogSearchUser },
+ setup(props, { emit }) {
+ const form = ref({
+ indexNum: '',
+ checkContent: '',
+ checkTarget: '',
+ unit: '',
+ checkPart: "",
+ rate: '',
+ });
+ // 开启弹窗
+ const titles = ref();
+ const disabled = ref(false);
+ const dialogVisible = ref(false);
+ const openDailog = (title: string, data: any) => {
+ dialogVisible.value = true;
+ titles.value = `${title}检查标准设置`;
+ if (title == '查看') {
+ disabled.value = true;
+ form.value = data;
+ } else if(title=='修改'){
+ disabled.value = false;
+ form.value = data;
+ }
+ };
+ // 开启用户弹窗
+ const Show = ref();
+ const openUser = () => {
+ Show.value.openDailog();
+ };
+ // 提交
+ const submitForm = () => {
+ dialogVisible.value = false;
+ emit('onStand', form.value);
+ form.value = {
+ indexNum: '',
+ checkContent: '',
+ checkTarget: '',
+ unit: '',
+ checkPart: "",
+ rate: '',
+ };
+ };
+ // 取消
+ const resetForm = () => {
+ dialogVisible.value = false;
+ form.value = {
+ indexNum: '',
+ checkContent: '',
+ checkTarget: '',
+ unit: '',
+ checkPart: "",
+ rate: '',
+ };
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ form,
+ titles,
+ disabled,
+ dialogVisible,
+ openDailog,
+ submitForm,
+ resetForm,
+ Show,
+ openUser,
+ Search,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/components/regionsDialog/index.vue b/src/components/regionsDialog/index.vue
new file mode 100644
index 0000000..8ecb8ab
--- /dev/null
+++ b/src/components/regionsDialog/index.vue
@@ -0,0 +1,129 @@
+<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 type="selection" width="55" />
+ <el-table-column align="center" prop="name" label="风险区域名称"/>
+ </el-table>
+ <el-pagination
+ style="padding:20px 0;"
+ 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"
+ />
+ </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 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);
+ };
+ //全屏
+ 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,
+ 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/updata/updata.vue b/src/components/updata/updata.vue
new file mode 100644
index 0000000..5031621
--- /dev/null
+++ b/src/components/updata/updata.vue
@@ -0,0 +1,89 @@
+<template>
+ <el-dialog v-model="dialogVisible" title="导入Excel" width="50%" :fullscreen="full" draggable>
+ <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>下载模板</el-button>
+ <el-button 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, toRefs, reactive, defineComponent, computed } 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,
+ full,
+ toggleFullscreen,
+ FullScreen
+ };
+ },
+});
+</script>
+<style scoped>
+</style>
\ No newline at end of file
diff --git a/src/components/uploaderImg/index.vue b/src/components/uploaderImg/index.vue
new file mode 100644
index 0000000..b769025
--- /dev/null
+++ b/src/components/uploaderImg/index.vue
@@ -0,0 +1,65 @@
+<template>
+ <el-upload
+ v-model:file-list="fileList"
+ action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
+ list-type="picture-card"
+ :on-preview="handlePictureCardPreview"
+ :on-remove="handleRemove"
+ :on-success="successFile"
+ :on-error="errorFile"
+ >
+ <el-icon><Plus /></el-icon>
+ </el-upload>
+
+ <el-dialog v-model="dialogVisible">
+ <img w-full :src="dialogImageUrl" alt="Preview Image" />
+ </el-dialog>
+</template>
+<script lang="ts">
+ import { ref,defineComponent } from 'vue'
+ import { Plus } from '@element-plus/icons-vue'
+ import type { UploadProps, UploadUserFile } from 'element-plus'
+
+ export default defineComponent({
+ props: {
+ // svg 图标组件名字
+ fileList: {
+ type: Array,
+ },
+ },
+ components: {
+ Plus
+ },
+ setup() {
+
+ const dialogImageUrl = ref('')
+ const dialogVisible = ref(false)
+
+ const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
+ console.log(uploadFile, uploadFiles)
+ }
+
+ const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => {
+ dialogImageUrl.value = uploadFile.url!
+ dialogVisible.value = true
+ }
+
+ const successFile = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
+ console.log(response, uploadFile,uploadFiles)
+ }
+ const errorFile = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
+ console.log(error, uploadFile,uploadFiles)
+ }
+
+
+ return {
+ dialogImageUrl,
+ dialogVisible,
+ handleRemove,
+ handlePictureCardPreview,
+ successFile,
+ errorFile
+ };
+ },
+ });
+</script>
\ No newline at end of file
diff --git a/src/components/userCheckbox/index.vue b/src/components/userCheckbox/index.vue
new file mode 100644
index 0000000..5fc0b7a
--- /dev/null
+++ b/src/components/userCheckbox/index.vue
@@ -0,0 +1,422 @@
+<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
+ @node-click="handleNodeClick"
+ :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="ruleForm" class="demo-form-inline">
+ <el-form-item>
+ <el-input size="default" v-model="ruleForm.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}"
+ @cell-click="checkbox"
+ >
+ <el-table-column type="selection" width="55">
+ <template #default="scope">
+ <el-checkbox-group v-model="checkbox1">
+ <el-checkbox :label="scope.row.uid" size="large">{{ null }}</el-checkbox>
+ </el-checkbox-group>
+ </template>
+ </el-table-column>
+ <el-table-column prop="realName" label="登录名" width="100" show-overflow-tooltip sortable />
+ <el-table-column prop="username" label="用户名" width="100" show-overflow-tooltip sortable />
+ <el-table-column prop="address" label="所属机构" width="115" show-overflow-tooltip sortable />
+ <el-table-column prop="address" label="所属部门" width="115" show-overflow-tooltip sortable/>
+ <el-table-column align="center" prop="type" label="状态" />
+<!-- <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"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ </el-main>
+ </el-container>
+ <div style="width: 200px;">
+ <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.realName }}
+ </el-tag>
+ </div>
+ </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,
+ onMounted,
+} from 'vue';
+
+import type {
+ ElTree,
+ // ElTable,
+} from 'element-plus'
+import {
+ ElMessage,
+} from 'element-plus';
+import {
+ FullScreen
+} from '@element-plus/icons-vue'
+import {goalManagementApi} from "/@/api/goalManagement";
+interface Tree {
+ id: number
+ label: string
+ children?: Tree[]
+}
+// interface User {
+// date: string
+// name: string
+// address: string
+// }
+export default defineComponent({
+ name: 'userSelections',
+ components: {
+ // Search,
+ },
+ setup(props, { emit }) {
+ const isShowDialog = ref(false)
+ // 打开弹窗
+ const openDialog = (type:any) => {
+ types.value=type
+ isShowDialog.value = true;
+ };
+ // 关闭弹窗
+ const closeDialog = () => {
+ isShowDialog.value = false;
+ };
+ // 取消
+ const onCancel = () => {
+ closeDialog();
+ };
+
+ //部门树
+ const department = () => {
+ goalManagementApi()
+ .getTreedepartment()
+ .then((res) => {
+ if (res.data.code == 200) {
+ data.value = res.data.data;
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ };
+ const defaultProps = {
+ label: 'depName',
+ children: 'children',
+ value: 'depId',
+ }
+ //部门树查询
+ const filterText = ref('')
+ const treeRef = ref<InstanceType<typeof ElTree>>() //实例化
+ watch(filterText, (val) => {
+ treeRef.value!.filter(val);
+ });
+ // 节点过滤模糊搜索
+ const filterNode = (depName: string, data: Tree) => {
+ if (!depName) return true
+ return data.depName.includes(depName)
+ }
+ onMounted(() => {
+ department();
+ });
+ //左边树形部分点击获取回调
+ const names = ref<any>();
+ const handleNodeClick = (data: Tree) => {
+ goalManagementApi()
+ .getManName(data.depId)
+ .then((res) => {
+ if (res.data.code == 200) {
+ tableData.value=res.data.data
+ }else{
+ ElMessage.error(res.data.msg);
+ }
+ });
+ };
+
+
+ // 监听搜索关键字改变
+ watch(filterText, (val) => {
+ treeRef.value!.filter(val)
+ })
+ // 树形结构内容
+ const data = ref()
+
+
+
+
+ // const item = {
+ // date: '孙刚',
+ // name: '龚赛健',
+ // address: '综合办公室',
+ // tag: '正常',
+ // }
+ // const tableData = ref(Array.from({ length: 7 }).fill(item))
+ // 定义表单搜索
+ const ruleForm = reactive({
+ name: '',
+ })
+ const types=ref()
+ // 搜索按钮
+ const onSubmit = () => {
+ let obj = JSON.parse(JSON.stringify(dynamicTags.value));
+ emit('SearchUser', obj[0],types.value);
+ isShowDialog.value = false;
+ }
+
+ // const multipleTableRef = ref<InstanceType<typeof ElTable>>()
+ // 右方点击添加后显示标签
+ const dynamicTags = ref(['']);
+ const handleClose = () => {
+ dynamicTags.value.push(checkbox1.value)
+ // dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1);
+ checkbox1.value = '';
+ };
+ const checkbox1 = ref('');
+ const checkbox = (event: any) => {
+ dynamicTags.value[0] = event;
+ };
+ const tableData = ref();
+ // 分页
+ 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,
+ ruleForm,
+ onSubmit,
+ // multipleTableRef,
+ handleClose,
+ dynamicTags,
+ handleSizeChange,
+ handleCurrentChange,
+ pageIndex,
+ pageSize,
+ toggleFullscreen,
+ FullScreen,
+ full,
+ names,
+ handleNodeClick,
+ types,
+ checkbox1,
+ checkbox,
+ };
+ },
+});
+</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/userSelections/index.vue b/src/components/userSelections/index.vue
new file mode 100644
index 0000000..8fdbb3f
--- /dev/null
+++ b/src/components/userSelections/index.vue
@@ -0,0 +1,446 @@
+<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}"
+ @cell-click="radio"
+ >
+ <el-table-column align="center" width="55">
+ <template #default="scope">
+ <el-radio-group v-model="radio1">
+ <el-radio :label="scope.row.id" 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(props,{emit}) {
+ const isShowDialog = ref(false)
+ // 打开弹窗
+ const openDialog = () => {
+ isShowDialog.value = true;
+ };
+ // 关闭弹窗
+ const closeDialog = () => {
+ isShowDialog.value = false;
+ };
+ // 取消
+ const onCancel = () => {
+ let obj=JSON.parse(JSON.stringify(dynamicTags.value))
+ emit("SearchUser",obj[0])
+ 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/main.ts b/src/main.ts
index 5635729..18ef496 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -21,6 +21,6 @@
directive(app);
other.elSvg(app);
-app.use(pinia).use(router).use(ElementPlus, { i18n: i18n.global.t, locale: zhCn}).use(i18n).use(VueGridLayout).mount('#app');
+app.use(pinia).use(router).use(ElementPlus, { i18n: i18n.global.t, locale: zhCn }).use(i18n).use(VueGridLayout).mount('#app');
app.config.globalProperties.mittBus = mitt();
diff --git a/src/router/index.ts b/src/router/index.ts
index 712f6b8..59c04d3 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -66,31 +66,35 @@
// 路由加载前
router.beforeEach(async (to, from, next) => {
- NProgress.configure({ showSpinner: false });
- if (to.meta.title) NProgress.start();
- const token = Session.get('token');
- if (to.path === '/login' && !token) {
+ if (to.path === '/intelligentMap') {
next();
- NProgress.done();
} else {
- if (!token) {
- next(`/login?redirect=${to.path}¶ms=${JSON.stringify(to.query ? to.query : to.params)}`);
- Session.clear();
- NProgress.done();
- } else if (token && to.path === '/login') {
- next('/homeMenu');
+ NProgress.configure({ showSpinner: false });
+ if (to.meta.title) NProgress.start();
+ const token = Session.get('token');
+ if (to.path === '/login' && !token) {
+ next();
NProgress.done();
} else {
- const storesRoutesList = useRoutesList(pinia);
- const { routesList } = storeToRefs(storesRoutesList);
- if (routesList.value.length === 0) {
- // 后端控制路由:路由数据初始化,防止刷新时丢失
- await initBackEndControlRoutes();
- // 动态添加路由:防止非首页刷新时跳转回首页的问题
- // 确保 addRoute() 时动态添加的路由已经被完全加载上去
- next({ ...to, replace: true });
+ if (!token) {
+ next(`/login?redirect=${to.path}¶ms=${JSON.stringify(to.query ? to.query : to.params)}`);
+ Session.clear();
+ NProgress.done();
+ } else if (token && to.path === '/login') {
+ next('/homeMenu');
+ NProgress.done();
} else {
- next();
+ const storesRoutesList = useRoutesList(pinia);
+ const { routesList } = storeToRefs(storesRoutesList);
+ if (routesList.value.length === 0) {
+ // 后端控制路由:路由数据初始化,防止刷新时丢失
+ await initBackEndControlRoutes();
+ // 动态添加路由:防止非首页刷新时跳转回首页的问题
+ // 确保 addRoute() 时动态添加的路由已经被完全加载上去
+ next({ ...to, replace: true });
+ } else {
+ next();
+ }
}
}
}
diff --git a/src/router/route.ts b/src/router/route.ts
index 699646d..3bcf1c9 100644
--- a/src/router/route.ts
+++ b/src/router/route.ts
@@ -79,5 +79,13 @@
title: '首页',
isKeepAlive: false
}
+ },
+ {
+ path: '/intelligentMap',
+ name: 'intelligentMap',
+ component: () => import('/@/views/intellectInspect/intelligentMap/index.vue'),
+ meta: {
+ title: '巡检路线'
+ }
}
];
diff --git a/src/utils/request.ts b/src/utils/request.ts
index 62a638f..9b5d13d 100644
--- a/src/utils/request.ts
+++ b/src/utils/request.ts
@@ -6,7 +6,7 @@
// var jsonBig = require('json-bigint')({ "storeAsString": true });
// 配置新建一个 axios 实例
const service = axios.create({
- baseURL: import.meta.env.VITE_API_URL as any,
+ // baseURL: import.meta.env.VITE_API_URL as any,
timeout: 50000,
headers: { 'Content-Type': 'application/json' }
});
@@ -14,7 +14,7 @@
service.interceptors.request.use(
(config) => {
for (let key in config.data) {
- if (config.data[key] == '') {
+ if (config.data[key] == '' && config.data[key] !== 0) {
config.data[key] = null;
}
}
diff --git a/src/views/accidentManagementSystem/accidentExpress/component/numberOfCasualties.vue b/src/views/accidentManagementSystem/accidentExpress/component/numberOfCasualties.vue
new file mode 100644
index 0000000..c586c23
--- /dev/null
+++ b/src/views/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/views/accidentManagementSystem/accidentExpress/component/openAdd.vue b/src/views/accidentManagementSystem/accidentExpress/component/openAdd.vue
new file mode 100644
index 0000000..50a59d7
--- /dev/null
+++ b/src/views/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/views/accidentManagementSystem/accidentExpress/index.vue b/src/views/accidentManagementSystem/accidentExpress/index.vue
new file mode 100644
index 0000000..ce1a6df
--- /dev/null
+++ b/src/views/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/views/accidentManagementSystem/accidentReport/component/openAdd.vue b/src/views/accidentManagementSystem/accidentReport/component/openAdd.vue
new file mode 100644
index 0000000..de8cecb
--- /dev/null
+++ b/src/views/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/views/accidentManagementSystem/accidentReport/index.vue b/src/views/accidentManagementSystem/accidentReport/index.vue
new file mode 100644
index 0000000..6694d4b
--- /dev/null
+++ b/src/views/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/views/accidentManagementSystem/workInjuryDeclaration/component/accidentName.vue b/src/views/accidentManagementSystem/workInjuryDeclaration/component/accidentName.vue
new file mode 100644
index 0000000..d349645
--- /dev/null
+++ b/src/views/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/views/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue b/src/views/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue
new file mode 100644
index 0000000..581cd61
--- /dev/null
+++ b/src/views/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/views/accidentManagementSystem/workInjuryDeclaration/component/openEdit.vue b/src/views/accidentManagementSystem/workInjuryDeclaration/component/openEdit.vue
new file mode 100644
index 0000000..f3ef29b
--- /dev/null
+++ b/src/views/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/views/accidentManagementSystem/workInjuryDeclaration/index.vue b/src/views/accidentManagementSystem/workInjuryDeclaration/index.vue
new file mode 100644
index 0000000..503246d
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/abolishDialog/abolishDialog.vue b/src/views/contingencyManagement/abolishDialog/abolishDialog.vue
new file mode 100644
index 0000000..c0ee5e8
--- /dev/null
+++ b/src/views/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="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('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/views/contingencyManagement/abolishDialog/component/formInformationTop.vue b/src/views/contingencyManagement/abolishDialog/component/formInformationTop.vue
new file mode 100644
index 0000000..ef75063
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/abolishDialog/component/formInformationTops.vue b/src/views/contingencyManagement/abolishDialog/component/formInformationTops.vue
new file mode 100644
index 0000000..68ae8a6
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/abolishDialog/component/lowerPlate.vue b/src/views/contingencyManagement/abolishDialog/component/lowerPlate.vue
new file mode 100644
index 0000000..cbb82fb
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue b/src/views/contingencyManagement/contingency/component/addEmergencyPersonnel.vue
new file mode 100644
index 0000000..de19c3f
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/contingency/component/dialog.vue b/src/views/contingencyManagement/contingency/component/dialog.vue
new file mode 100644
index 0000000..add861a
--- /dev/null
+++ b/src/views/contingencyManagement/contingency/component/dialog.vue
@@ -0,0 +1,200 @@
+<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
new file mode 100644
index 0000000..3effe20
--- /dev/null
+++ b/src/views/contingencyManagement/contingency/component/editEmergencyPersonnel.vue
@@ -0,0 +1,240 @@
+<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
new file mode 100644
index 0000000..4ae9379
--- /dev/null
+++ b/src/views/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="公司"></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="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/views/contingencyManagement/contingency/component/openSee.vue b/src/views/contingencyManagement/contingency/component/openSee.vue
new file mode 100644
index 0000000..066f66d
--- /dev/null
+++ b/src/views/contingencyManagement/contingency/component/openSee.vue
@@ -0,0 +1,425 @@
+<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/component/upData.vue b/src/views/contingencyManagement/contingency/component/upData.vue
new file mode 100644
index 0000000..cc3e2d0
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/contingency/index.vue b/src/views/contingencyManagement/contingency/index.vue
new file mode 100644
index 0000000..1be771a
--- /dev/null
+++ b/src/views/contingencyManagement/contingency/index.vue
@@ -0,0 +1,389 @@
+<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="shanghai"></el-option>
+ <el-option label="分厂-车间" value="beijing"></el-option>
+ <el-option label="工序-班组等" value="beijing"></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></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 '/@/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';
+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/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/approvalProgress.vue b/src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/approvalProgress.vue
new file mode 100644
index 0000000..07f4e5f
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue b/src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/flowChart.vue
new file mode 100644
index 0000000..8e18978
--- /dev/null
+++ b/src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/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/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/rectificationDialog.vue b/src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/component/rectificationDialog.vue
new file mode 100644
index 0000000..bc66e00
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/index.vue b/src/views/contingencyManagement/emergencyDrill/drillImplementationEvaluation/index.vue
new file mode 100644
index 0000000..bba7134
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue b/src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue
new file mode 100644
index 0000000..094d1b1
--- /dev/null
+++ b/src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/openAdd.vue
@@ -0,0 +1,628 @@
+<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/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/regionsDialog.vue b/src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/regionsDialog.vue
new file mode 100644
index 0000000..a6cdd4e
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/userSelect.vue b/src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/component/userSelect.vue
new file mode 100644
index 0000000..c3a4156
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/index.vue b/src/views/contingencyManagement/emergencyDrill/implementationOfEmergencyDrill/index.vue
new file mode 100644
index 0000000..767809d
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/flowChart.vue
new file mode 100644
index 0000000..8e18978
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue
new file mode 100644
index 0000000..2e903f9
--- /dev/null
+++ b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/openAdd.vue
@@ -0,0 +1,572 @@
+<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="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
+ 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/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/component/regionsDialog.vue
new file mode 100644
index 0000000..ba15f44
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue
new file mode 100644
index 0000000..5f85b72
--- /dev/null
+++ b/src/views/contingencyManagement/emergencyDrill/releaseOfDrillPlan/index.vue
@@ -0,0 +1,392 @@
+<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></el-table-column>
+ <el-table-column prop="drillLevel" label="演练级别" show-overflow-tooltip sortable></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/views/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue b/src/views/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue
new file mode 100644
index 0000000..afc2ebf
--- /dev/null
+++ b/src/views/contingencyManagement/emergencyPlanStartRecord/component/openSee.vue
@@ -0,0 +1,198 @@
+<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" />
+ <EditEmergencyPersonnel ref="editRef" />
+ </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 EditEmergencyPersonnel from "/@/views/contingencyManagement/contingency/component/editEmergencyPersonnel.vue";
+import {emergencyPlanLogApi} from "/@/api/contingencyManagement/emergencyPlanLog";
+
+export default defineComponent({
+ name: 'openEdit',
+ components: {
+ DailogSearchUser,
+ AddEmergencyPersonnel,
+ EditEmergencyPersonnel
+ },
+ 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/views/contingencyManagement/emergencyPlanStartRecord/component/selectEmergencyPlan.vue b/src/views/contingencyManagement/emergencyPlanStartRecord/component/selectEmergencyPlan.vue
new file mode 100644
index 0000000..da6b207
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyPlanStartRecord/index.vue b/src/views/contingencyManagement/emergencyPlanStartRecord/index.vue
new file mode 100644
index 0000000..29f589c
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyResources/emergencyMaterialsInspection/component/openAdd.vue b/src/views/contingencyManagement/emergencyResources/emergencyMaterialsInspection/component/openAdd.vue
new file mode 100644
index 0000000..3137291
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyResources/emergencyMaterialsInspection/index.vue b/src/views/contingencyManagement/emergencyResources/emergencyMaterialsInspection/index.vue
new file mode 100644
index 0000000..5e14343
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyResources/emergencySupplies/component/inspect.vue b/src/views/contingencyManagement/emergencyResources/emergencySupplies/component/inspect.vue
new file mode 100644
index 0000000..0953d51
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyResources/emergencySupplies/component/maintain.vue b/src/views/contingencyManagement/emergencyResources/emergencySupplies/component/maintain.vue
new file mode 100644
index 0000000..b30bcc2
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyResources/emergencySupplies/component/openAdd.vue b/src/views/contingencyManagement/emergencyResources/emergencySupplies/component/openAdd.vue
new file mode 100644
index 0000000..17defc0
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyResources/emergencySupplies/component/openEdit.vue b/src/views/contingencyManagement/emergencyResources/emergencySupplies/component/openEdit.vue
new file mode 100644
index 0000000..f5b2e61
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyResources/emergencySupplies/component/personInCharge.vue b/src/views/contingencyManagement/emergencyResources/emergencySupplies/component/personInCharge.vue
new file mode 100644
index 0000000..2e719ea
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyResources/emergencySupplies/component/regionsCheckbox.vue b/src/views/contingencyManagement/emergencyResources/emergencySupplies/component/regionsCheckbox.vue
new file mode 100644
index 0000000..d8d1973
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyResources/emergencySupplies/index.vue b/src/views/contingencyManagement/emergencyResources/emergencySupplies/index.vue
new file mode 100644
index 0000000..3f9dc77
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue b/src/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/component/openAdd.vue
new file mode 100644
index 0000000..7bcfdce
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/index.vue b/src/views/contingencyManagement/emergencyResources/maintenanceOfEmergencyMaterials/index.vue
new file mode 100644
index 0000000..3544d06
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/panManagement/component/abolishLibrary.vue b/src/views/contingencyManagement/panManagement/component/abolishLibrary.vue
new file mode 100644
index 0000000..f13523f
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/panManagement/component/approval.vue b/src/views/contingencyManagement/panManagement/component/approval.vue
new file mode 100644
index 0000000..b6db937
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/panManagement/component/approvalProcess.vue b/src/views/contingencyManagement/panManagement/component/approvalProcess.vue
new file mode 100644
index 0000000..2356a0b
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/panManagement/component/initiateApproval.vue b/src/views/contingencyManagement/panManagement/component/initiateApproval.vue
new file mode 100644
index 0000000..eb2afa2
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/panManagement/component/openAdd.vue b/src/views/contingencyManagement/panManagement/component/openAdd.vue
new file mode 100644
index 0000000..a5d978a
--- /dev/null
+++ b/src/views/contingencyManagement/panManagement/component/openAdd.vue
@@ -0,0 +1,440 @@
+<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="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.treeSelect"
+ :data="data"
+ multiple
+ :render-after-expand="true"
+ :props="propse"
+ show-checkbox
+ clearable
+ check-strictly
+ />
+ <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="综合应急预案"></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="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="公司级"></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="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;
+ }
+ });
+ }
+ };
+ //日期选择器
+ const releaseDate = ref('');
+ // 上传附件
+ const fileList = ref<UploadUserFile[]>([]);
+ //部门树
+ const department = () => {
+ goalManagementApi()
+ .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();
+ } 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;
+ ruleForm.value = {
+ name: '', // 预案名称
+ type: '', //预案类型
+ associatedDanger: '', // 危险源关联
+ level: '', // 预案级别
+ authorUid: '', // 编写人
+ authorName: '',
+ authorDeptId: '', // 编写部门
+ releaseDate: '', // 发布实施日期
+ fileList: [
+ {
+ fileUrl: 'url',
+ fileName: 'name',
+ },
+ ],
+ emergencyTeam: '', //应急队伍
+ areaList: [], //区域列表
+ teamList: [
+ ],
+ deptList: [],
+ abolishStatus: false,
+ };
+ formEl.resetFields();
+ };
+ // 应急队伍弹窗
+ const Shows = ref();
+ const daiInpt = (data: any) => {
+ Shows.value.openDailog(data);
+ };
+ const SearchUser = (e: 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 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/views/contingencyManagement/panManagement/component/startUp.vue b/src/views/contingencyManagement/panManagement/component/startUp.vue
new file mode 100644
index 0000000..49f5500
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/panManagement/component/upData.vue b/src/views/contingencyManagement/panManagement/component/upData.vue
new file mode 100644
index 0000000..cc3e2d0
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/panManagement/index.vue b/src/views/contingencyManagement/panManagement/index.vue
new file mode 100644
index 0000000..0daee03
--- /dev/null
+++ b/src/views/contingencyManagement/panManagement/index.vue
@@ -0,0 +1,613 @@
+<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></el-table-column>
+ <el-table-column prop="level" 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="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/views/contingencyManagement/processForm/component/formInformationTop.vue b/src/views/contingencyManagement/processForm/component/formInformationTop.vue
new file mode 100644
index 0000000..ef75063
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/processForm/component/formInformationTops.vue b/src/views/contingencyManagement/processForm/component/formInformationTops.vue
new file mode 100644
index 0000000..53eed6a
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/processForm/component/lowerPlate.vue b/src/views/contingencyManagement/processForm/component/lowerPlate.vue
new file mode 100644
index 0000000..cbb82fb
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/processForm/processForm.vue b/src/views/contingencyManagement/processForm/processForm.vue
new file mode 100644
index 0000000..98218a0
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/releaseOfDrillStart/component/formInformationTop.vue b/src/views/contingencyManagement/releaseOfDrillStart/component/formInformationTop.vue
new file mode 100644
index 0000000..ef75063
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/releaseOfDrillStart/component/formInformationTops.vue b/src/views/contingencyManagement/releaseOfDrillStart/component/formInformationTops.vue
new file mode 100644
index 0000000..8a1f2a5
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/releaseOfDrillStart/component/lowerPlate.vue b/src/views/contingencyManagement/releaseOfDrillStart/component/lowerPlate.vue
new file mode 100644
index 0000000..cbb82fb
--- /dev/null
+++ b/src/views/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/views/contingencyManagement/releaseOfDrillStart/releaseOfDrillStart.vue b/src/views/contingencyManagement/releaseOfDrillStart/releaseOfDrillStart.vue
new file mode 100644
index 0000000..98218a0
--- /dev/null
+++ b/src/views/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/views/doublePrevent/riskCheckManage/checkTaskManage/checkWork/index.vue b/src/views/doublePrevent/riskCheckManage/checkTaskManage/checkWork/index.vue
index a452740..f10235d 100644
--- a/src/views/doublePrevent/riskCheckManage/checkTaskManage/checkWork/index.vue
+++ b/src/views/doublePrevent/riskCheckManage/checkTaskManage/checkWork/index.vue
@@ -188,8 +188,8 @@
});
// 初始化表格数据
const initWorkTableData = async () => {
- state.workData.params.checkWorkType = state.workData.params.checkWorkType === '' ? null : state.workData.params.checkWorkType;
- state.workData.params.checkWorkStatus = state.workData.params.checkWorkStatus === '' ? null : state.workData.params.checkWorkStatus;
+ // state.workData.params.checkWorkType = state.workData.params.checkWorkType === '' ? null : state.workData.params.checkWorkType;
+ // state.workData.params.checkWorkStatus = state.workData.params.checkWorkStatus === '' ? null : state.workData.params.checkWorkStatus;
let res = await workApi().getWorkList(state.workData.params);
if (res.data.code === '200') {
state.workData.data = res.data.data;
diff --git a/src/views/doublePrevent/riskCheckManage/hiddenManagement/hiddenReport/index.vue b/src/views/doublePrevent/riskCheckManage/hiddenManagement/hiddenReport/index.vue
index 220b8f8..6dba9f5 100644
--- a/src/views/doublePrevent/riskCheckManage/hiddenManagement/hiddenReport/index.vue
+++ b/src/views/doublePrevent/riskCheckManage/hiddenManagement/hiddenReport/index.vue
@@ -149,7 +149,7 @@
loading: false,
params: {
pageIndex: 1,
- pageSize: 15,
+ pageSize: 10,
dangerLevel: null,
dangerSource: null,
dangerStatus: null,
diff --git a/src/views/doublePrevent/riskLevel/action/components/riskControlMeasureDialog.vue b/src/views/doublePrevent/riskLevel/action/components/riskControlMeasureDialog.vue
index 72818ae..77ca4ba 100644
--- a/src/views/doublePrevent/riskLevel/action/components/riskControlMeasureDialog.vue
+++ b/src/views/doublePrevent/riskLevel/action/components/riskControlMeasureDialog.vue
@@ -121,11 +121,14 @@
measureDesc: null
},
riskControlMeasureFormRules: {
- riskCode: [{ required: true, message: '请填写安全风险分析对象编码', trigger: 'blur' }],
- riskUnitName: [{ required: true, message: '请填写安全风险分析单元名称', trigger: 'blur' }],
- liableDepId: [{ required: true, message: '请选择责任部门', trigger: 'change' }],
- liablePersonId: [{ required: true, message: '请选择责任人', trigger: 'change' }],
- produceDeviceId: [{ required: true, message: '请选择生产装置', trigger: 'change' }]
+ riskEventId: [{ required: true, message: '请选择风险事件', trigger: 'change' }],
+ controlMeasureCode: [{ required: true, message: '请填写风险措施编码', trigger: 'blur' }],
+ controlType: [{ required: true, message: '请选择管控方式', trigger: 'change' }],
+ checkContent: [{ required: true, message: '请填写管控内容', trigger: 'blur' }],
+ classify1: [{ required: true, message: '请选择管控措施分类1', trigger: 'change' }],
+ classify2: [{ required: true, message: '请选择管控措施分类2', trigger: 'change' }],
+ classify3: [{ required: true, message: '请填写管控措施分类3', trigger: 'blur' }],
+ measureDesc: [{ required: true, message: '请填写措施说明', trigger: 'blur' }]
}
});
diff --git a/src/views/doublePrevent/riskLevel/action/index.vue b/src/views/doublePrevent/riskLevel/action/index.vue
index 79efcfe..b5827cb 100644
--- a/src/views/doublePrevent/riskLevel/action/index.vue
+++ b/src/views/doublePrevent/riskLevel/action/index.vue
@@ -114,7 +114,7 @@
}
interface classifyOneType {
id: number;
- classifyOneType: string;
+ riskMeasureName: string;
}
interface SafetyRiskEventDataState {}
diff --git a/src/views/doublePrevent/riskLevel/device/index.vue b/src/views/doublePrevent/riskLevel/device/index.vue
index 4dbb256..a8208fe 100644
--- a/src/views/doublePrevent/riskLevel/device/index.vue
+++ b/src/views/doublePrevent/riskLevel/device/index.vue
@@ -3,6 +3,10 @@
<el-card shadow="hover">
<div class="system-user-search mb15">
<div class="basic-line">
+ <span>生产装置名称:</span>
+ <el-input v-model="productionDeviceData.params.produceDeviceName" class="input-box"> </el-input>
+ </div>
+ <div class="basic-line">
<span>风险等级:</span>
<el-select v-model="productionDeviceData.params.riskLevel" clearable filterable class="input-box" placeholder="请选择风险等级">
<el-option v-for="item in levelList" :key="item.id" :label="item.name" :value="item.id"></el-option>
diff --git a/src/views/doublePrevent/riskLevel/event/components/safetyRiskEventDialog.vue b/src/views/doublePrevent/riskLevel/event/components/safetyRiskEventDialog.vue
index 80d88b3..88b9e1b 100644
--- a/src/views/doublePrevent/riskLevel/event/components/safetyRiskEventDialog.vue
+++ b/src/views/doublePrevent/riskLevel/event/components/safetyRiskEventDialog.vue
@@ -12,7 +12,7 @@
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="安全风险事件名称" prop="riskEventName">
- <el-input class="input-length" v-model.trim="safetyRiskEventForm.riskEventName" placeholder="请输入生产装置名称" clearable></el-input>
+ <el-input class="input-length" v-model.trim="safetyRiskEventForm.riskEventName" placeholder="请输入请输入安全风险事件名称" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
diff --git a/src/views/facilityManagement/EquipmentStatistics/index.vue b/src/views/facilityManagement/EquipmentStatistics/index.vue
new file mode 100644
index 0000000..07a359f
--- /dev/null
+++ b/src/views/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/views/facilityManagement/InstrumentationInformation/index.vue b/src/views/facilityManagement/InstrumentationInformation/index.vue
new file mode 100644
index 0000000..e64297f
--- /dev/null
+++ b/src/views/facilityManagement/InstrumentationInformation/index.vue
@@ -0,0 +1,374 @@
+<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" 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, 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,
+ 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/views/facilityManagement/ProductionEquipment/index.vue b/src/views/facilityManagement/ProductionEquipment/index.vue
new file mode 100644
index 0000000..ab8551e
--- /dev/null
+++ b/src/views/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/views/facilityManagement/deviceType/component/Dailog.vue b/src/views/facilityManagement/deviceType/component/Dailog.vue
new file mode 100644
index 0000000..576135f
--- /dev/null
+++ b/src/views/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/views/facilityManagement/deviceType/index.vue b/src/views/facilityManagement/deviceType/index.vue
new file mode 100644
index 0000000..11958ec
--- /dev/null
+++ b/src/views/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/views/facilityManagement/keyEquipment/index.vue b/src/views/facilityManagement/keyEquipment/index.vue
new file mode 100644
index 0000000..52374a7
--- /dev/null
+++ b/src/views/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/views/facilityManagement/safetyEquipment/index.vue b/src/views/facilityManagement/safetyEquipment/index.vue
new file mode 100644
index 0000000..576cfb7
--- /dev/null
+++ b/src/views/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/views/goalManagement/Goalsummary/index.vue b/src/views/goalManagement/Goalsummary/index.vue
new file mode 100644
index 0000000..4d241e4
--- /dev/null
+++ b/src/views/goalManagement/Goalsummary/index.vue
@@ -0,0 +1,213 @@
+<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.year" placeholder="年度" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="4" >
+ <el-form-item size="default">
+ <el-tree-select v-model="ruleForm.searchParams.departmentId" :data="data" class="w100" 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>
+ <div class="minCenter">
+ <div class="btns">
+ <p>汇总日期:2022-07-04 23:00:07</p>
+ <div>
+ <el-button type="primary" size="default" :icon="Download">导出</el-button>
+ </div>
+ </div>
+ <el-table :data="tableData" style="width: 100%">
+ <el-table-column label="责任部门" align="center">
+ <template #default="scope">{{ scope.row.departmentId }}</template>
+ </el-table-column>
+ <el-table-column property="targetValue" align="center" label="安全目标指标" />
+ <el-table-column property="examineValue" label="考核指标" align="center" show-overflow-tooltip />
+ <el-table-column property="yiYue" label="1月" align="center" show-overflow-tooltip />
+ <el-table-column property="february" label="2月" align="center" show-overflow-tooltip />
+ <el-table-column property="erYue" label="3月" align="center" show-overflow-tooltip />
+ <el-table-column property="sanYue" label="4月" align="center" show-overflow-tooltip />
+ <el-table-column property="siYue" label="5月" align="center" show-overflow-tooltip />
+ <el-table-column property="wuYue" label="6月" align="center" show-overflow-tooltip />
+ <el-table-column property="liuYue" label="7月" align="center" show-overflow-tooltip />
+ <el-table-column property="qiYue" label="8月" align="center" show-overflow-tooltip />
+ <el-table-column property="baYue" label="9月" align="center" show-overflow-tooltip />
+ <el-table-column property="jiuYue" label="10月" align="center" show-overflow-tooltip />
+ <el-table-column property="shiYue" label="11月" align="center" show-overflow-tooltip />
+ <el-table-column property="shiyiYue" label="12月" align="center" show-overflow-tooltip />
+ <el-table-column label="考核结果" align="center">
+ <template #default="scope">{{ scope.row.examineResult }}</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>
+ </div>
+</template>
+<script lang="ts">
+import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View } from '@element-plus/icons-vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ components: { ElButton, ElInput },
+ setup() {
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ year: '', //年度
+ departmentId: '', //责任部门
+ },
+ });
+ // 下方导航与表格
+ const tableData = ref([]);
+ const currentPage4 = ref();
+ const pageSize4 = ref();
+ const total = ref();
+ const resetForm = () => {
+ ruleForm.searchParams.year = '';
+ ruleForm.searchParams.departmentId = '';
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .gettargetDutySummaryList(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 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 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: [],
+ },
+ ],
+ },
+ ];
+ return {
+ ruleForm,
+ tableData,
+ currentPage4,
+ pageSize4,
+ total,
+ data,
+ resetForm,
+ listApi,
+ handleSizeChange,
+ handleCurrentChange,
+ Plus,
+ Delete,
+ Upload,
+ Download,
+ Refresh,
+ View,
+ };
+ },
+});
+</script>
+<style scoped>
+.topTitle {
+ background-color: #fff;
+ padding: 20px 0px 20px 0px;
+ margin-bottom: 10px;
+}
+.minCenter {
+ width: 100%;
+ background-color: #fff;
+ margin-top: 10px;
+ padding: 0 20px;
+}
+.btns {
+ padding: 10px 0px 10px 0px;
+ display: flex;
+ justify-content: left;
+}
+.btns p {
+ font-size: 18px;
+ line-height: 40px;
+ margin-right: 20px;
+}
+.pages {
+ padding: 20px 0;
+ display: flex;
+ justify-content: right;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/IncentiveRecording/component/DailogAdd.vue b/src/views/goalManagement/IncentiveRecording/component/DailogAdd.vue
new file mode 100644
index 0000000..ec8fdd2
--- /dev/null
+++ b/src/views/goalManagement/IncentiveRecording/component/DailogAdd.vue
@@ -0,0 +1,177 @@
+<template>
+ <el-dialog v-model="dialogVisible" :before-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="24">
+ <el-form-item label="员工姓名" size="default">
+ <el-input v-model="form.personId" placeholder="请选择">
+ <template #append> <el-button :icon="Search" @click="daiInpts" /> </template
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="奖惩名称" size="default">
+ <el-input v-model="form.rewardPunishmentStandardId" placeholder="请选择">
+ <template #append> <el-button :icon="Search" @click="daiInpt" /> </template
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="11" :offset="2">
+ <el-form-item label="奖惩类型" size="default">
+ <el-input disabled v-model="form.personId" />
+ </el-form-item>
+ </el-col> -->
+ </el-row>
+ <!-- <el-row>
+ <el-col :span="24">
+ <el-form-item label="奖惩内容" size="default">
+ <el-input disabled v-model="form.personId" placeholder="请填写奖惩内容" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="依据" size="default">
+ <el-input disabled v-model="form.personId" placeholder="请填写奖惩依据" />
+ </el-form-item>
+ </el-col>
+ </el-row> -->
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="备注信息">
+ <el-input v-model="form.memo" type="textarea" />
+ </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 type="primary" @click="submitForm" size="default">确定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <DailogSearchUser ref="Show" @SearchUser="UserId"></DailogSearchUser>
+ <DailogSearch ref="Shows" @backNum="numberId"></DailogSearch>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import DailogSearch from './DailogSearch.vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+import DailogSearchUser from '/@/components/DailogSearchUser/index.vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus';
+export default defineComponent({
+ components: { DailogSearch, DailogSearchUser },
+ setup(props, { emit }) {
+ const dialogVisible = ref<boolean>(false);
+ const form = ref({
+ rewardPunishmentStandardId: '', //奖惩标准/外键
+ memo: '', ////备注信息
+ personId: "", ////员工(多个用逗号隔开)
+ });
+ const titles = ref();
+ const disabled = ref(false);
+ // 打开弹窗
+ const openDailog = (title: string, value: any, id: number) => {
+ dialogVisible.value = true;
+ titles.value = `${title}奖惩标准设定`;
+ disabled.value = title == '查看' ? true : false;
+ if (title == '查看' || title == '修改')
+ goalManagementApi()
+ .getrewardPunishmentDetail(id)
+ .then((res) => {
+ if (res.data.code == 200) {
+ form.value = res.data.data;
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ };
+ // 提交
+ const submitForm = () => {
+ dialogVisible.value = false;
+ goalManagementApi()
+ .getrewardPunishmentAddOrUpdate(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 = {
+ rewardPunishmentStandardId: '', //奖惩标准/外键
+ memo: '', ////备注信息
+ personId: "", ////员工(多个用逗号隔开)
+ };
+ };
+ // 取消
+ const resetForm = () => {
+ dialogVisible.value = false;
+ form.value = {
+ rewardPunishmentStandardId: '', //奖惩标准/外键
+ memo: '', ////备注信息
+ personId: "", ////员工(多个用逗号隔开)
+ };
+ };
+
+ // 安全目标指标弹窗
+ const Shows = ref();
+ const daiInpt = () => {
+ Shows.value.openDailog();
+ };
+ const Show = ref();
+ const daiInpts = () => {
+ Show.value.openDailog();
+ };
+ const numberId=(val:any)=>{
+ console.log(val)
+ form.value.rewardPunishmentStandardId=val.id
+ }
+ const UserId=(val:any)=>{
+ form.value.personId=val.id
+ }
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ dialogVisible,
+ UserId,
+ form,
+ titles,
+ disabled,
+ openDailog,
+ submitForm,
+ numberId,
+ resetForm,
+ Shows,
+ daiInpt,
+ Show,
+ daiInpts,
+ full,
+ toggleFullscreen,
+ Search,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/IncentiveRecording/component/DailogSearch.vue b/src/views/goalManagement/IncentiveRecording/component/DailogSearch.vue
new file mode 100644
index 0000000..3cdcb66
--- /dev/null
+++ b/src/views/goalManagement/IncentiveRecording/component/DailogSearch.vue
@@ -0,0 +1,206 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="奖惩类型" width="50%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-row>
+ <el-col :span="17">
+ <el-form ref="ruleFormRef" :model="ruleForm" status-icon>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item size="default">
+ <el-input v-model="ruleForm.searchParams.standardType" placeholder="奖惩类型" />
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="6" :offset="1">
+ <el-form-item>
+ <el-input v-model="ruleForm.checkPass" placeholder="目标指标编号" />
+ </el-form-item>
+ </el-col> -->
+ <el-col :span="11" :offset="1">
+ <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-button size="default" :icon="Delete" @click="clear">清除选择</el-button>
+ <el-table :data="tableData" style="width: 100%; margin-top: 20px" @cell-click="radio">
+ <el-table-column align="center">
+ <template #default="scope">
+ <el-radio-group v-model="radio1">
+ <el-radio :label="scope.row.id" size="large">{{ null }}</el-radio>
+ </el-radio-group>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" prop="qname" label="奖惩名称" width="180" />
+ <el-table-column align="center" label="奖惩类型" width="180">
+ <template #default="scope">
+ <span v-if="scope.row.standardType==1">奖励</span>
+ <span v-if="scope.row.standardType==2">惩罚</span>
+ <span></span>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" prop="content" label="奖惩内容" />
+ </el-table>
+ <el-pagination
+ style="padding: 20px 0; border-bottom: 1px solid #dedede"
+ 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"
+ />
+ </el-col>
+ <el-col :span="7">
+ <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.qname }}
+ </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 { Delete, FullScreen } from '@element-plus/icons-vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ setup(props,{emit}) {
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ standardType: '', ////奖惩类型 1:奖励 2:惩罚
+ },
+ });
+ // 重置
+ const resetForm = () => {
+ ruleForm.searchParams.standardType = '';
+ listApi();
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .getrewardPunishmentStandardList(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);
+ }
+ });
+ };
+ //
+ const handleClick = (val: any) => {
+ let targetType = JSON.parse(JSON.stringify(val));
+ ruleForm.searchParams.standardType = targetType.paneName;
+ listApi();
+ };
+ onMounted(() => {
+
+ });
+ // 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 dialogVisible=ref(false)
+ const openDailog=()=>{
+ dialogVisible.value=true
+ listApi();
+ }
+ // 右方点击添加后显示标签
+ 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 clear=()=>{
+ dynamicTags.value=['']
+ radio1.value=""
+ }
+ const submitForm=()=>{
+ let obj=JSON.parse(JSON.stringify(dynamicTags.value))
+ emit("backNum",obj[0])
+ dialogVisible.value = false
+ }
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ submitForm,
+ radio,
+ radio1,
+ clear,
+ dialogVisible,
+ openDailog,
+ ruleForm,
+ resetForm,
+ tableData,
+ currentPage4,
+ pageSize4,
+ total,
+ handleSizeChange,
+ handleCurrentChange,
+ dynamicTags,
+ listApi,
+ handleClick,
+ handleClose,
+ Delete,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
diff --git a/src/views/goalManagement/IncentiveRecording/index.vue b/src/views/goalManagement/IncentiveRecording/index.vue
new file mode 100644
index 0000000..b9a9fa9
--- /dev/null
+++ b/src/views/goalManagement/IncentiveRecording/index.vue
@@ -0,0 +1,294 @@
+<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.personId" placeholder="请选择被奖惩者">
+ <template #append>
+ <el-button :icon="Search" @click="openSearch" />
+ </template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.checkPass" 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>
+ <div class="minCenter">
+ <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" plain @click="handleSelectionChange">删除 </el-button>
+ </div>
+ <div>
+ <!-- <el-button size="default" :icon="Download"></el-button>
+ <el-button size="default" :icon="Refresh"></el-button> -->
+ </div>
+ </div>
+ <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" @selection-change="handleSelectionChange">
+ <el-table-column type="selection" align="center" width="55" />
+ <el-table-column property="createTime" align="center" label="奖惩日期" :formatter="timeDate" sortable />
+ <el-table-column label="奖惩类型" align="center" sortable>
+ <template #default="scope">
+ <span v-if="scope.row.standardType == 1">奖励</span>
+ <span v-if="scope.row.standardType == 2">惩罚</span>
+ </template>
+ </el-table-column>
+ <el-table-column property="personId" align="center" label="被奖惩者" sortable />
+ <el-table-column property="content" label="奖惩内容" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="reason" label="奖惩依据" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" sortable show-overflow-tooltip>
+ <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>
+ <DailogAdd ref="openAdd" @navAddorUpdata="onAddorUpdata"></DailogAdd>
+ <DailogSearchUser ref="openUser" @SearchUser="userId"></DailogSearchUser>
+ </div>
+ </div>
+</template>
+<script lang="ts">
+import DailogAdd from './component/DailogAdd.vue';
+import {timeDate} from '/@/assets/index.ts'
+import DailogSearchUser from '/@/components/DailogSearchUser/index.vue';
+import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View, EditPen, Search } from '@element-plus/icons-vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ components: { ElButton, ElInput, DailogAdd, DailogSearchUser },
+ setup() {
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ personId: '', ////员工
+ },
+ });
+ // 重置
+ const resetForm = () => {
+ ruleForm.searchParams.personId = '';
+ listApi();
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .getrewardPunishmentList(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);
+ }
+ });
+ };
+ //
+ const handleClick = (val: any) => {
+ let targetType = JSON.parse(JSON.stringify(val));
+ ruleForm.searchParams.personId = targetType.paneName;
+ listApi();
+ };
+ 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, ruleForm.searchParams.personId, id);
+ };
+ // 删除
+ const onDelete = (id: number) => {
+ let arr=[]
+ arr.push(id)
+ ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then(() => {
+ goalManagementApi()
+ .getrewardPunishmentDelete(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(() => {
+ goalManagementApi()
+ .getrewardPunishmentDelete(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 openUser = ref();
+ const openSearch = () => {
+ openUser.value.openDailog();
+ };
+ const userId = (val: any) => {
+ ruleForm.searchParams.personId = val.uid;
+ };
+ return {
+ timeDate,
+ ruleForm,
+ userId,
+ resetForm,
+ listApi,
+ handleClick,
+ onAddorUpdata,
+ tableData,
+ currentPage4,
+ pageSize4,
+ total,
+ handleSizeChange,
+ handleCurrentChange,
+ openD,
+ onDelete,
+ openAdd,
+ warning,
+ danger,
+ deletAll,
+ openSearch,
+ handleSelectionChange,
+ onDeleteAll,
+ openUser,
+ Plus,
+ Delete,
+ Upload,
+ Download,
+ Refresh,
+ View,
+ EditPen,
+ Search,
+ };
+ },
+});
+</script>
+<style scoped>
+.minCenter {
+ width: 100%;
+ background-color: #fff;
+ margin-top: 10px;
+ padding: 0 20px;
+}
+
+.topTitle {
+ background-color: #fff;
+ padding: 20px 0px 20px 0px;
+ margin-bottom: 10px;
+}
+
+.btns {
+ padding: 10px 0px 10px 0px;
+ display: flex;
+ justify-content: space-between;
+}
+
+.pages {
+ padding: 20px 0;
+ display: flex;
+ justify-content: right;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/Incentivestandard/component/DailogAdd.vue b/src/views/goalManagement/Incentivestandard/component/DailogAdd.vue
new file mode 100644
index 0000000..3d5abeb
--- /dev/null
+++ b/src/views/goalManagement/Incentivestandard/component/DailogAdd.vue
@@ -0,0 +1,147 @@
+<template>
+ <el-dialog v-model="dialogVisible" :before-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-select v-model="form.standardType" style="width: 100%" placeholder="请选择">
+ <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">
+ <el-input v-model="form.content" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="奖惩名称" size="default">
+ <el-input v-model="form.qName" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="依据" size="default">
+ <el-input v-model="form.reason" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="备注信息">
+ <el-input v-model="form.memo" type="textarea" />
+ </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 type="primary" @click="submitForm" size="default">确定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus';
+export default defineComponent({
+ setup(props, { emit }) {
+ let Shows = ref(false);
+ const dialogVisible = ref<boolean>(false);
+ const form = ref({
+ qName: "", ////奖惩名称
+ reason: "", ////依据
+ memo: "", ////备注信息
+ content: "", ////奖惩内容
+ standardType: null ////奖惩类型 1:奖励 2:惩罚
+ });
+ const titles = ref();
+ const disabled = ref(false);
+ // 打开弹窗
+ const openDailog = (title: string, value: any, id: number) => {
+ dialogVisible.value = true;
+ titles.value = `${title}奖惩标准设定`;
+ disabled.value = title == '查看' ? true : false;
+ if (title == '查看' || title == '修改')
+ goalManagementApi()
+ .getrewardPunishmentStandardDetail(id)
+ .then((res) => {
+ if (res.data.code == 200) {
+ form.value = res.data.data;
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ };
+ // 提交
+ const submitForm = () => {
+ dialogVisible.value = false;
+ goalManagementApi()
+ .getrewardPunishmentStandardaddOrUpdate(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 = {
+ qName: "", ////奖惩名称
+ reason: "", ////依据
+ memo: "", ////备注信息
+ content: "", ////奖惩内容
+ standardType: null, ////奖惩类型 1:奖励 2:惩罚
+ }
+ };
+ // 取消
+ const resetForm = () => {
+ dialogVisible.value = false;
+ form.value = {
+ qName: "", ////奖惩名称
+ reason: "", ////依据
+ memo: "", ////备注信息
+ content: "", ////奖惩内容
+ standardType: null, ////奖惩类型 1:奖励 2:惩罚
+ };
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+
+ return {
+ form,
+ titles,
+ dialogVisible,
+ openDailog,
+ disabled,
+ Search,
+ submitForm,
+ resetForm,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/Incentivestandard/index.vue b/src/views/goalManagement/Incentivestandard/index.vue
new file mode 100644
index 0000000..a8f3fed
--- /dev/null
+++ b/src/views/goalManagement/Incentivestandard/index.vue
@@ -0,0 +1,282 @@
+<template>
+ <div>
+ <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle">
+ <el-row>
+ <el-col :span="4">
+ <el-form-item>
+ <el-select v-model="ruleForm.searchParams.standardType" size="default" style="width: 100%" placeholder="请选择">
+ <el-option label="奖励" value="1" />
+ <el-option label="惩罚" value="2" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.checkPass" 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>
+ <div class="minCenter">
+ <div class="btns">
+ <div>
+ <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')" >新建</el-button>
+ <el-button size="default" type="warning" :disabled="warning" plain :icon="EditPen" @click="openD">修改 </el-button>
+ <el-button size="default" type="danger" :disabled="danger" :icon="Delete" plain @click="handleSelectionChange">删除</el-button>
+ </div>
+ <div>
+ <!-- <el-button size="default" :icon="Upload" @click="upButton"></el-button>
+ <el-button size="default" :icon="Download"></el-button>
+ <el-button size="default" :icon="Refresh"></el-button> -->
+ </div>
+ </div>
+ <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%">
+ <el-table-column type="selection" align="center" width="55" />
+ <el-table-column property="qname" align="center" label="奖惩名称" sortable />
+ <el-table-column property="name" align="center" label="奖惩类型" sortable>
+ <template #default="scope">
+ <span v-if="scope.row.standardType == 1">奖励</span>
+ <span v-if="scope.row.standardType == 2">惩罚</span>
+ </template>
+ </el-table-column>
+ <el-table-column property="content" label="奖惩内容" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="reason" label="依据" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="memo" label="备注信息" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" sortable show-overflow-tooltip>
+ <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>
+ <DailogAdd ref="openAdd" @navAddorUpdata="onAddorUpdata"></DailogAdd>
+ <!-- <upData ref="upShow"></upData> -->
+ </div>
+ </div>
+</template>
+<script lang="ts">
+import DailogAdd from './component/DailogAdd.vue';
+import upData from '../../../components/updata/updata.vue';
+import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue';
+import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ components: { ElButton, ElInput, upData, DailogAdd },
+ setup() {
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ standardType: '', ////奖惩类型 1:奖励 2:惩罚
+ },
+ });
+ // 重置
+ const resetForm = () => {
+ ruleForm.searchParams.standardType = '';
+ listApi();
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .getrewardPunishmentStandardList(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);
+ }
+ });
+ };
+ //
+ const handleClick = (val: any) => {
+ let targetType = JSON.parse(JSON.stringify(val));
+ ruleForm.searchParams.standardType = targetType.paneName;
+ listApi();
+ };
+ 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, ruleForm.searchParams.standardType, id);
+ };
+ // 删除
+ const onDelete = (id: number) => {
+ let arr=[]
+ arr.push(id)
+ ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then(() => {
+ goalManagementApi()
+ .getrewardPunishmentStandardDelete(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(() => {
+ goalManagementApi()
+ .getrewardPunishmentStandardDelete(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',
+ // });
+ });
+ };
+ return {
+ ruleForm,
+ resetForm,
+ listApi,
+ handleClick,
+ onAddorUpdata,
+ tableData,
+ currentPage4,
+ pageSize4,
+ total,
+ handleSizeChange,
+ handleCurrentChange,
+ openAdd,
+ openD,
+ onDelete,
+ warning,
+ danger,
+ deletAll,
+ handleSelectionChange,
+ onDeleteAll,
+ Plus,
+ Delete,
+ Upload,
+ Download,
+ Refresh,
+ View,
+ EditPen,
+ };
+ },
+});
+</script>
+<style scoped>
+.minCenter {
+ width: 100%;
+ background-color: #fff;
+ margin-top: 10px;
+ padding: 0 20px;
+}
+
+.topTitle {
+ background-color: #fff;
+ padding: 20px 0px 20px 0px;
+ margin-bottom: 10px;
+}
+
+.btns {
+ padding: 10px 0px 10px 0px;
+ display: flex;
+ justify-content: space-between;
+}
+
+.pages {
+ padding: 20px 0;
+ display: flex;
+ justify-content: right;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/TargetBook/component/DailogAdd.vue b/src/views/goalManagement/TargetBook/component/DailogAdd.vue
new file mode 100644
index 0000000..3f572d3
--- /dev/null
+++ b/src/views/goalManagement/TargetBook/component/DailogAdd.vue
@@ -0,0 +1,206 @@
+<template>
+ <el-dialog v-model="dialogVisible" :before-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="24">
+ <el-form-item label="岗位" size="default">
+ <el-input v-model="form.jobId" placeholder="请选择">
+ <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="责任书签订日期" size="default">
+ <el-date-picker v-model="form.signDate" style="width:100%" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择日期时间" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="备注信息">
+ <el-input v-model="form.memo" type="textarea" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <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"
+ multiple
+ :on-preview="handlePreview"
+ :on-remove="handleRemove"
+ :before-remove="beforeRemove"
+ :limit="3"
+ :on-exceed="handleExceed"
+ >
+ <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" size="default">关闭</el-button>
+ <el-button type="primary" @click="submitForm" size="default">确定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <DailogSearch ref="Shows" @backNum="IdNumber"></DailogSearch>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import DailogSearch from './DailogSearch.vue';
+import { ElMessage, ElMessageBox } from 'element-plus';
+import type { UploadProps, UploadUserFile } from 'element-plus';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ components: { DailogSearch },
+ setup(props, { emit }) {
+ const dialogVisible = ref<boolean>(false);
+ const form = ref({
+ indexNum: '', //目标指标编号
+ memo: '', ////备注信息
+ signDate: '', //责任书签订日期
+ extraFile: '666', //责任书附件
+ jobId: '', //岗位
+ });
+ const titles = ref();
+ const disabled = ref(false);
+ // 打开弹窗
+ const openDailog = (title: string, value: any, id: number) => {
+ dialogVisible.value = true;
+ titles.value =`${title}目标责任书`;
+ disabled.value = title == '查看' ? true : false;
+ if (title == '查看' || title == '修改')
+ goalManagementApi()
+ .gettargetDutyfileInfoDetail(id)
+ .then((res) => {
+ if (res.data.code == 200) {
+ form.value = res.data.data;
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ };
+ // 提交
+ const submitForm = () => {
+ dialogVisible.value = false;
+ goalManagementApi()
+ .gettargetDutyfileInfoAddorUpdata(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 = {
+ indexNum: '', //目标指标编号
+ memo: '', ////备注信息
+ signDate: '', //责任书签订日期
+ extraFile: '666', //责任书附件
+ jobId: '', //岗位
+ };
+ };
+ // 取消
+ const resetForm = () => {
+ dialogVisible.value = false;
+ form.value = {
+ indexNum: '', //目标指标编号
+ memo: '', ////备注信息
+ signDate: '', //责任书签订日期
+ extraFile: '666', //责任书附件
+ jobId: '', //岗位
+ };
+ };
+ // 安全目标指标弹窗
+ const Shows = ref();
+ const daiInpt = () => {
+ Shows.value.openDailog();
+ };
+ const IdNumber=(val:any)=>{
+ form.value.jobId=val.id
+ }
+ // 点击上传
+ 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 full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ IdNumber,
+ dialogVisible,
+ form,
+ disabled,
+ titles,
+ openDailog,
+ daiInpt,
+ submitForm,
+ resetForm,
+ Shows,
+ Search,
+ fileList,
+ handleRemove,
+ handlePreview,
+ handleExceed,
+ beforeRemove,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/TargetBook/component/DailogSearch.vue b/src/views/goalManagement/TargetBook/component/DailogSearch.vue
new file mode 100644
index 0000000..1801078
--- /dev/null
+++ b/src/views/goalManagement/TargetBook/component/DailogSearch.vue
@@ -0,0 +1,175 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="选择岗位" width="50%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-row>
+ <el-col :span="17">
+ <el-form ref="ruleFormRef" :model="ruleForm" status-icon>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item size="default">
+ <el-input v-model="ruleForm.pass" placeholder="岗位名称" />
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="6" :offset="1">
+ <el-form-item>
+ <el-input v-model="ruleForm.checkPass" placeholder="目标指标编号" />
+ </el-form-item>
+ </el-col> -->
+ <el-col :span="11" :offset="1">
+ <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-col>
+ </el-row>
+ </el-form>
+ <el-button size="default" :icon="Delete">清除选择</el-button>
+ <el-table :data="tableData" style="width: 100%; margin-top: 20px" @cell-click="radio">
+ <el-table-column align="center">
+ <template #default="scope">
+ <el-radio-group v-model="radio1">
+ <el-radio :label="scope.row.id" size="large">{{ null }}</el-radio>
+ </el-radio-group>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" prop="date" label="岗位名称" />
+ </el-table>
+ <el-pagination
+ style="padding: 20px 0; border-bottom: 1px solid #dedede"
+ 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"
+ />
+ </el-col>
+ <el-col :span="7">
+ <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.id }}
+ </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 } from 'vue';
+import { Delete, FullScreen } from '@element-plus/icons-vue';
+export default defineComponent({
+ setup(props,{emit}) {
+ const dialogVisible = ref<boolean>(false);
+ const openDailog = () => {
+ dialogVisible.value = true;
+ };
+ // 搜索条件
+ const ruleForm = reactive({
+ pass: '',
+ checkPass: '',
+ });
+ // 表格
+ const tableData = [
+ { id:1,
+ date: '2016-05-03',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ id:2,
+ date: '2016-05-02',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ id:3,
+ date: '2016-05-04',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ { id:4,
+ date: '2016-05-01',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ ];
+ 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 clear=()=>{
+ dynamicTags.value=['']
+ radio1.value=""
+ }
+ const submitForm=()=>{
+ let obj=JSON.parse(JSON.stringify(dynamicTags.value))
+ emit("backNum",obj[0])
+ dialogVisible.value = false
+ }
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ radio1,
+ radio,
+ clear,
+ dialogVisible,
+ openDailog,
+ ruleForm,
+ tableData,
+ pageSize4,
+ handleSizeChange,
+ handleCurrentChange,
+ dynamicTags,
+ handleClose,
+ submitForm,
+ Delete,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
diff --git a/src/views/goalManagement/TargetBook/index.vue b/src/views/goalManagement/TargetBook/index.vue
new file mode 100644
index 0000000..870165a
--- /dev/null
+++ b/src/views/goalManagement/TargetBook/index.vue
@@ -0,0 +1,281 @@
+<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.jobId" placeholder="请选择岗位">
+ <template #append> <el-button :icon="Search" @click="openSearch" /> </template
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.checkPass" 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>
+ <div class="minCenter">
+ <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" plain @click="onDeleteAll">删除</el-button>
+ </div>
+ <div>
+ <!-- <el-button size="default" :icon="Download"></el-button>
+ <el-button size="default" :icon="Refresh"></el-button> -->
+ </div>
+ </div>
+ <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="index" label="序号" align="center" width="70" />
+ <el-table-column property="jobId" align="center" label="岗位" sortable />
+ <el-table-column property="signDate" align="center" label="责任书签订日期" :formatter="timeDate" sortable />
+ <el-table-column property="extraFile" align="center" label="附件" sortable />
+ <el-table-column property="memo" label="备注信息" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" style="width: 300px">
+ <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>
+ <DailogAdd ref="openAdd" @navAddorUpdata="onAddorUpdata"></DailogAdd>
+ <DailogSearch ref="openUser"></DailogSearch>
+ </div>
+ </div>
+</template>
+<script lang="ts">
+import DailogAdd from './component/DailogAdd.vue';
+import {timeDate} from '/@/assets/index.ts'
+import DailogSearch from './component/DailogSearch.vue';
+import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View, EditPen, Search } from '@element-plus/icons-vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults';
+export default defineComponent({
+ components: { ElButton, ElInput, DailogAdd, DailogSearch },
+ setup() {
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ jobId: '', ////岗位号/外键
+ },
+ });
+ // 重置
+ const resetForm = () => {
+ ruleForm.searchParams.jobId = '';
+ listApi();
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .gettargetDutyfileInfoList(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);
+ }
+ });
+ };
+ //
+ const handleClick = (val: any) => {
+ let targetType = JSON.parse(JSON.stringify(val));
+ ruleForm.searchParams.jobId = targetType.paneName;
+ listApi();
+ };
+ 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, ruleForm.searchParams.jobId, id);
+ };
+ // 删除
+ const onDelete = (id: number) => {
+ let arr=[]
+ arr.push(id)
+ ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then(() => {
+ goalManagementApi()
+ .gettargetDutyfileInfoDelete(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(() => {
+ goalManagementApi()
+ .gettargetDutyfileInfoDelete(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 openUser = ref();
+ const openSearch = () => {
+ openUser.value.openDailog();
+ };
+ return {
+ ruleForm,
+ resetForm,
+ listApi,
+ handleClick,
+ onAddorUpdata,
+ tableData,
+ currentPage4,
+ pageSize4,
+ total,
+ handleSizeChange,
+ handleCurrentChange,
+ openAdd,
+ openD,
+ onDelete,
+ warning,
+ danger,
+ deletAll,
+ handleSelectionChange,
+ onDeleteAll,
+ openUser,
+ openSearch,
+ timeDate,
+ Plus,
+ Delete,
+ Upload,
+ Download,
+ Refresh,
+ View,
+ EditPen,
+ Search,
+ };
+ },
+});
+</script>
+<style scoped>
+.minCenter {
+ width: 100%;
+ background-color: #fff;
+ margin-top: 10px;
+ padding: 0 20px;
+}
+.topTitle {
+ background-color: #fff;
+ padding: 20px 0px 20px 0px;
+ margin-bottom: 10px;
+}
+.btns {
+ padding: 10px 0px 10px 0px;
+ display: flex;
+ justify-content: space-between;
+}
+.pages {
+ padding: 20px 0;
+ display: flex;
+ justify-content: right;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/index.vue b/src/views/goalManagement/index.vue
new file mode 100644
index 0000000..8d45119
--- /dev/null
+++ b/src/views/goalManagement/index.vue
@@ -0,0 +1,14 @@
+<template>
+ <router-view></router-view>
+</template>
+
+<script>
+export default {
+ name: "index"
+}
+</script>
+
+<style scoped>
+
+</style>
+
diff --git a/src/views/goalManagement/performanceAppraisal/component/DailogAq.vue b/src/views/goalManagement/performanceAppraisal/component/DailogAq.vue
new file mode 100644
index 0000000..af27844
--- /dev/null
+++ b/src/views/goalManagement/performanceAppraisal/component/DailogAq.vue
@@ -0,0 +1,367 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" @close="handleClose(ruleFormRef)" :title="titles" width="50%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-form :model="form" label-width="120px" ref="ruleFormRef" :rules="rules">
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="考核标题" size="default" prop="title">
+ <el-input v-model="form.title" placeholder="请填写考核标题"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="考核日期" size="default" prop="examineDate">
+ <el-date-picker v-model="form.examineDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="合格分数" size="default" prop="acceptanceNumber">
+ <el-input v-model="form.acceptanceNumber" disabled />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="总分" size="default" prop="examineTotalNumber">
+ <el-input v-model="form.examineTotalNumber" disabled />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="考核部门" size="default" prop="examineDepartmentId">
+ <el-tree-select
+ v-model="form.examineDepartmentId"
+ :data="data"
+ class="w100"
+ @node-click="nameData1"
+ :props="propse"
+ check-strictly
+ placeholder="请选择"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="考核人" size="default" prop="examinePersonName">
+ <el-input v-model="form.examinePersonName">
+ <template #append> <el-button :icon="Search" @click="daiInpt(1)" /></template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="被考核部门" size="default" prop="beExaminedDepartmentId">
+ <el-tree-select
+ v-model="form.beExaminedDepartmentId"
+ :data="data"
+ @node-click="nameData2"
+ class="w100"
+ :props="propse"
+ check-strictly
+ placeholder="请选择"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="被考核人" size="default" prop="beExaminedPersonName">
+ <el-input v-model="form.beExaminedPersonName">
+ <template #append> <el-button :icon="Search" @click="daiInpt(0)" /></template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <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"
+ multiple
+ :on-preview="handlePreview"
+ :on-remove="handleRemove"
+ :before-remove="beforeRemove"
+ :limit="3"
+ :on-exceed="handleExceed"
+ >
+ <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-row>
+ <el-col :span="11">
+ <el-form-item label="考核模板" size="default" prop="examineTemplateName">
+ <el-input disabled v-model="form.examineTemplateName">
+ <template #append> <el-button :icon="Search" @click="daiAdd" /></template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="备注信息" prop="memo">
+ <el-input v-model="form.memo" type="textarea"> </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <el-tabs v-model="activeName" class="demo-tabs">
+ <el-tab-pane label="考核项目" name="1">
+ <!-- <el-button type="primary" size="default" @click="daiAdd">新增</el-button> -->
+ </el-tab-pane>
+ </el-tabs>
+ <el-table :data="tableData" style="width: 100%">
+ <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" prop="address" label="上报人" />
+ <el-table-column align="center" label="操作">
+ <template #default>
+ <el-button link type="primary">查看</el-button>
+ </template>
+ </el-table-column> -->
+ </el-table>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button>
+ <el-button type="primary" @click="submitForm(ruleFormRef)" size="default">确定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <DailogSearch ref="Show"></DailogSearch>
+ <DailogSearchUser ref="Shows" @SearchUser="userId"></DailogSearchUser>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import DailogSearch from './DailogSearch.vue';
+import DailogSearchUser from '/@/components/DailogSearchUser/index.vue';
+import { ElMessage, ElMessageBox } from 'element-plus';
+import { goalManagementApi } from '/@/api/goalManagement';
+import type { UploadProps, UploadUserFile } from 'element-plus';
+import type { FormInstance, FormRules } from 'element-plus';
+export default defineComponent({
+ components: { DailogSearchUser, DailogSearch },
+ setup(props, { emit }) {
+ const dialogVisible = ref<boolean>(false);
+ const ruleFormRef = ref<FormInstance>();
+ const form = ref({
+ beExaminedDepartmentId: '', ////被考核部门ID/外键
+ beExaminedDepartmentName: '',
+ beExaminedPersonId: '', ////被考核人ID/外键(可能有多个,用逗号隔开)
+ beExaminedPersonName: '',
+ examineDate: '', ////考核日期
+ examineDepartmentId: '', ////考核部门ID/外键
+ examineDepartmentName: '',
+ examinePersonId: '', ////考核人ID/外键
+ examinePersonName: '',
+ examineTemplateId: 1, ////绩效考核模板ID/外键
+ examineTemplateName: '',
+ examineTotalNumber: '', ////总分
+ extraFile: '9', //责任书附件
+ itemDetail: '', ////考核项目
+ memo: '', ////备注信息
+ numberDetailJson: '[{"id":"123","number":"123"}]', ////各个考核项目的具体得分,json格式。形式为:[{“id”:"123","number":"123"}]
+ title: '', ////考核标题
+ });
+ const titles = ref();
+ const disabled = ref(false);
+ // 打开弹窗
+ const openDailog = (title: string, value: any, id: number) => {
+ department();
+ dialogVisible.value = true;
+ titles.value = `${title}安全考核管理`;
+ disabled.value = title == '查看' ? true : false;
+ if (title == '查看' || title == '修改')
+ goalManagementApi()
+ .getexamineMngDetail(id)
+ .then((res) => {
+ if (res.data.code == 200) {
+ form.value = res.data.data;
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ };
+ // 验证
+ const rules = reactive<FormRules>({
+ title: [{ required: true, message: '考核标题不能为空', trigger: 'blur' }],
+ examineDate: [{ required: true, message: '考核日期不能为空', trigger: 'blur' }],
+ examineDepartmentId: [{ required: true, message: '考核部门不能为空', trigger: 'blur' }],
+ examinePersonName: [],
+ examinePersonId: [],
+ beExaminedDepartmentId: [{ required: true, message: '被考核部门不能为空', trigger: 'blur' }],
+ beExaminedPersonName: [],
+ beExaminedPersonId: [],
+ examineTemplateId: [],
+ examineTemplateName: [{ required: true, message: '考核模板不能为空', trigger: 'blur' }],
+ memo: [],
+ });
+ // 提交
+ const submitForm = async (formEl: FormInstance | undefined) => {
+ if (!formEl) return;
+ await formEl.validate((valid, fields) => {
+ if (valid) {
+ dialogVisible.value = false;
+ goalManagementApi()
+ .getexamineMngAddOrUpdate(form.value)
+ .then((res) => {
+ if (res.data.code == 200) {
+ ElMessage({
+ message: res.data.msg,
+ type: 'success',
+ });
+ emit('navAddorUpdata');
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ } else {
+ console.log('error submit!', fields);
+ }
+ });
+ };
+ // 取消
+ const resetForm = (formEl: FormInstance | undefined) => {
+ if (!formEl) return;
+ dialogVisible.value = false;
+ formEl.resetFields();
+ };
+ const handleClose=(formEl: FormInstance | undefined)=>{
+ if (!formEl) return;
+ formEl.resetFields();
+ }
+ const activeName = ref('1');
+ // 新增弹窗
+ const Show = ref();
+ const daiAdd = () => {
+ Show.value.openDailog();
+ };
+ // 安全目标指标弹窗
+ const Shows = ref();
+ const daiInpt = (type: any) => {
+ Shows.value.openDailog(type);
+ };
+ // 点击上传
+ 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 userId = (val: any, type: any) => {
+ if (type == 1) {
+ form.value.examinePersonId = val.uid;
+ form.value.examinePersonName = val.realName;
+ } else if (type == 2) {
+ let uid=[]
+ let realName=[]
+ for(let i=0;i<val.length;i++){
+ uid.push(val[i].uid)
+ realName.push(val[i].realName)
+ }
+ form.value.beExaminedPersonId = uid.toString();
+ form.value.beExaminedPersonName =realName.toString();
+ console.log(form.value.beExaminedPersonId,form.value.beExaminedPersonName)
+ }
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ 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();
+ const nameData1 = (val: any) => {
+ form.value.examineDepartmentName = val.depName;
+ };
+ const nameData2 = (val: any) => {
+ form.value.beExaminedDepartmentName = val.depName;
+ console.log(form.value);
+ };
+ return {
+ rules,
+ handleClose,
+ nameData1,
+ nameData2,
+ ruleFormRef,
+ department,
+ propse,
+ data,
+ userId,
+ activeName,
+ dialogVisible,
+ form,
+ titles,
+ disabled,
+ openDailog,
+ submitForm,
+ resetForm,
+ Show,
+ daiAdd,
+ Shows,
+ daiInpt,
+ Search,
+ fileList,
+ handleRemove,
+ handlePreview,
+ handleExceed,
+ beforeRemove,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/performanceAppraisal/component/DailogKh.vue b/src/views/goalManagement/performanceAppraisal/component/DailogKh.vue
new file mode 100644
index 0000000..2c51d4a
--- /dev/null
+++ b/src/views/goalManagement/performanceAppraisal/component/DailogKh.vue
@@ -0,0 +1,241 @@
+<template>
+ <el-dialog v-model="dialogVisible" :before-close="resetForm" :fullscreen="full" title="新建考核标准设定" width="60%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-form :model="form" label-width="120px">
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="标准标题" size="default">
+ <el-input v-model="form.title"> </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="适用范围" size="default">
+ <el-select v-model="form.applyRange" style="width: 100%" placeholder="请选择">
+ <el-option label="安全生产xxx" value="1" />
+ <el-option label="安全生产xxx" value="2" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <div v-if="clickType">
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="设定人" size="default">
+ <el-input v-model="form.setPersonId" disabled>
+ <template #append> <el-button :icon="Search" @click="daiInpt" /></template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="设定人部门" size="default">
+ <el-select v-model="form.setPersonDepartmentId" disabled style="width: 100%" placeholder="请选择">
+ <el-option label="Zone one" value="shanghai" />
+ <el-option label="Zone two" value="beijing" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="模板分类编码" size="default">
+ <el-input v-model="form.templateCode" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="合格分数" size="default">
+ <el-input v-model="form.acceptanceNumber" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="备注信息">
+ <el-input v-model="form.memo" type="textarea" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2" v-if="clickType">
+ <el-form-item label="设定日期" size="default">
+ <el-date-picker disabled v-model="form.setTimem" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <el-tabs v-model="activeName" class="demo-tabs">
+ <el-tab-pane label="目标指标分解" name="1">
+ <el-button type="primary" size="default" @click="daiAdd('新增','')">新增</el-button>
+ </el-tab-pane>
+ </el-tabs>
+ <el-table :data="form.examineItemList" style="width: 100%">
+ <el-table-column align="center" prop="itemType" label="类型" width="180" />
+ <el-table-column align="center" prop="itemDetail" label="考核项目" width="180" />
+ <el-table-column align="center" prop="content" label="考核内容" />
+ <el-table-column align="center" prop="judgeStandard" label="评定标准" />
+ <el-table-column align="center" prop="memo" label="考核说明" />
+ <el-table-column align="center" label="操作">
+ <template #default="scope">
+ <el-button link type="primary" @click="daiAdd('查看', scope.row)">查看</el-button>
+ <el-button link type="primary" @click="daiAdd('修改', scope.row)">修改</el-button>
+ <el-button link type="primary" @click="deleteA(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="resetForm" size="default">关闭</el-button>
+ <el-button type="primary" @click="submitForm" size="default">确定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <DailogKhS ref="Show" @onAdd="AddObj"></DailogKhS>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import DailogKhS from './DailogKhS.vue';
+import { ElMessage, ElMessageBox } from 'element-plus';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ components: { DailogKhS },
+ setup(props, { emit }) {
+ const dialogVisible = ref<boolean>(false);
+ const form = ref({
+ examineItemList: [], //考核项目列表
+ setTimem: 1658386392466,
+ memo: '', ////备注信息
+ templateCode: '', ////模板分类编码
+ title: '', ////标准标题
+ setPersonId: 1, //设定人
+ acceptanceNumber: '', ////合格分数
+ setPersonDepartmentId: 2, //设定人部门
+ applyRange: '', ////适用范围
+ });
+ const titles = ref();
+ const disabled = ref(false);
+ const clickType = ref(false);
+ // 打开弹窗
+ const openDailog = (title: string, value: any, id: number) => {
+ dialogVisible.value = true;
+ titles.value = `${title}安全考核管理`;
+ disabled.value = title == '查看' ? true : false;
+ if (title == '查看' || title == '修改') {
+ goalManagementApi()
+ .getexamineTemplateDetail(id)
+ .then((res) => {
+ if (res.data.code == 200) {
+ form.value = res.data.data;
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ } else {
+ clickType.value = false;
+ }
+ };
+ // 接受传值
+ const AddObj = (val: any) => {
+ if (index.value == -1) {
+ form.value.examineItemList.push(val);
+ } else {
+ form.value.examineItemList[index.value] = val;
+ }
+ };
+ // 删除
+ const deleteA = (tag: any) => {
+ form.value.examineItemList.splice(form.value.examineItemList.indexOf(tag), 1);
+ };
+ // 提交
+ const submitForm = () => {
+ dialogVisible.value = false;
+ goalManagementApi()
+ .getexamineTemplateAddOrUpdate(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 = {
+ examineItemList: [], //考核项目列表
+ setTimem: 1658386392466,
+ memo: '', ////备注信息
+ templateCode: '', ////模板分类编码
+ title: '', ////标准标题
+ setPersonId: 1, //设定人
+ acceptanceNumber: '', ////合格分数
+ setPersonDepartmentId: 2, //设定人部门
+ applyRange: '', ////适用范围
+ };
+ };
+ // 取消
+ const resetForm = () => {
+ dialogVisible.value = false;
+ form.value = {
+ examineItemList: [], //考核项目列表
+ setTimem: 1658386392466,
+ memo: '', ////备注信息
+ templateCode: '', ////模板分类编码
+ title: '', ////标准标题
+ setPersonId: 1, //设定人
+ acceptanceNumber: '', ////合格分数
+ setPersonDepartmentId: 2, //设定人部门
+ applyRange: '', ////适用范围
+ };
+ };
+ const activeName = ref('1');
+ // 新增弹窗
+ const index = ref<any>();
+ const Show = ref();
+ const daiAdd = (title: string, data: any) => {
+ index.value = form.value.examineItemList.indexOf(data);
+ Show.value.openDailog(title, data);
+ };
+ // 安全目标指标弹窗
+ const Shows = ref();
+ const daiInpt = () => {
+ Shows.value.openDailog();
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ index,
+ form,
+ dialogVisible,
+ deleteA,
+ AddObj,
+ openDailog,
+ activeName,
+ titles,
+ disabled,
+ submitForm,
+ resetForm,
+ Show,
+ daiAdd,
+ Shows,
+ daiInpt,
+ Search,
+ full,
+ clickType,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/performanceAppraisal/component/DailogKhS.vue b/src/views/goalManagement/performanceAppraisal/component/DailogKhS.vue
new file mode 100644
index 0000000..98b6f83
--- /dev/null
+++ b/src/views/goalManagement/performanceAppraisal/component/DailogKhS.vue
@@ -0,0 +1,133 @@
+<template>
+ <el-dialog v-model="dialogVisible" :before-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="24">
+ <el-form-item label="类型">
+ <el-input v-model="form.itemType" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="考核项目">
+ <el-input v-model="form.itemDetail" type="textarea"> </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="考核内容">
+ <el-input v-model="form.content" type="textarea"> </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="评定标准">
+ <el-input v-model="form.judgeStandard" type="textarea"> </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="考核说明">
+ <el-input v-model="form.memo" type="textarea"> </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <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>
+ </span>
+ </template>
+ </el-dialog>
+ <!-- <DailogAdd ref="Show"></DailogAdd>
+ <DailogSearch ref="Shows"></DailogSearch> -->
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+// import DailogAdd from './DailogAdd.vue'
+// import DailogSearch from '../../../../components/DailogSearch/DailogSearch.vue'
+export default defineComponent({
+ // components:{DailogAdd,DailogSearch},
+ setup(props, { emit }) {
+ const dialogVisible = ref<boolean>(false);
+ const form = ref({
+ itemType: '', ////类型
+ memo: '', //备注
+ itemDetail: '', ////考核项目
+ content: '', ////考核内容
+ judgeStandard: '', ////评定标准
+ });
+ const disabled=ref(false)
+ const titles=ref()
+ const openDailog = (title: string, value: any) => {
+ dialogVisible.value = true;
+ titles.value=`${title}考核项目`
+ if (title == '查看') {
+ form.value = value;
+ disabled.value=true
+ }else if(title == '修改'){
+ disabled.value=false
+ form.value = value;
+ }
+ };
+ // 提交
+ const submitForm = () => {
+ dialogVisible.value = false;
+ emit('onAdd', form.value);
+ form.value = {
+ itemType: '', ////类型
+ memo: '', //备注
+ itemDetail: '', ////考核项目
+ content: '', ////考核内容
+ judgeStandard: '', ////评定标准
+ };
+ };
+ // 取消
+ const resetForm = () => {
+ dialogVisible.value = false;
+ form.value = {
+ itemType: '', ////类型
+ memo: '', //备注
+ itemDetail: '', ////考核项目
+ content: '', ////考核内容
+ judgeStandard: '', ////评定标准
+ };
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ form,
+ disabled,
+ titles,
+ dialogVisible,
+ openDailog,
+ submitForm,
+ resetForm,
+ Search,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/performanceAppraisal/component/DailogSearch.vue b/src/views/goalManagement/performanceAppraisal/component/DailogSearch.vue
new file mode 100644
index 0000000..01d64c1
--- /dev/null
+++ b/src/views/goalManagement/performanceAppraisal/component/DailogSearch.vue
@@ -0,0 +1,177 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="选择安全目标指标" width="50%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-row>
+ <el-col :span="17">
+ <el-form ref="ruleFormRef" :model="ruleForm" status-icon>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item size="default">
+ <el-input v-model="ruleForm.searchParams.title" placeholder="标准标题" />
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="6" :offset="1">
+ <el-form-item>
+ <el-input v-model="ruleForm.checkPass" placeholder="目标指标编号" />
+ </el-form-item>
+ </el-col> -->
+ <el-col :span="6" :offset="1">
+ <el-form-item>
+ <el-button size="default" type="primary" @click="listApi()">查询</el-button>
+ <el-button size="default" @click="reset">重置</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <el-button size="default" :icon="Delete" @click="clear">清除选择</el-button>
+ <el-table :data="tableData" style="width: 100%; margin-top: 20px" @cell-click="radio">
+ <el-table-column align="center" width="70px">
+ <template #default="scope">
+ <el-radio-group v-model="radio1">
+ <el-radio :label="scope.row.id" size="large">{{ null }}</el-radio>
+ </el-radio-group>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" prop="title" label="标准标题" />
+ </el-table>
+ <el-pagination
+ style="padding: 20px 0; border-bottom: 1px solid #dedede"
+ 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"
+ />
+ </el-col>
+ <el-col :span="7">
+ <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.title }}
+ </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="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';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ setup() {
+ const dialogVisible = ref<boolean>(false);
+ const openDailog = () => {
+ dialogVisible.value = true;
+ listApi()
+ };
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ title: '', //标准标题
+ },
+ });
+ const listApi = () => {
+ goalManagementApi()
+ .getexamineTemplateList(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);
+ }
+ });
+ };
+ // 重置
+ const reset=()=>{
+ ruleForm.searchParams.title=""
+ 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 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 clear=()=>{
+ dynamicTags.value=['']
+ radio1.value=""
+ }
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ reset,
+ dialogVisible,
+ listApi,
+ openDailog,
+ ruleForm,
+ tableData,
+ currentPage4,
+ pageSize4,
+ total,
+ handleSizeChange,
+ handleCurrentChange,
+ dynamicTags,
+ handleClose,
+ Delete,
+ full,
+ toggleFullscreen,
+ radio1,
+ radio,
+ clear,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
diff --git a/src/views/goalManagement/performanceAppraisal/index.vue b/src/views/goalManagement/performanceAppraisal/index.vue
new file mode 100644
index 0000000..a1c9637
--- /dev/null
+++ b/src/views/goalManagement/performanceAppraisal/index.vue
@@ -0,0 +1,521 @@
+<template>
+ <div>
+ <div class="minCenter">
+ <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+ <el-tab-pane label="安全考核管理" name="1">
+ <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle">
+ <el-row>
+ <el-col :span="4">
+ <el-form-item size="default">
+ <el-tree-select v-model="ruleForm.searchParams.examineDepartmentId" :data="data" check-strictly="true" class="w100" :props="propse" 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>
+ <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" plain :icon="Delete" @click="onDeleteAll">删除</el-button>
+ </div>
+ </div>
+ <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>
+ <div class="tableC">
+ <el-table :data="tableData.currentExamineDtoList" style="width: 100%">
+ <el-table-column align="center" prop="itemDetail" label="考核项目" />
+ <el-table-column align="center" prop="content" label="考核内容" />
+ <el-table-column align="center" prop="number" label="考核分数" />
+ </el-table>
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column property="examineDate" align="center" :formatter="timeDate" label="考核日期" sortable />
+ <el-table-column property="examineDepartmentName" align="center" label="考核部门" sortable />
+ <el-table-column property="examinePersonId" label="考核人" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="beExaminedDepartmentName" label="被考核部门" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="examineTotalNumber" label="总分" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="numberDetailJson.number" label="考核结果" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="extraFile" label="附件" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" width="250px">
+ <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>
+ </el-tab-pane>
+ <el-tab-pane label="考核标准设定" name="2">
+ <el-form :model="ruleForms" status-icon label-width="20px" class="topTitle">
+ <el-row>
+ <el-col :span="4">
+ <el-form-item size="default">
+ <el-input v-model="ruleForms.searchParams.title" placeholder="标准标题" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <el-form-item>
+ <el-button size="default" type="primary" @click="listApis">查询</el-button>
+ <el-button size="default" @click="resetForms">重置</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div class="btns">
+ <div>
+ <el-button size="default" type="primary" :icon="Plus" @click="openDs('新建')">新建</el-button>
+ <el-button size="default" :disabled="warnings" type="warning" plain :icon="EditPen">修改</el-button>
+ <el-button size="default" :disabled="dangers" type="danger" plain :icon="Delete" @click="onDeleteAlls">删除</el-button>
+ </div>
+ </div>
+ <el-table ref="multipleTableRef" :data="tableDatas" style="width: 100%" @selection-change="handleSelectionChanges">
+ <el-table-column type="selection" align="center" width="55" />
+ <el-table-column type="expand">
+ <template #default>
+ <div class="tableC">
+ <el-table :data="tableDatas.examineItemList" style="width: 100%">
+ <el-table-column align="center" prop="itemType" label="类型" />
+ <el-table-column align="center" prop="itemDetail" label="考核项目" />
+ <el-table-column align="center" prop="content" label="考核内容" />
+ <el-table-column align="center" prop="judgeStandard" label="评定标准" />
+ <el-table-column align="center" prop="memo" label="考核说明" />
+ </el-table>
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column label="标准标题" property="title" align="center" sortable />
+ <el-table-column property="applyRange" align="center" label="适用范围" sortable />
+ <el-table-column property="setPersonId" label="设定人" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="setPersonDepartmentId" label="设定人部门" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="setTimem" label="设定日期" align="center" :formatter="timeDate" sortable show-overflow-tooltip />
+ <el-table-column property="templateCode" label="模板分类编码" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="acceptanceNumber" label="合格分数" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" width="250px">
+ <template #default="scope">
+ <el-button link type="primary" size="default" :icon="View" @click="openDs('查看', scope.row.id)">查看</el-button>
+ <el-button link type="primary" size="default" :icon="EditPen" @click="openDs('修改', scope.row.id)">修改</el-button>
+ <el-button link type="primary" size="default" :icon="Delete" @click="onDeletes(scope.row.id)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pages">
+ <el-pagination
+ v-model:currentPage="currentPage4s"
+ v-model:page-size="pageSize4s"
+ :page-sizes="[10, 20, 30, 40]"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="totals"
+ @size-change="handleSizeChanges"
+ @current-change="handleCurrentChanges"
+ />
+ </div>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ <DailogAq ref="openAdd" @navAddorUpdata="onAddorUpdata"></DailogAq>
+ <DailogKh ref="openAdds" @navAddorUpdata="onAddorUpdatas"></DailogKh>
+ </div>
+</template>
+<script lang="ts">
+import {timeDate} from '/@/assets/index.ts'
+import DailogAq from './component/DailogAq.vue';
+import DailogKh from './component/DailogKh.vue';
+import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ components: { ElButton, ElInput, DailogAq, DailogKh },
+ setup() {
+ // 搜索条件 安全考核管理
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ examineDepartmentId: '',
+ },
+ });
+ // 重置
+ const resetForm = () => {
+ ruleForm.searchParams.examineDepartmentId = '';
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .getexamineMngList(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, ruleForm.searchParams.examineDepartmentId, id);
+ };
+ // 删除
+ const onDelete = (id: number) => {
+ let arr=[]
+ arr.push(id)
+ ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then(() => {
+ goalManagementApi()
+ .getexamineMngDelete(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(() => {
+ goalManagementApi()
+ .getexamineMngDelete(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('1');
+ const handleClick = (val: any) => {
+ if (val == '1') {
+ listApi();
+ }else{
+ listApis();
+ }
+ };
+ // 搜索条件 考核标准设定
+ const ruleForms = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ title: '', //标准标题
+ },
+ });
+ // 重置
+ const resetForms = () => {
+ ruleForm.searchParams.examineDepartmentId = '';
+ };
+ const listApis = () => {
+ goalManagementApi()
+ .getexamineTemplateList(ruleForm)
+ .then((res) => {
+ if (res.data.code == 200) {
+ tableDatas.value = res.data.data;
+ currentPage4s.value = res.data.pageIndex;
+ pageSize4s.value = res.data.pageSize;
+ totals.value = res.data.total;
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ };
+ onMounted(() => {
+ listApis();
+ department()
+ });
+ const onAddorUpdatas = () => {
+ listApis();
+ };
+ // 表格
+ const tableDatas = ref();
+ const currentPage4s = ref();
+ const pageSize4s = ref();
+ const totals = ref();
+ const handleSizeChanges = (val: number) => {
+ // console.log(`${val} items per page`);
+ ruleForms.pageSize = val;
+ listApis();
+ };
+ const handleCurrentChanges = (val: number) => {
+ // console.log(`current page: ${val}`);
+ ruleForms.pageIndex = val;
+ listApis();
+ };
+ // 弹窗
+ const openAdds = ref();
+ const openDs = (title: String, id: number) => {
+ openAdds.value.openDailog(title, ruleForm.searchParams.examineDepartmentId, id);
+ };
+ // 删除
+ const onDeletes = (id: number) => {
+ let arr=[]
+ arr.push(id)
+ ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then(() => {
+ goalManagementApi()
+ .getexamineTemplateDelete(arr)
+ .then((res) => {
+ if (res.data.code == 200) {
+ ElMessage({
+ message: res.data.msg,
+ type: 'success',
+ });
+ listApis();
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ })
+ .catch(() => {
+ ElMessage({
+ type: 'info',
+ message: 'Delete canceled',
+ });
+ });
+ };
+ // 批量删除
+ const warnings = ref(true);
+ const dangers = ref(true);
+ const deletAlls = ref();
+ const handleSelectionChanges = (val: any) => {
+ let valId = JSON.parse(JSON.stringify(val));
+ let arr = [];
+ for (let i = 0; i < valId.length; i++) {
+ arr.push(valId[i].id);
+ }
+ deletAlls.value = arr;
+ if (val.length == 1) {
+ warnings.value = false;
+ dangers.value = false;
+ } else if (val.length == 0) {
+ warnings.value = true;
+ dangers.value = true;
+ } else {
+ warnings.value = true;
+ dangers.value = false;
+ }
+ };
+ const onDeleteAlls = () => {
+ ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then(() => {
+ goalManagementApi()
+ .getexamineTemplateDelete(deletAll.value)
+ .then((res) => {
+ if (res.data.code == 200) {
+ ElMessage({
+ message: res.data.msg,
+ type: 'success',
+ });
+ listApis();
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ })
+ .catch(() => {
+ // ElMessage({
+ // type: 'info',
+ // message: 'Delete canceled',
+ // });
+ });
+ };
+ //部门树
+ 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 {
+ timeDate,
+ department,
+ propse,
+ data,
+ activeName,
+ ruleForm,
+ resetForm,
+ listApi,
+ handleClick,
+ onAddorUpdata,
+ tableData,
+ currentPage4,
+ pageSize4,
+ total,
+ handleSizeChange,
+ handleCurrentChange,
+ openAdd,
+ openD,
+ onDelete,
+ warning,
+ danger,
+ deletAll,
+ handleSelectionChange,
+ onDeleteAll,
+ ruleForms,
+ resetForms,
+ listApis,
+ onAddorUpdatas,
+ tableDatas,
+ currentPage4s,
+ pageSize4s,
+ totals,
+ handleSizeChanges,
+ handleCurrentChanges,
+ openAdds,
+ openDs,
+ onDeletes,
+ warnings,
+ dangers,
+ deletAlls,
+ handleSelectionChanges,
+ onDeleteAlls,
+ Plus,
+ Delete,
+ Upload,
+ Download,
+ Refresh,
+ View,
+ EditPen,
+ };
+ },
+});
+</script>
+<style scoped>
+.minCenter {
+ width: 100%;
+ background-color: #fff;
+ margin-top: 10px;
+ padding: 0 20px;
+}
+.btns {
+ padding: 20px;
+}
+.topTitle {
+ padding: 5px 0 20px 0;
+ border-bottom: 1px solid #dedede;
+}
+.pages {
+ padding: 20px 0;
+ display: flex;
+ justify-content: right;
+}
+.tableC {
+ margin: 0 10%;
+}
+</style>
diff --git a/src/views/goalManagement/processForms/component/formInformationTop.vue b/src/views/goalManagement/processForms/component/formInformationTop.vue
new file mode 100644
index 0000000..5f34405
--- /dev/null
+++ b/src/views/goalManagement/processForms/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="安全目标指标" size="default">
+ <el-input v-model="form.name"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="目标指标编号" size="default">
+ <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="年度" size="default">
+ <el-input v-model="form.name"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="指标值" size="default">
+ <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/views/goalManagement/processForms/component/formInformationTops.vue b/src/views/goalManagement/processForms/component/formInformationTops.vue
new file mode 100644
index 0000000..ba671e5
--- /dev/null
+++ b/src/views/goalManagement/processForms/component/formInformationTops.vue
@@ -0,0 +1,162 @@
+<template>
+ <el-form ref="form" :model="form" label-width="120px">
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="安全目标指标" size="default">
+ <el-input v-model="form.name"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="目标指标编号" size="default">
+ <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="年度" size="default">
+ <el-input v-model="form.name"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="责任部门" size="default">
+ <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="改进期限" size="default">
+ <el-date-picker v-model="form.date1" type="date" placeholder="Pick a date" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="发起人" size="default">
+ <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="发起时间" size="default">
+ <el-date-picker v-model="form.date1" type="date" placeholder="Pick a date" style="width: 100%" />
+ </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:20px 0 0px 0;
+}
+</style>
diff --git a/src/views/goalManagement/processForms/component/lowerPlate.vue b/src/views/goalManagement/processForms/component/lowerPlate.vue
new file mode 100644
index 0000000..3eea9f5
--- /dev/null
+++ b/src/views/goalManagement/processForms/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="流程标题" size="default">
+ <el-input v-model="form.names" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="15">
+ <el-form-item label="下级审批日期" size="default">
+ <el-date-picker v-model="form.date1" type="date" placeholder="Pick a date" 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" size="default">
+ <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" size="default">
+ <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/views/goalManagement/processForms/processForms.vue b/src/views/goalManagement/processForms/processForms.vue
new file mode 100644
index 0000000..331337a
--- /dev/null
+++ b/src/views/goalManagement/processForms/processForms.vue
@@ -0,0 +1,124 @@
+<template>
+ <div>
+ <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;
+}
+.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;
+}
+</style>
diff --git a/src/views/goalManagement/safetyAssessment/component/Dailog.vue b/src/views/goalManagement/safetyAssessment/component/Dailog.vue
new file mode 100644
index 0000000..7639890
--- /dev/null
+++ b/src/views/goalManagement/safetyAssessment/component/Dailog.vue
@@ -0,0 +1,137 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="目标分解" width="70%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-form :model="form" label-width="120px">
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="安全目标指标" size="default">
+ <el-input v-model="form.qName" :disabled="disabled">
+ <template #append> <el-button :icon="Search" @click="daiInpt" /> </template
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="目标指标编号" size="default">
+ <el-input v-model="form.indexNum" disabled />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="年度" size="default">
+ <el-input v-model="form.year" disabled />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="指标值" size="default">
+ <el-input v-model="form.value" disabled />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+ <el-tab-pane label="目标指标分解" name="1"> </el-tab-pane>
+ </el-tabs>
+ <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" prop="address" label="上报值" />
+ <el-table-column align="center" prop="address" label="上报时间" />
+ <el-table-column align="center" prop="address" 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-button link type="primary">查看</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <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>
+ <DailogSearch ref="Shows" @backNum="onNumber"></DailogSearch>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus';
+import DailogSearch from '../../../../components/DailogSearch/DailogSearch.vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ components: { DailogSearch },
+ setup() {
+ const dialogVisible = ref<boolean>(false);
+ const form = ref({});
+ const targetType = ref();
+ const disabled = ref(false);
+ const titles = ref();
+ const openDailog = (title: string, type: any, id: number) => {
+ dialogVisible.value = true;
+ titles.value = title;
+ targetType.value = type;
+ disabled.value = title == '查看' ? true : false;
+ if (title == '查看' || title == '修改') {
+ goalManagementApi()
+ .getTargetMngDetail(id)
+ .then((res) => {
+ if (res.data.code == 200) {
+ form.value = res.data.data;
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ }
+ };
+ const onNumber = (e: object) => {
+ form.value = e;
+ };
+ // 导航
+ const activeName = ref('1');
+ // 表格
+ const tableData = ref([]);
+ // 安全目标指标弹窗
+ const Shows = ref();
+ const daiInpt = () => {
+ Shows.value.openDailog(targetType.value);
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ form,
+ dialogVisible,
+ openDailog,
+ targetType,
+ onNumber,
+ disabled,
+ titles,
+ activeName,
+ tableData,
+ Shows,
+ daiInpt,
+ Search,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
diff --git a/src/views/goalManagement/safetyAssessment/index.vue b/src/views/goalManagement/safetyAssessment/index.vue
new file mode 100644
index 0000000..4925e9b
--- /dev/null
+++ b/src/views/goalManagement/safetyAssessment/index.vue
@@ -0,0 +1,212 @@
+<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.indexNum" placeholder="请输入目标指标" />
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.checkPass" 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>
+ <div class="minCenter">
+ <div class="btns">
+ <div>
+ <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button>
+ </div>
+ <div>
+ <!-- <el-button size="default" :icon="Refresh"></el-button> -->
+ </div>
+ </div>
+ <el-table ref="multipleTableRef" :data="tableData" style="width: 100%">
+ <el-table-column label="序号" align="center" type="index" width="70" />
+ <el-table-column label="安全目标指标" align="center" property="qName" sortable />
+ <el-table-column property="indexNum" align="center" label="考核指标编号" sortable />
+ <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" width="300" sortable show-overflow-tooltip>
+ <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="View" @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>
+ <Dailog ref="openAdd"></Dailog>
+ </div>
+ </div>
+</template>
+<script lang="ts">
+import Dailog from './component/Dailog.vue';
+import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View } from '@element-plus/icons-vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults';
+export default defineComponent({
+ components: { ElButton, ElInput, Dailog },
+ setup() {
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ qName: '', ////安全目标指标
+ indexNum: '', ////目标指标编号
+ targetType: '1', ////指标类型 1:年指标 2:月指标
+ divideStatus: '', ////分解状态 1:已分解 2:未分解
+ },
+ });
+ // 重置
+ const resetForm = () => {
+ ruleForm.searchParams.qName = '';
+ ruleForm.searchParams.indexNum = '';
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .getTargetMngList(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);
+ }
+ });
+ };
+ //
+ const handleClick = (val: any) => {
+ let targetType = JSON.parse(JSON.stringify(val));
+ ruleForm.searchParams.targetType = targetType.paneName;
+ listApi();
+ };
+ 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 onDelete = (id: number) => {
+ var arr=[]
+ arr.push(id)
+ ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then(() => {
+ goalManagementApi()
+ .getTargetMngDelete(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 openAdd = ref();
+ const openD = (title: String, id: number) => {
+ openAdd.value.openDailog(title, ruleForm.searchParams.targetType, id);
+ };
+
+ return {
+ listApi,
+ ruleForm,
+ resetForm,
+ handleClick,
+ tableData,
+ currentPage4,
+ pageSize4,
+ handleSizeChange,
+ handleCurrentChange,
+ onAddorUpdata,
+ total,
+ openAdd,
+ openD,
+ onDelete,
+ Plus,
+ Delete,
+ Upload,
+ Download,
+ Refresh,
+ View,
+ };
+ },
+});
+</script>
+<style scoped>
+.topTitle {
+ background-color: #fff;
+ padding: 20px 0px 20px 0px;
+ margin-bottom: 10px;
+}
+.minCenter {
+ width: 100%;
+ background-color: #fff;
+ margin-top: 10px;
+ padding: 0 20px;
+}
+.btns {
+ padding: 10px 0px 10px 0px;
+ display: flex;
+ justify-content: space-between;
+}
+.pages {
+ padding: 20px 0;
+ display: flex;
+ justify-content: right;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/targetDecompositionMonth/index.vue b/src/views/goalManagement/targetDecompositionMonth/index.vue
new file mode 100644
index 0000000..09e743f
--- /dev/null
+++ b/src/views/goalManagement/targetDecompositionMonth/index.vue
@@ -0,0 +1,282 @@
+<template>
+ <div>
+ <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle">
+ <el-row>
+ <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.searchParams.qName" size="default" placeholder="安全目标指标" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="16">
+ <el-form-item>
+ <el-button type="primary" size="default" @click="listApi">查询</el-button>
+ <el-button size="default" @click="resetForm">重置</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div class="minCenter">
+ <div class="btns">
+ <div>
+ <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button>
+ <el-button size="default" type="warning" :disabled="warning" :icon="EditPen" plain>修改</el-button>
+ <el-button size="default" type="danger" :disabled="danger" :icon="Delete" plain @click="onDeleteAll">删除</el-button>
+ </div>
+ </div>
+ <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%">
+ <el-table-column label="序号" align="center" type="index" width="70" />
+ <el-table-column type="selection" align="center" width="55" />
+ <el-table-column type="expand">
+ <template #default>
+ <div class="tableC">
+ <el-tabs v-model="activeNames">
+ <el-tab-pane label="目标指标分解" name="1">
+ <el-table :data="targetDivideDetailList" style="width: 100%">
+ <el-table-column align="center" prop="dutyDepartmentId" label="责任部门" />
+ <el-table-column align="center" prop="value" label="考核指标" />
+ <el-table-column align="center" prop="makerDepartmentId" label="制定人部门" />
+ <el-table-column align="center" prop="makeDate" label="制定日期" />
+ <el-table-column align="center" prop="commitPersonId" label="上报人" />
+ </el-table>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column label="安全目标指标" align="center" property="qName" sortable />
+ <el-table-column property="indexNum" align="center" label="目标指标编号" sortable />
+ <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" sortable show-overflow-tooltip>
+ <template #default="scope">
+ <el-button link type="primary" size="small" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button>
+ <el-button link type="primary" size="small" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button>
+ <el-button link type="primary" size="small" :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>
+ <Dailog ref="Show" @addList="add"></Dailog>
+ </div>
+</template>
+<script lang="ts">
+import search from '../targetSettings/component/search.vue';
+import Dailog from '../targetDecompositionYear/component/Dailog.vue';
+import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults';
+export default defineComponent({
+ components: { ElButton, ElInput, Dailog },
+ setup() {
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ qName: '', ////安全目标指标
+ indexNum: '', ////目标指标编号
+ targetType: '2', ////指标类型 1:年指标 2:月指标
+ divideStatus: '', ////分解状态 1:已分解 2:未分解
+ },
+ });
+ // 下方导航与表格
+ const tableData = ref([]);
+ const currentPage4 = ref();
+ const pageSize4 = ref();
+ const total = ref();
+ const resetForm = () => {
+ ruleForm.searchParams.qName = '';
+ ruleForm.searchParams.indexNum = '';
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .getTargetMngList(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 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 activeNames = ref('1');
+ // 打开弹窗
+ const Show = ref();
+ const openD = (title: String, id: number) => {
+ Show.value.openDailog(title, ruleForm.searchParams.targetType, id);
+ };
+ // 删除
+ const onDelete = (id: number) => {
+ let arr=[]
+ arr.push(id)
+ ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then(() => {
+ goalManagementApi()
+ .getTargetMngDelete(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(() => {
+ goalManagementApi()
+ .getTargetMngDelete(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 add=()=>{
+ listApi()
+ }
+ return {
+ add,
+ listApi,
+ resetForm,
+ tableData,
+ currentPage4,
+ pageSize4,
+ total,
+ ruleForm,
+ handleSizeChange,
+ handleCurrentChange,
+ Show,
+ openD,
+ activeNames,
+ onDelete,
+ warning,
+ danger,
+ deletAll,
+ handleSelectionChange,
+ onDeleteAll,
+ Plus,
+ Delete,
+ Upload,
+ Download,
+ Refresh,
+ View,
+ EditPen,
+ };
+ },
+});
+</script>
+<style scoped>
+.minCenter {
+ width: 100%;
+ background-color: #fff;
+ margin-top: 10px;
+ padding: 0 20px;
+}
+.btns {
+ padding: 0px 0px 10px 0px;
+ display: flex;
+ justify-content: space-between;
+}
+.pages {
+ padding: 20px 0;
+ display: flex;
+ justify-content: right;
+}
+.tableC {
+ margin: 0 10%;
+}
+.topTitle {
+ background-color: #fff;
+ padding: 20px 0px 20px 0px;
+}
+</style>
diff --git a/src/views/goalManagement/targetDecompositionYear/component/Dailog.vue b/src/views/goalManagement/targetDecompositionYear/component/Dailog.vue
new file mode 100644
index 0000000..8960533
--- /dev/null
+++ b/src/views/goalManagement/targetDecompositionYear/component/Dailog.vue
@@ -0,0 +1,237 @@
+<template>
+ <el-dialog v-model="dialogVisible" :before-close="resetForm" :fullscreen="full" title="目标分解" width="60%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-form :model="form" label-width="120px">
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="安全目标指标" size="default">
+ <el-input v-model="form.qName" :disabled="disabled">
+ <template #append>
+ <el-button :icon="Search" @click="daiInpt" />
+ </template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="目标指标编号" size="default">
+ <el-input v-model="form.indexNum" disabled />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="年度" size="default">
+ <el-input v-model="form.year" disabled />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="指标值" size="default">
+ <el-input v-model="form.value" disabled />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <el-tabs v-model="activeName" class="demo-tabs">
+ <el-tab-pane label="目标指标分解" name="1">
+ <el-button type="primary" size="default" @click="daiAdd('新增')" :disabled="disabled">新增</el-button>
+ </el-tab-pane>
+ </el-tabs>
+ <el-table :data="formUp.targetDivideDetailList" style="width: 100%">
+ <el-table-column align="center" property="dutyDepartmentId" label="责任部门" width="180" />
+ <el-table-column align="center" property="value" label="考核指标" width="180" />
+ <el-table-column align="center" property="makerDepartmentId" label="制定人部门" />
+ <el-table-column align="center" property="makeDate" label="制定日期" :formatter="timeDate"/>
+ <el-table-column align="center" property="commitPersonName" label="上报人" />
+ <el-table-column align="center" property="操作">
+ <template #default="scope">
+ <el-button link type="primary" @click="daiAdd('查看', scope.row)">查看</el-button>
+ <el-button link :disabled="disabled" type="primary" @click="daiAdd('修改', scope.row)">修改</el-button>
+ <el-button link :disabled="disabled" type="primary" @click="Delete(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="resetForm" size="default">关闭</el-button>
+ <el-button type="primary" v-if="disabled == false" @click="submitForm" size="default">确定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <DailogAdd ref="Show" @onAdd="add"></DailogAdd>
+ <DailogSearch ref="Shows" @backNum="onNumber"></DailogSearch>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import {timeDate} from '/@/assets/index.ts'
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import DailogAdd from './DailogAdd.vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus';
+import DailogSearch from '../../../../components/DailogSearch/DailogSearch.vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+import { emit } from 'process';
+export default defineComponent({
+ components: { DailogAdd, DailogSearch},
+ setup(props,{emit}) {
+ const dialogVisible = ref<boolean>(false);
+ const form = ref({
+ qName: '',
+ indexNum: '',
+ year: '',
+ value: '',
+ targetDivideDetailList:[]
+ });
+ const targetType = ref();
+ const disabled = ref(false);
+ const titles = ref();
+ const openDailog = (title: string, type: any, id: number) => {
+ dialogVisible.value = true;
+ titles.value = title;
+ targetType.value = type;
+ disabled.value = title == '查看' ? true : false;
+ if (title == '查看' || title == '修改') {
+ goalManagementApi()
+ .getTargetMngDetail(id)
+ .then((res) => {
+ if (res.data.code == 200) {
+ form.value = res.data.data;
+ formUp.targetDivideDetailList=form.value.targetDivideDetailList
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ }
+ };
+ const onNumber = (val: object) => {
+ form.value = val;
+ };
+ // 导航
+ const activeName = ref('1');
+ // 表格
+ const tableData = ref([]);
+ // 新增弹窗
+ const index=ref<any>()
+ const Show = ref();
+ const daiAdd = (title: string, data: any) => {
+ index.value = formUp.targetDivideDetailList.indexOf(data);
+ Show.value.openDailog(title, data);
+ };
+ const formUp = reactive({
+ targetId: '', //关联的目标指标/外键
+ delTargetDivideDetails: '', //要删除的目标指标分解ID,多个用逗号隔开
+ targetDivideDetailList: [], //目标指标分解列表
+ });
+ const add = (val: any) => {
+ if(index.value==-1){
+ formUp.targetDivideDetailList.push(val);
+ }else{
+ formUp.targetDivideDetailList[index.value] = val;
+ }
+
+ // let obj=JSON.parse(JSON.stringify(form.value))
+ };
+ // 新增
+ const submitForm = () => {
+ formUp.delTargetDivideDetails=arr.value.toString()
+ formUp.targetId = form.value.id;
+ goalManagementApi()
+ .gettargetDivideDetail(formUp)
+ .then((res) => {
+ if (res.data.code == 200) {
+ ElMessage({
+ message: res.data.msg,
+ type: 'success',
+ });
+ dialogVisible.value = false;
+ emit("addList")
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ form.value = {
+ qName: '',
+ indexNum: '',
+ year: '',
+ value: '',
+ targetDivideDetailList:[]
+ };
+ tableData.value = [];
+ formUp.targetId = '';
+ formUp.delTargetDivideDetails = '';
+ formUp.targetDivideDetailList = [];
+ };
+ const arr=ref([])
+ // 删除
+ const Delete = (data: any) => {
+ formUp.targetDivideDetailList.splice(form.value.targetDivideDetailList.indexOf(data), 1);
+ formUp.targetId = data.targetId;
+ arr.value.push(data.id)
+ };
+ // 安全目标指标弹窗
+ const Shows = ref();
+ const daiInpt = () => {
+ Shows.value.openDailog(targetType.value);
+ };
+ // 关闭
+ const resetForm = () => {
+ dialogVisible.value = false;
+ form.value = {
+ qName: '',
+ indexNum: '',
+ year: '',
+ value: '',
+ targetDivideDetailList:[]
+ };
+ tableData.value = [];
+ formUp.targetId = '';
+ formUp.delTargetDivideDetails = '';
+ formUp.targetDivideDetailList = [];
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ // 时间格式处理
+ // const timeDate = (data: any) => {
+ // let result = new Date(data).getTime();
+ // return result;
+ // };
+ return {
+ index,
+ timeDate,
+ arr,
+ form,
+ dialogVisible,
+ openDailog,
+ activeName,
+ tableData,
+ Show,
+ daiAdd,
+ Shows,
+ daiInpt,
+ Search,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ onNumber,
+ targetType,
+ disabled,
+ resetForm,
+ titles,
+ add,
+ formUp,
+ submitForm,
+ Delete,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
diff --git a/src/views/goalManagement/targetDecompositionYear/component/DailogAdd.vue b/src/views/goalManagement/targetDecompositionYear/component/DailogAdd.vue
new file mode 100644
index 0000000..9786b4e
--- /dev/null
+++ b/src/views/goalManagement/targetDecompositionYear/component/DailogAdd.vue
@@ -0,0 +1,220 @@
+<template>
+ <el-dialog v-model="dialogVisible" :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" ref="ruleFormRef" :rules="rules">
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="责任部门" prop="dutyDepartmentId" size="default">
+ <el-tree-select v-model="form.dutyDepartmentId" check-strictly="true" :data="data" class="w100" :props="propse" placeholder="请选择" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="考核指标" prop="value" size="default">
+ <el-input v-model.number="form.value" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="制定人部门" prop="makerDepartmentId" size="default">
+ <el-tree-select v-model="form.makerDepartmentId" :data="data" check-strictly="true" class="w100" :props="propse" placeholder="请选择" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="制定日期" prop="makeDate" size="default">
+ <el-date-picker v-model="form.makeDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="上报人" prop="commitPersonName" size="default">
+ <el-input v-model="form.commitPersonName">
+ <template #append> <el-button :icon="Search" @click="openUser" /> </template
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2"> </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+
+ <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button>
+ <el-button type="primary" @click="submitForm(ruleFormRef)" size="default">确定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <DailogSearchUser ref="Show" @SearchUser="onUser"></DailogSearchUser>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive, onMounted } from 'vue';
+import { Search, FullScreen } from '@element-plus/icons-vue';
+import type { FormInstance, FormRules } from 'element-plus';
+import DailogSearchUser from '../../../../components/DailogSearchUser/index.vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ components: { DailogSearchUser },
+ setup(props, { emit }) {
+ const ruleFormRef = ref<FormInstance>()
+ const form = ref({
+ dutyDepartmentId: '', ////责任部门/外键
+ makerDepartmentId: '', ////制定人部门/外键
+ commitPersonId: '', ////上报人/外键
+ commitPersonName: '',
+ value: '', ////考核指标值
+ makeDate: '', ////制定日期
+ });
+ //部门
+ 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',
+ };
+ onMounted(() => {
+ department();
+ });
+ const disabled = ref(false);
+ // 开启弹窗
+ const titles = ref();
+ const dialogVisible = ref(false);
+ const openDailog = (title: string, data: any) => {
+ titles.value = `${title}目标指标分解`;
+ if (title == '查看') {
+ disabled.value = true;
+ form.value = data;
+ } else if (title == '修改') {
+ disabled.value = false;
+ form.value = data;
+ } else {
+ disabled.value = false;
+ }
+ dialogVisible.value = true;
+ };
+ // 开启用户弹窗
+ const Show = ref();
+ const openUser = () => {
+ Show.value.openDailog();
+ };
+ const rules = reactive<FormRules>({
+ dutyDepartmentId: [
+ {
+ required: true,
+ message: '责任部门不能为空',
+ trigger: 'change',
+ },
+ ],
+ makerDepartmentId: [
+ {
+ required: true,
+ message: '制定人部门不能为空',
+ trigger: 'change',
+ },
+ ],
+ commitPersonId: [
+ {
+ required: true,
+ message: '上报人不能为空',
+ trigger: 'blur',
+ },
+ ],
+ value: [
+ {
+ required: true,
+ message: '考核指标值不能为空',
+ trigger: 'blur',
+ },
+ {
+ type: 'number',
+ message: '考核指标值只能为数字类型',
+ trigger: 'blur',
+ },
+ ],
+ makeDate: [
+ {
+ required: true,
+ message: '制定日期不能为空',
+ trigger: 'blur',
+ },
+ ],
+ commitPersonName: [],
+ });
+ const submitForm = async (formEl: FormInstance | undefined) => {
+ if (!formEl) return;
+ await formEl.validate((valid, fields) => {
+ if (valid) {
+ emit('onAdd', form.value);
+ dialogVisible.value = false;
+ // handleClose(formEl)
+ } else {
+ console.log('error submit!', fields);
+ }
+ });
+ };
+
+ const resetForm = (formEl: FormInstance | undefined) => {
+ // console.log(formEl);
+ if (!formEl) return
+ formEl.resetFields();
+ // dialogVisible.value = false;
+ };
+ // const handleClose = (formEl: any) => {
+ // formEl.resetFields();
+ // };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ const data = ref();
+ const onUser = (e: any) => {
+ console.log(e)
+ form.value.commitPersonId = e.uid;
+ form.value.commitPersonName = e.realName;
+ };
+ return {
+ disabled,
+ titles,
+ // handleClose,
+ form,
+ propse,
+ department,
+ dialogVisible,
+ openDailog,
+ Show,
+ openUser,
+ Search,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ data,
+ onUser,
+ ruleFormRef,
+ rules,
+ submitForm,
+ resetForm,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
diff --git a/src/views/goalManagement/targetDecompositionYear/index.vue b/src/views/goalManagement/targetDecompositionYear/index.vue
new file mode 100644
index 0000000..b4d29b8
--- /dev/null
+++ b/src/views/goalManagement/targetDecompositionYear/index.vue
@@ -0,0 +1,280 @@
+<template>
+ <div>
+ <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle">
+ <el-row>
+ <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.searchParams.qName" size="default" placeholder="安全目标指标" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="16">
+ <el-form-item>
+ <el-button type="primary" size="default" @click="listApi">查询</el-button>
+ <el-button size="default" @click="resetForm">重置</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div class="minCenter">
+ <div class="btns">
+ <div>
+ <el-button size="default" type="primary" :icon="Plus" @click="openD('新建')">新建</el-button>
+ <el-button size="default" type="warning" :disabled="warning" :icon="EditPen" plain>修改</el-button>
+ <el-button size="default" type="danger" :disabled="danger" :icon="Delete" plain @click="onDeleteAll">删除</el-button>
+ </div>
+ </div>
+ <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%">
+ <el-table-column label="序号" align="center" type="index" width="70" />
+ <el-table-column type="selection" align="center" width="55" />
+ <el-table-column type="expand">
+ <template #default>
+ <div class="tableC">
+ <el-tabs v-model="activeNames">
+ <el-tab-pane label="目标指标分解" name="1">
+ <el-table :data="tableData.targetDivideDetailList" style="width: 100%">
+ <el-table-column align="center" prop="dutyDepartmentId" label="责任部门" />
+ <el-table-column align="center" prop="value" label="考核指标" />
+ <el-table-column align="center" prop="makerDepartmentId" label="制定人部门" />
+ <el-table-column align="center" prop="makeDate" label="制定日期" />
+ <el-table-column align="center" prop="commitPersonId" label="上报人" />
+ </el-table>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column label="安全目标指标" align="center" property="qName" sortable />
+ <el-table-column property="indexNum" align="center" label="目标指标编号" sortable />
+ <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" sortable show-overflow-tooltip>
+ <template #default="scope">
+ <el-button link type="primary" size="small" :icon="View" @click="openD('查看', scope.row.id)">查看</el-button>
+ <el-button link type="primary" size="small" :icon="EditPen" @click="openD('修改', scope.row.id)">修改</el-button>
+ <el-button link type="primary" size="small" :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>
+ <Dailog ref="Show" @addList="add"></Dailog>
+ </div>
+</template>
+<script lang="ts">
+import Dailog from './component/Dailog.vue';
+import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ components: { ElButton, ElInput, Dailog },
+ setup() {
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ qName: '', ////安全目标指标
+ indexNum: '', ////目标指标编号
+ targetType: '1', ////指标类型 1:年指标 2:月指标
+ divideStatus: '', ////分解状态 1:已分解 2:未分解
+ },
+ });
+ // 下方导航与表格
+ const tableData = ref([]);
+ const currentPage4 = ref();
+ const pageSize4 = ref();
+ const total = ref();
+ const resetForm = () => {
+ ruleForm.searchParams.qName = '';
+ ruleForm.searchParams.indexNum = '';
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .getTargetMngList(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 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 activeNames = ref('1');
+ // 打开弹窗
+ const Show = ref();
+ const openD = (title: String, id: number) => {
+ Show.value.openDailog(title,ruleForm.searchParams.targetType, id);
+ };
+ // 删除
+ const onDelete = (id: number) => {
+ let arr=[]
+ arr.push(id)
+ ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then(() => {
+ goalManagementApi()
+ .getTargetMngDelete(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(() => {
+ goalManagementApi()
+ .getTargetMngDelete(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 add=()=>{
+ listApi()
+ }
+ return {
+ listApi,
+ add,
+ resetForm,
+ tableData,
+ currentPage4,
+ pageSize4,
+ total,
+ ruleForm,
+ handleSizeChange,
+ handleCurrentChange,
+ Show,
+ openD,
+ activeNames,
+ onDelete,
+ warning,
+ danger,
+ deletAll,
+ handleSelectionChange,
+ onDeleteAll,
+ Plus,
+ Delete,
+ Upload,
+ Download,
+ Refresh,
+ View,
+ EditPen,
+ };
+ },
+});
+</script>
+<style scoped>
+.topTitle {
+ background-color: #fff;
+ padding: 20px 0px 20px 0px;
+}
+.minCenter {
+ width: 100%;
+ background-color: #fff;
+ margin-top: 10px;
+ padding: 0 20px;
+}
+.btns {
+ padding: 0px 0px 10px 0px;
+ display: flex;
+ justify-content: space-between;
+}
+.pages {
+ padding: 20px 0;
+ display: flex;
+ justify-content: right;
+}
+.tableC {
+ margin: 0 10%;
+}
+</style>
diff --git a/src/views/goalManagement/targetEscalation/component/Dailog.vue b/src/views/goalManagement/targetEscalation/component/Dailog.vue
new file mode 100644
index 0000000..b998c9b
--- /dev/null
+++ b/src/views/goalManagement/targetEscalation/component/Dailog.vue
@@ -0,0 +1,53 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="记录" width="50%" draggable>
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-table :data="tableData" style="width: 100%">
+ <el-table-column align="center" label="序号" type="index" width="80" />
+ <el-table-column align="center" prop="dutyDepartmentId" label="责任部门" />
+ <el-table-column align="center" prop="value" label="考核指标" />
+ <el-table-column align="center" prop="makerDepartmentId" label="制定部门" />
+ <el-table-column align="center" prop="makeDate" label="制定日期" />
+ <el-table-column align="center" prop="value" label="检查值" />
+ <el-table-column align="center" prop="commitPersonId" label="检查人" />
+ <el-table-column align="center" prop="makeDate" label="检查时间" />
+ </el-table>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="dialogVisible = false">关闭</el-button>
+ <el-button type="primary" @click="dialogVisible = false">确定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+</template>
+<script lang="ts">
+import { defineComponent, reactive, ref } from 'vue';
+import { FullScreen } from '@element-plus/icons-vue';
+export default defineComponent({
+ setup() {
+ const dialogVisible = ref(false);
+ const tableData = ref();
+ const openDailog = (data: any) => {
+ dialogVisible.value = true;
+ // console.log(data)
+ tableData.value = data;
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ dialogVisible,
+ tableData,
+ openDailog,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
diff --git a/src/views/goalManagement/targetEscalation/index.vue b/src/views/goalManagement/targetEscalation/index.vue
new file mode 100644
index 0000000..d39c1f4
--- /dev/null
+++ b/src/views/goalManagement/targetEscalation/index.vue
@@ -0,0 +1,198 @@
+<template>
+ <div>
+ <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle">
+ <el-row>
+ <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.searchParams.qName" size="default" placeholder="安全目标指标" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="16">
+ <el-form-item>
+ <el-button type="primary" size="default" @click="listApi">查询</el-button>
+ <el-button size="default" @click="resetForm">重置</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div class="minCenter">
+ <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+ <el-tab-pane label="检查" name="1"> </el-tab-pane>
+ <el-tab-pane label="上报" name="2"></el-tab-pane>
+ <el-tab-pane label="审核" name="3"></el-tab-pane>
+ </el-tabs>
+ <el-table ref="multipleTableRef" :data="tableData" style="width: 100%">
+ <el-table-column label="安全目标指标" align="center" property="qName" sortable />
+ <el-table-column property="indexNum" align="center" label="目标指标编号" sortable />
+ <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip />
+ <el-table-column v-if="activeName == 1" label="操作" align="center" show-overflow-tooltip>
+ <template #default="scope">
+ <el-button link type="primary" size="default" :icon="EditPen" @click="jumpFrom(0)">检查</el-button>
+ <el-button link type="primary" size="default" :icon="View" @click="openDai(scope.row.targetDivideDetailList)">记录</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column v-if="activeName == 2" label="操作" align="center" show-overflow-tooltip>
+ <template #default>
+ <el-button link type="primary" size="default" :icon="EditPen" @click="jumpFrom(1)">上报</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column v-if="activeName == 3" label="操作" align="center" show-overflow-tooltip>
+ <template #default>
+ <el-button link type="primary" size="default" :icon="EditPen" @click="jumpFrom">待审批</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>
+ <Dailog ref="Show"></Dailog>
+ </div>
+</template>
+<script lang="ts">
+import Dailog from './component/Dailog.vue';
+import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View, EditPen } from '@element-plus/icons-vue';
+import { useRouter } from 'vue-router';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ components: { ElButton, ElInput, Dailog },
+ setup() {
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ qName: '', ////安全目标指标
+ indexNum: '', ////目标指标编号
+ targetType: '1', ////指标类型 1:年指标 2:月指标
+ divideStatus: '', ////分解状态 1:已分解 2:未分解
+ },
+ });
+ // 重置
+ const resetForm = () => {
+ ruleForm.searchParams.qName = '';
+ ruleForm.searchParams.indexNum = '';
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .getTargetMngList(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);
+ }
+ });
+ };
+ //
+ const handleClick = (val: any) => {
+ // let targetType = JSON.parse(JSON.stringify(val));
+ ruleForm.searchParams.targetType = val.paneName;
+ listApi();
+ };
+ 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 activeName = ref<any>('1');
+ // 记录弹窗
+ const Show = ref();
+ const openDai = (data: any) => {
+ Show.value.openDailog(data);
+ };
+ // 流程表单
+ const router = useRouter();
+ const jumpFrom = (data: any) => {
+ router.push({
+ path: '/processForms',
+ query: {
+ type: data,
+ },
+ });
+ };
+ return {
+ activeName,
+ total,
+ handleClick,
+ ruleForm,
+ listApi,
+ onAddorUpdata,
+ tableData,
+ resetForm,
+ currentPage4,
+ pageSize4,
+ handleSizeChange,
+ handleCurrentChange,
+ Show,
+ openDai,
+ router,
+ jumpFrom,
+ Plus,
+ Delete,
+ Upload,
+ Download,
+ Refresh,
+ View,
+ EditPen,
+ };
+ },
+});
+</script>
+<style scoped>
+.topTitle {
+ background-color: #fff;
+ padding: 20px 0px 20px 0px;
+}
+.minCenter {
+ width: 100%;
+ background-color: #fff;
+ margin-top: 10px;
+ padding: 0 20px;
+}
+.btns {
+ padding: 0px 0px 10px 0px;
+ display: flex;
+ justify-content: space-between;
+}
+.pages {
+ padding: 20px 0;
+ display: flex;
+ justify-content: right;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/targetImprovements/component/Dailogprove.vue b/src/views/goalManagement/targetImprovements/component/Dailogprove.vue
new file mode 100644
index 0000000..ee0c885
--- /dev/null
+++ b/src/views/goalManagement/targetImprovements/component/Dailogprove.vue
@@ -0,0 +1,105 @@
+<template>
+ <el-dialog v-model="dialogVisible" :fullscreen="full" title="Tips" width="50%" :before-close="handleClose">
+ <el-button @click="toggleFullscreen" size="small" class="pot" :icon="FullScreen"></el-button>
+ <el-form :model="form" label-width="120px">
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="安全目标指标" size="default">
+ <el-input v-model="form.name"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="目标指标编号" size="default">
+ <el-input v-model="form.name" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="年度" size="default">
+ <el-input v-model="form.name" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="责任部门" size="default">
+ <el-input v-model="form.name" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="改进期限" size="default">
+ <el-date-picker v-model="form.date1" type="date" placeholder="选择日期时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2" >
+ <el-form-item label="发起人" size="default">
+ <el-input v-model="model"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="发起时间" size="default">
+ <el-date-picker v-model="form.date1" type="date" placeholder="选择日期时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <el-tabs v-model="activeName" class="demo-tabs">
+ <el-tab-pane label="目标指标" name="first"></el-tab-pane>
+ </el-tabs>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="dialogVisible = false">关闭</el-button>
+ </span>
+ </template>
+ </el-dialog>
+</template>
+<script lang="ts">
+import { defineComponent, ref, reactive } from 'vue';
+import { Plus, Delete, Upload, Download, Refresh, View, Search, FullScreen } from '@element-plus/icons-vue';
+export default defineComponent({
+ setup() {
+ const dialogVisible = ref(false);
+ const form = reactive({
+ name: '',
+ region: '',
+ date1: '',
+ date2: '',
+ delivery: false,
+ type: [],
+ resource: '',
+ desc: '',
+ });
+ const openDailog = () => {
+ dialogVisible.value = true;
+ };
+ const activeName = ref('first');
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ return {
+ dialogVisible,
+ form,
+ openDailog,
+ activeName,
+ Search,
+ full,
+ toggleFullscreen,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/targetImprovements/index.vue b/src/views/goalManagement/targetImprovements/index.vue
new file mode 100644
index 0000000..b273902
--- /dev/null
+++ b/src/views/goalManagement/targetImprovements/index.vue
@@ -0,0 +1,307 @@
+<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.pass" placeholder="安全目标指标" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <el-form-item>
+ <el-button type="primary" size="default" @click="submitForm(ruleFormRef)">查询</el-button>
+ <el-button size="default" @click="resetForm(ruleFormRef)">重置</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div class="minCenter">
+ <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+ <el-tab-pane label="发起改进" name="1">
+ <el-table ref="multipleTableRef" :data="tableData" style="width: 100%">
+ <el-table-column label="序号" align="center" type="index" width="70" />
+ <el-table-column label="安全目标指标" align="center" sortable>
+ <template #default="scope">{{ scope.row.date }}</template>
+ </el-table-column>
+ <el-table-column property="name" align="center" label="目标指标编号" sortable />
+ <el-table-column property="address" label="年度" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="责任部门" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="考核指标" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="上报值" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="考核时间" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="考核结果" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" width="200" sortable show-overflow-tooltip>
+ <template #default>
+ <el-button link type="primary" size="default" :icon="View" @click="handleClick">查看</el-button>
+ <el-button link type="primary" size="default" :icon="Delete">删除</el-button>
+ </template>
+ </el-table-column>
+ </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-tab-pane>
+ <el-tab-pane label="整改" name="2">
+ <el-table ref="multipleTableRef" :data="tableData" style="width: 100%">
+ <el-table-column label="序号" align="center" type="index" width="70" />
+ <el-table-column label="安全目标指标" align="center" sortable>
+ <template #default="scope">{{ scope.row.date }}</template>
+ </el-table-column>
+ <el-table-column property="name" align="center" label="目标指标编号" sortable />
+ <el-table-column property="address" label="年度" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="责任部门" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="考核指标" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="改进期限" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="发起人" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="发起时间" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" width="200" sortable show-overflow-tooltip>
+ <template #default>
+ <el-button link type="primary" size="default" :icon="View" @click="openDai">查看</el-button>
+ <el-button link type="primary" size="default" :icon="Delete" @click="jump">整改上报</el-button>
+ </template>
+ </el-table-column>
+ </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-tab-pane>
+ <el-tab-pane label="验证" name="3">
+ <el-table ref="multipleTableRef" :data="tableData" style="width: 100%">
+ <el-table-column label="序号" align="center" type="index" width="70" />
+ <el-table-column label="安全目标指标" align="center" sortable>
+ <template #default="scope">{{ scope.row.date }}</template>
+ </el-table-column>
+ <el-table-column property="name" align="center" label="目标指标编号" sortable />
+ <el-table-column property="address" label="年度" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="责任部门" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="考核指标" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="整改值" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="整改时间" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" width="200" sortable show-overflow-tooltip>
+ <template #default>
+ <el-button link type="primary" size="default" :icon="View" @click="handleClick">查看</el-button>
+ <el-button link type="primary" size="default" :icon="Delete">删除</el-button>
+ </template>
+ </el-table-column>
+ </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-tab-pane>
+ <el-tab-pane label="完成" name="4">
+ <el-table ref="multipleTableRef" :data="tableData" style="width: 100%">
+ <el-table-column label="序号" align="center" type="index" width="70" />
+ <el-table-column label="安全目标指标" align="center" sortable>
+ <template #default="scope">{{ scope.row.date }}</template>
+ </el-table-column>
+ <el-table-column property="name" align="center" label="目标指标编号" sortable />
+ <el-table-column property="address" label="年度" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="责任部门" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="考核指标" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="整改值" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="整改时间" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="验证结果" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="address" label="验证日期" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" width="200" sortable show-overflow-tooltip>
+ <template #default>
+ <el-button link type="primary" size="default" :icon="View" @click="handleClick">查看</el-button>
+ <el-button link type="primary" size="default" :icon="Delete">审批进度</el-button>
+ </template>
+ </el-table-column>
+ </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-tab-pane>
+ </el-tabs>
+ </div>
+ <Dailogprove ref="Show"></Dailogprove>
+ </div>
+</template>
+<script lang="ts">
+import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View } from '@element-plus/icons-vue';
+interface User {
+ date: string;
+ name: string;
+ address: string;
+}
+import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults';
+import Dailogprove from './component/Dailogprove.vue';
+import { useRouter } from 'vue-router';
+export default defineComponent({
+ components: { ElButton, ElInput,Dailogprove},
+ setup() {
+ // 搜索条件
+ const ruleForm = reactive({
+ pass: '',
+ checkPass: '',
+ });
+ const resetForm = (formEl: FormInstance | undefined) => {
+ console.log(!formEl);
+ if (!formEl) return;
+ formEl.resetFields();
+ };
+ // 下方导航与表格
+ const activeName = ref('1');
+ const handleClick = (tab: TabsPaneContext, event: Event) => {
+ console.log(tab, event);
+ };
+ const formatter = (row: User, column: TableColumnCtx<User>) => {
+ return row.address;
+ };
+
+ const tableData: User[] = [
+ {
+ date: '2016-05-03',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-02',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-04',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-01',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-08',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-06',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ {
+ date: '2016-05-07',
+ name: 'Tom',
+ address: 'No. 189, Grove St, Los Angeles',
+ },
+ ];
+ const currentPage4 = ref(4);
+ const pageSize4 = ref(100);
+ const small = ref(false);
+ const disabled = ref(false);
+ const background = ref(false);
+ const handleSizeChange = (val: number) => {
+ console.log(`${val} items per page`);
+ };
+ const handleCurrentChange = (val: number) => {
+ console.log(`current page: ${val}`);
+ };
+ const Show=ref()
+ const openDai=()=>{
+ Show.value.openDailog()
+ }
+ const router=useRouter()
+ const jump=()=>{
+ router.push({
+ path:"/processForms"
+ })
+ }
+ return {
+ ruleForm,
+ resetForm,
+ activeName,
+ handleClick,
+ tableData,
+ formatter,
+ currentPage4,
+ pageSize4,
+ handleSizeChange,
+ handleCurrentChange,
+ small,
+ disabled,
+ background,
+ Show,
+ router,
+ jump,
+ openDai,
+ Plus,
+ Delete,
+ Upload,
+ Download,
+ Refresh,
+ View,
+ };
+ },
+});
+</script>
+<style scoped>
+.topTitle {
+ background-color: #fff;
+ padding: 20px 0px 20px 0px;
+ margin-bottom: 10px;
+}
+.minCenter {
+ width: 100%;
+ background-color: #fff;
+ margin-top: 10px;
+ padding: 0 20px;
+}
+.btns {
+ padding: 10px 0px 10px 0px;
+ display: flex;
+ justify-content: space-between;
+}
+.pages {
+ padding: 20px 0;
+ display: flex;
+ justify-content: right;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/targetSettings/component/dailogAdd.vue b/src/views/goalManagement/targetSettings/component/dailogAdd.vue
new file mode 100644
index 0000000..f0fdef8
--- /dev/null
+++ b/src/views/goalManagement/targetSettings/component/dailogAdd.vue
@@ -0,0 +1,198 @@
+<template>
+ <el-dialog v-model="Shows" @close="handleClose(ruleFormRef)" :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" ref="ruleFormRef" :rules="rules" label-width="120px">
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="安全目标指标" prop="qName" size="default">
+ <el-input v-model="form.qName" placeholder="请填写安全目标指标" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="目标指标编号" prop="indexNum" size="default">
+ <el-input v-model="form.indexNum" placeholder="请填写目标指标编号" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="年度" prop="year" size="default">
+ <el-input v-model.number="form.year" maxlength="8" placeholder="请填写年度" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11" :offset="2">
+ <el-form-item label="指标值" prop="value" size="default">
+ <el-input v-model="form.value" placeholder="请填写指标值" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="11">
+ <el-form-item label="指标级别" size="default" prop="level">
+ <el-select v-model="form.level" placeholder="请选择" style="width: 100%">
+ <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 :span="11" :offset="2">
+ <el-form-item label="完成期限" size="default" prop="completeDate">
+ <el-date-picker v-model="form.completeDate" format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-form-item label="备注信息" prop="memo">
+ <el-input v-model="form.memo" size="default" type="textarea" />
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="resetForm(ruleFormRef)" size="default">关闭</el-button>
+ <el-button type="primary" v-if="titles == '查看目标设定' ? false : true" @click="submitForm(ruleFormRef)" size="default">确定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+</template>
+<script lang="ts">
+import { ref, toRefs, reactive, onMounted, watch, defineComponent } from 'vue';
+import screenfull from 'screenfull';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext } from 'element-plus';
+import type { FormInstance, FormRules } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View, Search, FullScreen } from '@element-plus/icons-vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ setup(props, { emit }) {
+ let Shows = ref(false);
+ const ruleFormRef = ref<FormInstance>();
+ const form = ref({
+ indexNum: '', //目标指标编号
+ qName: '', //安全目标指标
+ year: '', //年度
+ level: '', ////指标级别 1:公司级 2:部门分厂级 3:工段班组级
+ memo: '', ////备注信息
+ targetType: '', ////指标类型 1:年指标 2:月指标
+ completeDate: '', ////完成期限
+ divideStatus: '2', ////分解状态 1:已分解 2:未分解
+ value: '', ////指标值
+ });
+ const titles = ref();
+ const disabled = ref(false);
+ // 打开弹窗
+ const openDialog = (title: string, value: any, id: number) => {
+ Shows.value = true;
+ titles.value = `${title}目标设定`;
+ form.value.targetType = value;
+ disabled.value = title == '查看' ? true : false;
+ if (title == '查看' || title == '修改')
+ goalManagementApi()
+ .getTargetMngDetail(id)
+ .then((res) => {
+ if (res.data.code == 200) {
+ form.value = res.data.data;
+ } else {
+ ElMessage.error(res.data.msg);
+ }
+ });
+ };
+ //全屏
+ const full = ref(false);
+ const toggleFullscreen = () => {
+ if (full.value == false) {
+ full.value = true;
+ } else {
+ full.value = false;
+ }
+ };
+ const rules = reactive<FormRules>({
+ qName: [
+ {
+ required: true,
+ message: '安全目标指标不能为空',
+ trigger: 'change',
+ },
+ ],
+ indexNum: [
+ {
+ required: true,
+ message: '目标指标编号不能为空',
+ trigger: 'change',
+ },
+ ],
+ year: [
+ {
+ required: true,
+ message: '年度不能为空',
+ trigger: 'change',
+ },
+ ],
+ value: [
+ {
+ required: true,
+ message: '指标值不能为空',
+ trigger: 'change',
+ },
+ ],
+ level:[],
+ completeDate:[],
+ memo:[]
+
+ });
+ // 提交
+ const submitForm = async (formEl: FormInstance | undefined) => {
+ if (!formEl) return;
+ await formEl.validate((valid, fields) => {
+ if (valid) {
+ Shows.value = false;
+ goalManagementApi()
+ .getTargetMngAddOrupdata(form.value)
+ .then((res) => {
+ if (res.data.code == 200) {
+ ElMessage({
+ message: res.data.msg,
+ type: 'success',
+ });
+ emit('navAddorUpdata');
+ } else {
+ ElMessage.error(res.data.msg);
+ formEl.resetFields();
+ }
+ });
+ formEl.resetFields();
+ } else {
+ console.log('error submit!', fields);
+ }
+ });
+ };
+ // 取消
+ const resetForm = (formEl: FormInstance | undefined) => {
+ if (!formEl) return;
+ formEl.resetFields();
+ Shows.value = false;
+ };
+ const handleClose = (formEl: FormInstance | undefined) => {
+ formEl.resetFields();
+ };
+ return {
+ openDialog,
+ handleClose,
+ titles,
+ Shows,
+ form,
+ full,
+ disabled,
+ toggleFullscreen,
+ rules,
+ ruleFormRef,
+ submitForm,
+ resetForm,
+ FullScreen,
+ };
+ },
+});
+</script>
+<style scoped>
+.el-row {
+ padding: 0 0 20px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/targetSettings/component/search.vue b/src/views/goalManagement/targetSettings/component/search.vue
new file mode 100644
index 0000000..35b1a6a
--- /dev/null
+++ b/src/views/goalManagement/targetSettings/component/search.vue
@@ -0,0 +1,52 @@
+<template>
+ <el-form ref="ruleFormRef" :model="ruleForm" status-icon label-width="20px" class="topTitle">
+ <el-row>
+ <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.pass" size="default" placeholder="安全目标指标" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.checkPass" size="default" placeholder="目标指标编号" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="16">
+ <el-form-item>
+ <el-button type="primary" size="default" @click="submitForm(ruleFormRef)">查询</el-button>
+ <el-button size="default" @click="resetForm(ruleFormRef)">重置</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+</template>
+<script lang="ts">
+import { ref, reactive, defineComponent } from 'vue';
+import {
+ FormInstance,
+} from "element-plus";
+export default defineComponent({
+ setup() {
+ // 搜索条件
+ const ruleForm = reactive({
+ pass: '',
+ checkPass: '',
+ });
+ const resetForm = (formEl: FormInstance | undefined) => {
+ console.log(!formEl);
+ if (!formEl) return;
+ formEl.resetFields();
+ };
+ return {
+ ruleForm,
+ resetForm
+ };
+ },
+});
+</script>
+<style scoped>
+ .topTitle {
+ background-color: #fff;
+ padding: 20px 0px 20px 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/goalManagement/targetSettings/index.vue b/src/views/goalManagement/targetSettings/index.vue
new file mode 100644
index 0000000..63a96fc
--- /dev/null
+++ b/src/views/goalManagement/targetSettings/index.vue
@@ -0,0 +1,297 @@
+<template>
+ <div>
+ <el-form :model="ruleForm" status-icon label-width="20px" class="topTitle">
+ <el-row>
+ <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.searchParams.qName" size="default" placeholder="安全目标指标" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="ruleForm.searchParams.indexNum" size="default" placeholder="目标指标编号" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="16">
+ <el-form-item>
+ <el-button type="primary" size="default" @click="listApi">查询</el-button>
+ <el-button size="default" @click="resetForm">重置</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div class="minCenter">
+ <el-tabs v-model="ruleForm.searchParams.targetType" class="demo-tabs" @tab-click="handleClick">
+ <div class="btns">
+ <div>
+ <el-button type="primary" size="default" :icon="Plus" @click="openD('新建')">新建</el-button>
+ <el-button type="danger" :disabled="danger" size="default" @click="onDeleteAll" :icon="Delete" plain>删除</el-button>
+ </div>
+ <div>
+ <!-- <el-button size="default" :icon="Upload" @click="upButton"></el-button>
+ <el-button size="default" :icon="Download"></el-button>
+ <el-button size="default" :icon="Refresh"></el-button> -->
+ </div>
+ </div>
+ <el-tab-pane label="目标定制(年)" name="1"> </el-tab-pane>
+ <el-tab-pane label="目标定制(月)" name="2"></el-tab-pane>
+ </el-tabs>
+ <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%">
+ <el-table-column label="序号" align="center" type="index" width="70" />
+ <el-table-column type="selection" align="center" width="55" />
+ <el-table-column label="安全目标指标" align="center" property="qName" sortable />
+ <el-table-column property="indexNum" align="center" label="目标指标编号" sortable />
+ <el-table-column property="year" label="年度" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="value" label="指标值" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="level" label="指标级别" align="center" sortable show-overflow-tooltip />
+ <el-table-column property="completeDate" label="完成期限" align="center" :formatter="timeDate" sortable show-overflow-tooltip />
+ <el-table-column label="状态" align="center" sortable show-overflow-tooltip>
+ <template #default="scope">
+ <span v-if="scope.row.divideStatus == 1">已分解</span>
+ <span v-if="scope.row.divideStatus == 2">未分解</span>
+ </template>
+ </el-table-column>
+ <el-table-column property="memo" label="备注信息" align="center" sortable show-overflow-tooltip />
+ <el-table-column label="操作" align="center" width="300" sortable show-overflow-tooltip>
+ <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="View" @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>
+ <dailogAdd ref="openAdd" @navAddorUpdata="onAddorUpdata"></dailogAdd>
+ <upData ref="upShow"></upData>
+ </div>
+ </div>
+</template>
+<script lang="ts">
+import dailogAdd from './component/dailogAdd.vue';
+import {timeDate} from '/@/assets/index.ts'
+import upData from '../../../components/updata/updata.vue';
+import { ref, toRefs, reactive, onMounted, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage, ElButton, ElInput, TabsPaneContext, FormInstance } from 'element-plus';
+import { Plus, Delete, Upload, Download, Refresh, View } from '@element-plus/icons-vue';
+import { goalManagementApi } from '/@/api/goalManagement';
+export default defineComponent({
+ components: { ElButton, ElInput, dailogAdd, upData },
+ setup() {
+ // 搜索条件
+ const ruleForm = reactive({
+ pageSize: 10,
+ pageIndex: 1,
+ searchParams: {
+ qName: '', ////安全目标指标
+ indexNum: '', ////目标指标编号
+ targetType: '1', ////指标类型 1:年指标 2:月指标
+ divideStatus: '', ////分解状态 1:已分解 2:未分解
+ },
+ });
+ // 重置
+ const resetForm = () => {
+ ruleForm.searchParams.qName = '';
+ ruleForm.searchParams.indexNum = '';
+ };
+ const listApi = () => {
+ goalManagementApi()
+ .getTargetMngList(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);
+ }
+ });
+ };
+ //
+ const handleClick = (val: any) => {
+ let targetType = JSON.parse(JSON.stringify(val));
+ ruleForm.searchParams.targetType = targetType.paneName;
+ listApi();
+ };
+ onMounted(() => {
+ listApi();
+ });
+ const onAddorUpdata = () => {
+ listApi();
+ };
+ // 表格
+ const tableData = ref();
+ const currentPage4 = ref();
+ const pageSize4 = ref();
+ const total = ref();
+ const small = ref(false);
+ const disabled = ref(false);
+ const background = ref(false);
+ 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.openDialog(title, ruleForm.searchParams.targetType, id);
+ };
+ // 删除
+ const onDelete = (id: number) => {
+ let arr=[]
+ arr.push(id)
+ ElMessageBox.confirm('确定删除所选项吗?', 'Warning', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then(() => {
+ goalManagementApi()
+ .getTargetMngDelete(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(() => {
+ goalManagementApi()
+ .getTargetMngDelete(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 upShow = ref();
+ // const upButton = () => {
+ // upShow.value.openDialog();
+ // };
+ return {
+ timeDate,
+ tableData,
+ currentPage4,
+ pageSize4,
+ total,
+ handleSizeChange,
+ handleCurrentChange,
+ handleClick,
+ openAdd,
+ openD,
+ // upShow,
+ // upButton,
+ small,
+ disabled,
+ background,
+ Plus,
+ Delete,
+ Upload,
+ Download,
+ Refresh,
+ View,
+ listApi,
+ ruleForm,
+ resetForm,
+ onAddorUpdata,
+ onDelete,
+ handleSelectionChange,
+ deletAll,
+ danger,
+ onDeleteAll,
+ };
+ },
+});
+</script>
+<style scoped>
+.topTitle {
+ background-color: #fff;
+ padding: 20px 0px 20px 0px;
+}
+.minCenter {
+ width: 100%;
+ background-color: #fff;
+ margin-top: 10px;
+ padding: 0 20px;
+}
+.btns {
+ padding: 0px 0px 10px 0px;
+ display: flex;
+ justify-content: space-between;
+}
+.pages {
+ padding: 20px 0;
+ display: flex;
+ justify-content: right;
+}
+</style>
diff --git a/src/views/intellectInspect/inspectBigScreen/index.vue b/src/views/intellectInspect/inspectBigScreen/index.vue
new file mode 100644
index 0000000..53838fc
--- /dev/null
+++ b/src/views/intellectInspect/inspectBigScreen/index.vue
@@ -0,0 +1,704 @@
+<template>
+ <div class="container">
+ <div class="big-title" @click="goBack"><span></span>大型实验室智能巡检系统<span></span></div>
+ <div style="font-size: 14px; color: #00ffff">{{ present }}</div>
+ <div class="blocks">
+ <div class="current-data">
+ <div class="data-area">
+ <img src="../../../assets/loginPage/xj-icon.png" />
+ <div>当前巡检:<span>实验室装置区</span></div>
+ </div>
+ <div class="data-spot">
+ <div>
+ <span>巡检点</span>
+ <p>3970A</p>
+ </div>
+ <div>
+ <span>指标</span>
+ <p>压力</p>
+ </div>
+ </div>
+ </div>
+ <div class="line-map">
+ <div class="item item-t item-l">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73017</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>压力:</span><span>3.6Bar</span></div>
+ </div>
+ </div>
+ <div class="item item-l">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73018</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>压力:</span><span>3.6Bar</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ <div></div>
+ <div></div>
+ <div></div>
+ <div class="item item-l">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73016</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>压力:</span><span>3.6Bar</span></div>
+ </div>
+ </div>
+ <div class="item item-l">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73019</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>80℃</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ <div class="item item-t item-l undone">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>3970C</span></div>
+ <div><span>定位状态:</span><span>未完成</span></div>
+ <div><span>压力:</span><span>--</span></div>
+ </div>
+ </div>
+ <div class="item item-t undone">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>3970D</span></div>
+ <div><span>定位状态:</span><span>未完成</span></div>
+ <div><span>压力:</span><span>--</span></div>
+ </div>
+ </div>
+ <div class="item finish">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <span></span>
+ <p>完成巡检</p>
+ </div>
+ <div class="item start">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <span></span>
+ <p>开始巡检</p>
+ </div>
+ <div class="item item-l">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73020</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>压力:</span><span>3.6Bar</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ <div class="item item-l undone">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>3970B</span></div>
+ <div><span>定位状态:</span><span>未完成</span></div>
+ <div><span>压力:</span><span>--</span></div>
+ </div>
+ </div>
+ <div class="pic-tit water">
+ <img src="../../../assets/loginPage/equipment.JPG" />
+ <p>实验室装置区</p>
+ </div>
+ <div></div>
+ <div class="pic-tit">
+ <img src="../../../assets/loginPage/wind.JPG" />
+ <p>实验室风机系统</p>
+ </div>
+ <div class="item item-l warning">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73021</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>130℃</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ <div class="item item-l undone">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>3970A</span></div>
+ <div><span>定位状态:</span><span>未完成</span></div>
+ <div><span>压力:</span><span>--</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ <div class="pic-tit water">
+ <img src="../../../assets/loginPage/watersys.JPG" />
+ <p>实验室循环水系统</p>
+ </div>
+ <div class="item item-t">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>80210</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>80摄氏度</span></div>
+ </div>
+ </div>
+ <div class="item item-t">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>80211</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>80摄氏度</span></div>
+ </div>
+ </div>
+ <div class="item item-t">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>80212</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>80摄氏度</span></div>
+ </div>
+ </div>
+ <div class="item">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>80213</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>80摄氏度</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ </div>
+ <div class="section-1"></div>
+ <div class="section-2"></div>
+ <div class="section-3"></div>
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ name: 'NewForm',
+ props: {},
+ data() {
+ return {
+ present: ''
+ };
+ },
+ created() {
+ setInterval(() => {
+ this.present = new Date().toLocaleString();
+ }, 1000);
+ }
+};
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped lang="scss">
+@keyframes warn {
+ 0% {
+ transform: scale(0.3);
+ -webkit-transform: scale(0.3);
+ opacity: 0;
+ }
+
+ 25% {
+ transform: scale(0.3);
+ -webkit-transform: scale(0.3);
+ opacity: 0.1;
+ }
+
+ 50% {
+ transform: scale(0.5);
+ -webkit-transform: scale(0.5);
+ opacity: 0.3;
+ }
+
+ 75% {
+ transform: scale(0.8);
+ -webkit-transform: scale(0.8);
+ opacity: 0.6;
+ }
+
+ 100% {
+ transform: scale(1);
+ -webkit-transform: scale(1);
+ opacity: 0;
+ }
+}
+
+@keyframes warn1 {
+ 0% {
+ transform: scale(0.3);
+ -webkit-transform: scale(0.3);
+ opacity: 0;
+ }
+
+ 25% {
+ transform: scale(0.3);
+ -webkit-transform: scale(0.3);
+ opacity: 0.1;
+ }
+
+ 50% {
+ transform: scale(0.3);
+ -webkit-transform: scale(0.3);
+ opacity: 0.3;
+ }
+
+ 75% {
+ transform: scale(0.5);
+ -webkit-transform: scale(0.5);
+ opacity: 0.6;
+ }
+
+ 100% {
+ transform: scale(0.8);
+ -webkit-transform: scale(0.8);
+ opacity: 0;
+ }
+}
+
+@keyframes circle {
+ 0% {
+ transform: rotate(0);
+ -webkit-transform: rotate(0);
+ }
+ 100% {
+ transform: rotate(360deg);
+ -webkit-transform: rotate(360deg);
+ }
+}
+.container {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ background: url('../../../assets/loginPage/map-bg.jpg') no-repeat center;
+ background-size: 100% 100%;
+ .big-title {
+ height: 40px;
+ line-height: 40px;
+ font-size: 28px;
+ font-weight: bold;
+ margin: 10px 0 20px;
+ text-align: center;
+ color: #fff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ span {
+ width: 60px;
+ height: 1px;
+ background: #36fcfc;
+ margin: 0 20px;
+ }
+ }
+
+ .blocks {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ padding: 20px 20px 20px 100px;
+ box-sizing: border-box;
+ .line-map {
+ position: absolute;
+ width: calc(100% - 120px);
+ left: 110px;
+ top: 10px;
+ flex-direction: column;
+ align-items: center;
+ z-index: 99;
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ grid-gap: 0;
+
+ .item {
+ width: calc((100vw - 120px) / 7);
+ height: calc((100vh - 130px) / 5);
+ padding: 20px 40px 20px 20px;
+ position: relative;
+ box-sizing: border-box;
+
+ section {
+ width: 28px;
+ height: 28px;
+ border-radius: 50%;
+ position: absolute;
+ border: 1px solid #00ff66;
+ top: -14px;
+ left: -14px;
+
+ .dot {
+ position: absolute;
+ width: 18px;
+ height: 18px;
+ left: 4px;
+ top: 4px;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border: 1px solid #00ff66;
+ border-radius: 50%;
+ background-color: #00ff66;
+ z-index: 2;
+ }
+ .pulse {
+ position: absolute;
+ width: 56px;
+ height: 56px;
+ left: -15px;
+ top: -15px;
+ border: 1px solid #00ff66;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border-radius: 50%;
+ z-index: 1;
+ opacity: 0;
+ -webkit-animation: warn 2s ease-out;
+ -moz-animation: warn 2s ease-out;
+ animation: warn 2s ease-out;
+ -webkit-animation-iteration-count: infinite;
+ -moz-animation-iteration-count: infinite;
+ animation-iteration-count: infinite;
+ box-shadow: 1px 1px 30px #00ff66;
+ }
+ .pulse1 {
+ position: absolute;
+ width: 56px;
+ height: 56px;
+ left: -15px;
+ top: -15px;
+ border: 1px solid #3399ff;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border-radius: 50%;
+ z-index: 1;
+ opacity: 0;
+ -webkit-animation: warn1 2s ease-out;
+ -moz-animation: warn1 2s ease-out;
+ animation: warn1 2s ease-out;
+ -webkit-animation-iteration-count: infinite;
+ -moz-animation-iteration-count: infinite;
+ animation-iteration-count: infinite;
+ box-shadow: 1px 1px 30px #3399ff;
+ }
+ }
+ & > div {
+ padding: 10px 0;
+ border-radius: 8px;
+ background-image: linear-gradient(to right, rgba(8, 109, 209, 0.4), rgba(11, 255, 255, 0.2));
+ border: 1px solid rgba(54, 252, 252, 0.6);
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+
+ div {
+ &:nth-of-type(2) {
+ margin: 5px 0;
+ }
+
+ span {
+ display: inline-block;
+ width: 50%;
+ font-size: 14px;
+ color: #fff;
+ text-align: left;
+
+ &:first-of-type {
+ text-align: right;
+ color: rgba(255, 255, 255, 0.8);
+ }
+ }
+ }
+ }
+
+ p {
+ width: 140px;
+ height: 50px;
+ font-size: 18px;
+ line-height: 48px;
+ text-align: center;
+ color: #fff;
+ border-radius: 8px;
+ background-image: linear-gradient(to right, rgba(11, 255, 255, 0.2), rgba(8, 109, 209, 0.4));
+ border: 1px solid rgba(54, 252, 252, 0.6);
+ }
+ }
+
+ .item-t {
+ border-top: 1px solid #36fcfc;
+ }
+ .item-l {
+ border-left: 1px solid #36fcfc;
+ }
+ .warning {
+ & > section {
+ border: 1px solid #ff0000;
+
+ .dot {
+ border: 1px solid #ff0000;
+ background: #ff0000;
+ }
+ .pulse {
+ border: 1px solid #ff0000;
+ box-shadow: 1px 1px 30px #ff0000;
+ }
+ .pulse1 {
+ border: 1px solid #ff0000;
+ box-shadow: 1px 1px 30px #ff0000;
+ }
+ }
+
+ & > div {
+ div:last-of-type {
+ span:nth-of-type(2) {
+ color: #ff0000;
+ }
+ }
+ }
+ }
+ .undone {
+ & > section {
+ border: 1px solid #ccc;
+
+ .dot {
+ border: 1px solid #ccc;
+ background: #ccc;
+ }
+ .pulse {
+ display: none;
+ }
+ .pulse1 {
+ display: none;
+ }
+ }
+ }
+ .pic-tit {
+ display: flex;
+ width: calc((100vw - 120px) / 7);
+ height: 160px;
+ padding: 20px;
+ transform: translate(-20px, -40%);
+ flex-direction: column;
+ align-items: flex-start;
+
+ img {
+ width: calc((100vw - 120px) / 7 - 40px);
+ height: 90px;
+ margin-bottom: 10px;
+ border-radius: 4px;
+ }
+ p {
+ font-size: 16px;
+ color: #00ffff;
+ font-weight: bold;
+ }
+ }
+
+ .water {
+ transform: none;
+ }
+ .start {
+ padding: 40px 0;
+ p {
+ margin-top: -21px;
+ margin-left: 20px;
+ }
+ span {
+ width: 1px;
+ height: 50px;
+ background: #36fcfc;
+ position: absolute;
+ top: -10px;
+ left: 0;
+ }
+ section {
+ position: absolute;
+ top: 30px;
+ left: -14px;
+ }
+ }
+ .finish {
+ padding: 0 40px;
+ p {
+ margin-top: -25px;
+ margin-left: 4px;
+ }
+ span {
+ width: 100%;
+ height: 1px;
+ background: #36fcfc;
+ position: absolute;
+ top: 0;
+ left: calc(40px - 100%);
+ }
+ section {
+ position: absolute;
+ top: -14px;
+ left: 30px;
+ }
+ }
+ }
+ .current-data {
+ position: absolute;
+ z-index: 999999;
+ width: 270px;
+ height: 142px;
+ left: 50%;
+ padding: 20px 30px;
+ box-sizing: border-box;
+ transform: translateX(-65%);
+ background: url('../../../assets/loginPage/xj-bg.png') no-repeat center;
+ background-size: 100% 100%;
+
+ .data-area {
+ display: flex;
+ align-items: center;
+ border-bottom: 1px solid #00ffff;
+ font-weight: bold;
+ padding-bottom: 10px;
+ box-sizing: border-box;
+
+ img {
+ width: 30px;
+ height: 30px;
+ margin-right: 10px;
+ animation: circle 1s ease-in-out infinite;
+ }
+
+ div {
+ font-size: 15px;
+ color: rgba(255, 255, 255, 0.8);
+
+ span {
+ color: #00ffff;
+ }
+ }
+ }
+
+ .data-spot {
+ display: flex;
+ align-items: flex-start;
+ margin-top: 10px;
+
+ & > div {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: 50%;
+ font-size: 14px;
+ color: rgba(255, 255, 255, 0.8);
+
+ p {
+ margin-top: 6px;
+ color: #00ffff;
+ }
+
+ &:first-of-type {
+ border-right: 1px solid #36fcfc;
+ }
+ }
+ }
+ }
+ .section-1 {
+ position: absolute;
+ left: 70px;
+ top: -10px;
+ width: calc((200vw - 240px) / 7 + 60px);
+ height: 630px;
+ background: rgba(0, 100, 190, 0.1);
+ border: 1px solid rgba(0, 100, 190, 0.4);
+ border-radius: 8px;
+ }
+ .section-2 {
+ position: absolute;
+ left: calc((400vw - 480px) / 7 + 70px);
+ top: 150px;
+ width: calc((200vw - 240px) / 7 + 60px);
+ height: 470px;
+ background: rgba(0, 100, 190, 0.1);
+ border: 1px solid rgba(0, 100, 190, 0.4);
+ border-radius: 8px;
+ }
+ .section-3 {
+ position: absolute;
+ left: 100px;
+ top: 630px;
+ width: calc((500vw - 600px) / 7 + 30px);
+ height: 180px;
+ background: rgba(0, 100, 190, 0.1);
+ border: 1px solid rgba(0, 100, 190, 0.4);
+ border-radius: 8px;
+ }
+ }
+}
+</style>
diff --git a/src/views/intellectInspect/intelligentMap/index.vue b/src/views/intellectInspect/intelligentMap/index.vue
index 3df2f3c..507c8c1 100644
--- a/src/views/intellectInspect/intelligentMap/index.vue
+++ b/src/views/intellectInspect/intelligentMap/index.vue
@@ -1,716 +1,710 @@
<template>
- <div class="container">
- <div class="big-title"><span></span>大型实验室智能巡检系统<span></span></div>
- <div style="font-size: 14px;color: #00ffff">{{present}}</div>
- <div class="blocks">
- <div class="current-data">
- <div class="data-area">
- <img src="../../../assets/loginPage/xj-icon.png">
- <div>当前巡检:<span>实验室装置区</span></div>
- </div>
- <div class="data-spot">
- <div>
- <span>巡检点</span>
- <p>3970A</p>
- </div>
- <div>
- <span>指标</span>
- <p>压力</p>
- </div>
- </div>
- </div>
- <div class="line-map">
- <div class="item item-t item-l">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>73017</span></div>
- <div><span>定位状态:</span><span>已完成</span></div>
- <div><span>压力:</span><span>3.6Bar</span></div>
+ <div class="container">
+ <div class="big-title" @click="goBack"><span></span>大型实验室智能巡检系统<span></span></div>
+ <div style="font-size: 14px; color: #00ffff">{{ present }}</div>
+ <div class="blocks">
+ <div class="current-data">
+ <div class="data-area">
+ <img src="../../../assets/loginPage/xj-icon.png" />
+ <div>当前巡检:<span>实验室装置区</span></div>
+ </div>
+ <div class="data-spot">
+ <div>
+ <span>巡检点</span>
+ <p>3970A</p>
+ </div>
+ <div>
+ <span>指标</span>
+ <p>压力</p>
+ </div>
+ </div>
</div>
+ <div class="line-map">
+ <div class="item item-t item-l">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73017</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>压力:</span><span>3.6Bar</span></div>
+ </div>
+ </div>
+ <div class="item item-l">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73018</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>压力:</span><span>3.6Bar</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ <div></div>
+ <div></div>
+ <div></div>
+ <div class="item item-l">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73016</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>压力:</span><span>3.6Bar</span></div>
+ </div>
+ </div>
+ <div class="item item-l">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73019</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>80℃</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ <div class="item item-t item-l undone">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>3970C</span></div>
+ <div><span>定位状态:</span><span>未完成</span></div>
+ <div><span>压力:</span><span>--</span></div>
+ </div>
+ </div>
+ <div class="item item-t undone">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>3970D</span></div>
+ <div><span>定位状态:</span><span>未完成</span></div>
+ <div><span>压力:</span><span>--</span></div>
+ </div>
+ </div>
+ <div class="item finish">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <span></span>
+ <p>完成巡检</p>
+ </div>
+ <div class="item start">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <span></span>
+ <p>开始巡检</p>
+ </div>
+ <div class="item item-l">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73020</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>压力:</span><span>3.6Bar</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ <div class="item item-l undone">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>3970B</span></div>
+ <div><span>定位状态:</span><span>未完成</span></div>
+ <div><span>压力:</span><span>--</span></div>
+ </div>
+ </div>
+ <div class="pic-tit water">
+ <img src="../../../assets/loginPage/equipment.JPG" />
+ <p>实验室装置区</p>
+ </div>
+ <div></div>
+ <div class="pic-tit">
+ <img src="../../../assets/loginPage/wind.JPG" />
+ <p>实验室风机系统</p>
+ </div>
+ <div class="item item-l warning">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>73021</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>130℃</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ <div class="item item-l undone">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>3970A</span></div>
+ <div><span>定位状态:</span><span>未完成</span></div>
+ <div><span>压力:</span><span>--</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ <div class="pic-tit water">
+ <img src="../../../assets/loginPage/watersys.JPG" />
+ <p>实验室循环水系统</p>
+ </div>
+ <div class="item item-t">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>80210</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>80摄氏度</span></div>
+ </div>
+ </div>
+ <div class="item item-t">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>80211</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>80摄氏度</span></div>
+ </div>
+ </div>
+ <div class="item item-t">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>80212</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>80摄氏度</span></div>
+ </div>
+ </div>
+ <div class="item">
+ <section>
+ <div class="dot"></div>
+ <div class="pulse"></div>
+ <div class="pulse1"></div>
+ </section>
+ <div>
+ <div><span>巡检点:</span><span>80213</span></div>
+ <div><span>定位状态:</span><span>已完成</span></div>
+ <div><span>温度:</span><span>80摄氏度</span></div>
+ </div>
+ </div>
+ <div></div>
+ <div></div>
+ </div>
+ <div class="section-1"></div>
+ <div class="section-2"></div>
+ <div class="section-3"></div>
</div>
- <div class="item item-l">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>73018</span></div>
- <div><span>定位状态:</span><span>已完成</span></div>
- <div><span>压力:</span><span>3.6Bar</span></div>
- </div>
- </div>
- <div></div>
- <div></div>
- <div></div>
- <div></div>
- <div></div>
- <div class="item item-l">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>73016</span></div>
- <div><span>定位状态:</span><span>已完成</span></div>
- <div><span>压力:</span><span>3.6Bar</span></div>
- </div>
- </div>
- <div class="item item-l">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>73019</span></div>
- <div><span>定位状态:</span><span>已完成</span></div>
- <div><span>温度:</span><span>80℃</span></div>
- </div>
- </div>
- <div></div>
- <div></div>
- <div class="item item-t item-l undone">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>3970C</span></div>
- <div><span>定位状态:</span><span>未完成</span></div>
- <div><span>压力:</span><span>--</span></div>
- </div>
- </div>
- <div class="item item-t undone">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>3970D</span></div>
- <div><span>定位状态:</span><span>未完成</span></div>
- <div><span>压力:</span><span>--</span></div>
- </div>
- </div>
- <div class="item finish">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <span></span>
- <p>
- 完成巡检
- </p>
- </div>
- <div class="item start">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <span></span>
- <p>
- 开始巡检
- </p>
- </div>
- <div class="item item-l">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>73020</span></div>
- <div><span>定位状态:</span><span>已完成</span></div>
- <div><span>压力:</span><span>3.6Bar</span></div>
- </div>
- </div>
- <div></div>
- <div></div>
- <div class="item item-l undone">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>3970B</span></div>
- <div><span>定位状态:</span><span>未完成</span></div>
- <div><span>压力:</span><span>--</span></div>
- </div>
- </div>
- <div class="pic-tit water">
- <img src="../../../assets/loginPage/equipment.JPG">
- <p>实验室装置区</p>
- </div>
- <div></div>
- <div class="pic-tit">
- <img src="../../../assets/loginPage/wind.JPG">
- <p>实验室风机系统</p>
- </div>
- <div class="item item-l warning">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>73021</span></div>
- <div><span>定位状态:</span><span>已完成</span></div>
- <div><span>温度:</span><span>130℃</span></div>
- </div>
- </div>
- <div></div>
- <div></div>
- <div class="item item-l undone">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>3970A</span></div>
- <div><span>定位状态:</span><span>未完成</span></div>
- <div><span>压力:</span><span>--</span></div>
- </div>
- </div>
- <div></div>
- <div></div>
- <div class="pic-tit water">
- <img src="../../../assets/loginPage/watersys.JPG">
- <p>实验室循环水系统</p>
- </div>
- <div class="item item-t">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>80210</span></div>
- <div><span>定位状态:</span><span>已完成</span></div>
- <div><span>温度:</span><span>80摄氏度</span></div>
- </div>
- </div>
- <div class="item item-t">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>80211</span></div>
- <div><span>定位状态:</span><span>已完成</span></div>
- <div><span>温度:</span><span>80摄氏度</span></div>
- </div>
- </div>
- <div class="item item-t">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>80212</span></div>
- <div><span>定位状态:</span><span>已完成</span></div>
- <div><span>温度:</span><span>80摄氏度</span></div>
- </div>
- </div>
- <div class="item">
- <section>
- <div class="dot"></div>
- <div class="pulse"></div>
- <div class="pulse1"></div>
- </section>
- <div>
- <div><span>巡检点:</span><span>80213</span></div>
- <div><span>定位状态:</span><span>已完成</span></div>
- <div><span>温度:</span><span>80摄氏度</span></div>
- </div>
- </div>
- <div></div>
- <div></div>
- </div>
- <div class="section-1">
-
- </div>
- <div class="section-2">
-
- </div>
- <div class="section-3">
-
- </div>
</div>
- </div>
</template>
<script>
export default {
- name: 'NewForm',
- props: {
-
- },
- data(){
- return{
- present: ''
+ name: 'NewForm',
+ props: {},
+ data() {
+ return {
+ present: ''
+ };
+ },
+ created() {
+ setInterval(() => {
+ this.present = new Date().toLocaleString();
+ }, 1000);
+ },
+ methods: {
+ goBack() {
+ this.$router.go(-1);
+ // this.$router.push('/discriminate');
+ }
}
- },
- created() {
- setInterval(() => {
- this.present = new Date().toLocaleString()
- }, 1000)
- }
-}
+};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
- @keyframes warn {
+@keyframes warn {
0% {
- transform: scale(0.3);
- -webkit-transform: scale(0.3);
- opacity: 0.0;
+ transform: scale(0.3);
+ -webkit-transform: scale(0.3);
+ opacity: 0;
}
25% {
- transform: scale(0.3);
- -webkit-transform: scale(0.3);
- opacity: 0.1;
+ transform: scale(0.3);
+ -webkit-transform: scale(0.3);
+ opacity: 0.1;
}
50% {
- transform: scale(0.5);
- -webkit-transform: scale(0.5);
- opacity: 0.3;
+ transform: scale(0.5);
+ -webkit-transform: scale(0.5);
+ opacity: 0.3;
}
75% {
- transform: scale(0.8);
- -webkit-transform: scale(0.8);
- opacity: 0.6;
+ transform: scale(0.8);
+ -webkit-transform: scale(0.8);
+ opacity: 0.6;
}
100% {
- transform: scale(1);
- -webkit-transform: scale(1);
- opacity: 0.0;
+ transform: scale(1);
+ -webkit-transform: scale(1);
+ opacity: 0;
}
- }
+}
- @keyframes warn1 {
+@keyframes warn1 {
0% {
- transform: scale(0.3);
- -webkit-transform: scale(0.3);
- opacity: 0.0;
+ transform: scale(0.3);
+ -webkit-transform: scale(0.3);
+ opacity: 0;
}
25% {
- transform: scale(0.3);
- -webkit-transform: scale(0.3);
- opacity: 0.1;
+ transform: scale(0.3);
+ -webkit-transform: scale(0.3);
+ opacity: 0.1;
}
50% {
- transform: scale(0.3);
- -webkit-transform: scale(0.3);
- opacity: 0.3;
+ transform: scale(0.3);
+ -webkit-transform: scale(0.3);
+ opacity: 0.3;
}
75% {
- transform: scale(0.5);
- -webkit-transform: scale(0.5);
- opacity: 0.6;
+ transform: scale(0.5);
+ -webkit-transform: scale(0.5);
+ opacity: 0.6;
}
100% {
- transform: scale(0.8);
- -webkit-transform: scale(0.8);
- opacity: 0.0;
+ transform: scale(0.8);
+ -webkit-transform: scale(0.8);
+ opacity: 0;
}
- }
-
- @keyframes circle {
+}
+
+@keyframes circle {
0% {
- transform: rotate(0);
- -webkit-transform: rotate(0);
+ transform: rotate(0);
+ -webkit-transform: rotate(0);
}
100% {
- transform: rotate(360deg);
- -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ -webkit-transform: rotate(360deg);
}
- }
- .container{
+}
+.container {
width: 100%;
height: 100%;
position: relative;
display: flex;
flex-direction: column;
align-items: center;
- background: url("../../../assets/loginPage/map-bg.jpg") no-repeat center;
+ background: url('../../../assets/loginPage/map-bg.jpg') no-repeat center;
background-size: 100% 100%;
- .big-title{
- height: 40px;
- line-height: 40px;
- font-size: 28px;
- font-weight: bold;
- margin: 10px 0 20px;
- text-align: center;
- color: #fff;
- display: flex;
- align-items: center;
- justify-content: center;
+ .big-title {
+ height: 40px;
+ line-height: 40px;
+ font-size: 28px;
+ font-weight: bold;
+ margin: 10px 0 20px;
+ text-align: center;
+ color: #fff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
- span{
- width: 60px;
- height: 1px;
- background: #36FCFC;
- margin: 0 20px;
- }
+ span {
+ width: 60px;
+ height: 1px;
+ background: #36fcfc;
+ margin: 0 20px;
+ }
}
- .blocks{
- position: relative;
- width: 100%;
- height: 100%;
- padding: 20px 20px 20px 100px;
- box-sizing: border-box;
- .line-map{
- position: absolute;
- width: calc(100% - 120px);
- left: 110px;
- top: 10px;
- flex-direction: column;
- align-items: center;
- z-index: 99;
- display: grid;
- grid-template-columns: repeat(7,1fr);
- grid-gap: 0;
-
- .item{
- width: calc((100vw - 120px)/ 7);
- height: calc((100vh - 130px)/ 5);
- padding: 20px 40px 20px 20px;
- position: relative;
- box-sizing: border-box;
-
- section{
- width: 28px;
- height: 28px;
- border-radius: 50%;
- position: absolute;
- border: 1px solid #00ff66;
- top: -14px;
- left: -14px;
-
- .dot {
- position: absolute;
- width: 18px;
- height: 18px;
- left: 4px;
- top: 4px;
- -webkit-border-radius: 50%;
- -moz-border-radius: 50%;
- border: 1px solid #00ff66;
- border-radius: 50%;
- background-color:#00ff66;
- z-index: 2;
- }
- .pulse {
- position: absolute;
- width: 56px;
- height: 56px;
- left: -15px;
- top: -15px;
- border: 1px solid #00ff66;
- -webkit-border-radius: 50%;
- -moz-border-radius: 50%;
- border-radius: 50%;
- z-index: 1;
- opacity: 0;
- -webkit-animation: warn 2s ease-out;
- -moz-animation: warn 2s ease-out;
- animation: warn 2s ease-out;
- -webkit-animation-iteration-count: infinite;
- -moz-animation-iteration-count: infinite;
- animation-iteration-count: infinite;
- box-shadow: 1px 1px 30px #00ff66;
- }
- .pulse1 {
- position: absolute;
- width: 56px;
- height: 56px;
- left: -15px;
- top: -15px;
- border: 1px solid #3399ff;
- -webkit-border-radius: 50%;
- -moz-border-radius: 50%;
- border-radius: 50%;
- z-index: 1;
- opacity: 0;
- -webkit-animation: warn1 2s ease-out;
- -moz-animation: warn1 2s ease-out;
- animation: warn1 2s ease-out;
- -webkit-animation-iteration-count: infinite;
- -moz-animation-iteration-count: infinite;
- animation-iteration-count: infinite;
- box-shadow: 1px 1px 30px #3399ff;
- }
- }
- &>div{
- padding: 10px 0;
- border-radius: 8px;
- background-image: linear-gradient(to right,rgba(8,109,209,.4),rgba(11,255,255,.2));
- border: 1px solid rgba(54,252,252,.6);
- display: flex;
- flex-direction: column;
- justify-content: center;
-
- div{
- &:nth-of-type(2){
- margin: 5px 0;
- }
-
- span{
- display: inline-block;
- width: 50%;
- font-size: 14px;
- color: #fff;
- text-align: left;
-
- &:first-of-type{
- text-align: right;
- color: rgba(255,255,255,.8);
- }
- }
- }
- }
-
- p{
- width: 140px;
- height: 50px;
- font-size: 18px;
- line-height: 48px;
- text-align: center;
- color: #fff;
- border-radius: 8px;
- background-image: linear-gradient(to right,rgba(11,255,255,.2),rgba(8,109,209,.4));
- border: 1px solid rgba(54,252,252,.6);
- }
- }
-
- .item-t{
- border-top: 1px solid #36FCFC;
- }
- .item-l{
- border-left: 1px solid #36FCFC;
- }
- .warning{
- &>section{
- border: 1px solid #ff0000;
-
- .dot{
- border: 1px solid #ff0000;
- background: #ff0000;
- }
- .pulse{
- border: 1px solid #ff0000;
- box-shadow: 1px 1px 30px #ff0000;
- }
- .pulse1{
- border: 1px solid #ff0000;
- box-shadow: 1px 1px 30px #ff0000;
- }
- }
-
- &>div{
- div:last-of-type{
- span:nth-of-type(2){
- color: #ff0000;
- }
- }
- }
- }
- .undone{
- &>section{
- border: 1px solid #ccc;
-
- .dot{
- border: 1px solid #ccc;
- background: #ccc;
- }
- .pulse{
- display: none;
- }
- .pulse1{
- display: none;
- }
- }
- }
- .pic-tit{
- display: flex;
- width: calc((100vw - 120px)/ 7);
- height: 160px;
- padding: 20px;
- transform: translate(-20px,-40%);
- flex-direction: column;
- align-items: flex-start;
-
- img{
- width: calc((100vw - 120px)/ 7 - 40px);
- height: 90px;
- margin-bottom: 10px;
- border-radius: 4px;
- }
- p{
- font-size: 16px;
- color: #00ffff;
- font-weight: bold;
- }
- }
-
- .water{
- transform: none;
- }
- .start{
- padding: 40px 0;
- p{
- margin-top: -21px;
- margin-left: 20px;
- }
- span{
- width: 1px;
- height: 50px;
- background: #36FCFC;
- position: absolute;
- top: -10px;
- left: 0;
- }
- section{
- position: absolute;
- top: 30px;
- left: -14px;
- }
- }
- .finish{
- padding: 0 40px;
- p{
- margin-top: -25px;
- margin-left: 4px;
- }
- span{
- width: 100%;
- height: 1px;
- background: #36FCFC;
- position: absolute;
- top: 0;
- left: calc(40px - 100%);
- }
- section{
- position: absolute;
- top: -14px;
- left: 30px;
- }
- }
- }
- .current-data{
- position: absolute;
- z-index: 999999;
- width: 270px;
- height: 142px;
- left: 50%;
- padding: 20px 30px;
+ .blocks {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ padding: 20px 20px 20px 100px;
box-sizing: border-box;
- transform: translateX(-65%);
- background: url("../../../assets/loginPage/xj-bg.png") no-repeat center;
- background-size: 100% 100%;
-
- .data-area{
- display: flex;
- align-items: center;
- border-bottom: 1px solid #00FFFF;
- font-weight: bold;
- padding-bottom: 10px;
- box-sizing: border-box;
-
- img{
- width: 30px;
- height: 30px;
- margin-right: 10px;
- animation: circle 1s ease-in-out infinite;
- }
-
- div{
- font-size: 15px;
- color: rgba(255,255,255,.8);
-
- span{
- color: #00FFFF;
- }
- }
- }
-
- .data-spot{
- display: flex;
- align-items: flex-start;
- margin-top: 10px;
-
- &>div{
- display: flex;
+ .line-map {
+ position: absolute;
+ width: calc(100% - 120px);
+ left: 110px;
+ top: 10px;
flex-direction: column;
align-items: center;
- width: 50%;
- font-size: 14px;
- color: rgba(255,255,255,.8);
+ z-index: 99;
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ grid-gap: 0;
- p{
- margin-top: 6px;
- color: #00FFFF;
+ .item {
+ width: calc((100vw - 120px) / 7);
+ height: calc((100vh - 130px) / 5);
+ padding: 20px 40px 20px 20px;
+ position: relative;
+ box-sizing: border-box;
+
+ section {
+ width: 28px;
+ height: 28px;
+ border-radius: 50%;
+ position: absolute;
+ border: 1px solid #00ff66;
+ top: -14px;
+ left: -14px;
+
+ .dot {
+ position: absolute;
+ width: 18px;
+ height: 18px;
+ left: 4px;
+ top: 4px;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border: 1px solid #00ff66;
+ border-radius: 50%;
+ background-color: #00ff66;
+ z-index: 2;
+ }
+ .pulse {
+ position: absolute;
+ width: 56px;
+ height: 56px;
+ left: -15px;
+ top: -15px;
+ border: 1px solid #00ff66;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border-radius: 50%;
+ z-index: 1;
+ opacity: 0;
+ -webkit-animation: warn 2s ease-out;
+ -moz-animation: warn 2s ease-out;
+ animation: warn 2s ease-out;
+ -webkit-animation-iteration-count: infinite;
+ -moz-animation-iteration-count: infinite;
+ animation-iteration-count: infinite;
+ box-shadow: 1px 1px 30px #00ff66;
+ }
+ .pulse1 {
+ position: absolute;
+ width: 56px;
+ height: 56px;
+ left: -15px;
+ top: -15px;
+ border: 1px solid #3399ff;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border-radius: 50%;
+ z-index: 1;
+ opacity: 0;
+ -webkit-animation: warn1 2s ease-out;
+ -moz-animation: warn1 2s ease-out;
+ animation: warn1 2s ease-out;
+ -webkit-animation-iteration-count: infinite;
+ -moz-animation-iteration-count: infinite;
+ animation-iteration-count: infinite;
+ box-shadow: 1px 1px 30px #3399ff;
+ }
+ }
+ & > div {
+ padding: 10px 0;
+ border-radius: 8px;
+ background-image: linear-gradient(to right, rgba(8, 109, 209, 0.4), rgba(11, 255, 255, 0.2));
+ border: 1px solid rgba(54, 252, 252, 0.6);
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+
+ div {
+ &:nth-of-type(2) {
+ margin: 5px 0;
+ }
+
+ span {
+ display: inline-block;
+ width: 50%;
+ font-size: 14px;
+ color: #fff;
+ text-align: left;
+
+ &:first-of-type {
+ text-align: right;
+ color: rgba(255, 255, 255, 0.8);
+ }
+ }
+ }
+ }
+
+ p {
+ width: 140px;
+ height: 50px;
+ font-size: 18px;
+ line-height: 48px;
+ text-align: center;
+ color: #fff;
+ border-radius: 8px;
+ background-image: linear-gradient(to right, rgba(11, 255, 255, 0.2), rgba(8, 109, 209, 0.4));
+ border: 1px solid rgba(54, 252, 252, 0.6);
+ }
}
- &:first-of-type{
- border-right: 1px solid #36FCFC;
+ .item-t {
+ border-top: 1px solid #36fcfc;
}
- }
+ .item-l {
+ border-left: 1px solid #36fcfc;
+ }
+ .warning {
+ & > section {
+ border: 1px solid #ff0000;
+
+ .dot {
+ border: 1px solid #ff0000;
+ background: #ff0000;
+ }
+ .pulse {
+ border: 1px solid #ff0000;
+ box-shadow: 1px 1px 30px #ff0000;
+ }
+ .pulse1 {
+ border: 1px solid #ff0000;
+ box-shadow: 1px 1px 30px #ff0000;
+ }
+ }
+
+ & > div {
+ div:last-of-type {
+ span:nth-of-type(2) {
+ color: #ff0000;
+ }
+ }
+ }
+ }
+ .undone {
+ & > section {
+ border: 1px solid #ccc;
+
+ .dot {
+ border: 1px solid #ccc;
+ background: #ccc;
+ }
+ .pulse {
+ display: none;
+ }
+ .pulse1 {
+ display: none;
+ }
+ }
+ }
+ .pic-tit {
+ display: flex;
+ width: calc((100vw - 120px) / 7);
+ height: 160px;
+ padding: 20px;
+ transform: translate(-20px, -40%);
+ flex-direction: column;
+ align-items: flex-start;
+
+ img {
+ width: calc((100vw - 120px) / 7 - 40px);
+ height: 90px;
+ margin-bottom: 10px;
+ border-radius: 4px;
+ }
+ p {
+ font-size: 16px;
+ color: #00ffff;
+ font-weight: bold;
+ }
+ }
+
+ .water {
+ transform: none;
+ }
+ .start {
+ padding: 40px 0;
+ p {
+ margin-top: -21px;
+ margin-left: 20px;
+ }
+ span {
+ width: 1px;
+ height: 50px;
+ background: #36fcfc;
+ position: absolute;
+ top: -10px;
+ left: 0;
+ }
+ section {
+ position: absolute;
+ top: 30px;
+ left: -14px;
+ }
+ }
+ .finish {
+ padding: 0 40px;
+ p {
+ margin-top: -25px;
+ margin-left: 4px;
+ }
+ span {
+ width: 100%;
+ height: 1px;
+ background: #36fcfc;
+ position: absolute;
+ top: 0;
+ left: calc(40px - 100%);
+ }
+ section {
+ position: absolute;
+ top: -14px;
+ left: 30px;
+ }
+ }
}
- }
- .section-1{
- position: absolute;
- left: 70px;
- top: -10px;
- width: calc((200vw - 240px) / 7 + 60px);
- height: 630px;
- background: rgba(0,100,190,.1);
- border: 1px solid rgba(0,100,190,.4);
- border-radius: 8px;
- }
- .section-2{
- position: absolute;
- left: calc((400vw - 480px)/ 7 + 70px);
- top: 150px;
- width: calc((200vw - 240px) / 7 + 60px);
- height: 470px;
- background: rgba(0,100,190,.1);
- border: 1px solid rgba(0,100,190,.4);
- border-radius: 8px;
- }
- .section-3{
- position: absolute;
- left: 100px;
- top: 630px;
- width: calc((500vw - 600px)/ 7 + 30px);
- height: 180px;
- background: rgba(0,100,190,.1);
- border: 1px solid rgba(0,100,190,.4);
- border-radius: 8px;
- }
+ .current-data {
+ position: absolute;
+ z-index: 999999;
+ width: 270px;
+ height: 142px;
+ left: 50%;
+ padding: 20px 30px;
+ box-sizing: border-box;
+ transform: translateX(-65%);
+ background: url('../../../assets/loginPage/xj-bg.png') no-repeat center;
+ background-size: 100% 100%;
+
+ .data-area {
+ display: flex;
+ align-items: center;
+ border-bottom: 1px solid #00ffff;
+ font-weight: bold;
+ padding-bottom: 10px;
+ box-sizing: border-box;
+
+ img {
+ width: 30px;
+ height: 30px;
+ margin-right: 10px;
+ animation: circle 1s ease-in-out infinite;
+ }
+
+ div {
+ font-size: 15px;
+ color: rgba(255, 255, 255, 0.8);
+
+ span {
+ color: #00ffff;
+ }
+ }
+ }
+
+ .data-spot {
+ display: flex;
+ align-items: flex-start;
+ margin-top: 10px;
+
+ & > div {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: 50%;
+ font-size: 14px;
+ color: rgba(255, 255, 255, 0.8);
+
+ p {
+ margin-top: 6px;
+ color: #00ffff;
+ }
+
+ &:first-of-type {
+ border-right: 1px solid #36fcfc;
+ }
+ }
+ }
+ }
+ .section-1 {
+ position: absolute;
+ left: 70px;
+ top: -10px;
+ width: calc((200vw - 240px) / 7 + 60px);
+ height: 630px;
+ background: rgba(0, 100, 190, 0.1);
+ border: 1px solid rgba(0, 100, 190, 0.4);
+ border-radius: 8px;
+ }
+ .section-2 {
+ position: absolute;
+ left: calc((400vw - 480px) / 7 + 70px);
+ top: 150px;
+ width: calc((200vw - 240px) / 7 + 60px);
+ height: 470px;
+ background: rgba(0, 100, 190, 0.1);
+ border: 1px solid rgba(0, 100, 190, 0.4);
+ border-radius: 8px;
+ }
+ .section-3 {
+ position: absolute;
+ left: 100px;
+ top: 630px;
+ width: calc((500vw - 600px) / 7 + 30px);
+ height: 180px;
+ background: rgba(0, 100, 190, 0.1);
+ border: 1px solid rgba(0, 100, 190, 0.4);
+ border-radius: 8px;
+ }
}
- }
+}
</style>
diff --git a/src/views/system/menu/component/menuDialog.vue b/src/views/system/menu/component/menuDialog.vue
index 3df8384..0830adb 100644
--- a/src/views/system/menu/component/menuDialog.vue
+++ b/src/views/system/menu/component/menuDialog.vue
@@ -168,6 +168,7 @@
btnPower: ''
};
} else {
+ debugger;
state.buttonName = '修改';
state.title = '修改菜单';
state.ruleForm = JSON.parse(JSON.stringify(value));
diff --git a/src/views/system/personShiftManage/teamManage/index.vue b/src/views/system/personShiftManage/teamManage/index.vue
deleted file mode 100644
index c0bbe06..0000000
--- a/src/views/system/personShiftManage/teamManage/index.vue
+++ /dev/null
@@ -1,358 +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">查询</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="warning" :icon="Edit" size="default" plain>修改</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="teamName" label="班组名称"/>
- <el-table-column property="teamMember" 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="editRecord(scope.$index ,scope.row)">修改</el-button>
- <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-form-item label="班组名称">
- <el-input
- v-model="details.teamName"
- readonly
- />
- </el-form-item>
- <el-form-item label="班组人员">
- <el-input v-model="details.teamMember" 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="teamName">
- <el-input
- v-model="addRecord.teamName"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="班组人员" prop="teamMember">
- <el-cascader
- v-model="addRecord.teamMember"
- :options="workerList"
- :props="casProps"
- :show-all-levels="false"
- @change="handleChange"
- />
- </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>
- </div>
-</template>
-
-<script lang="ts" setup>
- 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 } 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 {
-
- }
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({});
- const currentPage = ref(1)
- const pageSize = ref(10)
- const chosenIndex = ref(-1)
- const casProps = {
- expandTrigger: 'hover',
- multiple: true,
- emitPath: false,
- checkStrictly: false
- }
- const handleSizeChange = (val: number) => {
- console.log(`${val} items per page`)
- }
- const handleCurrentChange = (val: number) => {
- console.log(`current page: ${val}`)
- }
- const workerList =reactive([
- {
- value: 'A部门车间',
- label: 'A部门车间',
- children: [
- {
- value: '刘能',
- label: '刘能',
- },
- {
- value: '赵四',
- label: '赵四',
- },
- {
- value: '谢广坤',
- label: '谢广坤',
- },
- {
- value: '王大拿',
- label: '王大拿',
- },
- {
- value: '刘能',
- label: '刘能',
- },
- {
- value: '赵四',
- label: '赵四',
- }
- ]
- },
- {
- value: 'B部门车间',
- label: 'B部门车间',
- children: [
- {
- value: '刘备',
- label: '刘备',
- },
- {
- value: '关羽',
- label: '关羽',
- },
- {
- value: '张飞',
- label: '张飞',
- },
- {
- value: '赵云',
- label: '赵云',
- },
- {
- value: '黄忠',
- label: '黄忠',
- },
- {
- value: '马超',
- label: '马超',
- }
- ]
- }
- ])
- const tableData = reactive(
- [
- {
- teamName: 'A车间班组',
- teamMember: ['张三','李四','李羽飞']
- },
- {
- teamName: 'B车间班组',
- teamMember: ['刘能','赵四','谢广坤']
- },
- ]
- )
- const addRef = ref<FormInstance>()
- const addRules = reactive<FormRules>({
- teamName:[{required: true, message: '该内容不能为空',trigger:'blur'}],
- teamMember:[{required: true, message: '该内容不能为空',trigger:'blur'}]
- })
- const dialogDetails = ref(false)
- const dialogAddRecord = ref(false)
- const deleteDialog = ref(false)
- const addRecord = ref({})
- const details = ref({})
- const viewRecord = (row) =>{
- details.value = JSON.parse(JSON.stringify(row))
- dialogDetails.value = true
- }
- const deleteRecord = (index) =>{
- chosenIndex.value = index
- deleteDialog.value = true
- }
- const conFirmDelete = ()=> {
- tableData.splice(chosenIndex.value,1)
- deleteDialog.value = false
- }
- const confirmAddRecord = async (formEl: FormInstance | undefined) =>{
- if (!formEl) return
- await formEl.validate((valid, fields) => {
- if (valid) {
- if(chosenIndex.value == -1){
- tableData.unshift(addRecord.value)
- }else{
- tableData[chosenIndex.value] = addRecord.value
- }
- dialogAddRecord.value =false
- } else {
- console.log('error submit!', fields)
- }
- })
-
- }
- const closeAdd =()=>{
- addRecord.value={}
- chosenIndex.value = -1
- }
- const indexClear = ()=>{
- chosenIndex.value = -1
- }
- const editRecord =(index, row)=>{
- dialogAddRecord.value = true
- chosenIndex.value = index
- addRecord.value = JSON.parse(JSON.stringify(row))
- }
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
-</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/vite.config.ts b/vite.config.ts
index 971a832..0c5fae7 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -14,9 +14,11 @@
const viteConfig = defineConfig((mode: ConfigEnv) => {
const env = loadEnv(mode.mode, process.cwd());
return {
+ publicPath: './',
plugins: [vue()],
root: process.cwd(),
resolve: { alias },
+ assetsInclude: ['**/*.JPG'],
base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH,
hmr: true,
optimizeDeps: {
--
Gitblit v1.9.2