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,848 @@
1
+ <template>
2
+ <WDialog
3
+ :show.sync="bShow"
4
+ :title="isEditable?$t('pemiEditCrules'):$t('pemiEditCrulesForDisplay')"
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
30
+ style="padding:5px; background:#fff; display:flex; align-items:center;"
31
+ v-if="isEditable"
32
+ >
33
+
34
+ <template>
35
+
36
+ <WButtonCircle
37
+ :paddingStyle="{v:6,h:6}"
38
+ :tooltip="$t('checkAllYes')"
39
+ :icon="mdiCheckboxMultipleMarked"
40
+ :backgroundColor="'#fff'"
41
+ :backgroundColorHover="'#f2f2f2'"
42
+ _textColor="'#eee'"
43
+ _textColorHover="'#fff'"
44
+ :iconColor="'#444'"
45
+ :iconColorHover="'#222'"
46
+ :shadow="false"
47
+ @click="toggleItemsEnableAllYes"
48
+ ></WButtonCircle>
49
+
50
+ <div style="padding-left:4px;"></div>
51
+
52
+ </template>
53
+
54
+ <template>
55
+
56
+ <WButtonCircle
57
+ :paddingStyle="{v:6,h:6}"
58
+ :tooltip="$t('checkAllNo')"
59
+ :icon="mdiCheckboxMultipleBlankOutline"
60
+ :backgroundColor="'#fff'"
61
+ :backgroundColorHover="'#f2f2f2'"
62
+ _textColor="'#eee'"
63
+ _textColorHover="'#fff'"
64
+ :iconColor="'#444'"
65
+ :iconColorHover="'#222'"
66
+ :shadow="false"
67
+ @click="toggleItemsEnableAllNo"
68
+ ></WButtonCircle>
69
+
70
+ <div style="padding-left:4px;"></div>
71
+
72
+ </template>
73
+
74
+ <template>
75
+
76
+ <WButtonCircle
77
+ :paddingStyle="{v:6,h:6}"
78
+ :tooltip="$t('checkAllInv')"
79
+ :icon="mdiCodeTagsCheck"
80
+ :backgroundColor="'#fff'"
81
+ :backgroundColorHover="'#f2f2f2'"
82
+ _textColor="'#eee'"
83
+ _textColorHover="'#fff'"
84
+ :iconColor="'#444'"
85
+ :iconColorHover="'#222'"
86
+ :shadow="false"
87
+ @click="toggleItemsEnableAllInv"
88
+ ></WButtonCircle>
89
+
90
+ <div style="padding-left:4px;"></div>
91
+
92
+ </template>
93
+
94
+ <template v-if="hasItemsCheck">
95
+
96
+ <WButtonCircle
97
+ :paddingStyle="{v:6,h:6}"
98
+ :tooltip="$t('cruleDeleteCheckTargets')"
99
+ :icon="mdiTrashCanOutline"
100
+ :backgroundColor="'#fff'"
101
+ :backgroundColorHover="'#f2f2f2'"
102
+ _textColor="'#eee'"
103
+ _textColorHover="'#fff'"
104
+ :iconColor="'#444'"
105
+ :iconColorHover="'#222'"
106
+ :shadow="false"
107
+ @click="deleteItemsCheck"
108
+ ></WButtonCircle>
109
+
110
+ <div style="padding-left:4px;"></div>
111
+
112
+ </template>
113
+
114
+ </div>
115
+
116
+ </div>
117
+
118
+ <template
119
+ v-if="!firstLoading"
120
+ >
121
+
122
+ <template v-if="items">
123
+ <WAggridVue
124
+ ref="rftable"
125
+ :style="`width:100%;`"
126
+ :height="contentHeight"
127
+ :opt="opt"
128
+ >
129
+ <template v-slot:cell-render="props">
130
+ <span v-if="props.key==='id'">{{ props.value }}</span>
131
+ <input v-else-if="props.key==='enable'" type="checkbox" :checked="props.value === 'y'" @click="toggleItemEnableById(props.row.id)" :disabled="!isEditable" />
132
+ <span v-else>{{ props.value }}</span>
133
+ </template>
134
+ </WAggridVue>
135
+ </template>
136
+
137
+ </template>
138
+
139
+ <div
140
+ style="padding:10px 15px; font-size:0.8rem;"
141
+ v-else
142
+ >
143
+ {{$t('waitingData')}}
144
+ </div>
145
+
146
+ </div>
147
+ </template>
148
+ </WDialog>
149
+ </template>
150
+
151
+ <script>
152
+ import { mdiDeleteForever, mdiFullscreen, mdiFullscreenExit, mdiFormatListCheckbox, mdiFileTree, mdiTrashCanOutline, mdiCheckboxMultipleBlankOutline, mdiCheckboxMultipleMarked, mdiCodeTagsCheck } from '@mdi/js/mdi.js'
153
+ import Vue from 'vue'
154
+ import JSON5 from 'json5'
155
+ import get from 'lodash-es/get.js'
156
+ import set from 'lodash-es/set.js'
157
+ import each from 'lodash-es/each.js'
158
+ import map from 'lodash-es/map.js'
159
+ import size from 'lodash-es/size.js'
160
+ import filter from 'lodash-es/filter.js'
161
+ import sortBy from 'lodash-es/sortBy.js'
162
+ import cloneDeep from 'lodash-es/cloneDeep.js'
163
+ import genPm from 'wsemi/src/genPm.mjs'
164
+ import delay from 'wsemi/src/delay.mjs'
165
+ import iseobj from 'wsemi/src/iseobj.mjs'
166
+ import isestr from 'wsemi/src/isestr.mjs'
167
+ import WDialog from 'w-component-vue/src/components/WDialog.vue'
168
+ import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
169
+ import WAggridVue from 'w-aggrid-vue/src/components/WAggridVue.vue'
170
+
171
+
172
+ export default {
173
+ components: {
174
+ WDialog,
175
+ WButtonCircle,
176
+ WAggridVue,
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
+ panelHeight: 100,
198
+ headHeight: 100,
199
+
200
+ firstLoading: true,
201
+ firstSetting: true,
202
+ isEditable: false,
203
+ isModified: false,
204
+
205
+ pemi: null,
206
+
207
+ items: [],
208
+ itemsCheck: [],
209
+ opt: null,
210
+
211
+ }
212
+ },
213
+ mounted: function() {
214
+ //console.log('mounted')
215
+
216
+ let vo = this
217
+
218
+ //set
219
+ Vue.prototype.$dg.showVeCrules = vo.show
220
+ Vue.prototype.$dg.toggleItemEnableById = vo.toggleItemEnableById
221
+
222
+ //firstSetting
223
+ if (vo.firstSetting) {
224
+ // console.log('webInfor', vo.webInfor)
225
+
226
+ //會觸發數據變更再導致opt變更導致觸發rowsChange等事件, 故得要延遲, 供組件偵測初始設定數據初始化之用
227
+ setTimeout(() => {
228
+ vo.firstSetting = false
229
+ // console.log('firstSetting', vo.firstSetting)
230
+ }, 1)
231
+
232
+ }
233
+
234
+ },
235
+ computed: {
236
+
237
+ syncState: function() {
238
+ let vo = this
239
+ return get(vo, '$store.state.syncState')
240
+ },
241
+
242
+ targets: function() {
243
+ let rs = get(this, `$store.state.targets`)
244
+ rs = sortBy(rs, 'order')
245
+ return rs
246
+ },
247
+
248
+ pemis: function() {
249
+ let rs = get(this, `$store.state.pemis`)
250
+ rs = sortBy(rs, 'order')
251
+ return rs
252
+ },
253
+
254
+ grups: function() {
255
+ let rs = get(this, `$store.state.grups`)
256
+ rs = sortBy(rs, 'order')
257
+ return rs
258
+ },
259
+
260
+ users: function() {
261
+ let rs = get(this, `$store.state.users`)
262
+ rs = sortBy(rs, 'order')
263
+ return rs
264
+ },
265
+
266
+ kpHeaderBtns: function() {
267
+ let vo = this
268
+ let kp = {
269
+ // delete: {
270
+ // icon: mdiDeleteForever,
271
+ // tooltip: `${vo.$t('delete')}${vo.tableNameCht}`,
272
+ // evName: 'delete'
273
+ // },
274
+ toFullscreen: {
275
+ icon: mdiFullscreen,
276
+ tooltip: vo.$t('screenFull'),
277
+ evName: 'toFullscreen'
278
+ },
279
+ toNormalscreen: {
280
+ icon: mdiFullscreenExit,
281
+ tooltip: vo.$t('screenNormal'),
282
+ evName: 'toNormalscreen'
283
+ },
284
+ }
285
+ return kp
286
+ },
287
+
288
+ useHeaderBtns: function() {
289
+ let vo = this
290
+ let bts = []
291
+ if (true) {
292
+ let k = vo.fullscreen ? 'toNormalscreen' : 'toFullscreen'
293
+ bts = [
294
+ ...bts,
295
+ vo.kpHeaderBtns[k]
296
+ ]
297
+ }
298
+ // if (vo.useDelete) {
299
+ // let k = 'delete'
300
+ // bts = [
301
+ // ...bts,
302
+ // vo.kpHeaderBtns[k]
303
+ // ]
304
+ // }
305
+ return bts
306
+ },
307
+
308
+ contentHeight: function() {
309
+ let vo = this
310
+
311
+ //h
312
+ let h = vo.panelHeight - vo.headHeight
313
+ h = Math.max(h, 0)
314
+
315
+ return h
316
+ },
317
+
318
+ hasItemsCheck: function() {
319
+ let vo = this
320
+
321
+ //h
322
+ let b = vo.itemsCheck.length > 0
323
+
324
+ return b
325
+ },
326
+
327
+ },
328
+ methods: {
329
+
330
+ resizeDialog: function(msg) {
331
+ // console.log('methods resizeDialog', msg)
332
+
333
+ let vo = this
334
+
335
+ //panelWidth, panelHeight
336
+ vo.panelHeight = msg.contentHeightMax
337
+
338
+ },
339
+
340
+ resizeHead: function(msg) {
341
+ // console.log('methods resizeHead', msg)
342
+
343
+ let vo = this
344
+
345
+ //headHeight
346
+ vo.headHeight = msg.snew.offsetHeight
347
+
348
+ },
349
+
350
+ genOpt: function() {
351
+ // console.log('methods genOpt')
352
+
353
+ let vo = this
354
+
355
+ //default
356
+ vo.itemsCheck = []
357
+
358
+ //opt
359
+ let opt = null
360
+ if (size(vo.items) > 0) {
361
+
362
+ //ks
363
+ let ks = [
364
+ 'id',
365
+ 'enable',
366
+ ]
367
+ // console.log('ks', ks)
368
+
369
+ //kpHead
370
+ let kpHead = {
371
+ 'id': vo.$t('targetId'),
372
+ 'enable': vo.$t('targetEnable'),
373
+ }
374
+
375
+ //opt
376
+ opt = {
377
+ language: vo.$t('aggridLanguage'),
378
+ rows: vo.items,
379
+ keys: ks,
380
+ kpHead,
381
+ autoFitColumn: true,
382
+ defCellEditable: false, //vo.isEditable,
383
+ defHeadFilter: true,
384
+ defCellAlignH: 'left',
385
+ kpCellEditable: {
386
+ 'id': vo.isEditable,
387
+ 'enable': false,
388
+ },
389
+ kpHeadWidth: {
390
+ 'enable': 50,
391
+ },
392
+ // kpRowDrag: {
393
+ // 'id': true,
394
+ // },
395
+ // kpHeadFilter: {
396
+ // 'enable': false,
397
+ // },
398
+ kpHeadFilterType: {
399
+ 'id': 'text',
400
+ 'enable': 'text',
401
+ },
402
+ kpHeadCheckBox: {
403
+ 'id': true,
404
+ },
405
+ kpHeadFocusHighlight: { //儲存格內已有自己的控制項(勾選框), 不再疊儲存格焦點框, 與其餘關聯對話框一致
406
+ 'enable': false,
407
+ },
408
+ rowsChange: (rs) => {
409
+ // console.log('rowsChange', rs)
410
+ // console.log('rowsChange cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
411
+
412
+ //check
413
+ if (!vo.syncState || vo.firstLoading || vo.firstSetting) {
414
+ return
415
+ }
416
+
417
+ //isModified
418
+ vo.isModified = true
419
+
420
+ },
421
+ rowChecked: (rs) => {
422
+ // console.log('rowChecked', rs)
423
+ // console.log('rowChecked cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
424
+
425
+ //save itemsCheck
426
+ vo.itemsCheck = cloneDeep(rs)
427
+
428
+ },
429
+ }
430
+ // console.log('opt', opt)
431
+
432
+ }
433
+
434
+ //save
435
+ vo.opt = opt
436
+
437
+ },
438
+
439
+ deleteItemsCheck: function() {
440
+ // console.log('method deleteItemsCheck')
441
+
442
+ let vo = this
443
+
444
+ //check
445
+ if (size(vo.itemsCheck) === 0) {
446
+ return
447
+ }
448
+
449
+ //cloneDeep
450
+ let rows = get(vo, 'opt.rows', [])
451
+
452
+ //cloneDeep
453
+ rows = cloneDeep(rows)
454
+
455
+ //filter
456
+ each(vo.itemsCheck, (v) => {
457
+ // console.log('v', v)
458
+ let id = get(v, 'data.id', '')
459
+ if (!isestr(id)) {
460
+ console.log(`invalid id`)
461
+ return true //跳出換下一個
462
+ }
463
+ rows = filter(rows, (vv) => {
464
+ return vv.id !== id
465
+ })
466
+ })
467
+
468
+ //clear
469
+ vo.itemsCheck = []
470
+
471
+ //save
472
+ vo.opt.rows = rows
473
+ // console.log('deleteItemsCheck cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
474
+
475
+ //isModified
476
+ vo.isModified = true
477
+
478
+ },
479
+
480
+ refresh: function() {
481
+ let vo = this
482
+
483
+ //cmp
484
+ let cmp = get(vo, '$refs.rftable')
485
+ // console.log('cmp', cmp)
486
+
487
+ //refresh, 因set不會觸發ag-grid重繪, 故須另外調用組件函數refresh(內為redrawRows)重繪各列, 使cell-render slot內容更新(w-aggrid-vue 2.0.56起以cell-render slot取代opt.kpCellRender)
488
+ cmp.refresh()
489
+
490
+ },
491
+
492
+ getDisplayData: function() {
493
+ let vo = this
494
+
495
+ //cmp
496
+ let cmp = get(vo, '$refs.rftable')
497
+ // console.log('cmp', cmp)
498
+
499
+ //getDisplayData
500
+ let rows = cmp.getDisplayData()
501
+
502
+ return rows
503
+ },
504
+
505
+ toggleItemEnableById: function(id) {
506
+ // console.log('toggleItemEnableById', id)
507
+
508
+ let vo = this
509
+
510
+ //check
511
+ if (!isestr(id)) {
512
+ vo.$alert(`${vo.$t('cruleEditNoTargetId')}`, { type: 'error' })
513
+ return
514
+ }
515
+
516
+ //rows
517
+ let rows = get(vo, 'opt.rows', [])
518
+
519
+ //find
520
+ let r = null
521
+ let kr = null
522
+ each(rows, (v, k) => {
523
+ if (get(v, 'id', '') === id) {
524
+ r = v
525
+ kr = k
526
+ return false //跳出
527
+ }
528
+ })
529
+
530
+ //check
531
+ if (!iseobj(r)) {
532
+ vo.$alert(`${vo.$t('cruleEditNoTargetData')}`, { type: 'error' })
533
+ return
534
+ }
535
+
536
+ //enable
537
+ let _enable = get(r, 'enable', 'n')
538
+ let enable = _enable === 'y' ? 'n' : 'y'
539
+ // console.log('enable', enable)
540
+
541
+ //set
542
+ set(vo, `opt.rows[${kr}].enable`, enable)
543
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
544
+
545
+ //refresh
546
+ vo.refresh()
547
+
548
+ //isModified
549
+ vo.isModified = true
550
+
551
+ },
552
+
553
+ toggleItemsEnableAllYes: function() {
554
+ // console.log('toggleItemsEnableAllYes')
555
+
556
+ let vo = this
557
+
558
+ //rows
559
+ let rows = get(vo, 'opt.rows', [])
560
+ // console.log('rows', rows)
561
+
562
+ //kpRow
563
+ let kpRow = {}
564
+ each(rows, (r, kr) => {
565
+ kpRow[r.id] = kr
566
+ })
567
+
568
+ //rowsEff
569
+ let rowsEff = vo.getDisplayData()
570
+ // console.log('rowsEff', rowsEff)
571
+
572
+ //toggle
573
+ each(rowsEff, (r) => {
574
+
575
+ //kr
576
+ let kr = kpRow[r.id]
577
+
578
+ //set
579
+ set(vo, `opt.rows[${kr}].enable`, 'y')
580
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
581
+
582
+ })
583
+
584
+ //refresh
585
+ vo.refresh()
586
+
587
+ //isModified
588
+ vo.isModified = true
589
+
590
+ },
591
+
592
+ toggleItemsEnableAllNo: function() {
593
+ // console.log('toggleItemsEnableAllNo')
594
+
595
+ let vo = this
596
+
597
+ //rows
598
+ let rows = get(vo, 'opt.rows', [])
599
+ // console.log('rows', rows)
600
+
601
+ //kpRow
602
+ let kpRow = {}
603
+ each(rows, (r, kr) => {
604
+ kpRow[r.id] = kr
605
+ })
606
+
607
+ //rowsEff
608
+ let rowsEff = vo.getDisplayData()
609
+ // console.log('rowsEff', rowsEff)
610
+
611
+ //toggle
612
+ each(rowsEff, (r) => {
613
+
614
+ //kr
615
+ let kr = kpRow[r.id]
616
+
617
+ //set
618
+ set(vo, `opt.rows[${kr}].enable`, 'n')
619
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
620
+
621
+ })
622
+
623
+ //refresh
624
+ vo.refresh()
625
+
626
+ //isModified
627
+ vo.isModified = true
628
+
629
+ },
630
+
631
+ toggleItemsEnableAllInv: function() {
632
+ // console.log('toggleItemsEnableAllInv')
633
+
634
+ let vo = this
635
+
636
+ //rows
637
+ let rows = get(vo, 'opt.rows', [])
638
+ // console.log('rows', rows)
639
+
640
+ //kpRow
641
+ let kpRow = {}
642
+ each(rows, (r, kr) => {
643
+ kpRow[r.id] = kr
644
+ })
645
+
646
+ //rowsEff
647
+ let rowsEff = vo.getDisplayData()
648
+ // console.log('rowsEff', rowsEff)
649
+
650
+ //toggle
651
+ each(rowsEff, (r) => {
652
+
653
+ //kr
654
+ let kr = kpRow[r.id]
655
+
656
+ //enable
657
+ let _enable = get(r, 'enable', 'n')
658
+ let enable = _enable === 'y' ? 'n' : 'y'
659
+
660
+ //set
661
+ set(vo, `opt.rows[${kr}].enable`, enable)
662
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
663
+
664
+ })
665
+
666
+ //refresh
667
+ vo.refresh()
668
+
669
+ //isModified
670
+ vo.isModified = true
671
+
672
+ },
673
+
674
+ clickBtns: function(msg) {
675
+ // console.log('clickBtns', msg)
676
+
677
+ let vo = this
678
+
679
+ //evName
680
+ if (msg.evName === 'toFullscreen') {
681
+ vo.fullscreen = true
682
+ }
683
+ else if (msg.evName === 'toNormalscreen') {
684
+ vo.fullscreen = false
685
+ }
686
+
687
+ },
688
+
689
+ clickSave: function(msg) {
690
+ //console.log('methods clickSave', msg)
691
+
692
+ let vo = this
693
+
694
+ //save按鈕第一行立刻釋放視覺鎖
695
+ msg.pm.resolve()
696
+
697
+ //fire-and-forget, 不 await
698
+ vo.doSave()
699
+
700
+ },
701
+
702
+ doSave: function() {
703
+
704
+ let vo = this
705
+
706
+ async function core() {
707
+
708
+ //show loading
709
+ vo.$ui.updateLoading(true)
710
+
711
+ //delay
712
+ await delay(300)
713
+
714
+ //rows
715
+ let rows = get(vo, 'opt.rows', [])
716
+ // console.log('rows', rows)
717
+
718
+ //kpRule
719
+ let kpRule = {}
720
+ each(rows, (r) => {
721
+ let id = get(r, 'id', '')
722
+ let enable = get(r, 'enable', '')
723
+ if (!isestr(id)) {
724
+ console.log(`invalid id`)
725
+ return true //跳出換下一個
726
+ }
727
+ if (!isestr(enable)) {
728
+ console.log(`invalid enable`)
729
+ return true //跳出換下一個
730
+ }
731
+ kpRule[id] = enable
732
+ })
733
+ // console.log('kpRule', kpRule)
734
+
735
+ //crules
736
+ let crules = JSON.stringify(kpRule)
737
+ // console.log('crules', crules)
738
+
739
+ return crules
740
+ }
741
+
742
+ //core
743
+ core()
744
+ .then((rows) => {
745
+
746
+ //resolve
747
+ vo.pm.resolve(rows)
748
+
749
+ //hide
750
+ vo.bShow = false
751
+
752
+ })
753
+ .catch((err) => {
754
+ console.log('doSave', err)
755
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' }) //§5.1: 非預期例外須告知, 不靜默吞 (失敗時 .then 不執行→視窗不關)
756
+ })
757
+ .finally(() => {
758
+
759
+ //hide loading
760
+ vo.$ui.updateLoading(false)
761
+
762
+ })
763
+
764
+ },
765
+
766
+ clickClose: function() {
767
+ //console.log('methods clickClose')
768
+
769
+ let vo = this
770
+
771
+ //reject
772
+ vo.pm.reject('close window')
773
+
774
+ //hide
775
+ vo.bShow = false
776
+
777
+ },
778
+
779
+ show: function (msg) {
780
+ // console.log('methods show', msg)
781
+
782
+ let vo = this
783
+
784
+ //pm
785
+ vo.pm = genPm()
786
+
787
+ //default
788
+ vo.isModified = false
789
+
790
+ //isEditable, pemi
791
+ let isEditable = get(msg, 'isEditable', false)
792
+ let pemi = get(msg, 'pemi', {})
793
+
794
+ //cloneDeep
795
+ pemi = cloneDeep(pemi)
796
+
797
+ //crules
798
+ let crules = get(pemi, 'crules', '')
799
+
800
+ //kpRule
801
+ let kpRule = {}
802
+ if (isestr(crules)) {
803
+ try {
804
+ kpRule = JSON5.parse(crules)
805
+ }
806
+ catch (err) {
807
+ console.log('crules', crules)
808
+ console.log('err', err)
809
+ }
810
+
811
+ }
812
+ // console.log('kpRule', kpRule)
813
+
814
+ //items
815
+ let items = map(vo.targets, (v) => {
816
+ let enable = get(kpRule, v.id, '')
817
+ enable = enable === 'y' ? 'y' : 'n'
818
+ let r = {
819
+ id: v.id,
820
+ enable,
821
+ }
822
+ return r
823
+ })
824
+ // console.log('items', items)
825
+
826
+ //save
827
+ vo.isEditable = isEditable
828
+ vo.pemi = pemi
829
+ vo.items = items
830
+
831
+ //genOpt
832
+ vo.genOpt()
833
+
834
+ //firstLoading
835
+ vo.firstLoading = false
836
+
837
+ //bShow
838
+ vo.bShow = true
839
+
840
+ return vo.pm
841
+ },
842
+
843
+ }
844
+ }
845
+ </script>
846
+
847
+ <style scoped>
848
+ </style>