Browse Source

fix: 完成监督检查任务管理模块,开发监督检查工程管理模块

sy-water-data-board-ui
panyuyi 1 year ago
parent
commit
2a53cc4096
  1. 1
      package.json
  2. 11
      src/api/dike/index.js
  3. 63
      src/api/sluice/index.js
  4. 8
      src/api/system/dict/data.js
  5. 704
      src/views/dike/runManage/enginerring/components/Drawer.vue
  6. 25
      src/views/dike/runManage/enginerring/inspectionRecords/index.vue
  7. 155
      src/views/sluice/runManage/enginerring/components/Drawer.vue
  8. 8
      src/views/sluice/runManage/enginerring/inspectionRecords/index.vue
  9. 4
      src/views/sluice/runManage/enginerring/patrolManage/index.vue
  10. 26
      src/views/sluice/runManage/enginerring/patrolRouteSettings/index.vue
  11. 25
      src/views/sluice/runManage/supervisionInspetion/methodsManage/itemsDetails.vue
  12. 723
      src/views/sluice/runManage/supervisionInspetion/projectManage/index.vue
  13. 251
      src/views/sluice/runManage/supervisionInspetion/projectManage/projectReport.vue
  14. 690
      src/views/sluice/runManage/supervisionInspetion/tasksManage/index.vue
  15. 432
      src/views/sluice/runManage/supervisionInspetion/tasksManage/tasksDetails.vue
  16. 5
      vue.config.js

1
package.json

@ -48,6 +48,7 @@
"core-js": "3.33.2",
"d3": "^5.0.0",
"d3-flextree": "^2.1.2",
"dayjs": "^1.11.10",
"echarts": "4.2.1",
"element-china-area-data": "^6.1.0",
"element-ui": "^2.15.6",

11
src/api/dike/index.js

@ -71,6 +71,15 @@ export function getProjectCheckingRel(dikeCode) {
})
}
// 获取检查项树数据
export function getCheckingDictTree() {
return request({
url: '/run/df/checking/tree',
method: 'get'
})
}
/*******************害堤动物********************/
// 害堤动物防治--堤防列表
export function getDikeAnimalProList(data) {
return request({
@ -132,7 +141,7 @@ export function updateDikeAnimalRecordStatus(data) {
})
}
/** 水雨情 */
/******************** 水雨情 *******************/
// 水雨情--获取工程列表
export function getDikeWaterRainProjectList(data) {
return request({

63
src/api/sluice/index.js

@ -2,7 +2,7 @@
import request from '@/utils/request'
// 获取巡查水闸列表
export function getSluiceProjectList(data) {
export function getRunProjectList(data) {
return request({
url: `/run/sz/project/list`,
method: 'post',
@ -166,7 +166,7 @@ export function getSluiceWaterRainRecordsList(data) {
}
/**** 监督检查办法模块 ****/
/****************监督检查办法模块************/
// 获取监督检查办法列表
export function getSuperviseWayList(data){
@ -256,6 +256,13 @@ export function updateSuperviseWayItemDetailsItemData(data){
data
})
}
// 督检查办法项目配置项删除
export function delSuperviseWayItemDetailsItemData(id){
return request({
url: `/run/sz/superviseWay/dataItem/${id}`,
method: 'delete',
})
}
// 督检查办法项目配置项更新
export function updateSuperviseWayItemData(data){
@ -265,3 +272,55 @@ export function updateSuperviseWayItemData(data){
data
})
}
// 督检查办法-获取启用中的督检查办法
export function getEnableSuperviseWayData(data){
return request({
url: `/run/sz/superviseWay/enable`,
method: 'get',
data
})
}
// 督检查办法-获取监督检测任务管理列表
export function getSuperviseWayTaskListData(data){
return request({
url: `/run/sz/superviseTask/list`,
method: 'post',
data
})
}
// 监督检查-删除任务
export function delSuperviseWayItemData(id){
return request({
url: `/run/sz/superviseTask/${id}`,
method: 'delete'
})
}
// 监督检查-新增任务
export function addNewSuperviseWayTasksData(data){
return request({
url: `/run/sz/superviseTask`,
method: 'post',
data
})
}
// 监督检查-获取任务详情
export function getSuperviseWayTaskDetailsData(id){
return request({
url: `/run/sz/superviseTask/${id}`,
method: 'get'
})
}
// 监督检查-修改任务
export function putSuperviseWayTaskDetailsData(data){
return request({
url: `/run/sz/superviseTask`,
method: 'put',
data
})
}

8
src/api/system/dict/data.js

@ -1,11 +1,13 @@
import request from '@/utils/request'
// 查询字典数据map
export function Data(query) {
export function getDictMapData(params) {
return request({
url: '/system/dict/data/map',
method: 'post',
data: query
method: 'get',
params:{
dictType: params
}
})
}

704
src/views/dike/runManage/enginerring/components/Drawer.vue

@ -1,150 +1,420 @@
<!-- 巡查记录抽屉 -->
<script>
import {getDikePatrolDetails} from '@/api/dike'
import { getDikePatrolDetails, getCheckingDictTree } from "@/api/dike";
import { getDictMapData } from "@/api/system/dict/data";
export default {
name: '',
name: "",
props: {
drawerVisible: {
type: Boolean,
default: false
}
default: false,
},
},
data() {
return {
dictMapData: {},
xcTreeData: [],
tableData: [
{ content: '', photos: '', isNormal:'', problems: '' }, // 1
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
{ content: '', photos: '', isNormal:'', problems: '' },
]
}
{ content: "", photos: "", isNormal: "", problems: "" }, // 1
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
{ content: "", photos: "", isNormal: "", problems: "" },
],
};
},
methods: {
test() {
let treeList = [
{
key: "df_xs_c_0",
value: "堤顶",
children: [
{
key: "df_xs_c_0_0",
value: "堤顶",
sort: 0,
children: [],
},
{
key: "df_xs_c_0_1",
value: "堤顶",
sort: 1,
children: [],
},
],
},
{
key: "df_xs_c_2",
value: "护坡",
children: [
{
key: "df_xs_c_2_0",
value: "混凝土护坡",
sort: 0,
children: [
{
key: "df_xs_c_2_0_0",
value: "混凝土护坡",
sort: 0,
children: [],
},
{
key: "df_xs_c_2_0_1",
value: "混凝土护坡",
sort: 1,
children: [],
},
],
},
{
key: "df_xs_c_2_1",
value: "砌石护坡",
sort: 1,
children: [
{
key: "df_xs_c_2_1_0",
value: "砌石护坡",
sort: 0,
children: [],
},
{
key: "df_xs_c_2_1_1",
value: "砌石护坡",
sort: 1,
children: [],
},
],
},
{
key: "df_xs_c_2_2",
value: "草皮护坡",
sort: 2,
children: [
{
key: "df_xs_c_2_2_0",
value: "草皮护坡",
sort: 0,
children: [],
},
{
key: "df_xs_c_2_2_1",
value: "草皮护坡",
sort: 1,
children: [],
},
],
},
],
},
{
key: "df_xs_c_3",
value: "堤脚",
children: [],
},
];
let resList = [
{
key: "df_xs_c_0",
value: "堤顶",
children: [
{
key: "df_xs_c_0_0",
value: "堤顶",
sort: 0,
children: [],
},
],
},
{
key: "df_xs_c_0",
value: "堤顶",
children: [
{
key: "df_xs_c_0_1",
value: "堤顶",
sort: 1,
children: [],
},
],
},
{
key: "df_xs_c_2",
value: "护坡",
children: [
{
key: "df_xs_c_2_0",
value: "混凝土护坡",
sort: 0,
children: [
{
key: "df_xs_c_2_0_0",
value: "混凝土护坡",
sort: 0,
children: [],
},
],
},
],
},
{
key: "df_xs_c_2",
value: "护坡",
children: [
{
key: "df_xs_c_2_0",
value: "混凝土护坡",
sort: 0,
children: [
{
key: "df_xs_c_2_0_1",
value: "混凝土护坡",
sort: 1,
children: [],
},
],
},
],
},
{
key: "df_xs_c_2",
value: "护坡",
children: [
{
key: "df_xs_c_2_1",
value: "砌石护坡",
sort: 1,
children: [
{
key: "df_xs_c_2_1_0",
value: "砌石护坡",
sort: 0,
children: [],
},
],
},
],
},
{
key: "df_xs_c_2",
value: "护坡",
children: [
{
key: "df_xs_c_2_1",
value: "砌石护坡",
sort: 1,
children: [
{
key: "df_xs_c_2_1_1",
value: "砌石护坡",
sort: 1,
children: [],
},
],
},
],
},
{
key: "df_xs_c_2",
value: "护坡",
children: [
{
key: "df_xs_c_2_2",
value: "草皮护坡",
sort: 2,
children: [
{
key: "df_xs_c_2_2_0",
value: "草皮护坡",
sort: 0,
children: [],
},
],
},
],
},
{
key: "df_xs_c_2",
value: "护坡",
children: [
{
key: "df_xs_c_2_2",
value: "草皮护坡",
sort: 2,
children: [
{
key: "df_xs_c_2_2_1",
value: "草皮护坡",
sort: 1,
children: [],
},
],
},
],
},
{
key: "df_xs_c_3",
value: "堤脚",
children: [],
},
];
function getDeep(item) {
let deep = 1;
function getChildren(item) {
if (item.children.length) {
deep++;
getChildren(item.children[0]);
}
}
getChildren(item);
return deep;
}
treeList.forEach((item) => {
//
let deep = getDeep(item);
console.log("deep >>>>> ", deep);
for (let i = 0; i < deep; i++) {
let newObj = { ...item };
newObj.children = [];
}
});
},
handleSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex < 4 || (rowIndex > 4 && rowIndex < 9) || (rowIndex > 8 && rowIndex < 11) || (rowIndex > 10 && rowIndex < 13) || (rowIndex > 12 && rowIndex < 18)) {
if (rowIndex === 0 || rowIndex === 5 || rowIndex === 9 || rowIndex === 11 || rowIndex === 13) {
if (
rowIndex < 4 ||
(rowIndex > 4 && rowIndex < 9) ||
(rowIndex > 8 && rowIndex < 11) ||
(rowIndex > 10 && rowIndex < 13) ||
(rowIndex > 12 && rowIndex < 18)
) {
if (
rowIndex === 0 ||
rowIndex === 5 ||
rowIndex === 9 ||
rowIndex === 11 ||
rowIndex === 13
) {
return {
rowspan: [4, 4, 2, 2, 5][[0, 5, 9, 11, 13].indexOf(rowIndex)],
colspan: 1
colspan: 1,
};
} else {
return {
rowspan: 0,
colspan: 0
colspan: 0,
};
}
}
}
},
getDetailsData(){
getDikePatrolDetails(this.$route.query.id).then(res=>{
console.log('getDikePatrolDetails >>>>> ', res)
if(res.data?.items){
this.tableData[0].photos = res.data.items[0]?.imgs || '无'
this.tableData[0].content = res.data.items[0]?.content || ''
this.tableData[0].problems = res.data.items[0]?.problem || '无'
this.tableData[0].isNormal = res.data.items[0]?.status?'是':'否'
}
})
getDetailsData() {
getDikePatrolDetails(this.$route.query.id).then((res) => {
console.log("getDikePatrolDetails >>>>> ", res);
if (res.data?.items) {
this.tableData[0].photos = res.data.items[0]?.imgs || "无";
this.tableData[0].content = res.data.items[0]?.content || "";
this.tableData[0].problems = res.data.items[0]?.problem || "无";
this.tableData[0].isNormal = res.data.items[0]?.status ? "是" : "否";
}
});
},
created(){
this.getDetailsData()
}
}
},
created() {
getCheckingDictTree("df_xs_c_classfy").then((res) => {
this.xcTreeData = res?.data || [];
});
getDictMapData("df_xs_c_classfy").then((res) => {
this.dictMapData = res?.data || {};
});
},
mounted() {
this.getDetailsData();
this.test();
},
};
</script>
<template>
<div>
<div class="masking" :class="drawerVisible ? 'masking-in' : ''">
<div class="close-btn" @click="$emit('close-drawer');
">
<div class="close-btn" @click="$emit('close-drawer')">
<i class="el-icon-arrow-right"></i>
</div>
<div class="drawer-title">
<span>巡查记录</span>
</div>
<div class="center-table">
<el-table :data="tableData" height="636" style="width: 100%" :span-method="handleSpanMethod"
header-cell-class-name="table-header-cell">
<el-table-column align="center" class="first-column" label="工程部位" width="264">
<template slot-scope="scope">
<div v-if="scope.$index == 0">
<div class="box1">
<div class="item1">堤身</div>
<div class="item2">堤顶</div>
<div class="item3">堤坡</div>
<div class="item4">迎水坡</div>
<div class="item5">背水坡</div>
<div class="item6">护坡结构</div>
<div class="item7">堤脚</div>
</div>
<el-row class="flex l-t-border">
<el-col :span="8" class="flex justify-center items-center r-b-border">
<div>工程部位</div>
</el-col>
<el-col :span="8" class="flex justify-center items-center r-b-border"
><div>问题记录</div></el-col
>
<el-col :span="8" class="flex justify-center items-center r-b-border"
><div>打卡图片</div></el-col
>
</el-row>
<el-row
v-for="(item, index) in xcTreeData"
:key="item.key"
class="flex"
>
<el-col :span="8">
<div class="flex w-full l-t-border">
<div class="flex flex-1 items-center p-2 r-b-border">
{{ index + 1 }},{{ item.value }}
</div>
<div v-if="scope.$index == 4">护坡地和堤防工程保护范围</div>
<div v-if="scope.$index == 5">
<div class="box2">
<div class="item1">堤岸防护工程</div>
<div class="item2">坡式</div>
<div class="item3">墙式</div>
<div class="item4">护脚</div>
<div class="item5">滩岸</div>
<div v-if="item.children.length" class="flex flex-1 flex-col">
<div
class="flex"
v-for="item2 in item.children"
:key="item2.key"
>
<div class="flex flex-1 items-center p-2 r-b-border">
{{ item2.value }}
</div>
<div
v-if="item2.children.length"
class="flex flex-1 flex-col"
>
<div
class="flex"
v-for="item3 in item2.children"
:key="item3.key"
>
<div class="flex flex-1 items-center p-2 r-b-border">
{{ item3.value }}
</div>
<div v-if="scope.$index == 9">
<div class="box3">
<div class="item1">防渗排水设施</div>
<div class="item2">防渗设施</div>
<div class="item3">排水设施</div>
</div>
</div>
<div v-if="scope.$index == 11">
<div class="box3">
<div class="item1">交叉建筑物及接连段</div>
<div class="item2">连接段</div>
<div class="item3">交叉建筑物</div>
</div>
</div>
<div v-if="scope.$index == 13">
<div class="box4">
<div class="item1">管理设施</div>
<div class="item2">观测设施</div>
<div class="item3">交通通信设施</div>
<div class="item4">信息化设施</div>
<div class="item5">标识标牌</div>
<div class="item6">管理房</div>
</div>
</div>
<div v-if="scope.$index == 18">生物防护工程</div>
<div v-if="scope.$index == 19">其他</div>
</template>
</el-table-column>
<el-table-column prop="content" align="center" class-name="column-item" label="检查内容" min-width="200" />
<el-table-column prop="photos" align="center" class-name="column-item"
label="打卡图片" width="150" />
<el-table-column align="center" class-name="column-item" label="检查记录">
<el-table-column prop="isNormal" align="center" class-name="column-item" label="是否正常" width="150" />
<el-table-column prop="problems" align="center" class-name="column-item" label="存在问题" width="150" />
</el-table-column>
</el-table>
</el-col>
<el-col :span="8"></el-col>
<el-col :span="8"></el-col>
</el-row>
</div>
</div>
</div>
@ -169,7 +439,7 @@ export default {
top: 48px;
left: -16px;
background-color: #fff;
border: 1px solid #DCDCDC;
border: 1px solid #dcdcdc;
border-radius: 50%;
display: flex;
justify-content: center;
@ -191,214 +461,6 @@ export default {
.center-table {
padding: 16px;
.box1 {
height: 352x;
display: grid;
grid-template-columns: repeat(3, 88px);
grid-template-rows: repeat(8, 44px);
.item1 {
grid-row: 1 / 9;
grid-column: 1;
line-height: 352px;
justify-content: center;
align-content: center;
border-right: 1px solid #f4f9f7;
}
.item2 {
grid-row: 1/3;
grid-column: 2/ 4;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item3 {
grid-row: 3/7;
grid-column: 2;
line-height: 176px;
justify-content: center;
align-content: center;
border-right: 1px solid #f4f9f7;
}
.item4 {
line-height: 44px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item5 {
line-height: 44px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item6 {
grid-row: 7/5;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
.item7 {
grid-row: 9/7;
grid-column: 2/4;
line-height: 88px;
justify-content: center;
align-content: center;
border-top: 1px solid #f4f9f7;
}
}
.box2 {
height: 352px;
display: grid;
grid-template-columns: repeat(3, 88px);
grid-template-rows: repeat(8, 44px);
.item1 {
grid-row: 1 / 9;
grid-column: 1/3;
line-height: 352px;
justify-content: center;
align-content: center;
border-right: 1px solid #f4f9f7;
}
.item2 {
grid-row: 1/3;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item3 {
grid-row: 3/5;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item4 {
grid-row: 5/7;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item5 {
grid-row: 7/9;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
}
.box3 {
height: 176px;
display: grid;
grid-template-columns: repeat(3, 88px);
grid-template-rows: repeat(8, 44px);
.item1 {
grid-row: 1 / 5;
grid-column: 1/3;
line-height: 176px;
justify-content: center;
align-content: center;
border-right: 1px solid #f4f9f7;
}
.item2 {
grid-row: 1/3;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item3 {
grid-row: 3/5;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
}
.box4 {
height: 440px;
display: grid;
grid-template-columns: repeat(3, 88px);
grid-template-rows: repeat(8, 44px);
.item1 {
grid-row: 1 / 10;
grid-column: 1/3;
line-height: 440px;
justify-content: center;
align-content: center;
border-right: 1px solid #f4f9f7;
}
.item2 {
grid-row: 1/3;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item3 {
grid-row: 3/5;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
.item4 {
grid-row: 5/7;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
.item5 {
grid-row: 7/9;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
.item6 {
grid-row: 9/11;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
}
}
}
@ -406,26 +468,12 @@ export default {
left: 50%;
}
/deep/.el-table__body tr td {
padding: 0;
height: 88px !important;
}
/deep/ .cell {
padding: 0 !important;
}
/deep/.column-item {
padding-left: 10px !important;
}
/deep/.column-item .cell {
padding: 18;
max-height: 70px !important;
overflow: auto;
.l-t-border {
border-left: 1px solid #eee;
border-top: 1px solid #eee;
}
/deep/.table-header-cell {
background-color: #fff !important;
.r-b-border {
border-right: 1px solid #eee;
border-bottom: 1px solid #eee;
}
</style>

25
src/views/dike/runManage/enginerring/inspectionRecords/index.vue

@ -1,5 +1,7 @@
<!-- 巡查记录-堤防 -->
<script>
import { getDictMapData } from "@/api/system/dict/data";
import { postDFInspectionRecordsList } from "@/api/management";
export default {
name: "InspectionItems",
@ -63,17 +65,19 @@ export default {
this.searchInput = "";
this.getTableData();
},
// label
getDictMapLabel(value) {
return this.mapLabelData[value] || "???";
},
},
created() {
getDictMapData("df_xs_c_classfy").then((res) => {
this.mapLabelData = res?.data || {};
});
},
mounted() {
//
this.getTableData();
//
this.getDicts("df_xs_c_classfy").then((res) => {
if (res?.data && Array.isArray(res.data)) {
console.log("df_xs_c_classfy >>>>> ", res.data);
}
});
},
};
</script>
@ -109,9 +113,9 @@ export default {
v-if="scope.row.status != '0'"
style="display: flex; justify-content: center; flex-wrap: wrap"
>
<div v-if="scope.row.parts" class="normal">正常</div>
<div v-if="!scope.row.parts.length" class="normal">正常</div>
<div v-else v-for="item in scope.row.parts" class="abnormal">
{{ item }}
{{ getDictMapLabel(item) }}
</div>
</div>
</template>
@ -196,12 +200,13 @@ export default {
}
.abnormal {
width: 40px;
width: auto;
border-radius: 5px;
background-color: #feebeb;
color: #d9001b;
margin-right: 10px;
margin-bottom: 10px;
padding: 0 2px;
}
}
}

155
src/views/sluice/runManage/enginerring/components/Drawer.vue

@ -1,75 +1,113 @@
<!-- 巡查记录抽屉 -->
<script>
import { getCheckingDictTree } from "@/api/dike";
export default {
name: '',
name: "",
props: {
drawerVisible: {
type: Boolean,
default: false
}
default: false,
},
},
data() {
return {
mapLabelData: {},
treeLabelData: [],
tableData: [
{ content: '张三张三张三张三张三张三张三张三张三张三', photos: '编辑', delete: '删除' },
{ content: '张三张三张三张三张三张三张三张三张三张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
]
}
{
content: "张三张三张三张三张三张三张三张三张三张三",
photos: "编辑",
delete: "删除",
},
{
content: "张三张三张三张三张三张三张三张三张三张三",
photos: "编辑",
delete: "删除",
},
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
{ content: "张三", photos: "编辑", delete: "删除" },
],
};
},
methods: {
handleSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex < 4 || (rowIndex > 4 && rowIndex < 9) || (rowIndex > 8 && rowIndex < 11) || (rowIndex > 10 && rowIndex < 13) || (rowIndex > 12 && rowIndex < 18)) {
if (rowIndex === 0 || rowIndex === 5 || rowIndex === 9 || rowIndex === 11 || rowIndex === 13) {
if (
rowIndex < 4 ||
(rowIndex > 4 && rowIndex < 9) ||
(rowIndex > 8 && rowIndex < 11) ||
(rowIndex > 10 && rowIndex < 13) ||
(rowIndex > 12 && rowIndex < 18)
) {
if (
rowIndex === 0 ||
rowIndex === 5 ||
rowIndex === 9 ||
rowIndex === 11 ||
rowIndex === 13
) {
return {
rowspan: [4, 4, 2, 2, 5][[0, 5, 9, 11, 13].indexOf(rowIndex)],
colspan: 1
colspan: 1,
};
} else {
return {
rowspan: 0,
colspan: 0
colspan: 0,
};
}
}
}
},
}
}
},
created() {
getCheckingDictTree().then((res) => {
console.log(res);
treeLabelData = res.data;
});
},
};
</script>
<template>
<div>
<div class="masking" :class="drawerVisible ? 'masking-in' : ''">
<div class="close-btn" @click="$emit('close-drawer');
">
<div class="close-btn" @click="$emit('close-drawer')">
<i class="el-icon-arrow-right"></i>
</div>
<div class="drawer-title">
<span>巡查记录</span>
</div>
<div class="center-table">
<el-table :data="tableData" height="636" style="width: 100%" :span-method="handleSpanMethod"
header-cell-class-name="table-header-cell">
<el-table-column align="center" class="first-column" label="工程部位" width="264">
<el-table
:data="tableData"
height="636"
style="width: 100%"
:span-method="handleSpanMethod"
header-cell-class-name="table-header-cell"
>
<el-table-column
align="center"
class="first-column"
label="工程部位"
width="264"
>
<template slot-scope="scope">
<div v-if="scope.$index == 0">
<div class="box1">
@ -120,12 +158,41 @@ export default {
<div v-if="scope.$index == 19">其他</div>
</template>
</el-table-column>
<el-table-column prop="content" align="center" class-name="column-item" label="检查内容" min-width="200" />
<el-table-column v-if="!this.$route.query.editor" prop="photos" align="center" class-name="column-item"
label="打卡图片" width="150" />
<el-table-column v-if="!this.$route.query.editor" align="center" class-name="column-item" label="检查记录">
<el-table-column prop="isNormal" align="center" class-name="column-item" label="是否正常" width="150" />
<el-table-column prop="problems" align="center" class-name="column-item" label="存在问题" width="150" />
<el-table-column
prop="content"
align="center"
class-name="column-item"
label="检查内容"
min-width="200"
/>
<el-table-column
v-if="!this.$route.query.editor"
prop="photos"
align="center"
class-name="column-item"
label="打卡图片"
width="150"
/>
<el-table-column
v-if="!this.$route.query.editor"
align="center"
class-name="column-item"
label="检查记录"
>
<el-table-column
prop="isNormal"
align="center"
class-name="column-item"
label="是否正常"
width="150"
/>
<el-table-column
prop="problems"
align="center"
class-name="column-item"
label="存在问题"
width="150"
/>
</el-table-column>
</el-table>
</div>
@ -152,7 +219,7 @@ export default {
top: 48px;
left: -16px;
background-color: #fff;
border: 1px solid #DCDCDC;
border: 1px solid #dcdcdc;
border-radius: 50%;
display: flex;
justify-content: center;
@ -175,7 +242,6 @@ export default {
.center-table {
padding: 16px;
.box1 {
height: 352x;
display: grid;
@ -231,7 +297,6 @@ export default {
align-content: center;
}
.item7 {
grid-row: 9/7;
grid-column: 2/4;

8
src/views/sluice/runManage/enginerring/inspectionRecords/index.vue

@ -1,11 +1,14 @@
<!-- 巡查记录-水闸 -->
<script>
import { postSZInspectionRecordsList } from "@/api/management";
import { getDictMapData } from "@/api/system/dict/data";
export default {
name: "InspectionItems",
data() {
return {
searchInput: "",
mapLabelData: {},
tableData: [], //
pageData: {
pageNum: 1, //
@ -59,6 +62,11 @@ export default {
this.getTableData();
},
},
created() {
getDictMapData("df_xs_c_classfy").then((res) => {
this.mapLabelData = res?.data || {};
});
},
mounted() {
//
this.getTableData();

4
src/views/sluice/runManage/enginerring/patrolManage/index.vue

@ -170,7 +170,7 @@
</template>
<script>
import {
getSluiceProjectList,
getRunProjectList,
postProjectChecking,
postSZInspectionProjectList,
getProjectCheckingRel,
@ -253,7 +253,7 @@ export default {
},
//
getTableData() {
getSluiceProjectList({
getRunProjectList({
pageNum: this.pageData.pageNum,
pageSize: this.pageData.pageSize,
data: {

26
src/views/sluice/runManage/enginerring/patrolRouteSettings/index.vue

@ -1,28 +1,30 @@
<!-- 巡查路线设置-水闸 -->
<script>
import GaoDeMap from "../components/GaoDeMap.vue"
import GaoDeMap from "../components/GaoDeMap.vue";
export default {
name: '',
name: "",
components: {
GaoDeMap
GaoDeMap,
},
data() {
return {
selectTab: 'first'
}
selectTab: "first",
};
},
methods: {
}
}
methods: {},
};
</script>
<template>
<div class="slider-right">
<div class="top-title">
<el-button class="back-btn" size="mini" @click="
$router.go(-1);" icon="el-icon-back" />
{{ $route.query.name || '基础信息管理' }}
<el-button
class="back-btn"
size="mini"
@click="$router.go(-1)"
icon="el-icon-back"
/>
{{ $route.query.name || "基础信息管理" }}
</div>
<div class="map-box">
<el-tabs v-model="selectTab" class="tab">

25
src/views/sluice/runManage/supervisionInspetion/methodsManage/itemsDetails.vue

@ -119,7 +119,10 @@
<el-button type="text" v-else @click="handleSaveItem(item)"
>保存</el-button
>
<el-button type="text" v-if="questList.length > 1"
<el-button
type="text"
v-if="questList.length > 1"
@click="handleDelItem(item, index)"
>删除</el-button
>
</div>
@ -136,6 +139,7 @@ import {
addSuperviseWayItemDetailsItemData,
updateSuperviseWayItemDetailsItemData,
updateSuperviseWayItemData,
delSuperviseWayItemDetailsItemData,
} from "@/api/sluice";
export default {
data() {
@ -163,7 +167,6 @@ export default {
};
});
if (this.questList.length <= 0) {
console.log("????");
this.questList.push({
projectName: this.itemName,
content: "",
@ -220,6 +223,24 @@ export default {
});
}
},
//
handleDelItem(item) {
if (!item.id) {
this.questList = this.questList.filter((v) => v.id);
} else {
this.$confirm("是否删除该问题项", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
delSuperviseWayItemDetailsItemData(item.id).then((res) => {
this.questList = this.questList.filter((v) => v.id !== item.id);
});
})
.catch(() => {});
}
},
handleSaveTitle() {
updateSuperviseWayItemData({
id: this.$route.query.id,

723
src/views/sluice/runManage/supervisionInspetion/projectManage/index.vue

@ -1,20 +1,17 @@
<!-- 监督检查办法管理-堤防 -->
<!-- 监督检查工程管理 -->
<script>
import dayjs from "dayjs";
import {
putDFPreventionControlPlan,
deleteDFMaintenancePlan,
postDFNewPreventionControlPlan,
postDFPreventionControlPlanList,
getDFPreventionControlPlan,
listUser,
} from "@/api/management";
import { listDikeInfo } from "@/api/yg/dikeInfo";
delSuperviseWayItemData,
getSuperviseWayTaskListData,
} from "@/api/sluice";
export default {
name: "InspectionItems",
name: "projectManage",
data() {
return {
searchDikeName: "",
searchTaskName: "",
searchManageName: "",
searchProjectName: "",
paramsData: {
name: "",
type: null,
@ -22,15 +19,6 @@ export default {
selectLevel: "",
selectType: "",
},
dialogVisible: false,
prohibitEditing: false,
dikeTypeList: [],
personnelList: [], //
patrolType: [], //
workMonth: [], //
embankmentList: [], //
dikeLevel: [], //
controlType: [], //
tableData: [], //
pageData: {
pageNum: 1, //
@ -38,259 +26,60 @@ export default {
pageSizes: [10, 20, 50, 100],
total: 0, //
},
ruleForm: {
dikeCode: "",
dikeName: "",
name: "",
type: "",
instruction: "",
month: "",
details: [],
cycleType: "",
frequency: "",
operators: [],
isReminder: 1,
otherConfig: {
selectUser: [],
week: "",
day: "",
},
reminderTime: "",
},
rules: {
dikeCode: [
{ required: true, message: "请选择堤防名称", trigger: "blur" },
],
name: [
{ required: true, message: "请输入防治计划名称", trigger: "blur" },
{ max: 100, message: "名称最长为100个字符", trigger: "blur" },
],
type: [
{ required: true, message: "请选择防治类型", trigger: "change" },
],
instruction: [
{ required: true, message: "请输入防治说明", trigger: "change" },
],
month: [
{ required: true, message: "请选择工作月份", trigger: "change" },
],
cycleType: [
{ required: true, message: "请选择提醒日期", trigger: "change" },
],
frequency: [
{ required: true, message: "请输入次数", trigger: "change" },
],
"otherConfig.selectUser": [
{ required: true, message: "请选择责任人", trigger: "change" },
],
"otherConfig.week": [
{ required: true, message: "请选择星期", trigger: "change" },
],
"otherConfig.day": [
{ required: true, message: "请输入", trigger: "change" },
],
reminderTime: [
{ required: true, message: "请选择提醒时间", trigger: "change" },
],
},
};
},
watch: {
dialogVisible(newVal, oldVal) {
if (oldVal) {
this.prohibitEditing = false;
}
},
},
methods: {
//
resolveDikeGrad(dikeGrad) {
return (
this.dikeLevel.find((v) => v.dictValue === dikeGrad)?.dictLabel ||
dikeGrad
);
},
//
resolveDikeType(dikeType) {
return (
this.dikeTypeList.find((v) => v.dictValue == dikeType)?.dictLabel ||
dikeType
);
},
//
resolveType(type) {
return (
this.controlType.find((v) => v.dictValue == type)?.dictLabel || type
);
},
//
openAddDialog() {
// //
// this.getDicts("xc_w_month").then((res) => {
// this.workMonth = res.data;
// });
// this.getDicts("xs_cycle_type").then((res) => {
// this.patrolType = res.data;
// });
// if (this.ruleForm.details.length <= 0) {
// this.ruleForm.details.push({
// constructionDate: "",
// jobContent: "",
// planDays: 0,
// });
// }
// this.dialogVisible = true;
// setTimeout(() => {
// this.$refs.ruleForm.resetFields();
// }, 0);
},
//
deleteTableItem(row) {
deleteDFMaintenancePlan(row.id).then((res) => {
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
this.$message.success("删除成功");
});
},
//
deleteWorkTableItem(id) {
const index = this.workTable.findIndex((item) => item.id === id);
if (index !== -1) {
this.workTable.splice(index, 1);
}
},
//
searchUser(e) {
listUser({
data: {
timeView: {
timeField: "create_time",
},
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
},
cv: {
name: "nickName",
type: "like",
value: e,
//
handleCheck(row) {
this.$router.push({
path: "supervisionProjectReport",
query: {
type: "preview",
id: row.id,
},
pageSize: 100,
pageNum: 1,
}).then((res) => {
this.personnelList = res.records;
});
},
//
viewOrEditPlanDetails(row, edit = false) {
if (!edit) {
this.prohibitEditing = true;
}
getDFPreventionControlPlan(row.id).then((res) => {
this.dialogVisible = true;
setTimeout(() => {
this.ruleForm = res.data;
this.ruleForm.reminderCycle = res.data.instruction + res.data.month;
}, 30);
});
},
changeOtherConfigSelectUser(idsArr) {
if (idsArr?.length) {
this.ruleForm.operators =
this.personnelList
.filter((v) => idsArr.includes(v.nickName))
?.map((v) => ({
name: v.nickName,
uid: v.id,
})) || [];
} else {
this.ruleForm.operators = [];
}
//
handleEdit(row) {
this.$router.push({
path: "supervisionProjectReport",
query: {
type: "edit",
id: row.id,
},
//
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.ruleForm.cycleType = parseFloat(this.ruleForm.cycleType);
this.ruleForm.frequency = parseFloat(this.ruleForm.frequency);
this.ruleForm.month = parseFloat(this.ruleForm.month);
if (this.ruleForm.id) {
putDFPreventionControlPlan(this.ruleForm).then(() => {
this.getTableData();
this.dialogVisible = false;
this.$message({
message: "保存成功",
type: "success",
});
});
} else {
postDFNewPreventionControlPlan(this.ruleForm).then(() => {
console.log("保存成功");
this.getTableData();
this.dialogVisible = false;
this.$message({
message: "保存成功",
type: "success",
});
});
}
} else {
console.log("校验不通过");
return false;
}
});
},
//
resetForm(formName) {
this.$refs[formName].resetFields();
this.dialogVisible = false;
},
// dialog
handleClose(ruleForm = "ruleForm") {
console.log("关闭");
this.$refs[ruleForm].resetFields();
this.ruleForm = {
dikeCode: "",
dikeName: "",
name: "",
type: "",
instruction: "",
month: "",
details: [],
cycleType: "",
isReminder: true,
selectUser: [],
otherConfig: {
selectUser: [],
week: "",
day: "",
},
week: 1,
date: 1,
reminderTime: "",
};
},
//
addWorkItem() {
this.ruleForm.details.push({
jobContent: "",
constructionDate: "",
planDays: "",
});
// doneTime
calcDeadLine(time) {
if (!time) return "-";
let days = dayjs(time).diff(dayjs(), "day");
let seconds = 0;
if (days <= 0) {
seconds = dayjs(time).diff(dayjs(), "second");
}
return days > 0
? days
: seconds > 0
? 1
: dayjs(time).diff(dayjs(), "day") - 1;
},
//
getTableData() {
postDFPreventionControlPlanList({
getSuperviseWayTaskListData({
data: {
timeView: {
timeField: "create_time",
},
name: this.paramsData.name,
type: this.paramsData.type,
dikeName: this.paramsData.dikeName,
dikeGrad: this.paramsData.dikeGrad,
dikeType: this.paramsData.dikeType,
},
cv: {
name: "name",
type: "like",
value: this.name,
name: this.searchTaskName || null,
engineeringManagementUnit: this.searchManageName || null,
},
params: {
orderBy: "create_time",
@ -300,55 +89,20 @@ export default {
pageNum: this.pageData.pageNum,
}).then((res) => {
if (res) {
this.tableData = res.records;
this.tableData = res.records.map((item) => {
item.deadTime = this.calcDeadLine(item.doneTime);
return item;
});
this.pageData.total = res.total;
}
});
},
//
resetSearch() {
this.name = "";
this.selectStatus = "2";
this.searchTaskName = null;
this.searchManageName = null;
this.getTableData();
},
//
handleOpenMap() {},
//
handleOpenDetail() {},
//
getEmbData() {
listDikeInfo({
pageNum: 1,
pageSize: 20,
ids: null,
data: {
embankmentName: null,
endStationNumber: null,
embankmentType: null,
},
//
params: {
//
orderBy: "create_time",
// descasc
sort: "desc",
},
}).then((res) => {
this.embankmentList = res?.records || [];
});
},
handleChangeDike(value) {
console.log("value >>>>> ", value);
this.ruleForm.name = this.ruleForm.dikeCode;
let res = this.embankmentList.find((v) => v.dikeCode === value);
console.log("res >>>>> ", res);
this.ruleForm.dikeName = res?.dikeName;
// this.dikeDetailsDialog.id = res?.id || ''
},
//
handleDel(row) {
console.log("row >>>>> ", row);
},
},
created() {
this.getDicts("embankment_type").then((response) => {
@ -358,13 +112,6 @@ export default {
mounted() {
//
this.getTableData();
this.getEmbData();
this.getDicts("embankment_level").then((res) => {
this.dikeLevel = res.data;
});
this.getDicts("dh_jh_type").then((res) => {
this.controlType = res.data;
});
},
};
</script>
@ -376,40 +123,55 @@ export default {
<span>任务名称</span>
<el-input
class="search-input ml-10"
v-model="searchDikeName"
v-model="searchTaskName"
placeholder="请输入名称"
/>
<span class="ml-10">管理单位</span>
<el-input
class="search-input ml-10"
v-model="searchDikeName"
v-model="searchManageName"
placeholder="请输入"
/>
<span class="ml-10">工程对象</span>
<el-input
class="search-input ml-10"
v-model="searchDikeName"
v-model="searchProjectName"
placeholder="请输入"
/>
<el-button class="search-btn" type="success">搜索</el-button>
<el-button class="search-btn" type="success" @click="getTableData()"
>搜索</el-button
>
<el-button class="search-btn" @click="resetSearch">重置</el-button>
<el-table class="table mt-16" height="640" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="60" />
<el-table-column prop="name" align="center" label="检查任务" />
<el-table-column prop="createTime" align="center" label="创建时间">
</el-table-column>
<el-table-column prop="updateTime" align="center" label="更新时间" />
<el-table-column prop="unit" align="center" label="管理单位" />
<el-table-column
prop="status"
prop="engineeringManagementUnit"
align="center"
sortable
label="当前状态"
label="管理单位"
/>
<el-table-column prop="address" align="center" label="操作">
<el-table-column prop="wagaName" align="center" label="工程对象">
</el-table-column>
<el-table-column prop="doneTime" align="center" label="完成时间">
<template slot-scope="scope">
<el-button type="text" size="small">编辑</el-button>
<el-button type="text" size="small" @click="handleDel(scope.row)"
>删除</el-button
<span v-if="scope.row.state == '1'">完成</span>
<span
v-else
:class="{
'warning-time':
scope.row.deadTime != '-' && scope.row.deadTime <= 1,
}"
>{{ scope.row.deadTime }}</span
>
</template>
</el-table-column>
<el-table-column prop="operate" align="center" label="操作">
<template slot-scope="scope">
<el-button type="text" size="small" @click="handleCheck(scope.row)"
>查看</el-button
>
<el-button type="text" size="small" @click="handleEdit(scope.row)"
>巡查</el-button
>
</template>
</el-table-column>
@ -422,315 +184,11 @@ export default {
:page-sizes="pageData.pageSizes"
layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total"
@size-change="getTableData()"
@size-change="(e) => handlePageSizeChange(e)"
@current-change="(e) => handleCurrentPageChange(e)"
>
</el-pagination>
</div>
<!-- 弹窗 -->
<el-dialog
title="新增/编辑防治计划"
@close="handleClose"
:visible.sync="dialogVisible"
:close-on-click-modal="false"
width="720px"
>
<div style="display: flex; margin-bottom: 16px">
<div
style="
width: 5px;
height: 16px;
background-color: #31a08e;
margin-right: 8px;
"
></div>
<span style="font-weight: 600">基础信息</span>
</div>
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="100px"
>
<el-form-item label-width="120px" label="堤防名称" prop="dikeCode">
<!-- <el-input style="width: 202px;" v-model="ruleForm.dikeCode" placeholder="请输入" :disabled="prohibitEditing" /> -->
<el-select
v-model="ruleForm.dikeCode"
placeholder="请选择"
@change="handleChangeDike"
:disabled="prohibitEditing"
>
<el-option
v-for="item in embankmentList"
:label="item.dikeName"
:value="item.dikeCode"
:key="item.id"
></el-option>
</el-select>
<el-button
:disabled="!ruleForm.dikeCode"
class="!m-6"
type="success"
size="small"
@click="handleOpenDetail"
>详情</el-button
>
<el-button
:disabled="!ruleForm.dikeCode"
class="!ml-6"
type="success"
size="small"
@click="handleOpenMap"
>打开地图</el-button
>
</el-form-item>
<div style="display: flex">
<el-form-item label-width="120px" label="防治计划名称" prop="name">
<el-input
style="width: 202px"
v-model="ruleForm.name"
placeholder="请输入"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item label-width="120px" label="防治类型" prop="type">
<el-select
v-model="ruleForm.type"
placeholder="请选择"
:disabled="prohibitEditing"
>
<el-option
v-for="item in controlType"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option>
</el-select>
</el-form-item>
</div>
<el-form-item label-width="120px" label="防治说明" prop="instruction">
<el-input
v-model="ruleForm.instruction"
type="textarea"
placeholder=" 请输入"
:disabled="prohibitEditing"
/>
</el-form-item>
<div style="display: flex; margin-bottom: 16px">
<div
style="
width: 5px;
height: 16px;
background-color: #31a08e;
margin-right: 8px;
"
></div>
<span style="font-weight: 600">工作内容</span>
</div>
<el-form-item label-width="120px" label="工作月份" prop="month">
<el-select
v-model="ruleForm.month"
placeholder="请选择"
:disabled="prohibitEditing"
>
<el-option
v-for="item in workMonth"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
/>
</el-select>
</el-form-item>
<el-table
style="margin-bottom: 22px"
max-height="330"
:data="ruleForm.details"
border
>
<el-table-column
type="index"
align="center"
label="序号"
width="50"
/>
<el-table-column prop="jobContent" align="center" label="工作内容">
<template slot-scope="scope">
<el-input
v-model="scope.row.jobContent"
placeholder="请输入工作内容"
/>
</template>
</el-table-column>
<el-table-column
prop="constructionDate"
align="center"
label="施工日期"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.constructionDate"
placeholder="请输入施工日期"
/>
</template>
</el-table-column>
<el-table-column
prop="planDays"
align="center"
label="计划工日"
width="80"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.planDays"
placeholder="请输入计划工日"
/>
</template>
</el-table-column>
<el-table-column align="center" label="操作" width="100">
<template slot-scope="scope">
<el-button
style="margin-right: 9px"
type="text"
size="small"
@click="addWorkItem"
>添加</el-button
>
<el-popconfirm
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
icon-color="red"
title="确定删除吗?"
@confirm="deleteWorkTableItem(scope.row.id)"
>
<el-button
v-if="ruleForm.details.length > 1"
style="color: red"
type="text"
size="small"
slot="reference"
>删除</el-button
>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<div style="display: flex">
<el-form-item label-width="120px" label="提醒周期" prop="frequency">
<el-input
style="width: 90px"
v-model="ruleForm.frequency"
placeholder="请输入"
/>
/
</el-form-item>
<el-form-item label-width="10px" prop="cycleType">
<el-select
style="width: 90px"
v-model="ruleForm.cycleType"
placeholder="请选择"
>
<el-option
v-for="item in patrolType"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
</el-select>
/
</el-form-item>
<el-form-item
label-width="100px"
label="责任人"
prop="otherConfig.selectUser"
>
<el-select
v-model="ruleForm.otherConfig.selectUser"
multiple
filterable
remote
:remote-method="searchUser"
value-key="id"
placeholder="请输入关键词搜索用户"
prop="selectUser"
@change="changeOtherConfigSelectUser"
>
<el-option
v-for="item in personnelList"
:key="item.id"
:label="item.nickName"
:value="item.nickName"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div style="display: flex">
<el-form-item label-width="120px" label="消息提醒" prop="isReminder">
<el-switch
v-model="ruleForm.isReminder"
:active-value="1"
:inactive-value="0"
active-color="#31a08e"
inactive-color="#dcdfe6"
>
</el-switch>
</el-form-item>
<div style="display: flex; flex-direction: column">
<el-form-item
v-if="ruleForm.isReminder && ruleForm.cycleType === '1'"
label-width="120px"
label="提醒时间"
prop="otherConfig.week"
>
<el-radio-group v-model="ruleForm.otherConfig.week">
<el-radio :label="1">星期一</el-radio>
<el-radio :label="2">星期二</el-radio>
<el-radio :label="3">星期三</el-radio>
<el-radio :label="4">星期四</el-radio>
<el-radio :label="5">星期五</el-radio>
<el-radio :label="6">星期六</el-radio>
<el-radio :label="7">星期日</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-if="ruleForm.isReminder && ruleForm.cycleType === '0'"
label-width="120px"
label="提醒时间"
prop="otherConfig.day"
>
<div>
每月<el-input
style="width: 202px"
v-model="ruleForm.otherConfig.day"
/>
</div>
</el-form-item>
<el-form-item
label-width="120px"
:label="ruleForm.cycleType === '2' ? '提醒时间' : ''"
prop="reminderTime"
>
<el-time-picker
v-model="ruleForm.reminderTime"
value-format="yyyy-MM-dd hh:mm:ss"
placeholder="选择时间"
/>
</el-form-item>
</div>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="resetForm('ruleForm')"> </el-button>
<el-button
v-if="!prohibitEditing"
size="mini"
type="primary"
@click="submitForm('ruleForm')"
>保存</el-button
>
</div>
</el-dialog>
</div>
</template>
@ -771,23 +229,10 @@ export default {
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
.warning-time {
color: red;
}
}
}
/deep/.el-input__count {
height: 15px;
line-height: 15px;
margin-right: 10px;
margin-bottom: -4px;
}
</style>

251
src/views/sluice/runManage/supervisionInspetion/projectManage/projectReport.vue

@ -0,0 +1,251 @@
<!-- 监督检查工程管理 -->
<script>
import { getEnableSuperviseWayData } from "@/api/sluice";
export default {
name: "projectReport",
data() {
return {
activeName: "",
formData: [],
};
},
computed: {
//
calcStep() {
if (this.formData.length) {
let sum = this.formData.reduce((prev, cur) => {
return prev + cur.children.length;
}, 0);
let hasDoneLevel = this.formData.reduce((prev, cur) => {
return (
prev +
cur.children.reduce((prev2, cur2) => {
return prev2 + (cur2.level ? 1 : 0);
}, 0)
);
}, 0);
console.log("hasDoneLevel >>>>> ", hasDoneLevel);
return Math.floor((hasDoneLevel / sum) * 100);
} else {
return 0;
}
},
},
methods: {
//
getEnableSuperviseWayData() {
getEnableSuperviseWayData().then((res) => {
console.log(res);
let list = [];
res.data?.itemList?.forEach((item, index) => {
if (index === 0) {
list.push({
projectId: item.projectId,
projectName: item.projectName,
problemDescribe: "",
children: [{ ...item, level: null }],
});
} else {
let exitItem = list.find((v) => v.projectId === item.projectId);
if (!exitItem) {
list.push({
projectId: item.projectId,
projectName: item.projectName,
problemDescribe: "",
children: [{ ...item, level: null }],
});
} else {
exitItem.children.push({
...item,
level: null,
});
}
}
});
this.formData = list;
this.activeName = list[0]?.projectId || "";
});
},
handleSave() {
console.log("保存");
},
handleSubmit() {
if (this.calcStep < 100) {
this.$message.warning("检查进度未达到100%,请检查");
return;
}
},
},
created() {
this.getEnableSuperviseWayData();
},
mounted() {},
};
</script>
<template>
<div class="body slider-right">
<div class="top-title">工程问题上报</div>
<div class="table-box">
<template v-if="formData.length">
<div class="step-box">
<div
class="bar"
:style="{
left: `-${100 - calcStep}%`,
backgroundColor: `rgb(${255 - (255 * calcStep) / 100},${
0 + (255 * calcStep) / 100
},0)`,
}"
></div>
<div style="position: relative; z-index: 1" class="pl-4 font-14">
检查进度 {{ calcStep }}%
</div>
</div>
<el-tabs v-model="activeName" type="card">
<el-tab-pane
v-for="item in formData"
:key="item.id"
:label="item.projectName"
:name="item.projectId"
class="question-box"
>
<div
class="question-row w-full"
v-for="item2 in item.children"
:key="item2.id"
>
<div class="flex">
<div class="question-col flex-shrink-0">问题</div>
<div class="question-col flex-1">
{{ item2.content }}
<el-tooltip class="tooltip" effect="dark" placement="left">
<div slot="content">
<div>一般{{ item2.sameGrade || " " }}</div>
<div>较重{{ item2.heavyGrade || " " }}</div>
<div>严重{{ item2.seriousGrade || " " }}</div>
</div>
<span>提示</span>
</el-tooltip>
</div>
</div>
<div class="question-select">
<el-button
:type="item2.level === '0' ? 'primary' : ''"
@click="item2.level = '0'"
></el-button
>
<el-button
:type="item2.level === '1' ? 'primary' : ''"
@click="item2.level = '1'"
>一般</el-button
>
<el-button
:type="item2.level === '2' ? 'primary' : ''"
@click="item2.level = '2'"
>较重</el-button
>
<el-button
:type="item2.level === '3' ? 'primary' : ''"
@click="item2.level = '3'"
>严重</el-button
>
</div>
</div>
<div class="question-row w-full">
<div class="question-col flex-shrink-0">描述</div>
<div class="question-col flex-1">
<el-input
type="textarea"
v-model="item.problemDescribe"
:rows="4"
placeholder="请输入内容"
/>
</div>
</div>
<div class="question-row w-full">
<div class="question-col flex-shrink-0">照片</div>
<div class="question-col flex-1">上传照片</div>
</div>
</el-tab-pane>
</el-tabs>
<div class="mt-30 flex justify-end">
<el-button class="mr-12" @click="handleSave">保存</el-button>
<el-button type="primary" @click="handleSubmit">提交</el-button>
</div>
</template>
<div v-else class="font-14 pt-20">-暂无数据-</div>
</div>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
padding-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.step-box {
position: relative;
height: 32px;
width: 120px;
background-color: #f0f0f0;
border: 1px solid #333;
border-radius: 2px;
float: right;
display: flex;
align-items: center;
overflow: hidden;
.bar {
position: absolute;
top: 0;
left: -50%;
z-index: 0;
height: 100%;
width: 100%;
background-color: #1890ff;
border-radius: 2px;
transition: 0.5s all;
}
}
.question-box {
border: 1px solid #f0f0f0;
.question-row {
.question-col {
position: relative;
padding: 10px;
border-bottom: 1px solid #f0f0f0;
&:not(:last-child) {
border-right: 1px solid #f0f0f0;
}
.tooltip {
position: absolute;
top: 2px;
right: 2px;
}
}
.question-select {
padding: 10px;
border-bottom: 1px solid #f0f0f0;
}
}
}
}
}
</style>

690
src/views/sluice/runManage/supervisionInspetion/tasksManage/index.vue

@ -1,20 +1,15 @@
<!-- 监督检查办法管理-堤防 -->
<!-- 监督检查任务管理 -->
<script>
import {
putDFPreventionControlPlan,
deleteDFMaintenancePlan,
postDFNewPreventionControlPlan,
postDFPreventionControlPlanList,
getDFPreventionControlPlan,
listUser,
} from "@/api/management";
import { listDikeInfo } from "@/api/yg/dikeInfo";
delSuperviseWayItemData,
getSuperviseWayTaskListData,
} from "@/api/sluice";
export default {
name: "InspectionItems",
data() {
return {
searchDikeName: "",
searchTaskName: "",
searchManageName: "",
paramsData: {
name: "",
type: null,
@ -22,15 +17,6 @@ export default {
selectLevel: "",
selectType: "",
},
dialogVisible: false,
prohibitEditing: false,
dikeTypeList: [],
personnelList: [], //
patrolType: [], //
workMonth: [], //
embankmentList: [], //
dikeLevel: [], //
controlType: [], //
tableData: [], //
pageData: {
pageNum: 1, //
@ -38,259 +24,45 @@ export default {
pageSizes: [10, 20, 50, 100],
total: 0, //
},
ruleForm: {
dikeCode: "",
dikeName: "",
name: "",
type: "",
instruction: "",
month: "",
details: [],
cycleType: "",
frequency: "",
operators: [],
isReminder: 1,
otherConfig: {
selectUser: [],
week: "",
day: "",
},
reminderTime: "",
},
rules: {
dikeCode: [
{ required: true, message: "请选择堤防名称", trigger: "blur" },
],
name: [
{ required: true, message: "请输入防治计划名称", trigger: "blur" },
{ max: 100, message: "名称最长为100个字符", trigger: "blur" },
],
type: [
{ required: true, message: "请选择防治类型", trigger: "change" },
],
instruction: [
{ required: true, message: "请输入防治说明", trigger: "change" },
],
month: [
{ required: true, message: "请选择工作月份", trigger: "change" },
],
cycleType: [
{ required: true, message: "请选择提醒日期", trigger: "change" },
],
frequency: [
{ required: true, message: "请输入次数", trigger: "change" },
],
"otherConfig.selectUser": [
{ required: true, message: "请选择责任人", trigger: "change" },
],
"otherConfig.week": [
{ required: true, message: "请选择星期", trigger: "change" },
],
"otherConfig.day": [
{ required: true, message: "请输入", trigger: "change" },
],
reminderTime: [
{ required: true, message: "请选择提醒时间", trigger: "change" },
],
},
};
},
watch: {
dialogVisible(newVal, oldVal) {
if (oldVal) {
this.prohibitEditing = false;
}
},
},
methods: {
//
resolveDikeGrad(dikeGrad) {
return (
this.dikeLevel.find((v) => v.dictValue === dikeGrad)?.dictLabel ||
dikeGrad
);
},
//
resolveDikeType(dikeType) {
return (
this.dikeTypeList.find((v) => v.dictValue == dikeType)?.dictLabel ||
dikeType
);
},
//
resolveType(type) {
return (
this.controlType.find((v) => v.dictValue == type)?.dictLabel || type
);
},
//
openAddDialog() {
// //
// this.getDicts("xc_w_month").then((res) => {
// this.workMonth = res.data;
// });
// this.getDicts("xs_cycle_type").then((res) => {
// this.patrolType = res.data;
// });
// if (this.ruleForm.details.length <= 0) {
// this.ruleForm.details.push({
// constructionDate: "",
// jobContent: "",
// planDays: 0,
// });
// }
// this.dialogVisible = true;
// setTimeout(() => {
// this.$refs.ruleForm.resetFields();
// }, 0);
},
//
deleteTableItem(row) {
deleteDFMaintenancePlan(row.id).then((res) => {
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
this.$message.success("删除成功");
});
},
//
deleteWorkTableItem(id) {
const index = this.workTable.findIndex((item) => item.id === id);
if (index !== -1) {
this.workTable.splice(index, 1);
}
},
//
searchUser(e) {
listUser({
data: {
timeView: {
timeField: "create_time",
},
},
cv: {
name: "nickName",
type: "like",
value: e,
},
pageSize: 100,
pageNum: 1,
}).then((res) => {
this.personnelList = res.records;
});
},
//
viewOrEditPlanDetails(row, edit = false) {
if (!edit) {
this.prohibitEditing = true;
}
getDFPreventionControlPlan(row.id).then((res) => {
this.dialogVisible = true;
setTimeout(() => {
this.ruleForm = res.data;
this.ruleForm.reminderCycle = res.data.instruction + res.data.month;
}, 30);
});
},
changeOtherConfigSelectUser(idsArr) {
if (idsArr?.length) {
this.ruleForm.operators =
this.personnelList
.filter((v) => idsArr.includes(v.nickName))
?.map((v) => ({
name: v.nickName,
uid: v.id,
})) || [];
} else {
this.ruleForm.operators = [];
}
},
//
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.ruleForm.cycleType = parseFloat(this.ruleForm.cycleType);
this.ruleForm.frequency = parseFloat(this.ruleForm.frequency);
this.ruleForm.month = parseFloat(this.ruleForm.month);
if (this.ruleForm.id) {
putDFPreventionControlPlan(this.ruleForm).then(() => {
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
this.dialogVisible = false;
this.$message({
message: "保存成功",
type: "success",
});
});
} else {
postDFNewPreventionControlPlan(this.ruleForm).then(() => {
console.log("保存成功");
this.getTableData();
this.dialogVisible = false;
this.$message({
message: "保存成功",
type: "success",
});
});
}
} else {
console.log("校验不通过");
return false;
}
});
},
//
resetForm(formName) {
this.$refs[formName].resetFields();
this.dialogVisible = false;
//
handleGoDetails() {
this.$router.push({
path: "supervisionTasksDetails",
query: {
type: "add",
},
// dialog
handleClose(ruleForm = "ruleForm") {
console.log("关闭");
this.$refs[ruleForm].resetFields();
this.ruleForm = {
dikeCode: "",
dikeName: "",
name: "",
type: "",
instruction: "",
month: "",
details: [],
cycleType: "",
isReminder: true,
selectUser: [],
otherConfig: {
selectUser: [],
week: "",
day: "",
});
},
week: 1,
date: 1,
reminderTime: "",
};
//
handleEdit(row) {
this.$router.push({
path: "supervisionTasksDetails",
query: {
type: "edit",
id: row.id,
},
//
addWorkItem() {
this.ruleForm.details.push({
jobContent: "",
constructionDate: "",
planDays: "",
});
},
//
getTableData() {
postDFPreventionControlPlanList({
getSuperviseWayTaskListData({
data: {
timeView: {
timeField: "create_time",
},
name: this.paramsData.name,
type: this.paramsData.type,
dikeName: this.paramsData.dikeName,
dikeGrad: this.paramsData.dikeGrad,
dikeType: this.paramsData.dikeType,
},
cv: {
name: "name",
type: "like",
value: this.name,
name: this.searchTaskName || null,
engineeringManagementUnit: this.searchManageName || null,
},
params: {
orderBy: "create_time",
@ -307,47 +79,26 @@ export default {
},
//
resetSearch() {
this.name = "";
this.selectStatus = "2";
this.searchTaskName = null;
this.searchManageName = null;
this.getTableData();
},
//
handleOpenMap() {},
//
handleOpenDetail() {},
//
getEmbData() {
listDikeInfo({
pageNum: 1,
pageSize: 20,
ids: null,
data: {
embankmentName: null,
endStationNumber: null,
embankmentType: null,
},
//
params: {
//
orderBy: "create_time",
// descasc
sort: "desc",
},
}).then((res) => {
this.embankmentList = res?.records || [];
});
},
handleChangeDike(value) {
console.log("value >>>>> ", value);
this.ruleForm.name = this.ruleForm.dikeCode;
let res = this.embankmentList.find((v) => v.dikeCode === value);
console.log("res >>>>> ", res);
this.ruleForm.dikeName = res?.dikeName;
// this.dikeDetailsDialog.id = res?.id || ''
},
//
handleDel(row) {
console.log("row >>>>> ", row);
this.$confirm("是否删除该条数据?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
delSuperviseWayItemData(row.id).then((res) => {
if (res) {
this.$message.success("删除成功");
this.getTableData();
}
});
})
.catch(() => {});
},
},
created() {
@ -358,13 +109,6 @@ export default {
mounted() {
//
this.getTableData();
this.getEmbData();
this.getDicts("embankment_level").then((res) => {
this.dikeLevel = res.data;
});
this.getDicts("dh_jh_type").then((res) => {
this.controlType = res.data;
});
},
};
</script>
@ -376,21 +120,24 @@ export default {
<span>任务名称</span>
<el-input
class="search-input ml-10"
v-model="searchDikeName"
v-model="searchTaskName"
placeholder="请输入名称"
/>
<span class="ml-10">管理单位</span>
<el-input
class="search-input ml-10"
v-model="searchDikeName"
v-model="searchManageName"
placeholder="请输入"
/>
<el-button class="search-btn" type="success">搜索</el-button>
<el-button class="search-btn" type="success" @click="getTableData()"
>搜索</el-button
>
<el-button class="search-btn" @click="resetSearch">重置</el-button>
<el-button
class="search-btn"
style="margin-right: 16px; margin-bottom: 8px; float: right"
type="success"
@click="openAddDialog()"
@click="handleGoDetails()"
>添加</el-button
>
<el-table class="table mt-16" height="640" :data="tableData" border>
@ -399,16 +146,16 @@ export default {
<el-table-column prop="createTime" align="center" label="创建时间">
</el-table-column>
<el-table-column prop="updateTime" align="center" label="更新时间" />
<el-table-column prop="unit" align="center" label="管理单位" />
<el-table-column
prop="status"
prop="engineeringManagementUnit"
align="center"
sortable
label="当前状态"
label="管理单位"
/>
<el-table-column prop="address" align="center" label="操作">
<el-table-column prop="operate" align="center" label="操作">
<template slot-scope="scope">
<el-button type="text" size="small">编辑</el-button>
<el-button type="text" size="small" @click="handleEdit(scope.row)"
>编辑</el-button
>
<el-button type="text" size="small" @click="handleDel(scope.row)"
>删除</el-button
>
@ -423,315 +170,11 @@ export default {
:page-sizes="pageData.pageSizes"
layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total"
@size-change="getTableData()"
@size-change="(e) => handlePageSizeChange(e)"
@current-change="(e) => handleCurrentPageChange(e)"
>
</el-pagination>
</div>
<!-- 弹窗 -->
<el-dialog
title="新增/编辑防治计划"
@close="handleClose"
:visible.sync="dialogVisible"
:close-on-click-modal="false"
width="720px"
>
<div style="display: flex; margin-bottom: 16px">
<div
style="
width: 5px;
height: 16px;
background-color: #31a08e;
margin-right: 8px;
"
></div>
<span style="font-weight: 600">基础信息</span>
</div>
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="100px"
>
<el-form-item label-width="120px" label="堤防名称" prop="dikeCode">
<!-- <el-input style="width: 202px;" v-model="ruleForm.dikeCode" placeholder="请输入" :disabled="prohibitEditing" /> -->
<el-select
v-model="ruleForm.dikeCode"
placeholder="请选择"
@change="handleChangeDike"
:disabled="prohibitEditing"
>
<el-option
v-for="item in embankmentList"
:label="item.dikeName"
:value="item.dikeCode"
:key="item.id"
></el-option>
</el-select>
<el-button
:disabled="!ruleForm.dikeCode"
class="!m-6"
type="success"
size="small"
@click="handleOpenDetail"
>详情</el-button
>
<el-button
:disabled="!ruleForm.dikeCode"
class="!ml-6"
type="success"
size="small"
@click="handleOpenMap"
>打开地图</el-button
>
</el-form-item>
<div style="display: flex">
<el-form-item label-width="120px" label="防治计划名称" prop="name">
<el-input
style="width: 202px"
v-model="ruleForm.name"
placeholder="请输入"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item label-width="120px" label="防治类型" prop="type">
<el-select
v-model="ruleForm.type"
placeholder="请选择"
:disabled="prohibitEditing"
>
<el-option
v-for="item in controlType"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option>
</el-select>
</el-form-item>
</div>
<el-form-item label-width="120px" label="防治说明" prop="instruction">
<el-input
v-model="ruleForm.instruction"
type="textarea"
placeholder=" 请输入"
:disabled="prohibitEditing"
/>
</el-form-item>
<div style="display: flex; margin-bottom: 16px">
<div
style="
width: 5px;
height: 16px;
background-color: #31a08e;
margin-right: 8px;
"
></div>
<span style="font-weight: 600">工作内容</span>
</div>
<el-form-item label-width="120px" label="工作月份" prop="month">
<el-select
v-model="ruleForm.month"
placeholder="请选择"
:disabled="prohibitEditing"
>
<el-option
v-for="item in workMonth"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
/>
</el-select>
</el-form-item>
<el-table
style="margin-bottom: 22px"
max-height="330"
:data="ruleForm.details"
border
>
<el-table-column
type="index"
align="center"
label="序号"
width="50"
/>
<el-table-column prop="jobContent" align="center" label="工作内容">
<template slot-scope="scope">
<el-input
v-model="scope.row.jobContent"
placeholder="请输入工作内容"
/>
</template>
</el-table-column>
<el-table-column
prop="constructionDate"
align="center"
label="施工日期"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.constructionDate"
placeholder="请输入施工日期"
/>
</template>
</el-table-column>
<el-table-column
prop="planDays"
align="center"
label="计划工日"
width="80"
>
<template slot-scope="scope">
<el-input
v-model="scope.row.planDays"
placeholder="请输入计划工日"
/>
</template>
</el-table-column>
<el-table-column align="center" label="操作" width="100">
<template slot-scope="scope">
<el-button
style="margin-right: 9px"
type="text"
size="small"
@click="addWorkItem"
>添加</el-button
>
<el-popconfirm
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
icon-color="red"
title="确定删除吗?"
@confirm="deleteWorkTableItem(scope.row.id)"
>
<el-button
v-if="ruleForm.details.length > 1"
style="color: red"
type="text"
size="small"
slot="reference"
>删除</el-button
>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<div style="display: flex">
<el-form-item label-width="120px" label="提醒周期" prop="frequency">
<el-input
style="width: 90px"
v-model="ruleForm.frequency"
placeholder="请输入"
/>
/
</el-form-item>
<el-form-item label-width="10px" prop="cycleType">
<el-select
style="width: 90px"
v-model="ruleForm.cycleType"
placeholder="请选择"
>
<el-option
v-for="item in patrolType"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
</el-select>
/
</el-form-item>
<el-form-item
label-width="100px"
label="责任人"
prop="otherConfig.selectUser"
>
<el-select
v-model="ruleForm.otherConfig.selectUser"
multiple
filterable
remote
:remote-method="searchUser"
value-key="id"
placeholder="请输入关键词搜索用户"
prop="selectUser"
@change="changeOtherConfigSelectUser"
>
<el-option
v-for="item in personnelList"
:key="item.id"
:label="item.nickName"
:value="item.nickName"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div style="display: flex">
<el-form-item label-width="120px" label="消息提醒" prop="isReminder">
<el-switch
v-model="ruleForm.isReminder"
:active-value="1"
:inactive-value="0"
active-color="#31a08e"
inactive-color="#dcdfe6"
>
</el-switch>
</el-form-item>
<div style="display: flex; flex-direction: column">
<el-form-item
v-if="ruleForm.isReminder && ruleForm.cycleType === '1'"
label-width="120px"
label="提醒时间"
prop="otherConfig.week"
>
<el-radio-group v-model="ruleForm.otherConfig.week">
<el-radio :label="1">星期一</el-radio>
<el-radio :label="2">星期二</el-radio>
<el-radio :label="3">星期三</el-radio>
<el-radio :label="4">星期四</el-radio>
<el-radio :label="5">星期五</el-radio>
<el-radio :label="6">星期六</el-radio>
<el-radio :label="7">星期日</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-if="ruleForm.isReminder && ruleForm.cycleType === '0'"
label-width="120px"
label="提醒时间"
prop="otherConfig.day"
>
<div>
每月<el-input
style="width: 202px"
v-model="ruleForm.otherConfig.day"
/>
</div>
</el-form-item>
<el-form-item
label-width="120px"
:label="ruleForm.cycleType === '2' ? '提醒时间' : ''"
prop="reminderTime"
>
<el-time-picker
v-model="ruleForm.reminderTime"
value-format="yyyy-MM-dd hh:mm:ss"
placeholder="选择时间"
/>
</el-form-item>
</div>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="resetForm('ruleForm')"> </el-button>
<el-button
v-if="!prohibitEditing"
size="mini"
type="primary"
@click="submitForm('ruleForm')"
>保存</el-button
>
</div>
</el-dialog>
</div>
</template>
@ -772,23 +215,6 @@ export default {
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
}
}
/deep/.el-input__count {
height: 15px;
line-height: 15px;
margin-right: 10px;
margin-bottom: -4px;
}
</style>

432
src/views/sluice/runManage/supervisionInspetion/tasksManage/tasksDetails.vue

@ -0,0 +1,432 @@
<!-- 监督检查任务新增 -->
<script>
import dayjs from "dayjs";
import {
putDFPreventionControlPlan,
deleteDFMaintenancePlan,
postDFNewPreventionControlPlan,
postDFPreventionControlPlanList,
listUser,
} from "@/api/management";
import {
getEnableSuperviseWayData,
getRunProjectList,
addNewSuperviseWayTasksData,
getSuperviseWayTaskDetailsData,
putSuperviseWayTaskDetailsData,
} from "@/api/sluice";
export default {
name: "tasksDetails",
data() {
return {
searchDikeName: "",
paramsData: {
name: "",
type: null,
dikeName: "",
selectLevel: "",
selectType: "",
},
dialogVisible: false,
prohibitEditing: false,
enableSupervisionWayData: [], //
personnelList: [], //
projectList: [], //
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0, //
},
ruleForm: {
name: "",
wagaCode: "",
wagaName: "",
patrolName: "",
patrolUid: "",
startTime: "",
doneTime: "",
content: "",
wayId: "",
},
rules: {
name: [
{ required: true, message: "请输入名称", trigger: "blur" },
{ max: 20, message: "名称最长为20个字符", trigger: "blur" },
],
wagaCode: [
{ required: true, message: "请选择水闸", trigger: "change" },
],
doneTime: [
{ required: true, message: "请选择时间", trigger: "change" },
],
},
};
},
computed: {
//
computedPatrolId: {
get() {
return this.ruleForm.patrolUid?.split(",")?.filter((v) => !!v) || [];
},
set(val) {
this.ruleForm.patrolUid = val.join(",");
this.ruleForm.patrolName = this.personnelList
.filter((v) => val.includes(v.id))
.map((v) => v.nickName)
.join(",");
},
},
// wagaCode
computedWagaCode: {
get() {
return this.ruleForm.wagaCode?.split(",")?.filter((v) => !!v) || [];
},
set(val) {
this.ruleForm.wagaCode = val.join(",");
this.ruleForm.wagaName = this.projectList
.filter((v) => val.includes(v.wagaCode))
.map((v) => v.wagaName)
.join(",");
},
},
//
computedTimes: {
get() {
return [this.ruleForm.startTime || "", this.ruleForm.doneTime || ""];
},
set(val) {
this.ruleForm.startTime = val[0] ? val[0] + " 00:00:00" : "";
this.ruleForm.doneTime = val[1] ? val[1] + " 23:59:59" : "";
},
},
//
computedTaskTimes() {
if (this.ruleForm.startTime && this.ruleForm.doneTime) {
return (
dayjs(this.ruleForm.doneTime).diff(
dayjs(this.ruleForm.startTime),
"day"
) + 1
);
}
return "";
},
},
methods: {
//
getDetails() {
getSuperviseWayTaskDetailsData(this.$route.query.id).then((res) => {
if (res) {
this.ruleForm = res.data;
this.ruleForm.wayId = res.data?.wayId;
}
});
},
//
openAddDialog() {},
//
searchUser(e = null) {
listUser({
data: {
timeView: {
timeField: "create_time",
},
},
cv: {
name: "nickName",
type: "like",
value: e,
},
pageSize: 100,
pageNum: 1,
}).then((res) => {
this.personnelList = res.records;
});
},
//
resetForm(formName) {
this.$refs[formName].resetFields();
this.dialogVisible = false;
},
// dialog
handleClose(ruleForm = "ruleForm") {
console.log("关闭");
this.$refs[ruleForm].resetFields();
this.ruleForm = {
wagaCode: [],
dikeName: "",
name: "",
type: "",
instruction: "",
month: "",
details: [],
cycleType: "",
isReminder: true,
selectUser: [],
otherConfig: {
selectUser: [],
week: "",
day: "",
},
week: 1,
date: 1,
reminderTime: "",
};
},
//
getTableData() {
getEnableSuperviseWayData().then((res) => {
if (res) {
this.ruleForm.wayId = res.data?.id;
this.enableSupervisionWayData = res.data?.itemList || [];
}
});
},
//
getProjectList() {
getRunProjectList({
data: {
pageNum: this.pageData.pageNum,
pageSize: this.pageData.pageSize,
wagaName: "",
},
}).then((res) => {
if (res) {
this.projectList = res.records;
}
});
},
//
handleDel(row) {
console.log("row >>>>> ", row);
},
//
handleSubmit() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
//
this.$confirm("确认提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
if (this.$route.query.id) {
//
putSuperviseWayTaskDetailsData(
this.ruleForm,
this.$route.query.id
).then((res) => {
if (res) {
this.$message({
message: "提交成功",
type: "success",
});
this.$router.go(-1);
}
});
} else {
//
addNewSuperviseWayTasksData(this.ruleForm).then((res) => {
if (res) {
this.$message({
message: "提交成功",
type: "success",
});
this.$router.go(-1);
}
});
}
})
.catch(() => {
//
this.$message({
type: "info",
message: "已取消提交",
});
});
} else {
console.log("error submit!!");
return false;
}
});
},
},
created() {
this.getProjectList();
this.searchUser();
},
mounted() {
//
this.getTableData();
if (this.$route.query.id) {
this.getDetails();
}
},
};
</script>
<template>
<div class="body slider-right">
<div class="top-title">基础信息管理</div>
<div class="content-box">
<div class="flex justify-between mb-12">
<el-button
style="width: 120px"
type="primary"
@click="handleSubmit"
size="small"
>确认</el-button
>
<el-button @click="$router.go(-1)" size="small">返回</el-button>
</div>
<div class="title">新增/编辑检查项</div>
<div class="font-14">
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="100px"
>
<el-form-item label-width="120px" label="检查任务名称" prop="name">
<el-input
style="width: 240px"
v-model="ruleForm.name"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label-width="120px" label="水闸名称" prop="wagaCode">
<el-select
style="width: 240px"
multiple
v-model="computedWagaCode"
placeholder="请选择"
>
<el-option
v-for="item in projectList"
:key="item.id"
:label="item.wagaName"
:value="item.wagaCode"
>
</el-option>
</el-select>
<span class="ml-24">水闸代码</span>
<el-input
style="width: 240px"
class="ml-12"
:value="ruleForm.wagaCode"
placeholder="请选择"
:disabled="true"
/>
</el-form-item>
<el-form-item
label-width="120px"
label="开始结束时间"
prop="doneTime"
>
<el-date-picker
v-model="computedTimes"
type="daterange"
style="width: 240px"
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
<span class="ml-24">任务工时</span>
<el-input
style="width: 240px"
class="ml-12"
:value="computedTaskTimes"
placeholder="请选择开始结束时间"
:disabled="true"
/>
</el-form-item>
<el-form-item label-width="120px" label="检查人员" prop="patrolUid">
<el-select
style="width: 240px"
v-model="computedPatrolId"
multiple
filterable
remote
:remote-method="searchUser"
placeholder="请选择"
>
<el-option
v-for="item in personnelList"
:key="item.id"
:label="item.nickName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label-width="120px" label="检查任务背景" prop="content">
<el-input
v-model="ruleForm.content"
type="textarea"
:rows="5"
placeholder=" 请输入"
/>
</el-form-item>
</el-form>
<el-table
style="margin-bottom: 22px"
max-height="330"
:data="enableSupervisionWayData"
border
>
<el-table-column
type="index"
align="center"
label="序号"
width="50"
/>
<el-table-column
width="300"
prop="projectName"
align="center"
label="检查部位"
>
</el-table-column>
<el-table-column prop="content" align="center" label="检查内容">
</el-table-column>
</el-table>
</div>
</div>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
padding-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.content-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.title {
font-size: 16px;
font-weight: 700;
margin-bottom: 12px;
}
}
}
</style>

5
vue.config.js

@ -35,12 +35,12 @@ module.exports = {
port: 80,
open: true,
proxy: {
// [process.env.VUE_APP_BASE_API + '/run/sz/superviseWay']: {
// [process.env.VUE_APP_BASE_API + '/run/']: {
// target: "http://172.16.34.27:18082",
// changeOrigin: true,
// // logLevel: 'debug',
// pathRewrite: {
// [process.env.VUE_APP_BASE_API +'/run/sz/superviseWay']: '/tianhui-admin-web/run/sz/superviseWay'
// [process.env.VUE_APP_BASE_API +'/run/']: '/tianhui-admin-web/run/'
// }
// },
@ -54,6 +54,7 @@ module.exports = {
// },
[process.env.VUE_APP_BASE_API]: {
target: 'http://shuili-admin.product.dev.com:30115',
// target: "http://172.16.34.27:18082",
// target: "http://127.0.0.1:18082",
changeOrigin: true,
pathRewrite: {

Loading…
Cancel
Save