【无】 【组件】Vue组件开发:文本框下拉树展示菜单--对比分析保存选择菜单\设计器新增选择菜单
Showing
6 changed files
with
146 additions
and
47 deletions
hg-monitor-web-base/src/main/resources/static/vue3/src/components/common/treeSelectMenu/index.html
0 → 100644
1 | +<el-tree-select | ||
2 | + :filterable="filterable" | ||
3 | + :size="$global.elementConfig.size.input" | ||
4 | + node-key="nodeKey" | ||
5 | + :placeholder="placeholderText" | ||
6 | + :props="defaultProps" | ||
7 | + v-model="value" | ||
8 | + :data="data" | ||
9 | + @change="change" | ||
10 | + check-strictly | ||
11 | + :render-after-expand="false" | ||
12 | +> | ||
13 | + <template #default="{ node, data }"> | ||
14 | +<!-- //lsq 菜单类型,1:监控菜单,2:巡检菜单,3:个人工作台,4:系统菜单,5:跳转菜单,6:报表菜单 可以删除和编辑 2022-08-26--> | ||
15 | + <el-tag v-if="isTag" style="height: 18px;margin-right:6px;"> | ||
16 | + {{getTypeName(data.type)}}</el-tag> | ||
17 | + <span>{{ node.label }}</span> | ||
18 | + </template> | ||
19 | +</el-tree-select> |
hg-monitor-web-base/src/main/resources/static/vue3/src/components/common/treeSelectMenu/index.js
0 → 100644
1 | +/** | ||
2 | + * 下拉树组件 | ||
3 | + */ | ||
4 | +export default { | ||
5 | + name: 'treeSelect', | ||
6 | + template: '', | ||
7 | + components: {}, | ||
8 | + props: { | ||
9 | + | ||
10 | + // 选中的值 | ||
11 | + value: { | ||
12 | + type: String, | ||
13 | + default: '' | ||
14 | + }, | ||
15 | + // 数据 | ||
16 | + data: { | ||
17 | + type: Array, | ||
18 | + default: [] | ||
19 | + }, | ||
20 | + //显示的提示语 | ||
21 | + placeholderText:{ | ||
22 | + type: String, | ||
23 | + default: '请选择' | ||
24 | + }, | ||
25 | + //指定标签,子树节点 | ||
26 | + defaultProps:{ | ||
27 | + type:Object, | ||
28 | + default:{ | ||
29 | + children: 'subMenus', | ||
30 | + label: 'name', | ||
31 | + value: 'id' | ||
32 | + } | ||
33 | + }, | ||
34 | + //唯一标识 | ||
35 | + nodeKey:{ | ||
36 | + type: String, | ||
37 | + default: 'id' | ||
38 | + }, | ||
39 | + //是否有标签 | ||
40 | + isTag:{ | ||
41 | + type:Boolean, | ||
42 | + default:false | ||
43 | + }, | ||
44 | + //是否可搜索 | ||
45 | + filterable:{ | ||
46 | + type:Boolean, | ||
47 | + default:false | ||
48 | + } | ||
49 | + | ||
50 | + }, | ||
51 | + data() { | ||
52 | + return {} | ||
53 | + }, | ||
54 | + setup(props, {attrs, slots, emit}) { | ||
55 | + const {proxy} = Vue.getCurrentInstance(); | ||
56 | + let data=Vue.ref([]); | ||
57 | + let change=(val)=>{ | ||
58 | + emit("changeSelect",val) | ||
59 | + } | ||
60 | + //获取菜单类型 | ||
61 | + let getTypeName=(type)=>{ | ||
62 | + switch (type) { | ||
63 | + case 1: | ||
64 | + return '监控菜单'; | ||
65 | + case 2: | ||
66 | + return '巡检菜单'; | ||
67 | + case 3: | ||
68 | + return '个人工作台'; | ||
69 | + case 4: | ||
70 | + return '系统菜单'; | ||
71 | + case 5: | ||
72 | + return '跳转菜单'; | ||
73 | + case 6: | ||
74 | + return '报表菜单'; | ||
75 | + case 7: | ||
76 | + return '资产菜单'; | ||
77 | + default: | ||
78 | + return ''; | ||
79 | + } | ||
80 | + } | ||
81 | + let init=()=>{ | ||
82 | + //lsq 菜单树数据 2022-09-05 | ||
83 | + proxy.$http.get(`/api-user/menus/current`, {type: 1}, function (res) { | ||
84 | + if(res && res.data){ | ||
85 | + data.value = res.data; | ||
86 | + } | ||
87 | + }) | ||
88 | + } | ||
89 | + // 监听编辑状态 | ||
90 | + Vue.watch(() => props.value, (newValue, oldVlaue) => { | ||
91 | + // 编辑 | ||
92 | + }); | ||
93 | + // 挂载完 | ||
94 | + Vue.onMounted(() => { | ||
95 | + init() | ||
96 | + }) | ||
97 | + return { | ||
98 | + data, | ||
99 | + change, | ||
100 | + getTypeName, | ||
101 | + init | ||
102 | + } | ||
103 | + } | ||
104 | +} |
@@ -103,21 +103,10 @@ | @@ -103,21 +103,10 @@ | ||
103 | 103 | ||
104 | 104 | ||
105 | <el-form-item label="父菜单" prop="menuPid" v-if="ajConfigFrom.type==0"> | 105 | <el-form-item label="父菜单" prop="menuPid" v-if="ajConfigFrom.type==0"> |
106 | - <el-select :reserve-keyword="false" | ||
107 | - :size="$global.elementConfig.size.input" | ||
108 | - allow-create | ||
109 | - default-first-option | ||
110 | - filterable | ||
111 | - placeholder="请选择" | ||
112 | - style="width: 100%;" v-model="ajConfigFrom.menuPid"> | ||
113 | - <el-option | ||
114 | - :disabled="item.disabled" | ||
115 | - :key="item.value" | ||
116 | - :label="item.label" | ||
117 | - :value="item.value" | ||
118 | - v-for="item in menuOptions"> | ||
119 | - </el-option> | ||
120 | - </el-select> | 106 | + <!--lsq 引入菜单树公共组件 2022-09-05--> |
107 | + <cm-tree-select-menu style="width: 80%" @changeSelect="dataFilter" :filterable="true" | ||
108 | + :value="ajConfigFrom.menuPid" :placeholderText="'请选择菜单'" :isTag="true"></cm-tree-select-menu> | ||
109 | + | ||
121 | </el-form-item> | 110 | </el-form-item> |
122 | 111 | ||
123 | <el-form-item label="菜单名称" prop="menuName" v-if="ajConfigFrom.type==0"> | 112 | <el-form-item label="菜单名称" prop="menuName" v-if="ajConfigFrom.type==0"> |
@@ -206,8 +206,6 @@ export default { | @@ -206,8 +206,6 @@ export default { | ||
206 | let radio = Vue.ref(0); | 206 | let radio = Vue.ref(0); |
207 | //下拉框 | 207 | //下拉框 |
208 | let options = Vue.ref([]); | 208 | let options = Vue.ref([]); |
209 | - //菜单下拉框 | ||
210 | - let menuOptions = Vue.ref([]); | ||
211 | let search = Vue.ref({ | 209 | let search = Vue.ref({ |
212 | keyword: '', | 210 | keyword: '', |
213 | type: '', | 211 | type: '', |
@@ -250,7 +248,6 @@ export default { | @@ -250,7 +248,6 @@ export default { | ||
250 | clearForm(); | 248 | clearForm(); |
251 | cacheVisible.value = true; | 249 | cacheVisible.value = true; |
252 | pageList(); | 250 | pageList(); |
253 | - menuList(); | ||
254 | 251 | ||
255 | } | 252 | } |
256 | //新增或修改aj配置信息 | 253 | //新增或修改aj配置信息 |
@@ -329,7 +326,6 @@ export default { | @@ -329,7 +326,6 @@ export default { | ||
329 | cacheVisible.value = true; | 326 | cacheVisible.value = true; |
330 | disabled.value = true; | 327 | disabled.value = true; |
331 | pageList(); | 328 | pageList(); |
332 | - menuList(); | ||
333 | } | 329 | } |
334 | 330 | ||
335 | //预览 | 331 | //预览 |
@@ -357,21 +353,6 @@ export default { | @@ -357,21 +353,6 @@ export default { | ||
357 | }) | 353 | }) |
358 | } | 354 | } |
359 | 355 | ||
360 | - //菜单 | ||
361 | - let menuList = () => { | ||
362 | - proxy.$http.get(`/api-user/menus/findAlls`, null, function (res) { | ||
363 | - if (res && res.count > 0) { | ||
364 | - let params = res.data; | ||
365 | - params.forEach(function (e) { | ||
366 | - let menu = {} | ||
367 | - menu.label = e.name; | ||
368 | - menu.value = e.id; | ||
369 | - menuOptions.value.push(menu) | ||
370 | - }); | ||
371 | - } | ||
372 | - }) | ||
373 | - | ||
374 | - } | ||
375 | //AJ设计登录 | 356 | //AJ设计登录 |
376 | let handleView = () => { | 357 | let handleView = () => { |
377 | window.open(sessionStorage.getItem("ajWeb") + '/#/login?access_token=' + localStorage.getItem("access_token")); | 358 | window.open(sessionStorage.getItem("ajWeb") + '/#/login?access_token=' + localStorage.getItem("access_token")); |
@@ -456,7 +437,10 @@ export default { | @@ -456,7 +437,10 @@ export default { | ||
456 | ddicOS.value = res.data; | 437 | ddicOS.value = res.data; |
457 | } | 438 | } |
458 | }); | 439 | }); |
459 | - | 440 | + //lsq 菜单树change事件 |
441 | + let dataFilter = (val) => { | ||
442 | + ajConfigFrom.value.menuPid = val; | ||
443 | + } | ||
460 | return { | 444 | return { |
461 | ddicProvider, | 445 | ddicProvider, |
462 | ddicOS, | 446 | ddicOS, |
@@ -484,8 +468,6 @@ export default { | @@ -484,8 +468,6 @@ export default { | ||
484 | pageList, | 468 | pageList, |
485 | radio, | 469 | radio, |
486 | options, | 470 | options, |
487 | - menuList, | ||
488 | - menuOptions, | ||
489 | getResType, | 471 | getResType, |
490 | configs, | 472 | configs, |
491 | typeOptions, | 473 | typeOptions, |
@@ -494,7 +476,8 @@ export default { | @@ -494,7 +476,8 @@ export default { | ||
494 | butColumns, | 476 | butColumns, |
495 | detailColumns, | 477 | detailColumns, |
496 | couponSelected, | 478 | couponSelected, |
497 | - disabled | 479 | + disabled, |
480 | + dataFilter | ||
498 | } | 481 | } |
499 | } | 482 | } |
500 | 483 |
@@ -152,10 +152,12 @@ | @@ -152,10 +152,12 @@ | ||
152 | </div> | 152 | </div> |
153 | <div style="padding: 3px 10px 3px 39px" v-if="!isAdd "> | 153 | <div style="padding: 3px 10px 3px 39px" v-if="!isAdd "> |
154 | <span class="saab"> 菜单:</span> | 154 | <span class="saab"> 菜单:</span> |
155 | - <el-select :size="$global.elementConfig.size.input" @change="dataFilter" filterable | 155 | + <!-- <el-select :size="$global.elementConfig.size.input" @change="dataFilter" filterable |
156 | placeholder="请选择菜单" style="width: 80%" v-model="form.addFirstPId"> | 156 | placeholder="请选择菜单" style="width: 80%" v-model="form.addFirstPId"> |
157 | <el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in firstMenu"/> | 157 | <el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in firstMenu"/> |
158 | - </el-select> | 158 | + </el-select>--> |
159 | + <cm-tree-select-menu style="width: 80%" :size="$global.elementConfig.size.input" @changeSelect="dataFilter" | ||
160 | + :value="form.addFirstPId" :placeholderText="'请选择菜单'" :isTag="true"></cm-tree-select-menu> | ||
159 | </div> | 161 | </div> |
160 | <div style="padding: 3px 10px;" v-if="!isAdd "> | 162 | <div style="padding: 3px 10px;" v-if="!isAdd "> |
161 | <span class="saab"> 场景分类:</span> | 163 | <span class="saab"> 场景分类:</span> |
@@ -159,7 +159,7 @@ export default { | @@ -159,7 +159,7 @@ export default { | ||
159 | let countFirst = Vue.ref(0); | 159 | let countFirst = Vue.ref(0); |
160 | 160 | ||
161 | let form = Vue.ref({ | 161 | let form = Vue.ref({ |
162 | - addFirstPId: '', | 162 | + addFirstPId: '100130900', |
163 | parentId: '', | 163 | parentId: '', |
164 | parentName: '', | 164 | parentName: '', |
165 | desc: '', | 165 | desc: '', |
@@ -305,14 +305,15 @@ export default { | @@ -305,14 +305,15 @@ export default { | ||
305 | 305 | ||
306 | //根菜单选择事件 | 306 | //根菜单选择事件 |
307 | let dataFilter = (val) => { | 307 | let dataFilter = (val) => { |
308 | + form.value.addFirstPId=val; | ||
308 | if (val) { //val存在 | 309 | if (val) { //val存在 |
309 | - this.options = this.firstMenu.filter((item) => { | ||
310 | - if (!!~item.label.indexOf(val) || !!~item.label.toUpperCase().indexOf(val.toUpperCase())) { | 310 | + firstMenu.value.filter((item) => { |
311 | + if (!!~item.id.indexOf(val) || !!~item.id.toUpperCase().indexOf(val.toUpperCase())) { | ||
311 | return true | 312 | return true |
312 | } | 313 | } |
313 | }) | 314 | }) |
314 | } else { //val为空时,还原数组 | 315 | } else { //val为空时,还原数组 |
315 | - this.options = this.firstMenu; | 316 | + // this.options = firstMenu.value; |
316 | } | 317 | } |
317 | } | 318 | } |
318 | 319 | ||
@@ -552,6 +553,7 @@ export default { | @@ -552,6 +553,7 @@ export default { | ||
552 | let resTypeList = Vue.ref([]); | 553 | let resTypeList = Vue.ref([]); |
553 | let kpiList = Vue.ref([]); | 554 | let kpiList = Vue.ref([]); |
554 | let busTypeList = Vue.ref([]); | 555 | let busTypeList = Vue.ref([]); |
556 | + | ||
555 | let init = () => { | 557 | let init = () => { |
556 | /* | 558 | /* |
557 | proxy.$http.get("/api-web/home/resType/getTree?typeParentFlag=1", {}, function(res) { | 559 | proxy.$http.get("/api-web/home/resType/getTree?typeParentFlag=1", {}, function(res) { |
@@ -586,7 +588,7 @@ export default { | @@ -586,7 +588,7 @@ export default { | ||
586 | 588 | ||
587 | 589 | ||
588 | //LH 加载新增树菜单 | 590 | //LH 加载新增树菜单 |
589 | - proxy.$http.get(`/api-web/ContrastAnalysis/getRootMenu`, {menuName: ''}, function (res) { | 591 | + /*proxy.$http.get(`/api-web/ContrastAnalysis/getRootMenu`, {menuName: ''}, function (res) { |
590 | if (res.length > 0) { | 592 | if (res.length > 0) { |
591 | firstMenu.value = res; | 593 | firstMenu.value = res; |
592 | firstMenu.value.forEach(function (item, index) { | 594 | firstMenu.value.forEach(function (item, index) { |
@@ -596,7 +598,7 @@ export default { | @@ -596,7 +598,7 @@ export default { | ||
596 | } | 598 | } |
597 | }); | 599 | }); |
598 | } | 600 | } |
599 | - }); | 601 | + });*/ |
600 | //LH | 602 | //LH |
601 | setTimeout(function () { | 603 | setTimeout(function () { |
602 | let arrs = timeRangeArr.value | 604 | let arrs = timeRangeArr.value |
@@ -693,7 +695,7 @@ export default { | @@ -693,7 +695,7 @@ export default { | ||
693 | firstMenu,//菜单 | 695 | firstMenu,//菜单 |
694 | getChartData, | 696 | getChartData, |
695 | count, | 697 | count, |
696 | - countFirst | 698 | + countFirst, |
697 | } | 699 | } |
698 | } | 700 | } |
699 | } | 701 | } |
-
Please register or login to post a comment