w-web-perm 1.0.83 → 1.0.85

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 (86) hide show
  1. package/dist/css/{chunk-vendors.034f7a87.css → chunk-vendors.18034562.css} +1 -1
  2. package/dist/index.tmp +1 -1
  3. package/dist/js/app-legacy.aaaa3681.js +1 -0
  4. package/dist/js/app.aaaa3681.js +1 -0
  5. package/dist/js/{chunk-vendors-legacy.d0596078.js → chunk-vendors-legacy.7b6ae0b0.js} +3 -3
  6. package/dist/js/{chunk-vendors.d0596078.js → chunk-vendors.7b6ae0b0.js} +3 -3
  7. package/dist/w-web-perm.umd.js +2 -2
  8. package/dist/w-web-perm.umd.js.map +1 -1
  9. package/docs/WWebPerm.html +1 -1
  10. package/docs/global.html +1 -1
  11. package/docs/index.html +1 -1
  12. package/docs/server_WWebPerm.mjs.html +1 -1
  13. package/docs/server_procCore.mjs.html +1 -1
  14. package/docs/src_fetchJson.mjs.html +1 -1
  15. package/package.json +2 -2
  16. package/server/procLang.mjs +12 -4
  17. package/src/components/LayoutContentGrups.vue +6 -6
  18. package/src/components/LayoutContentPemis.vue +6 -6
  19. package/src/components/LayoutContentTargets.vue +2 -2
  20. package/src/components/LayoutContentUsers.vue +5 -3
  21. package/src/components/ModeSelectChip.vue +182 -0
  22. package/src/components/RelationChip.vue +114 -0
  23. package/src/components/RelationChips.vue +375 -0
  24. package/src/components/VeCgrups.vue +23 -20
  25. package/src/components/VeCpemis.vue +21 -20
  26. package/src/components/VeCrules.vue +8 -1
  27. package/src/components/VeGrupBlngUsers.vue +40 -51
  28. package/src/components/VePemiBlngGrups.vue +27 -41
  29. package/tableTags-web-perm.json +1 -1
  30. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/README.md +58 -0
  31. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/server_procLang.mjs.diff +31 -0
  32. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_App.vue.diff +19 -0
  33. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_LayoutContentGrups.vue.diff +40 -0
  34. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_LayoutContentPemis.vue.diff +40 -0
  35. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_ModeSelectChip.vue.new.diff +124 -0
  36. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_RelationChip.vue.new.diff +116 -0
  37. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_RelationChips.vue.new.diff +152 -0
  38. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_VeCgrups.vue.diff +76 -0
  39. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_VeCpemis.vue.diff +76 -0
  40. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_VeCrules.vue.diff +14 -0
  41. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_VeGrupBlngUsers.vue.diff +121 -0
  42. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_VePemiBlngGrups.vue.diff +121 -0
  43. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/server/procLang.mjs +1049 -0
  44. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/App.vue +204 -0
  45. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/LayoutContentGrups.vue +1260 -0
  46. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/LayoutContentPemis.vue +1262 -0
  47. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/ModeSelectChip.vue +121 -0
  48. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/RelationChip.vue +113 -0
  49. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/RelationChips.vue +149 -0
  50. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/VeCgrups.vue +943 -0
  51. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/VeCpemis.vue +943 -0
  52. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/VeCrules.vue +848 -0
  53. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/VeGrupBlngUsers.vue +1157 -0
  54. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/VePemiBlngGrups.vue +1157 -0
  55. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/A-/347/256/241/347/220/206/346/254/212/351/231/220/344/270/273/350/241/250.png +0 -0
  56. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/A-/347/256/241/347/220/206/346/254/212/351/231/220/347/276/244/347/265/204/344/270/273/350/241/250.png +0 -0
  57. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/B1-/347/267/250/350/274/257/346/211/200/345/261/254/346/254/212/351/231/220/347/276/244/347/265/204-/345/260/215/350/251/261/346/241/206.png +0 -0
  58. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/B2-/347/267/250/350/274/257/346/211/200/345/261/254/346/254/212/351/231/220/347/276/244/347/265/204-hover/346/234/254/351/240/205chip.png +0 -0
  59. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/B3-/347/267/250/350/274/257/346/211/200/345/261/254/346/254/212/351/231/220/347/276/244/347/265/204-/345/261/225/351/226/213/346/234/254/351/240/205chip/346/270/205/345/226/256.png +0 -0
  60. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/B4-/347/267/250/350/274/257/346/211/200/345/261/254/346/254/212/351/231/220/347/276/244/347/265/204-/346/234/254/351/240/205chip/345/267/262/347/202/272AND.png +0 -0
  61. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/B5-/347/267/250/350/274/257/346/211/200/345/261/254/346/254/212/351/231/220/347/276/244/347/265/204-/345/261/225/351/226/213/345/205/250/351/203/250/346/265/256/345/261/244.png +0 -0
  62. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/B6-/347/267/250/350/274/257/346/211/200/345/261/254/346/254/212/351/231/220/347/276/244/347/265/204-/345/213/276/351/201/270/345/276/214/346/234/254/351/240/205chip/345/234/250/351/246/226/344/275/215.png +0 -0
  63. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/C1-/347/267/250/350/274/257/344/275/277/347/224/250/346/254/212/351/231/220-/345/260/215/350/251/261/346/241/206.png +0 -0
  64. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/C2-/347/267/250/350/274/257/344/275/277/347/224/250/346/254/212/351/231/220-hover/345/267/262/345/213/276/351/201/270/345/210/227/346/216/247/345/210/266/351/240/205.png +0 -0
  65. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/C3-/347/267/250/350/274/257/344/275/277/347/224/250/346/254/212/351/231/220-/345/261/225/351/226/213/346/270/205/345/226/256.png +0 -0
  66. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/D1-/347/267/250/350/274/257/346/211/200/345/261/254/344/275/277/347/224/250/350/200/205-/345/260/215/350/251/261/346/241/206.png +0 -0
  67. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/E1-/347/267/250/350/274/257/344/275/277/347/224/250/346/254/212/351/231/220/347/276/244/347/265/204-hover.png +0 -0
  68. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/E2-/347/267/250/350/274/257/344/275/277/347/224/250/346/254/212/351/231/220/347/276/244/347/265/204-/345/261/225/351/226/213/346/270/205/345/226/256.png +0 -0
  69. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/F1-/345/261/225/347/244/272/346/211/200/345/261/254/346/254/212/351/231/220/347/276/244/347/265/204-/345/224/257/350/256/200/346/205/213.png +0 -0
  70. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/F2-/345/261/225/347/244/272/346/211/200/345/261/254/346/254/212/351/231/220/347/276/244/347/265/204-/345/261/225/351/226/213/345/205/250/351/203/250.png +0 -0
  71. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/G1-zoom-/347/267/250/350/274/257/346/211/200/345/261/254/346/254/212/351/231/220/347/276/244/347/265/204-/345/211/215/345/205/255/345/210/227.png +0 -0
  72. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/G2-zoom-/347/267/250/350/274/257/346/211/200/345/261/254/346/254/212/351/231/220/347/276/244/347/265/204-hover/346/234/254/351/240/205chip.png +0 -0
  73. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/G3-zoom-/347/267/250/350/274/257/346/211/200/345/261/254/346/254/212/351/231/220/347/276/244/347/265/204-/345/261/225/351/226/213/346/270/205/345/226/256.png +0 -0
  74. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/346/210/252/345/234/226/verify.json +390 -0
  75. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/350/205/263/346/234/254/build.log +93 -0
  76. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/350/205/263/346/234/254/lint.log +23 -0
  77. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/350/205/263/346/234/254/zz_perm_probe.mjs +321 -0
  78. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/350/205/263/346/234/254/zz_perm_zoom.mjs +173 -0
  79. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231//351/251/227/350/255/211/350/205/263/346/234/254/zz_wwp_verify.mjs +330 -0
  80. package//345/273/272/350/255/260w-aggrid-vue/350/252/277/346/225/264.md +193 -0
  81. package//345/273/272/350/255/260w-component-vue/350/210/207wsemi/350/252/277/346/225/264.md +76 -0
  82. package//345/273/272/350/255/260w-web-perm/350/252/277/346/225/264.md +244 -0
  83. package//346/226/275/345/267/245/345/226/256_/345/273/272/350/255/260w-web-perm/350/252/277/346/225/264.md +166 -0
  84. package/dist/index.html +0 -4
  85. package/dist/js/app-legacy.04fa72c9.js +0 -1
  86. package/dist/js/app.04fa72c9.js +0 -1
@@ -0,0 +1,1157 @@
1
+ <template>
2
+ <WDialog
3
+ :show.sync="bShow"
4
+ :title="isEditable?$t('grupBlngEditUsers'):$t('grupBlngEditUsersForDisplay')"
5
+ :icon="mdiFormatListCheckbox"
6
+ :minWidth="800"
7
+ :maxWidth="800"
8
+ :fullscreen="fullscreen"
9
+ :contentBackgroundColor="'#fff'"
10
+ :headerBtns="useHeaderBtns"
11
+ :hasSaveBtn="isEditable && 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:18px 12px; background:#fff; border-bottom:1px solid #ddd;">
30
+
31
+ <div style="font-size:0.75rem; color:#999; padding-bottom:2px;">
32
+ {{$t('grupBlngGrupNow')}}
33
+ </div>
34
+
35
+ <div style="font-size:1.3rem;">
36
+ {{grupName}}
37
+ </div>
38
+
39
+ </div>
40
+
41
+ <!-- 功能區 -->
42
+ <div
43
+ style="padding:5px; background:#fff; display:flex; align-items:center;"
44
+ v-if="isEditable"
45
+ >
46
+
47
+ <template>
48
+
49
+ <WButtonCircle
50
+ :paddingStyle="{v:6,h:6}"
51
+ :tooltip="$t('checkAllYes')"
52
+ :icon="mdiCheckboxMultipleMarked"
53
+ :backgroundColor="'#fff'"
54
+ :backgroundColorHover="'#f2f2f2'"
55
+ _textColor="'#eee'"
56
+ _textColorHover="'#fff'"
57
+ :iconColor="'#444'"
58
+ :iconColorHover="'#222'"
59
+ :shadow="false"
60
+ @click="showVeGrupBlngUsersToggleItemsEnableAllYes"
61
+ ></WButtonCircle>
62
+
63
+ <div style="padding-left:4px;"></div>
64
+
65
+ </template>
66
+
67
+ <template>
68
+
69
+ <WButtonCircle
70
+ :paddingStyle="{v:6,h:6}"
71
+ :tooltip="$t('checkAllNo')"
72
+ :icon="mdiCheckboxMultipleBlankOutline"
73
+ :backgroundColor="'#fff'"
74
+ :backgroundColorHover="'#f2f2f2'"
75
+ _textColor="'#eee'"
76
+ _textColorHover="'#fff'"
77
+ :iconColor="'#444'"
78
+ :iconColorHover="'#222'"
79
+ :shadow="false"
80
+ @click="showVeGrupBlngUsersToggleItemsEnableAllNo"
81
+ ></WButtonCircle>
82
+
83
+ <div style="padding-left:4px;"></div>
84
+
85
+ </template>
86
+
87
+ <template>
88
+
89
+ <WButtonCircle
90
+ :paddingStyle="{v:6,h:6}"
91
+ :tooltip="$t('checkAllInv')"
92
+ :icon="mdiCodeTagsCheck"
93
+ :backgroundColor="'#fff'"
94
+ :backgroundColorHover="'#f2f2f2'"
95
+ _textColor="'#eee'"
96
+ _textColorHover="'#fff'"
97
+ :iconColor="'#444'"
98
+ :iconColorHover="'#222'"
99
+ :shadow="false"
100
+ @click="showVeGrupBlngUsersToggleItemsEnableAllInv"
101
+ ></WButtonCircle>
102
+
103
+ <div style="padding-left:4px;"></div>
104
+
105
+ </template>
106
+
107
+ <template v-if="hasItemsCheck">
108
+
109
+ <WButtonCircle
110
+ :paddingStyle="{v:6,h:6}"
111
+ :tooltip="$t('grupBlngDeleteCheckGrups')"
112
+ :icon="mdiTrashCanOutline"
113
+ :backgroundColor="'#fff'"
114
+ :backgroundColorHover="'#f2f2f2'"
115
+ _textColor="'#eee'"
116
+ _textColorHover="'#fff'"
117
+ :iconColor="'#444'"
118
+ :iconColorHover="'#222'"
119
+ :shadow="false"
120
+ @click="deleteItemsCheck"
121
+ ></WButtonCircle>
122
+
123
+ <div style="padding-left:4px;"></div>
124
+
125
+ </template>
126
+
127
+ </div>
128
+
129
+ </div>
130
+
131
+ <template
132
+ v-if="!firstLoading"
133
+ >
134
+
135
+ <template v-if="items">
136
+ <WAggridVue
137
+ ref="rftable"
138
+ :style="`width:100%;`"
139
+ :height="contentHeight"
140
+ :opt="opt"
141
+ >
142
+ <template v-slot:cell-render="props">
143
+ <RelationChips
144
+ v-if="props.key==='grupsNames'"
145
+ :items="props.row.grups"
146
+ :editable="isEditable"
147
+ :popupTitle="$t('belongGrupsNames')"
148
+ :tooltipAll="$t('chipsShowAll')"
149
+ :labelContent="'modeSelect'"
150
+ @input="(item)=>{showVeGrupBlngUsersToggleItemModeByName(props.row.name, item)}"
151
+ ></RelationChips>
152
+ <input v-else-if="props.key==='enable'" type="checkbox" :checked="props.value === 'y'" @click="showVeGrupBlngUsersToggleItemEnableByName(props.row.name)" :disabled="!isEditable" />
153
+ <span v-else>{{ props.value }}</span>
154
+ </template>
155
+ </WAggridVue>
156
+ </template>
157
+
158
+ </template>
159
+
160
+ <div
161
+ style="padding:10px 15px; font-size:0.8rem;"
162
+ v-else
163
+ >
164
+ {{$t('waitingData')}}
165
+ </div>
166
+
167
+ </div>
168
+ </template>
169
+ </WDialog>
170
+ </template>
171
+
172
+ <script>
173
+ import { mdiDeleteForever, mdiFullscreen, mdiFullscreenExit, mdiFormatListCheckbox, mdiFileTree, mdiTrashCanOutline, mdiCheckboxMultipleBlankOutline, mdiCheckboxMultipleMarked, mdiCodeTagsCheck } from '@mdi/js/mdi.js'
174
+ import Vue from 'vue'
175
+ import JSON5 from 'json5'
176
+ import get from 'lodash-es/get.js'
177
+ import set from 'lodash-es/set.js'
178
+ import each from 'lodash-es/each.js'
179
+ import map from 'lodash-es/map.js'
180
+ import size from 'lodash-es/size.js'
181
+ import filter from 'lodash-es/filter.js'
182
+ import join from 'lodash-es/join.js'
183
+ import sortBy from 'lodash-es/sortBy.js'
184
+ import isEqual from 'lodash-es/isEqual.js'
185
+ import cloneDeep from 'lodash-es/cloneDeep.js'
186
+ import genPm from 'wsemi/src/genPm.mjs'
187
+ import haskey from 'wsemi/src/haskey.mjs'
188
+ import delay from 'wsemi/src/delay.mjs'
189
+ import iseobj from 'wsemi/src/iseobj.mjs'
190
+ import isestr from 'wsemi/src/isestr.mjs'
191
+ import WDialog from 'w-component-vue/src/components/WDialog.vue'
192
+ import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
193
+ import WAggridVue from 'w-aggrid-vue/src/components/WAggridVue.vue'
194
+ import RelationChips from './RelationChips.vue'
195
+
196
+
197
+ export default {
198
+ components: {
199
+ WDialog,
200
+ WButtonCircle,
201
+ WAggridVue,
202
+ RelationChips,
203
+ },
204
+ props: {
205
+ },
206
+ data: function() {
207
+ return {
208
+ mdiDeleteForever,
209
+ mdiFullscreen,
210
+ mdiFullscreenExit,
211
+ mdiFormatListCheckbox,
212
+ mdiFileTree,
213
+ mdiTrashCanOutline,
214
+ mdiCheckboxMultipleBlankOutline,
215
+ mdiCheckboxMultipleMarked,
216
+ mdiCodeTagsCheck,
217
+
218
+ bShow: false,
219
+ pm: null,
220
+
221
+ fullscreen: false,
222
+
223
+ panelHeight: 100,
224
+ headHeight: 100,
225
+
226
+ firstLoading: true,
227
+ firstSetting: true,
228
+ isEditable: false,
229
+ isModified: false,
230
+
231
+ grup: null,
232
+
233
+ items: [],
234
+ itemsCheck: [],
235
+ opt: null,
236
+
237
+ }
238
+ },
239
+ mounted: function() {
240
+ //console.log('mounted')
241
+
242
+ let vo = this
243
+
244
+ //set
245
+ Vue.prototype.$dg.showVeGrupBlngUsers = vo.show
246
+ Vue.prototype.$dg.showVeGrupBlngUsersToggleItemModeByName = vo.showVeGrupBlngUsersToggleItemModeByName
247
+ Vue.prototype.$dg.showVeGrupBlngUsersToggleItemEnableByName = vo.showVeGrupBlngUsersToggleItemEnableByName
248
+
249
+ //firstSetting
250
+ if (vo.firstSetting) {
251
+ // console.log('webInfor', vo.webInfor)
252
+
253
+ //會觸發數據變更再導致opt變更導致觸發rowsChange等事件, 故得要延遲, 供組件偵測初始設定數據初始化之用
254
+ setTimeout(() => {
255
+ vo.firstSetting = false
256
+ // console.log('firstSetting', vo.firstSetting)
257
+ }, 1)
258
+
259
+ }
260
+
261
+ },
262
+ computed: {
263
+
264
+ syncState: function() {
265
+ let vo = this
266
+ return get(vo, '$store.state.syncState')
267
+ },
268
+
269
+ targets: function() {
270
+ let rs = get(this, `$store.state.targets`)
271
+ rs = sortBy(rs, 'order')
272
+ return rs
273
+ },
274
+
275
+ pemis: function() {
276
+ let rs = get(this, `$store.state.pemis`)
277
+ rs = sortBy(rs, 'order')
278
+ return rs
279
+ },
280
+
281
+ grups: function() {
282
+ let rs = get(this, `$store.state.grups`)
283
+ rs = sortBy(rs, 'order')
284
+ return rs
285
+ },
286
+
287
+ users: function() {
288
+ let rs = get(this, `$store.state.users`)
289
+ rs = sortBy(rs, 'order')
290
+ return rs
291
+ },
292
+
293
+ kpHeaderBtns: function() {
294
+ let vo = this
295
+ let kp = {
296
+ // delete: {
297
+ // icon: mdiDeleteForever,
298
+ // tooltip: `${vo.$t('delete')}${vo.tableNameCht}`,
299
+ // evName: 'delete'
300
+ // },
301
+ toFullscreen: {
302
+ icon: mdiFullscreen,
303
+ tooltip: vo.$t('screenFull'),
304
+ evName: 'toFullscreen'
305
+ },
306
+ toNormalscreen: {
307
+ icon: mdiFullscreenExit,
308
+ tooltip: vo.$t('screenNormal'),
309
+ evName: 'toNormalscreen'
310
+ },
311
+ }
312
+ return kp
313
+ },
314
+
315
+ useHeaderBtns: function() {
316
+ let vo = this
317
+ let bts = []
318
+ if (true) {
319
+ let k = vo.fullscreen ? 'toNormalscreen' : 'toFullscreen'
320
+ bts = [
321
+ ...bts,
322
+ vo.kpHeaderBtns[k]
323
+ ]
324
+ }
325
+ // if (vo.useDelete) {
326
+ // let k = 'delete'
327
+ // bts = [
328
+ // ...bts,
329
+ // vo.kpHeaderBtns[k]
330
+ // ]
331
+ // }
332
+ return bts
333
+ },
334
+
335
+ contentHeight: function() {
336
+ let vo = this
337
+
338
+ //h
339
+ let h = vo.panelHeight - vo.headHeight
340
+ h = Math.max(h, 0)
341
+
342
+ return h
343
+ },
344
+
345
+ hasItemsCheck: function() {
346
+ let vo = this
347
+
348
+ //h
349
+ let b = vo.itemsCheck.length > 0
350
+
351
+ return b
352
+ },
353
+
354
+ grupName: function() {
355
+ let vo = this
356
+
357
+ let c = get(vo, 'grup.name', '')
358
+
359
+ return c
360
+ },
361
+
362
+ },
363
+ methods: {
364
+
365
+ resizeDialog: function(msg) {
366
+ // console.log('methods resizeDialog', msg)
367
+
368
+ let vo = this
369
+
370
+ //panelWidth, panelHeight
371
+ vo.panelHeight = msg.contentHeightMax
372
+
373
+ },
374
+
375
+ resizeHead: function(msg) {
376
+ // console.log('methods resizeHead', msg)
377
+
378
+ let vo = this
379
+
380
+ //headHeight
381
+ vo.headHeight = msg.snew.offsetHeight
382
+
383
+ },
384
+
385
+ genOpt: function() {
386
+ // console.log('methods genOpt')
387
+
388
+ let vo = this
389
+
390
+ //default
391
+ vo.itemsCheck = []
392
+
393
+ //opt
394
+ let opt = null
395
+ if (size(vo.items) > 0) {
396
+
397
+ //ks, 本列自己可改的(是否使用)在左, 由其他權限群組帶來的(所屬權限群組名稱)在右; 合併模式併入 grupsNames 欄之本項 chip(RelationChips), 不再獨立成欄
398
+ let ks = [
399
+ 'name',
400
+ 'enable',
401
+ 'grupsNames',
402
+ ]
403
+ // console.log('ks', ks)
404
+
405
+ //kpHead
406
+ let kpHead = {
407
+ 'name': vo.$t('userName'),
408
+ 'enable': vo.$t('operEnable'),
409
+ 'grupsNames': vo.$t('belongGrupsNames'),
410
+ }
411
+
412
+ //opt
413
+ opt = {
414
+ language: vo.$t('aggridLanguage'),
415
+ rows: vo.items,
416
+ keys: ks,
417
+ kpHead,
418
+ autoFitColumn: true,
419
+ defCellEditable: false, //vo.isEditable,
420
+ defHeadFilter: true,
421
+ defCellAlignH: 'left',
422
+ kpCellEditable: {
423
+ 'name': vo.isEditable,
424
+ 'mode': false,
425
+ 'enable': false,
426
+ },
427
+ kpHeadWidth: {
428
+ 'enable': 100,
429
+ },
430
+ // kpRowDrag: {
431
+ // 'name': true,
432
+ // },
433
+ // kpHeadFilter: {
434
+ // 'enable': false,
435
+ // },
436
+ kpHeadFilterType: {
437
+ 'name': 'text',
438
+ 'grupsNames': 'text',
439
+ 'enable': 'text',
440
+ },
441
+ // kpHeadCheckBox: {
442
+ // 'name': true,
443
+ // },
444
+ kpHeadFocusHighlight: { //儲存格內已有自己的控制項(chip 下拉、勾選框), 不再疊儲存格焦點框
445
+ 'grupsNames': false,
446
+ 'enable': false,
447
+ },
448
+ rowsChange: (rs) => {
449
+ // console.log('rowsChange', rs)
450
+ // console.log('rowsChange cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
451
+
452
+ //check
453
+ if (!vo.syncState || vo.firstLoading || vo.firstSetting) {
454
+ return
455
+ }
456
+
457
+ //isModified
458
+ vo.isModified = true
459
+
460
+ },
461
+ rowChecked: (rs) => {
462
+ // console.log('rowChecked', rs)
463
+ // console.log('rowChecked cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
464
+
465
+ //save itemsCheck
466
+ vo.itemsCheck = cloneDeep(rs)
467
+
468
+ },
469
+ }
470
+ // console.log('opt', opt)
471
+
472
+ }
473
+
474
+ //save
475
+ vo.opt = opt
476
+
477
+ },
478
+
479
+ deleteItemsCheck: function() {
480
+ // console.log('method deleteItemsCheck')
481
+
482
+ let vo = this
483
+
484
+ //check
485
+ if (size(vo.itemsCheck) === 0) {
486
+ return
487
+ }
488
+
489
+ //cloneDeep
490
+ let rows = get(vo, 'opt.rows', [])
491
+
492
+ //cloneDeep
493
+ rows = cloneDeep(rows)
494
+
495
+ //filter
496
+ each(vo.itemsCheck, (v) => {
497
+ // console.log('v', v)
498
+ let name = get(v, 'data.name', '')
499
+ if (!isestr(name)) {
500
+ console.log(`invalid name`)
501
+ return true //跳出換下一個
502
+ }
503
+ rows = filter(rows, (vv) => {
504
+ return vv.name !== name
505
+ })
506
+ })
507
+
508
+ //clear
509
+ vo.itemsCheck = []
510
+
511
+ //save
512
+ vo.opt.rows = rows
513
+ // console.log('deleteItemsCheck cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
514
+
515
+ //isModified
516
+ vo.isModified = true
517
+
518
+ },
519
+
520
+ refresh: function() {
521
+ let vo = this
522
+
523
+ //cmp
524
+ let cmp = get(vo, '$refs.rftable')
525
+ // console.log('cmp', cmp)
526
+
527
+ //refresh, 因set不會觸發ag-grid重繪, 故須另外調用組件函數refresh(內為redrawRows)重繪各列, 使cell-render slot內容更新(w-aggrid-vue 2.0.56起以cell-render slot取代opt.kpCellRender)
528
+ cmp.refresh()
529
+
530
+ },
531
+
532
+ getDisplayData: function() {
533
+ let vo = this
534
+
535
+ //cmp
536
+ let cmp = get(vo, '$refs.rftable')
537
+ // console.log('cmp', cmp)
538
+
539
+ //getDisplayData
540
+ let rows = cmp.getDisplayData()
541
+
542
+ return rows
543
+ },
544
+
545
+ fltKpGrup: function(kp) {
546
+ // console.log('fltKpGrup', kp)
547
+
548
+ let vo = this
549
+
550
+ //_kp
551
+ let _kp = {}
552
+ each(vo.grups, (v, k) => {
553
+ _kp[v.name] = true
554
+ })
555
+ // console.log('_kp', _kp)
556
+
557
+ //kpt
558
+ let kpt = {}
559
+ each(kp, (v, k) => {
560
+ if (haskey(_kp, k)) {
561
+ kpt[k] = v
562
+ }
563
+ })
564
+
565
+ return kpt
566
+ },
567
+
568
+ genItems: function(grup, users) {
569
+ // console.log('genItems', grup, users)
570
+
571
+ let vo = this
572
+
573
+ //items
574
+ let items = map(users, (u) => {
575
+
576
+ //kpGrup
577
+ let kpGrup = JSON5.parse(u.cgrups)
578
+ // console.log(u.name, 'kpGrup', kpGrup)
579
+
580
+ //fltKpGrup
581
+ kpGrup = vo.fltKpGrup(kpGrup)
582
+ // console.log(u.name, 'kpGrup(fltKpGrup)', kpGrup)
583
+
584
+ //mode, enable, grups
585
+ let mode = 'OR'
586
+ let enable = 'n'
587
+ let grups = []
588
+ each(kpGrup, (v, k) => {
589
+ // console.log(k, 'v', v)
590
+
591
+ //_isActive, 此為使用者cgrups內設定, 可為y或n, 僅提取y, 再判斷此使用者是否有使用此grup
592
+ let _isActive = get(v, 'isActive', '')
593
+ if (_isActive !== 'y') {
594
+ return true //跳出換下一個
595
+ }
596
+ // console.log(k, '_isActive', _isActive)
597
+
598
+ //_mode
599
+ let _mode = get(v, 'mode', '')
600
+ // console.log(k, '_mode', _mode)
601
+
602
+ //b, 使用者是否擁有指定權限群組
603
+ let b = k === grup.name
604
+ // console.log(k, 'b', b)
605
+
606
+ //mode, isActive
607
+ if (b) {
608
+ enable = 'y'
609
+ mode = _mode //使用使用者給予cgrups內指定權限群組之合併權限模式
610
+ // console.log('使用使用者給予cgrups內指定權限群組之合併權限模式 grup', grup)
611
+ }
612
+
613
+ //push
614
+ grups.push({
615
+ name: k,
616
+ ...v,
617
+ enable: b ? 'y' : 'n', //給render使用
618
+ })
619
+
620
+ })
621
+ // console.log(u.name, 'grups', grups)
622
+
623
+ //grupsNames
624
+ let grupsNames = map(grups, 'name')
625
+ grupsNames = join(grupsNames, ' ')
626
+ // console.log(u.name, 'grupsNames', grupsNames)
627
+
628
+ return {
629
+ name: u.name,
630
+ grupsNames,
631
+ mode,
632
+ enable,
633
+ // kpGrup,
634
+ grups,
635
+ }
636
+ })
637
+ // console.log(u.name, 'items', items)
638
+
639
+ return items
640
+ },
641
+
642
+ revRows: function() {
643
+ // console.log('revRows')
644
+
645
+ let vo = this
646
+
647
+ //grup
648
+ let grup = cloneDeep(vo.grup)
649
+ // console.log('grup', grup)
650
+
651
+ //users
652
+ let users = cloneDeep(vo.users)
653
+ // console.log('users', users)
654
+
655
+ //rows
656
+ let rows = get(vo, 'opt.rows', [])
657
+ // console.log('rows', rows)
658
+
659
+ //users
660
+ users = map(users, (u, ku) => {
661
+
662
+ //kpGrup
663
+ let kpGrup = JSON5.parse(u.cgrups)
664
+ // console.log(u.name, 'kpGrup', kpGrup)
665
+
666
+ //fltKpGrup
667
+ kpGrup = vo.fltKpGrup(kpGrup)
668
+ // console.log(u.name, 'kpGrup(fltKpGrup)', kpGrup)
669
+
670
+ //mode
671
+ let mode = get(rows, `${ku}.mode`, '')
672
+ if (mode !== 'OR' && mode !== 'AND') {
673
+ console.log(`非預期: mode應該皆已指定不應觸發`, mode)
674
+ mode = 'OR'
675
+ }
676
+ // console.log(u.name, 'mode', mode)
677
+
678
+ //enable
679
+ let enable = get(rows, `${ku}.enable`, '')
680
+ if (enable !== 'y' && enable !== 'n') {
681
+ console.log(`非預期: enable應該皆已指定不應觸發`, enable)
682
+ enable = 'n'
683
+ }
684
+ // console.log(u.name, 'enable', enable)
685
+
686
+ //kpGrup
687
+ if (enable === 'y') {
688
+ kpGrup[grup.name] = {
689
+ mode,
690
+ isActive: 'y',
691
+ }
692
+ }
693
+ else {
694
+ if (haskey(kpGrup, grup.name)) {
695
+ delete kpGrup[grup.name]
696
+ }
697
+ }
698
+ // console.log(u.name, 'kpGrup', kpGrup)
699
+
700
+ //update cgrups
701
+ let cgrups = JSON.stringify(kpGrup)
702
+ u.cgrups = cgrups
703
+ // console.log(u.name, 'cgrups', cgrups)
704
+
705
+ return u
706
+ })
707
+
708
+ //items
709
+ let items = vo.genItems(grup, users)
710
+ // console.log('items', items)
711
+
712
+ //update grupsNames, grups
713
+ each(items, (r, kr) => {
714
+ // name: u.name,
715
+ // grupsNames,
716
+ // mode,
717
+ // enable,
718
+ // grups,
719
+
720
+ //set
721
+ set(vo, `opt.rows[${kr}].grupsNames`, r.grupsNames)
722
+ set(vo, `opt.rows[${kr}].grups`, r.grups)
723
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
724
+
725
+ })
726
+
727
+ //refresh
728
+ vo.refresh()
729
+
730
+ },
731
+
732
+ showVeGrupBlngUsersToggleItemModeByName: function(name, mode) {
733
+ // console.log('showVeGrupBlngUsersToggleItemModeByName', name, mode)
734
+
735
+ let vo = this
736
+
737
+ //check
738
+ if (!isestr(name)) {
739
+ vo.$alert(`${vo.$t('grupBlngEditNoGrupName')}`, { type: 'error' })
740
+ return
741
+ }
742
+
743
+ //rows
744
+ let rows = get(vo, 'opt.rows', [])
745
+
746
+ //find
747
+ let r = null
748
+ let kr = null
749
+ each(rows, (v, k) => {
750
+ if (get(v, 'name', '') === name) {
751
+ r = v
752
+ kr = k
753
+ return false //跳出
754
+ }
755
+ })
756
+
757
+ //check
758
+ if (!iseobj(r)) {
759
+ vo.$alert(`${vo.$t('grupBlngEditNoGrupData')}`, { type: 'error' })
760
+ return
761
+ }
762
+
763
+ //mode
764
+ // let mode = th.value
765
+ // console.log('mode', mode)
766
+
767
+ //set
768
+ set(vo, `opt.rows[${kr}].mode`, mode)
769
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
770
+
771
+ //revRows, 已含refresh
772
+ vo.revRows()
773
+
774
+ //isModified
775
+ vo.isModified = true
776
+
777
+ },
778
+
779
+ showVeGrupBlngUsersToggleItemEnableByName: function(name) {
780
+ // console.log('showVeGrupBlngUsersToggleItemEnableByName', name)
781
+
782
+ let vo = this
783
+
784
+ //check
785
+ if (!isestr(name)) {
786
+ vo.$alert(`${vo.$t('grupBlngEditNoGrupName')}`, { type: 'error' })
787
+ return
788
+ }
789
+
790
+ //rows
791
+ let rows = get(vo, 'opt.rows', [])
792
+
793
+ //find
794
+ let r = null
795
+ let kr = null
796
+ each(rows, (v, k) => {
797
+ if (get(v, 'name', '') === name) {
798
+ r = v
799
+ kr = k
800
+ return false //跳出
801
+ }
802
+ })
803
+
804
+ //check
805
+ if (!iseobj(r)) {
806
+ vo.$alert(`${vo.$t('grupBlngEditNoGrupData')}`, { type: 'error' })
807
+ return
808
+ }
809
+
810
+ //enable
811
+ let _enable = get(r, 'enable', 'n')
812
+ let enable = _enable === 'y' ? 'n' : 'y'
813
+ // console.log('enable', enable)
814
+
815
+ //set
816
+ set(vo, `opt.rows[${kr}].enable`, enable)
817
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
818
+
819
+ //revRows, 已含refresh
820
+ vo.revRows()
821
+
822
+ //isModified
823
+ vo.isModified = true
824
+
825
+ },
826
+
827
+ showVeGrupBlngUsersToggleItemsEnableAllYes: function() {
828
+ // console.log('showVeGrupBlngUsersToggleItemsEnableAllYes')
829
+
830
+ let vo = this
831
+
832
+ //rows
833
+ let rows = get(vo, 'opt.rows', [])
834
+ // console.log('rows', rows)
835
+
836
+ //kpRow
837
+ let kpRow = {}
838
+ each(rows, (r, kr) => {
839
+ kpRow[r.name] = kr
840
+ })
841
+
842
+ //rowsEff
843
+ let rowsEff = vo.getDisplayData()
844
+ // console.log('rowsEff', rowsEff)
845
+
846
+ //toggle
847
+ each(rowsEff, (r) => {
848
+
849
+ //kr
850
+ let kr = kpRow[r.name]
851
+
852
+ //set
853
+ set(vo, `opt.rows[${kr}].enable`, 'y')
854
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
855
+
856
+ })
857
+
858
+ //revRows, 已含refresh
859
+ vo.revRows()
860
+
861
+ //isModified
862
+ vo.isModified = true
863
+
864
+ },
865
+
866
+ showVeGrupBlngUsersToggleItemsEnableAllNo: function() {
867
+ // console.log('showVeGrupBlngUsersToggleItemsEnableAllNo')
868
+
869
+ let vo = this
870
+
871
+ //rows
872
+ let rows = get(vo, 'opt.rows', [])
873
+ // console.log('rows', rows)
874
+
875
+ //kpRow
876
+ let kpRow = {}
877
+ each(rows, (r, kr) => {
878
+ kpRow[r.name] = kr
879
+ })
880
+
881
+ //rowsEff
882
+ let rowsEff = vo.getDisplayData()
883
+ // console.log('rowsEff', rowsEff)
884
+
885
+ //toggle
886
+ each(rowsEff, (r) => {
887
+
888
+ //kr
889
+ let kr = kpRow[r.name]
890
+
891
+ //set
892
+ set(vo, `opt.rows[${kr}].enable`, 'n')
893
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
894
+
895
+ })
896
+
897
+ //revRows, 已含refresh
898
+ vo.revRows()
899
+
900
+ //isModified
901
+ vo.isModified = true
902
+
903
+ },
904
+
905
+ showVeGrupBlngUsersToggleItemsEnableAllInv: function() {
906
+ // console.log('showVeGrupBlngUsersToggleItemsEnableAllInv')
907
+
908
+ let vo = this
909
+
910
+ //rows
911
+ let rows = get(vo, 'opt.rows', [])
912
+ // console.log('rows', rows)
913
+
914
+ //kpRow
915
+ let kpRow = {}
916
+ each(rows, (r, kr) => {
917
+ kpRow[r.name] = kr
918
+ })
919
+
920
+ //rowsEff
921
+ let rowsEff = vo.getDisplayData()
922
+ // console.log('rowsEff', rowsEff)
923
+
924
+ //toggle
925
+ each(rowsEff, (r) => {
926
+
927
+ //kr
928
+ let kr = kpRow[r.name]
929
+
930
+ //enable
931
+ let _enable = get(r, 'enable', 'n')
932
+ let enable = _enable === 'y' ? 'n' : 'y'
933
+
934
+ //set
935
+ set(vo, `opt.rows[${kr}].enable`, enable)
936
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
937
+
938
+ })
939
+
940
+ //revRows, 已含refresh
941
+ vo.revRows()
942
+
943
+ //isModified
944
+ vo.isModified = true
945
+
946
+ },
947
+
948
+ saveUsers: async function(rows) {
949
+ // console.log('method saveUsers', rows)
950
+
951
+ let vo = this
952
+
953
+ //3) updateUsers, 各自 catch + okX 旗標短路 (canonical 五段結構; 空清單檢查已上移至 doSave core())
954
+ let okSave = false
955
+ await vo.$fapi.updateUsers(rows)
956
+ .then(() => { okSave = true })
957
+ .catch(async (err) => {
958
+ vo.$ui.updateLoading(false) //showCheckYes 前關 loading(modal 阻斷期間避免 loading 疊在底下)
959
+ await vo.$dg.showCheckYes(`${vo.$t('userSaveUsersFail')}: ${vo.$tErr(err)}`)
960
+ })
961
+ if (!okSave) {
962
+ return
963
+ }
964
+
965
+ //alert(showCheckYes 前關 loading,避免 modal 等待期間 loading 疊在底下)
966
+ vo.$ui.updateLoading(false)
967
+ await vo.$dg.showCheckYes(vo.$t('userSaveUsersSuccess'), { type: 'success' })
968
+
969
+ },
970
+
971
+ clickBtns: function(msg) {
972
+ // console.log('clickBtns', msg)
973
+
974
+ let vo = this
975
+
976
+ //evName
977
+ if (msg.evName === 'toFullscreen') {
978
+ vo.fullscreen = true
979
+ }
980
+ else if (msg.evName === 'toNormalscreen') {
981
+ vo.fullscreen = false
982
+ }
983
+
984
+ },
985
+
986
+ clickSave: function(msg) {
987
+ //console.log('methods clickSave', msg)
988
+
989
+ let vo = this
990
+
991
+ //save按鈕第一行立刻釋放視覺鎖
992
+ msg.pm.resolve()
993
+
994
+ //fire-and-forget, 不 await
995
+ vo.doSave()
996
+
997
+ },
998
+
999
+ doSave: function() {
1000
+
1001
+ let vo = this
1002
+
1003
+ async function core() {
1004
+
1005
+ //1) 事先檢測 (所有同步檢查在開 loading 之前, 空清單不應先閃 loading)
1006
+ let rows = get(vo, 'opt.rows', [])
1007
+ // console.log('rows', rows)
1008
+ if (size(rows) === 0) {
1009
+ await vo.$dg.showCheckYes(`${vo.$t('userSaveUsersEmpty')}`)
1010
+ return
1011
+ }
1012
+
1013
+ //2) 確定打 API 才開 loading
1014
+ vo.$ui.updateLoading(true)
1015
+
1016
+ //delay
1017
+ await delay(300)
1018
+
1019
+ //users
1020
+ let users = cloneDeep(vo.users)
1021
+ // console.log('users', users)
1022
+
1023
+ //usersNew
1024
+ let usersNew = map(rows, (r, kr) => {
1025
+
1026
+ //u
1027
+ let u = get(users, kr, {})
1028
+
1029
+ //cgrups
1030
+ let cgrups = get(u, 'cgrups', '')
1031
+
1032
+ //kpGrup
1033
+ let kpGrup = JSON5.parse(cgrups)
1034
+ // console.log('kpGrup', kpGrup)
1035
+
1036
+ //grups
1037
+ let grups = get(r, 'grups', [])
1038
+
1039
+ //kpGrupNew
1040
+ let kpGrupNew = {}
1041
+ if (true) {
1042
+ each(grups, (g) => {
1043
+ if (g.isActive === 'y') {
1044
+ kpGrupNew[g.name] = {
1045
+ mode: g.mode,
1046
+ isActive: g.isActive,
1047
+ }
1048
+ }
1049
+ })
1050
+ }
1051
+
1052
+ //check
1053
+ if (!isEqual(kpGrup, kpGrupNew)) {
1054
+
1055
+ //cgrups
1056
+ u.cgrups = JSON.stringify(kpGrupNew)
1057
+
1058
+ }
1059
+
1060
+ return u
1061
+ })
1062
+ console.log('usersNew', usersNew)
1063
+
1064
+ // //check
1065
+ // if (size(usersNew) === 0) {
1066
+ // return
1067
+ // }
1068
+
1069
+ //saveUsers
1070
+ await vo.saveUsers(usersNew)
1071
+
1072
+ }
1073
+
1074
+ //core
1075
+ core()
1076
+ .then((rows) => {
1077
+
1078
+ //resolve
1079
+ vo.pm.resolve(rows)
1080
+
1081
+ //hide
1082
+ vo.bShow = false
1083
+
1084
+ })
1085
+ .catch((err) => {
1086
+ console.log('doSave', err)
1087
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' }) //§5.1: 非預期例外須告知, 不靜默吞 (失敗時 .then 不執行→視窗不關)
1088
+ })
1089
+ .finally(() => {
1090
+
1091
+ //hide loading
1092
+ vo.$ui.updateLoading(false)
1093
+
1094
+ })
1095
+
1096
+ },
1097
+
1098
+ clickClose: function() {
1099
+ //console.log('methods clickClose')
1100
+
1101
+ let vo = this
1102
+
1103
+ //reject
1104
+ vo.pm.reject('close window')
1105
+
1106
+ //hide
1107
+ vo.bShow = false
1108
+
1109
+ },
1110
+
1111
+ show: function (msg) {
1112
+ // console.log('methods show', msg)
1113
+
1114
+ let vo = this
1115
+
1116
+ //pm
1117
+ vo.pm = genPm()
1118
+
1119
+ //default
1120
+ vo.isModified = false
1121
+
1122
+ //isEditable, grup
1123
+ let isEditable = get(msg, 'isEditable', false)
1124
+ let grup = get(msg, 'grup', {})
1125
+
1126
+ //grup
1127
+ grup = cloneDeep(grup)
1128
+
1129
+ //users
1130
+ let users = cloneDeep(vo.users)
1131
+
1132
+ //items
1133
+ let items = vo.genItems(grup, users)
1134
+
1135
+ //save
1136
+ vo.isEditable = isEditable
1137
+ vo.grup = grup
1138
+ vo.items = items
1139
+
1140
+ //genOpt
1141
+ vo.genOpt()
1142
+
1143
+ //firstLoading
1144
+ vo.firstLoading = false
1145
+
1146
+ //bShow
1147
+ vo.bShow = true
1148
+
1149
+ return vo.pm
1150
+ },
1151
+
1152
+ }
1153
+ }
1154
+ </script>
1155
+
1156
+ <style scoped>
1157
+ </style>