| | |
| | | #线上正式环境外包接口地址 |
| | | |
| | | VITE_API_URL_SOCKET = 'http://192.168.0.29:8018' |
| | | #黄振websocket接口地址 |
| | | #黄振websocket接口地址 |
对比新文件 |
| | |
| | | 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> |
对比新文件 |
| | |
| | | <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> |
| | |
| | | }, |
| | | |
| | | // 获取图片上传地址 |
| | | 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 |
| | | }); |
| | | } |
| | | }; |
对比新文件 |
| | |
| | | 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' |
| | | }); |
| | | } |
| | | }; |
| | | } |
| | |
| | | // 对响应数据做点什么 |
| | | 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'){ |
| | |
| | | </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> |
| | |
| | | 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) { |
| | |
| | | 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) => { |
| | |
| | | } |
| | | }; |
| | | |
| | | // 图片上传 |
| | | 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 () => { |
| | |
| | | return { |
| | | ...toRefs(state), |
| | | RFIDFormRef, |
| | | fileList, |
| | | // fileList, |
| | | upload, |
| | | getUploadUrl, |
| | | handleRemove, |
| | | handlePreview, |
| | |
| | | <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'; |
| | |
| | | // 页面关闭处理 |
| | | onUnmounted(() => { |
| | | // 销毁监听 |
| | | state.socket.onclose = () => { |
| | | console.log('socket已经关闭'); |
| | | }; |
| | | nextTick(()=>{ |
| | | state.socket.onclose = () => { |
| | | console.log('socket已经关闭'); |
| | | }; |
| | | }) |
| | | }); |
| | | return { |
| | | dataList, |
对比新文件 |
| | |
| | | <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> |
对比新文件 |
| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | </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> |
| | |
| | | </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> |
| | |
| | | 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: []; |
| | |
| | | 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'; |
| | |
| | | { 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' }], |
| | |
| | | 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; |
| | |
| | | state.personTime = false; |
| | | state.title = '修改审批标准'; |
| | | state.approveBasicForm = JSON.parse(JSON.stringify(value)); |
| | | // for (let i in state.approveBasicForm) { |
| | | // state.approveBasicForm[i] = approveBasicForm[i]; |
| | | // } |
| | | } |
| | | }; |
| | | |
| | |
| | | <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> |
| | |
| | | </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"> |
| | |
| | | {{ 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> |
| | |
| | | </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"> |
| | |
| | | </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> |
| | |
| | | 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', |
| | |
| | | params: { |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | unitName: null, |
| | | workType: null, |
| | | createUserId: null, |
| | | execClassgroupId: null, |
| | | checkCycle: null, |
| | | checkCycleUnit: null |
| | | searchParams: { |
| | | ruleStandType: null, |
| | | title: null |
| | | } |
| | | } |
| | | }, |
| | | ruleStandTypeList: [ |
| | |
| | | { 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: [] |
| | | } |
| | | }); |
| | | |
| | | //获取巡检任务数据 |
| | |
| | | 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', |
| | |
| | | } |
| | | }) |
| | | .catch(() => {}); |
| | | }; |
| | | |
| | | const handleSelectionChange = (val: Array<ruleType>) => { |
| | | state.deleteList.ids = val.map((item) => { |
| | | return item.ruleStandId; |
| | | }); |
| | | }; |
| | | |
| | | const openApproveBasicDialog = (type: string, value: {}) => { |
| | |
| | | state.tableData.params = { |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | unitName: null, |
| | | workType: null, |
| | | createUserId: null, |
| | | execClassgroupId: null, |
| | | checkCycle: null, |
| | | checkCycleUnit: null |
| | | searchParams: { |
| | | ruleStandType: null, |
| | | title: null |
| | | } |
| | | }; |
| | | }; |
| | | |
| | |
| | | Plus, |
| | | reset, |
| | | parseNumber, |
| | | handleSelectionChange, |
| | | deleteApproveBasic, |
| | | getInspectionTask, |
| | | onHandleSizeChange, |
| | |
| | | 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) { |