From e8546c7be820056f24bcb9055cd889cd3a597a31 Mon Sep 17 00:00:00 2001 From: 叶松 <2217086471@qq.com> Date: 星期三, 15 十一月 2023 08:58:35 +0800 Subject: [PATCH] Merge branch 'master' of http://111.30.93.211:10101/r/supipe --- web/src/views/SecureManage/RiskGrad/AreaPolling.vue | 409 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 406 insertions(+), 3 deletions(-) diff --git a/web/src/views/SecureManage/RiskGrad/AreaPolling.vue b/web/src/views/SecureManage/RiskGrad/AreaPolling.vue index afe80fa..5a9c94f 100644 --- a/web/src/views/SecureManage/RiskGrad/AreaPolling.vue +++ b/web/src/views/SecureManage/RiskGrad/AreaPolling.vue @@ -1,3 +1,406 @@ -<template> - <div>区域巡检</div> -</template> \ No newline at end of file +<!-- 安全管理 ==> 风险分级管控 => 区域巡检--> +<template> + <div class="main"> + <div class="main_tabs"> + <el-tabs v-model="activeName"> + <el-tab-pane label="巡检任务" name="first"></el-tab-pane> + <el-tab-pane label="任务打卡" name="second"></el-tab-pane> + </el-tabs> + </div> + <div class="main_header"> + <div class="header_item"> + <span class="header_label">巡检任务:</span> + <el-input size="mini" v-model="queryInfo.task" placeholder="请输入巡检任务" clearable></el-input> + </div> + <div class="header_item"> + <span class="header_label">巡检人员:</span> + <el-input size="mini" v-model="queryInfo.realName" placeholder="请输入巡检人员" clearable></el-input> + </div> + <div class="header_item"> + <el-button icon="el-icon-search" v-permission="'search'" @click="queryReset">查询</el-button> + <el-button icon="el-icon-plus" v-permission="'insert'" @click="addRow">新增</el-button> + </div> + </div> + <div class="main_content"> + <cpn-table :table-index="true" :table-loading="tableConfig.loading" :table-data="tableConfig.tableData" + :table-columns="tableConfig.tableColumns" :page-total="tableConfig.total" :page-num.sync="queryInfo.pageNum" + :page-size.sync="queryInfo.pageSize" :page-change="pageChange"> + </cpn-table> + </div> + <!-- dialog --> + <el-dialog width="400px" class="prop_dialog" v-if="isRenderDialog" :title="dialogTitle" :visible.sync="asyncVisible" + @close="closeForm"> + + <!-- <cpn-form :form-config="formConfig" :form-items="formConfig.formItems"></cpn-form> --> + + <el-form class="rule_form" ref="ruleForm" :model="ruleForm" :rules="rules" label-width="auto"> + + <el-form-item label="巡检任务:" prop="task"> + <el-input v-model="ruleForm.task" placeholder="请输入巡检任务" clearable></el-input> + </el-form-item> + + <el-form-item label="巡检标准:" prop="standard"> + <el-input type="textarea" v-model="ruleForm.standard" placeholder="请输入巡检标准" clearable></el-input> + </el-form-item> + + <el-form-item label="巡检人员:" prop="realNames"> + <el-select v-model="ruleForm.realNames" multiple value-key="id" placeholder="请选择巡检人员"> + <el-option v-for="item in allPersons" :key="item.id" :label="item.label" :value="item"></el-option> + </el-select> + </el-form-item> + + <div class="divider"><span>巡检路线</span></div> + + <el-form-item label-width="0" v-for="(itemP, index) in ruleForm.paths " :key="index" :prop="'paths.' + + index + '.value'" :rules="{ required: true, message: '请选择巡检路线', trigger: 'change' }"> + <el-select style="margin-right: 10px;width: 323px;" v-model="itemP.value" value-key="id" + placeholder="请选择巡检路线"> + <el-option v-for=" item in allPath" :key="item.id" :label="item.label" :value="item"></el-option> + </el-select> + <el-button class="delete_btn" @click="delPath(itemP)">删除</el-button> + <el-button class="table_btn" v-show="index === ruleForm.paths.length - 1" + @click="addPath">添加</el-button> + </el-form-item> + <!-- <el-form-item label="区域名称:" prop="regionHazardInformId"> + <el-select v-model="ruleForm.regionHazardInformId" placeholder="请选择区域名称"> + <el-option v-for="item in areaNames" :key="item.id" :label="item.region" :value="item.id"> + </el-option> + </el-select> + </el-form-item> --> + </el-form> + <div slot="footer"> + <el-button @click="asyncVisible = false">取 消</el-button> + <el-button class="submit_btn" @click="onSubmit('ruleForm')">提 交</el-button> + </div> + </el-dialog> + </div> +</template> +<script> +import {throttle} from '@/plugins/public' +import cpnTable from '@/components/element/Table' +// import cpnForm from '@/components/element/Form' +export default { + data() { + return { + isRenderDialog: false, + asyncVisible: false, + activeName: 'first', // tabs切换 + submitMode: '', // 提交方式: add / update + allPersons: [], // 巡检人员 + allPath: [], // 巡检路线 + queryInfo: { + pageNum: 1, + pageSize: 10, + task: '', + realName: '', + }, + ruleForm: { + id: '', + task: '', + standard: '', + realNames: [], + paths: [ + {value: ''}, + ], + }, + rules: { + task: [{required: true, message: '请输入巡检任务', trigger: 'blur'}], + standard: [{required: true, message: '请输入巡检标准', trigger: 'blur'}], + realNames: [{required: true, message: '请选择巡检人员', trigger: 'change'}], + }, + tableConfig: { + loading: true, + tableData: [], + tableColumns: [], + total: 0, + }, + formConfig: {} + } + }, + components: { + cpnTable, + // cpnForm, + }, + computed: { + isUpdate() { + return this.submitMode === 'update' + }, + dialogTitle() { + return this.isUpdate ? '修改巡检任务' : '新增巡检任务' + }, + }, + beforeCreate() { + this.$http = this.$api.Safety.RiskGrad.polling + }, + created() { + this.setTableColumn() + this.setFormColumn() + this.getLists() + }, + methods: { + // 获取table列表数据 + getLists() { + let params = this.queryInfo + let tableConfig = this.tableConfig + this.$http.getLists(params).then(res => { + if (res.statusMsg === 'ok') { + tableConfig.total = res.data.total + tableConfig.tableData = res.data.list + } + tableConfig.loading = false + }) + }, + // 获取管服人员数据(巡检人员) + getPerson() { + return new Promise(resolve => { + this.$api.Personnerl.SEARCHMORTGAGEELIST({ + userType: 1, + pageNum: 1, + pageSize: 9999 + }).then((res) => { + if (res.success) { + const list = res.data.list + const out = [] + list.forEach(item => { + out.push({ + id: item.userId, + label: item.realName, + }) + }) + this.allPersons.push(...out) + resolve() + } + }) + }) + }, + // 获取巡检路线 + getPath() { + new Promise(resolve => { + this.$api.Safety.RiskGrad.warning.getLists({ + pageNum: 1, + pageSize: 9999 + }).then((res) => { + if (res.success) { + const list = res.data.list + const out = [] + list.forEach(item => { + out.push({ + id: item.id, + label: item.region + }) + }) + this.allPath.push(...out) + resolve() + } + }) + }) + }, + // 初始化 table 配置 + setTableColumn() { + this.tableConfig.tableColumns = [ + {index: true}, + {name: "巡检任务", key: "task"}, + {name: "巡检标准", key: "standard"}, + {name: "巡检人员", key: "regionUsersList", formatter: row => row.realNames}, + {name: "巡检路线", key: "regionList", formatter: row => row.regions}, + { + operation: true, name: "操作", width: 140, value: [ + {name: "修改", permission: "update", handleRow: this.updateRow}, + {name: "删除", permission: "delete", handleRow: this.deleteRow},] + }, + ] + }, + // 初始化 form 配置 + setFormColumn() { + this.formConfig = { + formModels: { + task: '', + standard: '', + realNames: [], + }, + formItems: [ + {type: 'input', label: '巡检任务'}, + {type: 'textarea', label: '巡检标准'}, + { + type: 'select', label: '用户状态', options: this.allPersons, + } + // { + // type: 'datepicker', label: '创建时间', otherOptions: { + // startPlaceholder: '开始时间', + // endPlaceholder: '结束时间', + // type: 'daterange', + // 'unlink-panels': true + // } + // } + ], + itemColLayout: { + span: 8 + } + } + }, + // 查询按钮列表信息 + queryReset() { + this.queryInfo.pageNum = 1 + this.queryInfo.pageSize = 10 + this.getLists() + }, + // 重置表单 + resetForm(formName) { + this.$refs[formName].resetFields() + this.ruleForm.paths = [{value: ''}] + }, + // 显示表单 + async showForm() { + !this.allPath.length && this.getPath() + !this.allPersons.length && this.getPerson() + !this.isRenderDialog && (this.isRenderDialog = true) + this.asyncVisible = true + }, + closeForm() { + this.resetForm('ruleForm') + this.asyncVisible = false + }, + // 添加数据 + addRow() { + this.submitMode = 'add' + this.showForm() + + + console.log(this.allPersons) + console.log(this.formConfig) + }, + updateRow(row) { + this.submitMode = 'update' + this.showForm() + this.$nextTick(() => { + const {id, task, standard, regionUsersList, regionList} = row + const realNames = regionUsersList.map(item => { + return { + id: item.userId, + label: item.realName, + } + }) + const paths = regionList.map(item => { + return { + value: { + id: item.regionHazardInformId, + label: item.region, + }, + } + }) + this.ruleForm = { + id, + task, + standard, + realNames, + paths, + } + }) + }, + deleteRow(row) { + const params = {id: row.id} + this.$confirm("该操作将删除该信息,是否继续删除?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(() => { + this.$http.delete(params).then(res => { + if (res.statusMsg === 'ok') { + this.queryReset() + this.$message.success("删除成功!") + } else { + this.$message.warning(res.statusMsg) + } + }) + }).catch(() => { + this.$message.warning("您已取消") + }) + + }, + // 提交表单 + onSubmit: throttle(function (formName) { + this.$refs[formName].validate(valid => { + if (!valid) return + const {id, task, standard, realNames, paths} = this.ruleForm + const regionList = paths.map((item, index) => { + return { + sort: index + 1, + regionHazardInformId: item.value.id, + } + }) + const regionUsersList = realNames.map(item => { + return { + userId: item.id, + } + }) + const params = { + task, + standard, + regionList, + regionUsersList, + } + if (this.isUpdate) { + // 更新 + params.id = id + this.$http.update(params).then((res) => { + if (res.statusMsg === 'ok') { + this.closeForm() + this.getLists() + this.$message.success('更新成功!') + } else { + this.$message.warning(res.statusMsg) + } + }) + } else { + // 添加 + this.$http.insert(params).then((res) => { + if (res.statusMsg === 'ok') { + this.closeForm() + this.getLists() + this.$message.success('添加成功!') + } else { + this.$message.warning(res.statusMsg) + } + }) + } + }) + }, 1000), + addPath() { + this.ruleForm.paths.push({ + value: '' + }) + }, + delPath(item) { + var index = this.ruleForm.paths.indexOf(item) + if (index !== -1) { + this.ruleForm.paths.splice(index, 1) + } + }, + pageChange() { + this.getLists() + }, + } +} +</script> + +<style lang="scss" scoped> +@import '@/style/layout-main.scss'; + +.divider { + position: relative; + margin-bottom: 30px; + text-indent: 10px; + color: #fff; + border-left: 3px solid #18F6F8; + + &::after { + content: ""; + position: absolute; + left: 0; + bottom: -8px; + width: 100%; + padding: 20px 0; + border-bottom: 1px solid #0C4D6F; + } +} +</style> \ No newline at end of file -- Gitblit v1.9.3