w-web-perm 1.0.24 → 1.0.26

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 (43) hide show
  1. package/dist/css/{app.f22995d1.css → app.d0e43dcc.css} +1 -1
  2. package/dist/index.tmp +9 -1
  3. package/dist/js/app-legacy.b0850281.js +2 -0
  4. package/dist/js/app-legacy.b0850281.js.map +1 -0
  5. package/dist/js/app.db01fef5.js +2 -0
  6. package/dist/js/app.db01fef5.js.map +1 -0
  7. package/dist/js/chunk-vendors-legacy.0432e7bc.js +13 -0
  8. package/dist/js/chunk-vendors-legacy.0432e7bc.js.map +1 -0
  9. package/dist/js/chunk-vendors.0432e7bc.js +13 -0
  10. package/dist/js/chunk-vendors.0432e7bc.js.map +1 -0
  11. package/dist/w-web-perm.umd.js +2 -2
  12. package/dist/w-web-perm.umd.js.map +1 -1
  13. package/docs/WWebPerm.html +1 -1
  14. package/docs/WWebPerm.mjs.html +30 -2
  15. package/docs/index.html +1 -1
  16. package/package.json +5 -5
  17. package/public/index.html +8 -0
  18. package/server/WWebPerm.mjs +29 -1
  19. package/src/App.vue +6 -1
  20. package/src/components/Layout.vue +0 -11
  21. package/src/components/LayoutContent.vue +22 -22
  22. package/src/components/LayoutContentGrups.vue +378 -97
  23. package/src/components/LayoutContentPemis.vue +422 -100
  24. package/src/components/LayoutContentTargets.vue +225 -55
  25. package/src/components/LayoutContentUsers.vue +256 -69
  26. package/src/components/VeCgrups.vue +28 -35
  27. package/src/components/VeCpemis.vue +28 -35
  28. package/src/components/VeCrules.vue +25 -31
  29. package/src/components/VeGrupBlngUsers.vue +63 -36
  30. package/src/components/VePemiBlngGrups.vue +63 -36
  31. package/src/schema/tables/pemis.mjs +1 -1
  32. package/src/store/mutations.mjs +77 -10
  33. package/srv.mjs +9 -1
  34. package/tableTags-web-perm.json +1 -1
  35. package/dist/js/app-legacy.128a1ced.js +0 -2
  36. package/dist/js/app-legacy.128a1ced.js.map +0 -1
  37. package/dist/js/app.128a1ced.js +0 -2
  38. package/dist/js/app.128a1ced.js.map +0 -1
  39. package/dist/js/chunk-vendors-legacy.d89048a8.js +0 -13
  40. package/dist/js/chunk-vendors-legacy.d89048a8.js.map +0 -1
  41. package/dist/js/chunk-vendors.d89048a8.js +0 -13
  42. package/dist/js/chunk-vendors.d89048a8.js.map +0 -1
  43. package/g.mjs +0 -0
@@ -3,11 +3,11 @@
3
3
  style="height:100%;"
4
4
  v-domresize
5
5
  @domresize="resizePanel"
6
- :changePemis="changePemis"
6
+ :changeParams="changeParams"
7
7
  >
8
8
 
9
9
  <div
10
- style="border-bottom:1px solid #ddd; background:#fff;"
10
+ style="_border-bottom:1px solid #ddd; background:#fff;"
11
11
  v-domresize
12
12
  @domresize="resizeHead"
13
13
  >
@@ -19,20 +19,96 @@
19
19
  <WIcon
20
20
  :icon="mdiStackOverflow"
21
21
  :color="'#000'"
22
- :size="26"
22
+ :size="32"
23
23
  ></WIcon>
24
24
 
25
- <div style="padding-left:10px; font-size:1.4rem; color:#000;">
26
- {{$t('managementPemis')}}
25
+ <div style="padding-left:12px;">
26
+
27
+ <div style="font-size:1.4rem; color:#000;">
28
+ {{$t('managementPemis')}}
29
+ </div>
30
+
31
+ <div style="padding-top:2px; font-size:0.8rem; color:#666;">
32
+ {{$t('managementPemisMsg')}}
33
+ </div>
34
+
27
35
  </div>
28
36
 
29
37
  </div>
30
38
  </div>
31
39
 
32
40
  <!-- 功能區 -->
33
- <div style="padding:5px; border-top:1px solid #ddd; display:flex; align-items:center;">
41
+ <div
42
+ style="padding:5px; border-top:1px solid #ddd; display:flex; align-items:center;"
43
+ _v-if="showIsEditable || isEditable"
44
+ >
45
+
46
+ <template v-if="showIsEditable">
47
+
48
+ <div style="padding:6px 0px 4px 4px;">
49
+ <WSwitch
50
+ v-model="isEditable"
51
+ :text="$t('modeEdit')"
52
+ ></WSwitch>
53
+ </div>
54
+
55
+ <div style="padding-left:10px;"></div>
56
+
57
+ </template>
58
+
59
+ <template v-if="true">
60
+
61
+ <WPopup
62
+ :isolated="true"
63
+ _show=""
64
+ _hide=""
65
+ >
66
+ <template v-slot:trigger>
67
+ <WButtonCircle
68
+ :paddingStyle="{v:6,h:6}"
69
+ :tooltip="$t('showTabCols')"
70
+ :icon="mdiTableHeadersEye"
71
+ :backgroundColor="'#fff'"
72
+ :backgroundColorHover="'#f2f2f2'"
73
+ _textColor="'#eee'"
74
+ _textColorHover="'#fff'"
75
+ :iconColor="'#444'"
76
+ :iconColorHover="'#222'"
77
+ :shadow="false"
78
+ _click=""
79
+ ></WButtonCircle>
80
+ </template>
81
+
82
+ <template v-slot:content>
83
+ <div style="padding:10px 0px 10px 0px;">
84
+
85
+ <div style="padding:7px 10px; font-size:0.85rem; color:#222; background:#f2f2f2;">
86
+ {{$t('showTabCols')}}
87
+ </div>
88
+
89
+ <div style="padding:7px 9px 0px 7px;">
90
+ <WInputCheckbox
91
+ :items="tabKeysPick"
92
+ v-model="tabKeysShow"
93
+ @input="toggleTabKeys"
94
+ >
95
+ <template v-slot="props">
96
+ <div style="padding-left:3px; display:flex; align-items:center; font-size:0.85rem; height:24px; cursor:pointer;">
97
+ {{getHead(props.item.data)}}
98
+ </div>
99
+ </template>
100
+ </WInputCheckbox>
101
+ </div>
34
102
 
35
- <template>
103
+ </div>
104
+ </template>
105
+ </WPopup>
106
+
107
+ <div style="padding-left:4px;"></div>
108
+
109
+ </template>
110
+
111
+ <template v-if="isEditable">
36
112
 
37
113
  <WButtonCircle
38
114
  :paddingStyle="{v:6,h:6}"
@@ -48,11 +124,11 @@
48
124
  @click="addItem"
49
125
  ></WButtonCircle>
50
126
 
51
- <div style="padding-left:6px;"></div>
127
+ <div style="padding-left:4px;"></div>
52
128
 
53
129
  </template>
54
130
 
55
- <template v-if="hasItemCheckOne">
131
+ <template v-if="isEditable && hasItemCheckOne">
56
132
 
57
133
  <WButtonCircle
58
134
  :paddingStyle="{v:6,h:6}"
@@ -68,11 +144,11 @@
68
144
  @click="copyItem"
69
145
  ></WButtonCircle>
70
146
 
71
- <div style="padding-left:6px;"></div>
147
+ <div style="padding-left:4px;"></div>
72
148
 
73
149
  </template>
74
150
 
75
- <template v-if="hasItemsCheck">
151
+ <template v-if="isEditable && hasItemsCheck">
76
152
 
77
153
  <WButtonCircle
78
154
  :paddingStyle="{v:6,h:6}"
@@ -88,11 +164,11 @@
88
164
  @click="deleteItemsCheck"
89
165
  ></WButtonCircle>
90
166
 
91
- <div style="padding-left:6px;"></div>
167
+ <div style="padding-left:4px;"></div>
92
168
 
93
169
  </template>
94
170
 
95
- <template v-if="isModified">
171
+ <template v-if="isEditable && isModified">
96
172
 
97
173
  <WButtonCircle
98
174
  :paddingStyle="{v:6,h:6}"
@@ -108,7 +184,7 @@
108
184
  @click="savePemis"
109
185
  ></WButtonCircle>
110
186
 
111
- <div style="padding-left:6px;"></div>
187
+ <div style="padding-left:4px;"></div>
112
188
 
113
189
  </template>
114
190
 
@@ -140,7 +216,7 @@
140
216
  </template>
141
217
 
142
218
  <script>
143
- import { mdiStackOverflow, mdiVectorPolylinePlus, mdiCheckboxMarkedCircle, mdiCloudUploadOutline, mdiTrashCanOutline, mdiPlus, mdiPencilOutline, mdiContentCopy } from '@mdi/js/mdi.js'
219
+ import { mdiStackOverflow, mdiVectorPolylinePlus, mdiCheckboxMarkedCircle, mdiCloudUploadOutline, mdiTrashCanOutline, mdiTableHeadersEye, mdiPlus, mdiPencilOutline, mdiContentCopy } from '@mdi/js/mdi.js'
144
220
  import JSON5 from 'json5'
145
221
  import get from 'lodash-es/get.js'
146
222
  import set from 'lodash-es/set.js'
@@ -154,15 +230,22 @@ import haskey from 'wsemi/src/haskey.mjs'
154
230
  import isestr from 'wsemi/src/isestr.mjs'
155
231
  import iseobj from 'wsemi/src/iseobj.mjs'
156
232
  import cstr from 'wsemi/src/cstr.mjs'
233
+ import arrPull from 'wsemi/src/arrPull.mjs'
157
234
  import WIcon from 'w-component-vue/src/components/WIcon.vue'
235
+ import WSwitch from 'w-component-vue/src/components/WSwitch.vue'
158
236
  import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
237
+ import WPopup from 'w-component-vue/src/components/WPopup.vue'
238
+ import WInputCheckbox from 'w-component-vue/src/components/WInputCheckbox.vue'
159
239
  import WAggridVueDyn from 'w-component-vue/src/components/WAggridVueDyn.vue'
160
240
 
161
241
 
162
242
  export default {
163
243
  components: {
164
244
  WIcon,
245
+ WSwitch,
165
246
  WButtonCircle,
247
+ WPopup,
248
+ WInputCheckbox,
166
249
  WAggridVueDyn,
167
250
  },
168
251
  props: {
@@ -178,6 +261,7 @@ export default {
178
261
  mdiCheckboxMarkedCircle,
179
262
  mdiCloudUploadOutline,
180
263
  mdiTrashCanOutline,
264
+ mdiTableHeadersEye,
181
265
  mdiPlus,
182
266
  mdiPencilOutline,
183
267
  mdiContentCopy,
@@ -187,8 +271,46 @@ export default {
187
271
  headHeight: 100,
188
272
 
189
273
  firstLoading: true,
274
+ firstSetting: true,
275
+ showIsEditable: false,
276
+ isEditable: false,
190
277
  isModified: false,
191
278
 
279
+ tabKeys: [
280
+ 'id',
281
+ 'name',
282
+ 'description',
283
+ 'from',
284
+ 'belongGrups',
285
+ 'crules',
286
+ 'userId',
287
+ 'timeCreate',
288
+ 'userIdUpdate',
289
+ 'timeUpdate',
290
+ ],
291
+ tabKeysPick: [
292
+ 'name',
293
+ 'description',
294
+ 'from',
295
+ 'belongGrups',
296
+ 'crules',
297
+ 'userId',
298
+ 'timeCreate',
299
+ 'userIdUpdate',
300
+ 'timeUpdate',
301
+ ],
302
+ tabKeysShow: [
303
+ 'name',
304
+ 'description',
305
+ // 'from',
306
+ 'belongGrups',
307
+ 'crules',
308
+ // 'userId',
309
+ // 'timeCreate',
310
+ // 'userIdUpdate',
311
+ // 'timeUpdate',
312
+ ],
313
+
192
314
  items: [],
193
315
  itemsCheck: [],
194
316
  opt: null,
@@ -204,9 +326,24 @@ export default {
204
326
  vo.$dg.showVePemiBlngGrupsById = vo.showVePemiBlngGrupsById
205
327
  vo.$dg.showVeCrulesById = vo.showVeCrulesById
206
328
 
329
+ //firstSetting
330
+ if (vo.firstSetting) {
331
+ // console.log('webInfor', vo.webInfor)
332
+ let showModeEditPemis = get(vo, 'webInfor.showModeEditPemis', '')
333
+ vo.showIsEditable = showModeEditPemis === 'y'
334
+ let modeEditPemis = get(vo, 'webInfor.modeEditPemis', '')
335
+ vo.isEditable = modeEditPemis === 'y'
336
+ vo.firstSetting = false
337
+ }
338
+
207
339
  },
208
340
  computed: {
209
341
 
342
+ webInfor: function() {
343
+ let wi = get(this, `$store.state.webInfor`)
344
+ return wi
345
+ },
346
+
210
347
  targets: function() {
211
348
  let rs = get(this, `$store.state.targets`)
212
349
  rs = sortBy(rs, 'order')
@@ -231,31 +368,98 @@ export default {
231
368
  return rs
232
369
  },
233
370
 
234
- changePemis: function() {
235
- // console.log('computed changePemis')
371
+ useGrups: function() {
372
+ let vo = this
236
373
 
374
+ //parse cpemis
375
+ let grups = map(vo.grups, (g) => {
376
+
377
+ //cloneDeep
378
+ g = cloneDeep(g)
379
+
380
+ //kpPemi
381
+ let kpPemi = {}
382
+ try {
383
+ // console.log('g.cpemis', g.cpemis)
384
+ kpPemi = JSON5.parse(g.cpemis)
385
+ }
386
+ catch (err) {}
387
+
388
+ //save kpPemi
389
+ g.kpPemi = kpPemi
390
+
391
+ return g
392
+ })
393
+ // console.log('grups', grups)
394
+
395
+ return grups
396
+ },
397
+
398
+ kpPemiGrup: function() {
237
399
  let vo = this
238
400
 
239
- //check
240
- if (size(vo.pemis) === 0) {
241
- return ''
242
- }
401
+ //kp
402
+ let kp = {}
403
+ each(vo.useGrups, (g) => {
404
+ each(g.kpPemi, (v, k) => {
405
+ let isActive = get(v, 'isActive', '')
406
+ if (isActive !== 'y') {
407
+ return true //跳出換下一個
408
+ }
409
+ if (!haskey(kp, k)) {
410
+ kp[k] = []
411
+ }
412
+ kp[k].push({
413
+ grup: g,
414
+ pemi: v,
415
+ })
416
+ })
417
+ })
418
+ // console.log('kp', kp)
243
419
 
244
- //pemis, grups
245
- let pemis = cloneDeep(vo.pemis)
246
- let grups = cloneDeep(vo.grups)
420
+ return kp
421
+ },
247
422
 
248
- //addGrups
249
- let items = vo.addGrups(pemis, grups)
423
+ kpUsePemiGrup: function() {
424
+ let vo = this
425
+
426
+ //_kp
427
+ let _kp = {}
428
+ each(vo.pemis, (v, k) => {
429
+ _kp[v.name] = true
430
+ })
431
+ // console.log('_kp', _kp)
432
+
433
+ //kp
434
+ let kp = {}
435
+ each(vo.kpPemiGrup, (v, k) => {
436
+ if (haskey(_kp, k)) {
437
+ kp[k] = v
438
+ }
439
+ })
440
+ // console.log('kp', kp)
441
+
442
+ return kp
443
+ },
250
444
 
251
- // //cloneDeep
252
- // let items = cloneDeep(vo.pemis)
445
+ changeParams: function() {
446
+ // console.log('computed changeParams')
447
+
448
+ let vo = this
449
+
450
+ //trigger
451
+ let isEditable = vo.isEditable
452
+ let pemis = cloneDeep(vo.pemis)
453
+ let kpUsePemiGrup = cloneDeep(vo.kpUsePemiGrup)
454
+
455
+ //items
456
+ let items = vo.genItems(pemis, kpUsePemiGrup)
253
457
 
254
458
  //save
255
459
  vo.items = items
256
460
 
257
461
  //genOpt
258
- vo.genOpt()
462
+ vo.genOpt({ isEditable })
259
463
 
260
464
  //firstLoading
261
465
  vo.firstLoading = false
@@ -344,6 +548,25 @@ export default {
344
548
  return c
345
549
  },
346
550
 
551
+ kpHead: function() {
552
+ let vo = this
553
+
554
+ let kp = {
555
+ 'id': vo.$t('id'),
556
+ 'name': vo.$t('name'),
557
+ 'description': vo.$t('description'),
558
+ 'from': vo.$t('from'),
559
+ 'belongGrups': vo.$t('belongGrups'),
560
+ 'crules': vo.$t('pemiCrules'),
561
+ 'userId': vo.$t('userId'),
562
+ 'timeCreate': vo.$t('timeCreate'),
563
+ 'userIdUpdate': vo.$t('userIdUpdate'),
564
+ 'timeUpdate': vo.$t('timeUpdate'),
565
+ }
566
+
567
+ return kp
568
+ },
569
+
347
570
  },
348
571
  methods: {
349
572
 
@@ -368,6 +591,16 @@ export default {
368
591
 
369
592
  },
370
593
 
594
+ getHead: function(key) {
595
+ // console.log('methods getHead', key)
596
+
597
+ let vo = this
598
+
599
+ let head = get(vo, `kpHead.${key}`, '')
600
+
601
+ return head
602
+ },
603
+
371
604
  genOpt: function() {
372
605
  // console.log('methods genOpt')
373
606
 
@@ -381,32 +614,39 @@ export default {
381
614
  if (size(vo.items) > 0) {
382
615
 
383
616
  //ks
384
- let ks = [
385
- 'id',
386
- 'name',
387
- 'belongGrups',
388
- 'description',
389
- 'from',
390
- 'crules',
391
- 'userId',
392
- 'timeCreate',
393
- 'userIdUpdate',
394
- 'timeUpdate',
395
- ]
617
+ let ks = vo.tabKeys
396
618
  // console.log('ks', ks)
397
619
 
398
620
  //kpHead
399
- let kpHead = {
400
- 'id': vo.$t('id'),
401
- 'name': vo.$t('name'),
402
- 'belongGrups': vo.$t('belongGrups'),
403
- 'description': vo.$t('description'),
404
- 'from': vo.$t('from'),
405
- 'crules': vo.$t('pemiCrules'),
406
- 'userId': vo.$t('userId'),
407
- 'timeCreate': vo.$t('timeCreate'),
408
- 'userIdUpdate': vo.$t('userIdUpdate'),
409
- 'timeUpdate': vo.$t('timeUpdate'),
621
+ let kpHead = vo.kpHead
622
+
623
+ //kpCellEditable, kpRowDrag, kpHeadCheckBox
624
+ let kpCellEditable = {}
625
+ let kpRowDrag = {}
626
+ let kpHeadCheckBox = {}
627
+ if (vo.isEditable) {
628
+ kpCellEditable = {
629
+ 'name': true,
630
+ 'description': true,
631
+ 'from': true,
632
+ }
633
+ kpRowDrag = {
634
+ 'name': true,
635
+ }
636
+ kpHeadCheckBox = {
637
+ 'name': true,
638
+ }
639
+ }
640
+
641
+ //kpHeadHide
642
+ let kpHeadHide = {
643
+ 'id': true,
644
+ }
645
+ if (true) {
646
+ let tabKeysHide = arrPull(vo.tabKeysPick, vo.tabKeysShow)
647
+ each(tabKeysHide, (k) => {
648
+ kpHeadHide[k] = true
649
+ })
410
650
  }
411
651
 
412
652
  //opt
@@ -416,17 +656,17 @@ export default {
416
656
  keys: ks,
417
657
  kpHead,
418
658
  // autoFitColumn: true,
659
+ defCellEditable: vo.isEditable,
419
660
  defHeadFilter: true,
420
661
  defCellAlignH: 'left',
421
- kpHeadHide: {
422
- 'id': true,
423
- },
662
+ kpHeadHide,
424
663
  kpHeadFixLeft: {
425
664
  'name': true,
426
665
  },
427
666
  defHeadMinWidth: 150,
428
667
  kpHeadWidth: {
429
668
  'name': 300,
669
+ 'description': 300,
430
670
  'belongGrups': 300,
431
671
  'crules': 300,
432
672
  'timeCreate': 220,
@@ -435,26 +675,18 @@ export default {
435
675
  kpHeadFilterType: {
436
676
  'id': 'text',
437
677
  'name': 'text',
438
- 'belongGrups': 'text',
439
678
  'description': 'text',
440
679
  'from': 'text',
680
+ 'belongGrups': 'text',
441
681
  'crules': 'text',
442
682
  'userId': 'text',
443
683
  'timeCreate': 'text',
444
684
  'userIdUpdate': 'text',
445
685
  'timeUpdate': 'text',
446
686
  },
447
- kpCellEditable: {
448
- 'name': true,
449
- 'description': true,
450
- 'from': true,
451
- },
452
- kpRowDrag: {
453
- 'name': true,
454
- },
455
- kpHeadCheckBox: {
456
- 'name': true,
457
- },
687
+ kpCellEditable,
688
+ kpRowDrag,
689
+ kpHeadCheckBox,
458
690
  kpHeadFilter: {
459
691
  'belongGrups': false,
460
692
  'crules': false,
@@ -515,7 +747,7 @@ export default {
515
747
  //因stopPropagation只吃掉訊息, 原本focus會處於原本可focus的cell, 再重複點時會於前個focus的cell出現highlight邊框, 故再多使用preventDefault阻止瀏覽器預設行為, 此等同於return false
516
748
  let t = `
517
749
  <div onclick="event.stopPropagation();event.preventDefault();" onmousedown="event.stopPropagation();event.preventDefault();">
518
- <button style="width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;" onclick="$vo.$dg.showVeCrulesById('${id}')">${vo.$t('pemiEditCrulesSimple')}</button>
750
+ <button style="width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;" onclick="$vo.$dg.showVeCrulesById('${id}')">${vo.getCrulesText(v)}</button>
519
751
  </div>
520
752
  `
521
753
 
@@ -560,45 +792,31 @@ export default {
560
792
 
561
793
  },
562
794
 
563
- addGrups: function(pemis, grups) {
564
- // console.log('method addGrups', pemis, grups)
565
-
795
+ toggleTabKeys: function() {
566
796
  let vo = this
567
797
 
568
- //parse cpemis
569
- grups = map(grups, (g) => {
570
- let kpPemi = JSON5.parse(g.cpemis)
571
- g.kpPemi = kpPemi
572
- return g
573
- })
574
- // console.log('users', users)
798
+ //cmp
799
+ let cmp = get(vo, '$refs.rftable.$refs.$self')
800
+ // console.log('cmp', cmp)
575
801
 
576
- //kp
577
- let kp = {}
578
- each(grups, (g) => {
579
- each(g.kpPemi, (v, k) => {
580
- let isActive = get(v, 'isActive', '')
581
- if (isActive !== 'y') {
582
- return true //跳出換下一個
583
- }
584
- if (!haskey(kp, k)) {
585
- kp[k] = []
586
- }
587
- kp[k].push({
588
- grup: g,
589
- pemi: v,
590
- })
591
- })
592
- })
593
- // console.log('kp', kp)
802
+ //showKeys
803
+ cmp.showKeys(vo.tabKeysShow)
804
+ // console.log('tabKeysShow', vo.tabKeysShow)
805
+
806
+ },
807
+
808
+ genItems: function(pemis, kpUsePemiGrup) {
809
+ // console.log('method genItems', pemis, kpUsePemiGrup)
810
+
811
+ let vo = this
594
812
 
595
813
  //items
596
814
  let items = map(pemis, (p) => {
597
815
 
598
816
  //gs
599
817
  let gs = []
600
- if (haskey(kp, p.name)) {
601
- gs = kp[p.name]
818
+ if (haskey(kpUsePemiGrup, p.name)) {
819
+ gs = kpUsePemiGrup[p.name]
602
820
  }
603
821
  // console.log('gs', gs)
604
822
 
@@ -620,6 +838,7 @@ export default {
620
838
  //save belongGrups, gs
621
839
  p.belongGrups = belongGrups
622
840
  p.gs = gs
841
+ // console.log('p', p)
623
842
 
624
843
  return p
625
844
  })
@@ -642,12 +861,22 @@ export default {
642
861
  //r
643
862
  let r = vo.$ds.pemis.funNew()
644
863
  r.name = vo.$s.getNameNew(rows, 'name', '', vo.$t('pemiAddNameNew'))
864
+ // r.crules = ''
645
865
  r.userId = `{${vo.$t('pemiAddIdNew')}}`
646
866
  r.timeCreate = `{${vo.$t('pemiAddIdNew')}}`
647
867
  r.userIdUpdate = `{${vo.$t('pemiAddIdNew')}}`
648
868
  r.timeUpdate = `{${vo.$t('pemiAddIdNew')}}`
649
869
  // console.log('r', r)
650
870
 
871
+ //belongGrups, gs
872
+ let gs = []
873
+ let belongGrups = vo.$t('pemiBlngRnderNoGrup')
874
+
875
+ //save belongGrups, gs
876
+ r.belongGrups = belongGrups
877
+ r.gs = gs
878
+ // console.log('r', r)
879
+
651
880
  //添加至最首
652
881
  rows = [
653
882
  r,
@@ -714,6 +943,15 @@ export default {
714
943
  r.timeUpdate = `{${vo.$t('pemiAddIdNew')}}`
715
944
  // console.log('r', r)
716
945
 
946
+ //belongGrups, gs
947
+ let gs = []
948
+ let belongGrups = vo.$t('pemiBlngRnderNoGrup')
949
+
950
+ //save belongGrups, gs
951
+ r.belongGrups = belongGrups
952
+ r.gs = gs
953
+ // console.log('r', r)
954
+
717
955
  //添加至最首
718
956
  rows = [
719
957
  r,
@@ -772,6 +1010,83 @@ export default {
772
1010
 
773
1011
  },
774
1012
 
1013
+ fltKpRule: function(kp) {
1014
+ // console.log('fltKpRule', kp)
1015
+
1016
+ let vo = this
1017
+
1018
+ //_kp
1019
+ let _kp = {}
1020
+ each(vo.targets, (v, k) => {
1021
+ _kp[v.id] = true //管控對象須使用id
1022
+ })
1023
+ // console.log('_kp', _kp)
1024
+
1025
+ //kpt
1026
+ let kpt = {}
1027
+ each(kp, (v, k) => {
1028
+ if (haskey(_kp, k)) {
1029
+ kpt[k] = v
1030
+ }
1031
+ })
1032
+
1033
+ return kpt
1034
+ },
1035
+
1036
+ getCrulesText: function(crules) {
1037
+ // console.log('method getCrulesText', crules)
1038
+
1039
+ let vo = this
1040
+
1041
+ //kpRule
1042
+ let kpRule = {}
1043
+ try {
1044
+ // console.log('crules', crules)
1045
+ kpRule = JSON5.parse(crules)
1046
+ }
1047
+ catch (err) {}
1048
+ // console.log('kpRule', kpRule)
1049
+
1050
+ //fltKpRule
1051
+ kpRule = vo.fltKpRule(kpRule)
1052
+ // console.log('kpRule(fltKpRule)', kpRule)
1053
+
1054
+ //vs
1055
+ let vs = []
1056
+ each(kpRule, (v, k) => {
1057
+ // console.log(k, 'v', v)
1058
+
1059
+ //isActive
1060
+ let isActive = v //crules各值為直接儲存y或n
1061
+ if (isActive !== 'y') {
1062
+ return true //跳出換下一個
1063
+ }
1064
+ // console.log(k, '_isActive', _isActive)
1065
+
1066
+ //push
1067
+ vs.push(k)
1068
+
1069
+ })
1070
+
1071
+ //crulesText
1072
+ let crulesText = vo.$t('pemiRnderCrulesNoRule')
1073
+ let t = vo.$t('pemiRnderCrulesHasNRule')
1074
+ let n = size(vs)
1075
+ if (n > 0) {
1076
+ t = t.replace('{n}', n)
1077
+ // if (n === 1) {
1078
+ // t = t.replace('{nms}', `(${vs[0]})`)
1079
+ // }
1080
+ // else {
1081
+ // t = t.replace('{nms}', '')
1082
+ // }
1083
+ t = t.replace('{nms}', '') //管控對象id太長, 顯示按鈕預設寬度小, 故皆僅顯示數量
1084
+ crulesText = t
1085
+ }
1086
+
1087
+ return crulesText
1088
+ },
1089
+
775
1090
  showVePemiBlngGrupsById: function(id) {
776
1091
  // console.log('method showVePemiBlngGrupsById', id)
777
1092
 
@@ -796,6 +1111,7 @@ export default {
796
1111
  return false //跳出
797
1112
  }
798
1113
  })
1114
+ // console.log('r', r)
799
1115
 
800
1116
  //check
801
1117
  if (!iseobj(r)) {
@@ -804,7 +1120,10 @@ export default {
804
1120
  }
805
1121
 
806
1122
  //showVePemiBlngGrups
807
- vo.$dg.showVePemiBlngGrups(r)
1123
+ vo.$dg.showVePemiBlngGrups({
1124
+ isEditable: vo.isEditable,
1125
+ pemi: r,
1126
+ })
808
1127
  .then(() => {})
809
1128
  .catch(() => {})
810
1129
 
@@ -842,7 +1161,10 @@ export default {
842
1161
  }
843
1162
 
844
1163
  //showVeCrules
845
- vo.$dg.showVeCrules(r)
1164
+ vo.$dg.showVeCrules({
1165
+ isEditable: vo.isEditable,
1166
+ pemi: r,
1167
+ })
846
1168
  .then((crules) => {
847
1169
  // console.log('crules', crules)
848
1170