Browse Source

Merge branch 'release-sy-v1.0.0' of http://gitlab.datameta.com/project/water/shuili-vue into release-sy-v1.0.0

sy-water-data-board-ui
panyuyi 1 year ago
parent
commit
f330cdb7c1
  1. 9
      src/api/dike/index.js
  2. 9
      src/api/sluice/index.js
  3. 2
      src/layout/components/Navbar.vue
  4. 304
      src/views/aiSupervision/layerManage/resource/LayerDetails.vue
  5. 19
      src/views/dike/runManage/enginerring/inspectionItems/inspectionItemDetails.vue
  6. 8
      src/views/dike/runManage/enginerring/inspectionPlan/index.vue
  7. 32
      src/views/dike/runManage/waterRainReport/smartAnalyse/index.vue
  8. 22
      src/views/sluice/runManage/enginerring/inspectionItems/inspectionItemDetails.vue
  9. 8
      src/views/sluice/runManage/enginerring/inspectionPlan/index.vue
  10. 39
      src/views/sluice/runManage/waterRainReport/smartAnalyse/index.vue

9
src/api/dike/index.js

@ -19,6 +19,15 @@ export function getInspectionProjectDetails(id) {
})
}
// 巡查项目管理-新增巡视检查
export function postInspectionProjectData(data) {
return request({
url: '/run/df/checking',
method: 'post',
data
})
}
// 巡查项目管理-修改巡视检查
export function putInspectionProjectData(data) {
return request({

9
src/api/sluice/index.js

@ -18,7 +18,14 @@ export function getInspectionProjectDetails(id) {
method: 'get',
})
}
// 巡查项目管理-新增巡视检查
export function postInspectionProjectData(data) {
return request({
url: '/run/sz/checking',
method: 'post',
data
})
}
// 巡查项目管理-修改巡视检查
export function putInspectionProjectData(data) {
return request({

2
src/layout/components/Navbar.vue

@ -149,7 +149,7 @@ export default {
type: "warning",
}).then(() => {
this.$store.dispatch("LogOut").then(() => {
location.href = "/index";
location.href = "/";
});
});
},

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

@ -19,70 +19,134 @@
<div class="middle">
<el-button type="primary" plain @click="dialogFormVisible = true">添加图层</el-button>
<el-dialog :title="dialogTitle" :visible.sync="dialogFormVisible">
<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-select>
</el-form-item>
<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-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>
<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>
<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-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>
<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'"
>
{{ editDataInfoForm.relationStyleName ? editDataInfoForm.relationStyleName : '点击选择样式' }}
</el-tag>
<el-button
style="margin-left: 15px"
:disabled="editDataInfoForm.relationStyleName === ''"
@click="
editDataInfoForm.relationStyleName = '';
editDataInfoForm.relationStyleId = '';
"
>取消选择样式</el-button
<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"
>
{{ editDataInfoForm.relationStyleName ? editDataInfoForm.relationStyleName : '点击选择样式' }}
</el-tag>
<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>
</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>
</div>
<styleListDialogVue
:visible="styleDialogVisible"
:$currentStyleId="editDataInfoForm.relationStyleId"
@closeDialog="styleDialogVisible = false"
@confirm="handleConfirm"
></styleListDialogVue>
</el-form-item>
</el-form>
<el-table :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>
</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>
</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>
</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
>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
@ -188,9 +252,32 @@ export default {
},
dialogFormVisible: false, //
keyword: '',
styleDialogVisible: false //
styleDialogVisible: false, //
activeName: '1',
extendTable: [],
multipleSelection: []
};
},
watch: {
keyword() {
this.debouncedGetLayerList();
},
dialogFormVisible(val) {
if (val === false) {
this.initData();
}
}
},
created() {
// 使 lodash debounce
this.debouncedGetLayerList = debounce(this.getLayerList, 500);
getDirectoryByIdApi(this.$route.query.id).then((res) => {
this.directoryInfo = res.data.children[0];
this.initData();
this.getLayerList();
});
},
methods: {
goBack() {
this.$router.go(-1);
@ -204,6 +291,7 @@ export default {
this.editDataInfoForm.serviceIndex = row.serviceIndex;
this.editDataInfoForm.relationStyleId = row.relationStyleId;
this.editDataInfoForm.relationStyleName = row.relationStyleName;
this.extendTable = (row.extendData && JSON.parse(row.extendData)) || [];
this.dialogTitle = '编辑图层';
this.dialogFormVisible = true;
},
@ -259,7 +347,11 @@ export default {
});
return;
}
await saveOrUpdateLayerApi(this.editDataInfoForm);
const params = {
...this.editDataInfoForm,
extendData: JSON.stringify(this.extendTable)
};
await saveOrUpdateLayerApi(params);
this.getLayerList();
this.dialogFormVisible = false;
},
@ -284,26 +376,73 @@ export default {
this.editDataInfoForm.dirNames = this.directoryInfo.name;
this.editDataInfoForm.tileSize = '256';
this.dialogTitle = '添加图层';
}
},
created() {
// 使 lodash debounce
this.debouncedGetLayerList = debounce(this.getLayerList, 500);
getDirectoryByIdApi(this.$route.query.id).then((res) => {
this.directoryInfo = res.data.children[0];
this.initData();
this.getLayerList();
});
},
watch: {
keyword() {
this.debouncedGetLayerList();
},
dialogFormVisible(val) {
if (val === false) {
this.initData();
addRow() {
const editRow = this.extendTable.find((item) => item.isEdit);
if (editRow) {
this.$message({
type: 'info',
message: '请先保存当前编辑行'
});
return;
}
this.extendTable.push({
id: '',
field: '',
alias: '',
value: '',
isEdit: true
});
},
deleteRow(index) {
this.$messageBox
.confirm('是否删除该行数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
if (index !== undefined) {
this.extendTable.splice(index, 1);
} else {
this.extendTable = this.extendTable.filter((item) => !this.multipleSelection.includes(item));
}
})
.catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
editRow(index) {
this.extendTable[index].isEdit = true;
},
cancelRow(index) {
if (!this.extendTable[index].id) {
this.extendTable.splice(index, 1);
} else {
this.extendTable[index].isEdit = false;
}
},
saveRow(index) {
if (!this.extendTable[index].id) {
this.extendTable[index].id = sycim.Cesium.createGuid();
}
//
const name = this.extendTable[index].field;
const isRepeat = this.extendTable.some((item, i) => item.field === name && i !== index);
if (isRepeat) {
this.$message({
type: 'info',
message: '字段名称重复,请重新输入'
});
return;
}
this.extendTable[index].isEdit = false;
},
handleSelectionChange(val) {
this.multipleSelection = val;
}
}
};
@ -402,4 +541,9 @@ header {
}
}
}
.el-dialog {
.fn-btns {
margin-bottom: 10px;
}
}
</style>

19
src/views/dike/runManage/enginerring/inspectionItems/inspectionItemDetails.vue

@ -177,6 +177,7 @@
import { intersection } from "lodash";
import {
putInspectionProjectData,
postInspectionProjectData,
getCheckingDictTree,
getInspectionProjectDetails,
} from "@/api/dike";
@ -288,14 +289,24 @@ export default {
this.$message.error("请选择巡检类型");
return;
}
this.formData.items = this.getCheckData(this.xcTreeData);
if (this.$route.query.id) {
this.formData.id = this.$route.query.id;
}
this.formData.items = this.getCheckData(this.xcTreeData);
putInspectionProjectData(this.formData).then(() => {
if(this.formData.id){
putInspectionProjectData(this.formData).then((res) => {
this.$message.success("保存成功");
// this.$router.go(-1);
});
});
} else{
postInspectionProjectData(this.formData).then((res) => {
if (res.data?.id) {
this.formData.id = res.data.id;
}
this.$message.success("保存成功");
});
}
},
},
mounted() {

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

@ -35,8 +35,8 @@ export default {
type: "",
xcId: "",
frequency: "",
cycleType: "",
isReminder: false,
cycleType: "0",
isReminder: true,
reminderTime: "",
operators: [],
files: [], //
@ -222,8 +222,8 @@ export default {
type: "",
xcId: "",
frequency: "",
cycleType: "",
isReminder: false,
cycleType: "0",
isReminder: true,
reminderTime: "",
operators: [],
otherConfig: {

32
src/views/dike/runManage/waterRainReport/smartAnalyse/index.vue

@ -76,8 +76,8 @@
<span class="data">{{ analysisData.exceedGateFlowCount }}</span>
</div>
</div>
<div class="statistical-chart water-level" ref="water-level"></div>
<div class="statistical-chart water-flow" ref="water-flow"></div>
<div id="water-level" class="statistical-chart water-level" ref="water-level" :style="{'zoom': zoom}"></div>
<div id="water-flow" class="statistical-chart water-flow" ref="water-flow" :style="{'zoom': zoom}"></div>
</div>
</div>
</div>
@ -114,7 +114,11 @@ export default {
exceedWarningCount: 0, //
exceedRainfallCount: 0, // 50mm/h
exceedGateFlowCount: 0 // 100m³
}
},
currentDike: null,
zoom: 1,
levelChart:null,
flowChart:null
};
},
@ -163,6 +167,7 @@ export default {
},
//
handleRowChange(row) {
this.currentDike = row;
getDikeExceedApi(row.dikeCode).then((res) => {
if (!res.success) return;
const data = res.data;
@ -176,7 +181,9 @@ export default {
getRainfallAndGateFlowApi(row.dikeCode).then((res) => {
if (!res.success) return;
const data = res.data.rainfallAndGateFlowMap; //{2024-03-04:{rainfall: '0.0', gateFlow: '0.0'}......}
this.$echarts.init(this.$refs['water-flow']).setOption({
if(this.flowChart) this.flowChart.dispose();
this.flowChart = this.$echarts.init(document.getElementById('water-flow'))
this.flowChart.setOption({
title: {
text: '流量监测',
textStyle: {
@ -255,12 +262,17 @@ export default {
}
]
});
this.$nextTick(() => {
this.flowChart.resize();
});
});
getWaterLevelInfoApi(row.dikeCode).then((res) => {
if (!res.success) return;
let data = res.data.waterLevelMap; // {2024-03-04:{waterLevel: '0.0', floodLevel: '12', warningLevel: '38'}.....}
this.$echarts.init(this.$refs['water-level']).setOption({
if(this.levelChart) this.levelChart.dispose();
this.levelChart = this.$echarts.init(document.getElementById('water-level'))
this.levelChart.setOption({
title: {
text: '水位监测',
textStyle: {
@ -333,14 +345,24 @@ export default {
}
]
});
this.$nextTick(() => {
this.levelChart.resize();
});
});
}
},
async mounted() {
this.zoom = 1 / document.body.style.zoom;
await this.getDikeStatisticalList();
this.getAreasOptions();
this.$refs.table.setCurrentRow(this.tableData[0]); //handleRowChange
window.onresize = ()=> {
this.zoom = 1 / document.body.style.zoom;
this.handleRowChange(this.currentDike)
};
}
};
</script>

22
src/views/sluice/runManage/enginerring/inspectionItems/inspectionItemDetails.vue

@ -177,6 +177,7 @@
import { intersection } from "lodash";
import {
putInspectionProjectData,
postInspectionProjectData,
getCheckingDictTree,
getInspectionProjectDetails,
} from "@/api/sluice";
@ -290,14 +291,25 @@ export default {
this.$message.error("请选择巡检类型");
return;
}
this.formData.items = this.getCheckData(this.xcTreeData);
if (this.$route.query.id) {
this.formData.id = this.$route.query.id;
}
this.formData.items = this.getCheckData(this.xcTreeData);
putInspectionProjectData(this.formData).then(() => {
}
if (this.formData.id){
putInspectionProjectData(this.formData).then(() => {
this.$message.success("保存成功");
// this.$router.go(-1);
});
});
}else {
postInspectionProjectData(this.formData).then((res) => {
if (res.data?.id) {
this.formData.id = res.data.id;
}
this.$message.success("保存成功");
});
}
},
},
mounted() {

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

@ -35,8 +35,8 @@ export default {
type: "",
xcId: "",
frequency: "",
cycleType: "",
isReminder: false,
cycleType: "0",
isReminder: true,
reminderTime: "",
operators: [],
files: [], //
@ -224,8 +224,8 @@ export default {
type: "",
xcId: "",
frequency: "",
cycleType: "",
isReminder: false,
cycleType: "0",
isReminder: true,
reminderTime: "",
operators: [],
otherConfig: {

39
src/views/sluice/runManage/waterRainReport/smartAnalyse/index.vue

@ -76,8 +76,8 @@
<span class="data">{{ analysisData.exceedGateFlowCount }}</span>
</div>
</div>
<div class="statistical-chart water-level" ref="water-level"></div>
<div class="statistical-chart water-flow" ref="water-flow"></div>
<div id="water-level" class="statistical-chart water-level" ref="water-level" :style="{'zoom': zoom}"></div>
<div id="water-flow" class="statistical-chart water-flow" ref="water-flow" :style="{'zoom': zoom}"></div>
</div>
</div>
</div>
@ -114,7 +114,11 @@ export default {
exceedWarningCount: 0, //
exceedRainfallCount: 0, // 50mm/h
exceedGateFlowCount: 0 // 100m³
}
},
currentSluice:null, //
zoom: 1,
flowChart: null,
levelChart: null,
};
},
@ -126,7 +130,7 @@ export default {
pageNum: this.pageConfig.pageNum,
data: {
basin: this.basin,
adcd: this.region //
adcd: this.region, //
}
};
const res = await getSluiceStatisticalListApi(params);
@ -163,6 +167,7 @@ export default {
},
//
handleRowChange(row) {
this.currentSluice = row;
getSluiceExceedApi(row.wagaCode).then((res) => {
if (!res.success) return;
const data = res.data;
@ -176,7 +181,9 @@ export default {
getRainfallAndGateFlowApi(row.wagaCode).then((res) => {
if (!res.success) return;
const data = res.data.rainfallAndGateFlowMap; //{2024-03-04:{rainfall: '0.0', gateFlow: '0.0'}......}
this.$echarts.init(this.$refs['water-flow']).setOption({
if(this.flowChart) this.flowChart.dispose();
this.flowChart = this.$echarts.init(document.getElementById('water-flow'));
this.flowChart.setOption({
title: {
text: '流量监测',
textStyle: {
@ -186,7 +193,8 @@ export default {
}
},
tooltip: {
trigger: 'axis'
trigger: 'axis',
// show:false
},
legend: {
right: 'center',
@ -255,12 +263,17 @@ export default {
}
]
});
this.$nextTick(() => {
this.flowChart.resize();
});
});
getWaterLevelInfoApi(row.wagaCode).then((res) => {
if (!res.success) return;
let data = res.data.waterLevelMap; // {2024-03-04:{waterLevel: '0.0', floodLevel: '12', warningLevel: '38'}.....}
this.$echarts.init(this.$refs['water-level']).setOption({
if(this.levelChart) this.flowChart.dispose();
this.levelChart = this.$echarts.init(document.getElementById('water-level'));
this.levelChart.setOption({
title: {
text: '水位监测',
textStyle: {
@ -270,7 +283,8 @@ export default {
}
},
tooltip: {
trigger: 'axis'
trigger: 'axis',
// show:false
},
legend: {
right: 'center',
@ -333,14 +347,23 @@ export default {
}
]
});
this.$nextTick(() => {
this.levelChart.resize();
});
});
}
},
async mounted() {
this.zoom = 1 / document.body.style.zoom;
await this.getSluiceStatisticalList();
this.getAreasOptions();
this.$refs.table.setCurrentRow(this.tableData[0]); //handleRowChange
window.onresize = ()=> {
this.zoom = 1 / document.body.style.zoom;
this.handleRowChange(this.currentSluice)
};
}
};
</script>

Loading…
Cancel
Save