@netang/quasar 0.0.20 → 0.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -3
- package/components/dialog/index.vue +30 -2
- package/components/drawer/index.vue +54 -25
- package/components/empty/index.vue +23 -0
- package/components/field-table/index.vue +85 -115
- package/components/power-page/index.vue +47 -0
- package/components/private/table-visible-columns-button/index.vue +105 -0
- package/components/table/index.vue +31 -85
- package/components/table-column-fixed/index.vue +20 -10
- package/components/table-pagination/index.vue +83 -3
- package/components/table-summary/index.vue +14 -2
- package/components/toolbar/index.vue +44 -311
- package/components/uploader/index.vue +6 -8
- package/components/uploader-query/index.vue +1 -3
- package/package.json +1 -1
- package/store/index.js +14 -0
- package/utils/$form.js +52 -0
- package/utils/{$role.js → $power.js} +313 -106
- package/utils/$table.js +69 -88
- package/utils/$tree.js +56 -32
- package/utils/http.js +5 -5
- package/utils/symbols.js +4 -0
- package/components/layout/index.vue +0 -119
package/utils/$table.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ref, computed, watch } from 'vue'
|
|
2
|
-
import { useRoute } from 'vue-router'
|
|
1
|
+
import { ref, computed, provide, inject, watch } from 'vue'
|
|
3
2
|
import { date, useQuasar } from 'quasar'
|
|
4
3
|
import { parse } from 'qs'
|
|
5
4
|
|
|
@@ -11,40 +10,7 @@ import {
|
|
|
11
10
|
setItemValue,
|
|
12
11
|
} from './$search'
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
* 获取 url 参数
|
|
16
|
-
*/
|
|
17
|
-
function getUrlQuery(url) {
|
|
18
|
-
|
|
19
|
-
const query = {}
|
|
20
|
-
|
|
21
|
-
if (utils.indexOf(url, '?') > -1) {
|
|
22
|
-
|
|
23
|
-
const arr = url.split('?')
|
|
24
|
-
|
|
25
|
-
url = arr[0]
|
|
26
|
-
const urlQuery = parse(arr[1])
|
|
27
|
-
if (utils.isValidObject(urlQuery)) {
|
|
28
|
-
utils.forIn(urlQuery, function (val, key) {
|
|
29
|
-
|
|
30
|
-
key = utils.trimString(key)
|
|
31
|
-
val = utils.trimString(val)
|
|
32
|
-
|
|
33
|
-
if (key && val) {
|
|
34
|
-
if (val.indexOf(',') > -1) {
|
|
35
|
-
val = val.split(',')
|
|
36
|
-
}
|
|
37
|
-
query[key] = utils.numberDeep(val)
|
|
38
|
-
}
|
|
39
|
-
})
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return {
|
|
44
|
-
url,
|
|
45
|
-
query,
|
|
46
|
-
}
|
|
47
|
-
}
|
|
13
|
+
import { NPowerKey, NTableKey } from './symbols'
|
|
48
14
|
|
|
49
15
|
/**
|
|
50
16
|
* 对话框设置
|
|
@@ -83,12 +49,6 @@ function dialogSetting($dialog, o) {
|
|
|
83
49
|
*/
|
|
84
50
|
function create(params) {
|
|
85
51
|
|
|
86
|
-
// ==========【注入】=================================================================================================
|
|
87
|
-
|
|
88
|
-
// 获取对话框注入
|
|
89
|
-
const $dialog = utils.$dialog.inject()
|
|
90
|
-
const inDialog = !! $dialog
|
|
91
|
-
|
|
92
52
|
// ==========【数据】=================================================================================================
|
|
93
53
|
|
|
94
54
|
// quasar 对象
|
|
@@ -100,9 +60,9 @@ function create(params) {
|
|
|
100
60
|
|
|
101
61
|
// 获取参数
|
|
102
62
|
const o = _.merge({
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
//
|
|
63
|
+
// 路由路径
|
|
64
|
+
path: '',
|
|
65
|
+
// 路由参数
|
|
106
66
|
query: {},
|
|
107
67
|
// 表格节点
|
|
108
68
|
ref: null,
|
|
@@ -132,8 +92,6 @@ function create(params) {
|
|
|
132
92
|
// 是否降序排列
|
|
133
93
|
descending: true,
|
|
134
94
|
},
|
|
135
|
-
// 已选数据
|
|
136
|
-
selected: [],
|
|
137
95
|
// 每页显示行数选项
|
|
138
96
|
rowsPerPageOptions,
|
|
139
97
|
// 请求方法
|
|
@@ -148,8 +106,6 @@ function create(params) {
|
|
|
148
106
|
search: true,
|
|
149
107
|
// 是否开启合计
|
|
150
108
|
summary: false,
|
|
151
|
-
// 权限按钮列表
|
|
152
|
-
roleBtnLists: null,
|
|
153
109
|
// 从参数中获取搜索值
|
|
154
110
|
searchFromQuery: true,
|
|
155
111
|
// 显示宫格
|
|
@@ -158,32 +114,48 @@ function create(params) {
|
|
|
158
114
|
showVisibleColumns: true,
|
|
159
115
|
}, params)
|
|
160
116
|
|
|
117
|
+
// 获取权限注入
|
|
118
|
+
const $power = _.has(params, '$power') ? params.$power : inject(NPowerKey)
|
|
119
|
+
const hasPowr = !! $power
|
|
120
|
+
|
|
121
|
+
// 获取对话框注入
|
|
122
|
+
const $dialog = utils.$dialog.inject()
|
|
123
|
+
const inDialog = !! $dialog
|
|
124
|
+
|
|
125
|
+
// 获取权限路由
|
|
126
|
+
const $route = utils.isValidString(o.path) ?
|
|
127
|
+
// 如果为自定义路由
|
|
128
|
+
utils.router.resolve({
|
|
129
|
+
path: o.path,
|
|
130
|
+
query: o.query,
|
|
131
|
+
})
|
|
132
|
+
// 否则获取当前路由
|
|
133
|
+
: (hasPowr ? $power.getRoute() : utils.router.getRoute())
|
|
134
|
+
|
|
135
|
+
// 是否有权限按钮
|
|
136
|
+
const hasPowerBtns = hasPowr ? ! $power.powerBtns.value.length : false
|
|
137
|
+
|
|
138
|
+
// 表格已选数据
|
|
139
|
+
const tableSelected = hasPowr ? $power.tableSelected : ref([])
|
|
140
|
+
|
|
161
141
|
// 如果是对话框注入
|
|
162
142
|
if (inDialog) {
|
|
163
143
|
// 对话框设置
|
|
164
144
|
dialogSetting($dialog, o)
|
|
165
145
|
}
|
|
166
146
|
|
|
167
|
-
// 如果没有地址, 则使用当前路由地址
|
|
168
|
-
if (! o.url) {
|
|
169
|
-
// 当前路由
|
|
170
|
-
o.url = useRoute().fullPath
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// 是否显示权限按钮
|
|
174
|
-
const showRoleBtn = o.roleBtnLists !== null
|
|
175
|
-
|
|
176
147
|
// 宫格模式缓存名
|
|
177
|
-
const gridCacheName = 'table_grid_' +
|
|
148
|
+
const gridCacheName = 'table_grid_' + $route.fullPath
|
|
178
149
|
|
|
179
150
|
// 可见列缓存名
|
|
180
|
-
const visibleColumnsCacheName = 'table_visible_columns_' +
|
|
151
|
+
const visibleColumnsCacheName = 'table_visible_columns_' + $route.fullPath
|
|
181
152
|
|
|
182
153
|
// 表格列
|
|
183
154
|
const tableColumns = []
|
|
184
155
|
|
|
185
|
-
//
|
|
186
|
-
if (
|
|
156
|
+
// 如果有权限按钮
|
|
157
|
+
if (hasPowerBtns) {
|
|
158
|
+
// 添加操作列
|
|
187
159
|
o.columns.push({
|
|
188
160
|
label: '操作',
|
|
189
161
|
name: 'settings',
|
|
@@ -230,9 +202,9 @@ function create(params) {
|
|
|
230
202
|
}
|
|
231
203
|
|
|
232
204
|
// 如果有路由
|
|
233
|
-
if (_.get(item, '
|
|
205
|
+
if (_.get(item, 'route')) {
|
|
234
206
|
// 如果该值在当前路由路径中, 则显示
|
|
235
|
-
if (utils.indexOf(
|
|
207
|
+
if (utils.indexOf($route.fullPath, item.route) > -1) {
|
|
236
208
|
tableColumns.push(item)
|
|
237
209
|
}
|
|
238
210
|
|
|
@@ -262,9 +234,6 @@ function create(params) {
|
|
|
262
234
|
// 表格翻页参数
|
|
263
235
|
const tablePagination = ref(o.pagination)
|
|
264
236
|
|
|
265
|
-
// 表格已选数据
|
|
266
|
-
const tableSelected = ref(o.selected)
|
|
267
|
-
|
|
268
237
|
// 表格宫格
|
|
269
238
|
const tableGrid = ref(o.showGrid ? utils.storage.get(gridCacheName) === true : false)
|
|
270
239
|
|
|
@@ -280,10 +249,6 @@ function create(params) {
|
|
|
280
249
|
// 表格合计
|
|
281
250
|
const tableSummary = ref(null)
|
|
282
251
|
|
|
283
|
-
// 获取 url 参数
|
|
284
|
-
const resUrl = getUrlQuery(o.url)
|
|
285
|
-
o.url = resUrl.url
|
|
286
|
-
|
|
287
252
|
// 如果在表格内部
|
|
288
253
|
if (inDialog) {
|
|
289
254
|
// 提交表格已选数据给对话框
|
|
@@ -302,23 +267,30 @@ function create(params) {
|
|
|
302
267
|
// 首次表格搜索值(如果表格搜索参数中带了初始值, 则设置初始值)
|
|
303
268
|
firstTableSearchValue,
|
|
304
269
|
// 表格搜索值(如果表格搜索参数中带了初始值, 则设置初始值)
|
|
305
|
-
} = utils.$search.getRawData(tableColumns, Object.assign({},
|
|
270
|
+
} = utils.$search.getRawData(tableColumns, Object.assign({}, $route.query), o.searchFromQuery)
|
|
306
271
|
|
|
307
272
|
// 表格搜索数据值
|
|
308
273
|
const tableSearchValue = ref(firstTableSearchValue)
|
|
309
274
|
|
|
275
|
+
watch(tableSearchValue, function (val) {
|
|
276
|
+
console.log('tableSearchValue', val)
|
|
277
|
+
})
|
|
278
|
+
|
|
310
279
|
// 表格搜索参数
|
|
311
280
|
const tableSearchOptions = ref()
|
|
312
281
|
|
|
313
282
|
// ==========【计算属性】=============================================================================================
|
|
314
283
|
|
|
315
|
-
|
|
316
|
-
|
|
284
|
+
/**
|
|
285
|
+
* 固定在表格右边的权限按钮列表
|
|
286
|
+
*/
|
|
287
|
+
const tableFixedPowerBtns = ! hasPowerBtns ? ref([]) : computed(function () {
|
|
317
288
|
|
|
318
289
|
const lists = []
|
|
319
290
|
|
|
320
291
|
// 先格式化权限按钮列表
|
|
321
|
-
utils.forEach(utils.$
|
|
292
|
+
utils.forEach(utils.$power.formatBtns($power.powerBtns.value), function(item) {
|
|
293
|
+
|
|
322
294
|
// 如果是固定按钮
|
|
323
295
|
if (item.fixed) {
|
|
324
296
|
lists.push(item)
|
|
@@ -326,25 +298,25 @@ function create(params) {
|
|
|
326
298
|
})
|
|
327
299
|
|
|
328
300
|
return lists
|
|
329
|
-
})
|
|
301
|
+
})
|
|
330
302
|
|
|
331
303
|
/**
|
|
332
|
-
*
|
|
304
|
+
* 获取权限按钮中可双击的按钮
|
|
333
305
|
*/
|
|
334
|
-
const
|
|
306
|
+
const tableDbClickPowerBtn = ! hasPowerBtns ? ref(null) : computed(function () {
|
|
335
307
|
if (
|
|
336
308
|
// 非手机模式
|
|
337
309
|
! $q.platform.is.mobile
|
|
338
310
|
// 有权限列表
|
|
339
|
-
&& utils.isValidArray(
|
|
311
|
+
&& utils.isValidArray($power.powerBtns.value)
|
|
340
312
|
) {
|
|
341
|
-
for (const item of
|
|
313
|
+
for (const item of $power.powerBtns.value) {
|
|
342
314
|
if (_.has(item, 'data.dbclick') === true) {
|
|
343
315
|
return item
|
|
344
316
|
}
|
|
345
317
|
}
|
|
346
318
|
}
|
|
347
|
-
})
|
|
319
|
+
})
|
|
348
320
|
|
|
349
321
|
/**
|
|
350
322
|
* 是否显示固定在右边的权限按钮列表
|
|
@@ -384,8 +356,8 @@ function create(params) {
|
|
|
384
356
|
/**
|
|
385
357
|
* 监听固定在右边的权限按钮列表
|
|
386
358
|
*/
|
|
387
|
-
if (
|
|
388
|
-
watch(
|
|
359
|
+
if (hasPowerBtns) {
|
|
360
|
+
watch(tableFixedPowerBtns, function (lists) {
|
|
389
361
|
|
|
390
362
|
const index = utils.indexOf(tableVisibleColumns.value, 'settings')
|
|
391
363
|
|
|
@@ -582,7 +554,7 @@ function create(params) {
|
|
|
582
554
|
} else {
|
|
583
555
|
const opts = Object.assign({
|
|
584
556
|
// 请求 - 登录
|
|
585
|
-
url:
|
|
557
|
+
url: $route.fullPath,
|
|
586
558
|
// 请求数据
|
|
587
559
|
data,
|
|
588
560
|
// ~~~~~~ 先开启防抖, 如果后期遇到表格加载不出来的情况, 再关闭防抖
|
|
@@ -705,8 +677,8 @@ function create(params) {
|
|
|
705
677
|
}
|
|
706
678
|
|
|
707
679
|
// 有双击的权限按钮
|
|
708
|
-
if (
|
|
709
|
-
tableToolbarRef.value?.onClick(
|
|
680
|
+
if (tableDbClickPowerBtn && tableDbClickPowerBtn.value) {
|
|
681
|
+
tableToolbarRef.value?.onClick(tableDbClickPowerBtn.value, [ row ])
|
|
710
682
|
}
|
|
711
683
|
}
|
|
712
684
|
|
|
@@ -726,7 +698,7 @@ function create(params) {
|
|
|
726
698
|
|
|
727
699
|
// ==========【返回】=================================================================================================
|
|
728
700
|
|
|
729
|
-
|
|
701
|
+
const resTable = {
|
|
730
702
|
// 表格工具栏节点
|
|
731
703
|
tableToolbarRef,
|
|
732
704
|
// 表格节点
|
|
@@ -750,7 +722,7 @@ function create(params) {
|
|
|
750
722
|
// 表格已选数据
|
|
751
723
|
tableSelected,
|
|
752
724
|
// 固定在右边的权限按钮列表
|
|
753
|
-
|
|
725
|
+
tableFixedPowerBtns,
|
|
754
726
|
// 是否显示固定在右边的权限按钮列表
|
|
755
727
|
showTableFixed,
|
|
756
728
|
// 表格图片标识
|
|
@@ -782,6 +754,15 @@ function create(params) {
|
|
|
782
754
|
// 设置表格搜索参数
|
|
783
755
|
setTableSearchOptions,
|
|
784
756
|
}
|
|
757
|
+
|
|
758
|
+
$power.update(function(data, _data) {
|
|
759
|
+
_data.$table = resTable
|
|
760
|
+
})
|
|
761
|
+
|
|
762
|
+
// 提供可以被后代组件注入的值
|
|
763
|
+
provide(NTableKey, resTable)
|
|
764
|
+
|
|
765
|
+
return resTable
|
|
785
766
|
}
|
|
786
767
|
|
|
787
768
|
/**
|
package/utils/$tree.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isRef, watch } from 'vue'
|
|
2
|
-
import {
|
|
2
|
+
import { NPowerKey } from './symbols'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* 获取节点
|
|
@@ -43,17 +43,19 @@ function getChildren(data, callback) {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
46
|
+
* 创建树实例
|
|
47
47
|
*/
|
|
48
|
-
|
|
48
|
+
function create(params) {
|
|
49
49
|
|
|
50
50
|
const {
|
|
51
|
+
// 路由路径
|
|
52
|
+
path,
|
|
53
|
+
// 路由参数
|
|
54
|
+
query,
|
|
51
55
|
// 树节点列表
|
|
52
56
|
nodes,
|
|
53
57
|
// 树展开节点
|
|
54
58
|
expanded,
|
|
55
|
-
// 权限按钮列表
|
|
56
|
-
roleBtnLists,
|
|
57
59
|
// 原始表单数据
|
|
58
60
|
rawFormData,
|
|
59
61
|
// 表单数据
|
|
@@ -63,16 +65,30 @@ utils.$tree = function(params) {
|
|
|
63
65
|
// 是否开启展开节点缓存
|
|
64
66
|
cache,
|
|
65
67
|
} = Object.assign({
|
|
68
|
+
// 路由路径
|
|
69
|
+
path: '',
|
|
70
|
+
// 路由参数
|
|
71
|
+
query: {},
|
|
66
72
|
// 是否开启展开节点缓存
|
|
67
73
|
cache: false,
|
|
68
74
|
}, params)
|
|
69
75
|
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
// 获取权限注入
|
|
77
|
+
const $power = _.has(params, '$power') ? params.$power : inject(NPowerKey)
|
|
78
|
+
const hasPowr = !! $power
|
|
79
|
+
|
|
80
|
+
// 获取权限路由
|
|
81
|
+
const $route = utils.isValidString(path) ?
|
|
82
|
+
// 如果为自定义路由
|
|
83
|
+
utils.router.resolve({
|
|
84
|
+
path,
|
|
85
|
+
query,
|
|
86
|
+
})
|
|
87
|
+
// 否则获取当前路由
|
|
88
|
+
: (hasPowr ? $power.getRoute() : utils.router.getRoute())
|
|
89
|
+
|
|
90
|
+
// 权限按钮
|
|
91
|
+
const powerBtns = hasPowr ? $power.powerBtns : ref([])
|
|
76
92
|
|
|
77
93
|
// 是否有展开节点
|
|
78
94
|
const hasExpanded = ! _.isNil(expanded) && isRef(expanded)
|
|
@@ -194,21 +210,21 @@ utils.$tree = function(params) {
|
|
|
194
210
|
maps[o.deleteName] = 'delete'
|
|
195
211
|
maps[o.statusName] = 'status'
|
|
196
212
|
|
|
197
|
-
const
|
|
198
|
-
for (const item of
|
|
213
|
+
const allPowerBtn = {}
|
|
214
|
+
for (const item of powerBtns.value) {
|
|
199
215
|
if (_.has(maps, _.get(item, 'name'))) {
|
|
200
|
-
|
|
216
|
+
allPowerBtn[maps[item.name]] = item
|
|
201
217
|
}
|
|
202
218
|
}
|
|
203
219
|
|
|
204
220
|
return {
|
|
205
|
-
all: utils.isValidObject(
|
|
206
|
-
update: _.has(
|
|
207
|
-
move: _.has(
|
|
208
|
-
copy: _.has(
|
|
209
|
-
delete: _.has(
|
|
210
|
-
status: _.has(
|
|
211
|
-
|
|
221
|
+
all: utils.isValidObject(allPowerBtn),
|
|
222
|
+
update: _.has(allPowerBtn, 'update'),
|
|
223
|
+
move: _.has(allPowerBtn, 'move'),
|
|
224
|
+
copy: _.has(allPowerBtn, 'copy'),
|
|
225
|
+
delete: _.has(allPowerBtn, 'delete'),
|
|
226
|
+
status: _.has(allPowerBtn, 'status'),
|
|
227
|
+
allPowerBtn,
|
|
212
228
|
}
|
|
213
229
|
}
|
|
214
230
|
|
|
@@ -255,7 +271,7 @@ utils.$tree = function(params) {
|
|
|
255
271
|
// 移至节点下
|
|
256
272
|
case 'moveDown':
|
|
257
273
|
|
|
258
|
-
if (! _.get(o.menuStatus, 'value.
|
|
274
|
+
if (! _.get(o.menuStatus, 'value.allPowerBtn.move.url')) {
|
|
259
275
|
console.error('没有找到复制地址')
|
|
260
276
|
return
|
|
261
277
|
}
|
|
@@ -388,7 +404,7 @@ utils.$tree = function(params) {
|
|
|
388
404
|
|
|
389
405
|
// 请求 - 移动
|
|
390
406
|
const { status } = await utils.http({
|
|
391
|
-
url: o.menuStatus.value.
|
|
407
|
+
url: o.menuStatus.value.allPowerBtn.move.url,
|
|
392
408
|
data: {
|
|
393
409
|
data: moveLists,
|
|
394
410
|
},
|
|
@@ -407,7 +423,7 @@ utils.$tree = function(params) {
|
|
|
407
423
|
// 确认菜单
|
|
408
424
|
confirmMenu(async function() {
|
|
409
425
|
|
|
410
|
-
if (! _.get(o.menuStatus, 'value.
|
|
426
|
+
if (! _.get(o.menuStatus, 'value.allPowerBtn.copy.url')) {
|
|
411
427
|
console.error('没有找到复制地址')
|
|
412
428
|
return
|
|
413
429
|
}
|
|
@@ -432,7 +448,7 @@ utils.$tree = function(params) {
|
|
|
432
448
|
|
|
433
449
|
// 请求 - 复制
|
|
434
450
|
const { status, data: res } = await utils.http({
|
|
435
|
-
url: o.menuStatus.value.
|
|
451
|
+
url: o.menuStatus.value.allPowerBtn.copy.url,
|
|
436
452
|
data: {
|
|
437
453
|
data: copyLists,
|
|
438
454
|
},
|
|
@@ -489,7 +505,7 @@ utils.$tree = function(params) {
|
|
|
489
505
|
return
|
|
490
506
|
}
|
|
491
507
|
|
|
492
|
-
if (! _.get(o.menuStatus, 'value.
|
|
508
|
+
if (! _.get(o.menuStatus, 'value.allPowerBtn.delete.url')) {
|
|
493
509
|
console.error('没有找到删除地址')
|
|
494
510
|
return
|
|
495
511
|
}
|
|
@@ -499,7 +515,7 @@ utils.$tree = function(params) {
|
|
|
499
515
|
|
|
500
516
|
// 请求 - 删除
|
|
501
517
|
const { status } = await utils.http({
|
|
502
|
-
url: o.menuStatus.value.
|
|
518
|
+
url: o.menuStatus.value.allPowerBtn.delete.url,
|
|
503
519
|
data: {
|
|
504
520
|
id: o.node.id,
|
|
505
521
|
},
|
|
@@ -524,7 +540,7 @@ utils.$tree = function(params) {
|
|
|
524
540
|
// 全部正常
|
|
525
541
|
case 'statusNormal':
|
|
526
542
|
|
|
527
|
-
if (! _.get(o.menuStatus, 'value.
|
|
543
|
+
if (! _.get(o.menuStatus, 'value.allPowerBtn.status.url')) {
|
|
528
544
|
console.error('没有找到状态地址')
|
|
529
545
|
return
|
|
530
546
|
}
|
|
@@ -550,7 +566,7 @@ utils.$tree = function(params) {
|
|
|
550
566
|
|
|
551
567
|
// 请求 - 全部禁用/正常
|
|
552
568
|
const { status } = await utils.http({
|
|
553
|
-
url: o.menuStatus.value.
|
|
569
|
+
url: o.menuStatus.value.allPowerBtn.status.url,
|
|
554
570
|
data: {
|
|
555
571
|
// ids
|
|
556
572
|
ids: statusIds,
|
|
@@ -587,7 +603,7 @@ utils.$tree = function(params) {
|
|
|
587
603
|
*/
|
|
588
604
|
function getExpandedCache(defaultValue = []) {
|
|
589
605
|
// 获取展开节点缓存
|
|
590
|
-
const res = utils.storage.get('tree_expanded_' +
|
|
606
|
+
const res = utils.storage.get('tree_expanded_' + $route.fullPath)
|
|
591
607
|
return utils.isValidArray(res) ? res : defaultValue
|
|
592
608
|
}
|
|
593
609
|
|
|
@@ -596,12 +612,12 @@ utils.$tree = function(params) {
|
|
|
596
612
|
*/
|
|
597
613
|
function setExpandedCache(expanded) {
|
|
598
614
|
// 设置展开节点缓存(永久缓存)
|
|
599
|
-
utils.storage.set('tree_expanded_' +
|
|
615
|
+
utils.storage.set('tree_expanded_' + $route.fullPath, expanded, 0)
|
|
600
616
|
}
|
|
601
617
|
|
|
602
618
|
return {
|
|
603
619
|
// 当前地址
|
|
604
|
-
|
|
620
|
+
fullPath: $route.fullPath,
|
|
605
621
|
// 获取节点
|
|
606
622
|
getNode,
|
|
607
623
|
// 更新节点
|
|
@@ -618,3 +634,11 @@ utils.$tree = function(params) {
|
|
|
618
634
|
setExpandedCache,
|
|
619
635
|
}
|
|
620
636
|
}
|
|
637
|
+
|
|
638
|
+
/**
|
|
639
|
+
* 树业务
|
|
640
|
+
*/
|
|
641
|
+
utils.$tree = {
|
|
642
|
+
// 创建树实例
|
|
643
|
+
create,
|
|
644
|
+
}
|
package/utils/http.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isRef } from 'vue'
|
|
2
2
|
import axios from 'axios'
|
|
3
3
|
import createHttp from '@netang/utils/http'
|
|
4
|
-
import {
|
|
4
|
+
import { statePower } from '../store'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* 初始化 http
|
|
@@ -102,9 +102,9 @@ utils.http = createHttp({
|
|
|
102
102
|
options.headers.Authorization = token
|
|
103
103
|
|
|
104
104
|
// 如果有权限
|
|
105
|
-
if (
|
|
105
|
+
if (statePower.value.v) {
|
|
106
106
|
// 头部添加权限版本号
|
|
107
|
-
options.headers.
|
|
107
|
+
options.headers.Pv = statePower.value.v
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
// 否则未登录 && 如果开启强制登录, 则跳转登录页面
|
|
@@ -126,8 +126,8 @@ utils.http = createHttp({
|
|
|
126
126
|
|
|
127
127
|
// 如果请求成功
|
|
128
128
|
if (res.status && para.checkCode && para.token) {
|
|
129
|
-
//
|
|
130
|
-
utils.$
|
|
129
|
+
// 设置权限数据
|
|
130
|
+
utils.$power.setData(_.get(res, 'response.data.power'))
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
return res
|
package/utils/symbols.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
export const NPowerKey = '_n_power_'
|
|
1
2
|
export const NLayoutKey = '_n_layout_'
|
|
3
|
+
export const NTableKey = '_n_table_'
|
|
4
|
+
export const NFormKey = '_n_form_'
|
|
2
5
|
export const NDialogKey = '_n_dialog_'
|
|
6
|
+
export const NFieldTableKey = '_n_field_table_'
|
|
3
7
|
export const NUploaderKey = '_n_uploader_'
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<q-layout
|
|
3
|
-
v-bind="$attrs"
|
|
4
|
-
>
|
|
5
|
-
<!-- 错误提示 -->
|
|
6
|
-
<q-page-container v-if="pageStatus === false">
|
|
7
|
-
<q-page class="q-pa-lg flex flex-center">
|
|
8
|
-
{{emptyDescription}}
|
|
9
|
-
</q-page>
|
|
10
|
-
</q-page-container>
|
|
11
|
-
|
|
12
|
-
<!-- 插槽 -->
|
|
13
|
-
<slot :data="data" v-else-if="pageStatus === true" />
|
|
14
|
-
</q-layout>
|
|
15
|
-
|
|
16
|
-
<!-- 加载 -->
|
|
17
|
-
<q-inner-loading
|
|
18
|
-
:showing="pageLoading"
|
|
19
|
-
/>
|
|
20
|
-
</template>
|
|
21
|
-
|
|
22
|
-
<script>
|
|
23
|
-
import { provide } from 'vue'
|
|
24
|
-
import { NLayoutKey } from '../../utils/symbols'
|
|
25
|
-
|
|
26
|
-
export default {
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* 标识
|
|
30
|
-
*/
|
|
31
|
-
name: 'NLayout',
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* 声明属性
|
|
35
|
-
*/
|
|
36
|
-
props: {
|
|
37
|
-
// 页面加载
|
|
38
|
-
pageLoading: Boolean,
|
|
39
|
-
// 页面状态
|
|
40
|
-
pageStatus: {
|
|
41
|
-
type: Boolean,
|
|
42
|
-
default: null,
|
|
43
|
-
},
|
|
44
|
-
// 空状态描述
|
|
45
|
-
emptyDescription: {
|
|
46
|
-
type: String,
|
|
47
|
-
default: '发生未知错误',
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* 组合式
|
|
53
|
-
*/
|
|
54
|
-
setup() {
|
|
55
|
-
|
|
56
|
-
// ==========【注入】============================================================================================
|
|
57
|
-
|
|
58
|
-
// 布局数据
|
|
59
|
-
const data = {
|
|
60
|
-
// 左边侧滑菜单数据
|
|
61
|
-
left: {
|
|
62
|
-
// 是否显示
|
|
63
|
-
data: null,
|
|
64
|
-
},
|
|
65
|
-
// 右边侧滑菜单数据
|
|
66
|
-
right: {
|
|
67
|
-
// 是否显示
|
|
68
|
-
data: null,
|
|
69
|
-
},
|
|
70
|
-
// 权限数据
|
|
71
|
-
role: {},
|
|
72
|
-
// 表格数据
|
|
73
|
-
table: {},
|
|
74
|
-
// 上传器
|
|
75
|
-
uploader: [],
|
|
76
|
-
}
|
|
77
|
-
data.left.show = function() {
|
|
78
|
-
return data.left.data !== null ? data.left.data.value : false
|
|
79
|
-
}
|
|
80
|
-
data.left.toggle = function () {
|
|
81
|
-
if (data.left.data !== null) {
|
|
82
|
-
data.left.data.value = ! data.left.data.value
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
data.right.show = function() {
|
|
86
|
-
return data.right.data !== null ? data.right.data.value : false
|
|
87
|
-
}
|
|
88
|
-
data.right.toggle = function () {
|
|
89
|
-
if (data.right.data !== null) {
|
|
90
|
-
data.right.data.value = ! data.right.data.value
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// 向后代注入数据
|
|
95
|
-
provide(NLayoutKey, {
|
|
96
|
-
// 注入数据
|
|
97
|
-
data,
|
|
98
|
-
// 更新注入数据
|
|
99
|
-
update(cb) {
|
|
100
|
-
cb(data)
|
|
101
|
-
},
|
|
102
|
-
// 检查是否上传中
|
|
103
|
-
checkUploading() {
|
|
104
|
-
for (const uploader of data.uploader) {
|
|
105
|
-
if (uploader.checkUploading()) {
|
|
106
|
-
return true
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return false
|
|
110
|
-
},
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
return {
|
|
114
|
-
// 布局数据
|
|
115
|
-
data,
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
}
|
|
119
|
-
</script>
|