From 3c5ca2f8ce690f2c8808548e5ce5f69da296de10 Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期三, 17 八月 2022 09:12:33 +0800 Subject: [PATCH] lct --- .idea/shelf/Uncommitted_changes_before_Update_at_2022_8_16_15_03_[Default_Changelist]/shelved.patch | 1194 ++++++++++++++++++++++++++++++++ dist.zip | 0 src/api/intellectInspectSystem/RFID/index.ts | 15 src/views/intellectInspect/intelligentLine/index.vue | 10 src/utils/request.ts | 8 src/views/specialWorkSystem/foundationSet/safetyAction/components/safetyActionDialog.vue | 221 +++++ src/views/specialWorkSystem/foundationSet/safetyAction/index.vue | 428 +++++++++++ src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue | 106 +- .env.development | 2 src/views/specialWorkSystem/workFlow/approveBasic/index.vue | 108 +- src/api/specialWorkSystem/safetyAction/index.ts | 45 + .idea/shelf/Uncommitted_changes_before_Update_at_2022_8_16_15_03__Default_Changelist_.xml | 4 src/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue | 73 + 13 files changed, 2,060 insertions(+), 154 deletions(-) diff --git a/.env.development b/.env.development index ed1f5e3..60d190e 100644 --- a/.env.development +++ b/.env.development @@ -29,4 +29,4 @@ #线上正式环境外包接口地址 VITE_API_URL_SOCKET = 'http://192.168.0.29:8018' -#黄振websocket接口地址 \ No newline at end of file +#黄振websocket接口地址 diff --git "a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_16_15_03_\133Default_Changelist\135/shelved.patch" "b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_16_15_03_\133Default_Changelist\135/shelved.patch" new file mode 100644 index 0000000..1717c72 --- /dev/null +++ "b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_16_15_03_\133Default_Changelist\135/shelved.patch" @@ -0,0 +1,1194 @@ +Index: src/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <div class=\"system-add-menu-container\">\r\n <el-dialog :title=\"title\" v-model=\"isShowApproveBasicDialog\" width=\"600px\" :close-on-click-modal=\"false\">\r\n <el-form :model=\"approveBasicForm\" :rules=\"approveBasicFormRules\" ref=\"approveBasicFormRef\" size=\"default\" label-width=\"120px\">\r\n <el-row :gutter=\"35\">\r\n <el-col :xs=\"24\" :sm=\"24\" :md=\"24\" :lg=\"24\" :xl=\"24\" class=\"mb20\">\r\n <el-form-item label=\"标题\" prop=\"title\">\r\n <el-input class=\"input-add\" :disabled=\"!disabled\" v-model.trim=\"approveBasicForm.title\" placeholder=\"请输入标题名称\" clearable></el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"24\" :md=\"24\" :lg=\"24\" :xl=\"24\" class=\"mb20\">\r\n <el-form-item label=\"标准类型\" prop=\"ruleStandType\">\r\n <el-select class=\"input-add\" :disabled=\"!disabled\" v-model=\"approveBasicForm.ruleStandType\" placeholder=\"请选择标准类型\" clearable filterable>\r\n <el-option v-for=\"item in ruleStandTypeList\" :key=\"item.id\" :label=\"item.name\" :value=\"item.id\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"24\" :md=\"24\" :lg=\"24\" :xl=\"24\" class=\"mb20\">\r\n <el-form-item label=\"最大值\" prop=\"maxVal\">\r\n <el-input v-model=\"approveBasicForm.maxVal\" type=\"number\" class=\"input-add\" placeholder=\"请根据需求选择\">\r\n <template #prepend>\r\n <el-select v-model=\"approveBasicForm.maxValMatchPattern\" placeholder=\"请根据需求选择\" style=\"width: 115px\">\r\n <el-option v-for=\"item in typeTwoList\" :key=\"item.id\" :value=\"item.id\" :label=\"item.name\"> </el-option>\r\n </el-select>\r\n </template>\r\n </el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"24\" :md=\"24\" :lg=\"24\" :xl=\"24\" class=\"mb20\">\r\n <el-form-item label=\"最小值\" prop=\"minVal\">\r\n <el-input v-model=\"approveBasicForm.minVal\" type=\"number\" class=\"input-add\" placeholder=\"请根据需求选择\">\r\n <template #prepend>\r\n <el-select v-model=\"approveBasicForm.minValMatchPattern\" placeholder=\"请根据需求选择\" style=\"width: 115px\">\r\n <el-option v-for=\"item in typeList\" :key=\"item.id\" :value=\"item.id\" :label=\"item.name\"> </el-option>\r\n </el-select>\r\n </template>\r\n </el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"24\" :md=\"24\" :lg=\"24\" :xl=\"24\" class=\"mb20\">\r\n <el-form-item label=\"描述\" prop=\"info\">\r\n <el-input class=\"input-add\" :rows=\"3\" v-model.trim=\"approveBasicForm.info\" type=\"textarea\" placeholder=\"请输入描述\" ></el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"24\" :md=\"24\" :lg=\"24\" :xl=\"24\" class=\"mb20\" v-show=\"personTime\">\r\n <el-form-item label=\"创建人\" prop=\"location\">\r\n <el-input class=\"input-add\" :disabled=\"!disabled\" v-model.trim=\"approveBasicForm.createByUserName\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"24\" :md=\"24\" :lg=\"24\" :xl=\"24\" class=\"mb20\" v-show=\"personTime\">\r\n <el-form-item label=\"创建时间\" prop=\"location\">\r\n <el-input class=\"input-add\" :disabled=\"!disabled\" v-model.trim=\"approveBasicForm.gmtCreate\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"24\" :md=\"24\" :lg=\"24\" :xl=\"24\" class=\"mb20\" v-show=\"personTime\">\r\n <el-form-item label=\"最后修改人\" prop=\"location\">\r\n <el-input class=\"input-add\" :disabled=\"!disabled\" v-model.trim=\"approveBasicForm.lastEditUserName\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"24\" :md=\"24\" :lg=\"24\" :xl=\"24\" class=\"mb20\" v-show=\"personTime\">\r\n <el-form-item label=\"最后修改时间\" prop=\"location\">\r\n <el-input class=\"input-add\" :disabled=\"!disabled\" v-model.trim=\"approveBasicForm.gmtModitify\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <template #footer>\r\n <span class=\"dialog-footer\" v-show=\"disabled\">\r\n <el-button @click=\"isShowApproveBasicDialog = !isShowApproveBasicDialog\" size=\"default\">取 消</el-button>\r\n <el-button type=\"primary\" @click=\"submitApproveBasic\" v-throttle size=\"default\">确 定</el-button>\r\n </span>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\ninterface stateType {\r\n isShowApproveBasicDialog: Boolean;\r\n disabled: Boolean;\r\n personTime: Boolean;\r\n approveBasicForm: {\r\n ruleStandType: null|number,\r\n minVal: null|number,\r\n minValMatchPattern: null,\r\n maxVal: null|number,\r\n maxValMatchPattern: null|number,\r\n title:null| string,\r\n info:null| string,\r\n };\r\n title: string;\r\n departmentList: [];\r\n ruleStandTypeList: Array<levelListState>;\r\n typeList: Array<levelListState>;\r\n typeTwoList: Array<levelListState>;\r\n approveBasicFormRules: {};\r\n}\r\ninterface levelListState {\r\n id:number,\r\n name:string\r\n}\r\nimport { reactive, toRefs, ref } from 'vue';\r\nimport { approveBasicApi } from '/@/api/specialWorkSystem/approveBasic';\r\nimport { ElMessage } from 'element-plus';\r\nexport default {\r\n name: 'approveBasicDialog',\r\n setup(props: any, context: any) {\r\n const approveBasicFormRef = ref();\r\n const state = reactive<stateType>({\r\n title: '',\r\n disabled: false,\r\n personTime: false,\r\n departmentList: [],\r\n isShowApproveBasicDialog: false,\r\n ruleStandTypeList: [\r\n { id: 1, name: '可燃气浓度' },\r\n { id: 2, name: '氧气浓度' },\r\n { id: 3, name: '一氧化碳浓度' },\r\n { id: 4, name: '硫化氢浓度' },\r\n { id: 5, name: '温度' },\r\n { id: 6, name: '压力' },\r\n { id: 7, name: '震动' },\r\n ],\r\n typeList:[\r\n { id: 1, name: '大于' },\r\n { id: 2, name: '等于' },\r\n { id: 4, name: '大于等于' },\r\n ],\r\n typeTwoList:[\r\n { id: 3, name: '小于' },\r\n { id: 2, name: '等于' },\r\n { id: 5, name: '小于等于' },\r\n ],\r\n approveBasicForm: {\r\n ruleStandType: null,\r\n minVal: null,\r\n minValMatchPattern: null,\r\n maxVal: null,\r\n maxValMatchPattern: null,\r\n title: null,\r\n info: null,\r\n },\r\n approveBasicFormRules: {\r\n ruleStandType: [{ required: true, message: '请选择标准类型', trigger: 'change' }],\r\n minVal: [{ required: true, message: '请填写标最低值', trigger: 'blur' }],\r\n maxVal: [{ required: true, message: '请填写标最高值', trigger: 'blur' }],\r\n title: [{ required: true, message: '请选择风险等级', trigger: 'blur' }],\r\n info: [{ required: true, message: '请填写描述信息', trigger: 'blur' }]\r\n }\r\n });\r\n\r\n //打开模态框\r\n const showApproveBasicDialog = (type: string, value: object, department: []) => {\r\n state.isShowApproveBasicDialog = true;\r\n state.departmentList = department;\r\n setTimeout(() => {\r\n approveBasicFormRef.value.clearValidate();\r\n });\r\n if (type === '新增') {\r\n state.disabled = true;\r\n state.personTime = false;\r\n state.title = '新增审批标准';\r\n state.approveBasicForm = {\r\n ruleStandType: null,\r\n minVal: null,\r\n minValMatchPattern: null,\r\n maxVal: null,\r\n maxValMatchPattern: null,\r\n title: null,\r\n info: null,\r\n };\r\n } else if (type === '查看') {\r\n state.disabled = false;\r\n state.personTime = true;\r\n state.title = '查看审批标准';\r\n state.approveBasicForm = JSON.parse(JSON.stringify(value));\r\n } else {\r\n state.disabled = true;\r\n state.personTime = false;\r\n state.title = '修改审批标准';\r\n state.approveBasicForm = JSON.parse(JSON.stringify(value));\r\n }\r\n };\r\n\r\n //新增修改提交\r\n const submitApproveBasic = async () => {\r\n approveBasicFormRef.value.validate(async (valid: Boolean) => {\r\n if (valid) {\r\n if (state.title === '新增审批标准') {\r\n let res = await approveBasicApi().addApproveBasic(state.approveBasicForm);\r\n if (res.data.code === '200') {\r\n ElMessage({\r\n type: 'success',\r\n message: '审批标准新增成功',\r\n duration: 2000\r\n });\r\n state.isShowApproveBasicDialog = false;\r\n context.emit('refreshApproveBasic');\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n } else {\r\n let res = await approveBasicApi().modApproveBasic(state.approveBasicForm);\r\n if (res.data.code === '200') {\r\n ElMessage({\r\n type: 'success',\r\n message: '审批标准修改成功',\r\n duration: 2000\r\n });\r\n state.isShowApproveBasicDialog = false;\r\n context.emit('refreshApproveBasic');\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n }\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: '请完善基本信息'\r\n });\r\n }\r\n });\r\n };\r\n\r\n return {\r\n ...toRefs(state),\r\n approveBasicFormRef,\r\n submitApproveBasic,\r\n showApproveBasicDialog\r\n };\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped></style>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue b/src/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue +--- a/src/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue (revision a1d03a0e810219f8353748f6e55699bf2e1a77a6) ++++ b/src/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue (date 1660630612554) +@@ -39,7 +39,7 @@ + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="描述" prop="info"> +- <el-input class="input-add" :rows="3" v-model.trim="approveBasicForm.info" type="textarea" placeholder="请输入描述" ></el-input> ++ <el-input class="input-add" :rows="3" v-model.trim="approveBasicForm.info" type="textarea" placeholder="请输入描述"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> +@@ -80,13 +80,14 @@ + disabled: Boolean; + personTime: Boolean; + approveBasicForm: { +- ruleStandType: null|number, +- minVal: null|number, +- minValMatchPattern: null, +- maxVal: null|number, +- maxValMatchPattern: null|number, +- title:null| string, +- info:null| string, ++ ruleStandId: null | number; ++ ruleStandType: null | number; ++ minVal: null | number; ++ minValMatchPattern: null; ++ maxVal: null | number; ++ maxValMatchPattern: null | number; ++ title: null | string; ++ info: null | string; + }; + title: string; + departmentList: []; +@@ -96,9 +97,20 @@ + approveBasicFormRules: {}; + } + interface levelListState { +- id:number, +- name:string ++ id: number; ++ name: string; + } ++interface approveBasicForm { ++ ruleStandId: null | number; ++ ruleStandType: null | number; ++ minVal: null | number; ++ minValMatchPattern: null; ++ maxVal: null | number; ++ maxValMatchPattern: null | number; ++ title: null | string; ++ info: null | string; ++} ++ + import { reactive, toRefs, ref } from 'vue'; + import { approveBasicApi } from '/@/api/specialWorkSystem/approveBasic'; + import { ElMessage } from 'element-plus'; +@@ -119,26 +131,27 @@ + { id: 4, name: '硫化氢浓度' }, + { id: 5, name: '温度' }, + { id: 6, name: '压力' }, +- { id: 7, name: '震动' }, ++ { id: 7, name: '震动' } + ], +- typeList:[ ++ typeList: [ + { id: 1, name: '大于' }, + { id: 2, name: '等于' }, +- { id: 4, name: '大于等于' }, ++ { id: 4, name: '大于等于' } + ], +- typeTwoList:[ ++ typeTwoList: [ + { id: 3, name: '小于' }, + { id: 2, name: '等于' }, +- { id: 5, name: '小于等于' }, ++ { id: 5, name: '小于等于' } + ], + approveBasicForm: { ++ ruleStandId: null, + ruleStandType: null, + minVal: null, + minValMatchPattern: null, + maxVal: null, + maxValMatchPattern: null, + title: null, +- info: null, ++ info: null + }, + approveBasicFormRules: { + ruleStandType: [{ required: true, message: '请选择标准类型', trigger: 'change' }], +@@ -161,13 +174,14 @@ + state.personTime = false; + state.title = '新增审批标准'; + state.approveBasicForm = { ++ ruleStandId: null, + ruleStandType: null, + minVal: null, + minValMatchPattern: null, + maxVal: null, + maxValMatchPattern: null, + title: null, +- info: null, ++ info: null + }; + } else if (type === '查看') { + state.disabled = false; +@@ -179,6 +193,9 @@ + state.personTime = false; + state.title = '修改审批标准'; + state.approveBasicForm = JSON.parse(JSON.stringify(value)); ++ // for (let i in state.approveBasicForm) { ++ // state.approveBasicForm[i] = approveBasicForm[i]; ++ // } + } + }; + +Index: src/views/specialWorkSystem/workFlow/approveBasic/index.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <div class=\"home-container\">\r\n <div style=\"height: 100%\">\r\n <el-row class=\"homeCard\">\r\n <div class=\"basic-line\">\r\n <span>任务类型:</span>\r\n <el-select v-model=\"tableData.params.workType\" clearable filterable class=\"input-box\" placeholder=\"任务类型\">\r\n <el-option v-for=\"item in workTypeList\" :key=\"item.id\" :label=\"item.name\" :value=\"item.id\"></el-option>\r\n </el-select>\r\n </div>\r\n <div class=\"basic-line\">\r\n <span>执行班组:</span>\r\n <el-select v-model=\"tableData.params.execClassgroupId\" clearable filterable class=\"input-box\" placeholder=\"执行班组\">\r\n <el-option v-for=\"item in classGroupList\" :key=\"item.id\" :label=\"item.groupName\" :value=\"item.id\"></el-option>\r\n </el-select>\r\n </div>\r\n <div style=\"padding-bottom: 10px\">\r\n <el-button type=\"primary\" @click=\"getInspectionTask\">查询</el-button>\r\n <el-button plain @click=\"reset\">重置</el-button>\r\n </div>\r\n </el-row>\r\n <div class=\"homeCard\">\r\n <div class=\"main-card\">\r\n <el-row class=\"cardTop\">\r\n <el-col :span=\"12\" class=\"mainCardBtn\">\r\n <el-button type=\"primary\" :icon=\"Plus\" size=\"default\" @click=\"openApproveBasicDialog('新增', {})\">新建</el-button>\r\n <!-- <el-button type=\"danger\" :icon=\"Delete\" size=\"default\" plain>删除</el-button>-->\r\n </el-col>\r\n <el-button type=\"primary\" :icon=\"Refresh\" size=\"default\" />\r\n </el-row>\r\n <el-table ref=\"multipleTableRef\" :data=\"tableData.approveBasicData\" style=\"width: 100%\" height=\"calc(100% - 100px)\" :header-cell-style=\"{ background: '#fafafa' }\">\r\n <el-table-column property=\"title\" label=\"标题\" />\r\n <el-table-column property=\"ruleStandType\" label=\"标准类型\">\r\n <template #default=\"scope\">\r\n <span>\r\n {{ parseNumber(scope.row.ruleStandType, '标准类型') }}\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column property=\"minVal\" label=\"最低值\">\r\n <template #default=\"scope\">\r\n <span>\r\n {{ parseNumber(scope.row.minValMatchPattern, '最低值') }}\r\n </span>\r\n <span>\r\n {{scope.row.minVal}}\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column property=\"maxVal\" label=\"最高值\">\r\n <template #default=\"scope\">\r\n <span>\r\n {{ parseNumber(scope.row.maxValMatchPattern, '最高值') }}\r\n </span>\r\n <span>\r\n {{ scope.row.maxVal }}\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column property=\"info\" label=\"描述\" />\r\n <el-table-column prop=\"createUserName\" label=\"创建人\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"gmtCreate\" label=\"创建时间\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"lastEditUserName\" label=\"最后修改人\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"gmtModitify\" label=\"最后修改时间\" show-overflow-tooltip></el-table-column>\r\n <el-table-column property=\"status\" label=\"状态\" width=\"60\" />\r\n <el-table-column fixed=\"right\" label=\"操作\" align=\"center\" width=\"300\">\r\n <template #default=\"scope\">\r\n <el-button link type=\"primary\" size=\"small\" :icon=\"View\" @click=\"openApproveBasicDialog('查看', scope.row)\">查看</el-button>\r\n <el-button link type=\"primary\" size=\"small\" :icon=\"Edit\" @click=\"openApproveBasicDialog('修改', scope.row)\">修改</el-button>\r\n <el-button link type=\"danger\" size=\"small\" :icon=\"Delete\" @click=\"deleteApproveBasic(scope.row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <br>\r\n <el-pagination\r\n @size-change=\"onHandleSizeChange\"\r\n @current-change=\"onHandleCurrentChange\"\r\n :pager-count=\"5\"\r\n :page-sizes=\"[10, 20, 30]\"\r\n v-model:current-page=\"tableData.params.pageIndex\"\r\n background\r\n v-model:page-size=\"tableData.params.pageSize\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n :total=\"tableData.total\"\r\n class=\"page-position\">\r\n </el-pagination>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <approve-basic-dialog ref=\"approveBasicDialogRef\" @refreshApproveBasic=\"getInspectionTask\"></approve-basic-dialog>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { toRefs, reactive, ref, onMounted } from 'vue';\r\nimport { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';\r\nimport { ElTable, ElMessage, ElMessageBox } from 'element-plus';\r\nimport { approveBasicApi } from '/@/api/specialWorkSystem/approveBasic';\r\nimport { departmentApi } from '/@/api/systemManage/department';\r\nimport approveBasicDialog from '/@/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue';\r\nlet global: any = {\r\n homeChartOne: null,\r\n homeChartTwo: null,\r\n homeCharThree: null,\r\n dispose: [null, '', undefined]\r\n};\r\n\r\ninterface stateType {\r\n tableData: {\r\n approveBasicData: [];\r\n total: number;\r\n loading: boolean;\r\n params: {\r\n pageIndex: number | null;\r\n pageSize: number | null;\r\n unitName: string | null;\r\n workType: number | null;\r\n createUserId: number | null;\r\n execClassgroupId: number | null;\r\n checkCycle: number | null;\r\n checkCycleUnit: number | null;\r\n };\r\n };\r\n ruleStandTypeList: Array<type>;\r\n typeList: Array<type>;\r\n typeTwoList: Array<type>;\r\n}\r\ninterface type {\r\n id: number;\r\n name: string;\r\n}\r\ninterface classGroup {\r\n id: number;\r\n groupName: string;\r\n}\r\nexport default {\r\n name: 'index',\r\n components: { approveBasicDialog },\r\n setup() {\r\n const approveBasicDialogRef = ref();\r\n const state = reactive<stateType>({\r\n tableData: {\r\n approveBasicData: [],\r\n total: 0,\r\n loading: false,\r\n params: {\r\n pageIndex: 1,\r\n pageSize: 10,\r\n unitName: null,\r\n workType: null,\r\n createUserId: null,\r\n execClassgroupId: null,\r\n checkCycle: null,\r\n checkCycleUnit: null\r\n }\r\n },\r\n ruleStandTypeList: [\r\n { id: 1, name: '可燃气浓度' },\r\n { id: 2, name: '氧气浓度' },\r\n { id: 3, name: '一氧化碳浓度' },\r\n { id: 4, name: '硫化氢浓度' },\r\n { id: 5, name: '温度' },\r\n { id: 6, name: '压力' },\r\n { id: 7, name: '震动' },\r\n ],\r\n typeList:[\r\n { id: 1, name: '大于' },\r\n { id: 2, name: '等于' },\r\n { id: 4, name: '大于等于' },\r\n ],\r\n typeTwoList:[\r\n { id: 3, name: '小于' },\r\n { id: 2, name: '等于' },\r\n { id: 5, name: '小于等于' },\r\n ],\r\n\r\n });\r\n\r\n //获取巡检任务数据\r\n const getInspectionTask = async () => {\r\n let res = await approveBasicApi().getApproveBasicList(state.tableData.params);\r\n if (res.data.code === '200') {\r\n state.tableData.approveBasicData = res.data.data;\r\n state.tableData.total = res.data.total;\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n // //获取部门\r\n // const getDepartmentData = async () => {\r\n // let res = await departmentApi().getDepartmentList();\r\n // if (res.data.code === '200') {\r\n // state.departmentList = res.data.data;\r\n // } else {\r\n // ElMessage({\r\n // type: 'warning',\r\n // message: res.data.msg\r\n // });\r\n // }\r\n // };\r\n\r\n // 删除\r\n const deleteApproveBasic = (row: any) => {\r\n ElMessageBox.confirm(`此操作将永久删除该任务:“${row.title}”,是否继续?`, '提示', {\r\n confirmButtonText: '确认',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n })\r\n .then(async () => {\r\n let res = await approveBasicApi().deleteApproveBasic({ id: row.id });\r\n if (res.data.code === '200') {\r\n ElMessage({\r\n type: 'success',\r\n duration: 2000,\r\n message: '删除成功'\r\n });\r\n await getInspectionTask();\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const openApproveBasicDialog = (type: string, value: {}) => {\r\n approveBasicDialogRef.value.showApproveBasicDialog(type, value);\r\n };\r\n\r\n const parseNumber = (value: number, type: string) => {\r\n if (type === '标准类型') {\r\n return state.ruleStandTypeList.find((item) => item.id === value)?.name;\r\n } else if (type === '最高值') {\r\n return state.typeTwoList.find((item) => item.id == value)?.name;\r\n } else {\r\n return state.typeList.find((item) => item.id == value)?.name;\r\n }\r\n };\r\n\r\n // 分页改变\r\n const onHandleSizeChange = (val: number) => {\r\n state.tableData.params.pageSize = val;\r\n getInspectionTask();\r\n };\r\n // 分页改变\r\n const onHandleCurrentChange = (val: number) => {\r\n state.tableData.params.pageIndex = val;\r\n getInspectionTask();\r\n };\r\n\r\n const reset = () => {\r\n state.tableData.params = {\r\n pageIndex: 1,\r\n pageSize: 10,\r\n unitName: null,\r\n workType: null,\r\n createUserId: null,\r\n execClassgroupId: null,\r\n checkCycle: null,\r\n checkCycleUnit: null\r\n };\r\n };\r\n\r\n // 页面加载时\r\n onMounted(() => {\r\n getInspectionTask();\r\n });\r\n\r\n return {\r\n View,\r\n Edit,\r\n Delete,\r\n Refresh,\r\n Plus,\r\n reset,\r\n parseNumber,\r\n deleteApproveBasic,\r\n getInspectionTask,\r\n onHandleSizeChange,\r\n onHandleCurrentChange,\r\n approveBasicDialogRef,\r\n openApproveBasicDialog,\r\n ...toRefs(state)\r\n };\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n$homeNavLengh: 8;\r\n.home-container {\r\n height: calc(100vh - 114px);\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n .homeCard {\r\n width: 100%;\r\n padding: 20px;\r\n box-sizing: border-box;\r\n background: #fff;\r\n border-radius: 4px;\r\n\r\n .main-card {\r\n width: 100%;\r\n height: 100%;\r\n .cardTop {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 20px;\r\n .mainCardBtn {\r\n margin: 0;\r\n }\r\n }\r\n .pageBtn {\r\n height: 60px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: right;\r\n\r\n .demo-pagination-block + .demo-pagination-block {\r\n margin-top: 10px;\r\n }\r\n .demo-pagination-block .demonstration {\r\n margin-bottom: 16px;\r\n }\r\n }\r\n }\r\n &:last-of-type {\r\n height: calc(100% - 100px);\r\n }\r\n }\r\n .el-row {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n .grid-content {\r\n align-items: center;\r\n min-height: 36px;\r\n }\r\n\r\n .topInfo {\r\n display: flex;\r\n align-items: center;\r\n font-size: 16px;\r\n font-weight: bold;\r\n\r\n & > div {\r\n white-space: nowrap;\r\n margin-right: 20px;\r\n }\r\n }\r\n }\r\n}\r\n.stepItem {\r\n width: 100%;\r\n display: flex;\r\n align-items: flex-start;\r\n margin-bottom: 30px;\r\n margin-left: 30px;\r\n padding-bottom: 30px;\r\n border-left: 2px solid #ccc;\r\n &:first-of-type {\r\n margin-top: 30px;\r\n }\r\n &:last-of-type {\r\n margin-bottom: 0;\r\n border-left: none;\r\n }\r\n .stepNum {\r\n width: 30px;\r\n height: 30px;\r\n border-radius: 15px;\r\n box-sizing: border-box;\r\n color: #333;\r\n border: 1px solid #999;\r\n line-height: 28px;\r\n text-align: center;\r\n margin-right: 10px;\r\n margin-left: -16px;\r\n margin-top: -30px;\r\n }\r\n .stepCard {\r\n width: 100%;\r\n margin-top: -30px;\r\n\r\n .box-card {\r\n width: 100%;\r\n &:deep(.el-card__header) {\r\n padding: 10px 15px;\r\n }\r\n .card-header {\r\n width: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n & > div:first-of-type {\r\n margin-right: 80px;\r\n font-size: 18px;\r\n font-weight: bold;\r\n }\r\n }\r\n }\r\n }\r\n &:hover .card-header {\r\n color: #0098f5;\r\n }\r\n &:hover .stepNum {\r\n border: 2px solid #0098f5;\r\n color: #0098f5;\r\n }\r\n}\r\n.el-input {\r\n width: 100% !important;\r\n}\r\n:deep(.el-date-editor) {\r\n width: 100%;\r\n}\r\n.el-select {\r\n width: 100%;\r\n}\r\n:deep(.el-textarea.is-disabled .el-textarea__inner) {\r\n background-color: var(--el-card-bg-color);\r\n color: var(--el-input-text-color, var(--el-text-color-regular));\r\n}\r\n:deep(.el-input.is-disabled .el-input__inner) {\r\n color: var(--el-input-text-color, var(--el-text-color-regular));\r\n}\r\n:deep(.el-input.is-disabled .el-input__wrapper) {\r\n background-color: var(--el-card-bg-color);\r\n}\r\n</style>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/specialWorkSystem/workFlow/approveBasic/index.vue b/src/views/specialWorkSystem/workFlow/approveBasic/index.vue +--- a/src/views/specialWorkSystem/workFlow/approveBasic/index.vue (revision a1d03a0e810219f8353748f6e55699bf2e1a77a6) ++++ b/src/views/specialWorkSystem/workFlow/approveBasic/index.vue (date 1660631242441) +@@ -5,14 +5,12 @@ + <div class="basic-line"> + <span>任务类型:</span> + <el-select v-model="tableData.params.workType" clearable filterable class="input-box" placeholder="任务类型"> +- <el-option v-for="item in workTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> ++ <!-- <el-option v-for="item in workTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>--> + </el-select> + </div> + <div class="basic-line"> + <span>执行班组:</span> +- <el-select v-model="tableData.params.execClassgroupId" clearable filterable class="input-box" placeholder="执行班组"> +- <el-option v-for="item in classGroupList" :key="item.id" :label="item.groupName" :value="item.id"></el-option> +- </el-select> ++ <el-select v-model="tableData.params.execClassgroupId" clearable filterable class="input-box" placeholder="执行班组"> </el-select> + </div> + <div style="padding-bottom: 10px"> + <el-button type="primary" @click="getInspectionTask">查询</el-button> +@@ -28,7 +26,8 @@ + </el-col> + <el-button type="primary" :icon="Refresh" size="default" /> + </el-row> +- <el-table ref="multipleTableRef" :data="tableData.approveBasicData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> ++ <el-table ref="multipleTableRef" :data="tableData.approveBasicData" 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="title" label="标题" /> + <el-table-column property="ruleStandType" label="标准类型"> + <template #default="scope"> +@@ -43,13 +42,13 @@ + {{ parseNumber(scope.row.minValMatchPattern, '最低值') }} + </span> + <span> +- {{scope.row.minVal}} ++ {{ scope.row.minVal }} + </span> + </template> + </el-table-column> + <el-table-column property="maxVal" label="最高值"> + <template #default="scope"> +- <span> ++ <span> + {{ parseNumber(scope.row.maxValMatchPattern, '最高值') }} + </span> + <span> +@@ -71,20 +70,8 @@ + </template> + </el-table-column> + </el-table> +- <br> +- <el-pagination +- @size-change="onHandleSizeChange" +- @current-change="onHandleCurrentChange" +- :pager-count="5" +- :page-sizes="[10, 20, 30]" +- v-model:current-page="tableData.params.pageIndex" +- background +- v-model:page-size="tableData.params.pageSize" +- layout="total, sizes, prev, pager, next, jumper" +- :total="tableData.total" +- class="page-position"> +- </el-pagination> +- ++ <br /> ++ <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="tableData.params.pageIndex" background v-model:page-size="tableData.params.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="tableData.total" class="page-position"> </el-pagination> + </div> + </div> + </div> +@@ -125,14 +112,16 @@ + ruleStandTypeList: Array<type>; + typeList: Array<type>; + typeTwoList: Array<type>; ++ deleteList: { ++ ids: Array<number>; ++ }; + } + interface type { + id: number; + name: string; + } +-interface classGroup { +- id: number; +- groupName: string; ++interface ruleType { ++ ruleStandId: number; + } + export default { + name: 'index', +@@ -162,19 +151,21 @@ + { id: 4, name: '硫化氢浓度' }, + { id: 5, name: '温度' }, + { id: 6, name: '压力' }, +- { id: 7, name: '震动' }, ++ { id: 7, name: '震动' } + ], +- typeList:[ ++ typeList: [ + { id: 1, name: '大于' }, + { id: 2, name: '等于' }, +- { id: 4, name: '大于等于' }, ++ { id: 4, name: '大于等于' } + ], +- typeTwoList:[ ++ typeTwoList: [ + { id: 3, name: '小于' }, + { id: 2, name: '等于' }, +- { id: 5, name: '小于等于' }, ++ { id: 5, name: '小于等于' } + ], +- ++ deleteList: { ++ ids: [] ++ } + }); + + //获取巡检任务数据 +@@ -212,7 +203,7 @@ + type: 'warning' + }) + .then(async () => { +- let res = await approveBasicApi().deleteApproveBasic({ id: row.id }); ++ let res = await approveBasicApi().deleteApproveBasic(state.deleteList); + if (res.data.code === '200') { + ElMessage({ + type: 'success', +@@ -230,6 +221,12 @@ + .catch(() => {}); + }; + ++ const handleSelectionChange = (val: Array<ruleType>) => { ++ state.deleteList.ids = val.map((item) => { ++ return item.ruleStandId; ++ }); ++ }; ++ + const openApproveBasicDialog = (type: string, value: {}) => { + approveBasicDialogRef.value.showApproveBasicDialog(type, value); + }; +@@ -281,6 +278,7 @@ + Plus, + reset, + parseNumber, ++ handleSelectionChange, + deleteApproveBasic, + getInspectionTask, + onHandleSizeChange, +Index: .env.development +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+># 本地环境\r\nENV = 'development'\r\n\r\nVITE_API_URL = 'http://192.168.0.35:8008'\r\n#李宇飞接口地址\r\n\r\nVITE_API_URL = 'http://192.168.0.50:8008'\r\n#张凤接口地址\r\n\r\n#VITE_API_URL = 'http://192.168.0.29:8008'\r\n#黄振接口地址\r\n\r\n#VITE_API_URL = 'http://192.168.0.179:8008'\r\n#施正红接口地址\r\n\r\n#VITE_API_URL = 'http://192.168.0.69:8008'\r\n#戚会山接口地址\r\n\r\n#VITE_API_URL = 'http://192.168.0.52:8011/safeplatform'\r\n#本地测试接口地址\r\n\r\n#VITE_API_URL_OUT = 'http://192.168.0.52:8011/safeplatform-out'\r\n#本地外包测试接口地址\r\n\r\n#VITE_API_URL = 'http://121.239.169.27:16006/safeplatform'\r\n#线上正式环境接口地址\r\n\r\n#VITE_API_URL_OUT = 'http://121.239.169.27:16006/safeplatform-out'\r\n#线上正式环境外包接口地址\r\n\r\nVITE_API_URL_SOCKET = 'http://192.168.0.29:8018'\r\n#黄振websocket接口地址 +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.env.development b/.env.development +--- a/.env.development (revision a1d03a0e810219f8353748f6e55699bf2e1a77a6) ++++ b/.env.development (date 1660616346693) +@@ -1,7 +1,7 @@ + # 本地环境 + ENV = 'development' + +-VITE_API_URL = 'http://192.168.0.35:8008' ++#VITE_API_URL = 'http://192.168.0.35:8008' + #李宇飞接口地址 + + VITE_API_URL = 'http://192.168.0.50:8008' +@@ -29,4 +29,4 @@ + #线上正式环境外包接口地址 + + VITE_API_URL_SOCKET = 'http://192.168.0.29:8018' +-#黄振websocket接口地址 +\ No newline at end of file ++#黄振websocket接口地址 +Index: src/views/doublePrevent/dpIndex/index.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <div class=\"home-container\">\r\n <div class=\"main-cont\">\r\n <div class=\"table-item\">\r\n <div class=\"item-head\">\r\n <span>告警风险事件概括</span>\r\n <div @click=\"toRiskEve\">查看更多>></div>\r\n </div>\r\n <el-table :data=\"eventData\" style=\"width: 100%\" :header-cell-style=\"{ background: '#fafafa' }\">\r\n <el-table-column prop=\"riskEventName\" label=\"风险事件名称\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"riskUnitName\" label=\"风险分析单元名称\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"createByUserName\" label=\"创建人\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"gmtCreate\" label=\"创建时间\" show-overflow-tooltip></el-table-column>\r\n </el-table>\r\n </div>\r\n <div class=\"table-item table-item2\">\r\n <div class=\"item-head\">\r\n <span>隐患状态详情</span>\r\n <div @click=\"toRiskStatus\">查看更多>></div>\r\n </div>\r\n <el-table :data=\"riskStatusData\" style=\"width: 100%\" :header-cell-style=\"{ background: '#fafafa' }\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" />\r\n<!-- <el-table-column prop=\"reportTime\" label=\"上报时间\" show-overflow-tooltip width=\"170px\"></el-table-column>-->\r\n <el-table-column prop=\"dangerCode\" label=\"隐患名称\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"dangerLevel\" label=\"隐患等级\" show-overflow-tooltip>\r\n <template #default=\"scope\">\r\n <div :style=\"{color: scope.row.dangerLevel==1?'#409eff':'#ff0000'}\">\r\n {{scope.row.dangerLevel==1?'一般隐患':'重大隐患'}}\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"reportTime\" label=\"上报时间\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"dangerStatus\" label=\"隐患状态\" show-overflow-tooltip>\r\n <template #default=\"scope\">\r\n <div :style=\"{color: scope.row.dangerStatus==0 || scope.row.dangerStatus==1 ?'#67C23A':(scope.row.dangerStatus==2 || scope.row.dangerStatus==3?'#F56C6C':'#409EFF')}\">\r\n {{scope.row.dangerStatus==0?'整改中':(scope.row.dangerStatus==1?'待验收':(scope.row.dangerStatus==2?'延期整改':(scope.row.dangerStatus==3?'超期未整改':'已验收')))}}\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </div>\r\n <div class=\"table-item\">\r\n <div class=\"item-head\">\r\n <span>隐患整改情况</span>\r\n </div>\r\n <div id=\"riskFix\"></div>\r\n </div>\r\n <div class=\"table-item\">\r\n <div class=\"item-head\">\r\n <span>风险装置列表</span>\r\n <div @click=\"toRevice\">查看更多>></div>\r\n </div>\r\n <el-table class=\"deviceTable\" :data=\"deviceData\" style=\"width: 100%\" :header-cell-style=\"{ background: '#fafafa' }\">\r\n <el-table-column prop=\"produceDeviceName\" label=\"装置名称\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"riskLevel\" label=\"风险等级\" show-overflow-tooltip>\r\n <template #default=\"scope\">\r\n <div :style=\"{color: scope.row.riskLevel==1?'#409EFF':(scope.row.riskLevel==2?'#67C23A':(scope.row.riskLevel==3?'#E6A23C':'#F56C6C'))}\">\r\n {{scope.row.riskLevel==1?'低风险':(scope.row.riskLevel==2?'一般风险':(scope.row.riskLevel==3?'较大风险':'重大风险'))}}\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div class=\"deviceLevel\">\r\n <div class=\"levelItem red\">\r\n <span>0</span>\r\n <div>重大风险</div>\r\n </div>\r\n <div class=\"levelItem orange\">\r\n <span>2</span>\r\n <div>较大风险</div>\r\n </div>\r\n <div class=\"levelItem green\">\r\n <span>8</span>\r\n <div>一般风险</div>\r\n </div>\r\n <div class=\"levelItem blue\">\r\n <span>10</span>\r\n <div>低风险</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-item\">\r\n <div class=\"item-head\">\r\n <span>隐患等级分布</span>\r\n </div>\r\n <div id=\"riskLevel\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\n import { toRefs, reactive, ref, onMounted } from 'vue';\r\n import { storeToRefs } from 'pinia';\r\n import { initBackEndControlRoutes } from '/@/router/backEnd';\r\n import { useUserInfo } from '/@/stores/userInfo';\r\n import { Session } from '/@/utils/storage';\r\n import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';\r\n import { ElTable } from 'element-plus';\r\n import { FormInstance, FormRules, ElMessage } from 'element-plus';\r\n import { safetyRiskEventApi } from '/@/api/doublePreventSystem/safetyRiskEvent/index.ts';\r\n import { useRouter } from 'vue-router';\r\n import {hiddenReportApi} from \"/@/api/doublePreventSystem/report\";\r\n import { productionDeviceApi } from '/@/api/doublePreventSystem/productionDevice/index.ts';\r\n import * as echarts from 'echarts/core';\r\n import {TooltipComponent, TooltipComponentOption, LegendComponent, LegendComponentOption} from 'echarts/components';\r\n import {PieChart, PieSeriesOption} from 'echarts/charts';\r\n import {LabelLayout} from 'echarts/features';\r\n import {CanvasRenderer} from 'echarts/renderers';\r\n echarts.use([TooltipComponent, LegendComponent, PieChart, CanvasRenderer, LabelLayout]);\r\n // 定义接口来定义对象的类型\r\n interface stateType {\r\n eventData: Array<any>;\r\n riskStatusData: Array<any>;\r\n deviceData: Array<any>;\r\n pageIndex: number;\r\n pageSize: number;\r\n totalSize: number;\r\n departmentList: [];\r\n classGroupList: Array<classGroup>;\r\n inspectPointAllList: [];\r\n }\r\n interface type {\r\n id: number;\r\n name: string;\r\n }\r\n interface classGroup {\r\n id: number;\r\n groupName: string;\r\n }\r\n export default {\r\n name: 'workingHours',\r\n components: {},\r\n setup() {\r\n const router = useRouter();\r\n const state = reactive<stateType>({\r\n pageIndex: 1,\r\n pageSize: 5,\r\n totalSize: 0,\r\n eventData: [],\r\n riskStatusData: [],\r\n deviceData: [],\r\n departmentList: [],\r\n classGroupList: [],\r\n inspectPointAllList: []\r\n });\r\n\r\n // 页面载入时执行方法\r\n onMounted(() => {\r\n getEventRecord();\r\n getRiskStatusRecord();\r\n getDeviceRecord();\r\n initRiskFix();\r\n initRiskLevel()\r\n });\r\n\r\n // 告警列表\r\n const getEventRecord = async () => {\r\n const data = { pageSize: state.pageSize, pageIndex: state.pageIndex};\r\n let res = await safetyRiskEventApi().getSafetyRiskEventList(data)\r\n if (res.data.code === '200'){\r\n state.eventData = res.data.data\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n // 隐患状态列表\r\n const getRiskStatusRecord = async () => {\r\n const data = { pageSize: state.pageSize, pageIndex: state.pageIndex};\r\n let res = await hiddenReportApi().getHiddenReportList(data)\r\n if (res.data.code === '200'){\r\n state.riskStatusData = res.data.data\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n // 隐患状态列表\r\n const getDeviceRecord = async () => {\r\n const data = { pageSize: state.pageSize, pageIndex: state.pageIndex};\r\n let res = await productionDeviceApi().getProductionDeviceList(data)\r\n if (res.data.code === '200'){\r\n state.deviceData = res.data.data\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n // 隐患整改情况\r\n const initRiskFix =()=>{\r\n var dom = document.getElementById('riskFix');\r\n var myChart = echarts.init(dom, null, {\r\n renderer: 'canvas',\r\n useDirtyRect: false\r\n });\r\n var app = {};\r\n\r\n var option;\r\n\r\n option = {\r\n tooltip: {\r\n trigger: 'item'\r\n },\r\n legend: {\r\n bottom: '10%',\r\n left: 'center'\r\n },\r\n series: [\r\n {\r\n name: 'Access From',\r\n type: 'pie',\r\n radius: ['35%', '60%'],\r\n avoidLabelOverlap: false,\r\n itemStyle: {\r\n borderRadius: 6,\r\n borderColor: '#fff',\r\n borderWidth: 2\r\n },\r\n label: {\r\n show: false,\r\n position: 'center'\r\n },\r\n emphasis: {\r\n label: {\r\n show: true,\r\n fontSize: '40',\r\n fontWeight: 'bold'\r\n }\r\n },\r\n labelLine: {\r\n show: false\r\n },\r\n data: [\r\n { value: 1048, name: '整改中' },\r\n { value: 735, name: '待验收' },\r\n { value: 580, name: '延期整改' },\r\n { value: 484, name: '超期未整改' },\r\n { value: 300, name: '已验收' }\r\n ],\r\n center: ['50%','35%']\r\n }\r\n ]\r\n };\r\n\r\n if (option && typeof option === 'object') {\r\n myChart.setOption(option);\r\n }\r\n\r\n window.addEventListener('resize', myChart.resize);\r\n }\r\n\r\n // 隐患整改情况\r\n const initRiskLevel =()=>{\r\n var dom = document.getElementById('riskLevel');\r\n var myChart = echarts.init(dom, null, {\r\n renderer: 'canvas',\r\n useDirtyRect: false\r\n });\r\n var app = {};\r\n\r\n var option;\r\n\r\n option = {\r\n tooltip: {\r\n trigger: 'item'\r\n },\r\n legend: {\r\n bottom: '10%',\r\n left: 'center'\r\n },\r\n series: [\r\n {\r\n name: 'Access From',\r\n type: 'pie',\r\n radius: ['35%', '60%'],\r\n avoidLabelOverlap: false,\r\n itemStyle: {\r\n borderRadius: 6,\r\n borderColor: '#fff',\r\n borderWidth: 2\r\n },\r\n label: {\r\n show: false,\r\n position: 'center'\r\n },\r\n emphasis: {\r\n label: {\r\n show: true,\r\n fontSize: '40',\r\n fontWeight: 'bold'\r\n }\r\n },\r\n labelLine: {\r\n show: false\r\n },\r\n data: [\r\n { value: 1048, name: '一般隐患' },\r\n { value: 235, name: '重大隐患' }\r\n ],\r\n center: ['50%','35%']\r\n }\r\n ]\r\n };\r\n\r\n if (option && typeof option === 'object') {\r\n myChart.setOption(option);\r\n }\r\n\r\n window.addEventListener('resize', myChart.resize);\r\n }\r\n\r\n const toRiskEve = ()=>{\r\n router.push({\r\n path: 'event',\r\n });\r\n }\r\n\r\n const toRiskStatus = ()=>{\r\n router.push({\r\n path: 'hiddenReport',\r\n });\r\n }\r\n\r\n const toRevice = ()=>{\r\n router.push({\r\n path: 'device',\r\n });\r\n }\r\n\r\n return {\r\n View,\r\n Edit,\r\n Delete,\r\n Refresh,\r\n Plus,\r\n router,\r\n toRiskEve,\r\n toRiskStatus,\r\n toRevice,\r\n ...toRefs(state)\r\n };\r\n }\r\n };\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n $homeNavLengh: 8;\r\n .home-container {\r\n /*height: calc(100vh - 144px);*/\r\n height: 100%;\r\n padding: 20px;\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n .main-cont {\r\n width: 100%;\r\n height: 100%;\r\n display: grid;\r\n grid-gap: 20px;\r\n grid-template-columns: repeat(3, 1fr);\r\n grid-template-rows: repeat(2, 1fr);\r\n grid-auto-flow: row;\r\n justify-content: center;\r\n .table-item{\r\n border-radius: 8px;\r\n background: #fff;\r\n padding: 20px;\r\n\r\n .item-head{\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n height: 30px;\r\n margin-bottom: 20px;\r\n span{\r\n font-size: 20px;\r\n color: #333;\r\n font-weight: bolder;\r\n }\r\n div{\r\n cursor: pointer;\r\n\r\n &:hover{\r\n color: #409eff;\r\n }\r\n }\r\n }\r\n #riskFix{\r\n height: calc(50vh - 80px);\r\n }\r\n #riskLevel{\r\n height: calc(50vh - 80px);\r\n }\r\n .deviceTable{\r\n height: calc((50vh - 100px) / 3 * 2);\r\n }\r\n .deviceLevel{\r\n height: calc((50vh - 100px) / 3);\r\n display: grid;\r\n grid-gap: 10px;\r\n grid-template-columns: repeat(4, 1fr);\r\n align-items: center;\r\n justify-content: space-between;\r\n\r\n .levelItem{\r\n display: flex;\r\n margin-top: 20px;\r\n flex-direction: column;\r\n align-items: center;\r\n padding: 15px;\r\n box-sizing: border-box;\r\n border-radius: 8px;\r\n color: #fff;\r\n font-size: 16px;\r\n\r\n span{\r\n margin-bottom: 10px;\r\n font-size: 24px;\r\n font-weight: bolder;\r\n }\r\n }\r\n .red{\r\n background: #F56C6C;\r\n }\r\n .orange{\r\n background: #E6A23C;\r\n }\r\n .green{\r\n background: #67C23A;\r\n }\r\n .blue{\r\n background: #409EFF;\r\n }\r\n }\r\n }\r\n .table-item2{\r\n grid-column-start: 2;\r\n grid-column-end: 4;\r\n }\r\n }\r\n .el-row {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n .grid-content {\r\n align-items: center;\r\n min-height: 36px;\r\n }\r\n\r\n .topInfo {\r\n display: flex;\r\n align-items: center;\r\n font-size: 16px;\r\n font-weight: bold;\r\n\r\n & > div {\r\n white-space: nowrap;\r\n margin-right: 20px;\r\n }\r\n }\r\n }\r\n }\r\n .el-input {\r\n width: 100% !important;\r\n }\r\n .el-date-editor::v-deep {\r\n width: 100%;\r\n }\r\n .el-select {\r\n width: 100%;\r\n }\r\n</style> +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/doublePrevent/dpIndex/index.vue b/src/views/doublePrevent/dpIndex/index.vue +--- a/src/views/doublePrevent/dpIndex/index.vue (revision a1d03a0e810219f8353748f6e55699bf2e1a77a6) ++++ b/src/views/doublePrevent/dpIndex/index.vue (date 1660564801420) +@@ -212,14 +212,14 @@ + trigger: 'item' + }, + legend: { +- bottom: '10%', ++ bottom: '35%', + left: 'center' + }, + series: [ + { + name: 'Access From', + type: 'pie', +- radius: ['35%', '60%'], ++ radius: ['30%', '50%'], + avoidLabelOverlap: false, + itemStyle: { + borderRadius: 6, +@@ -247,7 +247,7 @@ + { value: 484, name: '超期未整改' }, + { value: 300, name: '已验收' } + ], +- center: ['50%','35%'] ++ center: ['50%','30%'] + } + ] + }; +@@ -275,14 +275,14 @@ + trigger: 'item' + }, + legend: { +- bottom: '10%', ++ bottom: '35%', + left: 'center' + }, + series: [ + { + name: 'Access From', + type: 'pie', +- radius: ['35%', '60%'], ++ radius: ['30%', '50%'], + avoidLabelOverlap: false, + itemStyle: { + borderRadius: 6, +@@ -307,7 +307,7 @@ + { value: 1048, name: '一般隐患' }, + { value: 235, name: '重大隐患' } + ], +- center: ['50%','35%'] ++ center: ['50%','30%'] + } + ] + }; +@@ -357,8 +357,7 @@ + $homeNavLengh: 8; + .home-container { + /*height: calc(100vh - 144px);*/ +- height: 100%; +- padding: 20px; ++ height: calc(100vh - 144px); + box-sizing: border-box; + overflow: hidden; + .main-cont { +@@ -395,16 +394,16 @@ + } + } + #riskFix{ +- height: calc(50vh - 80px); ++ height: calc(50vh - 42px); + } + #riskLevel{ +- height: calc(50vh - 80px); ++ height: calc(50vh - 42px); + } + .deviceTable{ +- height: calc((50vh - 100px) / 3 * 2); ++ height: calc((50vh - 172px) / 3 * 2); + } + .deviceLevel{ +- height: calc((50vh - 100px) / 3); ++ height: calc((50vh - 172px) / 3); + display: grid; + grid-gap: 10px; + grid-template-columns: repeat(4, 1fr); +@@ -481,4 +480,4 @@ + .el-select { + width: 100%; + } +-</style> +\ No newline at end of file ++</style> +Index: src/utils/request.ts +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>import axios from 'axios';\r\nimport { ElMessage, ElMessageBox } from 'element-plus';\r\nimport JSONbig from 'json-bigint';\r\nimport Cookies from 'js-cookie';\r\nimport {useLoginApi} from \"/@/api/login\";\r\nimport { Session, } from '/@/utils/storage';\r\n\r\n// var jsonBig = require('json-bigint')({ \"storeAsString\": true });\r\n// 配置新建一个 axios 实例\r\nconst service = axios.create({\r\n // baseURL: import.meta.env.VITE_API_URL as any,\r\n timeout: 50000,\r\n headers: { 'Content-Type': 'application/json' }\r\n});\r\n\r\nservice.interceptors.request.use(\r\n (config) => {\r\n for (let key in config.data) {\r\n if (config.data[key] == '' && config.data[key] !== 0) {\r\n config.data[key] = null;\r\n }\r\n }\r\n if (Cookies.get('token')) {\r\n (<any>config.headers).common['Authorization'] = `${Cookies.get('token')}`;\r\n (<any>config.headers).common['uid'] = `${Cookies.get('uid')}`;\r\n }\r\n return config;\r\n },\r\n (error) => {\r\n // 对请求错误做些什么\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nservice.defaults.transformResponse = [\r\n function (data) {\r\n try {\r\n // 正常同通过return JSON.parse(data)对数据进行转换\r\n // 但是转化完成的数据可能超出安全数据长度\r\n // 因此我们定制使用第三包来转化\r\n return JSONbig.parse(data);\r\n } catch (err) {\r\n console.log(err);\r\n // 转换失败返回一个空对象\r\n return {};\r\n }\r\n }\r\n];\r\n\r\nservice.interceptors.response.use(\r\n (response) => {\r\n // 对响应数据做点什么\r\n if (response.data.code && response.data.code === 'A0213') {\r\n ElMessage.error('用户uid不存在');\r\n setTimeout(() => {\r\n Session.clear();\r\n window.location.href = '/';\r\n }, 1000);\r\n } else if (response.data.code && response.data.code === 'A0215') {\r\n ElMessage.error('token失效');\r\n // logOut;\r\n useLoginApi().signOut().then(()=>{\r\n setTimeout(() => {\r\n Session.clear();\r\n window.location.href = '/';\r\n }, 1000);\r\n })\r\n }\r\n // if(response.data.code && response.data.code !== '200'){\r\n return Promise.resolve(response);\r\n // }\r\n // Session.clear()\r\n // window.location.href = '/'\r\n // return Promise.reject(response)\r\n // const res = response.data;\r\n // debugger\r\n // if (res.code && res.code !== 0) {\r\n // \t// `token` 过期或者账号已在别处登录\r\n // \tif (res.code === 401 || res.code === 4001) {\r\n // \t\tSession.clear(); // 清除浏览器全部临时缓存\r\n // \t\twindow.location.href = '/'; // 去登录页\r\n // \t\tElMessageBox.alert('你已被登出,请重新登录', '提示', {})\r\n // \t\t\t.then(() => {})\r\n // \t\t\t.catch(() => {});\r\n // }\r\n // \treturn Promise.reject(service.interceptors.response);\r\n // } else {\r\n // \treturn response.data;\r\n // }\r\n },\r\n (error) => {\r\n // 对响应错误做点什么\r\n if (error.message.indexOf('timeout') != -1) {\r\n ElMessage.error('网络超时');\r\n setTimeout(() => {\r\n // Session.clear();\r\n window.location.href = '/';\r\n }, 1000);\r\n } else if (error.message == 'Network Error') {\r\n ElMessage.error('网络连接错误');\r\n // setTimeout(() => {\r\n // Session.clear();\r\n // window.location.href = '/';\r\n // }, 1000);\r\n } else {\r\n if (error.response.data) ElMessage.error(error.response.data.error);\r\n else ElMessage.error('接口路径找不到');\r\n }\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default service;\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/utils/request.ts b/src/utils/request.ts +--- a/src/utils/request.ts (revision a1d03a0e810219f8353748f6e55699bf2e1a77a6) ++++ b/src/utils/request.ts (date 1660615601526) +@@ -52,18 +52,14 @@ + // 对响应数据做点什么 + if (response.data.code && response.data.code === 'A0213') { + ElMessage.error('用户uid不存在'); +- setTimeout(() => { + Session.clear(); + window.location.href = '/'; +- }, 1000); + } else if (response.data.code && response.data.code === 'A0215') { + ElMessage.error('token失效'); + // logOut; + useLoginApi().signOut().then(()=>{ +- setTimeout(() => { +- Session.clear(); +- window.location.href = '/'; +- }, 1000); ++ Session.clear(); ++ window.location.href = '/'; + }) + } + // if(response.data.code && response.data.code !== '200'){ +Index: src/api/specialWorkSystem/safetyAction/index.ts +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/api/specialWorkSystem/safetyAction/index.ts b/src/api/specialWorkSystem/safetyAction/index.ts +new file mode 100644 +--- /dev/null (date 1660632499860) ++++ b/src/api/specialWorkSystem/safetyAction/index.ts (date 1660632499860) +@@ -0,0 +1,45 @@ ++import request from '/@/utils/request'; ++ ++export function safetyActionApi() { ++ return { ++ // v1 ++ getSafetyActionList: (data: object) => { ++ return request({ ++ url: import.meta.env.VITE_API_URL + `/rule/measure/page/list`, ++ method: 'post', ++ data: data ++ }); ++ }, ++ // v1 ++ addSafetyAction: (data: object) => { ++ return request({ ++ url: import.meta.env.VITE_API_URL + `/rule/measure/save`, ++ method: 'post', ++ data: data ++ }); ++ }, ++ // v1 ++ modSafetyAction: (data: object) => { ++ return request({ ++ url: import.meta.env.VITE_API_URL + `/rule/measure/mod`, ++ method: 'post', ++ data: data ++ }); ++ }, ++ // v1 ++ deleteSafetyAction: (data: object) => { ++ return request({ ++ url: import.meta.env.VITE_API_URL + `/rule/measure/delete`, ++ method: 'post', ++ data: data ++ }); ++ }, ++ // v1 ++ getAllSafetyActionList: () => { ++ return request({ ++ url: import.meta.env.VITE_API_URL + `/rule/measure/list`, ++ method: 'post' ++ }); ++ } ++ }; ++} +Index: src/views/specialWorkSystem/foundationSet/safetyAction/components/safetyActionDialog.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/specialWorkSystem/foundationSet/safetyAction/components/safetyActionDialog.vue b/src/views/specialWorkSystem/foundationSet/safetyAction/components/safetyActionDialog.vue +new file mode 100644 +--- /dev/null (date 1660633049658) ++++ b/src/views/specialWorkSystem/foundationSet/safetyAction/components/safetyActionDialog.vue (date 1660633049658) +@@ -0,0 +1,214 @@ ++<template> ++ <div class="system-add-menu-container"> ++ <el-dialog :title="title" v-model="isShowApproveBasicDialog" width="600px" :close-on-click-modal="false"> ++ <el-form :model="approveBasicForm" :rules="approveBasicFormRules" ref="approveBasicFormRef" size="default" label-width="120px"> ++ <el-row :gutter="35"> ++ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> ++ <el-form-item label="安全措施" prop="title"> ++ <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.title" placeholder="请输入标题名称" clearable></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="ruleStandType"> ++ <el-select class="input-add" :disabled="!disabled" v-model="approveBasicForm.ruleStandType" placeholder="请选择标准类型" clearable filterable> ++ <el-option v-for="item in ruleStandTypeList" :key="item.id" :label="item.name" :value="item.id"></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="info"> ++ <el-input class="input-add" :rows="3" v-model.trim="approveBasicForm.info" type="textarea" placeholder="请输入描述"></el-input> ++ </el-form-item> ++ </el-col> ++ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> ++ <el-form-item label="创建人" prop="location"> ++ <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.createByUserName"></el-input> ++ </el-form-item> ++ </el-col> ++ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> ++ <el-form-item label="创建时间" prop="location"> ++ <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.gmtCreate"></el-input> ++ </el-form-item> ++ </el-col> ++ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> ++ <el-form-item label="最后修改人" prop="location"> ++ <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.lastEditUserName"></el-input> ++ </el-form-item> ++ </el-col> ++ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> ++ <el-form-item label="最后修改时间" prop="location"> ++ <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.gmtModitify"></el-input> ++ </el-form-item> ++ </el-col> ++ </el-row> ++ </el-form> ++ <template #footer> ++ <span class="dialog-footer" v-show="disabled"> ++ <el-button @click="isShowApproveBasicDialog = !isShowApproveBasicDialog" size="default">取 消</el-button> ++ <el-button type="primary" @click="submitApproveBasic" v-throttle size="default">确 定</el-button> ++ </span> ++ </template> ++ </el-dialog> ++ </div> ++</template> ++ ++<script lang="ts"> ++interface stateType { ++ isShowApproveBasicDialog: Boolean; ++ disabled: Boolean; ++ personTime: Boolean; ++ approveBasicForm: { ++ workType: number | null; ++ type: number | null; ++ correctVal: number | null; ++ context: string | null; ++ }; ++ title: string; ++ departmentList: []; ++ ruleStandTypeList: Array<levelListState>; ++ typeList: Array<levelListState>; ++ typeTwoList: Array<levelListState>; ++ approveBasicFormRules: {}; ++} ++interface levelListState { ++ id: number; ++ name: string; ++} ++ ++import { reactive, toRefs, ref } from 'vue'; ++import { approveBasicApi } from '/@/api/specialWorkSystem/approveBasic'; ++import { ElMessage } from 'element-plus'; ++export default { ++ name: 'approveBasicDialog', ++ setup(props: any, context: any) { ++ const approveBasicFormRef = ref(); ++ const state = reactive<stateType>({ ++ title: '', ++ disabled: false, ++ personTime: false, ++ departmentList: [], ++ isShowApproveBasicDialog: false, ++ ruleStandTypeList: [ ++ { id: 1, name: '可燃气浓度' }, ++ { id: 2, name: '氧气浓度' }, ++ { id: 3, name: '一氧化碳浓度' }, ++ { id: 4, name: '硫化氢浓度' }, ++ { id: 5, name: '温度' }, ++ { id: 6, name: '压力' }, ++ { id: 7, name: '震动' } ++ ], ++ typeList: [ ++ { id: 1, name: '大于' }, ++ { id: 2, name: '等于' }, ++ { id: 4, name: '大于等于' } ++ ], ++ typeTwoList: [ ++ { id: 3, name: '小于' }, ++ { id: 2, name: '等于' }, ++ { id: 5, name: '小于等于' } ++ ], ++ approveBasicForm: { ++ workType: null, ++ type: null, ++ correctVal: null, ++ context: null ++ }, ++ approveBasicFormRules: { ++ ruleStandType: [{ required: true, message: '请选择标准类型', trigger: 'change' }], ++ minVal: [{ required: true, message: '请填写标最低值', trigger: 'blur' }], ++ maxVal: [{ required: true, message: '请填写标最高值', trigger: 'blur' }], ++ title: [{ required: true, message: '请选择风险等级', trigger: 'blur' }], ++ info: [{ required: true, message: '请填写描述信息', trigger: 'blur' }] ++ } ++ }); ++ ++ //打开模态框 ++ const showSafetyActionDialog = (type: string, value: object, department: []) => { ++ state.isShowApproveBasicDialog = true; ++ state.departmentList = department; ++ setTimeout(() => { ++ approveBasicFormRef.value.clearValidate(); ++ }); ++ if (type === '新增') { ++ state.disabled = true; ++ state.personTime = false; ++ state.title = '新增审批标准'; ++ state.approveBasicForm = { ++ workType: null, ++ type: null, ++ correctVal: null, ++ context: null ++ }; ++ } else if (type === '查看') { ++ state.disabled = false; ++ state.personTime = true; ++ state.title = '查看审批标准'; ++ state.approveBasicForm = JSON.parse(JSON.stringify(value)); ++ } else { ++ state.disabled = true; ++ state.personTime = false; ++ state.title = '修改审批标准'; ++ state.approveBasicForm = JSON.parse(JSON.stringify(value)); ++ // for (let i in state.approveBasicForm) { ++ // state.approveBasicForm[i] = approveBasicForm[i]; ++ // } ++ } ++ }; ++ ++ //新增修改提交 ++ const submitApproveBasic = async () => { ++ approveBasicFormRef.value.validate(async (valid: Boolean) => { ++ if (valid) { ++ if (state.title === '新增审批标准') { ++ let res = await approveBasicApi().addApproveBasic(state.approveBasicForm); ++ if (res.data.code === '200') { ++ ElMessage({ ++ type: 'success', ++ message: '审批标准新增成功', ++ duration: 2000 ++ }); ++ state.isShowApproveBasicDialog = false; ++ context.emit('refreshApproveBasic'); ++ } else { ++ ElMessage({ ++ type: 'warning', ++ message: res.data.msg ++ }); ++ } ++ } else { ++ let res = await approveBasicApi().modApproveBasic(state.approveBasicForm); ++ if (res.data.code === '200') { ++ ElMessage({ ++ type: 'success', ++ message: '审批标准修改成功', ++ duration: 2000 ++ }); ++ state.isShowApproveBasicDialog = false; ++ context.emit('refreshApproveBasic'); ++ } else { ++ ElMessage({ ++ type: 'warning', ++ message: res.data.msg ++ }); ++ } ++ } ++ } else { ++ ElMessage({ ++ type: 'warning', ++ message: '请完善基本信息' ++ }); ++ } ++ }); ++ }; ++ ++ return { ++ ...toRefs(state), ++ approveBasicFormRef, ++ submitApproveBasic, ++ showSafetyActionDialog ++ }; ++ } ++}; ++</script> ++ ++<style scoped></style> +Index: src/views/intellectInspect/intelligentLine/index.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <div class=\"container\">\r\n <div class=\"big-title\" @click=\"goBack()\">国泰新华智能巡检系统</div>\r\n <div style=\"height: 20px;font-size: 14px;line-height: 20px; color: #00ffff; margin-top: 4px\">{{ present }}</div>\r\n <div class=\"btns\">\r\n <div class=\"fullbtn\" @click=\"onScreenfullClick\">\r\n <div class=\"toFull\">\r\n <i class=\"iconfont\" :title=\"isScreenfull ? $t('message.user.title6') : $t('message.user.title5')\" :class=\"!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'\"></i>\r\n </div>\r\n <div>全屏</div>\r\n </div>\r\n <div class=\"backBtn\" @click=\"goBack()\">\r\n <img src=\"../../../assets/loginPage/back-icon.png\"/>\r\n <div>退出</div>\r\n </div>\r\n </div>\r\n <div class=\"blocks\">\r\n <div>\r\n <div class=\"star-pic\">\r\n <div class=\"star-bg\"><img src=\"../../../assets/loginPage/star-bg.png\" /></div>\r\n <div class=\"star\"><img src=\"../../../assets/loginPage/device-pic.png\" /></div>\r\n </div>\r\n <div class=\"line-map\" v-if=\"dataList && dataList.length > 0\">\r\n <div class=\"line-item\" v-for=\"(item, index) in dataList\" :key=\"index\">\r\n <div class=\"picbox\">\r\n <img src=\"../../../assets/loginPage/equipment.jpg\"/>\r\n <p>\r\n RFID: <span>{{ item.rfid }}</span>\r\n </p>\r\n <p>\r\n 位置: <span>{{ item.region.toString() }}</span>\r\n </p>\r\n </div>\r\n <div class=\"area-head\">\r\n <div class=\"indicator\" :class=\"item.points.some((e) => e.reportResult == 1) ? 'somewarning' : (item.points.some((e) => e.reportResult == null) ? 'someUndone' : '')\">\r\n <div class=\"indi-dot\"></div>\r\n <!-- <div class=\"indi-pulse\"></div>-->\r\n <!-- <div class=\"indi-pulse1\"></div>-->\r\n </div>\r\n <div class=\"arrow\" v-if=\"item.points.some((e) => e.reportResult != null)\"></div>\r\n <div class=\"top-line\" :class=\"item.points.some((e) => e.reportResult !== null) ? '' : 'fadeLine'\"></div>\r\n </div>\r\n <div class=\"more-info\">\r\n <div class=\"item\" v-for=\"(t, i) in item.points\" :key=\"i\" :class=\"t.reportResult == null ? 'undone' : t.reportResult == 1 ? 'warning' : ''\">\r\n <section>\r\n <div class=\"dot\"></div>\r\n <div class=\"pulse\"></div>\r\n <div class=\"pulse1\"></div>\r\n </section>\r\n <div :class=\"t.reportResult == null ? 'noBorder' : t.reportResult == 1 ? 'redBorder' : ''\">\r\n <div>\r\n <span>巡检点:</span><span>{{ t.point }}</span>\r\n </div>\r\n <div>\r\n <span>巡检状态:</span><span>{{ t.pointCheckStatus == 1 ? '未完成' : '已完成' }}</span>\r\n </div>\r\n <div v-if=\"t.reportResult != null\">\r\n <span>巡检指标:</span><span>{{ t.quotaContent }}</span>\r\n </div>\r\n <div v-if=\"(t.dataReportType == 2 || t.dataReportType == 3) && t.secondReferenceResult\">\r\n <span>参数:</span><span class=\"target\">{{ t.secondReferenceResult + t.quotaUnit }}</span>\r\n </div>\r\n <div>\r\n <span>巡检结果:</span><span class=\"target\">{{ t.reportResult == null ? '--' : t.reportResult == 0 ? '正常' : '异常' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"line-item finish\">\r\n <div class=\"picbox\"></div>\r\n <div class=\"area-head\">\r\n <div class=\"finish-point\">\r\n <div>完成巡检</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tip\" v-else>抱歉,暂时查询不到巡检路线...</div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport screenfull from 'screenfull';\r\nimport { lineApi } from '/@/api/intelligentLine';\r\nimport { toRefs, reactive, ref, onMounted, onUnmounted, computed } from 'vue';\r\nimport {useRoute} from 'vue-router';\r\nimport { storeToRefs } from 'pinia';\r\nimport { initBackEndControlRoutes } from '/@/router/backEnd';\r\nimport { Session } from '/@/utils/storage';\r\nimport { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';\r\nimport { ElTable } from 'element-plus';\r\nimport { FormInstance, FormRules, ElMessage } from 'element-plus';\r\nimport { useUserInfo } from '/@/stores/userInfo';\r\n\r\n// 定义接口来定义对象的类型\r\ninterface stateType {\r\n present: string;\r\n isScreenfull: boolean;\r\n path: string;\r\n socket: any;\r\n socketData: string;\r\n data: Array<any>;\r\n id: string\r\n}\r\nexport default {\r\n name: 'intelligentLine',\r\n components: {},\r\n setup() {\r\n const userInfo = useUserInfo();\r\n const { userInfos } = storeToRefs(userInfo);\r\n const route = useRoute();\r\n const state = reactive<stateType>({\r\n present: '',\r\n isScreenfull: false,\r\n path: '',\r\n socketData: '',\r\n socket: null,\r\n data: [],\r\n id: ''\r\n });\r\n\r\n onMounted(() => {\r\n setInterval(() => {\r\n state.present = new Date().toLocaleString();\r\n }, 1000);\r\n let curId = route.query.id\r\n state.id = curId.toString()\r\n getLine(state.id)\r\n getUrl(state.id)\r\n });\r\n\r\n const dataList = computed(() => {\r\n return userInfos.value.dataList;\r\n });\r\n\r\n // 获取url\r\n\r\n const getUrl =async (id:string)=>{\r\n const res = await lineApi().getUrl();\r\n if (res.data.code === '200') {\r\n state.path = 'http://' + res.data.data.ip + ':' + res.data.data.port + '/ws/test/'\r\n if (typeof window.WebSocket === 'undefined') {\r\n alert('您的浏览器不支持socket');\r\n } else {\r\n // 实例化socket\r\n // debugger\r\n let uid = userInfos.value.uid.toString()\r\n var url = state.path + uid + '*' + id;\r\n console.log(url,'url',uid,'uid')\r\n url = url.replace('https', 'ws').replace('http', 'ws');\r\n console.log(url, '获取地址');\r\n state.socket = new window.WebSocket(url);\r\n // 监听socket连接\r\n state.socket.onopen = () => {\r\n console.log('socket连接成功');\r\n };\r\n // 监听socket错误信息\r\n state.socket.onerror = () => {\r\n console.log('socket连接错误');\r\n };\r\n // 监听socket消息\r\n state.socket.onmessage = (msg) => {\r\n if (msg.data === '连接成功') return;\r\n console.log(msg.data,'data')\r\n userInfos.value.dataList = JSON.parse(msg.data);\r\n };\r\n }\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n }\r\n\r\n // const send = () => {\r\n // state.socket.send(params);\r\n // };\r\n\r\n // 接口获取数据\r\n const getLine = async (id:string) => {\r\n let res = await lineApi().getLine({ id: id });\r\n if (res.data.code === '200') {\r\n console.log(res.data.data, '获取巡检点');\r\n userInfos.value.dataList = res.data.data;\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n // 全屏\r\n const onScreenfullClick = () => {\r\n if (!screenfull.isEnabled) {\r\n ElMessage.warning('暂不不支持全屏');\r\n return false;\r\n }\r\n screenfull.toggle();\r\n screenfull.on('change', () => {\r\n if (screenfull.isFullscreen) {\r\n state.isScreenfull = true;\r\n } else {\r\n state.isScreenfull = false;\r\n }\r\n });\r\n };\r\n\r\n // 返回\r\n const goBack = () => {\r\n window.history.go(-1);\r\n };\r\n\r\n // 页面关闭处理\r\n onUnmounted(() => {\r\n // 销毁监听\r\n state.socket.onclose = () => {\r\n console.log('socket已经关闭');\r\n };\r\n });\r\n return {\r\n dataList,\r\n goBack,\r\n onScreenfullClick,\r\n ...toRefs(state)\r\n };\r\n }\r\n};\r\n// export default {\r\n// name: 'NewForm',\r\n// props: {\r\n//\r\n// },\r\n// data(){\r\n// return{\r\n// present: '',\r\n// isScreenfull: false,\r\n// path: \"http://192.168.0.29:8008/ws/test/\",\r\n// socket: null,\r\n// socketData: '',\r\n// data: []\r\n// }\r\n// },\r\n// created() {\r\n// setInterval(() => {\r\n// this.present = new Date().toLocaleString()\r\n// }, 1000)\r\n// },\r\n// mounted () {\r\n// // 初始化\r\n// this.init()\r\n// // this.getLine()\r\n// },\r\n// methods:{\r\n// goBack(){\r\n// window.history.go(-1)\r\n// },\r\n//\r\n// async getLine (){\r\n// let res = await lineApi().getLine({ id: '80647416891768832' });\r\n// if (res.data.code === '200') {\r\n// console.log(res.data.data,'获取巡检点')\r\n// this.data = res.data.data\r\n// console.log(this.data,'---')\r\n// } else {\r\n// ElMessage({\r\n// type: 'warning',\r\n// message: res.data.msg\r\n// });\r\n// }\r\n// },\r\n//\r\n// // 全屏点击时\r\n// onScreenfullClick(){\r\n// const t = this\r\n// if (!screenfull.isEnabled) {\r\n// ElMessage.warning('暂不不支持全屏');\r\n// return false;\r\n// }\r\n// screenfull.toggle();\r\n// screenfull.on('change', () => {\r\n// if (screenfull.isFullscreen) {\r\n// t.isScreenfull = true\r\n// }\r\n// else{\r\n// t.isScreenfull = false\r\n// }\r\n// });\r\n// },\r\n//\r\n// // socket获取数据\r\n// init: function () {\r\n// if(typeof(window.WebSocket) === \"undefined\"){\r\n// alert(\"您的浏览器不支持socket\")\r\n// }else{\r\n// // 实例化socket\r\n// var url = this.path + '80938081556545536'\r\n// url = url.replace(\"https\",\"ws\").replace(\"http\",\"ws\");\r\n// console.log(url,'获取地址')\r\n// this.socket = new window.WebSocket(url)\r\n// // 监听socket连接\r\n// this.socket.onopen = this.open\r\n// // 监听socket错误信息\r\n// this.socket.onerror = this.error\r\n// // 监听socket消息\r\n// this.socket.onmessage = this.getMessage\r\n// }\r\n// },\r\n// open: function () {\r\n// console.log(\"socket连接成功\")\r\n// },\r\n// error: function () {\r\n// console.log(\"连接错误\")\r\n// },\r\n// getMessage: function (msg) {\r\n// console.log(typeof msg.data,'type')\r\n// if(msg.data =='连接成功') return\r\n// this.socketData = msg.data\r\n// console.log(JSON.parse(this.socketData),'------------------',)\r\n// if(typeof JSON.parse(this.socketData) == Array){\r\n// this.data = JSON.parse(this.socketData)\r\n// console.log(this.data)\r\n// }\r\n// // console.log(msg,'msg')\r\n// // console.log(this.data,'data-------')\r\n// },\r\n// send: function () {\r\n// this.socket.send(params)\r\n// },\r\n// close: function () {\r\n// console.log(\"socket已经关闭\")\r\n// }\r\n// },\r\n// destroyed () {\r\n// // 销毁监听\r\n// this.socket.onclose = this.close\r\n// }\r\n// }\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped lang=\"scss\">\r\n@keyframes warn {\r\n 0% {\r\n transform: scale(0.3);\r\n -webkit-transform: scale(0.3);\r\n opacity: 0;\r\n }\r\n\r\n 25% {\r\n transform: scale(0.3);\r\n -webkit-transform: scale(0.3);\r\n opacity: 0.1;\r\n }\r\n\r\n 50% {\r\n transform: scale(0.5);\r\n -webkit-transform: scale(0.5);\r\n opacity: 0.3;\r\n }\r\n\r\n 75% {\r\n transform: scale(0.8);\r\n -webkit-transform: scale(0.8);\r\n opacity: 0.6;\r\n }\r\n\r\n 100% {\r\n transform: scale(1);\r\n -webkit-transform: scale(1);\r\n opacity: 0;\r\n }\r\n}\r\n\r\n@keyframes warn1 {\r\n 0% {\r\n transform: scale(0.3);\r\n -webkit-transform: scale(0.3);\r\n opacity: 0;\r\n }\r\n\r\n 25% {\r\n transform: scale(0.3);\r\n -webkit-transform: scale(0.3);\r\n opacity: 0.1;\r\n }\r\n\r\n 50% {\r\n transform: scale(0.3);\r\n -webkit-transform: scale(0.3);\r\n opacity: 0.3;\r\n }\r\n\r\n 75% {\r\n transform: scale(0.5);\r\n -webkit-transform: scale(0.5);\r\n opacity: 0.6;\r\n }\r\n\r\n 100% {\r\n transform: scale(0.8);\r\n -webkit-transform: scale(0.8);\r\n opacity: 0;\r\n }\r\n}\r\n\r\n@keyframes circle {\r\n 0% {\r\n transform: rotate(0);\r\n -webkit-transform: rotate(0);\r\n }\r\n 100% {\r\n transform: rotate(360deg);\r\n -webkit-transform: rotate(360deg);\r\n }\r\n}\r\n@keyframes run {\r\n to {\r\n transform: translateX(calc((100vw - 180px) / 6 - 80px));\r\n }\r\n}\r\n.container {\r\n width: 100%;\r\n height: 100%;\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n background: url('../../../assets/loginPage/map-bg.jpg') no-repeat center;\r\n background-size: 100% 100%;\r\n .big-title {\r\n height: 40px;\r\n line-height: 40px;\r\n font-size: 28px;\r\n font-weight: bold;\r\n margin: 10px 0 20px;\r\n text-align: center;\r\n color: #fff;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n .btns {\r\n position: absolute;\r\n z-index: 99999;\r\n right: 60px;\r\n top: 40px;\r\n display: flex;\r\n align-items: center;\r\n .fullbtn {\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n margin-right: 20px;\r\n .toFull {\r\n font-weight: bolder;\r\n color: #00ffff;\r\n margin-right: 10px;\r\n }\r\n div {\r\n font-size: 16px;\r\n color: #00ffff;\r\n }\r\n }\r\n\r\n .backBtn {\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n img {\r\n width: 14px;\r\n height: 14px;\r\n margin-right: 10px;\r\n }\r\n div {\r\n font-size: 16px;\r\n color: #00ffff;\r\n }\r\n }\r\n }\r\n .blocks {\r\n width: 100%;\r\n height: calc(100% - 90px);\r\n padding: 10px 40px 35px;\r\n box-sizing: border-box;\r\n\r\n &>div{\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: flex-start;\r\n overflow: hidden;\r\n overflow-x: auto;\r\n overflow-y: auto;\r\n }\r\n\r\n .line-map {\r\n display: flex;\r\n justify-content: center;\r\n align-items: flex-start;\r\n\r\n .line-item {\r\n width: calc((100vw - 180px) / 6);\r\n padding-left: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n margin-right: 20px;\r\n flex-wrap: nowrap;\r\n\r\n .picbox {\r\n width: 100%;\r\n height: calc((100vh - 130px) / 5);\r\n padding: 10px;\r\n margin-bottom: 40px;\r\n box-sizing: border-box;\r\n\r\n img {\r\n display: block;\r\n width: 100%;\r\n height: 100px;\r\n margin-bottom: 10px;\r\n border-radius: 4px;\r\n }\r\n p {\r\n font-size: 14px;\r\n color: rgba(255, 255, 255, 0.8);\r\n margin-top: 10px;\r\n span {\r\n color: #fff;\r\n }\r\n }\r\n }\r\n .area-head {\r\n position: relative;\r\n width: 100%;\r\n height: 80px;\r\n padding-left: 38px;\r\n border-left: 1px solid #36fcfc;\r\n\r\n .indicator {\r\n width: 36px;\r\n height: 36px;\r\n border-radius: 50%;\r\n position: absolute;\r\n border: 1px solid #00ff66;\r\n top: -18px;\r\n left: -18px;\r\n\r\n .indi-dot {\r\n position: absolute;\r\n width: 20px;\r\n height: 20px;\r\n left: 7px;\r\n top: 7px;\r\n -webkit-border-radius: 50%;\r\n -moz-border-radius: 50%;\r\n border: 1px solid #00ff66;\r\n border-radius: 50%;\r\n background-color: #00ff66;\r\n z-index: 2;\r\n }\r\n .indi-pulse {\r\n position: absolute;\r\n width: 56px;\r\n height: 56px;\r\n left: -11px;\r\n top: -11px;\r\n border: 1px solid #00ff66;\r\n -webkit-border-radius: 50%;\r\n -moz-border-radius: 50%;\r\n border-radius: 50%;\r\n z-index: 1;\r\n opacity: 0;\r\n -webkit-animation: warn 2s ease-out;\r\n -moz-animation: warn 2s ease-out;\r\n animation: warn 2s ease-out;\r\n -webkit-animation-iteration-count: infinite;\r\n -moz-animation-iteration-count: infinite;\r\n animation-iteration-count: infinite;\r\n box-shadow: 1px 1px 30px #00ff66;\r\n }\r\n .indi-pulse1 {\r\n position: absolute;\r\n width: 56px;\r\n height: 56px;\r\n left: -11px;\r\n top: -11px;\r\n border: 1px solid #3399ff;\r\n -webkit-border-radius: 50%;\r\n -moz-border-radius: 50%;\r\n border-radius: 50%;\r\n z-index: 1;\r\n opacity: 0;\r\n -webkit-animation: warn1 2s ease-out;\r\n -moz-animation: warn1 2s ease-out;\r\n animation: warn1 2s ease-out;\r\n -webkit-animation-iteration-count: infinite;\r\n -moz-animation-iteration-count: infinite;\r\n animation-iteration-count: infinite;\r\n box-shadow: 1px 1px 30px #3399ff;\r\n }\r\n }\r\n .someUndone {\r\n width: 36px;\r\n height: 36px;\r\n border-radius: 50%;\r\n position: absolute;\r\n border: 1px solid #ccc;\r\n top: -18px;\r\n left: -18px;\r\n\r\n .indi-dot {\r\n position: absolute;\r\n width: 20px;\r\n height: 20px;\r\n left: 7px;\r\n top: 7px;\r\n -webkit-border-radius: 50%;\r\n -moz-border-radius: 50%;\r\n border: 1px solid #ccc;\r\n border-radius: 50%;\r\n background-color: #ccc;\r\n z-index: 2;\r\n }\r\n }\r\n .somewarning {\r\n width: 36px;\r\n height: 36px;\r\n border-radius: 50%;\r\n position: absolute;\r\n border: 1px solid #ff0000;\r\n top: -18px;\r\n left: -18px;\r\n\r\n .indi-dot {\r\n position: absolute;\r\n width: 20px;\r\n height: 20px;\r\n left: 7px;\r\n top: 7px;\r\n -webkit-border-radius: 50%;\r\n -moz-border-radius: 50%;\r\n border: 1px solid #ff0000;\r\n border-radius: 50%;\r\n background-color: #ff0000;\r\n z-index: 2;\r\n }\r\n }\r\n .arrow {\r\n position: absolute;\r\n width: 58px;\r\n height: 20px;\r\n left: 38px;\r\n top: -10px;\r\n background: url('../../../assets/loginPage/arrow-r.png') 0 / cover no-repeat;\r\n animation: run 2s steps(4) 0s infinite;\r\n }\r\n .top-line {\r\n width: 100%;\r\n border-top: 2px solid #36fcfc;\r\n }\r\n .fadeLine {\r\n width: 100%;\r\n border-top: 1px solid rgba(54,252,252,.6);\r\n }\r\n }\r\n .fadeBorder {\r\n border-left: 1px solid #ccc;\r\n }\r\n .more-info {\r\n width: 100%;\r\n\r\n .item {\r\n width: calc((100vw - 120px) / 6);\r\n height: calc((100vh - 130px) / 5);\r\n padding: 0 50px 20px;\r\n position: relative;\r\n box-sizing: border-box;\r\n border-left: 1px solid #36fcfc;\r\n\r\n &:last-of-type {\r\n border: none;\r\n }\r\n\r\n section {\r\n width: 24px;\r\n height: 24px;\r\n border-radius: 50%;\r\n position: absolute;\r\n border: 1px solid rgba(0, 225, 255, 0.6);\r\n top: -12px;\r\n left: 10px;\r\n\r\n .dot {\r\n position: absolute;\r\n width: 12px;\r\n height: 12px;\r\n left: 5px;\r\n top: 5px;\r\n -webkit-border-radius: 50%;\r\n -moz-border-radius: 50%;\r\n border: 1px solid #0072ff;\r\n border-radius: 50%;\r\n background-color: #00e1ff;\r\n z-index: 2;\r\n }\r\n .pulse {\r\n position: absolute;\r\n width: 48px;\r\n height: 48px;\r\n left: -13px;\r\n top: -13px;\r\n border: 1px solid #00e1ff;\r\n -webkit-border-radius: 50%;\r\n -moz-border-radius: 50%;\r\n border-radius: 50%;\r\n z-index: 1;\r\n opacity: 0;\r\n -webkit-animation: warn 2s ease-out;\r\n -moz-animation: warn 2s ease-out;\r\n animation: warn 2s ease-out;\r\n -webkit-animation-iteration-count: infinite;\r\n -moz-animation-iteration-count: infinite;\r\n animation-iteration-count: infinite;\r\n box-shadow: 1px 1px 30px #00e1ff;\r\n }\r\n .pulse1 {\r\n position: absolute;\r\n width: 48px;\r\n height: 48px;\r\n left: -13px;\r\n top: -13px;\r\n border: 1px solid #00e1ff;\r\n -webkit-border-radius: 50%;\r\n -moz-border-radius: 50%;\r\n border-radius: 50%;\r\n z-index: 1;\r\n opacity: 0;\r\n -webkit-animation: warn1 2s ease-out;\r\n -moz-animation: warn1 2s ease-out;\r\n animation: warn1 2s ease-out;\r\n -webkit-animation-iteration-count: infinite;\r\n -moz-animation-iteration-count: infinite;\r\n animation-iteration-count: infinite;\r\n box-shadow: 1px 1px 30px #00e1ff;\r\n }\r\n }\r\n & > div {\r\n padding: 10px 0;\r\n transform: translateY(-14px);\r\n border-radius: 8px;\r\n background-image: linear-gradient(to right, rgba(8, 109, 209, 0.4), rgba(11, 255, 255, 0.2));\r\n border: 1px solid rgba(54, 252, 252, 1);\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n\r\n div {\r\n margin-bottom: 5px;\r\n &:last-of-type {\r\n margin-bottom: none;\r\n }\r\n span {\r\n display: inline-block;\r\n width: 50%;\r\n font-size: 13px;\r\n color: #fff;\r\n text-align: left;\r\n\r\n &:first-of-type {\r\n text-align: right;\r\n color: rgba(255, 255, 255, 0.8);\r\n }\r\n }\r\n }\r\n }\r\n .noBorder{\r\n border: 1px solid rgba(54, 252, 252, 0.1);\r\n }\r\n .redBorder{\r\n border: 1px solid #ff0000;\r\n }\r\n p {\r\n width: 140px;\r\n height: 50px;\r\n font-size: 18px;\r\n line-height: 48px;\r\n text-align: center;\r\n color: #fff;\r\n border-radius: 8px;\r\n background-image: linear-gradient(to right, rgba(11, 255, 255, 0.2), rgba(8, 109, 209, 0.4));\r\n border: 1px solid rgba(54, 252, 252, 0.6);\r\n }\r\n }\r\n .warning {\r\n & > section {\r\n border: 1px solid #ff0000;\r\n\r\n .dot {\r\n border: 1px solid #ff0000;\r\n background: #ff0000;\r\n }\r\n .pulse {\r\n border: 1px solid #ff0000;\r\n box-shadow: 1px 1px 30px #ff0000;\r\n }\r\n .pulse1 {\r\n border: 1px solid #ff0000;\r\n box-shadow: 1px 1px 30px #ff0000;\r\n }\r\n }\r\n\r\n & > div {\r\n div {\r\n span.target {\r\n color: #ff2929;\r\n font-weight: bolder;\r\n }\r\n }\r\n }\r\n }\r\n .undone {\r\n & > section {\r\n border: 1px solid #ccc;\r\n\r\n .dot {\r\n border: 1px solid #ccc;\r\n background: #ccc;\r\n }\r\n .pulse {\r\n display: none;\r\n }\r\n .pulse1 {\r\n display: none;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n .finish {\r\n .area-head {\r\n position: relative;\r\n width: 100%;\r\n height: 80px;\r\n border-left: none;\r\n .finish-point {\r\n position: absolute;\r\n width: 90px;\r\n height: 90px;\r\n border: 2px solid #0072ff;\r\n left: -30px;\r\n top: -45px;\r\n border-radius: 50%;\r\n\r\n & > div {\r\n width: 80px;\r\n height: 80px;\r\n position: absolute;\r\n left: 3px;\r\n top: 3px;\r\n background: #0072ff;\r\n border-radius: 50%;\r\n color: #fff;\r\n font-size: 16px;\r\n line-height: 80px;\r\n text-align: center;\r\n font-weight: bolder;\r\n }\r\n }\r\n }\r\n }\r\n .pic-tit {\r\n display: flex;\r\n width: calc((100vw - 120px) / 7);\r\n height: 160px;\r\n padding: 20px;\r\n transform: translate(-20px, -40%);\r\n flex-direction: column;\r\n align-items: flex-start;\r\n\r\n img {\r\n width: calc((100vw - 120px) / 7 - 40px);\r\n height: 90px;\r\n margin-bottom: 10px;\r\n border-radius: 4px;\r\n }\r\n p {\r\n font-size: 16px;\r\n color: #00ffff;\r\n font-weight: bold;\r\n }\r\n }\r\n\r\n .water {\r\n transform: none;\r\n }\r\n .start {\r\n padding: 40px 0;\r\n p {\r\n margin-top: -21px;\r\n margin-left: 20px;\r\n }\r\n span {\r\n width: 1px;\r\n height: 50px;\r\n background: #36fcfc;\r\n position: absolute;\r\n top: -10px;\r\n left: 0;\r\n }\r\n section {\r\n position: absolute;\r\n top: 30px;\r\n left: -14px;\r\n }\r\n }\r\n }\r\n .tip {\r\n width: 100%;\r\n font-size: 30px;\r\n text-align: center;\r\n margin-top: 100px;\r\n color: #fff;\r\n font-weight: bolder;\r\n }\r\n .current-task {\r\n position: absolute;\r\n width: calc((500vw - 600px) / 7);\r\n z-index: 999999;\r\n top: 0;\r\n right: 0;\r\n padding: 0 60px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n\r\n .task-des {\r\n padding: 10px 20px;\r\n display: flex;\r\n align-items: center;\r\n border: 1px solid #36fcfc;\r\n\r\n .task-des-l {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n font-size: 20px;\r\n color: #36fcfc;\r\n border-right: 1px solid #36fcfc;\r\n padding-right: 20px;\r\n img {\r\n margin-bottom: 10px;\r\n }\r\n }\r\n .task-des-r {\r\n width: calc((200vw - 240px) / 7);\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n font-size: 20px;\r\n line-height: 28px;\r\n color: #fcfc36;\r\n padding-left: 20px;\r\n }\r\n }\r\n .current-data {\r\n width: 267px;\r\n height: 138px;\r\n padding: 20px 30px;\r\n box-sizing: border-box;\r\n background: url('../../../assets/loginPage/xj-bg.png') no-repeat center;\r\n background-size: 100% 100%;\r\n\r\n .data-area {\r\n display: flex;\r\n align-items: center;\r\n border-bottom: 1px solid #040c3b;\r\n font-weight: bold;\r\n padding-bottom: 10px;\r\n box-sizing: border-box;\r\n\r\n img {\r\n width: 30px;\r\n height: 30px;\r\n margin-right: 10px;\r\n animation: circle 1s ease-in-out infinite;\r\n }\r\n\r\n div {\r\n font-size: 15px;\r\n color: rgba(4, 12, 59, 0.8);\r\n\r\n span {\r\n color: #040c3b;\r\n }\r\n }\r\n }\r\n\r\n .data-spot {\r\n display: flex;\r\n align-items: flex-start;\r\n margin-top: 10px;\r\n\r\n & > div {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n width: 50%;\r\n font-size: 14px;\r\n color: rgba(4, 12, 59, 0.8);\r\n\r\n p {\r\n margin-top: 6px;\r\n color: #040c3b;\r\n }\r\n\r\n &:first-of-type {\r\n border-right: 1px solid #040c3b;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n .star-pic {\r\n position: absolute;\r\n width: calc((100vw - 120px) / 7);\r\n height: calc((100vw - 120px) / 7);\r\n z-index: 999999999;\r\n bottom: 40px;\r\n right: 40px;\r\n padding: 20px;\r\n\r\n .star-bg {\r\n position: inherit;\r\n width: 100%;\r\n height: 100%;\r\n left: 0;\r\n top: 0;\r\n img {\r\n width: 100%;\r\n height: auto;\r\n animation: circle 30s linear infinite;\r\n }\r\n }\r\n\r\n .star {\r\n position: inherit;\r\n width: 100%;\r\n height: 100%;\r\n left: 0;\r\n top: 0;\r\n img {\r\n width: 100%;\r\n height: auto;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/intellectInspect/intelligentLine/index.vue b/src/views/intellectInspect/intelligentLine/index.vue +--- a/src/views/intellectInspect/intelligentLine/index.vue (revision a1d03a0e810219f8353748f6e55699bf2e1a77a6) ++++ b/src/views/intellectInspect/intelligentLine/index.vue (date 1660566611603) +@@ -85,7 +85,7 @@ + <script lang="ts"> + import screenfull from 'screenfull'; + import { lineApi } from '/@/api/intelligentLine'; +-import { toRefs, reactive, ref, onMounted, onUnmounted, computed } from 'vue'; ++import {toRefs, reactive, ref, onMounted, onUnmounted, computed, nextTick} from 'vue'; + import {useRoute} from 'vue-router'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; +@@ -218,9 +218,11 @@ + // 页面关闭处理 + onUnmounted(() => { + // 销毁监听 +- state.socket.onclose = () => { +- console.log('socket已经关闭'); +- }; ++ nextTick(()=>{ ++ state.socket.onclose = () => { ++ console.log('socket已经关闭'); ++ }; ++ }) + }); + return { + dataList, +Index: src/views/specialWorkSystem/foundationSet/safetyAction/index.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/specialWorkSystem/foundationSet/safetyAction/index.vue b/src/views/specialWorkSystem/foundationSet/safetyAction/index.vue +new file mode 100644 +--- /dev/null (date 1660632779996) ++++ b/src/views/specialWorkSystem/foundationSet/safetyAction/index.vue (date 1660632779996) +@@ -0,0 +1,436 @@ ++<template> ++ <div class="home-container"> ++ <div style="height: 100%"> ++ <el-row class="homeCard"> ++ <div class="basic-line"> ++ <span>任务类型:</span> ++ <el-select v-model="tableData.params.workType" clearable filterable class="input-box" placeholder="任务类型"> ++ <!-- <el-option v-for="item in workTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>--> ++ </el-select> ++ </div> ++ <div class="basic-line"> ++ <span>执行班组:</span> ++ <el-select v-model="tableData.params.execClassgroupId" clearable filterable class="input-box" placeholder="执行班组"> </el-select> ++ </div> ++ <div style="padding-bottom: 10px"> ++ <el-button type="primary" @click="initSafetyAction">查询</el-button> ++ <el-button plain @click="reset">重置</el-button> ++ </div> ++ </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="openSafetyActionDialog('新增', {})">新建</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.safetyActionData" 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="title" label="标题" /> ++ <el-table-column property="ruleStandType" label="标准类型"> ++ <template #default="scope"> ++ <span> ++ {{ parseNumber(scope.row.ruleStandType, '标准类型') }} ++ </span> ++ </template> ++ </el-table-column> ++ <el-table-column property="minVal" label="最低值"> ++ <template #default="scope"> ++ <span> ++ {{ parseNumber(scope.row.minValMatchPattern, '最低值') }} ++ </span> ++ <span> ++ {{ scope.row.minVal }} ++ </span> ++ </template> ++ </el-table-column> ++ <el-table-column property="maxVal" label="最高值"> ++ <template #default="scope"> ++ <span> ++ {{ parseNumber(scope.row.maxValMatchPattern, '最高值') }} ++ </span> ++ <span> ++ {{ scope.row.maxVal }} ++ </span> ++ </template> ++ </el-table-column> ++ <el-table-column property="info" label="描述" /> ++ <el-table-column prop="createUserName" label="创建人" show-overflow-tooltip></el-table-column> ++ <el-table-column prop="gmtCreate" label="创建时间" show-overflow-tooltip></el-table-column> ++ <el-table-column prop="lastEditUserName" label="最后修改人" show-overflow-tooltip></el-table-column> ++ <el-table-column prop="gmtModitify" label="最后修改时间" show-overflow-tooltip></el-table-column> ++ <el-table-column property="status" label="状态" width="60" /> ++ <el-table-column fixed="right" label="操作" align="center" width="300"> ++ <template #default="scope"> ++ <el-button link type="primary" size="small" :icon="View" @click="openSafetyActionDialog('查看', scope.row)">查看</el-button> ++ <el-button link type="primary" size="small" :icon="Edit" @click="openSafetyActionDialog('修改', scope.row)">修改</el-button> ++ <el-button link type="danger" size="small" :icon="Delete" @click="deleteSafetyAction(scope.row)">删除</el-button> ++ </template> ++ </el-table-column> ++ </el-table> ++ <br /> ++ <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="tableData.params.pageIndex" background v-model:page-size="tableData.params.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="tableData.total" class="page-position"> </el-pagination> ++ </div> ++ </div> ++ </div> ++ <safety-action-dialog ref="safetyActionDialogRef" @refreshSafetyAction="initSafetyAction"></safety-action-dialog> ++ </div> ++</template> ++ ++<script lang="ts"> ++import { toRefs, reactive, ref, onMounted } from 'vue'; ++import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; ++import { ElTable, ElMessage, ElMessageBox } from 'element-plus'; ++import { safetyActionApi } from '/@/api/specialWorkSystem/safetyAction/index.ts'; ++import { departmentApi } from '/@/api/systemManage/department'; ++import safetyActionDialog from '/@/views/specialWorkSystem/foundationSet/safetyAction/components/safetyActionDialog.vue'; ++let global: any = { ++ homeChartOne: null, ++ homeChartTwo: null, ++ homeCharThree: null, ++ dispose: [null, '', undefined] ++}; ++ ++interface stateType { ++ tableData: { ++ safetyActionData: []; ++ total: number; ++ loading: boolean; ++ params: { ++ pageIndex: number | null; ++ pageSize: number | null; ++ searchParams: { ++ workType: number | null; ++ type: number | null; ++ context: string | null; ++ }; ++ }; ++ }; ++ ruleStandTypeList: Array<type>; ++ typeList: Array<type>; ++ typeTwoList: Array<type>; ++ deleteList: { ++ ids: Array<number>; ++ }; ++} ++interface type { ++ id: number; ++ name: string; ++} ++interface ruleType { ++ ruleStandId: number; ++} ++export default { ++ name: 'index', ++ components: { safetyActionDialog }, ++ setup() { ++ const safetyActionDialogRef = ref(); ++ const state = reactive<stateType>({ ++ tableData: { ++ safetyActionData: [], ++ total: 0, ++ loading: false, ++ params: { ++ pageIndex: 1, ++ pageSize: 10, ++ searchParams: { ++ workType: null, ++ type: null, ++ context: null ++ } ++ } ++ }, ++ ruleStandTypeList: [ ++ { id: 1, name: '可燃气浓度' }, ++ { id: 2, name: '氧气浓度' }, ++ { id: 3, name: '一氧化碳浓度' }, ++ { id: 4, name: '硫化氢浓度' }, ++ { id: 5, name: '温度' }, ++ { id: 6, name: '压力' }, ++ { id: 7, name: '震动' } ++ ], ++ typeList: [ ++ { id: 1, name: '大于' }, ++ { id: 2, name: '等于' }, ++ { id: 4, name: '大于等于' } ++ ], ++ typeTwoList: [ ++ { id: 3, name: '小于' }, ++ { id: 2, name: '等于' }, ++ { id: 5, name: '小于等于' } ++ ], ++ deleteList: { ++ ids: [] ++ } ++ }); ++ ++ //获取巡检任务数据 ++ const initSafetyAction = async () => { ++ let res = await safetyActionApi().getSafetyActionList(state.tableData.params); ++ if (res.data.code === '200') { ++ state.tableData.safetyActionData = res.data.data; ++ state.tableData.total = res.data.total; ++ } else { ++ ElMessage({ ++ type: 'warning', ++ message: res.data.msg ++ }); ++ } ++ }; ++ ++ // //获取部门 ++ // const getDepartmentData = async () => { ++ // let res = await departmentApi().getDepartmentList(); ++ // if (res.data.code === '200') { ++ // state.departmentList = res.data.data; ++ // } else { ++ // ElMessage({ ++ // type: 'warning', ++ // message: res.data.msg ++ // }); ++ // } ++ // }; ++ ++ // 删除 ++ const deleteSafetyAction = (row: any) => { ++ ElMessageBox.confirm(`此操作将永久删除该任务:“${row.title}”,是否继续?`, '提示', { ++ confirmButtonText: '确认', ++ cancelButtonText: '取消', ++ type: 'warning' ++ }) ++ .then(async () => { ++ let res = await safetyActionApi().deleteSafetyAction(state.deleteList); ++ if (res.data.code === '200') { ++ ElMessage({ ++ type: 'success', ++ duration: 2000, ++ message: '删除成功' ++ }); ++ await initSafetyAction(); ++ } else { ++ ElMessage({ ++ type: 'warning', ++ message: res.data.msg ++ }); ++ } ++ }) ++ .catch(() => {}); ++ }; ++ ++ const handleSelectionChange = (val: Array<ruleType>) => { ++ state.deleteList.ids = val.map((item) => { ++ return item.ruleStandId; ++ }); ++ }; ++ ++ const openSafetyActionDialog = (type: string, value: {}) => { ++ safetyActionDialogRef.value.showSafetyActionDialog(type, value); ++ }; ++ ++ const parseNumber = (value: number, type: string) => { ++ if (type === '标准类型') { ++ return state.ruleStandTypeList.find((item) => item.id === value)?.name; ++ } else if (type === '最高值') { ++ return state.typeTwoList.find((item) => item.id == value)?.name; ++ } else { ++ return state.typeList.find((item) => item.id == value)?.name; ++ } ++ }; ++ ++ // 分页改变 ++ const onHandleSizeChange = (val: number) => { ++ state.tableData.params.pageSize = val; ++ initSafetyAction(); ++ }; ++ // 分页改变 ++ const onHandleCurrentChange = (val: number) => { ++ state.tableData.params.pageIndex = val; ++ initSafetyAction(); ++ }; ++ ++ const reset = () => { ++ state.tableData.params = { ++ pageIndex: 1, ++ pageSize: 10, ++ searchParams: { ++ workType: null, ++ type: null, ++ context: null ++ } ++ }; ++ }; ++ ++ // 页面加载时 ++ onMounted(() => { ++ initSafetyAction(); ++ }); ++ ++ return { ++ View, ++ Edit, ++ Delete, ++ Refresh, ++ Plus, ++ reset, ++ parseNumber, ++ handleSelectionChange, ++ deleteSafetyAction, ++ initSafetyAction, ++ onHandleSizeChange, ++ onHandleCurrentChange, ++ safetyActionDialogRef, ++ openSafetyActionDialog, ++ ...toRefs(state) ++ }; ++ } ++}; ++</script> ++ ++<style scoped lang="scss"> ++$homeNavLengh: 8; ++.home-container { ++ height: calc(100vh - 114px); ++ box-sizing: border-box; ++ overflow: hidden; ++ .homeCard { ++ width: 100%; ++ padding: 20px; ++ box-sizing: border-box; ++ background: #fff; ++ border-radius: 4px; ++ ++ .main-card { ++ width: 100%; ++ height: 100%; ++ .cardTop { ++ display: flex; ++ align-items: center; ++ justify-content: space-between; ++ margin-bottom: 20px; ++ .mainCardBtn { ++ margin: 0; ++ } ++ } ++ .pageBtn { ++ height: 60px; ++ display: flex; ++ align-items: center; ++ justify-content: right; ++ ++ .demo-pagination-block + .demo-pagination-block { ++ margin-top: 10px; ++ } ++ .demo-pagination-block .demonstration { ++ margin-bottom: 16px; ++ } ++ } ++ } ++ &:last-of-type { ++ height: calc(100% - 100px); ++ } ++ } ++ .el-row { ++ display: flex; ++ align-items: center; ++ margin-bottom: 20px; ++ &:last-child { ++ margin-bottom: 0; ++ } ++ .grid-content { ++ align-items: center; ++ min-height: 36px; ++ } ++ ++ .topInfo { ++ display: flex; ++ align-items: center; ++ font-size: 16px; ++ font-weight: bold; ++ ++ & > div { ++ white-space: nowrap; ++ margin-right: 20px; ++ } ++ } ++ } ++} ++.stepItem { ++ width: 100%; ++ display: flex; ++ align-items: flex-start; ++ margin-bottom: 30px; ++ margin-left: 30px; ++ padding-bottom: 30px; ++ border-left: 2px solid #ccc; ++ &:first-of-type { ++ margin-top: 30px; ++ } ++ &:last-of-type { ++ margin-bottom: 0; ++ border-left: none; ++ } ++ .stepNum { ++ width: 30px; ++ height: 30px; ++ border-radius: 15px; ++ box-sizing: border-box; ++ color: #333; ++ border: 1px solid #999; ++ line-height: 28px; ++ text-align: center; ++ margin-right: 10px; ++ margin-left: -16px; ++ margin-top: -30px; ++ } ++ .stepCard { ++ width: 100%; ++ margin-top: -30px; ++ ++ .box-card { ++ width: 100%; ++ &:deep(.el-card__header) { ++ padding: 10px 15px; ++ } ++ .card-header { ++ width: 100%; ++ display: flex; ++ justify-content: space-between; ++ align-items: center; ++ & > div:first-of-type { ++ margin-right: 80px; ++ font-size: 18px; ++ font-weight: bold; ++ } ++ } ++ } ++ } ++ &:hover .card-header { ++ color: #0098f5; ++ } ++ &:hover .stepNum { ++ border: 2px solid #0098f5; ++ color: #0098f5; ++ } ++} ++.el-input { ++ width: 100% !important; ++} ++:deep(.el-date-editor) { ++ width: 100%; ++} ++.el-select { ++ width: 100%; ++} ++:deep(.el-textarea.is-disabled .el-textarea__inner) { ++ background-color: var(--el-card-bg-color); ++ color: var(--el-input-text-color, var(--el-text-color-regular)); ++} ++:deep(.el-input.is-disabled .el-input__inner) { ++ color: var(--el-input-text-color, var(--el-text-color-regular)); ++} ++:deep(.el-input.is-disabled .el-input__wrapper) { ++ background-color: var(--el-card-bg-color); ++} ++</style> diff --git a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_16_15_03__Default_Changelist_.xml b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_16_15_03__Default_Changelist_.xml new file mode 100644 index 0000000..5b3136c --- /dev/null +++ b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_16_15_03__Default_Changelist_.xml @@ -0,0 +1,4 @@ +<changelist name="Uncommitted_changes_before_Update_at_2022_8_16_15_03_[Default_Changelist]" date="1660633492977" recycled="true" deleted="true"> + <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_16_15_03_[Default_Changelist]/shelved.patch" /> + <option name="DESCRIPTION" value="Uncommitted changes before Update at 2022/8/16 15:03 [Default Changelist]" /> +</changelist> \ No newline at end of file diff --git a/dist.zip b/dist.zip new file mode 100644 index 0000000..42e4afc --- /dev/null +++ b/dist.zip Binary files differ diff --git a/src/api/intellectInspectSystem/RFID/index.ts b/src/api/intellectInspectSystem/RFID/index.ts index b57e67e..534ffda 100644 --- a/src/api/intellectInspectSystem/RFID/index.ts +++ b/src/api/intellectInspectSystem/RFID/index.ts @@ -43,10 +43,21 @@ }, // 获取图片上传地址 - getUploadUrl: () =>{ + getUploadUrl: (name: string) => { return request({ url: import.meta.env.VITE_API_URL + `/SafeCheck/minio/file/presign`, - method: 'get' + method: 'post', + data: { prefixName: name.split('.')[0], suffixName: name.split('.')[1] } + }); + }, + uploadFile: (path: string, file: any) => { + return request({ + headers: { + contentType: 'application/json;charset=UTF-8' + }, + url: path, + method: 'put', + data: file }); } }; diff --git a/src/api/specialWorkSystem/safetyAction/index.ts b/src/api/specialWorkSystem/safetyAction/index.ts new file mode 100644 index 0000000..5002091 --- /dev/null +++ b/src/api/specialWorkSystem/safetyAction/index.ts @@ -0,0 +1,45 @@ +import request from '/@/utils/request'; + +export function safetyActionApi() { + return { + // v1 + getSafetyActionList: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/rule/measure/page/list`, + method: 'post', + data: data + }); + }, + // v1 + addSafetyAction: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/rule/measure/save`, + method: 'post', + data: data + }); + }, + // v1 + modSafetyAction: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/rule/measure/mod`, + method: 'post', + data: data + }); + }, + // v1 + deleteSafetyAction: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/rule/measure/delete`, + method: 'post', + data: data + }); + }, + // v1 + getAllSafetyActionList: () => { + return request({ + url: import.meta.env.VITE_API_URL + `/rule/measure/list`, + method: 'post' + }); + } + }; +} diff --git a/src/utils/request.ts b/src/utils/request.ts index ef709ab..72c5505 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -52,18 +52,14 @@ // 对响应数据做点什么 if (response.data.code && response.data.code === 'A0213') { ElMessage.error('用户uid不存在'); - setTimeout(() => { Session.clear(); window.location.href = '/'; - }, 1000); } else if (response.data.code && response.data.code === 'A0215') { ElMessage.error('token失效'); // logOut; useLoginApi().signOut().then(()=>{ - setTimeout(() => { - Session.clear(); - window.location.href = '/'; - }, 1000); + Session.clear(); + window.location.href = '/'; }) } // if(response.data.code && response.data.code !== '200'){ diff --git a/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue b/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue index e6a4162..c529e8a 100644 --- a/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue +++ b/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue @@ -15,23 +15,10 @@ </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="上传图片" prop="rfidImage"> - <el-upload - v-model:file-list="fileList" - class="upload-demo" - accept="image/*" - :action="uploadUrl" - :on-preview="handlePreview" - :on-remove="handleRemove" - :before-upload ="getUploadUrl" - :before-remove="beforeRemove" - :limit="1" - :on-exceed="handleExceed" - > - <el-button type="primary">点击上传</el-button> + <el-upload accept="image/*" v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl"> + <el-icon><Plus /></el-icon> <template #tip> - <div class="el-upload__tip"> - 上传 jpg/png 图片尺寸小于500KB - </div> + <div class="el-upload__tip">上传 jpg/png 图片尺寸小于500KB</div> </template> </el-upload> </el-form-item> @@ -54,18 +41,19 @@ RFIDForm: { rfid: string; rfidName: string; - rfidImage: string - + rfidImage: string; }; title: string; RFIDFormRules: {}; - uploadUrl: string + uploadUrl: string; + fileList: []; } interface levelListState {} import { reactive, toRefs, ref } from 'vue'; import { RFIDApi } from '/@/api/intellectInspectSystem/RFID'; import { ElMessage, ElMessageBox } from 'element-plus'; -import type { UploadProps, UploadUserFile } from 'element-plus' +import type { UploadProps, UploadUserFile } from 'element-plus'; +import axios from 'axios'; export default { name: 'RFIDDialog', setup(props: any, context: any) { @@ -79,12 +67,15 @@ rfidImage: '' }, uploadUrl: '', + RFIDFormRules: { rfid: [{ required: true, message: '请填写RFID编码', trigger: 'blur' }], rfidName: [{ required: true, message: '请填写RFID名称', trigger: 'change' }], riskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }], location: [{ required: true, message: '请填写区域位置', trigger: 'blur' }] - } + }, + + fileList: [] }); //打开模态框 const openRFIDDialog = (type: string, value: object) => { @@ -105,45 +96,55 @@ } }; - // 图片上传 - const fileList = ref<UploadUserFile[]>([]) + // // 图片上传 + // const fileList = ref<UploadUserFile[]>([]); const handleRemove: UploadProps['onRemove'] = (file, uploadFiles) => { - console.log(file, uploadFiles) - } + console.log(file, uploadFiles); + }; const handlePreview: UploadProps['onPreview'] = (uploadFile) => { - console.log(uploadFile) - } + console.log(uploadFile); + }; const handleExceed: UploadProps['onExceed'] = (files, uploadFiles) => { - ElMessage.warning( - `您选择的图片数量超出要求` - ) - } - const getUploadUrl = async (rawFile: UploadRawFile)=>{ - const res = await RFIDApi().getUploadUrl() - if(res.data.code === '200') { - console.log(res.data, '1111111111') - state.RFIDForm.rfidImage = res.data.fileName - console.log(res.data.uploadUrl,'33') - // state.uploadUrl = res.data.uploadUrl - console.log(state.uploadUrl,'222222222222') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } + ElMessage.warning(`您选择的图片数量超出要求`); + }; + const getUploadUrl = async (rawFile: any) => { + const res = await RFIDApi().getUploadUrl(rawFile.name); + state.RFIDForm.rfidImage = res.data.rfidImage; + state.uploadUrl = res.data.uploadUrl; + }; + + const upload = async (params: any) => { + debugger; + // const formData = new FormData(); + // formData.append('file', state.fileList[0].raw); + let reader = new FileReader(); + reader.readAsArrayBuffer(params.file); + reader.onload = async () => { + axios + .put(state.uploadUrl, reader.result, { + header: { 'Content-Type': 'multipart/form-data' } + }) + .then(() => {}); + // let res = await RFIDApi().uploadFile(state.uploadUrl, reader.result); + // if (res.data.code === '200') { + // } else { + // ElMessage({ + // type: 'warning', + // message: res.data.msg + // }); + // } + }; + }; + const beforeRemove: UploadProps['beforeRemove'] = (uploadFile, uploadFiles) => { - return ElMessageBox.confirm( - `Cancel the transfert of ${uploadFile.name} ?` - ).then( + return ElMessageBox.confirm(`Cancel the transfert of ${uploadFile.name} ?`).then( () => true, () => false - ) - } + ); + }; //新增修改提交 const submitRFID = async () => { @@ -194,7 +195,8 @@ return { ...toRefs(state), RFIDFormRef, - fileList, + // fileList, + upload, getUploadUrl, handleRemove, handlePreview, diff --git a/src/views/intellectInspect/intelligentLine/index.vue b/src/views/intellectInspect/intelligentLine/index.vue index 15d473e..50d8ed4 100644 --- a/src/views/intellectInspect/intelligentLine/index.vue +++ b/src/views/intellectInspect/intelligentLine/index.vue @@ -85,7 +85,7 @@ <script lang="ts"> import screenfull from 'screenfull'; import { lineApi } from '/@/api/intelligentLine'; -import { toRefs, reactive, ref, onMounted, onUnmounted, computed } from 'vue'; +import {toRefs, reactive, ref, onMounted, onUnmounted, computed, nextTick} from 'vue'; import {useRoute} from 'vue-router'; import { storeToRefs } from 'pinia'; import { initBackEndControlRoutes } from '/@/router/backEnd'; @@ -217,9 +217,11 @@ // 页面关闭处理 onUnmounted(() => { // 销毁监听 - state.socket.onclose = () => { - console.log('socket已经关闭'); - }; + nextTick(()=>{ + state.socket.onclose = () => { + console.log('socket已经关闭'); + }; + }) }); return { dataList, diff --git a/src/views/specialWorkSystem/foundationSet/safetyAction/components/safetyActionDialog.vue b/src/views/specialWorkSystem/foundationSet/safetyAction/components/safetyActionDialog.vue new file mode 100644 index 0000000..a2c5c74 --- /dev/null +++ b/src/views/specialWorkSystem/foundationSet/safetyAction/components/safetyActionDialog.vue @@ -0,0 +1,221 @@ +<template> + <div class="system-add-menu-container"> + <el-dialog :title="title" v-model="isShowSafetyActionDialog" width="600px" :close-on-click-modal="false"> + <el-form :model="safetyActionForm" :rules="safetyActionFormRules" ref="safetyActionFormRef" size="default" label-width="120px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="作业类型" prop="workType"> + <el-select class="input-add" :disabled="!disabled" v-model="safetyActionForm.workType" placeholder="请选择作业类型" filterable clearable> + <el-option v-for="item in workTypeList" :key="item.id" :label="item.name" :value="item.id"></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="type"> + <el-select class="input-add" :disabled="!disabled" v-model="safetyActionForm.type" placeholder="请选择措施类型" clearable filterable> + <el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col v-if="safetyActionForm.type === 1" :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="正确值" prop="correctVal"> + <el-select class="input-add" :disabled="!disabled" v-model="safetyActionForm.correctVal" placeholder="请选择正确值" clearable filterable> + <el-option v-for="item in typeTwoList" :key="item.id" :label="item.name" :value="item.id"></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="context"> + <el-input class="input-add" :rows="3" v-model.trim="safetyActionForm.context" type="textarea" placeholder="请输入描述"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> + <el-form-item label="创建人" prop="location"> + <el-input class="input-add" :disabled="!disabled" v-model.trim="safetyActionForm.createUname"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> + <el-form-item label="创建时间" prop="location"> + <el-input class="input-add" :disabled="!disabled" v-model.trim="safetyActionForm.gmtCreate"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> + <el-form-item label="最后修改人" prop="location"> + <el-input class="input-add" :disabled="!disabled" v-model.trim="safetyActionForm.modifiedUname"></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> + <el-form-item label="最后修改时间" prop="location"> + <el-input class="input-add" :disabled="!disabled" v-model.trim="safetyActionForm.gmtModified"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer" v-show="disabled"> + <el-button @click="isShowSafetyActionDialog = !isShowSafetyActionDialog" size="default">取 消</el-button> + <el-button type="primary" @click="submitSafetyAction" v-throttle size="default">确 定</el-button> + </span> + </template> + </el-dialog> + </div> +</template> + +<script lang="ts"> +interface stateType { + isShowSafetyActionDialog: Boolean; + disabled: Boolean; + personTime: Boolean; + safetyActionForm: { + workType: number | null; + type: number | null; + correctVal: number | null; + context: string | null; + }; + title: string; + departmentList: []; + workTypeList: Array<levelListState>; + typeList: Array<levelListState>; + typeTwoList: Array<levelListState>; + safetyActionFormRules: {}; +} +interface levelListState { + id: number; + name: string; +} + +import { reactive, toRefs, ref } from 'vue'; +import { safetyActionApi } from '/@/api/specialWorkSystem/safetyAction'; +import { ElMessage } from 'element-plus'; +export default { + name: 'SafetyActionDialog', + setup(props: any, context: any) { + const safetyActionFormRef = ref(); + const state = reactive<stateType>({ + title: '', + disabled: false, + personTime: false, + departmentList: [], + isShowSafetyActionDialog: false, + workTypeList: [ + { id: 1, name: '动火作业' }, + { id: 2, name: '受限空间作业' }, + { id: 3, name: '吊装作业' }, + { id: 4, name: '动土作业' }, + { id: 5, name: '断路作业' }, + { id: 6, name: '高处作业' }, + { id: 7, name: '临时用电作业' }, + { id: 8, name: '盲板抽堵作业' } + ], + typeList: [ + { id: 1, name: '选择' }, + { id: 2, name: '填空' } + ], + typeTwoList: [ + { id: 1, name: '是' }, + { id: 2, name: '否' } + ], + safetyActionForm: { + workType: null, + type: null, + correctVal: null, + context: null + }, + safetyActionFormRules: { + workType: [{ required: true, message: '请选择作业类型', trigger: 'change' }], + type: [{ required: true, message: '请选择措施类型', trigger: 'change' }], + correctVal: [{ required: true, message: '请选择正确值', trigger: 'change' }], + context: [{ required: true, message: '请填写措施内容', trigger: 'blur' }] + } + }); + + //打开模态框 + const showSafetyActionDialog = (type: string, value: object, department: []) => { + state.isShowSafetyActionDialog = true; + state.departmentList = department; + setTimeout(() => { + safetyActionFormRef.value.clearValidate(); + }); + if (type === '新增') { + state.disabled = true; + state.personTime = false; + state.title = '新增安全措施'; + state.safetyActionForm = { + workType: null, + type: null, + correctVal: null, + context: null + }; + } else if (type === '查看') { + state.disabled = false; + state.personTime = true; + state.title = '查看安全措施'; + state.safetyActionForm = JSON.parse(JSON.stringify(value)); + } else { + state.disabled = true; + state.personTime = false; + state.title = '修改安全措施'; + state.safetyActionForm = JSON.parse(JSON.stringify(value)); + // for (let i in state.SafetyActionForm) { + // state.SafetyActionForm[i] = SafetyActionForm[i]; + // } + } + }; + + //新增修改提交 + const submitSafetyAction = async () => { + safetyActionFormRef.value.validate(async (valid: Boolean) => { + if (valid) { + if (state.title === '新增安全措施') { + let res = await safetyActionApi().addSafetyAction(state.safetyActionForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '安全措施新增成功', + duration: 2000 + }); + state.isShowSafetyActionDialog = false; + context.emit('refreshSafetyAction'); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } else { + let res = await safetyActionApi().modSafetyAction(state.safetyActionForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '安全措施改成功', + duration: 2000 + }); + state.isShowSafetyActionDialog = false; + context.emit('refreshSafetyAction'); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + } else { + ElMessage({ + type: 'warning', + message: '请完善基本信息' + }); + } + }); + }; + + return { + ...toRefs(state), + safetyActionFormRef, + submitSafetyAction, + showSafetyActionDialog + }; + } +}; +</script> + +<style scoped></style> diff --git a/src/views/specialWorkSystem/foundationSet/safetyAction/index.vue b/src/views/specialWorkSystem/foundationSet/safetyAction/index.vue new file mode 100644 index 0000000..65c1651 --- /dev/null +++ b/src/views/specialWorkSystem/foundationSet/safetyAction/index.vue @@ -0,0 +1,428 @@ +<template> + <div class="home-container"> + <div style="height: 100%"> + <el-row class="homeCard"> + <div class="basic-line"> + <span>作业类型:</span> + <el-select v-model="tableData.params.searchParams.workType" clearable filterable class="input-box" placeholder="作业类型"> + <el-option v-for="item in workTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> + </div> + <div class="basic-line"> + <span>措施类型:</span> + <el-select v-model="tableData.params.searchParams.type" clearable filterable class="input-box" placeholder="措施类型"> + <el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> + </div> + <div class="basic-line"> + <span>措施内容:</span> + <el-input v-model.trim="tableData.params.searchParams.context" class="input-box" placeholder="措施内容"> </el-input> + </div> + <div style="padding-bottom: 10px"> + <el-button type="primary" @click="initSafetyAction">查询</el-button> + <el-button plain @click="reset">重置</el-button> + </div> + </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="openSafetyActionDialog('新增', {})">新建</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.safetyActionData" 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="workType" label="作业类型"> + <template #default="scope"> + <span> + {{ parseNumber(scope.row.workType, '作业类型') }} + </span> + </template> + </el-table-column> + <el-table-column property="type" label="措施类型"> + <template #default="scope"> + <span> + {{ parseNumber(scope.row.type, '措施类型') }} + </span> + </template> + </el-table-column> + <el-table-column property="context" label="措施内容"></el-table-column> + <el-table-column prop="correctVal" label="正确值" show-overflow-tooltip> + <template #default="scope"> + <span> + {{ parseNumber(scope.row.correctVal, '正确值') }} + </span> + </template> + </el-table-column> + <el-table-column prop="createUname" label="创建人" show-overflow-tooltip></el-table-column> + <el-table-column prop="gmtCreate" label="创建时间" show-overflow-tooltip></el-table-column> + <el-table-column prop="modifiedUname" label="最后修改人" show-overflow-tooltip></el-table-column> + <el-table-column prop="gmtModified" label="最后修改时间" show-overflow-tooltip></el-table-column> + <el-table-column property="status" label="状态" width="60" /> + <el-table-column fixed="right" label="操作" align="center" width="300"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="openSafetyActionDialog('查看', scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="openSafetyActionDialog('修改', scope.row)">修改</el-button> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteSafetyAction(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <br /> + <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="tableData.params.pageIndex" background v-model:page-size="tableData.params.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="tableData.total" class="page-position"> </el-pagination> + </div> + </div> + </div> + <safety-action-dialog ref="safetyActionDialogRef" @refreshSafetyAction="initSafetyAction"></safety-action-dialog> + </div> +</template> + +<script lang="ts"> +import { toRefs, reactive, ref, onMounted } from 'vue'; +import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; +import { ElTable, ElMessage, ElMessageBox } from 'element-plus'; +import { safetyActionApi } from '/@/api/specialWorkSystem/safetyAction/index.ts'; +import { departmentApi } from '/@/api/systemManage/department'; +import safetyActionDialog from '/@/views/specialWorkSystem/foundationSet/safetyAction/components/safetyActionDialog.vue'; +let global: any = { + homeChartOne: null, + homeChartTwo: null, + homeCharThree: null, + dispose: [null, '', undefined] +}; + +interface stateType { + tableData: { + safetyActionData: []; + total: number; + loading: boolean; + params: { + pageIndex: number | null; + pageSize: number | null; + searchParams: { + workType: number | null; + type: number | null; + context: string | null; + }; + }; + }; + workTypeList: Array<type>; + typeList: Array<type>; + typeTwoList: Array<type>; + deleteList: { + ids: Array<number>; + }; +} +interface type { + id: number; + name: string; +} +interface ruleType { + id: number; +} +export default { + name: 'index', + components: { safetyActionDialog }, + setup() { + const safetyActionDialogRef = ref(); + const state = reactive<stateType>({ + tableData: { + safetyActionData: [], + total: 0, + loading: false, + params: { + pageIndex: 1, + pageSize: 10, + searchParams: { + workType: null, + type: null, + context: null + } + } + }, + workTypeList: [ + { id: 1, name: '动火作业' }, + { id: 2, name: '受限空间作业' }, + { id: 3, name: '吊装作业' }, + { id: 4, name: '动土作业' }, + { id: 5, name: '断路作业' }, + { id: 6, name: '高处作业' }, + { id: 7, name: '临时用电作业' }, + { id: 8, name: '盲板抽堵作业' } + ], + typeList: [ + { id: 1, name: '选择' }, + { id: 2, name: '填空' } + ], + typeTwoList: [ + { id: 1, name: '是' }, + { id: 2, name: '否' } + ], + deleteList: { + ids: [] + } + }); + + //获取巡检任务数据 + const initSafetyAction = async () => { + let res = await safetyActionApi().getSafetyActionList(state.tableData.params); + if (res.data.code === '200') { + state.tableData.safetyActionData = res.data.data; + state.tableData.total = res.data.total; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // //获取部门 + // const getDepartmentData = async () => { + // let res = await departmentApi().getDepartmentList(); + // if (res.data.code === '200') { + // state.departmentList = res.data.data; + // } else { + // ElMessage({ + // type: 'warning', + // message: res.data.msg + // }); + // } + // }; + + // 删除 + const deleteSafetyAction = (row: any) => { + ElMessageBox.confirm(`此操作将永久删除该措施,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + let res = await safetyActionApi().deleteSafetyAction(state.deleteList); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + duration: 2000, + message: '删除成功' + }); + await initSafetyAction(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }) + .catch(() => {}); + }; + + const handleSelectionChange = (val: Array<ruleType>) => { + state.deleteList.ids = val.map((item) => { + return item.id; + }); + }; + + const openSafetyActionDialog = (type: string, value: {}) => { + safetyActionDialogRef.value.showSafetyActionDialog(type, value); + }; + + const parseNumber = (value: number, type: string) => { + if (type === '作业类型') { + return state.workTypeList.find((item) => item.id === value)?.name; + } else if (type === '正确值') { + return state.typeTwoList.find((item) => item.id == value)?.name; + } else { + return state.typeList.find((item) => item.id == value)?.name; + } + }; + + // 分页改变 + const onHandleSizeChange = (val: number) => { + state.tableData.params.pageSize = val; + initSafetyAction(); + }; + // 分页改变 + const onHandleCurrentChange = (val: number) => { + state.tableData.params.pageIndex = val; + initSafetyAction(); + }; + + const reset = () => { + state.tableData.params = { + pageIndex: 1, + pageSize: 10, + searchParams: { + workType: null, + type: null, + context: null + } + }; + }; + + // 页面加载时 + onMounted(() => { + initSafetyAction(); + }); + + return { + View, + Edit, + Delete, + Refresh, + Plus, + reset, + parseNumber, + handleSelectionChange, + deleteSafetyAction, + initSafetyAction, + onHandleSizeChange, + onHandleCurrentChange, + safetyActionDialogRef, + openSafetyActionDialog, + ...toRefs(state) + }; + } +}; +</script> + +<style scoped lang="scss"> +$homeNavLengh: 8; +.home-container { + height: calc(100vh - 114px); + box-sizing: border-box; + overflow: hidden; + .homeCard { + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + + .main-card { + width: 100%; + height: 100%; + .cardTop { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + .mainCardBtn { + margin: 0; + } + } + .pageBtn { + height: 60px; + display: flex; + align-items: center; + justify-content: right; + + .demo-pagination-block + .demo-pagination-block { + margin-top: 10px; + } + .demo-pagination-block .demonstration { + margin-bottom: 16px; + } + } + } + &:last-of-type { + height: calc(100% - 100px); + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } + + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } +} +.stepItem { + width: 100%; + display: flex; + align-items: flex-start; + margin-bottom: 30px; + margin-left: 30px; + padding-bottom: 30px; + border-left: 2px solid #ccc; + &:first-of-type { + margin-top: 30px; + } + &:last-of-type { + margin-bottom: 0; + border-left: none; + } + .stepNum { + width: 30px; + height: 30px; + border-radius: 15px; + box-sizing: border-box; + color: #333; + border: 1px solid #999; + line-height: 28px; + text-align: center; + margin-right: 10px; + margin-left: -16px; + margin-top: -30px; + } + .stepCard { + width: 100%; + margin-top: -30px; + + .box-card { + width: 100%; + &:deep(.el-card__header) { + padding: 10px 15px; + } + .card-header { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + & > div:first-of-type { + margin-right: 80px; + font-size: 18px; + font-weight: bold; + } + } + } + } + &:hover .card-header { + color: #0098f5; + } + &:hover .stepNum { + border: 2px solid #0098f5; + color: #0098f5; + } +} +:deep(.el-date-editor) { + width: 100%; +} +:deep(.el-textarea.is-disabled .el-textarea__inner) { + background-color: var(--el-card-bg-color); + color: var(--el-input-text-color, var(--el-text-color-regular)); +} +:deep(.el-input.is-disabled .el-input__inner) { + color: var(--el-input-text-color, var(--el-text-color-regular)); +} +:deep(.el-input.is-disabled .el-input__wrapper) { + background-color: var(--el-card-bg-color); +} +</style> diff --git a/src/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue b/src/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue index 9127f73..1f29501 100644 --- a/src/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue +++ b/src/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue @@ -17,9 +17,9 @@ </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="最大值" prop="maxVal"> - <el-input v-model="approveBasicForm.maxVal" type="number" class="input-add" placeholder="请根据需求选择"> + <el-input :disabled="!disabled" v-model="approveBasicForm.maxVal" type="number" class="input-add" placeholder="请根据需求选择"> <template #prepend> - <el-select v-model="approveBasicForm.maxValMatchPattern" placeholder="请根据需求选择" style="width: 115px"> + <el-select :disabled="!disabled" v-model="approveBasicForm.maxValMatchPattern" placeholder="请根据需求选择" style="width: 115px"> <el-option v-for="item in typeTwoList" :key="item.id" :value="item.id" :label="item.name"> </el-option> </el-select> </template> @@ -28,9 +28,9 @@ </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="最小值" prop="minVal"> - <el-input v-model="approveBasicForm.minVal" type="number" class="input-add" placeholder="请根据需求选择"> + <el-input :disabled="!disabled" v-model="approveBasicForm.minVal" type="number" class="input-add" placeholder="请根据需求选择"> <template #prepend> - <el-select v-model="approveBasicForm.minValMatchPattern" placeholder="请根据需求选择" style="width: 115px"> + <el-select :disabled="!disabled" v-model="approveBasicForm.minValMatchPattern" placeholder="请根据需求选择" style="width: 115px"> <el-option v-for="item in typeList" :key="item.id" :value="item.id" :label="item.name"> </el-option> </el-select> </template> @@ -39,27 +39,27 @@ </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="描述" prop="info"> - <el-input class="input-add" :rows="3" v-model.trim="approveBasicForm.info" type="textarea" placeholder="请输入描述" ></el-input> + <el-input class="input-add" :rows="3" :disabled="!disabled" v-model.trim="approveBasicForm.info" type="textarea" placeholder="请输入描述"></el-input> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> - <el-form-item label="创建人" prop="location"> - <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.createByUserName"></el-input> + <el-form-item label="创建人" prop="createUname"> + <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.createUname"></el-input> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> - <el-form-item label="创建时间" prop="location"> + <el-form-item label="创建时间" prop="gmtCreate"> <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.gmtCreate"></el-input> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> - <el-form-item label="最后修改人" prop="location"> - <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.lastEditUserName"></el-input> + <el-form-item label="最后修改人" prop="modifiedUname"> + <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.modifiedUname"></el-input> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-show="personTime"> - <el-form-item label="最后修改时间" prop="location"> - <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.gmtModitify"></el-input> + <el-form-item label="最后修改时间" prop="gmtModified"> + <el-input class="input-add" :disabled="!disabled" v-model.trim="approveBasicForm.gmtModified"></el-input> </el-form-item> </el-col> </el-row> @@ -80,13 +80,14 @@ disabled: Boolean; personTime: Boolean; approveBasicForm: { - ruleStandType: null|number, - minVal: null|number, - minValMatchPattern: null, - maxVal: null|number, - maxValMatchPattern: null|number, - title:null| string, - info:null| string, + ruleStandId: null | number; + ruleStandType: null | number; + minVal: null | number; + minValMatchPattern: null; + maxVal: null | number; + maxValMatchPattern: null | number; + title: null | string; + info: null | string; }; title: string; departmentList: []; @@ -96,9 +97,20 @@ approveBasicFormRules: {}; } interface levelListState { - id:number, - name:string + id: number; + name: string; } +interface approveBasicForm { + ruleStandId: null | number; + ruleStandType: null | number; + minVal: null | number; + minValMatchPattern: null; + maxVal: null | number; + maxValMatchPattern: null | number; + title: null | string; + info: null | string; +} + import { reactive, toRefs, ref } from 'vue'; import { approveBasicApi } from '/@/api/specialWorkSystem/approveBasic'; import { ElMessage } from 'element-plus'; @@ -119,26 +131,27 @@ { id: 4, name: '硫化氢浓度' }, { id: 5, name: '温度' }, { id: 6, name: '压力' }, - { id: 7, name: '震动' }, + { id: 7, name: '震动' } ], - typeList:[ + typeList: [ { id: 1, name: '大于' }, { id: 2, name: '等于' }, - { id: 4, name: '大于等于' }, + { id: 4, name: '大于等于' } ], - typeTwoList:[ + typeTwoList: [ { id: 3, name: '小于' }, { id: 2, name: '等于' }, - { id: 5, name: '小于等于' }, + { id: 5, name: '小于等于' } ], approveBasicForm: { + ruleStandId: null, ruleStandType: null, minVal: null, minValMatchPattern: null, maxVal: null, maxValMatchPattern: null, title: null, - info: null, + info: null }, approveBasicFormRules: { ruleStandType: [{ required: true, message: '请选择标准类型', trigger: 'change' }], @@ -161,13 +174,14 @@ state.personTime = false; state.title = '新增审批标准'; state.approveBasicForm = { + ruleStandId: null, ruleStandType: null, minVal: null, minValMatchPattern: null, maxVal: null, maxValMatchPattern: null, title: null, - info: null, + info: null }; } else if (type === '查看') { state.disabled = false; @@ -179,6 +193,9 @@ state.personTime = false; state.title = '修改审批标准'; state.approveBasicForm = JSON.parse(JSON.stringify(value)); + // for (let i in state.approveBasicForm) { + // state.approveBasicForm[i] = approveBasicForm[i]; + // } } }; diff --git a/src/views/specialWorkSystem/workFlow/approveBasic/index.vue b/src/views/specialWorkSystem/workFlow/approveBasic/index.vue index 6841635..8720d1f 100644 --- a/src/views/specialWorkSystem/workFlow/approveBasic/index.vue +++ b/src/views/specialWorkSystem/workFlow/approveBasic/index.vue @@ -3,16 +3,14 @@ <div style="height: 100%"> <el-row class="homeCard"> <div class="basic-line"> - <span>任务类型:</span> - <el-select v-model="tableData.params.workType" clearable filterable class="input-box" placeholder="任务类型"> - <el-option v-for="item in workTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> + <span>标准类型:</span> + <el-select v-model="tableData.params.searchParams.ruleStandType" clearable filterable class="input-box" placeholder="标准类型"> + <el-option v-for="item in ruleStandTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> </el-select> </div> <div class="basic-line"> - <span>执行班组:</span> - <el-select v-model="tableData.params.execClassgroupId" clearable filterable class="input-box" placeholder="执行班组"> - <el-option v-for="item in classGroupList" :key="item.id" :label="item.groupName" :value="item.id"></el-option> - </el-select> + <span>标题:</span> + <el-input v-model.trim="tableData.params.searchParams.title" clearable filterable class="input-box" placeholder="标题"> </el-input> </div> <div style="padding-bottom: 10px"> <el-button type="primary" @click="getInspectionTask">查询</el-button> @@ -28,7 +26,8 @@ </el-col> <el-button type="primary" :icon="Refresh" size="default" /> </el-row> - <el-table ref="multipleTableRef" :data="tableData.approveBasicData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> + <el-table ref="multipleTableRef" :data="tableData.approveBasicData" 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="title" label="标题" /> <el-table-column property="ruleStandType" label="标准类型"> <template #default="scope"> @@ -43,13 +42,13 @@ {{ parseNumber(scope.row.minValMatchPattern, '最低值') }} </span> <span> - {{scope.row.minVal}} + {{ scope.row.minVal }} </span> </template> </el-table-column> <el-table-column property="maxVal" label="最高值"> <template #default="scope"> - <span> + <span> {{ parseNumber(scope.row.maxValMatchPattern, '最高值') }} </span> <span> @@ -58,10 +57,10 @@ </template> </el-table-column> <el-table-column property="info" label="描述" /> - <el-table-column prop="createUserName" label="创建人" show-overflow-tooltip></el-table-column> + <el-table-column prop="createUname" label="创建人" show-overflow-tooltip></el-table-column> <el-table-column prop="gmtCreate" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="lastEditUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column prop="gmtModitify" label="最后修改时间" show-overflow-tooltip></el-table-column> + <el-table-column prop="modifiedUname" label="最后修改人" show-overflow-tooltip></el-table-column> + <el-table-column prop="gmtModified" label="最后修改时间" show-overflow-tooltip></el-table-column> <el-table-column property="status" label="状态" width="60" /> <el-table-column fixed="right" label="操作" align="center" width="300"> <template #default="scope"> @@ -71,20 +70,8 @@ </template> </el-table-column> </el-table> - <br> - <el-pagination - @size-change="onHandleSizeChange" - @current-change="onHandleCurrentChange" - :pager-count="5" - :page-sizes="[10, 20, 30]" - v-model:current-page="tableData.params.pageIndex" - background - v-model:page-size="tableData.params.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="tableData.total" - class="page-position"> - </el-pagination> - + <br /> + <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="tableData.params.pageIndex" background v-model:page-size="tableData.params.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="tableData.total" class="page-position"> </el-pagination> </div> </div> </div> @@ -114,25 +101,25 @@ params: { pageIndex: number | null; pageSize: number | null; - unitName: string | null; - workType: number | null; - createUserId: number | null; - execClassgroupId: number | null; - checkCycle: number | null; - checkCycleUnit: number | null; + searchParams: { + ruleStandType: number | null; + title: string | null; + }; }; }; ruleStandTypeList: Array<type>; typeList: Array<type>; typeTwoList: Array<type>; + deleteList: { + ids: Array<number>; + }; } interface type { id: number; name: string; } -interface classGroup { - id: number; - groupName: string; +interface ruleType { + ruleStandId: number; } export default { name: 'index', @@ -147,12 +134,10 @@ params: { pageIndex: 1, pageSize: 10, - unitName: null, - workType: null, - createUserId: null, - execClassgroupId: null, - checkCycle: null, - checkCycleUnit: null + searchParams: { + ruleStandType: null, + title: null + } } }, ruleStandTypeList: [ @@ -162,19 +147,21 @@ { id: 4, name: '硫化氢浓度' }, { id: 5, name: '温度' }, { id: 6, name: '压力' }, - { id: 7, name: '震动' }, + { id: 7, name: '震动' } ], - typeList:[ + typeList: [ { id: 1, name: '大于' }, { id: 2, name: '等于' }, - { id: 4, name: '大于等于' }, + { id: 4, name: '大于等于' } ], - typeTwoList:[ + typeTwoList: [ { id: 3, name: '小于' }, { id: 2, name: '等于' }, - { id: 5, name: '小于等于' }, + { id: 5, name: '小于等于' } ], - + deleteList: { + ids: [] + } }); //获取巡检任务数据 @@ -212,7 +199,7 @@ type: 'warning' }) .then(async () => { - let res = await approveBasicApi().deleteApproveBasic({ id: row.id }); + let res = await approveBasicApi().deleteApproveBasic(state.deleteList); if (res.data.code === '200') { ElMessage({ type: 'success', @@ -228,6 +215,12 @@ } }) .catch(() => {}); + }; + + const handleSelectionChange = (val: Array<ruleType>) => { + state.deleteList.ids = val.map((item) => { + return item.ruleStandId; + }); }; const openApproveBasicDialog = (type: string, value: {}) => { @@ -259,12 +252,10 @@ state.tableData.params = { pageIndex: 1, pageSize: 10, - unitName: null, - workType: null, - createUserId: null, - execClassgroupId: null, - checkCycle: null, - checkCycleUnit: null + searchParams: { + ruleStandType: null, + title: null + } }; }; @@ -281,6 +272,7 @@ Plus, reset, parseNumber, + handleSelectionChange, deleteApproveBasic, getInspectionTask, onHandleSizeChange, @@ -419,13 +411,7 @@ color: #0098f5; } } -.el-input { - width: 100% !important; -} :deep(.el-date-editor) { - width: 100%; -} -.el-select { width: 100%; } :deep(.el-textarea.is-disabled .el-textarea__inner) { -- Gitblit v1.9.2