Commit 71f388df3c44b4c8b71de5264f8a4998316dba5b
1 parent
af58cd8f
Exists in
dev
fix:优化区域管理的功能
Showing
9 changed files
with
1143 additions
and
335 deletions
Show diff stats
... | ... | @@ -0,0 +1,42 @@ |
1 | +import request from '@/utils/request' | |
2 | + | |
3 | +const portal = context.portal | |
4 | +const form = context.form | |
5 | +const uc = context.uc | |
6 | + | |
7 | +//区域管理中新增,编辑接口 | |
8 | +export function regionalAddEditPort(data) { | |
9 | + return request({ | |
10 | + url: `${context.bpmModel}/manage/mStationRegionalDivision/v1/save`, | |
11 | + method: 'post', | |
12 | + data, | |
13 | + }) | |
14 | +} | |
15 | +//获取区域管理中-区域详情接口 | |
16 | +export function regionalDetailInfo(params) { | |
17 | + return request({ | |
18 | + url: `${context.portal}/manage/mStationRegionalDivision/v1/getDetail`, | |
19 | + method: 'get', | |
20 | + params | |
21 | + }) | |
22 | +} | |
23 | +//区域管理中table列表接口 | |
24 | +export function regionalTablePort(data) { | |
25 | + return request({ | |
26 | + url: `${context.bpmModel}/form/customDialog/v1/getListData?alias=qyhf&mapParam=`, | |
27 | + method: 'post', | |
28 | + data, | |
29 | + }) | |
30 | +} | |
31 | + | |
32 | +//区域类型的字典接口 | |
33 | +export function regionTypePort(data) { | |
34 | + return request({ | |
35 | + url: `${context.bpmModel}/form/customQuery/v1/doQuery?alias=sjzd&page=1&pageSize=100`, | |
36 | + method: 'post', | |
37 | + data, | |
38 | + }) | |
39 | +} | |
40 | + | |
41 | + | |
42 | + | ... | ... |
frontend/front/src/views/pages/regionalManage/components/carManage.vue
0 → 100644
... | ... | @@ -0,0 +1,29 @@ |
1 | +<template> | |
2 | + <div class="container"> | |
3 | + 车辆组件 | |
4 | + </div> | |
5 | +</template> | |
6 | + | |
7 | +<script> | |
8 | +export default { | |
9 | + name: "carManage", | |
10 | + props:{ | |
11 | + type:Object, | |
12 | + default:{} | |
13 | + }, | |
14 | + mounted() { | |
15 | + }, | |
16 | + data(){ | |
17 | + return { | |
18 | + | |
19 | + } | |
20 | + }, | |
21 | + methods:{ | |
22 | + | |
23 | + } | |
24 | +} | |
25 | +</script> | |
26 | + | |
27 | +<style lang="scss" scoped> | |
28 | + | |
29 | +</style> | ... | ... |
frontend/front/src/views/pages/regionalManage/components/checkManage.vue
0 → 100644
... | ... | @@ -0,0 +1,29 @@ |
1 | +<template> | |
2 | + <div class="container"> | |
3 | + 安检项组件 | |
4 | + </div> | |
5 | +</template> | |
6 | + | |
7 | +<script> | |
8 | +export default { | |
9 | + name: "checkManage", | |
10 | + props:{ | |
11 | + type:Object, | |
12 | + default:{} | |
13 | + }, | |
14 | + mounted() { | |
15 | + }, | |
16 | + data(){ | |
17 | + return { | |
18 | + | |
19 | + } | |
20 | + }, | |
21 | + methods:{ | |
22 | + | |
23 | + } | |
24 | +} | |
25 | +</script> | |
26 | + | |
27 | +<style lang="scss" scoped> | |
28 | + | |
29 | +</style> | ... | ... |
frontend/front/src/views/pages/regionalManage/components/otherManage.vue
0 → 100644
... | ... | @@ -0,0 +1,29 @@ |
1 | +<template> | |
2 | + <div class="container"> | |
3 | + 其他组件 | |
4 | + </div> | |
5 | +</template> | |
6 | + | |
7 | +<script> | |
8 | +export default { | |
9 | + name: "otherManage", | |
10 | + props:{ | |
11 | + type:Object, | |
12 | + default:{} | |
13 | + }, | |
14 | + mounted() { | |
15 | + }, | |
16 | + data(){ | |
17 | + return { | |
18 | + | |
19 | + } | |
20 | + }, | |
21 | + methods:{ | |
22 | + | |
23 | + } | |
24 | +} | |
25 | +</script> | |
26 | + | |
27 | +<style lang="scss" scoped> | |
28 | + | |
29 | +</style> | ... | ... |
frontend/front/src/views/pages/regionalManage/components/paymentManage.vue
0 → 100644
... | ... | @@ -0,0 +1,29 @@ |
1 | +<template> | |
2 | + <div class="container"> | |
3 | + 支付组件 | |
4 | + </div> | |
5 | +</template> | |
6 | + | |
7 | +<script> | |
8 | +export default { | |
9 | + name: "paymentManage", | |
10 | + props:{ | |
11 | + type:Object, | |
12 | + default:{} | |
13 | + }, | |
14 | + mounted() { | |
15 | + }, | |
16 | + data(){ | |
17 | + return { | |
18 | + | |
19 | + } | |
20 | + }, | |
21 | + methods:{ | |
22 | + | |
23 | + } | |
24 | +} | |
25 | +</script> | |
26 | + | |
27 | +<style lang="scss" scoped> | |
28 | + | |
29 | +</style> | ... | ... |
frontend/front/src/views/pages/regionalManage/components/personManage.vue
0 → 100644
... | ... | @@ -0,0 +1,29 @@ |
1 | +<template> | |
2 | + <div class="container"> | |
3 | + 人员组件 | |
4 | + </div> | |
5 | +</template> | |
6 | + | |
7 | +<script> | |
8 | +export default { | |
9 | + name: "personManage", | |
10 | + props:{ | |
11 | + type:Object, | |
12 | + default:{} | |
13 | + }, | |
14 | + mounted() { | |
15 | + }, | |
16 | + data(){ | |
17 | + return { | |
18 | + | |
19 | + } | |
20 | + }, | |
21 | + methods:{ | |
22 | + | |
23 | + } | |
24 | +} | |
25 | +</script> | |
26 | + | |
27 | +<style lang="scss" scoped> | |
28 | + | |
29 | +</style> | ... | ... |
frontend/front/src/views/pages/regionalManage/components/regionManage.vue
0 → 100644
... | ... | @@ -0,0 +1,718 @@ |
1 | +<template> | |
2 | + <div class="container"> | |
3 | + <el-row> | |
4 | + <el-col :span="24"> | |
5 | + <el-form :model="queryForm" ref="queryForm" :inline="true" style="display: flex; justify-content: space-between"> | |
6 | + <div> | |
7 | + <el-form-item label="区域名称:"> | |
8 | + <el-input v-model="queryForm.regionalName" placeholder="请输入姓名" clearable></el-input> | |
9 | + </el-form-item> | |
10 | + <el-form-item label="区域类型:"> | |
11 | + <el-select v-model="queryForm.regionalType" placeholder="请选择状态" clearable> | |
12 | + <el-option v-for="item in regionalTypeOptions" :key="item.KEY_" :label="item.NAME_" :value="item.KEY_"> | |
13 | + </el-option> | |
14 | + </el-select> | |
15 | + </el-form-item> | |
16 | + </div> | |
17 | + <el-form-item> | |
18 | + <el-button type="primary" icon="el-icon-refresh" | |
19 | + style="border: 1px solid #5875eb; background: #ffffff; color: #5875eb; border-radius: 5px;" | |
20 | + @click="handleReset" plain>重置 | |
21 | + </el-button> | |
22 | + <el-button type="primary" style="background: #5875eb; border: 1px solid #5875eb; border-radius: 5px;" | |
23 | + icon="el-icon-search" @click="handleSearch"> 查询 | |
24 | + </el-button> | |
25 | + </el-form-item> | |
26 | + </el-form> | |
27 | + </el-col> | |
28 | + <el-col :span="24" style="margin-bottom: 10px;"> | |
29 | + <el-button type="primary" style="background: #5875eb; border: 1px solid #5875eb; border-radius: 5px;" | |
30 | + icon="el-icon-plus" @click=" hanleOpt('add')"> 新增 | |
31 | + </el-button> | |
32 | + </el-col> | |
33 | + <el-col :span="24"> | |
34 | + <el-table | |
35 | + style="width: 100%" | |
36 | + :data="tableData"> | |
37 | + <el-table-column | |
38 | + type="index" | |
39 | + label="序号"> | |
40 | + </el-table-column> | |
41 | + <el-table-column | |
42 | + prop="f_ssqymc" | |
43 | + label="企业名称"> | |
44 | + </el-table-column> | |
45 | + <el-table-column | |
46 | + prop="f_name" | |
47 | + label="区域名称"> | |
48 | + </el-table-column> | |
49 | + <el-table-column | |
50 | + prop="f_regional_type" | |
51 | + label="类型"> | |
52 | + </el-table-column> | |
53 | + <el-table-column | |
54 | + prop="f_shape" | |
55 | + label="区域形状"> | |
56 | + </el-table-column> | |
57 | + <el-table-column | |
58 | + prop="f_remark" | |
59 | + label="备注"> | |
60 | + </el-table-column> | |
61 | + <el-table-column | |
62 | + prop="opt" | |
63 | + width="100" | |
64 | + label="操作"> | |
65 | + <template slot-scope="scope"> | |
66 | + <el-button type="text" @click="hanleOpt('edit',scope.row)">编辑</el-button> | |
67 | + </template> | |
68 | + </el-table-column> | |
69 | + </el-table> | |
70 | + </el-col> | |
71 | + <el-col :span="24"> | |
72 | + <el-pagination | |
73 | + style="float: right; margin-top: 10px;" | |
74 | + @size-change="handleSizeChange" | |
75 | + @current-change="handleCurrentChange" | |
76 | + :current-page="pageParam.page" | |
77 | + :page-sizes="[10, 20, 30, 50]" | |
78 | + :page-size="pageParam.size" | |
79 | + layout="total, sizes, prev, pager, next, jumper" | |
80 | + :total="pageParam.total"> | |
81 | + </el-pagination> | |
82 | + </el-col> | |
83 | + </el-row> | |
84 | + <el-dialog | |
85 | + :title="dialogParams.title" | |
86 | + :visible.sync="dialogParams.dialogVisible" | |
87 | + width="80%" | |
88 | + @close="handleDialogClose"> | |
89 | + <el-form :model="dialogParams" :inline="true" :rules="dialogRules" ref="dialogParams"> | |
90 | + <el-form-item label="区域名称:" prop="regionalName"> | |
91 | + <el-input v-model="dialogParams.regionalName" placeholder="请输入区域名称" clearable></el-input> | |
92 | + </el-form-item> | |
93 | + <el-form-item label="区域类型:" prop="regionalType"> | |
94 | + <el-select v-model="dialogParams.regionalType" clearable placeholder="请选择"> | |
95 | + <el-option | |
96 | + v-for="item in regionalTypeOptions" | |
97 | + :key="item.KEY_" | |
98 | + :label="item.NAME_" | |
99 | + :value="item.KEY_"> | |
100 | + </el-option> | |
101 | + </el-select> | |
102 | + </el-form-item> | |
103 | + <el-form-item label="备注:"> | |
104 | + <el-input | |
105 | + clearable | |
106 | + style="width: 100%;" | |
107 | + type="textarea" | |
108 | + placeholder="请输入内容" | |
109 | + v-model="dialogParams.fRemark"> | |
110 | + </el-input> | |
111 | + </el-form-item> | |
112 | + <el-form-item> | |
113 | + <el-button :class="[dialogParams.fShape == '三角形'?'clickBtn':'','btn']" @click="draw('polygon','三角形')" style="margin-bottom: 5px">绘制多边形</el-button> | |
114 | + <el-button :class="[dialogParams.fShape == '矩形'?'clickBtn':'','btn']" @click="draw('rectangle','矩形')" style="margin-bottom: 5px">绘制矩形</el-button> | |
115 | + <el-button :class="[dialogParams.fShape == '圆形'?'clickBtn':'','btn']" @click="draw('circle','圆形')" style="margin-bottom: 5px">绘制圆形</el-button> | |
116 | + <el-button @click="closeDraw" v-if="dialogParams.dialogType == 'edit'" style="margin-bottom: 5px">结束编辑</el-button> | |
117 | + </el-form-item> | |
118 | + </el-form> | |
119 | + <el-row> | |
120 | + <el-col :span="24"> | |
121 | + <div id="mapContainer" style="width: 100%; height: 500px;"></div> | |
122 | + </el-col> | |
123 | + </el-row> | |
124 | + <span slot="footer" class="dialog-footer"> | |
125 | + <el-button @click="dialogParams.dialogVisible = false">取 消</el-button> | |
126 | + <el-button type="primary" @click="handleSubmit('dialogParams')">确 定</el-button> | |
127 | + </span> | |
128 | + </el-dialog> | |
129 | + </div> | |
130 | +</template> | |
131 | + | |
132 | +<script> | |
133 | +import AMapLoader from '@amap/amap-jsapi-loader'; | |
134 | +import {regionalTablePort,regionalAddEditPort,regionTypePort,regionalDetailInfo} from '@/api/regionalManage' | |
135 | +export default { | |
136 | + name: "regionManage", | |
137 | + props:{ | |
138 | + rowData:{ | |
139 | + type:Object, | |
140 | + default:()=>{} | |
141 | + } | |
142 | + }, | |
143 | + async mounted() { | |
144 | + await this.getDataList(); | |
145 | + await this.getRegionTypeList(); | |
146 | + }, | |
147 | + data(){ | |
148 | + return { | |
149 | + tableData:[], | |
150 | + regionalTypeOptions:[ | |
151 | + { | |
152 | + label:'经营区域', | |
153 | + value:'经营区域' | |
154 | + }, | |
155 | + { | |
156 | + label:'流动区域', | |
157 | + value:'流动区域' | |
158 | + } | |
159 | + ], | |
160 | + dialogRules:{ | |
161 | + regionalName:[ | |
162 | + {required:true,message:'请输入区域名称',trigger:'blur'} | |
163 | + ], | |
164 | + regionalType:[ | |
165 | + {required:true,message:'请选择区域类型',trigger:'change'} | |
166 | + ] | |
167 | + }, | |
168 | + queryForm:{ | |
169 | + regionalType:'', | |
170 | + regionalName:'', | |
171 | + orgId:'', | |
172 | + tabType:'region' | |
173 | + }, | |
174 | + dialogParams:{ | |
175 | + title:'新增区域', | |
176 | + radius:'',//圆形半径 | |
177 | + dialogVisible:false, | |
178 | + fSsczid:'', | |
179 | + fShape:'', | |
180 | + fRemark:'', | |
181 | + id:'', | |
182 | + dialogType:'', | |
183 | + regionalType:'', | |
184 | + regionalName:'', | |
185 | + centerOfCircle:[],//圆形中心点坐标 | |
186 | + }, | |
187 | + polygon: null, | |
188 | + map:null, | |
189 | + mapEditor:null, | |
190 | + mouseTool:null, | |
191 | + overlays:[], | |
192 | + circleOverlays:[],//圆形中心点的坐标 | |
193 | + centerPoint:[116.403322, 39.920255], | |
194 | + pageParam:{ | |
195 | + page:1, | |
196 | + size:10, | |
197 | + total:0 | |
198 | + }, | |
199 | + | |
200 | + } | |
201 | + }, | |
202 | + methods:{ | |
203 | + //初始化区域类型的接口数据 | |
204 | + async getRegionTypeList(){ | |
205 | + let params =[ | |
206 | + { | |
207 | + "key": "PARENT_ID_", | |
208 | + "value": "1828635308418162688" | |
209 | + } | |
210 | + ] | |
211 | + await regionTypePort(params).then((res)=>{ | |
212 | + const { rows } = res; | |
213 | + this.regionalTypeOptions = rows; | |
214 | + }) | |
215 | + }, | |
216 | + async getRegionDetailInfoData(id){ | |
217 | + await regionalDetailInfo({id:id}).then((res)=>{ | |
218 | + console.log('打印详情res======>',res); | |
219 | + const { value } = res; | |
220 | + const { fShape,fName,fRemark,radius,fBoundary,centerOfCircle,fRegionalType} = value; | |
221 | + this.dialogParams.fRemark = fRemark; | |
222 | + this.dialogParams.regionalName = fName; | |
223 | + this.dialogParams.regionalType = fRegionalType; | |
224 | + this.dialogParams.radius = radius; | |
225 | + this.dialogParams.fShape = fShape; | |
226 | + console.log('打印fBoundary',JSON.parse(fBoundary)); | |
227 | + this.dialogParams.centerOfCircle = centerOfCircle?centerOfCircle.split(','):[]; | |
228 | + if(this.dialogParams.fShape == '圆形'){ | |
229 | + | |
230 | + } | |
231 | + | |
232 | + }) | |
233 | + }, | |
234 | + //初始化数据接口 | |
235 | + async getDataList(){ | |
236 | + let params= { | |
237 | + pageBean: { | |
238 | + page: this.pageParam.page, | |
239 | + pageSize: this.pageParam.size, | |
240 | + showTotal: true | |
241 | + }, | |
242 | + querys: [] | |
243 | + } | |
244 | + if(this.queryForm.regionalName){ | |
245 | + params.querys.push({ | |
246 | + property: "f_name", | |
247 | + value: this.queryForm.regionalName, | |
248 | + group: "advance", | |
249 | + relation: "AND", | |
250 | + operation: "LIKE" | |
251 | + }) | |
252 | + } | |
253 | + if(this.queryForm.regionalType){ | |
254 | + params.querys.push({ | |
255 | + property: "f_regional_type", | |
256 | + value: this.queryForm.regionalType, | |
257 | + group: "advance", | |
258 | + relation: "AND", | |
259 | + operation: "LIKE" | |
260 | + }) | |
261 | + } | |
262 | + if(this.rowData.orgId){ | |
263 | + params.querys.push({ | |
264 | + property: "orgId", | |
265 | + value: this.rowData.orgId, | |
266 | + group: "advance", | |
267 | + relation: "AND", | |
268 | + operation: "LIKE" | |
269 | + }) | |
270 | + } | |
271 | + await regionalTablePort(params).then((res)=>{ | |
272 | + console.log('打印区域管理中res====>',res); | |
273 | + const { rows,total } = res; | |
274 | + this.tableData = rows; | |
275 | + this.pageParam.total = total; | |
276 | + }) | |
277 | + }, | |
278 | + //强调说明:自定义的dom是基于地图对象生成的,并不能像vue一样绑定事件,这里采用jQuery的方式出发的事件。如下 | |
279 | + //定义右键内容 | |
280 | + rightclickObj() { | |
281 | + let that = this; | |
282 | + //���义内容 | |
283 | + let content = []; | |
284 | + content.push("<div class='context_menu'>"); | |
285 | + content.push( | |
286 | + "<p class='menu-list menu-list-edit-start' >启用编辑</p>" | |
287 | + ); | |
288 | + content.push( | |
289 | + "<p class='menu-list menu-list-edit-end' >结束编辑</p>" | |
290 | + ); | |
291 | + content.push( | |
292 | + "<p class='menu-list menu-list-get-area' >计算面积</p>" | |
293 | + ); | |
294 | + content.push( | |
295 | + "<p class='menu-list menu-list-remove' >移除图形</p>" | |
296 | + ); | |
297 | + if (that.circleEditor) { | |
298 | + content.push( | |
299 | + "<p class='menu-list menu-list-radius'>半径</p>" | |
300 | + ); | |
301 | + } | |
302 | + content.push('</div>'); | |
303 | + //创建右键实例并添加自定义的内容 | |
304 | + | |
305 | + that.contextMenu = new AMap.ContextMenu({ | |
306 | + isCustom: true, | |
307 | + content: content.join('') | |
308 | + }); | |
309 | + }, | |
310 | + //初始化地图 | |
311 | + initializeMap() { | |
312 | + AMapLoader.reset(); | |
313 | + AMapLoader.load({ | |
314 | + "key": "65f6591039d0e723f91a2bfab50712f7",// 申请好的Web端开发者Key,首次调用 load 时必填 | |
315 | + "version": "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15 | |
316 | + "plugins": ['AMap.ToolBar', 'AMap.Driving','AMap.InfoWindow', | |
317 | + 'AMap.ContextMenu', | |
318 | + 'AMap.Heatmap', | |
319 | + 'AMap.MouseTool', | |
320 | + 'AMap.RangingTool', | |
321 | + 'AMap.CircleEditor', | |
322 | + 'AMap.RectangleEditor', | |
323 | + 'AMap.PolyEditor', | |
324 | + 'AMap.VectorMap', | |
325 | + 'AMap.ToolBar', | |
326 | + 'AMap.Scale', | |
327 | + 'AMap.OverView', | |
328 | + 'AMap.MapType', | |
329 | + 'AMap.Geolocation'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等 | |
330 | + "AMapUI": { | |
331 | + "version": "1.1", | |
332 | + "plugins": [] | |
333 | + }, | |
334 | + Loca: { | |
335 | + version: '2.0' //数据可视化 | |
336 | + } | |
337 | + }).then((AMap)=>{ | |
338 | + console.log('打印AMap====>',AMap); | |
339 | + this.map = new AMap.Map('mapContainer', {//设置地图容器id | |
340 | + viewMode: '2D', //是否为3D地图模式 | |
341 | + zoom: 16, //初始化地图层级 | |
342 | + center: this.centerPoint,//初始化地图中心点 | |
343 | + }); | |
344 | + // this.map.on('rightclick', (e)=> { | |
345 | + // this.rightclickObj(); //定义右键内容 | |
346 | + // this.contextMenu.open(this.map, e.lnglat); | |
347 | + // this.contextMenuPositon = e.lnglat; //右键菜单位置 | |
348 | + // }); | |
349 | + let that = this; | |
350 | + this.mouseTool =new AMap.MouseTool(this.map); | |
351 | + this.mouseTool.on('draw',function (e){ | |
352 | + if(that.overlays.length>0){ | |
353 | + console.log('打印this.overlays=====>',that.overlays); | |
354 | + that.map.remove(that.overlays); | |
355 | + //关闭绘画 | |
356 | + // that.mouseTool.close(true); | |
357 | + that.overlays = []; | |
358 | + } | |
359 | + if(that.dialogParams.fShape == '圆形'){ | |
360 | + let circleCenterPoint = e.obj.getCenter(); //获取圆形坐标点 | |
361 | + let circleRadius = e.obj.getRadius();//获取半径 | |
362 | + that.dialogParams.radius = circleRadius; | |
363 | + let circlePointList = [ | |
364 | + { | |
365 | + jd:circleCenterPoint.lng, | |
366 | + wd:circleCenterPoint.lat | |
367 | + } | |
368 | + ]; | |
369 | + that.circleOverlays = circlePointList; | |
370 | + console.log('打印position',circleCenterPoint,circleRadius); | |
371 | + } | |
372 | + that.overlays.push(e.obj); | |
373 | + console.log('打印that.overlays',that.overlays); | |
374 | + }) | |
375 | + if(this.dialogParams.dialogType == 'edit'){ | |
376 | + var editShap = null; | |
377 | + if(this.dialogParams.fShape == '圆形'){ | |
378 | + editShap = new AMap.Circle({ | |
379 | + center: this.dialogParams.centerOfCircle, | |
380 | + radius: this.dialogParams.radius, //半径 | |
381 | + borderWeight: 3, | |
382 | + strokeColor: "#FF33FF", | |
383 | + // strokeOpacity: 1, | |
384 | + strokeWeight: 6, | |
385 | + strokeOpacity: 0.2, | |
386 | + fillOpacity: 0.4, | |
387 | + strokeStyle: 'dashed', | |
388 | + strokeDasharray: [10, 10], | |
389 | + // 线样式还支持 'dashed' | |
390 | + fillColor: '#1791fc', | |
391 | + zIndex: 50, | |
392 | + }); | |
393 | + this.mapEditor = new AMap.CircleEditor(this.map, editShap); | |
394 | + }else if(this.dialogParams.fShape == '矩形'){ | |
395 | + var southWest = new AMap.LngLat(116.356449, 39.859008) | |
396 | + var northEast = new AMap.LngLat(116.417901, 39.893797) | |
397 | + var bounds = new AMap.Bounds(southWest, northEast) | |
398 | + editShap = new AMap.Rectangle({ | |
399 | + bounds: bounds, | |
400 | + strokeColor:'#FF33FF', | |
401 | + strokeWeight: 6, | |
402 | + strokeOpacity:0.2, | |
403 | + strokeDasharray: [30,10], | |
404 | + // strokeStyle还支持 solid | |
405 | + // 线样式还支持 'dashed' | |
406 | + fillColor: '#1791fc', | |
407 | + strokeStyle: 'dashed', | |
408 | + fillOpacity:0.5, | |
409 | + cursor:'pointer', | |
410 | + zIndex:50, | |
411 | + }); | |
412 | + this.mapEditor = new AMap.RectangleEditor(this.map, editShap); | |
413 | + } | |
414 | + editShap.setMap(this.map); | |
415 | + // 缩放地图到合适的视野级别 | |
416 | + this.map.setFitView([ editShap ]); | |
417 | + this.mapEditor.open(); | |
418 | + this.mapEditor.on('end', function(event) { | |
419 | + if(that.dialogParams.fShape == '圆形'){ | |
420 | + let editCircleCenterPoint = event.target.getCenter(); //获取圆形坐标点 | |
421 | + let editCircleRadius = event.target.getRadius();//获取半径 | |
422 | + that.dialogParams.radius = editCircleRadius; | |
423 | + let editCirclePointList = [ | |
424 | + { | |
425 | + jd:editCircleCenterPoint.lng, | |
426 | + wd:editCircleCenterPoint.lat | |
427 | + } | |
428 | + ]; | |
429 | + that.circleOverlays = editCirclePointList; | |
430 | + }else if(that.dialogParams.fShape == '矩形'){ | |
431 | + console.log('触发事件: end=====>',event); | |
432 | + } | |
433 | + that.overlays.push(event.target); | |
434 | + // event.target 即为编辑后的圆形对象 | |
435 | + }) | |
436 | + } | |
437 | + }) | |
438 | + }, | |
439 | + //结束编辑 | |
440 | + closeDraw(){ | |
441 | + this.mapEditor.close(); | |
442 | + }, | |
443 | + //draw 绘制圆形,矩形,多边形 | |
444 | + draw(type,shapType){ | |
445 | + if(this.dialogParams.dialogType == 'edit'){ | |
446 | + this.mapEditor.close(); | |
447 | + } | |
448 | + this.dialogParams.fShape = shapType; | |
449 | + switch (type){ | |
450 | + case 'polygon':{ | |
451 | + this.mouseTool.polygon({ | |
452 | + fillColor:'#00b0ff', | |
453 | + strokeColor:'#80d8ff' | |
454 | + }); | |
455 | + break; | |
456 | + } | |
457 | + case 'rectangle':{ | |
458 | + this.mouseTool.rectangle({ | |
459 | + fillColor:'#00b0ff', | |
460 | + strokeColor:'#80d8ff' | |
461 | + }); | |
462 | + break; | |
463 | + } | |
464 | + case 'circle':{ | |
465 | + this.mouseTool.circle({ | |
466 | + fillColor:'#00b0ff', | |
467 | + strokeColor:'#80d8ff' | |
468 | + }); | |
469 | + break; | |
470 | + } | |
471 | + } | |
472 | + }, | |
473 | + //绘制多边形 | |
474 | + drawPolygon () { | |
475 | + if(this.overlays.length>0){ | |
476 | + this.map.remove(this.overlays); | |
477 | + this.map.clearMap(); | |
478 | + //关闭绘画 | |
479 | + this.mouseTool.close(true); | |
480 | + this.overlays = []; | |
481 | + return | |
482 | + } | |
483 | + this.mouseTool.polygon({ | |
484 | + fillColor:'#00b0ff', | |
485 | + strokeColor:'#80d8ff', | |
486 | + // strokeOpacity: 1, | |
487 | + strokeWeight: 6, | |
488 | + strokeOpacity: 0.2, | |
489 | + fillOpacity: 0.4, | |
490 | + // 线样式还支持 'dashed' | |
491 | + strokeStyle: "solid", | |
492 | + // strokeStyle是dashed时有效 | |
493 | + // strokeDasharray: [30,10], | |
494 | + }); | |
495 | + let that = this; | |
496 | + this.mouseTool.on('draw', function(event) { | |
497 | + if(that.overlays.length>1){ | |
498 | + console.log('打印this.overlays',that.overlays,that.mouseTool); | |
499 | + that.map.remove(that.overlays); | |
500 | + //关闭绘画 | |
501 | + // that.mouseTool.close(true); | |
502 | + that.overlays = []; | |
503 | + } | |
504 | + let geoJSON = event.obj.getPath(); // 获取矢量图形的坐标数组 | |
505 | + that.overlays.push(event.obj); | |
506 | + console.log('打印geoJson',geoJSON,that.overlays); | |
507 | + // // 为矢量图形设置唯一标识和zIndex | |
508 | + // console.log('覆盖物对象绘制完成',event.obj); | |
509 | + // event.obj.setExtData({ uniqueId: 'id_' + new Date().getTime() }); | |
510 | + // event.obj.setOptions({ zIndex: 100 }); | |
511 | + | |
512 | + // 其他矢量图形处理逻辑... | |
513 | + // event.obj 为绘制出来的覆盖物对象 | |
514 | + }); | |
515 | + }, | |
516 | + //绘制圆形 | |
517 | + drawCircle () { | |
518 | + if(this.overlays.length>0){ | |
519 | + this.map.remove(this.overlays); | |
520 | + //清除原来的电子围栏 | |
521 | + this.map.clearMap(); | |
522 | + //关闭绘画 | |
523 | + this.mouseTool.close(true); | |
524 | + this.overlays = []; | |
525 | + return | |
526 | + } | |
527 | + console.log('打印this.overlays====>圆形',this.overlays) | |
528 | + this.mouseTool.circle({ | |
529 | + // strokeOpacity: 1, | |
530 | + strokeWeight: 6, | |
531 | + strokeOpacity: 0.2, | |
532 | + fillColor:'#00b0ff', | |
533 | + strokeColor:'#80d8ff', | |
534 | + fillOpacity: 0.4, | |
535 | + strokeStyle: 'solid', | |
536 | + // 线样式还支持 'dashed' | |
537 | + // strokeDasharray: [30,10], | |
538 | + }) | |
539 | + let that = this; | |
540 | + this.mouseTool.on('draw', function(event) { | |
541 | + if(that.overlays.length>0){ | |
542 | + // console.log('打印this.overlays',that.overlays,that.mouseTool); | |
543 | + that.map.remove(that.overlays); | |
544 | + //关闭绘画 | |
545 | + that.mouseTool.close(true); | |
546 | + that.overlays = []; | |
547 | + return | |
548 | + } | |
549 | + let geoJSON = event.obj.getPath(); // 获取矢量图形的坐标数组 | |
550 | + that.overlays.push(event.obj); | |
551 | + // // 为矢量图形设置唯一标识和zIndex | |
552 | + // event.obj.setExtData({ uniqueId: 'id_' + new Date().getTime() }); | |
553 | + // event.obj.setOptions({ zIndex: 100 }); | |
554 | + | |
555 | + // 其他矢量图形处理逻辑... | |
556 | + // event.obj 为绘制出来的覆盖物对象 | |
557 | + console.log('覆盖物对象开始绘制====》圆形',event.obj,that.overlays); | |
558 | + }); | |
559 | + }, | |
560 | + //绘制矩形 | |
561 | + drawRectangle () { | |
562 | + if(this.overlays.length>0){ | |
563 | + this.map.remove(this.overlays); | |
564 | + //关闭绘画 | |
565 | + this.mouseTool.close(true); | |
566 | + //清除原来的电子围栏 | |
567 | + this.map.clearMap(); | |
568 | + this.overlays = []; | |
569 | + return | |
570 | + } | |
571 | + console.log('打印矩形=====》',this.overlays,this.mouseTool); | |
572 | + this.mouseTool.rectangle({ | |
573 | + strokeOpacity:0.5, | |
574 | + strokeWeight: 6, | |
575 | + fillColor:'#00b0ff', | |
576 | + strokeColor:'#80d8ff', | |
577 | + fillOpacity:0.5, | |
578 | + // strokeStyle还支持 solid | |
579 | + strokeStyle: 'solid', | |
580 | + // strokeDasharray: [30,10], | |
581 | + }) | |
582 | + let that = this; | |
583 | + this.mouseTool.on('draw', function(event) { | |
584 | + if(that.overlays.length>0){ | |
585 | + console.log('打印this.overlays',that.overlays,that.mouseTool); | |
586 | + that.map.remove(that.overlays); | |
587 | + //关闭绘画 | |
588 | + that.mouseTool.close(true); | |
589 | + that.overlays = []; | |
590 | + return | |
591 | + } | |
592 | + let geoJSON = event.obj.getPath(); // 获取矢量图形的坐标数组 | |
593 | + that.overlays.push(event.obj); | |
594 | + // 为矢量图形设置唯一标识和zIndex | |
595 | + // event.obj.setExtData({ uniqueId: 'id_' + new Date().getTime() }); | |
596 | + // event.obj.setOptions({ zIndex: 100 }); | |
597 | + // 其他矢量图形处理逻辑... | |
598 | + // event.obj 为绘制出来的覆盖物对象 | |
599 | + console.log('覆盖物对象绘制完成=====>矩形',event,that.overlays) | |
600 | + }); | |
601 | + }, | |
602 | + //提交事件 | |
603 | + async handleSubmit(formName){ | |
604 | + this.$refs[formName].validate(async (valid) => { | |
605 | + if (valid) { | |
606 | + console.log('打印this.overlays.',this.overlays) | |
607 | + if(this.overlays.length<=0){ | |
608 | + this.$message.warning('请规划区域!'); | |
609 | + return; | |
610 | + } | |
611 | + console.log('打印this.overLays',); | |
612 | + let jwdDTOListArray = this.overlays[0].getPath().map((item)=>{ | |
613 | + return { | |
614 | + jd:item.lng, | |
615 | + wd:item.lat | |
616 | + } | |
617 | + }); | |
618 | + jwdDTOListArray.push(jwdDTOListArray[0]); | |
619 | + console.log('打印jwdDTOListArray',jwdDTOListArray); | |
620 | + let params= { | |
621 | + id:this.dialogParams.id, | |
622 | + fName: this.dialogParams.regionalName, | |
623 | + fSsczid: this.rowData.fSsczid, | |
624 | + fRegionalType: this.dialogParams.regionalType, | |
625 | + fShape: this.dialogParams.fShape, | |
626 | + fRemark:this.dialogParams.fRemark, | |
627 | + jwdDTOList:this.dialogParams.fShape == '圆形'?this.circleOverlays:jwdDTOListArray | |
628 | + } | |
629 | + if(this.dialogParams.fShape == '圆形'){ | |
630 | + params ={ | |
631 | + ...params, | |
632 | + radius:this.dialogParams.radius | |
633 | + } | |
634 | + } | |
635 | + await regionalAddEditPort(params).then((res)=>{ | |
636 | + this.dialogParams.dialogVisible = false; | |
637 | + this.mouseTool.close(true); | |
638 | + this.overlays = []; | |
639 | + this.handleSearch(); | |
640 | + this.pageParam.page = 1; | |
641 | + }) | |
642 | + } else { | |
643 | + return false; | |
644 | + } | |
645 | + }); | |
646 | + }, | |
647 | + //弹窗关闭 | |
648 | + handleDialogClose(){ | |
649 | + this.$refs.dialogParams.resetFields(); | |
650 | + this.dialogParams.dialogVisible = false; | |
651 | + this.mouseTool.close(true); | |
652 | + this.overlays = []; | |
653 | + | |
654 | + }, | |
655 | + //分页功能的size改变事件 | |
656 | + handleSizeChange(val){ | |
657 | + this.pageParam.size = val; | |
658 | + this.handleSearch(); | |
659 | + }, | |
660 | + //分页功能page改变事件 | |
661 | + handleCurrentChange(val){ | |
662 | + this.pageParam.page = val; | |
663 | + this.handleSearch(); | |
664 | + }, | |
665 | + //操作栏按钮 | |
666 | + hanleOpt(type,row){ | |
667 | + console.log('打印row=====>',row); | |
668 | + this.dialogParams.dialogType= type; | |
669 | + switch (type){ | |
670 | + case 'add': | |
671 | + this.dialogParams.id =''; | |
672 | + this.dialogParams.title='新增区域'; | |
673 | + break; | |
674 | + case 'edit': | |
675 | + this.dialogParams.id = row.id_; | |
676 | + this.dialogParams.title='编辑区域'; | |
677 | + this.getRegionDetailInfoData(row.id_); | |
678 | + break; | |
679 | + } | |
680 | + if(!this.rowData.fSsczid && type == 'add'){ | |
681 | + this.$message.warning('请选择气站!') | |
682 | + return | |
683 | + } | |
684 | + this.dialogParams.dialogVisible = true; | |
685 | + this.$nextTick(()=>{ | |
686 | + this.initializeMap(); | |
687 | + }) | |
688 | + console.log('打印是否触发新增功能'); | |
689 | + }, | |
690 | + //重置按钮事件 | |
691 | + handleReset(){ | |
692 | + this.queryForm.regionalType =''; | |
693 | + this.queryForm.regionalName =''; | |
694 | + this.pageParam.page = 1; | |
695 | + this.handleSearch(); | |
696 | + }, | |
697 | + //查询按钮事件 | |
698 | + handleSearch(){ | |
699 | + this.getDataList(); | |
700 | + }, | |
701 | + //新增用户事件 | |
702 | + handleAdd(){ | |
703 | + this.showDialog = true; | |
704 | + this.$nextTick(()=>{ | |
705 | + this.$refs.showDialog.open('add'); | |
706 | + }) | |
707 | + } | |
708 | + } | |
709 | +} | |
710 | +</script> | |
711 | + | |
712 | +<style lang="scss" scoped> | |
713 | +.clickBtn{ | |
714 | + background-color:#5875eb; | |
715 | + color: #ffffff; | |
716 | +} | |
717 | + | |
718 | +</style> | ... | ... |
frontend/front/src/views/pages/regionalManage/components/videoManage.vue
0 → 100644
... | ... | @@ -0,0 +1,29 @@ |
1 | +<template> | |
2 | + <div class="container"> | |
3 | + 摄像组件 | |
4 | + </div> | |
5 | +</template> | |
6 | + | |
7 | +<script> | |
8 | +export default { | |
9 | + name: "videoManage", | |
10 | + props:{ | |
11 | + type:Object, | |
12 | + default:{} | |
13 | + }, | |
14 | + mounted() { | |
15 | + }, | |
16 | + data(){ | |
17 | + return { | |
18 | + | |
19 | + } | |
20 | + }, | |
21 | + methods:{ | |
22 | + | |
23 | + } | |
24 | +} | |
25 | +</script> | |
26 | + | |
27 | +<style lang="scss" scoped> | |
28 | + | |
29 | +</style> | ... | ... |
frontend/front/src/views/pages/regionalManage/index.vue
1 | 1 | <template> |
2 | - <div class="regionalSty"> | |
3 | - <div class="searchSty"> | |
4 | - <el-form :model="queryParams" :inline="true"> | |
5 | - <el-form-item label="区域名称:"> | |
6 | - <el-input v-model="queryParams.regionalName" placeholder="请输入区域名称" clearable></el-input> | |
7 | - </el-form-item> | |
8 | - <el-form-item label="区域类型:"> | |
9 | - <el-select v-model="queryParams.regionalType" clearable placeholder="请选择"> | |
10 | - <el-option | |
11 | - v-for="item in regionalTypeOptions" | |
12 | - :key="item.value" | |
13 | - :label="item.label" | |
14 | - :value="item.value"> | |
15 | - </el-option> | |
16 | - </el-select> | |
17 | - </el-form-item> | |
18 | - <el-form-item> | |
19 | - <el-button type="primary" @click="handleQuery" icon="el-icon-search" size="small">搜索</el-button> | |
20 | - <el-button @click="handleReset" icon="el-icon-refresh-left" size="small">重置</el-button> | |
21 | - </el-form-item> | |
22 | - </el-form> | |
2 | + <div class="container"> | |
3 | + <div class="container-left"> | |
4 | + <div class="title-label">组织列表</div> | |
5 | + <div class="title-content">可以选择对应的组织下的成员信息</div> | |
6 | + <div><el-input v-model="filterText" placeholder="请输入组织关键词搜索" suffix-icon="el-icon-search" cleaable></el-input></div> | |
7 | + <div> | |
8 | + <el-tree | |
9 | + class="filter-tree" | |
10 | + :data="treeData" | |
11 | + @node-click="handleNodeClick" | |
12 | + :props="defaultProps" | |
13 | + highlight-current | |
14 | + default-expand-all | |
15 | + :filter-node-method="filterNode" | |
16 | + ref="tree"> | |
17 | + <template v-slot="{node}"> | |
18 | + <span :title="node.label" class="node-label">{{node.label}}</span> | |
19 | + </template> | |
20 | + </el-tree> | |
21 | + </div> | |
23 | 22 | </div> |
24 | - <div class="tableSty"> | |
25 | - <el-row> | |
26 | - <el-col :span="24" style="margin-bottom: 10px;"> | |
27 | - <el-button type="primary" @click="hanleOpt('add')" icon="el-icon-plus" size="small">新增</el-button> | |
28 | - </el-col> | |
29 | - <el-col :span="24"> | |
30 | - <el-table | |
31 | - :data="tableData" | |
32 | - style="width: 100%"> | |
33 | - <el-table-column | |
34 | - type="index" | |
35 | - label="序号" | |
36 | - width="80"> | |
37 | - </el-table-column> | |
38 | - <el-table-column | |
39 | - prop="regionalName" | |
40 | - label="区域名称" | |
41 | - width="150"> | |
42 | - </el-table-column> | |
43 | - <el-table-column | |
44 | - prop="regionalType" | |
45 | - label="类型"> | |
46 | - </el-table-column> | |
47 | - <el-table-column | |
48 | - prop="bz" | |
49 | - label="备注"> | |
50 | - </el-table-column> | |
51 | - <el-table-column | |
52 | - prop="opt" | |
53 | - label="操作" | |
54 | - width="150"> | |
55 | - <template slot-scope="scope"> | |
56 | - <span @click="hanleOpt('edit',scope.row)">编辑</span> | |
57 | - </template> | |
58 | - </el-table-column> | |
59 | - </el-table> | |
60 | - </el-col> | |
61 | - </el-row> | |
23 | + <div class="container-right"> | |
24 | + <div class="container-right-head"> | |
25 | + <el-radio-group v-model="queryForm.tabType"> | |
26 | + <el-radio-button v-for="(item,index) in tabTypeList" :label="item.key" :key="item.key">{{item.title}}</el-radio-button> | |
27 | + </el-radio-group> | |
28 | + </div> | |
29 | + <div class="container-right-main"> | |
30 | + <component v-for="(item,index) in infoComponentsList" :rowData="rowData" :form="queryForm" v-if="queryForm.tabType === item.key" v-show="queryForm.tabType === item.key" :key="item.key" :is='item.component' :ref='item.component'></component> | |
31 | + </div> | |
62 | 32 | </div> |
63 | - <el-dialog | |
64 | - :title="dialogParams.title" | |
65 | - :visible.sync="dialogParams.dialogVisible" | |
66 | - width="80%" | |
67 | - @close="handleDialogClose"> | |
68 | - <el-form :model="dialogParams" :inline="true"> | |
69 | - <el-form-item label="区域名称:"> | |
70 | - <el-input v-model="dialogParams.regionalName" placeholder="请输入区域名称" clearable></el-input> | |
71 | - </el-form-item> | |
72 | - <el-form-item label="区域类型:"> | |
73 | - <el-select v-model="dialogParams.regionalType" clearable placeholder="请选择"> | |
74 | - <el-option | |
75 | - v-for="item in regionalTypeOptions" | |
76 | - :key="item.value" | |
77 | - :label="item.label" | |
78 | - :value="item.value"> | |
79 | - </el-option> | |
80 | - </el-select> | |
81 | - </el-form-item> | |
82 | - <el-form-item label="地理位置:"> | |
83 | - <el-input v-model="dialogParams.region" disabled suffix-icon="el-icon-map-location" placeholder="请输入内容"></el-input> | |
84 | - </el-form-item> | |
85 | - </el-form> | |
86 | - <el-row> | |
87 | - <el-col :span="24"> | |
88 | - <div id="mapContainer" style="width: 100%; height: 500px;"></div> | |
89 | - <div class="input-card" style="width: 200px"> | |
90 | - <h4 style="margin-bottom: 10px; font-weight: 600">利用mouseTool绘制覆盖物</h4> | |
91 | - <el-button class="btn" @click="drawPolyline()" style="margin-bottom: 5px">绘制线段</el-button> | |
92 | - <el-button class="btn" @click="drawPolygon()" style="margin-bottom: 5px">绘制多边形</el-button> | |
93 | - <el-button class="btn" @click="drawRectangle()" style="margin-bottom: 5px">绘制矩形</el-button> | |
94 | - <el-button class="btn" @click="drawCircle()" style="margin-bottom: 5px">绘制圆形</el-button> | |
95 | - </div> | |
96 | - </el-col> | |
97 | - </el-row> | |
98 | - <span slot="footer" class="dialog-footer"> | |
99 | - <el-button @click="dialogParams.dialogVisible = false">取 消</el-button> | |
100 | - <el-button type="primary" @click="dialogParams.dialogVisible = false">确 定</el-button> | |
101 | - </span> | |
102 | - </el-dialog> | |
103 | - | |
104 | 33 | </div> |
105 | 34 | </template> |
106 | -<script src="https://webapi.amap.com/maps?v=1.4.15&key=65f6591039d0e723f91a2bfab50712f7&plugin=AMap.MouseTool"></script> | |
107 | -<script> | |
108 | -import AMapLoader from '@amap/amap-jsapi-loader'; | |
109 | 35 | |
36 | +<script> | |
37 | +import {getTreeNode,getTableData,deleteUser,resetPassword} from '@/api/userManage' | |
38 | +import carManage from "@/views/pages/regionalManage/components/carManage"; | |
39 | +import checkManage from "@/views/pages/regionalManage/components/checkManage"; | |
40 | +import personManage from "@/views/pages/regionalManage/components/personManage"; | |
41 | +import otherManage from "@/views/pages/regionalManage/components/otherManage"; | |
42 | +import regionManage from "@/views/pages/regionalManage/components/regionManage"; | |
43 | +import videoManage from "@/views/pages/regionalManage/components/videoManage"; | |
44 | +import paymentManage from "@/views/pages/regionalManage/components/paymentManage"; | |
110 | 45 | export default { |
111 | 46 | name: "index", |
47 | + components: {carManage,checkManage,personManage,otherManage,regionManage,videoManage,paymentManage}, | |
112 | 48 | data(){ |
113 | - return{ | |
114 | - map: null, | |
115 | - userLocation: { latitude: null, longitude: null }, | |
116 | - dialogParams:{ | |
117 | - title:'新增测试', | |
49 | + return { | |
50 | + filterText:'', | |
51 | + showQrCodeVisible:false, | |
52 | + showDialog:false, | |
53 | + infoComponentsList:[ | |
54 | + {name: '人员', key:'person', component: 'peosonManage'}, | |
55 | + {name: '区域', key:'region', component: 'regionManage'}, | |
56 | + {name: '车辆', key:'car', component: 'carManage'}, | |
57 | + {name: '摄像', key:'video', component: 'videoManage'}, | |
58 | + {name: '安检项', key:'check', component: 'checkManage'}, | |
59 | + {name: '支付', key:'payment',component: 'paymentManage'}, | |
60 | + {name: '其他', key:'other',component: 'otherManage'}, | |
61 | + ], | |
62 | + rowData:{ | |
63 | + fSsczid:'', | |
64 | + orgId:'' | |
65 | + }, | |
66 | + tabTypeList:[{ | |
67 | + key:'person', | |
68 | + title:'人员' | |
69 | + },{ | |
70 | + key:'region', | |
71 | + title:'区域' | |
72 | + },{ | |
73 | + key:'car', | |
74 | + title:'车辆' | |
75 | + },{ | |
76 | + key:'video', | |
77 | + title: '摄像' | |
78 | + },{ | |
79 | + key:'check', | |
80 | + title: '安检项' | |
81 | + },{ | |
82 | + key:'payment', | |
83 | + title: '支付' | |
84 | + },{ | |
85 | + key:'other', | |
86 | + title: '其他' | |
87 | + }], | |
88 | + resetPswForm:{ | |
118 | 89 | dialogVisible:false, |
119 | - regionalType:'', | |
120 | - regionalName:'' | |
90 | + password:'', | |
91 | + fUserId:'', | |
92 | + label:'请输入"张三-18000000081"的新密码' | |
93 | + }, | |
94 | + resetPwdRules:{ | |
95 | + password: [ | |
96 | + { required: true, message: '请输入新的密码', trigger: 'change' } | |
97 | + ] | |
121 | 98 | }, |
122 | - queryParams:{ | |
123 | - regionalName:'', | |
124 | - regionalType:'' | |
99 | + defaultProps: { | |
100 | + children: 'children', | |
101 | + label: 'name' | |
125 | 102 | }, |
126 | - regionalTypeOptions:[ | |
103 | + treeData:[ | |
127 | 104 | { |
128 | - label:'经营区域', | |
129 | - value:'经营区域' | |
105 | + id: 1, | |
106 | + label: '一级 1', | |
107 | + children: [{ | |
108 | + id: 4, | |
109 | + label: '二级 1-1', | |
110 | + children: [{ | |
111 | + id: 9, | |
112 | + label: '三级 1-1-1等哈数据的卡上等哈圣诞节撒谎的的hash科技大厦的回答赛季开打黄金大神发动机四分零四' | |
113 | + }, { | |
114 | + id: 10, | |
115 | + label: '三级 1-1-2' | |
116 | + }] | |
117 | + }] | |
130 | 118 | }, |
131 | - { | |
132 | - label:'流动区域', | |
133 | - value:'流动区域' | |
134 | - } | |
135 | - ], | |
136 | - mouseTool:null, | |
137 | - tableData:[ | |
138 | - { | |
139 | - regionalName:'测试名称', | |
140 | - regionalType:'经营区域', | |
141 | - bz:'sdsaddssds' | |
142 | - } | |
143 | 119 | ], |
144 | - path:[ | |
145 | - [116.403322, 39.920255], | |
146 | - [116.410703, 39.897555], | |
147 | - [116.402292, 39.892353], | |
148 | - [116.389846, 39.891365] | |
149 | - ] | |
120 | + queryForm:{ | |
121 | + orgId:'', | |
122 | + tabType:'region' | |
123 | + }, | |
124 | + loading:false, | |
125 | + dataList:[], | |
150 | 126 | } |
151 | 127 | }, |
152 | - beforeDestroy() { | |
153 | - //清理资源 | |
154 | - // this.map&& this.map.destroy(); | |
128 | + mounted(){ | |
129 | + this.initData(); | |
155 | 130 | }, |
156 | - mounted() { | |
157 | - // this.getUserLocation(); | |
131 | + watch: { | |
132 | + filterText(val) { | |
133 | + this.$refs.tree.filter(val); | |
134 | + } | |
158 | 135 | }, |
159 | 136 | methods:{ |
160 | - initializeMap() { | |
161 | - AMapLoader.reset(); | |
162 | - AMapLoader.load({ | |
163 | - "key": "65f6591039d0e723f91a2bfab50712f7",// 申请好的Web端开发者Key,首次调用 load 时必填 | |
164 | - "version": "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15 | |
165 | - "plugins": ['AMap.ToolBar', 'AMap.Driving','AMap.InfoWindow', | |
166 | - 'AMap.ContextMenu', | |
167 | - 'AMap.Heatmap', | |
168 | - 'AMap.MouseTool', | |
169 | - 'AMap.RangingTool', | |
170 | - 'AMap.CircleEditor', | |
171 | - 'AMap.PolyEditor', | |
172 | - 'AMap.VectorMap', | |
173 | - 'AMap.ToolBar', | |
174 | - 'AMap.Scale', | |
175 | - 'AMap.OverView', | |
176 | - 'AMap.MapType', | |
177 | - 'AMap.Geolocation'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等 | |
178 | - "AMapUI": { | |
179 | - "version": "1.1", | |
180 | - "plugins": [] | |
181 | - }, | |
182 | - Loca: { | |
183 | - version: '2.0' //数据可视化 | |
184 | - } | |
185 | - }).then((AMap)=>{ | |
186 | - console.log('打印AMap====>',AMap); | |
187 | - this.map = new AMap.Map('mapContainer', {//设置地图容器id | |
188 | - viewMode: '2D', //是否为3D地图模式 | |
189 | - zoom: 16, //初始化地图层级 | |
190 | - center: this.centerPoint,//初始化地图中心点 | |
191 | - }); | |
192 | - var toolBar = new AMap.ToolBar({ | |
193 | - position:{ | |
194 | - top:'110px', | |
195 | - right:'30px' | |
196 | - } | |
197 | - | |
198 | - }) | |
199 | - // this.map.on('rightclick', (e)=> { | |
200 | - // this.rightclickObj(); //定义右键内容 | |
201 | - // this.contextMenu.open(this.map, e.lnglat); | |
202 | - // this.contextMenuPositon = e.lnglat; //右键菜单位置 | |
203 | - // }); | |
204 | - var mouseTool = new AMap.MouseTool(this.map); | |
205 | - this.mouseTool = mouseTool; | |
206 | - }) | |
207 | - }, | |
208 | - //强调说明:自定义的dom是基于地图对象生成的,并不能像vue一样绑定事件,这里采用jQuery的方式出发的事件。如下 | |
209 | - //定义右键内容 | |
210 | - rightclickObj() { | |
211 | - let that = this; | |
212 | - //���义内容 | |
213 | - let content = []; | |
214 | - content.push("<div class='context_menu'>"); | |
215 | - content.push( | |
216 | - "<p class='menu-list menu-list-edit-start' >启用编辑</p>" | |
217 | - ); | |
218 | - content.push( | |
219 | - "<p class='menu-list menu-list-edit-end' >结束编辑</p>" | |
220 | - ); | |
221 | - content.push( | |
222 | - "<p class='menu-list menu-list-get-area' >计算面积</p>" | |
223 | - ); | |
224 | - content.push( | |
225 | - "<p class='menu-list menu-list-remove' >移除图形</p>" | |
226 | - ); | |
227 | - if (that.circleEditor) { | |
228 | - content.push( | |
229 | - "<p class='menu-list menu-list-radius'>半径</p>" | |
230 | - ); | |
231 | - } | |
232 | - content.push('</div>'); | |
233 | - //创建右键实例并添加自定义的内容 | |
234 | - | |
235 | - that.contextMenu = new AMap.ContextMenu({ | |
236 | - isCustom: true, | |
237 | - content: content.join('') | |
238 | - }); | |
239 | - }, | |
240 | - drawPolyline () { | |
241 | - this.mouseTool.polyline({ | |
242 | - strokeColor: "#3366FF", | |
243 | - strokeOpacity: 1, | |
244 | - strokeWeight: 6, | |
245 | - // 线样式还支持 'dashed' | |
246 | - strokeStyle: "solid", | |
247 | - // strokeStyle是dashed时有效 | |
248 | - // strokeDasharray: [10, 5], | |
249 | - }); | |
250 | - console.log('打印this.mouseTool',this.mouseTool) | |
251 | - this.mouseTool.on('draw', function(event) { | |
252 | - // event.obj 为绘制出来的覆盖物对象 | |
253 | - console.log('覆盖物对象绘制完成',event) | |
254 | - }) | |
137 | + initData(){ | |
138 | + this.getTreeNodeList(); | |
255 | 139 | }, |
256 | - drawPolygon () { | |
257 | - this.mouseTool.polygon({ | |
258 | - strokeColor: "#FF33FF", | |
259 | - // strokeOpacity: 1, | |
260 | - strokeWeight: 6, | |
261 | - strokeOpacity: 0.2, | |
262 | - fillColor: '#1791fc', | |
263 | - fillOpacity: 0.4, | |
264 | - // 线样式还支持 'dashed' | |
265 | - strokeStyle: "solid", | |
266 | - // strokeStyle是dashed时有效 | |
267 | - // strokeDasharray: [30,10], | |
268 | - }) | |
269 | - this.mouseTool.on('draw', function(event) { | |
270 | - let geoJSON = event.obj.getPath(); // 获取矢量图形的坐标数组 | |
271 | - // 为矢量图形设置唯一标识和zIndex | |
272 | - event.obj.setExtData({ uniqueId: 'id_' + new Date().getTime() }); | |
273 | - event.obj.setOptions({ zIndex: 100 }); | |
274 | - | |
275 | - // 其他矢量图形处理逻辑... | |
276 | - // event.obj 为绘制出来的覆盖物对象 | |
277 | - console.log('覆盖物对象绘制完成',event) | |
140 | + async getTreeNodeList(){ | |
141 | + await getTreeNode().then((res)=>{ | |
142 | + console.log('打印res',res); | |
143 | + this.treeData=[{ | |
144 | + ...res.value | |
145 | + }]; | |
146 | + console.log('打印this.treeDAta',this.treeData); | |
278 | 147 | }) |
279 | 148 | }, |
280 | - drawCircle () { | |
281 | - this.mouseTool.circle({ | |
282 | - strokeColor: "#FF33FF", | |
283 | - // strokeOpacity: 1, | |
284 | - strokeWeight: 6, | |
285 | - strokeOpacity: 0.2, | |
286 | - fillColor: '#1791fc', | |
287 | - fillOpacity: 0.4, | |
288 | - strokeStyle: 'solid', | |
289 | - // 线样式还支持 'dashed' | |
290 | - // strokeDasharray: [30,10], | |
291 | - }) | |
292 | - this.mouseTool.on('draw', function(event) { | |
293 | - let geoJSON = event.obj.getPath(); // 获取矢量图形的坐标数组 | |
294 | - // 为矢量图形设置唯一标识和zIndex | |
295 | - event.obj.setExtData({ uniqueId: 'id_' + new Date().getTime() }); | |
296 | - event.obj.setOptions({ zIndex: 100 }); | |
297 | - | |
298 | - // 其他矢量图形处理逻辑... | |
299 | - // event.obj 为绘制出来的覆盖物对象 | |
300 | - console.log('覆盖物对象绘制完成',event) | |
301 | - }) | |
149 | + filterNode(value, data) { | |
150 | + if (!value) return true; | |
151 | + return data.name.indexOf(value) !== -1; | |
302 | 152 | }, |
303 | - drawRectangle () { | |
304 | - this.mouseTool.rectangle({ | |
305 | - strokeColor:'red', | |
306 | - strokeOpacity:0.5, | |
307 | - strokeWeight: 6, | |
308 | - fillColor:'blue', | |
309 | - fillOpacity:0.5, | |
310 | - // strokeStyle还支持 solid | |
311 | - strokeStyle: 'solid', | |
312 | - // strokeDasharray: [30,10], | |
313 | - }) | |
314 | - this.mouseTool.on('draw', function(event) { | |
315 | - let geoJSON = event.obj.getPath(); // 获取矢量图形的坐标数组 | |
316 | - // 为矢量图形设置唯一标识和zIndex | |
317 | - event.obj.setExtData({ uniqueId: 'id_' + new Date().getTime() }); | |
318 | - event.obj.setOptions({ zIndex: 100 }); | |
319 | - | |
320 | - // 其他矢量图形处理逻辑... | |
321 | - // event.obj 为绘制出来的覆盖物对象 | |
322 | - console.log('覆盖物对象绘制完成',event) | |
323 | - }) | |
324 | - }, | |
325 | - getUserLocation() { | |
326 | - }, | |
327 | - queryStores() { | |
328 | - }, | |
329 | - handleQuery(){ | |
330 | - console.log('打印是否出发查询功能'); | |
331 | - }, | |
332 | - handleReset(){ | |
333 | - console.log('打印是否触发重置功能'); | |
334 | - this.queryParams= { | |
335 | - regionalName: '', | |
336 | - regionalType: '' | |
337 | - } | |
338 | - }, | |
339 | - hanleOpt(type,row){ | |
340 | - switch (type){ | |
341 | - case 'add': | |
342 | - this.dialogParams.dialogVisible = true; | |
343 | - this.$nextTick(()=>{ | |
344 | - this.initializeMap(); | |
345 | - }) | |
346 | - break; | |
347 | - case 'edit': | |
348 | - break; | |
153 | + //el-tree节点的点击事件 | |
154 | + handleNodeClick(data,node){ | |
155 | + console.log('打印') | |
156 | + if(data.lx == '厂站'){ | |
157 | + this.rowData.fSsczid = data.id; | |
158 | + }else{ | |
159 | + this.rowData.fSsczid = ''; | |
349 | 160 | } |
350 | - console.log('打印是否触发新增功能'); | |
161 | + this.queryForm.orgId = data.id; | |
162 | + this.rowData.orgId = data.id; | |
163 | + let refName = this.infoComponentsList.filter((item)=>item.key == this.queryForm.tabType)[0].component; | |
164 | + this.$nextTick(()=>{ | |
165 | + console.log('打印this.$refs',this.$refs[refName][0]); | |
166 | + this.$refs[refName][0].handleSearch(); | |
167 | + }) | |
168 | + console.log('打印data',data); | |
169 | + console.log('打印node',node) | |
351 | 170 | }, |
352 | - handleDialogClose(){ | |
353 | - this.dialogParams.dialogVisible = false; | |
354 | 171 | |
355 | - }, | |
356 | 172 | } |
357 | 173 | } |
358 | 174 | </script> |
359 | 175 | |
360 | 176 | <style lang="scss" scoped> |
361 | -.regionalSty{ | |
177 | +.container{ | |
178 | + display: flex; | |
179 | + width: 100%; | |
362 | 180 | height: 100%; |
363 | - //width: 100%; | |
364 | - background: #ffffff; | |
365 | - border-radius: 5px; | |
366 | - padding: 20px; | |
367 | - .searchSty{ | |
368 | - | |
181 | + .container-left{ | |
182 | + height: 96%; | |
183 | + overflow: auto; | |
184 | + min-width: 220px; | |
185 | + max-width: 220px; | |
186 | + padding: 10px; | |
187 | + background-color: #FFFFFF; | |
188 | + border-radius: 3px; | |
189 | + .title-label{ | |
190 | + font-family: '苹方 中等', '苹方', sans-serif; | |
191 | + font-weight: 400; | |
192 | + font-style: normal; | |
193 | + font-size: 16px; | |
194 | + text-align: left; | |
195 | + margin-bottom: 5px; | |
196 | + } | |
197 | + .title-content{ | |
198 | + font-family: '苹方 中等', '苹方', sans-serif; | |
199 | + font-weight: 400; | |
200 | + font-style: normal; | |
201 | + font-size: 12px; | |
202 | + color: #999999; | |
203 | + margin-bottom: 10px; | |
204 | + } | |
205 | + .filter-tree{ | |
206 | + ::v-deep.el-tree-node__expand-icon.expanded { | |
207 | + /* 修改为你想要的图标 */ | |
208 | + color:#5875eb; | |
209 | + } | |
210 | + ::v-deep.el-tree-node__expand-icon.collapsed { | |
211 | + /* 修改为你想要的图标 */ | |
212 | + color:blue; | |
213 | + } | |
214 | + .node-label{ | |
215 | + overflow: hidden; | |
216 | + text-overflow: ellipsis; | |
217 | + white-space: nowrap; | |
218 | + } | |
219 | + } | |
220 | + } | |
221 | + .container-right{ | |
222 | + //flex: 1; | |
223 | + height:96%; | |
224 | + margin-left: 10px; | |
225 | + //padding: 10px; | |
226 | + border-radius: 3px; | |
227 | + width: calc(100% - 235px); | |
228 | + background-color: #ffffff; | |
229 | + padding: 10px; | |
230 | + .container-right-head{ | |
231 | + //padding: 10px; | |
232 | + } | |
233 | + .container-right-main{ | |
234 | + overflow: auto; | |
235 | + margin-top: 10px; | |
236 | + height: calc(100% - 42px); | |
237 | + width: 100%; | |
238 | + //overflow: auto; | |
239 | + //background-color: #FFFFFF; | |
240 | + } | |
369 | 241 | } |
370 | 242 | } |
371 | 243 | |
372 | 244 | </style> |
245 | + | |
246 | + | ... | ... |