菜单增加排序功能
Showing
7 changed files
with
182 additions
and
29 deletions
... | @@ -59,8 +59,12 @@ | ... | @@ -59,8 +59,12 @@ |
59 | padding: 0 7px !important; | 59 | padding: 0 7px !important; |
60 | } | 60 | } |
61 | 61 | ||
62 | |||
63 | |||
62 | // 查询表单样式 | 64 | // 查询表单样式 |
63 | .from-clues { | 65 | .from-clues { |
66 | |||
67 | |||
64 | height: 100%; | 68 | height: 100%; |
65 | width: 100%; | 69 | width: 100%; |
66 | // min-width: 1280px; | 70 | // min-width: 1280px; |
... | @@ -80,6 +84,14 @@ | ... | @@ -80,6 +84,14 @@ |
80 | color: #E3F1FF; | 84 | color: #E3F1FF; |
81 | } | 85 | } |
82 | 86 | ||
87 | |||
88 | |||
89 | /deep/.el-icon-arrow-right { | ||
90 | color: rgb(228, 20, 20) !important; | ||
91 | } | ||
92 | |||
93 | |||
94 | |||
83 | .el-input__inner { | 95 | .el-input__inner { |
84 | background: #07388B; | 96 | background: #07388B; |
85 | border-radius: 2px; | 97 | border-radius: 2px; |
... | @@ -183,7 +195,10 @@ | ... | @@ -183,7 +195,10 @@ |
183 | } | 195 | } |
184 | } | 196 | } |
185 | 197 | ||
198 | .el-table__expand-icon { | ||
199 | color: #8DEAF9; | ||
186 | 200 | ||
201 | } | ||
187 | 202 | ||
188 | .el-form-item--small.el-form-item { | 203 | .el-form-item--small.el-form-item { |
189 | margin-bottom: 0px; | 204 | margin-bottom: 0px; |
... | @@ -381,12 +396,12 @@ | ... | @@ -381,12 +396,12 @@ |
381 | color: #CEF8FF; | 396 | color: #CEF8FF; |
382 | } | 397 | } |
383 | 398 | ||
384 | .el-icon-arrow-right { | 399 | // .el-icon-arrow-right { |
385 | width: 2px; | 400 | // width: 2px; |
386 | position: relative; | 401 | // position: relative; |
387 | left: 10px; | 402 | // left: 10px; |
388 | color: #FFFFFF; | 403 | // color: #FFFFFF; |
389 | } | 404 | // } |
390 | 405 | ||
391 | .el-breadcrumb__inner { | 406 | .el-breadcrumb__inner { |
392 | color: #CEF8FF !important; | 407 | color: #CEF8FF !important; |
... | @@ -748,9 +763,13 @@ | ... | @@ -748,9 +763,13 @@ |
748 | } | 763 | } |
749 | 764 | ||
750 | .from-clues-content { | 765 | .from-clues-content { |
766 | |||
767 | |||
751 | margin-top: 0; | 768 | margin-top: 0; |
752 | background: none; | 769 | background: none; |
753 | padding: 0; | 770 | padding: 0; |
771 | |||
772 | |||
754 | } | 773 | } |
755 | 774 | ||
756 | .editDialogBox-box { | 775 | .editDialogBox-box { | ... | ... |
... | @@ -9,6 +9,7 @@ | ... | @@ -9,6 +9,7 @@ |
9 | } | 9 | } |
10 | 10 | ||
11 | 11 | ||
12 | |||
12 | .from-clues { | 13 | .from-clues { |
13 | // height: 100%; | 14 | // height: 100%; |
14 | width: 100%; | 15 | width: 100%; |
... | @@ -42,6 +43,12 @@ | ... | @@ -42,6 +43,12 @@ |
42 | width: 100%; | 43 | width: 100%; |
43 | } | 44 | } |
44 | 45 | ||
46 | .from-clues-content { | ||
47 | .el-table__expand-icon { | ||
48 | color: rgb(0, 0, 0); | ||
49 | } | ||
50 | } | ||
51 | |||
45 | .el-form--inline .el-form-item { | 52 | .el-form--inline .el-form-item { |
46 | width: auto; | 53 | width: auto; |
47 | margin-right: 0px; | 54 | margin-right: 0px; |
... | @@ -198,9 +205,9 @@ | ... | @@ -198,9 +205,9 @@ |
198 | // } | 205 | // } |
199 | 206 | ||
200 | .el-icon-arrow-right { | 207 | .el-icon-arrow-right { |
201 | width: 2px; | 208 | // width: 2px; |
202 | position: relative; | 209 | // position: relative; |
203 | left: 10px; | 210 | // left: 10px; |
204 | } | 211 | } |
205 | 212 | ||
206 | .el-breadcrumb__inner { | 213 | .el-breadcrumb__inner { |
... | @@ -356,6 +363,8 @@ | ... | @@ -356,6 +363,8 @@ |
356 | margin-top: 0; | 363 | margin-top: 0; |
357 | background: none; | 364 | background: none; |
358 | padding: 0; | 365 | padding: 0; |
366 | |||
367 | |||
359 | } | 368 | } |
360 | 369 | ||
361 | .editDialogBox-box { | 370 | .editDialogBox-box { |
... | @@ -704,6 +713,10 @@ | ... | @@ -704,6 +713,10 @@ |
704 | } | 713 | } |
705 | } | 714 | } |
706 | 715 | ||
716 | .el-form-item { | ||
717 | display: flex; | ||
718 | } | ||
719 | |||
707 | .el-input__inner { | 720 | .el-input__inner { |
708 | // background-color: #07388b; | 721 | // background-color: #07388b; |
709 | } | 722 | } | ... | ... |
1 | <template> | 1 | <template> |
2 | <div class="timedTask from-clues"> | 2 | <div class="from-clues"> |
3 | <div class="from-clues-header"> | 3 | <div class="from-clues-header"> |
4 | <el-form ref="ruleForm" :model="form" label-width="100px"> | 4 | <el-form ref="ruleForm" :model="form" label-width="100px"> |
5 | <el-form-item v-if="BASE_API.THEME=='jg'"> | 5 | <el-form-item v-if="BASE_API.THEME=='jg'"> | ... | ... |
1 | <template> | 1 | <template> |
2 | <div class="timedTask from-clues"> | 2 | <div class="from-clues"> |
3 | <div class="from-clues-header"> | 3 | <div class="from-clues-header"> |
4 | <el-form ref="ruleForm" :model="form" label-width="100px"> | 4 | <el-form ref="ruleForm" :model="form" label-width="100px"> |
5 | <el-form-item v-if="BASE_API.THEME=='jg'"> | 5 | <el-form-item v-if="BASE_API.THEME=='jg'"> |
... | @@ -31,16 +31,13 @@ | ... | @@ -31,16 +31,13 @@ |
31 | <script> | 31 | <script> |
32 | // 定时任务 | 32 | // 定时任务 |
33 | import data from "./data"; | 33 | import data from "./data"; |
34 | import { deleteAction, getAction, api } from "@/api/manageApi"; | 34 | import { deleteAction, getAction, api, httpAction } from "@/api/manageApi"; |
35 | import EditDialog from "./edit-dialog.vue"; | 35 | import EditDialog from "./edit-dialog.vue"; |
36 | import { mapGetters } from "vuex"; | 36 | import { mapGetters } from "vuex"; |
37 | import { getMenuInfo } from "@/api/user"; | 37 | import { getMenuInfo } from "@/api/user"; |
38 | import { updateOrder } from "@/api/orders" | ||
38 | import { | 39 | import { |
39 | getUuid, | 40 | judgeSort |
40 | judgeSort, | ||
41 | realMove, | ||
42 | findParents, | ||
43 | removeTreeListItem, | ||
44 | } from "@/utils/operation"; | 41 | } from "@/utils/operation"; |
45 | export default { | 42 | export default { |
46 | name: "menus", | 43 | name: "menus", |
... | @@ -69,7 +66,60 @@ | ... | @@ -69,7 +66,60 @@ |
69 | 66 | ||
70 | selectionList: [], | 67 | selectionList: [], |
71 | tableData: { | 68 | tableData: { |
72 | columns: [].concat(data.columns()).concat([ | 69 | columns: [] |
70 | .concat(data.columns()) | ||
71 | .concat([ | ||
72 | { | ||
73 | label: "排序", | ||
74 | width: 300, | ||
75 | render: (h, scope) => { | ||
76 | return ( | ||
77 | <div> | ||
78 | <el-button | ||
79 | type="text" | ||
80 | class='movebtnColor' | ||
81 | disabled={scope.row.isTop} | ||
82 | onClick={() => { | ||
83 | this.moveUp(scope.row, 'TOP') | ||
84 | }} | ||
85 | > | ||
86 | 置顶 | ||
87 | </el-button> | ||
88 | <el-button | ||
89 | type="text" | ||
90 | class='movebtnColor' | ||
91 | disabled={scope.row.isTop} | ||
92 | onClick={() => { | ||
93 | this.moveUp(scope.row, 'UP'); | ||
94 | }} | ||
95 | > | ||
96 | 上移 | ||
97 | </el-button> | ||
98 | <el-button | ||
99 | type="text" | ||
100 | class='movebtnColor' | ||
101 | disabled={scope.row.isBottom} | ||
102 | onClick={() => { | ||
103 | this.moveDown(scope.row, 'DOWN'); | ||
104 | }} | ||
105 | > | ||
106 | 下移 | ||
107 | </el-button> | ||
108 | <el-button | ||
109 | type="text" | ||
110 | class='movebtnColor' | ||
111 | disabled={scope.row.isBottom} | ||
112 | onClick={() => { | ||
113 | this.moveDown(scope.row, 'BOTTOM'); | ||
114 | }} | ||
115 | > | ||
116 | 置底 | ||
117 | </el-button> | ||
118 | </div> | ||
119 | ); | ||
120 | }, | ||
121 | }, | ||
122 | ]).concat([ | ||
73 | { | 123 | { |
74 | label: "操作", | 124 | label: "操作", |
75 | width: 380, | 125 | width: 380, |
... | @@ -104,7 +154,7 @@ | ... | @@ -104,7 +154,7 @@ |
104 | }, | 154 | }, |
105 | tableUrl: api.menus, // 菜单接口地址 | 155 | tableUrl: api.menus, // 菜单接口地址 |
106 | meumurlid: api.subsystem,// 项目id接口地址 | 156 | meumurlid: api.subsystem,// 项目id接口地址 |
107 | productId: ""//项目id | 157 | productId: "",//项目id |
108 | }; | 158 | }; |
109 | }, | 159 | }, |
110 | created () { | 160 | created () { |
... | @@ -153,7 +203,6 @@ | ... | @@ -153,7 +203,6 @@ |
153 | // 加载表格数据 | 203 | // 加载表格数据 |
154 | getTableList () { | 204 | getTableList () { |
155 | getMenuInfo(this.BASE_API.CODE).then((res) => { | 205 | getMenuInfo(this.BASE_API.CODE).then((res) => { |
156 | console.log("/sthj", res); | ||
157 | if (res.code === 200) { | 206 | if (res.code === 200) { |
158 | this.tablelistData = judgeSort(res.result) | 207 | this.tablelistData = judgeSort(res.result) |
159 | this.listData = this.tablelistData | 208 | this.listData = this.tablelistData |
... | @@ -180,8 +229,7 @@ | ... | @@ -180,8 +229,7 @@ |
180 | getAction(this.meumurlid, params) | 229 | getAction(this.meumurlid, params) |
181 | .then((res) => { | 230 | .then((res) => { |
182 | this.productId = res.content[0].id; | 231 | this.productId = res.content[0].id; |
183 | this.getAuthorityList(res.content[0].id, res.content[0].code) | 232 | // this.selectedSubsystemCode = res.content[0].code |
184 | this.selectedSubsystemCode = res.content[0].code | ||
185 | 233 | ||
186 | }) | 234 | }) |
187 | .catch((error) => { | 235 | .catch((error) => { |
... | @@ -245,6 +293,83 @@ | ... | @@ -245,6 +293,83 @@ |
245 | reloadTableData () { | 293 | reloadTableData () { |
246 | this.getTableList() | 294 | this.getTableList() |
247 | }, | 295 | }, |
296 | |||
297 | // 排序 | ||
298 | moveUp (row, operate) { | ||
299 | if (row.isTop) { | ||
300 | return; | ||
301 | } else { | ||
302 | this.realMove(row, operate); | ||
303 | } | ||
304 | }, | ||
305 | moveDown (row, operate) { | ||
306 | if (row.isBottom) { | ||
307 | return; | ||
308 | } else { | ||
309 | this.realMove(row, operate); | ||
310 | } | ||
311 | }, | ||
312 | |||
313 | //树形表格移动 | ||
314 | realMove (row, operate) { | ||
315 | function tarverse (nodes, id) { | ||
316 | let result; | ||
317 | for (let i = 0; i < nodes.length; i++) { | ||
318 | if (nodes[i].children && nodes[i].children.length > 0) { | ||
319 | result = tarverse(nodes[i].children, id); | ||
320 | } | ||
321 | if (nodes[i].id == id) { | ||
322 | if (operate === 'UP') { | ||
323 | result = nodes[i - 1].id; | ||
324 | } else if (operate === 'DOWN') { | ||
325 | result = nodes[i + 1].id; | ||
326 | } | ||
327 | return result; | ||
328 | } | ||
329 | |||
330 | if (result) return result; | ||
331 | } | ||
332 | return result | ||
333 | } | ||
334 | |||
335 | this.$nextTick(() => { | ||
336 | updateOrder('/rest/menus', row, operate, tarverse(this.tablelistData, row.id)).then(res => { | ||
337 | if (res.status === 1) { | ||
338 | this.getTableList() | ||
339 | this.$message.success({ message: res.message, showClose: true }) | ||
340 | } else { | ||
341 | this.$message.error({ message: res.message, showClose: true }) | ||
342 | } | ||
343 | }) | ||
344 | this.tablelistData = judgeSort(this.tablelistData || []); | ||
345 | }) | ||
346 | // this.tablelistData = changeSort(this.tablelistData, row.id); | ||
347 | // function changeSort (arr, id) { | ||
348 | // if (arr.length) { | ||
349 | // let flag = false; | ||
350 | // for (let i in arr) { | ||
351 | // if (arr[i].id == id) { | ||
352 | // if (operate === "UP") { | ||
353 | // arr[i] = arr.splice(i - 1, 1, arr[i])[0]; | ||
354 | // } else if (operate === "DOWN") { | ||
355 | // let temp = arr.splice(i - 0 + 1, 1, arr[i]) | ||
356 | // arr[i] = temp[0]; | ||
357 | // } else if (operate === "TOP") { | ||
358 | // arr.unshift(arr.splice(i, 1)[0]); | ||
359 | // } else if (operate === "BOTTOM") { | ||
360 | // arr.push(arr.splice(i, 1)[0]); | ||
361 | // } | ||
362 | // flag = true; | ||
363 | // break; | ||
364 | // } | ||
365 | // if (!flag && arr[i].children && arr[i].children.length) { | ||
366 | // arr[i].children = changeSort(arr[i].children, id); | ||
367 | // } | ||
368 | // } | ||
369 | // } | ||
370 | // return arr; | ||
371 | // } | ||
372 | } | ||
248 | }, | 373 | }, |
249 | }; | 374 | }; |
250 | </script> | 375 | </script> |
... | @@ -252,8 +377,4 @@ | ... | @@ -252,8 +377,4 @@ |
252 | @import "~@/styles/mixin.scss"; | 377 | @import "~@/styles/mixin.scss"; |
253 | 378 | ||
254 | // @import "~@/styles/public.scss"; | 379 | // @import "~@/styles/public.scss"; |
255 | |||
256 | /deep/.el-table__expand-icon { | ||
257 | color: #fff; | ||
258 | } | ||
259 | </style> | 380 | </style> | ... | ... |
1 | <template> | 1 | <template> |
2 | <div class="timedTask from-clues"> | 2 | <div class="from-clues"> |
3 | <div class="from-clues-header"> | 3 | <div class="from-clues-header"> |
4 | <el-form ref="ruleForm" :model="form" label-width="100px"> | 4 | <el-form ref="ruleForm" :model="form" label-width="100px"> |
5 | <el-form-item v-if="BASE_API.THEME == 'jg'"> | 5 | <el-form-item v-if="BASE_API.THEME == 'jg'"> | ... | ... |
1 | <template> | 1 | <template> |
2 | <div class="timedTask from-clues"> | 2 | <div class="from-clues"> |
3 | <div class="from-clues-header"> | 3 | <div class="from-clues-header"> |
4 | <el-form ref="form" :model="form" label-width="80px"> | 4 | <el-form ref="form" :model="form" label-width="80px"> |
5 | <el-form-item v-if="BASE_API.THEME == 'jg'"> | 5 | <el-form-item v-if="BASE_API.THEME == 'jg'"> | ... | ... |
1 | <template> | 1 | <template> |
2 | <div class="timedTask from-clues"> | 2 | <div class="from-clues"> |
3 | <div class="from-clues-header"> | 3 | <div class="from-clues-header"> |
4 | <el-form ref="ruleForm" :model="form" label-width="100px"> | 4 | <el-form ref="ruleForm" :model="form" label-width="100px"> |
5 | <el-form-item v-if="BASE_API.THEME == 'jg'"> | 5 | <el-form-item v-if="BASE_API.THEME == 'jg'"> | ... | ... |
-
Please register or sign in to post a comment