@netang/quasar 0.0.21 → 0.0.23

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.
@@ -1,10 +1,273 @@
1
- import { isRef } from 'vue'
2
- import { useRoute } from 'vue-router'
1
+ import { provide, inject, ref, computed } from 'vue'
2
+ import { useQuasar } from 'quasar'
3
3
 
4
- import { stateRole } from '../store'
4
+ import { statePower } from '../store'
5
+ import { NPowerKey, NFormKey, NTableKey } from './symbols'
5
6
 
6
7
  /**
7
- * 设置角色数据
8
+ * 创建权限实例
9
+ */
10
+ function create(params) {
11
+
12
+ // 获取参数
13
+ const o = Object.assign({
14
+ // 路由路径
15
+ path: '',
16
+ // 路由参数
17
+ query: {},
18
+ // 页面加载
19
+ pageLoading: false,
20
+ // 页面状态
21
+ pageStatus: null,
22
+ // 空状态描述
23
+ emptyDescription: '',
24
+ // 是否开启权限
25
+ power: true,
26
+ // 左边侧滑菜单图标
27
+ leftDrawerIcon: 'format_list_bulleted',
28
+ // 右边侧滑菜单图标
29
+ rightDrawerIcon: 'search',
30
+
31
+ // 请求前执行
32
+ requestBefore: null,
33
+ // 请求成功执行
34
+ requestSuccess: null,
35
+ // 请求失败执行
36
+ requestFail: null,
37
+ // 请求后执行
38
+ requestAfter: null,
39
+ }, params)
40
+
41
+ // 获取权限路由
42
+ const $route = o.path === false
43
+ // 如果没有路由
44
+ ? {
45
+ fullPath: '',
46
+ path: '',
47
+ query: utils.isValidObject(o.query) ? o.query : {},
48
+ }
49
+ // 否则获取路由
50
+ : (
51
+ utils.isValidString(o.path) ?
52
+ // 如果为自定义路由
53
+ utils.router.resolve({
54
+ path: o.path,
55
+ query: utils.isValidObject(o.query) ? o.query : {},
56
+ })
57
+ // 否则获取当前路由
58
+ : utils.router.getRoute()
59
+ )
60
+
61
+ // quasar 对象
62
+ const $q = useQuasar()
63
+
64
+ // 表格已选数据
65
+ const tableSelected = ref([])
66
+
67
+ // 是否显示左边侧滑菜单
68
+ const leftDrawerModelValue = ref(null)
69
+
70
+ // 是否显示右边侧滑菜单
71
+ const rightDrawerModelValue = ref(null)
72
+
73
+ /**
74
+ * 检查是否上传中
75
+ */
76
+ function checkUploading() {
77
+ for (const uploader of data.uploader) {
78
+ if (uploader.checkUploading()) {
79
+ return true
80
+ }
81
+ }
82
+ return false
83
+ }
84
+
85
+ const _data = {
86
+ // 表格实例
87
+ $table: null,
88
+ // 表单实例
89
+ $form: null,
90
+ }
91
+
92
+ // 注入数据
93
+ const data = {
94
+ // 页面加载
95
+ pageLoading: ref(o.pageLoading),
96
+ // 页面状态
97
+ pageStatus: ref(o.pageStatus),
98
+ // 空状态描述
99
+ emptyDescription: ref(o.emptyDescription),
100
+
101
+ // 当前路由全路径
102
+ routeFullPath: $route.fullPath,
103
+ // 当前路由路径
104
+ routePath: $route.path,
105
+ // 当前路由参数
106
+ routeQuery: $route.query,
107
+ // 获取当前路由
108
+ getRoute() {
109
+ return $route
110
+ },
111
+
112
+ // 左边侧滑菜单数据
113
+ leftDrawer: {
114
+ // 图标
115
+ icon: o.leftDrawerIcon,
116
+ // 是否显示
117
+ modelValue: leftDrawerModelValue,
118
+ // 是否显示切换按钮
119
+ showButton() {
120
+ return leftDrawerModelValue.value !== null
121
+ },
122
+ // 切换
123
+ toggle() {
124
+ if (leftDrawerModelValue.value !== null) {
125
+ leftDrawerModelValue.value = ! leftDrawerModelValue.value
126
+ }
127
+ },
128
+ },
129
+ // 右边侧滑菜单数据
130
+ rightDrawer: {
131
+ // 图标
132
+ icon: o.rightDrawerIcon,
133
+ // 是否显示
134
+ modelValue: rightDrawerModelValue,
135
+ // 是否显示切换按钮
136
+ showButton() {
137
+ return rightDrawerModelValue.value !== null
138
+ },
139
+ // 切换
140
+ toggle() {
141
+ if (rightDrawerModelValue.value !== null) {
142
+ rightDrawerModelValue.value = ! rightDrawerModelValue.value
143
+ }
144
+ },
145
+ },
146
+ // 表格已选数据
147
+ tableSelected,
148
+ // 上传器
149
+ uploader: [],
150
+ // 检查是否上传中
151
+ checkUploading,
152
+ }
153
+
154
+ // 如果是权限页面
155
+ if (o.power) {
156
+
157
+ // 获取当前页面角色权限
158
+ const { status, data: res } = getPageData($route)
159
+ if (! status) {
160
+ o.pageStatus = false
161
+ o.emptyDescription = res.msg
162
+ o.power = false
163
+
164
+ } else {
165
+ // 当前页面权限
166
+ data.powerPage = res.page
167
+ // 当前页面权限按钮
168
+ data.powerBtns = ref(res.btns)
169
+ // 当前页面工具栏权限按钮
170
+ data.toolbarPowerBtns = computed(function() {
171
+
172
+ // 有权限按钮数据
173
+ if (utils.isValidArray(data.powerBtns.value)) {
174
+
175
+ const lists = _.filter(formatBtns(data.powerBtns.value), e => e.type > 2)
176
+
177
+ // 格式化权限按钮列表
178
+ utils.forEach(lists, function(item) {
179
+
180
+ if (! item.hidden) {
181
+
182
+ // 如果是单条数据显示
183
+ const isSingle = item.show === 'single'
184
+
185
+ // 如果是单条 || 多条显示
186
+ if (isSingle || item.show === 'multi') {
187
+
188
+ // 初始为不显示
189
+ item.show = false
190
+
191
+ // 如果有表格选中数据
192
+ if (utils.isValidArray(data.tableSelected.value)) {
193
+ // 如果是单个显示
194
+ if (isSingle) {
195
+ item.show = data.tableSelected.value.length === 1
196
+
197
+ // 否则是多个显示
198
+ } else {
199
+ item.show = data.tableSelected.value.length >= 1
200
+ }
201
+ }
202
+ }
203
+
204
+ // 如果是手机模式
205
+ if ($q.platform.is.mobile) {
206
+ item.icon = undefined
207
+ }
208
+ }
209
+ })
210
+
211
+ return lists
212
+ }
213
+
214
+ return []
215
+ })
216
+
217
+ // 权限按钮点击
218
+ data.powerBtnClick = async function ({ data }, tableSelected) {
219
+
220
+ // 权限请求
221
+ await request({
222
+ // 按钮数据
223
+ data,
224
+ // 表格选中数据
225
+ tableSelected,
226
+ // 表格实例
227
+ $table: _data.$table,
228
+ // 表单实例
229
+ $form: _data.$form,
230
+ // 检查是否正在上传文件
231
+ checkUploading,
232
+
233
+ // 请求前执行
234
+ requestBefore: o.requestBefore,
235
+ // 请求成功执行
236
+ requestSuccess: o.requestSuccess,
237
+ // 请求失败执行
238
+ requestFail: o.requestFail,
239
+ // 请求后执行
240
+ requestAfter: o.requestAfter,
241
+ })
242
+ }
243
+ }
244
+ }
245
+
246
+ // 如果没有开启权限
247
+ if (! o.power) {
248
+ // 当前页面权限
249
+ data.powerPage = {}
250
+ // 当前页面权限按钮
251
+ data.powerBtns = ref([])
252
+ // 当前页面工具栏权限按钮
253
+ data.toolbarPowerBtns = ref([])
254
+ // 权限按钮点击
255
+ data.powerBtnClick = ()=>{}
256
+ }
257
+
258
+ // 更新数据
259
+ data.update = function(cb) {
260
+ cb(data, _data)
261
+ }
262
+
263
+ // 提供可以被后代组件注入的值
264
+ provide(NPowerKey, data)
265
+
266
+ return data
267
+ }
268
+
269
+ /**
270
+ * 设置权限数据
8
271
  */
9
272
  function setData(data) {
10
273
 
@@ -167,8 +430,8 @@ function setData(data) {
167
430
  }
168
431
  }
169
432
 
170
- // 保存至状态中
171
- stateRole.value = {
433
+ // 保存至权限状态中
434
+ statePower.value = {
172
435
  // 角色权限版本
173
436
  v,
174
437
  // all id
@@ -183,18 +446,18 @@ function setData(data) {
183
446
  }
184
447
 
185
448
  /**
186
- * 获取管理端角色权限数据
449
+ * 获取权限
187
450
  */
188
451
  async function getData() {
189
452
 
190
- // 如果没有管理端角色权限数据
191
- if (! stateRole.value.v) {
453
+ // 如果没有权限数据
454
+ if (! statePower.value.v) {
192
455
 
193
- // 获取管理端角色权限数据
194
- const res = await utils.getData(utils.config('rolePowerName'))
456
+ // 获取权限数据
457
+ const res = await utils.getData(utils.config('powerName'))
195
458
  if (res === false) {
196
- stateRole.value = {
197
- // 角色权限版本
459
+ statePower.value = {
460
+ // 权限版本
198
461
  v: null,
199
462
  // all id
200
463
  all: {},
@@ -209,9 +472,9 @@ async function getData() {
209
472
  }
210
473
  }
211
474
 
212
- // 如果有角色状态数据, 则直接返回
213
- if (stateRole.value.v) {
214
- return utils.success(_.cloneDeep(stateRole.value))
475
+ // 如果有权限状态数据, 则直接返回
476
+ if (statePower.value.v) {
477
+ return utils.success(_.cloneDeep(statePower.value))
215
478
  }
216
479
 
217
480
  return utils.fail()
@@ -291,13 +554,13 @@ function parseQuery(data, settings) {
291
554
  }
292
555
 
293
556
  /**
294
- * 格式化权限按钮列表
557
+ * 格式化权限按钮
295
558
  */
296
- function formatRoleBtnLists(roleBtnLists, filterBtns, toObject = false) {
559
+ function formatBtns(powerBtns, filterBtns, toObject = false) {
297
560
 
298
561
  const newLists = []
299
562
 
300
- utils.forEach(roleBtnLists, function(item) {
563
+ utils.forEach(powerBtns, function(item) {
301
564
 
302
565
  const {
303
566
  name,
@@ -456,25 +719,15 @@ function formatQuery(query, isJoinArr) {
456
719
  async function request(params) {
457
720
 
458
721
  // 参数
459
- const o = _.merge({
722
+ const o = Object.assign({
460
723
  // 按钮数据
461
724
  data: {},
462
725
  // 参数
463
726
  query: {},
464
- // 布局数据
465
- layoutData: {},
466
727
  // 表格选中数据
467
728
  tableSelected: [],
468
- // 表格刷新
469
- tableRefresh: null,
470
729
  // 检查是否正在上传文件
471
730
  checkUploading: null,
472
- // 表单节点
473
- formRef: null,
474
- // 表单数据
475
- formData: null,
476
- // 重置表单
477
- resetForm: null,
478
731
  // 请求前执行
479
732
  requestBefore: null,
480
733
  // 请求成功执行
@@ -550,50 +803,29 @@ async function request(params) {
550
803
  // --------------------------------------------------
551
804
  if (o.data.type === dicts.POWER_DATA_TYPE__FORM) {
552
805
 
553
- // 如果验证表单
554
- if (_.get(o.data, 'validate') !== false) {
806
+ // 获取表单注入
807
+ o.$form = _.has(params, '$form') ? params.$form : inject(NFormKey)
555
808
 
556
- let formRef
557
- if (o.formRef) {
558
- if (isRef(o.formRef)) {
559
- formRef = o.formRef.value
560
- } else if (_.isFunction(o.formRef)) {
561
- formRef = o.formRef()
562
- } else {
563
- formRef = o.formRef
564
- }
565
- }
566
-
567
- // 如果没有绑定表单节点
568
- if (! formRef) {
809
+ if (! o.$form) {
810
+ throw new Error('没有创建表单实例')
811
+ }
569
812
 
570
- // 【调试模式】
571
- // --------------------------------------------------
572
- // #ifdef IS_DEBUG
573
- console.log('没有绑定 fromRef')
574
- // #endif
575
- // --------------------------------------------------
813
+ // 如果验证表单
814
+ if (_.get(o.data, 'validate') !== false) {
576
815
 
577
- return
816
+ if (! o.$form.formRef) {
817
+ throw new Error('没有绑定 fromRef')
578
818
  }
579
819
 
580
820
  // 验证表单
581
- if (! await formRef.validate()) {
821
+ if (! await o.$form.formRef.value.validate()) {
582
822
  return
583
823
  }
584
824
  }
585
825
 
586
- // 判断表单数据
587
- if (! utils.isValidObject(o.formData)) {
588
-
589
- // 【调试模式】
590
- // --------------------------------------------------
591
- // #ifdef IS_DEBUG
592
- console.log('没有获取到表单数据')
593
- // #endif
594
- // --------------------------------------------------
595
-
596
- return
826
+ // 验证表单数据
827
+ if (! utils.isValidObject(o.$form.formData.value)) {
828
+ throw new Error('没有获取到表单数据')
597
829
  }
598
830
 
599
831
  // 检查是否正在上传文件
@@ -606,11 +838,14 @@ async function request(params) {
606
838
  }
607
839
 
608
840
  // 获取请求数据
609
- requestData = _.merge({}, formatQuery(query, false), o.formData)
841
+ requestData = _.merge({}, formatQuery(query, false), o.$form.formData.value)
610
842
 
611
843
  // 如果是请求数据
612
844
  // --------------------------------------------------
613
845
  } else {
846
+ // 获取表格注入
847
+ o.$table = _.has(params, '$table') ? params.$table : inject(NTableKey)
848
+
614
849
  // 获取请求数据
615
850
  requestData = formatQuery(query, false)
616
851
  }
@@ -710,12 +945,12 @@ async function request(params) {
710
945
 
711
946
  // 重置表单
712
947
  case 'resetForm':
713
- utils.run(o.resetForm)()
948
+ utils.run(o.$form?.resetForm)()
714
949
  break
715
950
 
716
951
  // 刷新表格
717
952
  case 'refreshTable':
718
- utils.run(o.tableRefresh)()
953
+ utils.run(o.$table?.tableRefresh)()
719
954
  break
720
955
  }
721
956
  }
@@ -743,65 +978,47 @@ async function request(params) {
743
978
  /**
744
979
  * 获取当前页面角色权限
745
980
  */
746
- async function getPageData($route, pageStatus, emptyDescription, roleBtnLists) {
981
+ function getPageData($route) {
747
982
 
748
983
  if (! $route) {
749
- $route = useRoute()
750
- }
751
-
752
- function fail(message) {
753
-
754
- if (! _.isNil(pageStatus) && isRef(pageStatus)) {
755
- pageStatus.value = false
756
- }
757
-
758
- if (! _.isNil(emptyDescription) && isRef(emptyDescription)) {
759
- emptyDescription.value = message
760
-
761
- } else {
762
- // 提示框
763
- utils.alert({
764
- message,
765
- })
766
- }
767
- return false
984
+ $route = utils.router.getRoute()
768
985
  }
769
986
 
770
987
  const path = _.get($route, 'path')
771
988
  if (! path) {
772
- return fail('路由参数错误')
989
+ return utils.fail('路由参数错误')
773
990
  }
774
991
 
775
- // 获取角色数据
776
- const { status, data: { urls, btns } } = await utils.$role.getData()
777
- if (! status || ! _.has(urls, path)) {
778
- return fail('该页面没有权限')
992
+ if (! statePower.value.v) {
993
+ return utils.fail('没有获取到权限数据')
779
994
  }
780
995
 
781
- // 设置权限按钮列表
782
- const roleBtns = _.has(btns, path) ? btns[path] : []
783
- if (! _.isNil(roleBtnLists) && isRef(roleBtnLists)) {
784
- roleBtnLists.value = roleBtns
996
+ // 获取角色数据
997
+ const { urls, btns } = _.cloneDeep(statePower.value)
998
+ if (! _.has(urls, path)) {
999
+ return utils.fail('该页面没有权限')
785
1000
  }
786
1001
 
787
- return {
1002
+ return utils.success({
788
1003
  page: urls[path],
789
- btns: roleBtns,
790
- }
1004
+ btns: _.has(btns, path) ? btns[path] : [],
1005
+ })
791
1006
  }
792
1007
 
793
1008
  /**
794
- * 角色业务
1009
+ * 权限业务
795
1010
  */
796
- utils.$role = {
797
- // 设置角色数据
1011
+ utils.$power = {
1012
+ // 创建
1013
+ create,
1014
+ // 设置权限数据
798
1015
  setData,
799
- // 获取角色数据
1016
+ // 获取权限数据
800
1017
  getData,
801
- // 获取页面角色数据
1018
+ // 获取页面权限数据
802
1019
  getPageData,
803
- // 格式化权限按钮列表
804
- formatRoleBtnLists,
1020
+ // 格式化权限按钮
1021
+ formatBtns,
805
1022
  // 请求
806
1023
  request,
807
1024
  }