Browse Source

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

fix: 修复地图问题

See merge request project/water/shuili-vue!126
sy-water-data-board-ui
潘裕艺 10 months ago
parent
commit
340582fcea
  1. 1
      src/mixins/commonPagination.js
  2. 26
      src/mixins/reqCount.js
  3. 82
      src/views/components/SyMixMap.vue
  4. 16
      src/views/dike/runManage/enginerring/inspectionPlan/index.vue
  5. 47
      src/views/dike/runManage/enginerring/inspectionRecords/components/RecordDetails.vue
  6. 36
      src/views/dike/runManage/enginerring/inspectionRecords/index.vue
  7. 19
      src/views/dike/runManage/enginerring/inspectionRouteManage/components/RouteDetail.vue
  8. 13
      src/views/dike/runManage/enginerring/inspectionRouteManage/index.vue

1
src/mixins/commonPagination.js

@ -5,6 +5,7 @@ export const paginationMixins = {
pageData: {
pageNum: 1,
pageSize: 10,
pageSizes: [10, 20, 50, 100],
total: 0,
},
}

26
src/mixins/reqCount.js

@ -0,0 +1,26 @@
// 分页公共请求参数和方法
export const reqCountMixins = {
data(){
return {
reqCount: 0,
timerId: null,
}
},
methods: {
reqCountCalc(){
this.reqCount++;
if (this.reqCount > 10) {
this.$message.warning("已经点击超过10次了,请稍等正在进行数据获取");
return false
}
if (this.timerId) {
clearTimeout(this.timerId);
}
this.timerId = setTimeout(() => {
console.log("清除定时,并重置");
this.reqCount = 0;
}, 1000);
return true
}
}
}

82
src/views/components/SyMixMap.vue

@ -6,7 +6,7 @@
<div class="position-box">
<div v-if="showPosition" class="mr-10">
<span class="mr-8 font-12">经度</span>
<input class="my-input" v-model="lng" @keyup.enter="goPosition" placeholder="请输入"></input>
<input class="my-input" v-model="long" @keyup.enter="goPosition" placeholder="请输入"></input>
<span class="ml-16 mr-8 font-12">纬度</span>
<input class="my-input" v-model="lat" @keyup.enter="goPosition" placeholder="请输入"></input>
</div>
@ -25,7 +25,11 @@ const viewerClick = (e) => {
plot.edit(e.graphic, () => {
console.log('编辑viewerClick >>>>> ', e.graphic, graphicsList)
let res = graphicsList.find(item => item.graphicId === e.graphic.graphicId);
res.position = e.graphic.position;
console.log('res >>>>> ', res)
if(res){
res.position = e.graphic.position;
res.positions = e.graphic.positions;
}
viewerRemoveEventListener();
viewerAddEventListener();
});
@ -45,9 +49,10 @@ const viewerRemoveEventListener = () => {
const handleKeyUpFunc = (e) => {
if (e.key === 'Delete') {
if (currentGraphic) {
console.log('删除currentGraphic? >>>>> ', currentGraphic)
plot.stop();
layer.removeGraphic(currentGraphic);
graphicsList = graphicsList.filter(item => item.id !== currentGraphic.id);
graphicsList = graphicsList.filter(item => item.graphicId !== currentGraphic.graphicId);
}
}
};
@ -98,8 +103,9 @@ export default {
},
data() {
return {
defaultHeight: 50000,
isFullScreen: false,
lng: '',
long: '',
lat: '',
};
},
@ -131,8 +137,18 @@ export default {
this.initMap();
}, 50);
},
beforeUnmount(){
viewer = null
plot = null
layer = null
currentGraphic = null
graphicsList = []
window.removeEventListener('keyup', handleKeyUpFunc)
},
methods: {
initMap() {
graphicsList = []
currentGraphic = null
viewer = new sycim.Viewer("cesiumContainer01");
window.viewer = viewer;
let baseLayer = sycim.ImageryLayerFactory.createImageryLayer(
@ -158,15 +174,14 @@ export default {
);
setTimeout(() => {
viewer.scene.camera.setView({
// 广
destination: new Cesium.Cartesian3.fromDegrees(113.27, 23.13, 20000),
orientation: {
heading: 0,
pitch: -89.7,
roll: 0,
},
duration: 2,
});
destination: new Cesium.Cartesian3.fromDegrees(113.27, 23.13, this.defaultHeight),
orientation: {
heading: 0,
pitch: -90,
roll: 0,
},
duration: 2,
});
}, 300);
},
handleKeyUpFunc(e){
@ -177,20 +192,23 @@ export default {
triggerFullScreen(){
this.isFullScreen = !this.isFullScreen;
},
setMapCenter(long,lat, height = this.defaultHeight, duration = 2){
viewer.scene.camera.setView({
destination: new Cesium.Cartesian3.fromDegrees(long, lat, height),
orientation: {
heading: 0,
pitch: -90,
roll: 0,
},
duration: duration,
});
},
//
goPosition() {
console.log("goPosition", this.lng, this.lat);
if (this.lng && this.lat) {
if(!isNaN(this.lng) && !isNaN(this.lat)){
viewer.scene.camera.setView({
destination: new Cesium.Cartesian3.fromDegrees(Number(this.lng), Number(this.lat), 10000),
orientation: {
heading: 0,
pitch: -90,
roll: 0,
},
duration: 2,
});
console.log("goPosition", this.long, this.lat);
if (this.long && this.lat) {
if(!isNaN(this.long) && !isNaN(this.lat)){
this.setMapCenter(Number(this.long), Number(this.lat));
} else{
this.$message.error("请输入数字类型的经纬度");
}
@ -200,6 +218,7 @@ export default {
},
// entries线
initEntries(entries){
graphicsList = []
layer?.clear()
if(!layer){
layer = new sycim.EntityLayer('layer').addTo(viewer)
@ -261,7 +280,6 @@ export default {
viewerRemoveEventListener();
viewerAddEventListener();
// plot.edit(graphicItem, () => {
// console.log('2222222222222?? >>>')
// graphicItem.setStyle({ noPushMid: true });
// });
}
@ -271,7 +289,6 @@ export default {
// 线
draw(type, iconName){
console.log('draw---type >>>>> ', type, iconName)
let plotOptions = {
scale: 1,
image: `/icons/${iconName}`,
@ -323,11 +340,12 @@ export default {
positions: graphicItem.positions,
icon: iconName,
});
plot.edit(graphicItem, () => {
graphicItem.setStyle({ noPushMid: true });
viewerRemoveEventListener();
viewerAddEventListener();
});
viewerAddEventListener();
// plot.edit(graphicItem, () => {
// graphicItem.setStyle({ noPushMid: true });
// viewerRemoveEventListener();
// viewerAddEventListener();
// });
}
}
},

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

@ -16,6 +16,7 @@ import TopBackTitle from "@/components/TopBackTitle/index.vue";
import { uploadFileData } from "@/api/system/upload";
import PlanDetail from "./components/PlanDetail.vue";
import { reqCountMixins } from "@/mixins/reqCount";
export default {
name: "InspectionItems",
@ -23,6 +24,7 @@ export default {
TopBackTitle,
PlanDetail,
},
mixins: [reqCountMixins],
data() {
return {
paramsData: {
@ -290,7 +292,11 @@ export default {
handleDelFile(_url, index) {
this.ruleForm.files.splice(index, 1);
},
handleSelectionChange(e) {
this.tableCheckData = e || [];
},
handleChangeQuery() {
this.reqCountCalc();
if (this.paramsData.userIds.length > 5) {
this.$message.warning("最多只能选取5名责任人");
this.paramsData.userIds.splice(-1);
@ -299,16 +305,12 @@ export default {
this.getTableData();
}
},
handleSelectionChange(e) {
console.log("handleSelectionChange >>>>> ", e);
this.tableCheckData = e || [];
},
handleResetQuery() {
this.paramsData.name = "";
this.paramsData.status = "";
this.paramsData.userIds = [];
this.paramsData.planDateArr = [];
this.reqCountCalc();
this.pageData.pageNum = 1;
this.getTableData();
},
@ -353,6 +355,7 @@ export default {
<div class="search-item flex items-center">
<span class="search-label">巡查计划名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
@ -363,6 +366,7 @@ export default {
<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.status"
@ -378,6 +382,7 @@ export default {
<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.userIds"
@ -402,6 +407,7 @@ export default {
<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"

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

@ -147,14 +147,23 @@
文件支持.jpg,.png,.jpeg,.gif单张图片5M以内最多上传3张
</div>
</el-upload>
<div class="mt-10">
<el-image
v-for="url in item.handleImages"
:src="url"
<div class="mt-10 img-list-box">
<div
class="img-box"
v-for="(url, index) in item.handleImages"
:key="url"
:preview-src-list="[url]"
class="mr-10 mb-10 w-240 h-124"
></el-image>
>
<el-image
:src="url"
:preview-src-list="[url]"
class="w-240 h-124"
></el-image>
<i
class="el-icon-error del-icon"
:size="18"
@click="handleDelImage(item, index)"
></i>
</div>
</div>
<div class="mt-10">
<div class="mb-4 tc-text1">处置描述</div>
@ -301,6 +310,9 @@ export default {
console.log("err >>>>> ", err);
});
},
handleDelImage(rowItem, index) {
rowItem.handleImages.splice(index, 1);
},
submit() {
return this.detailData;
},
@ -348,6 +360,27 @@ export default {
}
}
.img-list-box {
display: flex;
flex-wrap: wrap;
.img-box {
margin-right: 10px;
margin-bottom: 10px;
width: 240px;
height: 124px;
position: relative;
.del-icon {
position: absolute;
z-index: 1;
top: -8px;
right: -8px;
cursor: pointer;
color: #666;
font-size: 20px;
}
}
}
.warn-status {
font-size: 12px;
line-height: 18px;

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

@ -3,6 +3,7 @@
import TopBackTitle from "@/components/TopBackTitle/index.vue";
import { getDictMapData } from "@/api/system/dict/data";
import { reqCountMixins } from "@/mixins/reqCount";
import { postDFInspectionRecordsList } from "@/api/management";
import RecordDetails from "./components/RecordDetails.vue";
@ -24,6 +25,7 @@ export default {
RecordDetails,
PDF,
},
mixins: [reqCountMixins],
data() {
return {
dayjs,
@ -68,10 +70,7 @@ export default {
this.pageData.pageSize = pageSize;
this.getTableData();
},
handleChangeQuery() {
this.pageData.pageNum = 1;
this.getTableData();
},
handleCheckDetails(row, canEdit) {
this.currentRow = row;
this.currentRow.canEdit = !!canEdit;
@ -162,10 +161,6 @@ export default {
}
});
},
//
handleChangeQuery() {
this.getTableData();
},
handleSelectionChange(e) {
console.log("handleSelectionChange >>>>> ", e);
this.tableCheckData = e || [];
@ -195,6 +190,12 @@ export default {
console.log("取消删除");
});
},
//
handleChangeQuery() {
this.reqCountCalc();
this.pageData.pageNum = 1;
this.getTableData();
},
//
handleResetQuery() {
this.paramsData.adcd = "";
@ -204,8 +205,8 @@ export default {
this.paramsData.lineType = "";
this.paramsData.dutyHolderType = "";
this.paramsData.status = "";
this.reqCountCalc();
this.pageData.pageNum = 1;
this.getTableData();
},
// label
@ -323,12 +324,12 @@ export default {
<div class="search-item flex items-center">
<span class="search-label">行政区划</span>
<el-cascader
clearable
class="ml-10 w-202"
:options="areasOptions"
v-model="paramsData.adcd"
:props="areasOptionProps"
placeholder="请选择行政区划"
clearable
size="small"
>
</el-cascader>
@ -336,6 +337,7 @@ export default {
<div class="search-item flex items-center">
<span class="search-label">堤防名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
@ -346,6 +348,7 @@ export default {
<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"
@ -366,6 +369,7 @@ export default {
<div class="search-item flex items-center">
<span class="search-label">巡查路线名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
@ -376,6 +380,7 @@ export default {
<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.lineType"
@ -396,6 +401,7 @@ export default {
<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.dutyHolderType"
@ -416,6 +422,7 @@ export default {
<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.status"
@ -572,9 +579,6 @@ export default {
<template #title>
<div class="w-full flex justify-between">
<div>详情</div>
<el-button class="mr-12" type="text" @click="handleDownPDF"
>PDF下载</el-button
>
</div>
</template>
<div class="drawer-body">
@ -585,6 +589,11 @@ export default {
></RecordDetails>
</div>
<div class="drawer-footer p-16">
<el-button size="mini" @click="dialogVisible = false">取消</el-button>
<el-button size="mini" @click="handleDownPDF">
<i class="el-icon-download font-14"></i>
PDF下载</el-button
>
<el-button
size="mini"
type="primary"
@ -599,7 +608,6 @@ export default {
@click="dialogVisible = false"
>确定</el-button
>
<el-button size="mini" @click="dialogVisible = false">取消</el-button>
<div style="float: right" v-if="currentRow.status === '0'">
<el-button size="mini" @click="handleStopXc" type="danger"
>完成巡查</el-button

19
src/views/dike/runManage/enginerring/inspectionRouteManage/components/RouteDetail.vue

@ -265,12 +265,19 @@ export default {
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;
if (res) {
const { dikeStartLat, dikeStartLong } = res;
if (dikeStartLat && dikeStartLong) {
this.$refs.syMapRef.setMapCenter(dikeStartLong, dikeStartLat);
}
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({

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

@ -19,6 +19,7 @@
<div class="search-item flex items-center">
<span class="search-label">堤防名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
@ -29,6 +30,7 @@
<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"
@ -49,6 +51,7 @@
<div class="search-item flex items-center">
<span class="search-label">巡查路线名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
@ -59,6 +62,7 @@
<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.type"
@ -79,6 +83,7 @@
<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.dutyHolderType"
@ -403,6 +408,7 @@
<script>
import TopBackTitle from "@/components/TopBackTitle/index.vue";
import { paginationMixins } from "@/mixins/commonPagination.js";
import { reqCountMixins } from "@/mixins/reqCount";
import RouteDetail from "./components/RouteDetail.vue";
import DikeBaseInfo from "../../components/DikeBaseInfo/index.vue";
@ -422,7 +428,7 @@ export default {
RouteDetail,
DikeBaseInfo,
},
mixins: [paginationMixins],
mixins: [paginationMixins, reqCountMixins],
data() {
return {
displayType: "1", // 1: 2:
@ -465,6 +471,9 @@ export default {
mounted() {
this.getTableData();
},
unmounted() {
clearInterval(this.timerId);
},
methods: {
getTableData() {
this.tableCheckData = [];
@ -538,6 +547,7 @@ export default {
this.showBaseDetailDialog = true;
},
handleChangeQuery() {
this.reqCountCalc();
this.pageData.pageNum = 1;
this.getTableData();
},
@ -548,6 +558,7 @@ export default {
this.paramsData.lineName = "";
this.paramsData.type = "";
this.paramsData.dutyHolderType = "";
this.reqCountCalc();
this.pageData.pageNum = 1;
this.getTableData();
},

Loading…
Cancel
Save