Browse Source

Merge branch 'release-sy-v1.0.0' into 'dev'

Release sy v1.0.0

See merge request project/water/shuili-vue!142
sy-water-data-board-ui
黄星淮 9 months ago
parent
commit
027b5d13b7
  1. 14548
      pnpm-lock.yaml
  2. 10
      src/api/aiSupervision/layerConfigApi.js
  3. 42
      src/api/dike/index.js
  4. 7
      src/api/login.js
  5. 1
      src/assets/styles/index.scss
  6. 22
      src/assets/styles/unify.scss
  7. 11
      src/mixins/reqCount.js
  8. 13
      src/permission.js
  9. 294
      src/views/aiSupervision/layerManage/resource/LayerDetails.vue
  10. 33
      src/views/aiSupervision/layerManage/resource/index.vue
  11. 8
      src/views/dike/runManage/enginerring/inspectionItems/index.vue
  12. 6
      src/views/dike/runManage/enginerring/inspectionPlan/components/PlanDetail.vue
  13. 8
      src/views/dike/runManage/enginerring/inspectionPlan/index.vue
  14. 79
      src/views/dike/runManage/enginerring/inspectionRecords/components/RecordDetails.vue
  15. 8
      src/views/dike/runManage/enginerring/inspectionRecords/index.vue
  16. 2
      src/views/dike/runManage/enginerring/inspectionRouteManage/index.vue
  17. 63
      src/views/dike/runManage/maintenance/maintenancePlan/CreateMaintenancePlan.vue
  18. 580
      src/views/dike/runManage/maintenance/maintenancePlan/components/PlanDetail.vue
  19. 891
      src/views/dike/runManage/maintenance/maintenancePlan/index.vue
  20. 658
      src/views/dike/runManage/maintenance/maintenancePlanAccept/index.vue
  21. 678
      src/views/dike/runManage/maintenance/maintenancePlanAudit/index.vue
  22. 63
      src/views/dike/runManage/maintenance/maintenanceRecords/CreateMaintenanceRecord.vue
  23. 282
      src/views/dike/runManage/maintenance/maintenanceRecords/components/RecordDetail.vue
  24. 671
      src/views/dike/runManage/maintenance/maintenanceRecords/index.vue

14548
pnpm-lock.yaml

File diff suppressed because it is too large

10
src/api/aiSupervision/layerConfigApi.js

@ -155,6 +155,13 @@ export function deleteLayerApi(id) {
});
}
export function deleteSceneById(id) {
return request({
url: `/map/scene/deleteScene/${id}`,
method: 'delete'
});
}
export function getLayerStyle(id) {
return request({
url: `map/layer/style/${id}`,
@ -180,8 +187,9 @@ export function queryServiceInfoApi(url, layer) {
case '081100':
return new Promise(async (resolve, reject) => {
const name = layer.name;
const nameArr = name.split(':');
const splitUrl = url?.split('map-')[0];
const newUrl = `${splitUrl}data-supermap_shuili/rest/data/datasources/shuili/datasets/${name}/fields.json`;
const newUrl = `${splitUrl}data-supermap_shuili/rest/data/datasources/shuili/datasets/${nameArr[1]}/fields.json`;
const result = await axios.get(newUrl);
if (result.status === 200 && result.data) {
const fields = result.data.fieldNames.map((item) => {

42
src/api/dike/index.js

@ -2,6 +2,7 @@
import request from '@/utils/request'
export * from './analysis';
/*************************************新版工程巡检部分接口**************************************/
// 获取检查项线路列表--堤防维度
export function getProjectCheckingLine (data) {
return request({
@ -115,8 +116,8 @@ export function getRecordTraceList(data = {}) {
})
}
/**************************************************/
/**************************************************/
// 获取巡查堤防列表
export function getRunProjectList(data) {
return request({
@ -168,6 +169,8 @@ export function getRunDFDeviceRecordList(data) {
data
})
}
/*************************************维修养护****************************************/
// 获取维修养护工程列表
export function getDikeYhProjectList(data) {
return request({
@ -177,6 +180,32 @@ export function getDikeYhProjectList(data) {
})
}
// 新增养护计划
export function addYhPlanData(data) {
return request({
url: '/run/df/yh/plan',
method: 'post',
data
})
}
// 更新养护计划
export function updateYhPlanData(data) {
return request({
url: '/run/df/yh/plan',
method: 'put',
data
})
}
// 获取养护计划详情
export function getYhPlanDetails(id) {
return request({
url: `/run/df/yh/plan/${id}`,
method: 'get',
})
}
// 获取维养计划列表
export function getDikeYhPlanList(data) {
return request({
@ -204,6 +233,17 @@ export function getDikeYhRecordList(data) {
})
}
// 维修养护计划审批列表
export function getYhPlanApprovalList(data) {
return request({
url: `/run/df/yh/plan/approval/list`,
method: 'post',
data
})
}
/******************************************************************************/
// 新增巡查记录
export function addRecordData(data) {
return request({

7
src/api/login.js

@ -22,7 +22,12 @@ export function getInfo() {
method: 'get'
})
}
export function loginProxy() {
return request({
url: '/login-proxy',
method: 'get'
})
}
// 退出方法
export function logout() {
return request({

1
src/assets/styles/index.scss

@ -411,3 +411,4 @@ aside {
padding-top: 16px;
}
}

22
src/assets/styles/unify.scss

@ -0,0 +1,22 @@
// 统一样式
// 状态
.unify-status-tag{
display: inline-block;
padding: 4px 8px;
border-radius: 4px;
font-size: 12px;
color: #fff;
&.success{
background-color: #67C23A;
}
&.warning{
background-color: #E6A23C;
}
&.danger{
background-color: #F56C6C;
}
&.info{
background-color: #909399;
}
}

11
src/mixins/reqCount.js

@ -3,23 +3,24 @@ export const reqCountMixins = {
data(){
return {
reqCount: 0,
timerId: null,
reqCountTimerId: null,
}
},
methods: {
reqCountCalc(){
this.reqCount++;
console.log('计数 >>>>> ', this.reqCount)
if (this.reqCount > 10) {
this.$message.warning("已经点击超过10次了,请稍等正在进行数据获取");
return false
}
if (this.timerId) {
clearTimeout(this.timerId);
if (this.reqCountTimerId) {
clearTimeout(this.reqCountTimerId);
}
this.timerId = setTimeout(() => {
this.reqCountTimerId = setTimeout(() => {
console.log("清除定时,并重置");
this.reqCount = 0;
}, 1000);
}, 5000);
return true
}
}

13
src/permission.js

@ -4,6 +4,7 @@ import { Message } from 'element-ui'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken } from '@/utils/auth'
import { loginProxy } from './api/login'
NProgress.configure({ showSpinner: false })
@ -65,7 +66,17 @@ router.beforeEach((to, from, next) => {
// 在免登录白名单,直接进入
next()
} else {
next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
loginProxy().then(res => {
if (res.code === 200) {
var type = res.data.type
if(type === 'redirect'){
window.location.href = res.data.url
}
} else {
Message.error(res.msg)
}
next(`/login?redirect=${to.fullPath}`)
})
NProgress.done()
}
}

294
src/views/aiSupervision/layerManage/resource/LayerDetails.vue

@ -17,196 +17,88 @@
</div>
</div>
<div class="middle">
<el-button type="primary" plain @click="dialogFormVisible = true"
>添加图层</el-button
>
<el-button type="primary" plain @click="dialogFormVisible = true">添加图层</el-button>
<el-dialog :title="dialogTitle" :visible.sync="dialogFormVisible">
<el-tabs v-model="activeName" type="card">
<el-tab-pane label="基础字段" name="1">
<el-form :model="editDataInfoForm">
<el-form-item
label="服务类型"
style="font-size: 1rem"
:label-width="'120px'"
>
<el-select
style="width: 80%"
v-model="editDataInfoForm.serviceType"
placeholder="请选择"
>
<el-option
v-for="item in serviceTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
<el-form-item label="服务类型" style="font-size: 1rem" :label-width="'120px'">
<el-select style="width: 80%" v-model="editDataInfoForm.serviceType" placeholder="请选择">
<el-option v-for="item in serviceTypeOptions" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item
label="服务名称"
prop="serviceName"
style="font-size: 1rem"
:label-width="'120px'"
>
<el-input
v-model.trim="editDataInfoForm.serviceName"
style="width: 80%"
></el-input>
<el-form-item label="服务名称" prop="serviceName" style="font-size: 1rem" :label-width="'120px'">
<el-input v-model.trim="editDataInfoForm.serviceName" style="width: 80%"></el-input>
</el-form-item>
<el-form-item
label="服务别名"
prop="serviceNameAlias"
style="font-size: 1rem"
:label-width="'120px'"
>
<el-input
v-model.trim="editDataInfoForm.serviceNameAlias"
style="width: 80%"
></el-input>
<el-form-item label="服务别名" prop="serviceNameAlias" style="font-size: 1rem" :label-width="'120px'">
<el-input v-model.trim="editDataInfoForm.serviceNameAlias" style="width: 80%"></el-input>
</el-form-item>
<el-form-item
label="服务地址"
prop="serviceUrl"
style="font-size: 1rem"
:label-width="'120px'"
>
<el-input
v-model.trim="editDataInfoForm.serviceUrl"
style="width: 80%"
></el-input>
<el-form-item label="服务地址" prop="serviceUrl" style="font-size: 1rem" :label-width="'120px'">
<el-input v-model.trim="editDataInfoForm.serviceUrl" style="width: 80%"></el-input>
</el-form-item>
<el-form-item
v-if="editDataInfoForm.serviceType === '030300'"
label="服务索引"
prop="serviceIndex"
style="font-size: 1rem"
:label-width="'120px'"
>
<el-input
v-model="editDataInfoForm.serviceIndex"
style="width: 80%"
></el-input>
<el-form-item label="服务token" prop="serviceToken" style="font-size: 1rem" :label-width="'120px'">
<el-input v-model.trim="editDataInfoForm.serviceToken" style="width: 80%"></el-input>
</el-form-item>
<el-form-item
v-show="['030300'].includes(editDataInfoForm.serviceType)"
label="样式选择"
style="font-size: 1rem"
:label-width="'120px'"
>
<el-form-item v-if="editDataInfoForm.serviceType === '030300'" label="服务索引" prop="serviceIndex"
style="font-size: 1rem" :label-width="'120px'">
<el-input v-model="editDataInfoForm.serviceIndex" style="width: 80%"></el-input>
</el-form-item>
<el-form-item v-show="['030300'].includes(editDataInfoForm.serviceType)" label="样式选择"
style="font-size: 1rem" :label-width="'120px'">
<div class="styleBtn">
<el-tag
type="info"
effect="plain"
class="style-button"
:class="{
'style-button-none': editDataInfoForm.relationStyleName,
}"
@click="handleLayerStyleTypeChange"
>
<el-tag type="info" effect="plain" class="style-button" :class="{
'style-button-none': editDataInfoForm.relationStyleName,
}" @click="handleLayerStyleTypeChange">
{{
editDataInfoForm.relationStyleName
? editDataInfoForm.relationStyleName
: "点击选择样式"
}}
</el-tag>
<el-button
style="margin-left: 15px"
:disabled="editDataInfoForm.relationStyleName === ''"
@click="
editDataInfoForm.relationStyleName = '';
editDataInfoForm.relationStyleId = '';
"
>取消选择样式</el-button
>
<el-button style="margin-left: 15px" :disabled="editDataInfoForm.relationStyleName === ''" @click="
editDataInfoForm.relationStyleName = '';
editDataInfoForm.relationStyleId = '';
">取消选择样式</el-button>
</div>
<styleListDialogVue
:visible="styleDialogVisible"
:$currentStyleId="editDataInfoForm.relationStyleId"
@closeDialog="styleDialogVisible = false"
@confirm="handleConfirm"
></styleListDialogVue>
<styleListDialogVue :visible="styleDialogVisible" :$currentStyleId="editDataInfoForm.relationStyleId"
@closeDialog="styleDialogVisible = false" @confirm="handleConfirm"></styleListDialogVue>
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane label="扩展字段" name="2">
<div class="fn-btns">
<el-button type="primary" class="btn" @click="addRow"
>添加</el-button
>
<el-button type="danger" class="btn" @click="deleteRow"
>删除</el-button
>
<el-button type="primary" class="btn" @click="addRow">添加</el-button>
<el-button type="danger" class="btn" @click="deleteRow">删除</el-button>
</div>
<el-table
max-height="400px"
:data="extendTable"
border
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
width="50"
align="center"
></el-table-column>
<el-table max-height="400px" :data="extendTable" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center"></el-table-column>
<el-table-column prop="field" label="字段名称">
<template slot-scope="scope">
<el-input
v-model="scope.row.field"
:disabled="!scope.row.isEdit"
></el-input>
<el-input v-model="scope.row.field" :disabled="!scope.row.isEdit"></el-input>
</template>
</el-table-column>
<el-table-column prop="alias" label="别名">
<template slot-scope="scope">
<el-input
v-model="scope.row.alias"
:disabled="!scope.row.isEdit"
></el-input>
<el-input v-model="scope.row.alias" :disabled="!scope.row.isEdit"></el-input>
</template>
</el-table-column>
<el-table-column prop="value" label="字段值">
<template slot-scope="scope">
<el-input
v-model="scope.row.value"
:disabled="!scope.row.isEdit"
></el-input>
<el-input v-model="scope.row.value" :disabled="!scope.row.isEdit"></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width="200">
<template slot-scope="scope">
<el-button
v-if="scope.row.isEdit"
type="primary"
icon="el-icon-success"
size="mini"
@click="saveRow(scope.$index)"
>保存</el-button
>
<el-button
v-if="scope.row.isEdit"
type="warning"
icon="el-icon-error"
size="mini"
@click="cancelRow(scope.$index)"
>取消</el-button
>
<el-button
v-if="!scope.row.isEdit"
type="primary"
icon="el-icon-edit"
size="mini"
@click="editRow(scope.$index)"
>编辑</el-button
>
<el-button
v-if="!scope.row.isEdit"
type="danger"
icon="el-icon-delete-solid"
size="mini"
@click="deleteRow(scope.$index)"
>删除</el-button
>
<el-button v-if="scope.row.isEdit" type="primary" icon="el-icon-success" size="mini"
@click="saveRow(scope.$index)">保存</el-button>
<el-button v-if="scope.row.isEdit" type="warning" icon="el-icon-error" size="mini"
@click="cancelRow(scope.$index)">取消</el-button>
<el-button v-if="!scope.row.isEdit" type="primary" icon="el-icon-edit" size="mini"
@click="editRow(scope.$index)">编辑</el-button>
<el-button v-if="!scope.row.isEdit" type="danger" icon="el-icon-delete-solid" size="mini"
@click="deleteRow(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
@ -214,22 +106,13 @@
<el-tab-pane label="字段配置" v-if="showFieldExtend()" name="3">
<div class="field-box">
<div class="field-filter">
<el-input
class="keyword-input"
placeholder="请输入搜索字段"
v-model="fieldValue"
clearable
>
<el-input class="keyword-input" placeholder="请输入搜索字段" v-model="fieldValue" clearable>
</el-input>
<el-button class="search-btn">搜索</el-button>
</div>
</div>
<el-table max-height="400px" :data="fieldsTable" border>
<el-table-column
type="index"
width="50"
align="center"
></el-table-column>
<el-table-column type="index" width="50" align="center"></el-table-column>
<el-table-column prop="field" label="字段名称">
</el-table-column>
<el-table-column prop="fieldName" label="字段别名">
@ -239,18 +122,9 @@
</el-table-column>
<el-table-column prop="fieldType" label="字段类型">
</el-table-column>
<el-table-column
prop="isShow"
label="支持查询"
width="80"
align="center"
>
<el-table-column prop="isShow" label="支持查询" width="80" align="center">
<template slot-scope="scope">
<el-checkbox
v-model="scope.row.isShow"
:true-label="1"
:false-label="0"
></el-checkbox>
<el-checkbox v-model="scope.row.isShow" :true-label="1" :false-label="0"></el-checkbox>
</template>
</el-table-column>
</el-table>
@ -259,34 +133,20 @@
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="saveOrUpdateLayer"
> </el-button
>
<el-button type="primary" @click="saveOrUpdateLayer"> </el-button>
</div>
</el-dialog>
<div class="keyword-filter">
<el-input
class="keyword-input"
placeholder="请输入内容"
v-model="keyword"
clearable
>
<el-input class="keyword-input" placeholder="请输入内容" v-model="keyword" clearable>
</el-input>
<el-button class="search-btn">搜索</el-button>
</div>
</div>
<div class="content">
<el-table :data="tableData" stripe style="width: 100%">
<el-table-column
type="index"
:index="
(index) =>
index + (pageOptions.pageNum - 1) * pageOptions.pageSize + 1
"
label="序号"
width="50"
header-align="center"
></el-table-column>
<el-table-column type="index" :index="(index) =>
index + (pageOptions.pageNum - 1) * pageOptions.pageSize + 1
" label="序号" width="50" header-align="center"></el-table-column>
<el-table-column prop="id" label="图层资源目录编号" width="350">
</el-table-column>
<el-table-column prop="serviceName" label="图层资源目录名称">
@ -295,28 +155,13 @@
<el-table-column prop="createUser" label="创建人"> </el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
size="mini"
@click="handleEdit(scope.$index, scope.row)"
>编辑</el-button
>
<el-button
size="mini"
type="danger"
@click="handleDelete(scope.row)"
>删除</el-button
>
<el-button size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
<el-button size="mini" type="danger" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
background
layout="prev, pager, next"
:current-page.sync="pageOptions.pageNum"
:total="pageOptions.total"
:page-size="pageOptions.pageSize"
@current-change="getLayerList"
>
<el-pagination background layout="prev, pager, next" :current-page.sync="pageOptions.pageNum"
:total="pageOptions.total" :page-size="pageOptions.pageSize" @current-change="getLayerList">
</el-pagination>
</div>
</el-container>
@ -344,6 +189,7 @@ export default {
id: "",
serviceType: "", //,wms/wmts/wfs/3d tiles/terrain
serviceUrl: "", //
serviceToken: "", //token
serviceName: "", //
serviceNameAlias: "", //
serviceIndex: "", //
@ -449,6 +295,7 @@ export default {
this.editDataInfoForm.serviceName = row.serviceName;
this.editDataInfoForm.serviceNameAlias = row.serviceNameAlias;
this.editDataInfoForm.serviceUrl = row.serviceUrl;
this.editDataInfoForm.serviceToken = row.serviceToken;
this.editDataInfoForm.serviceIndex = row.serviceIndex;
this.editDataInfoForm.relationStyleId = row.relationStyleId;
this.editDataInfoForm.relationStyleName = row.relationStyleName;
@ -505,12 +352,12 @@ export default {
});
},
async saveOrUpdateLayer() {
const reg = /^(\w|[\u4e00-\u9fa5]){3,30}$/g;
const reg = /^(?=.{1,30}$)[\u4e00-\u9fa5\w:]+$/;
if (!reg.test(this.editDataInfoForm.serviceName)) {
this.$message({
type: "info",
message:
"格式有误,目录名称仅支持中文、数字、字母、下划线,最大长度不超过30",
"格式有误,目录名称仅支持中文、数字、字母、下划线、冒号,最大长度不超过30",
});
return;
}
@ -539,6 +386,7 @@ export default {
initData() {
this.editDataInfoForm.id = "";
this.editDataInfoForm.serviceUrl = "";
this.editDataInfoForm.serviceToken = "";
this.editDataInfoForm.serviceName = "";
this.editDataInfoForm.serviceNameAlias = "";
this.editDataInfoForm.serviceIndex = "";
@ -657,29 +505,35 @@ export default {
flex-direction: column;
gap: 15px;
}
header,
.el-container,
aside {
background-color: #fff;
}
header {
display: flex;
align-items: center;
border-radius: 10px;
gap: 10px;
box-shadow: rgba(17, 12, 46, 0.15) 0px 48px 100px 0px;
.el-icon-back {
cursor: pointer;
&:hover {
color: rgb(135, 231, 140);
}
}
span {
color: #999;
font-style: italic;
font-size: 14px;
}
}
.el-container {
flex: 1;
overflow-y: auto;
@ -690,6 +544,7 @@ header {
padding-top: 5px;
border-radius: 3px;
box-shadow: rgba(17, 12, 46, 0.15) 0px 48px 100px 0px;
.top {
display: flex;
flex-direction: column;
@ -697,19 +552,23 @@ header {
padding: 20px 40px;
width: 100%;
border-bottom: 2px solid #d9d9d9;
.title {
font-weight: bold;
font-size: 16px;
}
.directoryInfo {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 5px 10px;
}
}
.middle {
display: flex;
justify-content: space-between;
.keyword-filter {
display: flex;
border-radius: 4px;
@ -718,14 +577,17 @@ header {
::v-deep .el-input__inner {
border: none;
}
.search-btn {
border: none;
border-radius: 0px;
border-left: 1px solid #d9d9d9;
}
}
.styleBtn {
display: flex;
.style-button-none {
color: #4b535e;
background: #fff;
@ -733,21 +595,25 @@ header {
}
}
}
.content {
display: flex;
flex-direction: column;
gap: 10px;
justify-content: space-between;
flex: 1;
.el-pagination {
text-align: center;
}
}
}
.el-dialog {
.field-box {
display: flex;
justify-content: flex-end;
.field-filter {
width: 400px;
margin-bottom: 16px;
@ -758,6 +624,7 @@ header {
::v-deep .el-input__inner {
border: none;
}
.search-btn {
border: none;
border-radius: 0px;
@ -765,6 +632,7 @@ header {
}
}
}
.fn-btns {
margin-bottom: 10px;
}

33
src/views/aiSupervision/layerManage/resource/index.vue

@ -23,13 +23,9 @@
</div>
<div class="table">
<el-table :data="tableData" stripe style="width: 100%">
<el-table-column
type="index"
:index="(index) => index + (pageOptions.pageNum - 1) * pageOptions.pageSize + 1"
label="序号"
width="50"
header-align="center"
>
<el-table-column type="index"
:index="(index) => index + (pageOptions.pageNum - 1) * pageOptions.pageSize + 1" label="序号" width="50"
header-align="center">
</el-table-column>
<el-table-column prop="id" label="图层资源目录编号" width="180"> </el-table-column>
<el-table-column prop="name" label="图层资源目录名称" width="180"> </el-table-column>
@ -44,14 +40,8 @@
</template>
</el-table-column>
</el-table>
<el-pagination
background
layout="prev, pager, next"
:current-page.sync="pageOptions.pageNum"
:total="pageOptions.total"
:page-size="pageOptions.pageSize"
@current-change="getDirectory"
>
<el-pagination background layout="prev, pager, next" :current-page.sync="pageOptions.pageNum"
:total="pageOptions.total" :page-size="pageOptions.pageSize" @current-change="getDirectory">
</el-pagination>
</div>
</el-main>
@ -147,11 +137,11 @@ export default {
},
//
async addOrEditDirectory() {
const reg = /^(\w|[\u4e00-\u9fa5]){3,30}$/g;
const reg = /^(?=.{1,30}$)[\u4e00-\u9fa5\w:]+$/;
if (!reg.test(this.currentDirectory.name)) {
this.$message({
type: 'info',
message: '格式有误,目录名称仅支持中文、数字、字母、下划线,最大长度不超过30'
message: '格式有误,目录名称仅支持中文、数字、字母、下划线、冒号,最大长度不超过30'
});
return;
}
@ -219,17 +209,21 @@ export default {
flex-direction: column;
gap: 15px;
}
.el-container {
flex: 1;
overflow-y: auto;
box-shadow: rgba(17, 12, 46, 0.15) 0px 48px 100px 0px;
border-radius: 10px;
.el-main {
display: flex;
flex-direction: column;
.top {
display: flex;
justify-content: space-between;
::v-deep .el-dialog__body {
.el-input__inner {
width: 500px;
@ -244,6 +238,7 @@ export default {
::v-deep .el-input__inner {
border: none;
}
.search-btn {
border: none;
border-radius: 0px;
@ -251,22 +246,26 @@ export default {
}
}
}
.table {
display: flex;
flex: 1;
flex-direction: column;
justify-content: space-evenly;
.el-pagination {
text-align: center;
}
}
}
}
header,
.el-container,
aside {
background-color: #fff;
}
header {
display: flex;
align-items: center;

8
src/views/dike/runManage/enginerring/inspectionItems/index.vue

@ -202,7 +202,13 @@ export default {
label="更新时间"
>
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<el-table-column
prop="address"
align="center"
label="操作"
fixed="right"
width="100"
>
<template slot-scope="scope">
<el-button
style="margin-right: 16px"

6
src/views/dike/runManage/enginerring/inspectionPlan/components/PlanDetail.vue

@ -1,5 +1,5 @@
<template>
<div class="route-detail-page">
<div class="detail-page">
<el-form
ref="formRef"
label-position="top"
@ -640,7 +640,7 @@ export default {
};
</script>
<style scoped lang="scss">
.route-detail-page {
.detail-page {
width: 100%;
max-width: 1300px;
padding: 16px;
@ -678,7 +678,7 @@ export default {
}
</style>
<style lang="scss">
.route-detail-page {
.detail-page {
.custom-select-cycleType {
.el-input__inner {
border-radius: 4px 0 0 4px;

8
src/views/dike/runManage/enginerring/inspectionPlan/index.vue

@ -496,7 +496,13 @@ export default {
sortable
label="创建时间"
/>
<el-table-column prop="operate" align="center" label="操作">
<el-table-column
prop="operate"
align="center"
label="操作"
fixed="right"
width="160"
>
<template slot-scope="scope">
<el-button
style="margin-right: 16px"

79
src/views/dike/runManage/enginerring/inspectionRecords/components/RecordDetails.vue

@ -212,7 +212,11 @@ import dayjs from "dayjs";
import { getDictMapData } from "@/api/system/dict/data";
import { getRecordDetails, getRecordTraceList } from "@/api/dike";
import {
getRecordDetails,
getRecordTraceList,
getProjectCheckingLineRouteDetails,
} from "@/api/dike";
import { uploadFileData } from "@/api/system/upload";
export default {
@ -267,26 +271,61 @@ export default {
},
methods: {
handleChangeCollapse() {},
initData() {
getRecordDetails(this.id).then((res) => {
this.activeNames = [];
this.detailData = res.data;
this.detailData.items.forEach((item) => {
item.partsName = this.labelMapData[item.parts.join(":")];
});
this.entries = res.data.entries ? JSON.parse(res.data.entries) : {};
getRecordTraceList({
data: {
recordId: this.id,
},
pageNum: 1,
pageSize: 50,
}).then((res) => {
this.traceList =
res.records?.map((v) => {
async initData() {
const res = await getRecordDetails(this.id);
if (!res.data) return;
this.activeNames = [];
this.detailData = res.data;
this.entries = res.data?.entries ? JSON.parse(res.data.entries) : {};
let existItems = this.detailData?.items || [];
let allItems = [];
if (this.detailData?.lineId) {
const res2 = await getProjectCheckingLineRouteDetails(
this.detailData.lineId
);
allItems = res2.data?.checkingDetail?.items || [];
}
this.detailData.items = allItems.map((item) => {
let existItem = existItems.find(
(v) => v.parts.join(":") === item.parts.join(":")
);
return {
...item,
partsName: this.labelMapData[item.parts.join(":")],
id: existItem?.id,
status: existItem?.status || "",
problem: existItem?.problem || "",
problemImages: existItem?.problemImages || [],
handleImages: existItem?.handleImages || [],
handleContent: existItem?.handleContent || "",
handleTime: existItem?.handleTime || "",
problemVoice:
existItem?.problemVoice?.map((v) => {
return {
...v,
isPlaying: false,
};
}) || [],
};
});
console.log("this.detailData.items >>>>> ", this.detailData.items);
getRecordTraceList({
data: {
recordId: this.id,
},
params: {
orderBy: "create_time",
sort: "desc", //
},
pageNum: 1,
pageSize: 100,
}).then((res) => {
this.traceList =
res.records
?.map((v) => {
return [v.longitude, v.latitude];
}) || [];
});
})
?.reverse() || [];
});
},
calcHours(start, end) {

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

@ -563,7 +563,13 @@ export default {
</template>
</el-table-column>
<el-table-column prop="opera" align="center" label="操作">
<el-table-column
prop="opera"
align="center"
label="操作"
fixed="right"
width="168"
>
<template slot-scope="scope">
<el-button
type="text"

2
src/views/dike/runManage/enginerring/inspectionRouteManage/index.vue

@ -286,6 +286,7 @@
align="center"
label="操作"
fixed="right"
width="100"
>
<template slot-scope="scope">
<el-button
@ -340,6 +341,7 @@
align="center"
label="操作"
fixed="right"
width="160"
>
<template slot-scope="scope">
<el-button

63
src/views/dike/runManage/maintenance/maintenancePlan/CreateMaintenancePlan.vue

@ -0,0 +1,63 @@
<template>
<div class="slider-right create-route-page">
<TopBackTitle></TopBackTitle>
<div class="slider-right-body">
<PlanDetail ref="formRef" :id="id" :canEdit="true"></PlanDetail>
<div class="bottom-btns">
<el-button type="primary" size="small" @click="handleSave(false)"
>保存</el-button
>
<el-button
type="primary"
size="small"
v-if="!id"
@click="handleSave(true)"
>保存并继续新增</el-button
>
<el-button size="small" @click="handleCancel">取消</el-button>
</div>
</div>
</div>
</template>
<script>
import TopBackTitle from "@/components/TopBackTitle/index.vue";
import PlanDetail from "./components/PlanDetail.vue";
export default {
components: {
TopBackTitle,
PlanDetail,
},
data() {
return {
id: this.$route.query.id,
};
},
created() {},
methods: {
handleSave(reset) {
this.$refs.formRef.submit(reset).then((res) => {
if (!reset) {
this.$router.go(-1);
}
});
},
handleCancel() {
//
this.$confirm("是否取消编辑?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$router.go(-1);
})
.catch(() => {});
},
},
};
</script>
<style scoped lang="scss">
.create-route-page {
}
</style>

580
src/views/dike/runManage/maintenance/maintenancePlan/components/PlanDetail.vue

@ -0,0 +1,580 @@
<template>
<div class="detail-page">
<el-form
ref="formRef"
label-position="top"
:model="formData"
:rules="rules"
label-width="120px"
>
<div class="form-row-title">堤防选择</div>
<div class="flex items-start">
<el-form-item label="选择堤防" prop="dikeName">
<el-select
:disabled="!canEdit"
class="w-240"
size="small"
remote
filterable
reserve-keyword
:maxlength="50"
:remote-method="handleGetRemoteDikeMethod"
@focus="handleGetRemoteDikeMethod('')"
@change="handleChangeDike"
v-model="formData.dikeName"
placeholder="请选择堤防"
>
<el-option
v-for="item in dikeList"
:key="item.id"
:label="item.dikeName"
:value="item.dikeName"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="堤防类型" prop="dikeType" class="ml-24">
<el-select
v-model="formData.dikeType"
:disabled="true"
class="w-240"
size="small"
placeholder="请选择"
>
<el-option
v-for="item in projectTypeOptions"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
></el-option>
</el-select>
</el-form-item>
</div>
<div class="form-row-title">维养计划</div>
<div class="flex items-start">
<el-form-item label="维养计划名称" prop="name">
<el-input
:disabled="!canEdit"
class="w-240"
size="small"
v-model="formData.name"
placeholder="请输入名称"
maxlength="50"
></el-input>
</el-form-item>
<el-form-item label="维修养护类型" prop="type" class="ml-24">
<el-select
:disabled="!canEdit"
size="small"
class="w-240"
v-model="formData.type"
placeholder="请选择"
>
<el-option
v-for="(item, index) in yhPlanTypeOptions"
:label="item.dictLabel"
:value="item.dictValue"
:key="index"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div class="flex items-start">
<el-form-item label="计划开始/结束时间" prop="planTimeArr">
<el-date-picker
class=""
:disabled="!canEdit"
type="daterange"
size="small"
v-model="formData.planTimeArr"
placeholder="选择时间"
>
</el-date-picker>
</el-form-item>
</div>
<el-form
v-for="(subItem, subIndex) in formData.supplements"
ref="supplementFormRef"
label-position="top"
:model="subItem"
:rules="supplementRules"
label-width="120px"
:key="subIndex"
>
<div class="flex items-center">
<el-form-item label="资金来源" prop="type">
<el-select
:disabled="!canEdit"
size="small"
class="w-240"
v-model="subItem.type"
placeholder="请选择"
>
<el-option
v-for="(item, index) in supplementOptions"
:label="item.dictLabel"
:value="item.dictValue"
:key="index"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="资金金额" prop="amount" class="ml-24">
<el-input
:disabled="!canEdit"
class="w-240"
size="small"
type="number"
:min="0"
:max="9999999999"
v-model="subItem.amount"
placeholder="请输入"
></el-input>
<span class="ml-8">万元</span>
</el-form-item>
<i
class="el-icon-circle-plus cursor-pointer mt-24 ml-12"
@click="handleAddSupplement(subIndex)"
style="font-size: 20px; color: #36b29e"
></i>
<i
class="el-icon-remove cursor-pointer mt-24 ml-12"
@click="handleDelSupplement(subIndex)"
v-if="formData.supplements.length > 1"
style="font-size: 20px; color: #f26161"
></i>
</div>
</el-form>
<div class="flex items-start">
<el-form-item label="维养计划方案" prop="files">
<el-upload
:disabled="!canEdit"
class=""
action="#"
:http-request="handleUpload"
:before-upload="beforeUpload"
:before-remove="beforeRemove"
accept=".docx,.doc,.pdf"
show-file-list
:file-list="filesList"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">
文件支持docxdocpdf文件大小100M以内文件数量不能超过5份
</div>
</el-upload>
</el-form-item>
</div>
<div class="flex items-center">
<el-form-item label="维养工程单位" prop="engineeringUnit">
<el-input
:disabled="!canEdit"
class="w-240"
size="small"
v-model="formData.engineeringUnit"
placeholder="请输入"
></el-input>
</el-form-item>
</div>
<div class="flex items-center">
<el-form-item label="维养负责人" prop="responsiblePerson" class="">
<el-select
:disabled="!canEdit"
class="w-240"
v-model="formData.responsiblePerson"
filterable
remote
:remote-method="searchUser"
value-key="uid"
placeholder="请输入关键词搜索用户"
>
<el-option
v-for="item in personnelList"
:key="item.uid"
:label="item.name"
:value="item"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="维养提醒" prop="reminderTime" class="ml-24">
<el-date-picker
class="custom-time-piker"
:disabled="!canEdit"
size="small"
type="datetime"
v-model="formData.reminderTime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择时间"
>
</el-date-picker>
</el-form-item>
</div>
</el-form>
</div>
</template>
<script>
import dayjs from "dayjs";
import { listUser } from "@/api/management";
import {
getProjectCheckingLineRoute,
getRunProjectList,
updateYhPlanData,
getYhPlanDetails,
addYhPlanData,
} from "@/api/dike";
import { uploadFileData } from "@/api/system/upload";
export default {
props: {
id: String,
canEdit: Boolean,
},
data() {
return {
formData: {
dikeName: "",
dikeCode: "",
dikeType: "",
type: "0",
engineeringUnit: "",
planTimeArr: [],
startDate: "",
endDate: "",
reminderTime: "",
responsiblePerson: "",
supplements: [
{
supplement: "",
amount: 0,
},
],
doc: {
docs: [], //
images: [], //
audios: [],
},
},
rules: {
dikeName: [
{ required: true, message: "请选择堤防", trigger: "change" },
],
name: [{ required: true, message: "请输入计划名称", trigger: "blur" }],
type: [
{ required: true, message: "请选择计划类型", trigger: "change" },
],
planTimeArr: [
{ required: true, message: "请选择计划时间", trigger: "change" },
],
},
supplementRules: {
type: [
{ required: true, message: "请选择资金类型", trigger: "change" },
],
amount: [{ required: true, message: "请输入金额", trigger: "blur" }],
},
filesList: [
{
name: "株洲市烟花爆竹安全生产与产业引导条例.docx",
url: "http://172.16.34.83/profile2024/07/10/1fb058dc-623c-4327-91e2-7839180b88e2/株洲市烟花爆竹安全生产与产业引导条例.docx",
},
],
dikeList: [],
projectTypeOptions: [],
yhPlanTypeOptions: [], //
personnelList: [], //
supplementOptions: [], //
lineList: [], // 线
};
},
watch: {
id: {
handler(val) {
if (val) {
this.getDetail();
}
},
immediate: true,
},
},
created() {
this.searchUser();
this.getDicts("embankment_type").then((response) => {
this.projectTypeOptions = response.data;
});
this.getDicts("xs_yh_supplement").then((response) => {
this.supplementOptions = response.data;
});
this.getDicts("xs_yh_type").then((response) => {
this.yhPlanTypeOptions = response.data;
});
},
methods: {
getDetail() {
getYhPlanDetails(this.id).then((res) => {
this.formData = res.data;
this.formData.planTimeArr = this.formData.startDate
? [this.formData.startDate, this.formData.endDate]
: [];
this.filesList =
res.data?.doc?.docs?.map((item) => {
let arr = item.split("/");
let name = arr[arr.length - 1];
return {
name: name,
url: item,
};
}) || [];
});
},
handleChangeDike() {
let res = this.dikeList.find(
(v) => v.dikeName === this.formData.dikeName
);
this.formData.dikeCode = res.dikeCode;
this.formData.dikeType = res.dikeType;
this.formData.dikeName = res.dikeName;
this.formData.dutyHolder = res.dutyHolders.find(
(v) => v.dutyHolderType === "0"
)?.name;
},
handleGetRemoteDikeMethod(query) {
getRunProjectList({
pageSize: 10,
pageNum: 1,
data: {
dikeName: query,
},
}).then((res) => {
if (res) {
this.dikeList = res.records;
}
});
},
handleChangeLine(item, e) {
let res = this.lineList.find((v) => v.name === e);
item.lineId = res.id;
item.lineName = res.name;
},
//
beforeUpload(e) {
console.log("beforeUpload >>>>> ", e);
const { name, size } = e;
if (size > 100 * 1024 * 1024) {
this.$message.warning("文件大小不能超过100M");
return false;
}
if (!/\.(docx|doc|pdf)$/.test(name)) {
this.$message.warning("文件格式不正确");
return false;
}
if (this.filesList?.length >= 5) {
// this.$message.warning("5");
this.$message({
message: "最多上传5份",
type: "warning",
});
return false;
}
return true;
},
handleUpload(e) {
const { file } = e;
let fData = new FormData();
fData.append("file", file);
uploadFileData(fData)
.then((res) => {
this.filesList.push({
name: file.name,
url: res.url,
});
})
.catch((err) => {
console.log("err >>>>> ", err);
});
},
beforeRemove(file, filesList) {
console.log("删除file, filesList >>>>> ", file, filesList);
return false;
},
//
handleAddSupplement(index) {
if (this.formData.supplements.length >= this.supplementOptions.length) {
this.$message.warning("不能多于资金来源可选项最大数量");
return;
}
this.formData.supplements.splice(index + 1, 0, {
supplement: "",
amount: 0,
});
},
//
handleDelSupplement(index) {
this.formData.supplements.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.map((item) => {
return {
name: item.nickName,
uid: item.id,
};
});
});
},
submit(reset) {
console.log("提交表单 >>>> ", this.formData);
return new Promise((r, j) => {
Promise.all([
this.$refs.formRef.validate(),
...this.$refs.supplementFormRef.map((item) => item.validate()),
])
.then((res) => {
//
this.$confirm("确认提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.formData.startDate = this.formData.planTimeArr[0]
? dayjs(this.formData.planTimeArr[0]).format(
"YYYY-MM-DD 00:00:00"
)
: "";
this.formData.endDate = this.formData.planTimeArr[1]
? dayjs(this.formData.planTimeArr[1]).format(
"YYYY-MM-DD 23:59:59"
)
: "";
console.log("filesList >>>>> ", this.filesList);
this.formData.doc.docs = this.filesList.map((v) => v.url) || [];
(this.id ? updateYhPlanData : addYhPlanData)({
id: this.id || null,
...this.formData,
})
.then((res) => {
this.$message.success("提交成功");
if (reset) {
this.reset();
}
r();
})
.catch(() => {
j();
});
})
.catch(() => {});
})
.catch(() => {
j();
});
});
},
reset() {
this.formData = {};
this.$refs.formRef.resetFields();
if (this.$refs.subFormRef) {
this.$refs.subFormRef.forEach((item) => {
item.resetFields();
});
}
},
},
};
</script>
<style scoped lang="scss">
.detail-page {
width: 100%;
max-width: 1300px;
padding: 16px;
padding-bottom: 78px;
border-radius: 6px;
background-color: #fff;
.form-row-title {
font-size: 16px;
font-weight: bold;
margin-bottom: 10px;
border-left: 4px solid #36b29e;
padding-left: 8px;
}
.w-100 {
width: 100px !important;
}
.w-240 {
width: 240px !important;
}
.plan-list-item {
position: relative;
border: 1px solid #ebeef5;
border-radius: 4px;
padding: 16px;
margin-top: 16px;
}
.del-btn {
cursor: pointer;
z-index: 1;
width: 18px;
font-size: 18px;
}
}
</style>
<style lang="scss">
.detail-page {
.custom-select-cycleType {
.el-input__inner {
border-radius: 4px 0 0 4px;
}
}
.custom-select-date {
.el-input__inner {
border-radius: 0;
}
}
.custom-time-piker {
.el-input__inner {
border-radius: 0 4px 4px 0;
}
}
}
.custom-select-date-popper {
width: 202px !important;
padding-left: 10px;
.el-select-dropdown__list {
display: flex;
flex-wrap: wrap;
.el-select-dropdown__item {
display: flex;
justify-content: center;
align-items: center;
padding: 0;
width: 42px;
height: 32px;
&.selected {
&::after {
display: none;
}
}
}
}
}
</style>

891
src/views/dike/runManage/maintenance/maintenancePlan/index.vue

File diff suppressed because it is too large

658
src/views/dike/runManage/maintenance/maintenancePlanAccept/index.vue

@ -0,0 +1,658 @@
<!-- 巡查计划管理-堤防 -->
<script>
import {
postDFInspectionPlan,
putDFInspectionPlan,
postDFInspectionProjectList,
getDFInspectionPlan,
deleteDFInspectionPlan,
listUser,
} from "@/api/management";
import { deleteProjectCheckingPlan, getDikeYhPlanList } from "@/api/dike";
import TopBackTitle from "@/components/TopBackTitle/index.vue";
import { getAreasData } from "@/api/areas/index";
import { uploadFileData } from "@/api/system/upload";
import { reqCountMixins } from "@/mixins/reqCount";
export default {
name: "InspectionItems",
components: {
TopBackTitle,
},
mixins: [reqCountMixins],
data() {
return {
paramsData: {
status: "",
adcd: "",
dikeName: "",
dikeType: "",
name: "",
planDateArr: [],
},
currentRow: {},
dialogVisible: false,
patrolType: [], //
personnelList: [], //
areasOptions: [],
embankmentTypeOptions: [],
examType: [], //
tableData: [], //
patrolTableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0, //
},
tableCheckData: [], //
ruleForm: {
dikeCode: this.$route.query.dikeCode || "",
name: "",
type: "",
xcId: "",
frequency: "",
cycleType: "0",
isReminder: true,
reminderTime: "",
operators: [],
files: [], //
otherConfig: {
week: "",
time: "",
selectUser: [],
},
},
rules: {
name: [
{ required: true, message: "请输入计划名称", trigger: "change" },
{ max: 50, message: "名称最长为50个字符", trigger: "change" },
],
type: [
{ required: true, message: "请选择巡查类型", trigger: "change" },
],
xcId: [
{ required: true, message: "请选择巡查项目名称", trigger: "change" },
],
cycleType: [
{ required: true, message: "请选择巡查周期", trigger: "change" },
],
frequency: [
{ required: true, message: "请输入巡查次数", trigger: "blur" },
],
isReminder: [
{ required: true, message: "请选择消息提醒", trigger: "change" },
],
"otherConfig.time": [
{ required: true, message: "请选择检查时间", trigger: "change" },
],
reminderTime: [
{ required: true, message: "请选择提醒时间", trigger: "change" },
],
"otherConfig.selectUser": [
{ required: true, message: "请选择责任人", trigger: "change" },
],
},
};
},
computed: {
disabledUpload() {
return this.ruleForm?.files?.length >= 9;
},
},
methods: {
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
},
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
},
handleAdd() {
this.$router.push({
path: "createMaintenancePlan",
});
},
//
getTreeData() {
getAreasData().then((items) => {
// console.log("getAreasData", items.data);
let res = [];
let getChildren = (res, pid) => {
for (const i of items.data) {
if (i.parentid === pid) {
const newItem = {
label: i.name,
value: i.id,
};
if (i.layer != 3) newItem.children = [];
res.push(newItem);
getChildren(newItem.children, newItem.value);
}
}
};
getChildren(res, items.data[0].parentid);
this.areasOptions = res;
});
},
//
handleCheck(row) {
this.currentRow = row;
this.dialogVisible = true;
},
//
handleEdit(row) {
this.$router.push({
path: "createInspectionPlan",
query: {
id: row.id,
},
});
},
//
deleteTableItem(row) {
deleteDFInspectionPlan(row.id).then((res) => {
this.getTableData();
this.$message.success("删除成功");
});
},
//
submitForm(formName) {
console.log("保存 >>> ", this.ruleForm);
this.$refs[formName].validate((valid) => {
if (valid) {
let user = [];
this.ruleForm.otherConfig.selectUser?.forEach((element) => {
let a = {
name: element.nickName,
uid: element.id,
};
user.push(a);
});
this.ruleForm.operators = user;
if (this.ruleForm.id) {
putDFInspectionPlan(this.ruleForm).then((res) => {
this.getTableData();
this.dialogVisible = false;
this.$message.success("更新成功");
});
} else {
postDFInspectionPlan(this.ruleForm).then((res) => {
this.getTableData();
this.dialogVisible = false;
this.$message.success("添加成功");
});
}
} else {
console.log("校验不通过");
return false;
}
});
},
//
changePatrolType(ruleForm, reset) {
if (reset) {
this.$set(ruleForm, "xcId", "");
}
setTimeout(() => {
this.$refs.ruleForm.validateField("frequency");
this.$refs.ruleForm.validateField("otherConfig.time");
}, 30);
postDFInspectionProjectList({
data: {
timeView: {
timeField: "create_time",
},
type: ruleForm.type,
},
cv: {
name: "name",
type: "like",
},
pageSize: 999,
pageNum: 1,
}).then((res) => {
this.patrolTableData = res.records;
});
},
//
getTableData() {
getDikeYhPlanList({
data: {
timeView: {
timeField: "create_time",
},
adcd: this.paramsData.adcd,
name: this.paramsData.name,
startTime: this.paramsData.planDateArr[0]
? this.paramsData.planDateArr[0] + " 00:00:00"
: "",
endTime: this.paramsData.planDateArr[1]
? this.paramsData.planDateArr[1] + " 23:59:59"
: "",
dikeName: this.paramsData.dikeName,
dikeType: this.paramsData.dikeType,
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum,
}).then((res) => {
if (res) {
this.tableData = res.records;
this.pageData.total = res.total;
}
});
},
//
handleDelAll() {
if (this.tableCheckData.length === 0) {
this.$message.warning("请选择要删除的数据");
return;
}
this.$confirm("是否删除选中的记录?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
console.log("删除");
const ids = this.tableCheckData.map((item) => item.id);
deleteProjectCheckingPlan(ids.join(",")).then((res) => {
if (res) {
this.$message.success("删除成功");
this.getTableData();
}
});
})
.catch(() => {
console.log("取消删除");
});
},
//
beforeUpload(e) {
console.log("beforeUpload >>>>> ", e);
if (this.ruleForm.files?.length >= 9) {
return false;
}
return true;
},
handleUpload(e) {
const { file } = e;
let formData = new FormData();
formData.append("file", file);
uploadFileData(formData)
.then((res) => {
console.log("上传结果 >>>>> ", res);
this.ruleForm.files.push(res.url);
})
.catch((err) => {
console.log("err >>>>> ", err);
});
},
handleDelFile(_url, index) {
this.ruleForm.files.splice(index, 1);
},
handleSelectionChange(e) {
this.tableCheckData = e || [];
},
handleChangeQuery() {
this.reqCountCalc();
this.pageData.pageNum = 1;
this.tableData = [];
this.getTableData();
},
handleResetQuery() {
this.paramsData.adcd = "";
this.paramsData.name = "";
this.paramsData.planDateArr = [];
this.paramsData.dikeName = "";
this.paramsData.dikeType = "";
this.reqCountCalc();
this.pageData.pageNum = 1;
this.getTableData();
},
getDikeTypeName(type) {
let name = "";
this.embankmentTypeOptions?.forEach((element) => {
if (element.dictValue === type) {
name = element.dictLabel;
}
});
return name || type;
},
},
created() {
this.getTreeData();
this.getDicts("embankment_type").then((response) => {
this.embankmentTypeOptions = response.data;
});
this.getDicts("xs_classfy").then((res) => {
if (res.data && Array.isArray(res.data)) {
res.data?.forEach((element) => {
element.dictValue = element.dictValue;
});
this.examType = res.data;
}
});
this.getDicts("xs_cycle_type").then((res) => {
this.patrolType = res.data;
});
},
mounted() {
//
this.getTableData();
},
};
</script>
<template>
<div class="slider-right">
<TopBackTitle :showBackBtn="false"></TopBackTitle>
<div class="table-box slider-right-body">
<div class="search-form flex flex-wrap">
<div class="search-item flex items-center">
<span class="search-label">行政区划</span>
<el-cascader
:options="areasOptions"
v-model="paramsData.adcd"
:props="{
emitPath: false,
checkStrictly: true,
}"
placeholder="请选择行政区划"
clearable
size="small"
class="w-202 ml-10"
>
</el-cascader>
</div>
<div class="search-item flex items-center">
<span class="search-label">堤防名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.dikeName"
placeholder="请输入名称"
/>
</div>
<div class="search-item flex items-center">
<span class="search-label">堤防类型</span>
<el-select
clearable
size="small"
class="w-202 ml-10"
v-model="paramsData.dikeType"
:popper-append-to-body="false"
filterable
placeholder="请选择"
>
<el-option label="全部" value=""> </el-option>
<el-option
:label="item.dictLabel"
:value="item.dictValue"
v-for="(item, index) in embankmentTypeOptions"
:key="index"
></el-option>
</el-select>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.name"
placeholder="请输入名称"
/>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划日期</span>
<el-date-picker
clearable
size="small"
class="ml-10"
v-model="paramsData.planDateArr"
type="daterange"
placeholder="开始日期"
value-format="yyyy-MM-dd"
></el-date-picker>
</div>
<div class="flex-1 flex justify-end search-item">
<el-button
size="small"
class="flex-shrink-0 myml-12"
type="success"
@click="handleChangeQuery"
>查询</el-button
>
<el-button
class="flex-shrink-0"
size="small"
@click="handleResetQuery"
>重置</el-button
>
</div>
</div>
<div class="line"></div>
<div class="flex justify-between mb-16">
<el-radio-group
v-model="paramsData.status"
@tab-click="handleChangeQuery"
>
<el-radio-button label="">全部</el-radio-button>
<el-radio-button label="1">待验收</el-radio-button>
<el-radio-button label="2">已驳回重整</el-radio-button>
<el-radio-button label="3">已通过验收</el-radio-button>
</el-radio-group>
<div>
<el-button type="primary" size="small" @click="handleAdd"
>新增</el-button
>
<el-button
type="danger"
size="small"
@click="handleDelAll"
v-hasPermi="['df:run:inspection:plan:delAll']"
>删除</el-button
>
</div>
</div>
<el-table
:data="tableData"
border
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="dikeName" align="center" label="堤防名称" />
<el-table-column prop="dikeType" align="center" label="堤防类型">
<template slot-scope="scope">
<span>{{ getDikeTypeName(scope.row.dikeType) }}</span>
</template>
</el-table-column>
<el-table-column prop="name" align="center" label="维养计划名称" />
<el-table-column prop="name" align="center" label="维养类型" />
<el-table-column prop="name" align="center" label="完成维养时间" />
<el-table-column prop="unit" align="center" label="维养单位">
</el-table-column>
<el-table-column prop="unit" align="center" label="维养负责人">
</el-table-column>
<el-table-column prop="unit" align="center" label="资金使用">
</el-table-column>
<el-table-column prop="createTime" align="center" label="提交时间">
</el-table-column>
<el-table-column prop="doneTime" align="center" label="验收时间">
</el-table-column>
<el-table-column prop="auditContent" align="center" label="审批意见">
</el-table-column>
<el-table-column prop="auditContent" align="center" label="审批材料">
</el-table-column>
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span
v-if="scope.row.status == 0"
style="color: #f56c6c; font-weight: 600"
>待提交</span
>
<span
v-else-if="scope.row.status == 1"
style="color: #67c23a; font-weight: 600"
>审批中</span
>
</template>
</el-table-column>
<el-table-column
prop="operate"
align="center"
label="操作"
fixed="right"
width="180"
>
<template slot-scope="scope">
<el-button
style="margin-right: 16px"
type="text"
size="small"
@click="handleCheck(scope.row)"
>查看</el-button
>
<el-button
style="margin-right: 16px"
@click="handleEdit(scope.row)"
type="text"
size="small"
>通过</el-button
>
<el-button
style="margin-right: 16px; color: red"
@click="handleEdit(scope.row)"
type="text"
size="small"
>驳回</el-button
>
</template>
</el-table-column>
</el-table>
<el-pagination
background
class="pagination"
style="margin-top: 16px; margin-right: 16px; float: right"
:current-page="pageData.pageNum"
:page-sizes="pageData.pageSizes"
layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total"
@size-change="(e) => handlePageSizeChange(e)"
@current-change="(e) => handleCurrentPageChange(e)"
>
</el-pagination>
</div>
<el-drawer
title="计划详情"
:visible.sync="dialogVisible"
direction="rtl"
size="80%"
:destroy-on-close="true"
>
<div class="drawer-body">
<!-- <PlanDetail
ref="formRef"
:id="currentRow.id"
:canEdit="false"
></PlanDetail> -->
</div>
<div class="drawer-footer p-16">
<el-button size="mini" type="primary" @click="handleEdit(currentRow)"
>编辑</el-button
>
<el-button size="mini" @click="dialogVisible = false">取消</el-button>
</div>
</el-drawer>
</div>
</template>
<style scoped lang="less">
.search-form {
.search-item {
margin-bottom: 16px;
.search-label {
width: 100px;
text-align: right;
flex-shrink: 0;
}
}
}
.line {
background: #e5e5e5;
width: 100%;
height: 1px;
margin-top: 8px;
margin-bottom: 24px;
}
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
// height: calc(100% - 50px - 24px);
margin-top: 24px;
padding: 16px;
padding-bottom: 60px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
}
}
.drawer-footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
z-index: 2;
border-top: 1px solid #ebeef5;
background: #fff;
}
.drawer-body {
height: 100%;
padding: 0 16px;
padding-bottom: 72px;
overflow: auto;
}
</style>

678
src/views/dike/runManage/maintenance/maintenancePlanAudit/index.vue

@ -0,0 +1,678 @@
<!-- 维养计划审核列表 -->
<script>
import {
postDFInspectionPlan,
putDFInspectionPlan,
postDFInspectionProjectList,
getDFInspectionPlan,
deleteDFInspectionPlan,
listUser,
} from "@/api/management";
import { deleteProjectCheckingPlan, getYhPlanApprovalList } from "@/api/dike";
import TopBackTitle from "@/components/TopBackTitle/index.vue";
import { getAreasData } from "@/api/areas/index";
import { uploadFileData } from "@/api/system/upload";
import { reqCountMixins } from "@/mixins/reqCount";
import { paginationMixins } from "@/mixins/commonPagination";
export default {
name: "InspectionItems",
components: {
TopBackTitle,
},
mixins: [reqCountMixins, paginationMixins],
data() {
return {
paramsData: {
status: "",
adcd: "",
dikeName: "",
dikeType: "",
name: "",
planDateArr: [],
},
currentRow: {},
dialogVisible: false,
patrolType: [], //
personnelList: [], //
areasOptions: [],
embankmentTypeOptions: [],
examType: [], //
tableData: [], //
supplementOptions: [], //
patrolTableData: [], //
tableCheckData: [], //
ruleForm: {
dikeCode: this.$route.query.dikeCode || "",
name: "",
type: "",
xcId: "",
frequency: "",
cycleType: "0",
isReminder: true,
reminderTime: "",
operators: [],
files: [], //
otherConfig: {
week: "",
time: "",
selectUser: [],
},
},
rules: {
name: [
{ required: true, message: "请输入计划名称", trigger: "change" },
{ max: 50, message: "名称最长为50个字符", trigger: "change" },
],
type: [
{ required: true, message: "请选择巡查类型", trigger: "change" },
],
xcId: [
{ required: true, message: "请选择巡查项目名称", trigger: "change" },
],
cycleType: [
{ required: true, message: "请选择巡查周期", trigger: "change" },
],
frequency: [
{ required: true, message: "请输入巡查次数", trigger: "blur" },
],
isReminder: [
{ required: true, message: "请选择消息提醒", trigger: "change" },
],
"otherConfig.time": [
{ required: true, message: "请选择检查时间", trigger: "change" },
],
reminderTime: [
{ required: true, message: "请选择提醒时间", trigger: "change" },
],
"otherConfig.selectUser": [
{ required: true, message: "请选择责任人", trigger: "change" },
],
},
};
},
methods: {
//
getTreeData() {
getAreasData().then((items) => {
// console.log("getAreasData", items.data);
let res = [];
let getChildren = (res, pid) => {
for (const i of items.data) {
if (i.parentid === pid) {
const newItem = {
label: i.name,
value: i.id,
};
if (i.layer != 3) newItem.children = [];
res.push(newItem);
getChildren(newItem.children, newItem.value);
}
}
};
getChildren(res, items.data[0].parentid);
this.areasOptions = res;
});
},
//
handleCheck(row) {
this.currentRow = row;
this.dialogVisible = true;
},
//
handleEdit(row) {
this.$router.push({
path: "createInspectionPlan",
query: {
id: row.id,
},
});
},
//
deleteTableItem(row) {
deleteDFInspectionPlan(row.id).then((res) => {
this.getTableData();
this.$message.success("删除成功");
});
},
//
submitForm(formName) {
console.log("保存 >>> ", this.ruleForm);
this.$refs[formName].validate((valid) => {
if (valid) {
let user = [];
this.ruleForm.otherConfig.selectUser?.forEach((element) => {
let a = {
name: element.nickName,
uid: element.id,
};
user.push(a);
});
this.ruleForm.operators = user;
if (this.ruleForm.id) {
putDFInspectionPlan(this.ruleForm).then((res) => {
this.getTableData();
this.dialogVisible = false;
this.$message.success("更新成功");
});
} else {
postDFInspectionPlan(this.ruleForm).then((res) => {
this.getTableData();
this.dialogVisible = false;
this.$message.success("添加成功");
});
}
} else {
console.log("校验不通过");
return false;
}
});
},
//
changePatrolType(ruleForm, reset) {
if (reset) {
this.$set(ruleForm, "xcId", "");
}
setTimeout(() => {
this.$refs.ruleForm.validateField("frequency");
this.$refs.ruleForm.validateField("otherConfig.time");
}, 30);
postDFInspectionProjectList({
data: {
timeView: {
timeField: "create_time",
},
type: ruleForm.type,
},
cv: {
name: "name",
type: "like",
},
pageSize: 999,
pageNum: 1,
}).then((res) => {
this.patrolTableData = res.records;
});
},
//
getTableData() {
getYhPlanApprovalList({
data: {
condition: {
adcd: this.paramsData.adcd,
name: this.paramsData.name,
startDate: this.paramsData.planDateArr[0]
? this.paramsData.planDateArr[0] + " 00:00:00"
: "",
endDate: this.paramsData.planDateArr[1]
? this.paramsData.planDateArr[1] + " 23:59:59"
: "",
dikeName: this.paramsData.dikeName,
dikeType: this.paramsData.dikeType,
},
status: this.paramsData.status,
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum,
}).then((res) => {
if (res) {
this.tableData = res.records;
this.pageData.total = res.total;
}
});
},
//
handleDelAll() {
if (this.tableCheckData.length === 0) {
this.$message.warning("请选择要删除的数据");
return;
}
this.$confirm("是否删除选中的记录?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
console.log("删除");
const ids = this.tableCheckData.map((item) => item.id);
deleteProjectCheckingPlan(ids.join(",")).then((res) => {
if (res) {
this.$message.success("删除成功");
this.getTableData();
}
});
})
.catch(() => {
console.log("取消删除");
});
},
//
beforeUpload(e) {
console.log("beforeUpload >>>>> ", e);
if (this.ruleForm.files?.length >= 9) {
return false;
}
return true;
},
handleUpload(e) {
const { file } = e;
let formData = new FormData();
formData.append("file", file);
uploadFileData(formData)
.then((res) => {
console.log("上传结果 >>>>> ", res);
this.ruleForm.files.push(res.url);
})
.catch((err) => {
console.log("err >>>>> ", err);
});
},
handleDelFile(_url, index) {
this.ruleForm.files.splice(index, 1);
},
handleSelectionChange(e) {
this.tableCheckData = e || [];
},
handleChangeQuery() {
this.reqCountCalc();
// this.pageData.pageNum = 1;
// this.tableData = [];
// this.getTableData();
},
handleResetQuery() {
this.paramsData.adcd = "";
this.paramsData.name = "";
this.paramsData.planDateArr = [];
this.paramsData.dikeName = "";
this.paramsData.dikeType = "";
this.reqCountCalc();
this.pageData.pageNum = 1;
this.getTableData();
},
getDikeTypeName(type) {
let name = "";
this.embankmentTypeOptions?.forEach((element) => {
if (element.dictValue === type) {
name = element.dictLabel;
}
});
return name || type;
},
},
created() {
this.getTreeData();
this.getDicts("embankment_type").then((response) => {
this.embankmentTypeOptions = response.data;
});
this.getDicts("xs_classfy").then((res) => {
if (res.data && Array.isArray(res.data)) {
res.data?.forEach((element) => {
element.dictValue = element.dictValue;
});
this.examType = res.data;
}
});
this.getDicts("xs_cycle_type").then((res) => {
this.patrolType = res.data;
});
this.getDicts("xs_yh_supplement").then((response) => {
this.supplementOptions = response.data;
});
},
mounted() {
//
this.getTableData();
},
};
</script>
<template>
<div class="slider-right">
<TopBackTitle :showBackBtn="false"></TopBackTitle>
<div class="table-box slider-right-body">
<div class="search-form flex flex-wrap">
<div class="search-item flex items-center">
<span class="search-label">行政区划</span>
<el-cascader
:options="areasOptions"
v-model="paramsData.adcd"
:props="{
emitPath: false,
checkStrictly: true,
}"
placeholder="请选择行政区划"
clearable
size="small"
class="w-202 ml-10"
>
</el-cascader>
</div>
<div class="search-item flex items-center">
<span class="search-label">堤防名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.dikeName"
placeholder="请输入名称"
/>
</div>
<div class="search-item flex items-center">
<span class="search-label">堤防类型</span>
<el-select
clearable
size="small"
class="w-202 ml-10"
v-model="paramsData.dikeType"
:popper-append-to-body="false"
filterable
placeholder="请选择"
>
<el-option label="全部" value=""> </el-option>
<el-option
:label="item.dictLabel"
:value="item.dictValue"
v-for="(item, index) in embankmentTypeOptions"
:key="index"
></el-option>
</el-select>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.name"
placeholder="请输入名称"
/>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划日期</span>
<el-date-picker
clearable
size="small"
class="ml-10"
v-model="paramsData.planDateArr"
type="daterange"
placeholder="开始日期"
value-format="yyyy-MM-dd"
></el-date-picker>
</div>
<div class="flex-1 flex justify-end search-item">
<el-button
size="small"
class="flex-shrink-0 myml-12"
type="success"
@click="handleChangeQuery"
>查询</el-button
>
<el-button
class="flex-shrink-0"
size="small"
@click="handleResetQuery"
>重置</el-button
>
</div>
</div>
<div class="line"></div>
<div class="flex justify-between mb-16">
<el-radio-group v-model="paramsData.status" @input="handleChangeQuery">
<el-radio-button label="">全部</el-radio-button>
<el-radio-button label="1">待审批</el-radio-button>
<el-radio-button label="2">已通过</el-radio-button>
<el-radio-button label="3">已驳回</el-radio-button>
</el-radio-group>
</div>
<el-table
:data="tableData"
border
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="dikeName" align="center" label="堤防名称" />
<el-table-column prop="dikeType" align="center" label="堤防类型">
<template slot-scope="scope">
<span>{{ getDikeTypeName(scope.row.dikeType) }}</span>
</template>
</el-table-column>
<el-table-column prop="name" align="center" label="维养计划名称" />
<el-table-column prop="type" align="center" label="维养类型" />
<el-table-column
prop="startDate"
align="center"
label="计划开始/结束时间"
>
<template slot-scope="scope">
<span>{{ scope.row.startDate }}</span>
</template>
</el-table-column>
<el-table-column prop="unit" align="center" label="维养单位">
<template #default="scope">
<span>{{
scope.row.detail && scope.row.detail.engineeringUnit
}}</span>
</template>
</el-table-column>
<el-table-column prop="unit" align="center" label="维养负责人">
<template #default="scope">
<span>{{
scope.row.approver &&
scope.row.approver.map((v) => v.name).join("、")
}}</span>
</template>
</el-table-column>
<el-table-column prop="unit" align="center" label="资金计划">
<template #default="scope">
<span>{{
scope.row.detail &&
scope.row.detail.supplements &&
scope.row.detail.supplements
.map(
(v) =>
supplementOptions.find((v2) => v2.dictValue === v)
.dictLabel || v
)
.join("、")
}}</span>
</template>
</el-table-column>
<el-table-column prop="unit" align="center" label="维修计划方案">
<template #default="scope">
<span>{{
scope.row.detail &&
scope.row.detail.doc &&
scope.row.detail.doc.docs &&
scope.row.detail.doc.docs
.map((v) => v.split("/")[v.split("/").length - 1])
.join("、")
}}</span>
</template>
</el-table-column>
<el-table-column prop="submitTime" align="center" label="提交时间">
</el-table-column>
<el-table-column prop="approvalTime" align="center" label="审批时间">
</el-table-column>
<el-table-column prop="comment" align="center" label="审批意见">
</el-table-column>
<el-table-column prop="auditContent" align="center" label="审批材料">
</el-table-column>
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span
v-if="scope.row.status == '0'"
style="color: #f56c6c; font-weight: 600"
>待提交</span
>
<span
v-else-if="scope.row.status == '1'"
style="color: #67c23a; font-weight: 600"
>审批中</span
>
<span
v-else-if="scope.row.status == '2'"
style="color: #67c23a; font-weight: 600"
>已通过</span
>
<span
v-else-if="scope.row.status == '3'"
style="color: #67c23a; font-weight: red"
>已驳回</span
>
</template>
</el-table-column>
<el-table-column
prop="operate"
align="center"
label="操作"
fixed="right"
width="180"
>
<template slot-scope="scope">
<el-button
style="margin-right: 16px"
type="text"
size="small"
@click="handleCheck(scope.row)"
>查看</el-button
>
<el-button
style="margin-right: 16px"
@click="handlePass(scope.row)"
type="text"
size="small"
>通过</el-button
>
<el-button
style="margin-right: 16px; color: red"
@click="handleEdit(scope.row)"
type="text"
size="small"
>驳回</el-button
>
</template>
</el-table-column>
</el-table>
<el-pagination
background
class="pagination"
style="margin-top: 16px; margin-right: 16px; float: right"
:current-page="pageData.pageNum"
:page-sizes="pageData.pageSizes"
layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total"
@size-change="(e) => handlePageSizeChange(e)"
@current-change="(e) => handleCurrentPageChange(e)"
>
</el-pagination>
</div>
<el-drawer
title="计划详情"
:visible.sync="dialogVisible"
direction="rtl"
size="80%"
:destroy-on-close="true"
>
<div class="drawer-body">
<!-- <PlanDetail
ref="formRef"
:id="currentRow.id"
:canEdit="false"
></PlanDetail> -->
</div>
<div class="drawer-footer p-16">
<el-button size="mini" type="primary" @click="handleEdit(currentRow)"
>编辑</el-button
>
<el-button size="mini" @click="dialogVisible = false">取消</el-button>
</div>
</el-drawer>
</div>
</template>
<style scoped lang="less">
.search-form {
.search-item {
margin-bottom: 16px;
.search-label {
width: 100px;
text-align: right;
flex-shrink: 0;
}
}
}
.line {
background: #e5e5e5;
width: 100%;
height: 1px;
margin-top: 8px;
margin-bottom: 24px;
}
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
// height: calc(100% - 50px - 24px);
margin-top: 24px;
padding: 16px;
padding-bottom: 60px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
}
}
.drawer-footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
z-index: 2;
border-top: 1px solid #ebeef5;
background: #fff;
}
.drawer-body {
height: 100%;
padding: 0 16px;
padding-bottom: 72px;
overflow: auto;
}
</style>

63
src/views/dike/runManage/maintenance/maintenanceRecords/CreateMaintenanceRecord.vue

@ -0,0 +1,63 @@
<template>
<div class="slider-right create-route-page">
<TopBackTitle></TopBackTitle>
<div class="slider-right-body">
<RecordDetail></RecordDetail>
<div class="bottom-btns">
<el-button type="primary" size="small" @click="handleSave(false)"
>保存</el-button
>
<el-button
type="primary"
size="small"
v-if="!id"
@click="handleSave(true)"
>保存并继续新增</el-button
>
<el-button size="small" @click="handleCancel">取消</el-button>
</div>
</div>
</div>
</template>
<script>
import TopBackTitle from "@/components/TopBackTitle/index.vue";
import RecordDetail from "./components/RecordDetail.vue";
export default {
components: {
TopBackTitle,
RecordDetail,
},
data() {
return {
id: this.$route.query.id,
};
},
created() {},
methods: {
handleSave(reset) {
this.$refs.formRef.submit(reset).then((res) => {
if (!reset) {
this.$router.go(-1);
}
});
},
handleCancel() {
//
this.$confirm("是否取消编辑?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$router.go(-1);
})
.catch(() => {});
},
},
};
</script>
<style scoped lang="scss">
.create-route-page {
}
</style>

282
src/views/dike/runManage/maintenance/maintenanceRecords/components/RecordDetail.vue

@ -0,0 +1,282 @@
<template>
<div class="record-detail">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm">
<el-form-item label-width="130px" label="维养计划名称" prop="planId">
<el-select
v-model="ruleForm.planId"
filterable
remote
:remote-method="searchPlan"
placeholder="请输入"
@change="changeSelectPlan"
>
<el-option
v-for="item in planList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<div style="display: flex">
<el-form-item label-width="130px" label="堤防名称">
<el-input v-model="planData.dikeName" disabled />
</el-form-item>
<el-form-item label-width="130px" label="计划时间">
<el-date-picker v-model="planData.planTime" type="month" disabled>
</el-date-picker>
</el-form-item>
</div>
<div style="display: flex">
<el-form-item label-width="130px" label="国补资金">
<div style="display: flex">
<el-input
v-model="planData.nationalSupplement"
type="number"
disabled
style="margin-right: 5px"
/>
<div style="width: 50px">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="自筹资金">
<div style="display: flex">
<el-input
v-model="planData.selfSupplement"
type="number"
disabled
style="margin-right: 5px"
/>
<div style="width: 50px">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="项目预算">
<el-input v-model="planData.budget" disabled />
</el-form-item>
</div>
<el-form-item label-width="130px" label="具体地点">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="planData.location"
disabled
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护内容">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="planData.content"
disabled
/>
</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="130px" label="维修养护前" prop="before">
<el-input
v-model="ruleForm.before"
placeholder="请输入"
maxlength="100"
style="width: 202px"
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护过程" prop="middle">
<el-input
v-model="ruleForm.middle"
placeholder="请输入"
maxlength="100"
style="width: 202px"
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护结束后" prop="after">
<el-input
v-model="ruleForm.after"
placeholder="请输入"
maxlength="100"
style="width: 202px"
/>
</el-form-item>
<el-form-item
label-width="130px"
label="维修养护费用"
prop="maintenanceFunds"
>
<el-input-number
v-model="ruleForm.maintenanceFunds"
placeholder="请输入"
style="width: 165px"
:min="0"
:precision="4"
:controls="false"
/>
万元
</el-form-item>
<el-form-item label-width="130px" label="养护人员" prop="operators">
<!-- <el-input v-model="ruleForm.operators" placeholder="请输入" style="width: 202px;" /> -->
<el-select
v-model="ruleForm.selectUser"
multiple
filterable
remote
:remote-method="searchUser"
value-key="id"
placeholder="请输入关键词搜索用户"
prop="selectUser"
>
<el-option
v-for="item in personnelList"
:key="item.id"
:label="item.nickName"
:value="item"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label-width="130px" label="落实情况" prop="implement">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="ruleForm.implement"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label-width="130px" label="备注" prop="remark">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="ruleForm.remark"
placeholder="请输入"
/>
</el-form-item>
</el-form>
</div>
</template>
<script>
import {
putDFMaintenanceRecords,
deleteDFMaintenanceRecords,
postDFMaintenanceRecords,
getDFMaintenanceRecords,
getDicts,
postDFMaintenancePlanList,
getDFMaintenancePlan,
listUser,
} from "@/api/management";
export default {
data() {
return {
ruleForm: {
name: "",
planId: "",
before: "",
middle: "",
after: "",
maintenanceFunds: 0,
operators: [],
selectUser: [],
implement: "",
remark: "",
status: "0",
},
rules: {
planId: [
{ required: false, message: "请输入维养计划名称", trigger: "blur" },
],
before: [
{ required: true, message: "请输入维修养护前", trigger: "blur" },
],
middle: [
{ required: true, message: "请输入维修养护过程", trigger: "blur" },
],
after: [
{ required: true, message: "请输入维修养护结束后", trigger: "blur" },
],
},
planList: [],
planData: {},
personnelList: [],
};
},
created() {},
methods: {
//
searchPlan(value) {
postDFMaintenancePlanList({
data: {
timeView: {
timeField: "create_time",
},
dikeCode: this.$route.query.dikeCode,
},
cv: {
name: "name",
type: "like",
value,
},
pageSize: 100,
pageNum: 1,
}).then((res) => {
if (res) {
this.planList = res.records;
}
});
},
//
changeSelectPlan() {
// let p = this.planList.find((item) => item.id === this.ruleForm.planId);
// this.baseInfoDialog.id = p?.dikeId;
// this.baseInfoDialog.code = p?.dikeCode;
// getDFMaintenancePlan(this.ruleForm.planId).then((res) => {
// if (res.data) {
// this.ruleForm.name = res.data.name;
// this.planData = res.data;
// this.planData.budget =
// res.data.nationalSupplement + res.data.selfSupplement;
// }
// });
},
//
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;
});
},
},
};
</script>
<style scoped lang="scss">
.record-detail {
}
</style>

671
src/views/dike/runManage/maintenance/maintenanceRecords/index.vue

@ -13,24 +13,22 @@ import {
import { getDikeYhRecordList, updateYhRecordStatus } from "@/api/dike";
import DikeBaseInfoDialog from "@/views/dike/runManage/components/DikeBaseInfoDialog/index.vue";
import TopBackTitle from "@/components/TopBackTitle/index.vue";
export default {
name: "InspectionItems",
components: { DikeBaseInfoDialog },
components: { TopBackTitle, DikeBaseInfoDialog },
data() {
return {
//
baseInfoDialog: {
show: false,
id: "",
code: "",
paramsData: {
adcd: "",
dikeName: "",
dikeType: "",
name: "",
planDateArr: [],
},
tableHeight: null,
createTimeArr: [],
updateTimeArr: [],
repairCostArr: ["", ""],
selectStatus: "", //
searchInput: "",
areasOptions: [],
embankmentTypeOptions: [],
dialogVisible: false,
prohibitEditing: false,
statusList: [], //
@ -45,7 +43,6 @@ export default {
location: "",
content: "",
}, //
planList: [],
tableData: [], //
pageData: {
pageNum: 1, //
@ -53,33 +50,6 @@ export default {
pageSizes: [10, 20, 50, 100],
total: 0, //
},
ruleForm: {
name: "",
planId: "",
before: "",
middle: "",
after: "",
maintenanceFunds: 0,
operators: [],
selectUser: [],
implement: "",
remark: "",
status: "0",
},
rules: {
planId: [
{ required: false, message: "请输入维养计划名称", trigger: "blur" },
],
before: [
{ required: true, message: "请输入维修养护前", trigger: "blur" },
],
middle: [
{ required: true, message: "请输入维修养护过程", trigger: "blur" },
],
after: [
{ required: true, message: "请输入维修养护结束后", trigger: "blur" },
],
},
};
},
watch: {
@ -105,14 +75,12 @@ export default {
this.$message.success("删除成功");
});
},
//
handleOpenDetails() {
if (this.baseInfoDialog.id) {
this.baseInfoDialog.show = true;
} else {
this.$message.warning("缺少id");
}
handleAdd() {
this.$router.push({
path: "createMaintenanceRecord",
});
},
handleDelAll() {},
//
viewOrEditPlanDetails(row, edit = false) {
if (!edit) {
@ -182,6 +150,7 @@ export default {
this.$refs.ruleForm.resetFields();
this.dialogVisible = false;
},
handleConfirmAccept(row) {},
//
submitForm(formName, confirm = false) {
this.$refs[formName].validate((valid) => {
@ -232,61 +201,7 @@ export default {
}
});
},
//
searchPlan(value) {
postDFMaintenancePlanList({
data: {
timeView: {
timeField: "create_time",
},
dikeCode: this.$route.query.dikeCode,
},
cv: {
name: "name",
type: "like",
value,
},
pageSize: 100,
pageNum: 1,
}).then((res) => {
if (res) {
this.planList = res.records;
}
});
},
//
changeSelectPlan() {
let p = this.planList.find((item) => item.id === this.ruleForm.planId);
this.baseInfoDialog.id = p?.dikeId;
this.baseInfoDialog.code = p?.dikeCode;
getDFMaintenancePlan(this.ruleForm.planId).then((res) => {
if (res.data) {
this.ruleForm.name = res.data.name;
this.planData = res.data;
this.planData.budget =
res.data.nationalSupplement + res.data.selfSupplement;
}
});
},
//
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;
});
},
// dialog
closeDialog(ruleForm = "ruleForm") {
console.log("触发关闭dialog", ruleForm);
@ -309,22 +224,19 @@ export default {
getTableData() {
getDikeYhRecordList({
data: {
startCreatedTime: this.createTimeArr[0]
? this.createTimeArr[0] + " 00:00:00"
: "",
endCreatedTime: this.createTimeArr[1]
? this.createTimeArr[1] + " 23:59:59"
: "",
startUpdateTime: this.updateTimeArr[0]
? this.updateTimeArr[0] + " 00:00:00"
timeView: {
timeField: "create_time",
},
adcd: this.paramsData.adcd,
dikeName: this.paramsData.dikeName,
dikeType: this.paramsData.dikeType,
name: this.paramsData.name,
startDate: this.paramsData.planDateArr[0]
? this.paramsData.planDateArr[0] + " 00:00:00"
: "",
endUpdateTime: this.updateTimeArr[1]
? this.updateTimeArr[1] + " 23:59:59"
endDate: this.paramsData.planDateArr[1]
? this.paramsData.planDateArr[1] + " 23:59:59"
: "",
minRepairCost: this.repairCostArr[0],
maxRepairCost: this.repairCostArr[1],
status: this.selectStatus,
dikeCode: this.$route.query.dikeCode,
},
cv: {
name: "name",
@ -339,20 +251,27 @@ export default {
}
});
},
handleChangeQuery() {
this.pageData.pageNum = 1;
this.getTableData();
},
//
resetSearch() {
this.createTimeArr = [];
this.updateTimeArr = [];
this.repairCostArr = ["", ""];
this.selectStatus = "";
handleResetQuery() {
this.paramsData = {
adcd: "",
dikeName: "",
dikeType: "",
name: "",
planDateArr: [],
};
this.pagination.pageNum = 1;
this.tableData = [];
this.getTableData();
},
},
mounted() {
this.tableHeight = window.innerHeight - 300;
//
this.getTableData();
this.searchPlan("");
//
getDicts("xs_yh_record_status").then((res) => {
if (res.data && Array.isArray(res.data)) {
@ -365,73 +284,106 @@ export default {
<template>
<div class="slider-right">
<div class="top-title">
{{ $router.currentRoute.meta.title }} - {{ $route.query.dikeName }}
</div>
<div class="table-box">
<div class="top-search">
<div class="flex items-start">
<div>
<div>
<span>创建时间</span>
<el-date-picker
v-model="createTimeArr"
class="w-360"
type="daterange"
range-separator="至"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
<span class="ml-30">更新时间</span>
<el-date-picker
v-model="updateTimeArr"
type="daterange"
class="w-360"
range-separator="至"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</div>
<div class="mt-12">
<span>维修费用</span>
<el-input v-model="repairCostArr[0]" class="w-160"></el-input>
<span> - </span>
<el-input class="w-160" v-model="repairCostArr[1]"></el-input>
<span class="ml-30">维修状态</span>
<el-select
v-model="selectStatus"
class="w-360"
placeholder="请选择"
>
<el-option label="全部" value="" />
<el-option
v-for="item in statusList"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
</el-select>
</div>
</div>
<TopBackTitle :showBackBtn="false"></TopBackTitle>
<div class="table-box slider-right-body">
<div class="search-form flex flex-wrap">
<div class="search-item flex items-center">
<span class="search-label">行政区划</span>
<el-cascader
:options="areasOptions"
v-model="paramsData.adcd"
:props="{
emitPath: false,
checkStrictly: true,
}"
placeholder="请选择行政区划"
clearable
size="small"
class="w-202 ml-10"
>
</el-cascader>
</div>
<div class="search-item flex items-center">
<span class="search-label">堤防名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.dikeName"
placeholder="请输入名称"
/>
</div>
<div class="search-item flex items-center">
<span class="search-label">堤防类型</span>
<el-select
clearable
size="small"
class="w-202 ml-10"
v-model="paramsData.dikeType"
:popper-append-to-body="false"
filterable
placeholder="请选择"
>
<el-option label="全部" value=""> </el-option>
<el-option
:label="item.dictLabel"
:value="item.dictValue"
v-for="(item, index) in embankmentTypeOptions"
:key="index"
></el-option>
</el-select>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.name"
placeholder="请输入名称"
/>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划日期</span>
<el-date-picker
clearable
size="small"
class="ml-10"
v-model="paramsData.planDateArr"
type="daterange"
placeholder="开始日期"
value-format="yyyy-MM-dd"
></el-date-picker>
</div>
<div class="flex-1 flex justify-end search-item">
<el-button
class="search-btn !ml-24"
size="small"
class="flex-shrink-0 myml-12"
type="success"
@click="getTableData()"
>搜索</el-button
@click="handleChangeQuery"
>查询</el-button
>
<el-button
class="flex-shrink-0"
size="small"
@click="handleResetQuery"
>重置</el-button
>
</div>
</div>
<div class="line"></div>
<div class="flex justify-end mb-16">
<div>
<el-button type="primary" size="small" @click="handleAdd"
>新增</el-button
>
<el-button type="danger" size="small" @click="handleDelAll"
>删除</el-button
>
<el-button @click="resetSearch()">重置</el-button>
</div>
<el-button
class="search-btn"
style="margin-right: 16px; margin-bottom: 8px"
type="success"
@click="dialogVisible = true"
v-hasPermi="['df:run:main:record:add']"
>添加</el-button
>
</div>
<el-table class="table" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100" />
@ -444,12 +396,7 @@ export default {
align="center"
label="维修养护费用"
/>
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span v-if="scope.row.status == '0'" class="is-save">已保存</span>
<span v-else class="is-confirm">已确认</span>
</template>
</el-table-column>
<el-table-column
prop="createTime"
align="center"
@ -457,14 +404,19 @@ export default {
label="创建时间"
>
</el-table-column>
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span v-if="scope.row.status == '0'" class="is-save">已保存</span>
<span v-else class="is-confirm">已确认</span>
</template>
</el-table-column>
<el-table-column
prop="updateTime"
prop="operate"
fixed="right"
width="180"
align="center"
sortable
label="更新时间"
label="操作"
>
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button
@click="viewOrEditPlanDetails(scope.row)"
@ -485,12 +437,12 @@ export default {
cancel-button-text="取消"
icon="el-icon-info"
icon-color="red"
title="确定确认吗?"
title="确认提交吗?"
class="ml-10"
@confirm="confirmPlanDetails(scope.row)"
@confirm="handleConfirmAccept(scope.row)"
>
<el-button type="text" size="small" slot="reference"
>确认</el-button
>提交验收</el-button
>
</el-popconfirm>
<el-popconfirm
@ -526,299 +478,34 @@ export default {
>
</el-pagination>
</div>
<!-- 弹窗 -->
<el-dialog
title="新增/编辑维养记录"
@close="closeDialog"
:visible.sync="dialogVisible"
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">
<el-form-item label-width="130px" label="维养计划名称" prop="planId">
<el-select
v-model="ruleForm.planId"
filterable
remote
:remote-method="searchPlan"
placeholder="请输入"
@change="changeSelectPlan"
:disabled="prohibitEditing"
>
<el-option
v-for="item in planList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
<el-button
:disabled="!ruleForm.planId"
class="!ml-10"
type="success"
size="small"
@click="handleOpenDetails"
>详情</el-button
>
<el-button :disabled="true" class="ml-6" type="info" size="small"
>打开地图</el-button
>
</el-form-item>
<div style="display: flex">
<el-form-item label-width="130px" label="堤防名称">
<el-input v-model="planData.dikeName" disabled />
</el-form-item>
<el-form-item label-width="130px" label="计划时间">
<el-date-picker v-model="planData.planTime" type="month" disabled>
</el-date-picker>
</el-form-item>
</div>
<div style="display: flex">
<el-form-item label-width="130px" label="国补资金">
<div style="display: flex">
<el-input
v-model="planData.nationalSupplement"
type="number"
disabled
style="margin-right: 5px"
/>
<div style="width: 50px">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="自筹资金">
<div style="display: flex">
<el-input
v-model="planData.selfSupplement"
type="number"
disabled
style="margin-right: 5px"
/>
<div style="width: 50px">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="项目预算">
<el-input v-model="planData.budget" disabled />
</el-form-item>
</div>
<el-form-item label-width="130px" label="具体地点">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="planData.location"
disabled
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护内容">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="planData.content"
disabled
/>
</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="130px" label="维修养护前" prop="before">
<el-input
v-model="ruleForm.before"
placeholder="请输入"
maxlength="100"
style="width: 202px"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护过程" prop="middle">
<el-input
v-model="ruleForm.middle"
placeholder="请输入"
maxlength="100"
style="width: 202px"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护结束后" prop="after">
<el-input
v-model="ruleForm.after"
placeholder="请输入"
maxlength="100"
style="width: 202px"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item
label-width="130px"
label="维修养护费用"
prop="maintenanceFunds"
>
<el-input-number
v-model="ruleForm.maintenanceFunds"
placeholder="请输入"
style="width: 165px"
:min="0"
:precision="4"
:controls="false"
:disabled="prohibitEditing"
/>
万元
</el-form-item>
<el-form-item label-width="130px" label="养护人员" prop="operators">
<!-- <el-input v-model="ruleForm.operators" placeholder="请输入" style="width: 202px;" /> -->
<el-select
v-model="ruleForm.selectUser"
multiple
filterable
remote
:remote-method="searchUser"
value-key="id"
:disabled="prohibitEditing"
placeholder="请输入关键词搜索用户"
prop="selectUser"
>
<el-option
v-for="item in personnelList"
:key="item.id"
:label="item.nickName"
:value="item"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label-width="130px" label="落实情况" prop="implement">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="ruleForm.implement"
placeholder="请输入"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item label-width="130px" label="备注" prop="remark">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="ruleForm.remark"
placeholder="请输入"
:disabled="prohibitEditing"
/>
</el-form-item>
</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
>
<el-button
v-if="this.ruleForm.status == '0' && prohibitEditing"
size="mini"
type="primary"
@click="submitForm('ruleForm', true)"
>确认</el-button
>
</div>
</el-dialog>
<DikeBaseInfoDialog
v-model="baseInfoDialog.show"
:id="baseInfoDialog.id"
:code="baseInfoDialog.code"
></DikeBaseInfoDialog>
</div>
</template>
<style scoped lang="less">
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
.search-form {
.search-item {
margin-bottom: 16px;
.search-label {
width: 100px;
text-align: right;
flex-shrink: 0;
}
}
}
.line {
background: #e5e5e5;
width: 100%;
height: 1px;
margin-top: 8px;
margin-bottom: 24px;
}
.table-box {
width: 100%;
// height: calc(100% - 16px);
// height: calc(100% - 50px - 24px);
margin-top: 24px;
padding: 16px;
padding-bottom: 60px;
background-color: white;
.top-search {
display: flex;
align-items: flex-start;
justify-content: space-between;
width: 100% !important;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.table {
.is-confirm {
background-color: #ebf7f5;
border-radius: 4px;
color: #36b29e;
padding: 0px 6px;
}
.is-save {
background-color: #f8f9fb;
border: 1px solid #bfbfbf;
border-radius: 4px;
color: #bfbfbf;
padding: 0px 6px;
}
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
}
.w-160 {
@ -831,10 +518,20 @@ export default {
width: 360px;
}
/deep/.el-input__count {
height: 15px;
line-height: 15px;
margin-right: 10px;
margin-bottom: -4px;
.drawer-footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
z-index: 2;
border-top: 1px solid #ebeef5;
background: #fff;
}
.drawer-body {
height: 100%;
padding: 0 16px;
padding-bottom: 72px;
overflow: auto;
}
</style>

Loading…
Cancel
Save