w-web-perm 1.0.12 → 1.0.13

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 (68) hide show
  1. package/.vscode/launch.json +0 -1
  2. package/README.md +0 -1
  3. package/dist/css/app.f22995d1.css +1 -0
  4. package/dist/index.tmp +1 -1
  5. package/dist/js/app-legacy.82274c39.js +2 -0
  6. package/dist/js/app-legacy.82274c39.js.map +1 -0
  7. package/dist/js/app.82274c39.js +2 -0
  8. package/dist/js/app.82274c39.js.map +1 -0
  9. package/dist/js/chunk-vendors-legacy.d89048a8.js +13 -0
  10. package/dist/js/chunk-vendors-legacy.d89048a8.js.map +1 -0
  11. package/dist/js/chunk-vendors.d89048a8.js +13 -0
  12. package/dist/js/chunk-vendors.d89048a8.js.map +1 -0
  13. package/dist/w-web-perm.umd.js +2 -2
  14. package/dist/w-web-perm.umd.js.map +1 -1
  15. package/docs/WWebPerm.html +2 -2
  16. package/docs/WWebPerm.mjs.html +212 -64
  17. package/docs/index.html +1 -1
  18. package/g.backupDb.mjs +1 -1
  19. package/g.initialData.mjs +211 -111
  20. package/g.initialTestData.mjs +2 -1
  21. package/g.mjs +0 -0
  22. package/g.provideGrups.mjs +87 -0
  23. package/g.providePemis.mjs +43 -0
  24. package/g.provideTargets.mjs +20 -13
  25. package/g.provideUsers.mjs +45 -13
  26. package/package.json +8 -8
  27. package/script.txt +5 -5
  28. package/server/WWebPerm.mjs +211 -63
  29. package/server/provideGrups.mjs +64 -0
  30. package/server/{provideRuleGroups.mjs → providePemis.mjs} +14 -15
  31. package/server/provideTargets.mjs +8 -5
  32. package/server/provideUsers.mjs +9 -9
  33. package/src/App.vue +16 -3
  34. package/src/components/Layout.vue +13 -5
  35. package/src/components/LayoutContent.vue +31 -16
  36. package/src/components/LayoutContentGrups.vue +793 -0
  37. package/src/components/LayoutContentPemis.vue +793 -0
  38. package/src/components/LayoutContentTargets.vue +481 -307
  39. package/src/components/LayoutContentUsers.vue +796 -291
  40. package/src/components/VeCgrups.vue +926 -0
  41. package/src/components/VeCpemis.vue +926 -0
  42. package/src/components/VeCrules.vue +820 -0
  43. package/src/main.js +2 -2
  44. package/src/perm.mjs +5 -5
  45. package/src/plugins/mShare.mjs +444 -153
  46. package/src/plugins/mUI.mjs +37 -19
  47. package/src/schema/gi.mjs +1 -1
  48. package/src/schema/index.mjs +4 -2
  49. package/src/schema/tables/grups.mjs +154 -0
  50. package/src/schema/tables/{ruleGroups.mjs → pemis.mjs} +27 -16
  51. package/src/schema/tables/targets.mjs +49 -16
  52. package/src/schema/tables/users.mjs +55 -27
  53. package/src/store/mutations.mjs +375 -150
  54. package/srv.mjs +2 -2
  55. package/tableTags-web-perm.json +1 -1
  56. package/dist/css/app.f6c50bec.css +0 -1
  57. package/dist/js/app-legacy.767522f1.js +0 -2
  58. package/dist/js/app-legacy.767522f1.js.map +0 -1
  59. package/dist/js/app.767522f1.js +0 -2
  60. package/dist/js/app.767522f1.js.map +0 -1
  61. package/dist/js/chunk-vendors-legacy.b0d63e17.js +0 -13
  62. package/dist/js/chunk-vendors-legacy.b0d63e17.js.map +0 -1
  63. package/dist/js/chunk-vendors.b0d63e17.js +0 -13
  64. package/dist/js/chunk-vendors.b0d63e17.js.map +0 -1
  65. package/g.provideRuleGroups.mjs +0 -56
  66. package/src/components/LayoutContentGroups.vue +0 -671
  67. package/src/components/VeUser.vue +0 -446
  68. package/src/components/ruleGroup.vue +0 -645
@@ -0,0 +1,926 @@
1
+ <template>
2
+ <WDialog
3
+ :show.sync="bShow"
4
+ :title="$t('userEditCgrups')"
5
+ :icon="mdiFormatListCheckbox"
6
+ :minWidth="800"
7
+ :maxWidth="800"
8
+ :fullscreen="fullscreen"
9
+ :contentBackgroundColor="'#fff'"
10
+ :headerBtns="useHeaderBtns"
11
+ :hasSaveBtn="isModified"
12
+ :save-btn-tooltip="$t('save')"
13
+ :close-btn-tooltip="$t('close')"
14
+ @click-btns="clickBtns"
15
+ @click-save="clickSave"
16
+ @click-close="clickClose"
17
+ @resize="resizeDialog"
18
+ >
19
+ <template v-slot:content>
20
+ <div>
21
+
22
+ <div
23
+ style="border-bottom:1px solid #ddd; background:#fff;"
24
+ v-domresize
25
+ @domresize="resizeHead"
26
+ >
27
+
28
+ <!-- 功能區 -->
29
+ <div style="padding:5px; background:#fff; display:flex; align-items:center;">
30
+
31
+ <template>
32
+
33
+ <WButtonCircle
34
+ :paddingStyle="{v:6,h:6}"
35
+ :tooltip="$t('cpemiCheckAllYes')"
36
+ :icon="mdiCheckboxMultipleMarked"
37
+ :backgroundColor="'#fff'"
38
+ :backgroundColorHover="'#f2f2f2'"
39
+ _textColor="'#eee'"
40
+ _textColorHover="'#fff'"
41
+ :iconColor="'#444'"
42
+ :iconColorHover="'#222'"
43
+ :shadow="false"
44
+ @click="toggleItemsEnableAllYes"
45
+ ></WButtonCircle>
46
+
47
+ <div style="padding-left:6px;"></div>
48
+
49
+ </template>
50
+
51
+ <template>
52
+
53
+ <WButtonCircle
54
+ :paddingStyle="{v:6,h:6}"
55
+ :tooltip="$t('cpemiCheckAllNo')"
56
+ :icon="mdiCheckboxMultipleBlankOutline"
57
+ :backgroundColor="'#fff'"
58
+ :backgroundColorHover="'#f2f2f2'"
59
+ _textColor="'#eee'"
60
+ _textColorHover="'#fff'"
61
+ :iconColor="'#444'"
62
+ :iconColorHover="'#222'"
63
+ :shadow="false"
64
+ @click="toggleItemsEnableAllNo"
65
+ ></WButtonCircle>
66
+
67
+ <div style="padding-left:6px;"></div>
68
+
69
+ </template>
70
+
71
+ <template>
72
+
73
+ <WButtonCircle
74
+ :paddingStyle="{v:6,h:6}"
75
+ :tooltip="$t('cpemiCheckAllInv')"
76
+ :icon="mdiCodeTagsCheck"
77
+ :backgroundColor="'#fff'"
78
+ :backgroundColorHover="'#f2f2f2'"
79
+ _textColor="'#eee'"
80
+ _textColorHover="'#fff'"
81
+ :iconColor="'#444'"
82
+ :iconColorHover="'#222'"
83
+ :shadow="false"
84
+ @click="toggleItemsEnableAllInv"
85
+ ></WButtonCircle>
86
+
87
+ <div style="padding-left:6px;"></div>
88
+
89
+ </template>
90
+
91
+ <template v-if="hasItemsCheck">
92
+
93
+ <WButtonCircle
94
+ :paddingStyle="{v:6,h:6}"
95
+ :tooltip="$t('cpemiDeleteCheckTargets')"
96
+ :icon="mdiTrashCanOutline"
97
+ :backgroundColor="'#fff'"
98
+ :backgroundColorHover="'#f2f2f2'"
99
+ _textColor="'#eee'"
100
+ _textColorHover="'#fff'"
101
+ :iconColor="'#444'"
102
+ :iconColorHover="'#222'"
103
+ :shadow="false"
104
+ @click="deleteItemsCheck"
105
+ ></WButtonCircle>
106
+
107
+ <div style="padding-left:6px;"></div>
108
+
109
+ </template>
110
+
111
+ </div>
112
+
113
+ </div>
114
+
115
+ <template v-if="items">
116
+ <WAggridVueDyn
117
+ ref="rftable"
118
+ :style="`width:100%;`"
119
+ :height="contentHeight"
120
+ :opt="opt"
121
+ >
122
+ </WAggridVueDyn>
123
+ </template>
124
+
125
+ <div style="padding:10px 15px; font-size:0.8rem;" v-else>
126
+ {{$t('waitingData')}}
127
+ </div>
128
+
129
+ </div>
130
+ </template>
131
+ </WDialog>
132
+ </template>
133
+
134
+ <script>
135
+ import { mdiDeleteForever, mdiFullscreen, mdiFullscreenExit, mdiFormatListCheckbox, mdiFileTree, mdiTrashCanOutline, mdiCheckboxMultipleBlankOutline, mdiCheckboxMultipleMarked, mdiCodeTagsCheck } from '@mdi/js/mdi.js'
136
+ import Vue from 'vue'
137
+ import JSON5 from 'json5'
138
+ import get from 'lodash-es/get.js'
139
+ import set from 'lodash-es/set.js'
140
+ import each from 'lodash-es/each.js'
141
+ import map from 'lodash-es/map.js'
142
+ import trim from 'lodash-es/trim.js'
143
+ import uniq from 'lodash-es/uniq.js'
144
+ import find from 'lodash-es/find.js'
145
+ import size from 'lodash-es/size.js'
146
+ import filter from 'lodash-es/filter.js'
147
+ import join from 'lodash-es/join.js'
148
+ import sortBy from 'lodash-es/sortBy.js'
149
+ import cloneDeep from 'lodash-es/cloneDeep.js'
150
+ import genPm from 'wsemi/src/genPm.mjs'
151
+ import sep from 'wsemi/src/sep.mjs'
152
+ import delay from 'wsemi/src/delay.mjs'
153
+ import iseobj from 'wsemi/src/iseobj.mjs'
154
+ import isestr from 'wsemi/src/isestr.mjs'
155
+ import WDialog from 'w-component-vue/src/components/WDialog.vue'
156
+ import WText from 'w-component-vue/src/components/WText.vue'
157
+ import WTextSuggest from 'w-component-vue/src/components/WTextSuggest.vue'
158
+ import WSwitch from 'w-component-vue/src/components/WSwitch.vue'
159
+ import WCheckbox from 'w-component-vue/src/components/WCheckbox.vue'
160
+ import WIcon from 'w-component-vue/src/components/WIcon.vue'
161
+ import WButtonChip from 'w-component-vue/src/components/WButtonChip.vue'
162
+ import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
163
+ import WAggridVueDyn from 'w-component-vue/src/components/WAggridVueDyn.vue'
164
+
165
+
166
+ export default {
167
+ components: {
168
+ WDialog,
169
+ WText,
170
+ WTextSuggest,
171
+ WSwitch,
172
+ WCheckbox,
173
+ WIcon,
174
+ WButtonChip,
175
+ WButtonCircle,
176
+ WAggridVueDyn,
177
+ },
178
+ props: {
179
+ },
180
+ data: function() {
181
+ return {
182
+ mdiDeleteForever,
183
+ mdiFullscreen,
184
+ mdiFullscreenExit,
185
+ mdiFormatListCheckbox,
186
+ mdiFileTree,
187
+ mdiTrashCanOutline,
188
+ mdiCheckboxMultipleBlankOutline,
189
+ mdiCheckboxMultipleMarked,
190
+ mdiCodeTagsCheck,
191
+
192
+ bShow: false,
193
+ pm: null,
194
+
195
+ fullscreen: false,
196
+
197
+ panelWidth: 100,
198
+ panelHeight: 100,
199
+ headHeight: 100,
200
+
201
+ isModified: false,
202
+
203
+ user: null,
204
+
205
+ items: [],
206
+ itemsCheck: [],
207
+ opt: null,
208
+
209
+ }
210
+ },
211
+ mounted: function() {
212
+ //console.log('mounted')
213
+
214
+ let vo = this
215
+
216
+ //set
217
+ Vue.prototype.$dg.showVeCgrups = vo.show
218
+ Vue.prototype.$dg.toggleItemModeByName = vo.toggleItemModeByName
219
+ Vue.prototype.$dg.toggleItemEnableByName = vo.toggleItemEnableByName
220
+
221
+ },
222
+ computed: {
223
+
224
+ targets: function() {
225
+ let rs = get(this, `$store.state.targets`)
226
+ rs = sortBy(rs, 'order')
227
+ return rs
228
+ },
229
+
230
+ pemis: function() {
231
+ let rs = get(this, `$store.state.pemis`)
232
+ rs = sortBy(rs, 'order')
233
+ return rs
234
+ },
235
+
236
+ grups: function() {
237
+ let rs = get(this, `$store.state.grups`)
238
+ rs = sortBy(rs, 'order')
239
+ return rs
240
+ },
241
+
242
+ users: function() {
243
+ let rs = get(this, `$store.state.users`)
244
+ rs = sortBy(rs, 'order')
245
+ return rs
246
+ },
247
+
248
+ kpHeaderBtns: function() {
249
+ let vo = this
250
+ let kp = {
251
+ // delete: {
252
+ // icon: mdiDeleteForever,
253
+ // tooltip: `${vo.$t('delete')}${vo.tableNameCht}`,
254
+ // evName: 'delete'
255
+ // },
256
+ toFullscreen: {
257
+ icon: mdiFullscreen,
258
+ tooltip: vo.$t('screenFull'),
259
+ evName: 'toFullscreen'
260
+ },
261
+ toNormalscreen: {
262
+ icon: mdiFullscreenExit,
263
+ tooltip: vo.$t('screenNormal'),
264
+ evName: 'toNormalscreen'
265
+ },
266
+ }
267
+ return kp
268
+ },
269
+
270
+ useHeaderBtns: function() {
271
+ let vo = this
272
+ let bts = []
273
+ if (true) {
274
+ let k = vo.fullscreen ? 'toNormalscreen' : 'toFullscreen'
275
+ bts = [
276
+ ...bts,
277
+ vo.kpHeaderBtns[k]
278
+ ]
279
+ }
280
+ // if (vo.useDelete) {
281
+ // let k = 'delete'
282
+ // bts = [
283
+ // ...bts,
284
+ // vo.kpHeaderBtns[k]
285
+ // ]
286
+ // }
287
+ return bts
288
+ },
289
+
290
+ contentHeight: function() {
291
+ let vo = this
292
+
293
+ //h
294
+ let h = vo.panelHeight - vo.headHeight
295
+ h = Math.max(h, 0)
296
+
297
+ return h
298
+ },
299
+
300
+ hasItemsCheck: function() {
301
+ let vo = this
302
+
303
+ //h
304
+ let b = vo.itemsCheck.length > 0
305
+
306
+ return b
307
+ },
308
+
309
+ },
310
+ methods: {
311
+
312
+ resizeDialog: function(msg) {
313
+ // console.log('methods resizeDialog', msg)
314
+
315
+ let vo = this
316
+
317
+ //panelWidth, panelHeight
318
+ vo.panelWidth = msg.panelWidth
319
+ vo.panelHeight = msg.contentHeightMax
320
+
321
+ },
322
+
323
+ resizeHead: function(msg) {
324
+ // console.log('methods resizeHead', msg)
325
+
326
+ let vo = this
327
+
328
+ //headHeight
329
+ vo.headHeight = msg.snew.offsetHeight
330
+
331
+ },
332
+
333
+ genOpt: function() {
334
+ // console.log('methods genOpt')
335
+
336
+ let vo = this
337
+
338
+ //default
339
+ vo.itemsCheck = []
340
+
341
+ //opt
342
+ let opt = null
343
+ if (size(vo.items) > 0) {
344
+
345
+ //ks
346
+ let ks = [
347
+ 'name',
348
+ 'mode',
349
+ 'enable',
350
+ ]
351
+ // console.log('ks', ks)
352
+
353
+ //kpHead
354
+ let kpHead = {
355
+ 'name': vo.$t('pemiName'),
356
+ 'mode': vo.$t('pemiMode'),
357
+ 'enable': vo.$t('pemiEnable'),
358
+ }
359
+
360
+ //opt
361
+ opt = {
362
+ language: vo.$t('aggridLanguage'),
363
+ rows: vo.items,
364
+ keys: ks,
365
+ kpHead,
366
+ autoFitColumn: true,
367
+ defHeadFilter: true,
368
+ defCellAlignH: 'left',
369
+ // kpCellEditable: {
370
+ // 'name': true,
371
+ // 'mode': true,
372
+ // 'enable': true,
373
+ // },
374
+ kpHeadWidth: {
375
+ 'mode': 50,
376
+ 'enable': 50,
377
+ },
378
+ // kpRowDrag: {
379
+ // 'name': true,
380
+ // },
381
+ // kpHeadFilter: {
382
+ // 'enable': false,
383
+ // },
384
+ kpHeadFilterType: {
385
+ 'name': 'text',
386
+ 'mode': 'text',
387
+ 'enable': 'text',
388
+ },
389
+ // kpHeadCheckBox: {
390
+ // 'name': true,
391
+ // },
392
+ kpCellRender: {
393
+ 'name': (v, k, r) => {
394
+ // console.log('kpCellRender name', v)
395
+
396
+ return v
397
+ },
398
+ 'mode': (v, k, r) => {
399
+ // console.log('kpCellRender mode', v)
400
+
401
+ //name
402
+ let name = get(r, 'name', '')
403
+ // console.log('name', name, k, r)
404
+
405
+ //mode
406
+ let mode = get(r, 'mode', '')
407
+ // console.log('mode', mode, k, r)
408
+
409
+ let t = `
410
+ <select onchange="$vo.$dg.toggleItemModeByName('${name}',this.value)">
411
+ <option value="OR" ${mode === 'OR' ? 'selected' : ''}>OR</option>
412
+ <option value="AND" ${mode === 'AND' ? 'selected' : ''}>AND</option>
413
+ </select>
414
+ `
415
+
416
+ return t
417
+ },
418
+ 'enable': (v, k, r) => {
419
+ // console.log('kpCellRender enable', v, k, r)
420
+
421
+ //name
422
+ let name = get(r, 'name', '')
423
+ // console.log('name', name, k, r)
424
+
425
+ let t = `
426
+ <input type="checkbox" ${v === 'y' ? 'checked' : ''} onclick="$vo.$dg.toggleItemEnableByName('${name}')" />
427
+ `
428
+
429
+ return t
430
+ },
431
+ },
432
+ rowsChange: (rs) => {
433
+ // console.log('rowsChange', rs)
434
+ // console.log('rowsChange cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
435
+
436
+ //isModified
437
+ vo.isModified = true
438
+
439
+ },
440
+ rowChecked: (rs) => {
441
+ // console.log('rowChecked', rs)
442
+ // console.log('rowChecked cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
443
+
444
+ //save itemsCheck
445
+ vo.itemsCheck = cloneDeep(rs)
446
+
447
+ },
448
+ }
449
+ // console.log('opt', opt)
450
+
451
+ }
452
+
453
+ //save
454
+ vo.opt = opt
455
+
456
+ },
457
+
458
+ deleteItemsCheck: function() {
459
+ // console.log('method deleteItemsCheck')
460
+
461
+ let vo = this
462
+
463
+ //check
464
+ if (size(vo.itemsCheck) === 0) {
465
+ return
466
+ }
467
+
468
+ //cloneDeep
469
+ let rows = get(vo, 'opt.rows', [])
470
+
471
+ //cloneDeep
472
+ rows = cloneDeep(rows)
473
+
474
+ //filter
475
+ each(vo.itemsCheck, (v) => {
476
+ // console.log('v', v)
477
+ let name = get(v, 'data.name', '')
478
+ if (!isestr(name)) {
479
+ console.log(`invalid name`)
480
+ return true //跳出換下一個
481
+ }
482
+ rows = filter(rows, (vv) => {
483
+ return vv.name !== name
484
+ })
485
+ })
486
+
487
+ //clear
488
+ vo.itemsCheck = []
489
+
490
+ //save
491
+ vo.opt.rows = rows
492
+ // console.log('deleteItemsCheck cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
493
+
494
+ //isModified
495
+ vo.isModified = true
496
+
497
+ },
498
+
499
+ refresh: function() {
500
+ let vo = this
501
+
502
+ //cmp
503
+ let cmp = get(vo, '$refs.rftable.$refs.$self')
504
+ // console.log('cmp', cmp)
505
+
506
+ //refresh, 因set不會觸發kpCellRender, 故須另外調用組件函數refresh, 進而觸發kpCellRender, 使能更新數據
507
+ cmp.refresh()
508
+
509
+ },
510
+
511
+ getDisplayData: function() {
512
+ let vo = this
513
+
514
+ //cmp
515
+ let cmp = get(vo, '$refs.rftable.$refs.$self')
516
+ // console.log('cmp', cmp)
517
+
518
+ //getDisplayData
519
+ let rows = cmp.getDisplayData()
520
+
521
+ return rows
522
+ },
523
+
524
+ toggleItemModeByName: function(name, mode) {
525
+ // console.log('toggleItemModeByName', name, mode)
526
+
527
+ let vo = this
528
+
529
+ //check
530
+ if (!isestr(name)) {
531
+ vo.$alert(`${vo.$t('cpemiEditNoName')}`, { type: 'error' })
532
+ return
533
+ }
534
+
535
+ //rows
536
+ let rows = get(vo, 'opt.rows', [])
537
+
538
+ //find
539
+ let r = null
540
+ let kr = null
541
+ each(rows, (v, k) => {
542
+ if (get(v, 'name', '') === name) {
543
+ r = v
544
+ kr = k
545
+ return false //跳出
546
+ }
547
+ })
548
+
549
+ //check
550
+ if (!iseobj(r)) {
551
+ vo.$alert(`${vo.$t('cpemiEditNoPemi')}`, { type: 'error' })
552
+ return
553
+ }
554
+
555
+ //mode
556
+ // let mode = th.value
557
+ console.log('mode', mode)
558
+
559
+ //set
560
+ set(vo, `opt.rows[${kr}].mode`, mode)
561
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
562
+
563
+ //refresh
564
+ vo.refresh()
565
+
566
+ //isModified
567
+ vo.isModified = true
568
+
569
+ },
570
+
571
+ toggleItemEnableByName: function(name) {
572
+ // console.log('toggleItemEnableByName', name)
573
+
574
+ let vo = this
575
+
576
+ //check
577
+ if (!isestr(name)) {
578
+ vo.$alert(`${vo.$t('cpemiEditNoName')}`, { type: 'error' })
579
+ return
580
+ }
581
+
582
+ //rows
583
+ let rows = get(vo, 'opt.rows', [])
584
+
585
+ //find
586
+ let r = null
587
+ let kr = null
588
+ each(rows, (v, k) => {
589
+ if (get(v, 'name', '') === name) {
590
+ r = v
591
+ kr = k
592
+ return false //跳出
593
+ }
594
+ })
595
+
596
+ //check
597
+ if (!iseobj(r)) {
598
+ vo.$alert(`${vo.$t('cpemiEditNoPemi')}`, { type: 'error' })
599
+ return
600
+ }
601
+
602
+ //enable
603
+ let _enable = get(r, 'enable', 'n')
604
+ let enable = _enable === 'y' ? 'n' : 'y'
605
+ // console.log('enable', enable)
606
+
607
+ //set
608
+ set(vo, `opt.rows[${kr}].enable`, enable)
609
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
610
+
611
+ //refresh
612
+ vo.refresh()
613
+
614
+ //isModified
615
+ vo.isModified = true
616
+
617
+ },
618
+
619
+ toggleItemsEnableAllYes: function() {
620
+ // console.log('toggleItemsEnableAllYes')
621
+
622
+ let vo = this
623
+
624
+ //rows
625
+ let rows = get(vo, 'opt.rows', [])
626
+ // console.log('rows', rows)
627
+
628
+ //kpRow
629
+ let kpRow = {}
630
+ each(rows, (r, kr) => {
631
+ kpRow[r.name] = kr
632
+ })
633
+
634
+ //rowsEff
635
+ let rowsEff = vo.getDisplayData()
636
+ // console.log('rowsEff', rowsEff)
637
+
638
+ //toggle
639
+ each(rowsEff, (r) => {
640
+
641
+ //kr
642
+ let kr = kpRow[r.name]
643
+
644
+ //set
645
+ set(vo, `opt.rows[${kr}].enable`, 'y')
646
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
647
+
648
+ })
649
+
650
+ //refresh
651
+ vo.refresh()
652
+
653
+ //isModified
654
+ vo.isModified = true
655
+
656
+ },
657
+
658
+ toggleItemsEnableAllNo: function() {
659
+ // console.log('toggleItemsEnableAllNo')
660
+
661
+ let vo = this
662
+
663
+ //rows
664
+ let rows = get(vo, 'opt.rows', [])
665
+ // console.log('rows', rows)
666
+
667
+ //kpRow
668
+ let kpRow = {}
669
+ each(rows, (r, kr) => {
670
+ kpRow[r.name] = kr
671
+ })
672
+
673
+ //rowsEff
674
+ let rowsEff = vo.getDisplayData()
675
+ // console.log('rowsEff', rowsEff)
676
+
677
+ //toggle
678
+ each(rowsEff, (r) => {
679
+
680
+ //kr
681
+ let kr = kpRow[r.name]
682
+
683
+ //set
684
+ set(vo, `opt.rows[${kr}].enable`, 'n')
685
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
686
+
687
+ })
688
+
689
+ //refresh
690
+ vo.refresh()
691
+
692
+ //isModified
693
+ vo.isModified = true
694
+
695
+ },
696
+
697
+ toggleItemsEnableAllInv: function() {
698
+ // console.log('toggleItemsEnableAllInv')
699
+
700
+ let vo = this
701
+
702
+ //rows
703
+ let rows = get(vo, 'opt.rows', [])
704
+ // console.log('rows', rows)
705
+
706
+ //kpRow
707
+ let kpRow = {}
708
+ each(rows, (r, kr) => {
709
+ kpRow[r.name] = kr
710
+ })
711
+
712
+ //rowsEff
713
+ let rowsEff = vo.getDisplayData()
714
+ // console.log('rowsEff', rowsEff)
715
+
716
+ //toggle
717
+ each(rowsEff, (r) => {
718
+
719
+ //kr
720
+ let kr = kpRow[r.name]
721
+
722
+ //enable
723
+ let _enable = get(r, 'enable', 'n')
724
+ let enable = _enable === 'y' ? 'n' : 'y'
725
+
726
+ //set
727
+ set(vo, `opt.rows[${kr}].enable`, enable)
728
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
729
+
730
+ })
731
+
732
+ //refresh
733
+ vo.refresh()
734
+
735
+ //isModified
736
+ vo.isModified = true
737
+
738
+ },
739
+
740
+ clickBtns: function(msg) {
741
+ // console.log('clickBtns', msg)
742
+
743
+ let vo = this
744
+
745
+ //evName
746
+ if (msg.evName === 'toFullscreen') {
747
+ vo.fullscreen = true
748
+ }
749
+ else if (msg.evName === 'toNormalscreen') {
750
+ vo.fullscreen = false
751
+ }
752
+
753
+ },
754
+
755
+ clickSave: function(msg) {
756
+ //console.log('methods clickSave', msg)
757
+
758
+ let vo = this
759
+
760
+ async function core() {
761
+
762
+ //show loading
763
+ vo.$ui.updateLoading(true)
764
+
765
+ //delay
766
+ await delay(300)
767
+
768
+ //rows
769
+ let rows = get(vo, 'opt.rows', [])
770
+ // console.log('rows', rows)
771
+
772
+ //kpGrup
773
+ let kpGrup = {}
774
+ each(rows, (r) => {
775
+ let name = get(r, 'name', '')
776
+ let mode = get(r, 'mode', '')
777
+ let enable = get(r, 'enable', '')
778
+ if (!isestr(name)) {
779
+ console.log(`invalid name`)
780
+ return true //跳出換下一個
781
+ }
782
+ if (mode !== 'OR' && mode !== 'AND') {
783
+ console.log(`invalid mode[${mode}]`)
784
+ return true //跳出換下一個
785
+ }
786
+ if (!isestr(enable)) {
787
+ console.log(`invalid enable`)
788
+ return true //跳出換下一個
789
+ }
790
+ kpGrup[name] = {
791
+ mode,
792
+ isActive: enable,
793
+ }
794
+ })
795
+ // console.log('kpGrup', kpGrup)
796
+
797
+ //cgrups
798
+ let cgrups = JSON.stringify(kpGrup)
799
+ // console.log('cgrups', cgrups)
800
+
801
+ return cgrups
802
+ }
803
+
804
+ //core
805
+ core()
806
+ .then((rows) => {
807
+
808
+ //resolve
809
+ vo.pm.resolve(rows)
810
+
811
+ //hide
812
+ vo.bShow = false
813
+
814
+ })
815
+ .catch(() => { })
816
+ .finally(() => {
817
+
818
+ //save按鈕解除loading
819
+ msg.pm.resolve()
820
+
821
+ //hide loading
822
+ vo.$ui.updateLoading(false)
823
+
824
+ })
825
+
826
+ },
827
+
828
+ clickClose: function() {
829
+ //console.log('methods clickClose')
830
+
831
+ let vo = this
832
+
833
+ //reject
834
+ vo.pm.reject('close window')
835
+
836
+ //hide
837
+ vo.bShow = false
838
+
839
+ },
840
+
841
+ show: function (user) {
842
+ // console.log('methods show', user)
843
+
844
+ let vo = this
845
+
846
+ //pm
847
+ vo.pm = genPm()
848
+
849
+ //default
850
+ vo.isModified = false
851
+
852
+ //cloneDeep
853
+ user = cloneDeep(user)
854
+
855
+ //cgrups
856
+ let cgrups = get(user, 'cgrups', '')
857
+ // console.log('cgrups', cgrups)
858
+
859
+ //kpGrup
860
+ let kpGrup = {}
861
+ if (isestr(cgrups)) {
862
+ try {
863
+ kpGrup = JSON5.parse(cgrups)
864
+ }
865
+ catch (err) {
866
+ console.log('cgrups', cgrups)
867
+ console.log('err', err)
868
+ }
869
+ }
870
+ // console.log('kpGrup', kpGrup)
871
+
872
+ //items
873
+ let items = map(vo.grups, (v) => {
874
+ // console.log('grups v', v)
875
+
876
+ //p
877
+ let p = get(kpGrup, v.name, null)
878
+ // console.log('p', p)
879
+
880
+ //name
881
+ let name = v.name
882
+ // console.log('name', name)
883
+
884
+ //mode
885
+ let mode = get(p, 'mode', '')
886
+ if (mode !== 'OR' && mode !== 'AND') {
887
+ mode = 'OR'
888
+ }
889
+ // console.log('mode', mode)
890
+
891
+ //enable
892
+ let _enable = get(p, 'isActive', '')
893
+ let enable = _enable === 'y' ? 'y' : 'n'
894
+ // console.log('isActive', enable)
895
+
896
+ //r
897
+ let r = {
898
+ name,
899
+ mode,
900
+ enable,
901
+ }
902
+ // console.log('r', r)
903
+
904
+ return r
905
+ })
906
+ // console.log('items', items)
907
+
908
+ //save
909
+ vo.user = user
910
+ vo.items = items
911
+
912
+ //genOpt
913
+ vo.genOpt()
914
+
915
+ //bShow
916
+ vo.bShow = true
917
+
918
+ return vo.pm
919
+ },
920
+
921
+ }
922
+ }
923
+ </script>
924
+
925
+ <style scoped>
926
+ </style>