|
@@ -1,8 +1,8 @@
|
1
|
1
|
<!--
|
2
|
2
|
* @Author: ysh
|
3
|
3
|
* @Date: 2024-06-21 18:51:49
|
4
|
|
- * @LastEditors: Please set LastEditors
|
5
|
|
- * @LastEditTime: 2024-07-01 17:05:09
|
|
4
|
+ * @LastEditors: wrh
|
|
5
|
+ * @LastEditTime: 2024-08-19 11:45:35
|
6
|
6
|
-->
|
7
|
7
|
<template>
|
8
|
8
|
<div class="warpper-container">
|
|
@@ -10,6 +10,8 @@
|
10
|
10
|
<div class="map-container" id="maps" tabindex="0"></div>
|
11
|
11
|
<!-- 鼠标移动坐标 -->
|
12
|
12
|
<div id="mouse-position"></div>
|
|
13
|
+ <!-- 项目信息弹出框 -->
|
|
14
|
+ <info-box :datas="datas" :maps="map" @closePopup="closePopup" @open="openAchiList"></info-box>
|
13
|
15
|
<!-- 工具栏列表 -->
|
14
|
16
|
<div class="tool-box">
|
15
|
17
|
<div class="item">
|
|
@@ -49,7 +51,7 @@
|
49
|
51
|
</el-descriptions-item>
|
50
|
52
|
<el-descriptions-item label="存放地址" width="130px">
|
51
|
53
|
{{ clickFeacture.storageAddress == '' || clickFeacture.storageAddress == null ? '暂无' :
|
52
|
|
- clickFeacture.storageAddress }}
|
|
54
|
+ clickFeacture.storageAddress }}
|
53
|
55
|
</el-descriptions-item>
|
54
|
56
|
</el-descriptions>
|
55
|
57
|
|
|
@@ -98,54 +100,54 @@
|
98
|
100
|
<el-descriptions :column="2">
|
99
|
101
|
<el-descriptions-item label="存放地址:" class="desLabel" :span="2">
|
100
|
102
|
{{ props.row.storageAddress == '' || props.row.storageAddress == undefined ? '暂无' :
|
101
|
|
- props.row.storageAddress
|
|
103
|
+ props.row.storageAddress
|
102
|
104
|
}}
|
103
|
105
|
</el-descriptions-item>
|
104
|
106
|
<el-descriptions-item label="甲方单位:" class="desLabel" :span="2">{{ props.row.partyA.partyAName == ''
|
105
|
|
- ? '暂无' :
|
106
|
|
- props.row.partyA.partyAName
|
107
|
|
- }}</el-descriptions-item>
|
|
107
|
+ ? '暂无' :
|
|
108
|
+ props.row.partyA.partyAName
|
|
109
|
+ }}</el-descriptions-item>
|
108
|
110
|
<el-descriptions-item label="联系人:" class="desLabel">{{ props.row.contactPerson == '' ? '暂无' :
|
109
|
|
- props.row.contactPerson
|
110
|
|
- }}</el-descriptions-item>
|
|
111
|
+ props.row.contactPerson
|
|
112
|
+ }}</el-descriptions-item>
|
111
|
113
|
<el-descriptions-item label="联系电话:" class="desLabel">{{ props.row.telephone == '' ? '暂无' :
|
112
|
|
- props.row.telephone
|
113
|
|
- }}</el-descriptions-item>
|
|
114
|
+ props.row.telephone
|
|
115
|
+ }}</el-descriptions-item>
|
114
|
116
|
<el-descriptions-item label="项目类型:" class="desLabel">{{ props.row.projectType == '' ? '暂无' :
|
115
|
|
- props.row.projectType
|
116
|
|
- }}</el-descriptions-item>
|
|
117
|
+ props.row.projectType
|
|
118
|
+ }}</el-descriptions-item>
|
117
|
119
|
<el-descriptions-item label="技术负责人:" class="desLabel">{{ props.row.technicalDirector == '' ? '暂无'
|
118
|
|
- :
|
119
|
|
- getUserName(props.row.technicalDirector)
|
120
|
|
- }}</el-descriptions-item>
|
|
120
|
+ :
|
|
121
|
+ getUserName(props.row.technicalDirector)
|
|
122
|
+ }}</el-descriptions-item>
|
121
|
123
|
<el-descriptions-item label="技术设计人:" class="desLabel">{{ props.row.techinicalDesigner == '' ? '暂无'
|
122
|
|
- :
|
123
|
|
- getUserName(props.row.techinicalDesigner)
|
124
|
|
- }}</el-descriptions-item>
|
|
124
|
+ :
|
|
125
|
+ getUserName(props.row.techinicalDesigner)
|
|
126
|
+ }}</el-descriptions-item>
|
125
|
127
|
<el-descriptions-item label="承担部门:" class="desLabel">{{ props.row.undertakingSector == '' ? '暂无' :
|
126
|
|
- props.row.undertakingSector
|
127
|
|
- }}</el-descriptions-item>
|
|
128
|
+ props.row.undertakingSector
|
|
129
|
+ }}</el-descriptions-item>
|
128
|
130
|
<el-descriptions-item label="质量检察员:" class="desLabel">{{ props.row.qualityInspector == '' ? '暂无' :
|
129
|
|
- getUserNames(props.row.qualityInspector)
|
130
|
|
- }}</el-descriptions-item>
|
|
131
|
+ getUserNames(props.row.qualityInspector)
|
|
132
|
+ }}</el-descriptions-item>
|
131
|
133
|
<el-descriptions-item label="项目登记时间:" class="desLabel" :span="2">{{ props.row.registrationDate ==
|
132
|
|
- '' ? '暂无' :
|
133
|
|
- props.row.registrationDate
|
134
|
|
- }}</el-descriptions-item>
|
|
134
|
+ '' ? '暂无' :
|
|
135
|
+ props.row.registrationDate
|
|
136
|
+ }}</el-descriptions-item>
|
135
|
137
|
<el-descriptions-item label="项目登记人:" class="desLabel">{{ props.row.projectRegistrant == '' ? '暂无'
|
136
|
|
- :
|
137
|
|
- getUserName(props.row.projectRegistrant)
|
138
|
|
- }}</el-descriptions-item>
|
|
138
|
+ :
|
|
139
|
+ getUserName(props.row.projectRegistrant)
|
|
140
|
+ }}</el-descriptions-item>
|
139
|
141
|
<el-descriptions-item label="进场时间:" class="desLabel">{{ props.row.approachTime == '' ? '暂无' :
|
140
|
|
- props.row.approachTime
|
141
|
|
- }}</el-descriptions-item>
|
|
142
|
+ props.row.approachTime
|
|
143
|
+ }}</el-descriptions-item>
|
142
|
144
|
<el-descriptions-item label="撤场时间:" class="desLabel">{{ props.row.withdrawalTime == '' ? '暂无' :
|
143
|
|
- props.row.withdrawalTime
|
144
|
|
- }}</el-descriptions-item>
|
|
145
|
+ props.row.withdrawalTime
|
|
146
|
+ }}</el-descriptions-item>
|
145
|
147
|
<el-descriptions-item label="项目要求完成时间:" class="desLabel">{{ props.row.requiredCompletionDate == ''
|
146
|
|
- ? '暂无' :
|
147
|
|
- props.row.requiredCompletionDate
|
148
|
|
- }}</el-descriptions-item>
|
|
148
|
+ ? '暂无' :
|
|
149
|
+ props.row.requiredCompletionDate
|
|
150
|
+ }}</el-descriptions-item>
|
149
|
151
|
</el-descriptions>
|
150
|
152
|
<div class="look-achi" @click="lookThisAchi(props.row)">
|
151
|
153
|
查看成果>>
|
|
@@ -168,6 +170,66 @@
|
168
|
170
|
<!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
|
169
|
171
|
:limit.sync="queryParams.pageSize" @pagination="getProjectList" /> -->
|
170
|
172
|
</div>
|
|
173
|
+
|
|
174
|
+ <!-- 成果目录 -->
|
|
175
|
+ <div class="achi-list dialog_wrap" v-if="dialogTableVisible">
|
|
176
|
+ <div class="achi-content">
|
|
177
|
+ <div class="achi-header">
|
|
178
|
+ 成果目录
|
|
179
|
+ <el-icon class="close" @click="dialogTableVisible = false">
|
|
180
|
+ <CloseBold />
|
|
181
|
+ </el-icon>
|
|
182
|
+ </div>
|
|
183
|
+ <div class="achi-projectNumber">项目编号:{{ dialogTitle }}</div>
|
|
184
|
+ <el-table :data="achiDialogData" height="400px">
|
|
185
|
+ <el-table-column type="expand">
|
|
186
|
+ <template #default="props">
|
|
187
|
+ <el-descriptions :column="2" size="small">
|
|
188
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
189
|
+ label="成果名称:">{{
|
|
190
|
+ props.row.achiName
|
|
191
|
+ }}</el-descriptions-item>
|
|
192
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
193
|
+ label="数据年份:">{{
|
|
194
|
+ props.row.dataYear }}</el-descriptions-item>
|
|
195
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
196
|
+ label="成果类型:">{{
|
|
197
|
+ props.row.resultType }}</el-descriptions-item>
|
|
198
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
199
|
+ label="文件类型:">{{
|
|
200
|
+ props.row.fileType }}</el-descriptions-item>
|
|
201
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
202
|
+ label="工作量:">{{
|
|
203
|
+ props.row.workLoad }}</el-descriptions-item>
|
|
204
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
205
|
+ label="单位:">{{
|
|
206
|
+ props.row.unit }}</el-descriptions-item>
|
|
207
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
208
|
+ label="大地基准:">{{
|
|
209
|
+ props.row.geodeticDatum }}</el-descriptions-item>
|
|
210
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
211
|
+ label="分辨率:">{{
|
|
212
|
+ props.row.resolution }}</el-descriptions-item>
|
|
213
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
214
|
+ label="比例尺或等级:">{{ props.row.scaleOrder }}</el-descriptions-item>
|
|
215
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
216
|
+ label="数据类型:">{{
|
|
217
|
+ props.row.dataType }}</el-descriptions-item>
|
|
218
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
219
|
+ label="存放地址:">{{
|
|
220
|
+ props.row.storageAddress }}</el-descriptions-item>
|
|
221
|
+ <el-descriptions-item min-width="195px" label-class-name="my-label" class-name="my-content"
|
|
222
|
+ label="提交时间:">{{
|
|
223
|
+ props.row.submitDate }}</el-descriptions-item>
|
|
224
|
+ </el-descriptions>
|
|
225
|
+ </template>
|
|
226
|
+ </el-table-column>
|
|
227
|
+ <el-table-column type="index" label="序号" width="50px" align="center" />
|
|
228
|
+ <el-table-column prop="achiName" label="成果名称" align="center" show-overflow-tooltip />
|
|
229
|
+ <el-table-column prop="dataYear" label="数据年份" align="center" />
|
|
230
|
+ </el-table>
|
|
231
|
+ </div>
|
|
232
|
+ </div>
|
171
|
233
|
</div>
|
172
|
234
|
</div>
|
173
|
235
|
|
|
@@ -201,6 +263,7 @@ import { Point, Polygon, MultiPolygon, MultiLineString } from 'ol/geom';
|
201
|
263
|
import { toStringXY, createStringXY, toStringHDMS } from 'ol/coordinate';
|
202
|
264
|
import { Circle, Fill, Stroke, Style, RegularShape, Icon, Text } from 'ol/style';
|
203
|
265
|
import { MousePosition, ScaleLine, defaults as defaultControls } from 'ol/control';
|
|
266
|
+import { getAchievementByProject, listAchievement } from "@/api/file/achievement";
|
204
|
267
|
export default {
|
205
|
268
|
components: { infoBox },
|
206
|
269
|
data() {
|
|
@@ -234,7 +297,16 @@ export default {
|
234
|
297
|
selectProjectNumber: "",
|
235
|
298
|
type: '',
|
236
|
299
|
},
|
237
|
|
- seletctedCluters: []
|
|
300
|
+ seletctedCluters: [],
|
|
301
|
+ dialogTitle: '',
|
|
302
|
+ dialogTableVisible: false,
|
|
303
|
+ datas: {
|
|
304
|
+ clickFeacture: {},
|
|
305
|
+ selectFeatures: null,
|
|
306
|
+ selectProjectNumber: "",
|
|
307
|
+ type: '',
|
|
308
|
+ infoData: {}
|
|
309
|
+ }
|
238
|
310
|
}
|
239
|
311
|
},
|
240
|
312
|
mounted() {
|
|
@@ -421,7 +493,18 @@ export default {
|
421
|
493
|
this.popup.setPosition(undefined);
|
422
|
494
|
},
|
423
|
495
|
openAchiList() {
|
424
|
|
-
|
|
496
|
+ this.dialogTableVisible = true;
|
|
497
|
+ // let projectId = datas.clickFeacture.id;
|
|
498
|
+ // this.dialogTitle = datas.clickFeacture.projectNumber
|
|
499
|
+ listAchievement({ projectId }).then(res => {
|
|
500
|
+ if (res.total == 0) {
|
|
501
|
+ this.$message.error('暂无成果,请添加');
|
|
502
|
+ this.achiDialogData = [];
|
|
503
|
+ } else {
|
|
504
|
+ this.dialogTableVisible = true;
|
|
505
|
+ this.achiDialogData = res.rows;
|
|
506
|
+ }
|
|
507
|
+ })
|
425
|
508
|
},
|
426
|
509
|
formatCoordinate(fractionDigits) {
|
427
|
510
|
return (
|
|
@@ -739,8 +822,58 @@ export default {
|
739
|
822
|
},
|
740
|
823
|
handleRowClick() {
|
741
|
824
|
|
742
|
|
- }
|
743
|
|
- },
|
|
825
|
+ },
|
|
826
|
+ lookThisAchi(row) {
|
|
827
|
+ let projectId = row.projectId;
|
|
828
|
+ this.dialogTitle = row.projectNumber;
|
|
829
|
+ listAchievement({ projectId }).then(res => {
|
|
830
|
+ if (res.total == 0) {
|
|
831
|
+ this.$message.error('暂无成果,请添加');
|
|
832
|
+ this.achiDialogData = [];
|
|
833
|
+ } else {
|
|
834
|
+ this.dialogTableVisible = true;
|
|
835
|
+ this.achiDialogData = res.rows;
|
|
836
|
+ }
|
|
837
|
+ })
|
|
838
|
+ },
|
|
839
|
+ // 移动box
|
|
840
|
+ move(e) {
|
|
841
|
+ e.stopPropagation();
|
|
842
|
+ let odiv = e.target; //获取目标元素
|
|
843
|
+ if (odiv.className instanceof SVGAnimatedString) {
|
|
844
|
+ return
|
|
845
|
+ }
|
|
846
|
+ if (odiv.className.includes("dialog_wrap")) {
|
|
847
|
+ //算出鼠标相对元素的位置
|
|
848
|
+ let disX = e.clientX - odiv.offsetLeft;
|
|
849
|
+ let disY = e.clientY - odiv.offsetTop;
|
|
850
|
+ document.onmousemove = (e) => {
|
|
851
|
+ //鼠标按下并移动的事件
|
|
852
|
+ //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
|
|
853
|
+ let left = e.clientX - disX;
|
|
854
|
+ let top = e.clientY - disY;
|
|
855
|
+
|
|
856
|
+ //绑定元素位置到positionX和positionY上面
|
|
857
|
+ // this.positionX = top;
|
|
858
|
+ // this.positionY = left;
|
|
859
|
+
|
|
860
|
+ //移动当前元素
|
|
861
|
+ odiv.style.left = left + "px";
|
|
862
|
+ odiv.style.top = top + "px";
|
|
863
|
+ };
|
|
864
|
+ document.body.onselectstart = document.body.ondrag = () => { return false }
|
|
865
|
+ document.onmouseup = (e) => {
|
|
866
|
+ document.onmousemove = null;
|
|
867
|
+ document.onmouseup = null;
|
|
868
|
+ };
|
|
869
|
+ } else {
|
|
870
|
+ document.onmousemove = null;
|
|
871
|
+ document.onmouseup = null;
|
|
872
|
+ document.body.onselectstart = document.body.ondrag = () => { return true }
|
|
873
|
+ }
|
|
874
|
+
|
|
875
|
+ },
|
|
876
|
+ }
|
744
|
877
|
}
|
745
|
878
|
</script>
|
746
|
879
|
|
|
@@ -767,6 +900,49 @@ export default {
|
767
|
900
|
color: #fff;
|
768
|
901
|
}
|
769
|
902
|
|
|
903
|
+.achi-list {
|
|
904
|
+ width: 425px;
|
|
905
|
+ min-height: 300px;
|
|
906
|
+ background-color: #fff;
|
|
907
|
+ position: absolute;
|
|
908
|
+ top: 55px;
|
|
909
|
+ right: 520px;
|
|
910
|
+ padding: 10px;
|
|
911
|
+ border-radius: 4px;
|
|
912
|
+ box-shadow: 0 0 10px rgba($color: #000000, $alpha: 0.5);
|
|
913
|
+ cursor: move;
|
|
914
|
+
|
|
915
|
+ .achi-content {
|
|
916
|
+ cursor: default;
|
|
917
|
+ }
|
|
918
|
+
|
|
919
|
+ .achi-projectNumber {
|
|
920
|
+ padding-left: 20px;
|
|
921
|
+ font-size: 14px;
|
|
922
|
+ font-family: '微软雅黑';
|
|
923
|
+ }
|
|
924
|
+
|
|
925
|
+ .achi-header {
|
|
926
|
+ text-align: center;
|
|
927
|
+ line-height: 40px;
|
|
928
|
+ font-weight: bold;
|
|
929
|
+ font-family: '黑体';
|
|
930
|
+ position: relative;
|
|
931
|
+
|
|
932
|
+ .close {
|
|
933
|
+ position: absolute;
|
|
934
|
+ right: 20px;
|
|
935
|
+ top: 10px;
|
|
936
|
+ }
|
|
937
|
+
|
|
938
|
+ .close:hover {
|
|
939
|
+ color: #409EFF;
|
|
940
|
+ cursor: pointer;
|
|
941
|
+ }
|
|
942
|
+ }
|
|
943
|
+
|
|
944
|
+}
|
|
945
|
+
|
770
|
946
|
.tool-box {
|
771
|
947
|
position: absolute;
|
772
|
948
|
top: 60px;
|