@netang/quasar 0.0.20

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.
Files changed (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/components/column-title/index.vue +32 -0
  4. package/components/dialog/components/index.js +6 -0
  5. package/components/dialog/components/move-to-tree/index.vue +150 -0
  6. package/components/dialog/index.vue +330 -0
  7. package/components/dialog-table/index.vue +92 -0
  8. package/components/dragger/index.vue +202 -0
  9. package/components/drawer/index.vue +262 -0
  10. package/components/field-date/index.vue +844 -0
  11. package/components/field-date/methods.js +100 -0
  12. package/components/field-table/index.vue +468 -0
  13. package/components/field-text/index.vue +167 -0
  14. package/components/field-tree/index.vue +435 -0
  15. package/components/input-number/index.vue +324 -0
  16. package/components/input-number/number.js +67 -0
  17. package/components/input-price-cent/index.vue +213 -0
  18. package/components/input-price-yuan/index.vue +179 -0
  19. package/components/layout/index.vue +119 -0
  20. package/components/list-menu/index.vue +137 -0
  21. package/components/list-menu-item/index.vue +79 -0
  22. package/components/power-data/index.vue +667 -0
  23. package/components/search/index.vue +176 -0
  24. package/components/search-item/index.vue +219 -0
  25. package/components/select/index.vue +71 -0
  26. package/components/select-filter/index.vue +75 -0
  27. package/components/table/index.vue +347 -0
  28. package/components/table-column-fixed/index.vue +68 -0
  29. package/components/table-pagination/index.vue +83 -0
  30. package/components/table-summary/index.vue +91 -0
  31. package/components/thumbnail/index.vue +87 -0
  32. package/components/toolbar/container.vue +31 -0
  33. package/components/toolbar/index.vue +405 -0
  34. package/components/uploader/index.vue +157 -0
  35. package/components/uploader-query/index.vue +731 -0
  36. package/package.json +21 -0
  37. package/sass/common.scss +165 -0
  38. package/sass/index.scss +14 -0
  39. package/sass/line.scss +39 -0
  40. package/sass/quasar/btn.scss +46 -0
  41. package/sass/quasar/common.scss +3 -0
  42. package/sass/quasar/dialog.scss +7 -0
  43. package/sass/quasar/drawer.scss +6 -0
  44. package/sass/quasar/field.scss +210 -0
  45. package/sass/quasar/loading.scss +6 -0
  46. package/sass/quasar/menu.scss +8 -0
  47. package/sass/quasar/table.scss +112 -0
  48. package/sass/quasar/toolbar.scss +22 -0
  49. package/store/index.js +32 -0
  50. package/utils/$area.js +387 -0
  51. package/utils/$auth.js +135 -0
  52. package/utils/$dialog.js +43 -0
  53. package/utils/$role.js +807 -0
  54. package/utils/$rule.js +17 -0
  55. package/utils/$search.js +336 -0
  56. package/utils/$table.js +802 -0
  57. package/utils/$tree.js +620 -0
  58. package/utils/$uploader.js +1029 -0
  59. package/utils/alert.js +10 -0
  60. package/utils/bus.js +6 -0
  61. package/utils/config.js +22 -0
  62. package/utils/confrim.js +11 -0
  63. package/utils/dict.js +44 -0
  64. package/utils/getData.js +61 -0
  65. package/utils/getFile.js +30 -0
  66. package/utils/getImage.js +136 -0
  67. package/utils/getTime.js +94 -0
  68. package/utils/http.js +251 -0
  69. package/utils/loading.js +13 -0
  70. package/utils/notify.js +13 -0
  71. package/utils/previewImage.js +8 -0
  72. package/utils/symbols.js +3 -0
  73. package/utils/timestamp.js +18 -0
  74. package/utils/toast.js +13 -0
  75. package/utils/uploader/aliyun.js +6 -0
  76. package/utils/uploader/local.js +8 -0
  77. package/utils/uploader/qiniu.js +311 -0
  78. package/utils/useAuth.js +26 -0
  79. package/utils/useRouter.js +36 -0
  80. package/utils/useUploader.js +58 -0
package/utils/$area.js ADDED
@@ -0,0 +1,387 @@
1
+ // 地址数据缓存
2
+ let _areaData = null
3
+
4
+ /**
5
+ * 获取数据
6
+ */
7
+ function getData(level = 3, params) {
8
+ return _getData(() => import('@/configs/area3'), level, params)
9
+ }
10
+ function _getData(areaData, level, params) {
11
+ return new Promise(function(resolve) {
12
+
13
+ // 执行
14
+ function run() {
15
+
16
+ const para = Object.assign({
17
+ // 忽略省市 id
18
+ ignore: [],
19
+ }, params)
20
+
21
+ // 克隆树数据
22
+ const treeData = _.cloneDeep(_areaData)
23
+ const all = {}
24
+ const rows = []
25
+
26
+ // 是否有忽略省市区 id
27
+ const isIgnore = utils.isValidArray(para.ignore)
28
+ function checkIgnore(id) {
29
+ return isIgnore && _.indexOf(para.ignore, id) > -1
30
+ }
31
+
32
+ // 省
33
+ for (const item1 of treeData) {
34
+
35
+ // 如果有忽略省
36
+ if (checkIgnore(item1[1])) {
37
+ continue
38
+ }
39
+
40
+ all[item1[1]] = {
41
+ id: item1[1],
42
+ pid: 0,
43
+ title: item1[0],
44
+ level: 1,
45
+ }
46
+
47
+ // 市
48
+ if (level > 1 && utils.isValidArray(item1[2])) {
49
+
50
+ for (let index2 = 0, len2 = item1[2].length; index2 < len2; index2++) {
51
+ const item2 = item1[2][index2]
52
+
53
+ // 如果有忽略市
54
+ if (checkIgnore(item2[1])) {
55
+ continue
56
+ }
57
+
58
+ all[item2[1]] = {
59
+ id: item2[1],
60
+ pid: item1[1],
61
+ title: item2[0],
62
+ level: 2,
63
+ }
64
+ item1[2][index2] = all[item2[1]]
65
+
66
+ // 区
67
+ if (level > 2 && utils.isValidArray(item2[2])) {
68
+ for (let index3 = 0, len3 = item2[2].length; index3 < len3; index3++) {
69
+ const item3 = item2[2][index3]
70
+
71
+ // 如果有忽略区
72
+ if (checkIgnore(item3[1])) {
73
+ continue
74
+ }
75
+
76
+ all[item3[1]] = {
77
+ id: item3[1],
78
+ pid: item2[1],
79
+ title: item3[0],
80
+ level: 3,
81
+ }
82
+ item2[2][index3] = all[item3[1]]
83
+ }
84
+ }
85
+ }
86
+ }
87
+ }
88
+
89
+ for (const key in all) {
90
+ rows.push(all[key])
91
+ }
92
+
93
+ resolve(utils.toTree({
94
+ data: rows,
95
+ }))
96
+ }
97
+
98
+ if (_areaData) {
99
+ run()
100
+ return
101
+ }
102
+
103
+ areaData()
104
+ .then((res)=>{
105
+ _areaData = res.default
106
+ run()
107
+ })
108
+ })
109
+ }
110
+
111
+ /**
112
+ * 替换地址
113
+ */
114
+ function replaceArea(val) {
115
+ val = utils.trimString(val)
116
+ return val.replace(/直辖市/g, '')
117
+ .replace(/市/g, '')
118
+ .replace(/区/g, '')
119
+ .replace(/自治县/g, '')
120
+ .replace(/自治州/g, '')
121
+ .replace(/县/g, '')
122
+ }
123
+
124
+ /**
125
+ * 获取详情
126
+ */
127
+ async function getInfo(params) {
128
+
129
+ let {
130
+ // 地址数据
131
+ areaData,
132
+ // 级别
133
+ level,
134
+ // 地区编码
135
+ code,
136
+ // 省文字
137
+ provinceText,
138
+ // 市文字
139
+ cityText,
140
+ // 区文字
141
+ areaText,
142
+ // 详细区域文字
143
+ regionText,
144
+
145
+ } = Object.assign({
146
+ // 地址数据
147
+ areaData: null,
148
+ // 级别
149
+ level: 3,
150
+ // 地区编码
151
+ code: 0,
152
+ // 省文字
153
+ provinceText: '',
154
+ // 市文字
155
+ cityText: '',
156
+ // 区文字
157
+ areaText: '',
158
+ // 详细区域文字
159
+ regionText: '',
160
+ }, params)
161
+
162
+ if (! areaData) {
163
+ areaData = await getData(level)
164
+ }
165
+
166
+ const { attrs, nodes, tree } = areaData
167
+
168
+ // 先通过地区编码来查找
169
+ let data = _.get(nodes, code)
170
+
171
+ // 如果没有找到, 则通过文字来查找
172
+ if (! data) {
173
+
174
+ function getData() {
175
+
176
+ // 获取省 start --------------------------------------------------
177
+ const isAreaText = provinceText && cityText
178
+ if (isAreaText || regionText) {
179
+
180
+ for (const item1 of tree) {
181
+
182
+ const {
183
+ text: text1,
184
+ children: children1,
185
+ } = item1
186
+
187
+ const _text1 = utils.replaceAll(text1, '省', '')
188
+
189
+ if (
190
+ isAreaText ?
191
+ (
192
+ provinceText === text1
193
+ || utils.replaceAll(provinceText, '省', '') === _text1
194
+ )
195
+ : regionText.indexOf(_text1) > -1
196
+ ) {
197
+
198
+ // 获取市 start --------------------------------------------------
199
+ if (utils.isValidArray(children1)) {
200
+
201
+ for (const item2 of children1) {
202
+
203
+ const {
204
+ text: text2,
205
+ children: children2,
206
+ } = item2
207
+
208
+ const _text2 = replaceArea(text2)
209
+
210
+ if (
211
+ isAreaText ?
212
+ (
213
+ cityText === text2
214
+ || replaceArea(cityText) === _text2
215
+ )
216
+ : regionText.indexOf(_text2) > -1
217
+ ) {
218
+ // 获取区 start --------------------------------------------------
219
+ if (utils.isValidArray(children2)) {
220
+
221
+ if (areaText || regionText) {
222
+
223
+ for (const item3 of children2) {
224
+
225
+ const {
226
+ text: text3,
227
+ } = item3
228
+ const _text3 = replaceArea(text3)
229
+
230
+ if (
231
+ areaText ?
232
+ (
233
+ areaText === text3
234
+ || replaceArea(areaText) === _text3
235
+ )
236
+ : regionText.indexOf(_text3) > -1
237
+ ) {
238
+ return item3
239
+ }
240
+ }
241
+ }
242
+
243
+ if (! data) {
244
+ return children2[0]
245
+ }
246
+ }
247
+ return false
248
+ // 获取市 end --------------------------------------------------
249
+ }
250
+ }
251
+ }
252
+ return false
253
+ // 获取市 end --------------------------------------------------
254
+ }
255
+ }
256
+ }
257
+ return false
258
+ }
259
+
260
+ data = getData()
261
+ if (! data) {
262
+ return false
263
+ }
264
+ }
265
+
266
+ // 获取区
267
+ const {
268
+ attr,
269
+ } = data
270
+
271
+ const res = Object.assign({}, attr)
272
+
273
+ let province
274
+ let city
275
+ let area
276
+
277
+ // 如果为区
278
+ if (level === 3) {
279
+
280
+ // 获取区
281
+ area = attr
282
+
283
+ // 获取市
284
+ city = attrs[area.pid]
285
+
286
+ // 获取省
287
+ province = attrs[city.pid]
288
+
289
+ // 如果为市
290
+ } else if (level === 2) {
291
+
292
+ // 获取市
293
+ city = attr
294
+
295
+ // 获取市下第一个区
296
+ area = nodes[city.id].children[0]
297
+
298
+ // 获取省
299
+ province = attrs[city.pid]
300
+
301
+ // 否则为省
302
+ } else {
303
+
304
+ // 获取省
305
+ province = attr
306
+
307
+ // 获取省下第一个市
308
+ city = nodes[province.id].children[0]
309
+
310
+ // 获取市下第一个区
311
+ area = nodes[city.id].children[0]
312
+ }
313
+
314
+ // 获取地区
315
+ res.region = [
316
+ province,
317
+ ]
318
+
319
+ // 获取地区 ids 数组
320
+ res.region_ids = [
321
+ province.id,
322
+ ]
323
+
324
+ // 获取地区文字
325
+ const texts = [
326
+ province.title,
327
+ ]
328
+
329
+ if (level >= 2) {
330
+ res.region.push(city)
331
+ res.region_ids.push(city.id)
332
+
333
+ if (city.title !== province.title) {
334
+ texts.push(city.title)
335
+ }
336
+
337
+ if (level === 3) {
338
+ res.region.push(area)
339
+ res.region_ids.push(area.id)
340
+
341
+ const _areaText = area.title.replace('市辖区', '')
342
+ if (texts[texts.length - 1] !== _areaText) {
343
+ texts.push(_areaText)
344
+ }
345
+ }
346
+ }
347
+
348
+ res.region_text = texts.join('')
349
+
350
+ // 返回数据示例
351
+ // level: 3
352
+ // pid: 140700
353
+ // region:
354
+ // [
355
+ // {
356
+ // level: 1
357
+ // pid: 0
358
+ // text: "山西省"
359
+ // value: 140000
360
+ // },
361
+ // {
362
+ // level: 2
363
+ // pid: 140000
364
+ // text: "晋中市"
365
+ // value: 140700
366
+ // },
367
+ // {
368
+ // level: 3
369
+ // pid: 140700
370
+ // text: "介休市"
371
+ // value: 140781
372
+ // }
373
+ // ]
374
+ // region_ids: [140000, 140700, 140781]
375
+ // region_text: "山西省晋中市介休市"
376
+ // text: "介休市"
377
+ // value: 140781
378
+
379
+ return res
380
+ }
381
+
382
+ utils.$area = {
383
+ // 获取数据
384
+ getData,
385
+ // 获取详情
386
+ getInfo,
387
+ }
package/utils/$auth.js ADDED
@@ -0,0 +1,135 @@
1
+ import { useRouter } from 'vue-router'
2
+
3
+ import { stateAdminUserInfo } from '../store'
4
+ import { checkAdminUserInfo } from './useAuth'
5
+
6
+ /**
7
+ * 是否登录
8
+ */
9
+ function isLogin() {
10
+ return stateAdminUserInfo.value.isLogin
11
+ }
12
+
13
+ /**
14
+ * 登录后更新数据
15
+ */
16
+ function updateLogin(res) {
17
+
18
+ // 获取返回结果
19
+ const {
20
+ // 管理员 id
21
+ i,
22
+ // 鉴权认证
23
+ t,
24
+ // 管理员基础信息
25
+ admin_user_info,
26
+ } = res
27
+
28
+ // 更新管理员信息
29
+ return _updateAdminUserInfo({
30
+ id: i,
31
+ token: t,
32
+ info: utils.isValidObject(admin_user_info) ? admin_user_info : {},
33
+ })
34
+ }
35
+
36
+ /**
37
+ * 更新管理员信息
38
+ */
39
+ function updateAdminUserInfo(res) {
40
+ return _updateAdminUserInfo(Object.assign(
41
+ {},
42
+ stateAdminUserInfo.value,
43
+ res,
44
+ ))
45
+ }
46
+ function _updateAdminUserInfo(res) {
47
+
48
+ // 验证管理员信息
49
+ if (! checkAdminUserInfo(res)) {
50
+
51
+ // 【调试模式】
52
+ // --------------------------------------------------
53
+ // #ifdef IS_DEBUG
54
+ console.error('【验证错误 _updateAdminUserInfo】', valRes)
55
+ // #endif
56
+ // --------------------------------------------------
57
+
58
+ return false
59
+ }
60
+
61
+ // 设置已登录
62
+ res.isLogin = true
63
+
64
+ if (! utils.isValidObject(res.info)) {
65
+ res.info = {}
66
+ }
67
+
68
+ // 保存缓存(永久缓存)
69
+ utils.cookie.set('_tk', res, 0)
70
+
71
+ // 设置管理员信息状态
72
+ stateAdminUserInfo.value = res
73
+
74
+ return true
75
+ }
76
+
77
+ /**
78
+ * 获取管理员数据
79
+ */
80
+ function getAdminUserInfo() {
81
+ return stateAdminUserInfo.value
82
+ }
83
+
84
+ /**
85
+ * 获取管理员 id
86
+ */
87
+ function getAdminUserId() {
88
+ return isLogin() ? stateAdminUserInfo.value.id : 0
89
+ }
90
+
91
+ /**
92
+ * 跳转登录页面
93
+ */
94
+ function pushLogin(query) {
95
+ utils.router.push({
96
+ path: 'login',
97
+ query,
98
+ })
99
+ }
100
+
101
+ /**
102
+ * 退出登录
103
+ */
104
+ function logout() {
105
+
106
+ // 删除管理员信息
107
+ utils.cookie.delete('_tk')
108
+
109
+ // 清空管理员信息状态
110
+ stateAdminUserInfo.value = {
111
+ id: 0,
112
+ isLogin: false,
113
+ info: {},
114
+ }
115
+ }
116
+
117
+ /**
118
+ * 鉴权业务
119
+ */
120
+ utils.$auth = {
121
+ // 是否登录
122
+ isLogin,
123
+ // 登录后更新数据
124
+ updateLogin,
125
+ // 更新管理员信息
126
+ updateAdminUserInfo,
127
+ // 获取管理员数据
128
+ getAdminUserInfo,
129
+ // 获取管理员 id
130
+ getAdminUserId,
131
+ // 跳转登录页面
132
+ pushLogin,
133
+ // 退出登录
134
+ logout,
135
+ }
@@ -0,0 +1,43 @@
1
+ import { inject } from 'vue'
2
+ import { Dialog } from 'quasar'
3
+
4
+ import DialogComponent from '../components/dialog'
5
+ import { NDialogKey } from './symbols'
6
+
7
+ /**
8
+ * 创建对话框
9
+ */
10
+ function create(params) {
11
+ if (
12
+ // 如果是路由组件
13
+ _.has(params, 'route')
14
+ // 或自定义组件
15
+ || _.has(params, 'name')
16
+ ) {
17
+ return Dialog.create({
18
+ // 组件
19
+ component: DialogComponent,
20
+ // 组件声明
21
+ componentProps: params,
22
+ })
23
+ }
24
+
25
+ return Dialog.create(params)
26
+ }
27
+
28
+ /**
29
+ * 获取对话框注入数据
30
+ */
31
+ function onInject() {
32
+ return inject(NDialogKey)
33
+ }
34
+
35
+ /**
36
+ * 对话框业务
37
+ */
38
+ utils.$dialog = {
39
+ // 创建对话框
40
+ create,
41
+ // 获取对话框注入数据
42
+ inject: onInject,
43
+ }