From 169c4730c227b35e7d061326aebe9f978f0ab4c8 Mon Sep 17 00:00:00 2001
From: shishuaikang <280848880@qq.com>
Date: 星期二, 21 十一月 2023 10:43:31 +0800
Subject: [PATCH] web:安全管理=>区域巡检提交
---
web/src/api/modules/safety.js | 16
web/src/views/SecureManage/RiskGrad/AreaPolling.vue | 391 --------------------
web/src/views/SecureManage/RiskGrad/components/TaskPunchcard.vue | 318 ++++++++++++++++
web/src/components/element/Table.vue | 4
web/src/views/SecureManage/RiskGrad/components/PollingTask.vue | 405 +++++++++++++++++++++
web/src/plugins/directive.js | 1
6 files changed, 751 insertions(+), 384 deletions(-)
diff --git a/web/src/api/modules/safety.js b/web/src/api/modules/safety.js
index 7926c5f..ad2c24f 100644
--- a/web/src/api/modules/safety.js
+++ b/web/src/api/modules/safety.js
@@ -236,11 +236,21 @@
},
// 区域巡检
polling: {
- getLists: params =>
- axios.post('/secure/regioninspection/selectPageList', params),
+ /* 巡检任务 */
+ getLists: params => axios.post('/secure/regioninspection/selectPageList', params),
insert: params => axios.post('/secure/regioninspection/insertAndUpdate', params),
update: params => axios.post('/secure/regioninspection/insertAndUpdate', params),
- delete: params => axios.get('/secure/regioninspection/delete', { params })
+ delete: params => axios.get('/secure/regioninspection/delete', { params }),
+ /* 任务打卡 */
+ taskcardGetlists: params => axios.post('/secure/regionInspectionRecord/selectPageList', params),
+ taskcardGetregions: params => axios.post('/secure/regionInspectionRecord/selectInfo', params),
+ taskcardGetregionInfo: params => axios.post('/secure/regionInspectionRecord/regionInfo', params),
+ taskcardExport: params => axios({
+ method: 'post',
+ url:'/secure/regionInspectionRecord/export',
+ responseType:'blob',
+ data: params,
+ }),
}
},
/**
diff --git a/web/src/components/element/Table.vue b/web/src/components/element/Table.vue
index 6460b08..cea6aa4 100644
--- a/web/src/components/element/Table.vue
+++ b/web/src/components/element/Table.vue
@@ -150,5 +150,9 @@
overflow: auto;
border: none;
height: 100%;
+
+ ::v-deep .cell {
+ white-space: pre-wrap;
+ }
}
</style>
\ No newline at end of file
diff --git a/web/src/plugins/directive.js b/web/src/plugins/directive.js
index ded1455..cbc0d89 100644
--- a/web/src/plugins/directive.js
+++ b/web/src/plugins/directive.js
@@ -12,6 +12,7 @@
value === 'insert' && (el.className += ' search_btn')
value === 'update' && (el.className += ' table_btn')
value === 'delete' && (el.className += ' delete_btn')
+ value === 'export' && (el.className += ' search_btn')
} else {
el.parentNode.removeChild(el)
}
diff --git a/web/src/views/SecureManage/RiskGrad/AreaPolling.vue b/web/src/views/SecureManage/RiskGrad/AreaPolling.vue
index 5a9c94f..3a0ed7f 100644
--- a/web/src/views/SecureManage/RiskGrad/AreaPolling.vue
+++ b/web/src/views/SecureManage/RiskGrad/AreaPolling.vue
@@ -7,400 +7,29 @@
<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>
+ <component :is="cpns[activeName]"></component>
</div>
</template>
<script>
-import {throttle} from '@/plugins/public'
-import cpnTable from '@/components/element/Table'
-// import cpnForm from '@/components/element/Form'
+import PollingTask from './components/PollingTask' // 巡检任务
+import TaskPunchcard from './components/TaskPunchcard' // 任务打卡
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: {}
+ activeName: 'first',
+ cpns: {
+ first: 'PollingTask',
+ second: 'TaskPunchcard',
+ }
}
},
components: {
- cpnTable,
- // cpnForm,
+ PollingTask,
+ TaskPunchcard,
},
- 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
diff --git a/web/src/views/SecureManage/RiskGrad/components/PollingTask.vue b/web/src/views/SecureManage/RiskGrad/components/PollingTask.vue
new file mode 100644
index 0000000..e02fce3
--- /dev/null
+++ b/web/src/views/SecureManage/RiskGrad/components/PollingTask.vue
@@ -0,0 +1,405 @@
+<!-- 安全管理 ==> 风险分级管控 => 区域巡检(巡检任务)-->
+<template>
+ <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,
+ 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: '',
+ 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
+ tableConfig.loading = true
+ 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: "巡检路线", align: 'left', key: "regions", formatter: row => {
+ return row.regions.replace(/,/g, ',\n')
+ }
+ },
+ {
+ name: "巡检状态", key: "status", width: 120, formatter: row => {
+ return row.status === 1 ? '已完成' : '待巡检'
+ }
+ },
+ {
+ 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()
+ },
+ 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
diff --git a/web/src/views/SecureManage/RiskGrad/components/TaskPunchcard.vue b/web/src/views/SecureManage/RiskGrad/components/TaskPunchcard.vue
new file mode 100644
index 0000000..b0063ac
--- /dev/null
+++ b/web/src/views/SecureManage/RiskGrad/components/TaskPunchcard.vue
@@ -0,0 +1,318 @@
+<!-- 安全管理 ==> 风险分级管控 => 区域巡检(任务打卡)-->
+<template>
+ <div>
+ <div class="main_header">
+ <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">
+ <span class="header_label">巡检状态:</span>
+ <el-select size="mini" v-model="queryInfo.status">
+ <el-option v-for="item in queryStatus" :key="item.value" :label="item.label" :value="item.value"
+ placeholder="请选择巡检状态"></el-option>
+ </el-select>
+ </div>
+ <div class="header_item">
+ <span class="header_label">时间范围:</span>
+ <el-date-picker type="daterange" v-model="times" value-format="yyyy-MM-dd" start-placeholder="起始时间"
+ end-placeholder="结束时间" @change="changeTime" clear></el-date-picker>
+ </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="'export'" @click="exportExcel">导出Excel</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="详情" :visible.sync="asyncVisible">
+
+ <el-form class="rule_form" label-width="auto">
+
+ <div class="divider"></div>
+
+ <el-form-item label="巡检任务:">{{ info.task }}</el-form-item>
+
+ <el-form-item label="巡检标准:">{{ info.standard }}</el-form-item>
+
+ <el-form-item label="巡检人员:">{{ info.name }}</el-form-item>
+
+ <div class="divider"><span>巡检路线</span></div>
+
+ <div class="regions">
+ <div class="region" v-for="item in info.regions" :key="item.regionId"
+ @click="regionClick(item.regionId)">{{
+ item.region }}
+ </div>
+ </div>
+ </el-form>
+ </el-dialog>
+
+ <!-- 区域信息dialog -->
+ <el-dialog width="400px" class="prop_dialog" v-if="regionInfos.isRenderDialog" title="详情"
+ :visible.sync="regionInfos.asyncVisible">
+
+ <el-form class="rule_form" label-width="auto">
+
+ <div class="divider"></div>
+
+ <el-form-item label="巡检时间:">{{ regionInfos.time }}</el-form-item>
+
+ <el-form-item label="巡检区域:">{{ regionInfos.region }}</el-form-item>
+
+ <el-form-item label="巡检结果:">{{ regionInfos.res }}</el-form-item>
+
+ <el-form-item label="上传图片:">
+ <el-image class="image" v-for="(item, index) in regionInfos.img" :key="index" :src="item" fit="contain"
+ :preview-src-list="regionInfos.img"></el-image>
+ </el-form-item>
+
+ <el-form-item label="获取当前位置:">{{ regionInfos.location }}</el-form-item>
+ </el-form>
+ </el-dialog>
+ </div>
+</template>
+<script>
+import cpnTable from '@/components/element/Table'
+import {downFiles} from '@/plugins/public'
+export default {
+ data() {
+ return {
+ isRenderDialog: false,
+ asyncVisible: false,
+ info: { // 详情信息
+ task: '',
+ standard: '',
+ name: '',
+ regions: [],
+ },
+ userId: '', // 存储点击后的用户id
+ taskId: '', // 存储点击后的巡检任务id
+ times: [], // 时间范围
+ queryStatus: [
+ {value: '0', label: '待巡检'},
+ {value: '1', label: '已完成'},
+ ],
+ queryInfo: {
+ pageNum: 1,
+ pageSize: 10,
+ status: '',
+ realName: '',
+ startTime: '',
+ endTime: '',
+ },
+ tableConfig: {
+ loading: '',
+ tableData: [],
+ tableColumns: [],
+ total: 0,
+ },
+ regionInfos: { // 巡检路线详情
+ isRenderDialog: false,
+ asyncVisible: false,
+ time: '', // 巡检时间
+ region: '', // 巡检区域
+ res: '', // 巡检结果
+ img: '', // 上传的图片
+ location: '', // 位置
+ }
+ }
+ },
+ components: {
+ cpnTable,
+ },
+ beforeCreate() {
+ this.$http = this.$api.Safety.RiskGrad.polling
+ },
+ created() {
+ this.setTableColumn()
+ this.getLists()
+ },
+ methods: {
+ // 获取table列表数据
+ getLists() {
+ let params = this.queryInfo
+ let tableConfig = this.tableConfig
+ tableConfig.loading = true
+ this.$http.taskcardGetlists(params).then(res => {
+ if (res.statusMsg === 'ok') {
+ tableConfig.total = res.data.total
+ tableConfig.tableData = res.data.list
+ }
+ tableConfig.loading = false
+ })
+ },
+ // 获取巡检路线的id (用来点击展示详情)
+ getRegionId() {
+
+ },
+ // 初始化 table 配置
+ setTableColumn() {
+ this.tableConfig.tableColumns = [
+ {index: true},
+ {name: "巡检时间", key: "inspectionTime"},
+ {name: "巡检任务", key: "task"},
+ {
+ name: "巡检路线", align: 'left', key: "region", formatter: row => {
+ return row.region.replace(/,/g, ',\n')
+ }
+ },
+ {name: "巡检人", key: "realName"},
+ {
+ name: "巡检状态", key: "status", width: 120, formatter: row => {
+ return row.status === 1 ? '已完成' : '待巡检'
+ }
+ },
+ {
+ operation: true, name: "操作", width: 120, value: [
+ {name: "详情", handleRow: this.detailRow}]
+ },
+ ]
+ },
+ // 查询按钮列表信息
+ queryReset() {
+ this.queryInfo.pageNum = 1
+ this.queryInfo.pageSize = 10
+ this.getLists()
+ },
+ showDialog() {
+ if (!this.isRenderDialog) {
+ this.isRenderDialog = true
+ }
+ this.asyncVisible = true
+ },
+ showRegionDialog() {
+ if (!this.regionInfos.isRenderDialog) {
+ this.regionInfos.isRenderDialog = true
+ }
+ this.regionInfos.asyncVisible = true
+ },
+ detailRow(row) {
+ this.info.task = row.task
+ this.info.standard = row.standard
+ this.info.name = row.realName
+ this.info.regions = []
+
+ this.userId = row.userId
+ this.taskId = row.regionInspectionId
+ const params = {
+ userId: row.userId,
+ regionInspectionId: row.regionInspectionId,
+ }
+ this.$http.taskcardGetregions(params).then(res => {
+ if (res.statusMsg === 'ok') {
+ let regions = []
+ res.data.regionList.forEach(item => {
+ regions.push({
+ regionId: item.regionHazardInformId,
+ region: item.region,
+ })
+ })
+ this.info.regions.push(...regions)
+ }
+ })
+ this.showDialog()
+ },
+ regionClick(regionId) {
+ const params = {
+ userId: this.userId,
+ regionInspectionId: this.taskId,
+ regionHazardInformId: regionId,
+ }
+ this.$http.taskcardGetregionInfo(params).then(res => {
+ if (res.statusMsg === 'ok') {
+ this.regionInfos.time = res.data.inspectionTime
+ this.regionInfos.region = res.data.region
+ this.regionInfos.res = res.data.result
+ this.regionInfos.location = res.data.location
+ this.regionInfos.img = []
+
+ if (res.data.imgPaths) {
+ let arr = []
+ res.data.imgPaths.split(',').forEach(item => {
+ arr.push(process.env.VUE_APP_BASE_URL + '/' + item)
+ })
+ this.regionInfos.img.push(...arr)
+ }
+ }
+ this.showRegionDialog()
+ })
+ },
+ exportExcel() {
+ let params = this.queryInfo
+ this.$http.taskcardExport(params).then(res => {
+ downFiles(res, '任务打卡', 'xls')
+ })
+ },
+ changeTime(times) {
+ if (times.length) {
+ this.queryInfo.startTime = times[0]
+ this.queryInfo.endTime = times[1]
+ }
+ },
+ pageChange() {
+ this.getLists()
+ },
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+@import '@/style/layout-main.scss';
+
+.rule_form {
+ color: #fff;
+
+ ::v-deep .el-form-item__content {
+ display: block;
+ }
+
+ .image {
+ flex: none;
+ width: 91px;
+ height: 120px;
+ margin-right: 15px;
+ border-radius: 5px;
+ border: 1px solid #0c5983;
+
+ img {
+ width: 100%;
+ }
+ }
+}
+
+.regions {
+ text-align: center;
+
+ .region {
+ line-height: 34px;
+ margin-bottom: 16px;
+ background: rgba(56, 175, 247, .25);
+ cursor: pointer;
+ }
+}
+
+.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