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,943 @@
1
+ <template>
2
+ <WDialog
3
+ :show.sync="bShow"
4
+ :title="isEditable?$t('grupEditCpemis'):$t('grupEditCpemisForDisplay')"
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="showVeCpemisToggleItemsEnableAllYes"
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="showVeCpemisToggleItemsEnableAllNo"
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="showVeCpemisToggleItemsEnableAllInv"
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('cpemiDeleteCheckTargets')"
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==='name'">{{ props.value }}</span>
131
+ <ModeSelectChip
132
+ v-else-if="props.key==='mode'"
133
+ :value="props.row.mode"
134
+ :editable="isEditable && props.row.enable === 'y'"
135
+ :labelContent="'modeSelect'"
136
+ @input="(item)=>{showVeCpemisToggleItemModeByName(props.row.name, item)}"
137
+ ></ModeSelectChip>
138
+ <input v-else-if="props.key==='enable'" type="checkbox" :checked="props.value === 'y'" @click="showVeCpemisToggleItemEnableByName(props.row.name)" :disabled="!isEditable" />
139
+ <span v-else>{{ props.value }}</span>
140
+ </template>
141
+ </WAggridVue>
142
+ </template>
143
+
144
+ </template>
145
+
146
+ <div
147
+ style="padding:10px 15px; font-size:0.8rem;"
148
+ v-else
149
+ >
150
+ {{$t('waitingData')}}
151
+ </div>
152
+
153
+ </div>
154
+ </template>
155
+ </WDialog>
156
+ </template>
157
+
158
+ <script>
159
+ import { mdiDeleteForever, mdiFullscreen, mdiFullscreenExit, mdiFormatListCheckbox, mdiFileTree, mdiTrashCanOutline, mdiCheckboxMultipleBlankOutline, mdiCheckboxMultipleMarked, mdiCodeTagsCheck } from '@mdi/js/mdi.js'
160
+ import Vue from 'vue'
161
+ import JSON5 from 'json5'
162
+ import get from 'lodash-es/get.js'
163
+ import set from 'lodash-es/set.js'
164
+ import each from 'lodash-es/each.js'
165
+ import map from 'lodash-es/map.js'
166
+ import size from 'lodash-es/size.js'
167
+ import filter from 'lodash-es/filter.js'
168
+ import sortBy from 'lodash-es/sortBy.js'
169
+ import cloneDeep from 'lodash-es/cloneDeep.js'
170
+ import genPm from 'wsemi/src/genPm.mjs'
171
+ import delay from 'wsemi/src/delay.mjs'
172
+ import iseobj from 'wsemi/src/iseobj.mjs'
173
+ import isestr from 'wsemi/src/isestr.mjs'
174
+ import WDialog from 'w-component-vue/src/components/WDialog.vue'
175
+ import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
176
+ import WAggridVue from 'w-aggrid-vue/src/components/WAggridVue.vue'
177
+ import ModeSelectChip from './ModeSelectChip.vue'
178
+
179
+
180
+ export default {
181
+ components: {
182
+ WDialog,
183
+ WButtonCircle,
184
+ WAggridVue,
185
+ ModeSelectChip,
186
+ },
187
+ props: {
188
+ },
189
+ data: function() {
190
+ return {
191
+ mdiDeleteForever,
192
+ mdiFullscreen,
193
+ mdiFullscreenExit,
194
+ mdiFormatListCheckbox,
195
+ mdiFileTree,
196
+ mdiTrashCanOutline,
197
+ mdiCheckboxMultipleBlankOutline,
198
+ mdiCheckboxMultipleMarked,
199
+ mdiCodeTagsCheck,
200
+
201
+ bShow: false,
202
+ pm: null,
203
+
204
+ fullscreen: false,
205
+
206
+ panelHeight: 100,
207
+ headHeight: 100,
208
+
209
+ firstLoading: true,
210
+ firstSetting: true,
211
+ isEditable: false,
212
+ isModified: false,
213
+
214
+ grup: null,
215
+
216
+ items: [],
217
+ itemsCheck: [],
218
+ opt: null,
219
+
220
+ }
221
+ },
222
+ mounted: function() {
223
+ //console.log('mounted')
224
+
225
+ let vo = this
226
+
227
+ //set
228
+ Vue.prototype.$dg.showVeCpemis = vo.show
229
+ Vue.prototype.$dg.showVeCpemisToggleItemModeByName = vo.showVeCpemisToggleItemModeByName
230
+ Vue.prototype.$dg.showVeCpemisToggleItemEnableByName = vo.showVeCpemisToggleItemEnableByName
231
+
232
+ //firstSetting
233
+ if (vo.firstSetting) {
234
+ // console.log('webInfor', vo.webInfor)
235
+
236
+ //會觸發數據變更再導致opt變更導致觸發rowsChange等事件, 故得要延遲, 供組件偵測初始設定數據初始化之用
237
+ setTimeout(() => {
238
+ vo.firstSetting = false
239
+ // console.log('firstSetting', vo.firstSetting)
240
+ }, 1)
241
+
242
+ }
243
+
244
+ },
245
+ computed: {
246
+
247
+ syncState: function() {
248
+ let vo = this
249
+ return get(vo, '$store.state.syncState')
250
+ },
251
+
252
+ targets: function() {
253
+ let rs = get(this, `$store.state.targets`)
254
+ rs = sortBy(rs, 'order')
255
+ return rs
256
+ },
257
+
258
+ pemis: function() {
259
+ let rs = get(this, `$store.state.pemis`)
260
+ rs = sortBy(rs, 'order')
261
+ return rs
262
+ },
263
+
264
+ grups: function() {
265
+ let rs = get(this, `$store.state.grups`)
266
+ rs = sortBy(rs, 'order')
267
+ return rs
268
+ },
269
+
270
+ users: function() {
271
+ let rs = get(this, `$store.state.users`)
272
+ rs = sortBy(rs, 'order')
273
+ return rs
274
+ },
275
+
276
+ kpHeaderBtns: function() {
277
+ let vo = this
278
+ let kp = {
279
+ // delete: {
280
+ // icon: mdiDeleteForever,
281
+ // tooltip: `${vo.$t('delete')}${vo.tableNameCht}`,
282
+ // evName: 'delete'
283
+ // },
284
+ toFullscreen: {
285
+ icon: mdiFullscreen,
286
+ tooltip: vo.$t('screenFull'),
287
+ evName: 'toFullscreen'
288
+ },
289
+ toNormalscreen: {
290
+ icon: mdiFullscreenExit,
291
+ tooltip: vo.$t('screenNormal'),
292
+ evName: 'toNormalscreen'
293
+ },
294
+ }
295
+ return kp
296
+ },
297
+
298
+ useHeaderBtns: function() {
299
+ let vo = this
300
+ let bts = []
301
+ if (true) {
302
+ let k = vo.fullscreen ? 'toNormalscreen' : 'toFullscreen'
303
+ bts = [
304
+ ...bts,
305
+ vo.kpHeaderBtns[k]
306
+ ]
307
+ }
308
+ // if (vo.useDelete) {
309
+ // let k = 'delete'
310
+ // bts = [
311
+ // ...bts,
312
+ // vo.kpHeaderBtns[k]
313
+ // ]
314
+ // }
315
+ return bts
316
+ },
317
+
318
+ contentHeight: function() {
319
+ let vo = this
320
+
321
+ //h
322
+ let h = vo.panelHeight - vo.headHeight
323
+ h = Math.max(h, 0)
324
+
325
+ return h
326
+ },
327
+
328
+ hasItemsCheck: function() {
329
+ let vo = this
330
+
331
+ //h
332
+ let b = vo.itemsCheck.length > 0
333
+
334
+ return b
335
+ },
336
+
337
+ },
338
+ methods: {
339
+
340
+ resizeDialog: function(msg) {
341
+ // console.log('methods resizeDialog', msg)
342
+
343
+ let vo = this
344
+
345
+ //panelWidth, panelHeight
346
+ vo.panelHeight = msg.contentHeightMax
347
+
348
+ },
349
+
350
+ resizeHead: function(msg) {
351
+ // console.log('methods resizeHead', msg)
352
+
353
+ let vo = this
354
+
355
+ //headHeight
356
+ vo.headHeight = msg.snew.offsetHeight
357
+
358
+ },
359
+
360
+ genOpt: function() {
361
+ // console.log('methods genOpt')
362
+
363
+ let vo = this
364
+
365
+ //default
366
+ vo.itemsCheck = []
367
+
368
+ //opt
369
+ let opt = null
370
+ if (size(vo.items) > 0) {
371
+
372
+ //ks
373
+ let ks = [
374
+ 'name',
375
+ 'mode',
376
+ 'enable',
377
+ ]
378
+ // console.log('ks', ks)
379
+
380
+ //kpHead
381
+ let kpHead = {
382
+ 'name': vo.$t('pemiName'),
383
+ 'mode': vo.$t('operPemiMode'),
384
+ 'enable': vo.$t('operEnable'),
385
+ }
386
+
387
+ //opt
388
+ opt = {
389
+ language: vo.$t('aggridLanguage'),
390
+ rows: vo.items,
391
+ keys: ks,
392
+ kpHead,
393
+ autoFitColumn: true,
394
+ defCellEditable: false, //vo.isEditable,
395
+ defHeadFilter: true,
396
+ defCellAlignH: 'left',
397
+ kpCellEditable: {
398
+ 'name': vo.isEditable,
399
+ 'mode': false,
400
+ 'enable': false,
401
+ },
402
+ kpHeadWidth: {
403
+ 'mode': 90, //ModeSelectChip 寬 56 + 儲存格內距 11×2 = 78, 留餘裕
404
+ 'enable': 100,
405
+ },
406
+ // kpRowDrag: {
407
+ // 'name': true,
408
+ // },
409
+ // kpHeadFilter: {
410
+ // 'enable': false,
411
+ // },
412
+ kpHeadFilterType: {
413
+ 'name': 'text',
414
+ 'mode': 'text',
415
+ 'enable': 'text',
416
+ },
417
+ kpHeadCheckBox: {
418
+ 'name': true,
419
+ },
420
+ kpHeadFocusHighlight: { //儲存格內已有自己的控制項(模式下拉、勾選框), 不再疊儲存格焦點框
421
+ 'mode': false,
422
+ 'enable': false,
423
+ },
424
+ rowsChange: (rs) => {
425
+ // console.log('rowsChange', rs)
426
+ // console.log('rowsChange cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
427
+
428
+ //check
429
+ if (!vo.syncState || vo.firstLoading || vo.firstSetting) {
430
+ return
431
+ }
432
+
433
+ //isModified
434
+ vo.isModified = true
435
+
436
+ },
437
+ rowChecked: (rs) => {
438
+ // console.log('rowChecked', rs)
439
+ // console.log('rowChecked cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
440
+
441
+ //save itemsCheck
442
+ vo.itemsCheck = cloneDeep(rs)
443
+
444
+ },
445
+ }
446
+ // console.log('opt', opt)
447
+
448
+ }
449
+
450
+ //save
451
+ vo.opt = opt
452
+
453
+ },
454
+
455
+ deleteItemsCheck: function() {
456
+ // console.log('method deleteItemsCheck')
457
+
458
+ let vo = this
459
+
460
+ //check
461
+ if (size(vo.itemsCheck) === 0) {
462
+ return
463
+ }
464
+
465
+ //cloneDeep
466
+ let rows = get(vo, 'opt.rows', [])
467
+
468
+ //cloneDeep
469
+ rows = cloneDeep(rows)
470
+
471
+ //filter
472
+ each(vo.itemsCheck, (v) => {
473
+ // console.log('v', v)
474
+ let name = get(v, 'data.name', '')
475
+ if (!isestr(name)) {
476
+ console.log(`invalid name`)
477
+ return true //跳出換下一個
478
+ }
479
+ rows = filter(rows, (vv) => {
480
+ return vv.name !== name
481
+ })
482
+ })
483
+
484
+ //clear
485
+ vo.itemsCheck = []
486
+
487
+ //save
488
+ vo.opt.rows = rows
489
+ // console.log('deleteItemsCheck cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
490
+
491
+ //isModified
492
+ vo.isModified = true
493
+
494
+ },
495
+
496
+ refresh: function() {
497
+ let vo = this
498
+
499
+ //cmp
500
+ let cmp = get(vo, '$refs.rftable')
501
+ // console.log('cmp', cmp)
502
+
503
+ //refresh, 因set不會觸發ag-grid重繪, 故須另外調用組件函數refresh(內為redrawRows)重繪各列, 使cell-render slot內容更新(w-aggrid-vue 2.0.56起以cell-render slot取代opt.kpCellRender)
504
+ cmp.refresh()
505
+
506
+ },
507
+
508
+ getDisplayData: function() {
509
+ let vo = this
510
+
511
+ //cmp
512
+ let cmp = get(vo, '$refs.rftable')
513
+ // console.log('cmp', cmp)
514
+
515
+ //getDisplayData
516
+ let rows = cmp.getDisplayData()
517
+
518
+ return rows
519
+ },
520
+
521
+ showVeCpemisToggleItemModeByName: function(name, mode) {
522
+ // console.log('showVeCpemisToggleItemModeByName', name, mode)
523
+
524
+ let vo = this
525
+
526
+ //check
527
+ if (!isestr(name)) {
528
+ vo.$alert(`${vo.$t('cpemiEditNoName')}`, { type: 'error' })
529
+ return
530
+ }
531
+
532
+ //rows
533
+ let rows = get(vo, 'opt.rows', [])
534
+
535
+ //find
536
+ let r = null
537
+ let kr = null
538
+ each(rows, (v, k) => {
539
+ if (get(v, 'name', '') === name) {
540
+ r = v
541
+ kr = k
542
+ return false //跳出
543
+ }
544
+ })
545
+
546
+ //check
547
+ if (!iseobj(r)) {
548
+ vo.$alert(`${vo.$t('cpemiEditNoTarget')}`, { type: 'error' })
549
+ return
550
+ }
551
+
552
+ //mode
553
+ // let mode = th.value
554
+ // console.log('mode', mode)
555
+
556
+ //set
557
+ set(vo, `opt.rows[${kr}].mode`, mode)
558
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
559
+
560
+ //refresh
561
+ vo.refresh()
562
+
563
+ //isModified
564
+ vo.isModified = true
565
+
566
+ },
567
+
568
+ showVeCpemisToggleItemEnableByName: function(name) {
569
+ // console.log('showVeCpemisToggleItemEnableByName', name)
570
+
571
+ let vo = this
572
+
573
+ //check
574
+ if (!isestr(name)) {
575
+ vo.$alert(`${vo.$t('cpemiEditNoName')}`, { type: 'error' })
576
+ return
577
+ }
578
+
579
+ //rows
580
+ let rows = get(vo, 'opt.rows', [])
581
+
582
+ //find
583
+ let r = null
584
+ let kr = null
585
+ each(rows, (v, k) => {
586
+ if (get(v, 'name', '') === name) {
587
+ r = v
588
+ kr = k
589
+ return false //跳出
590
+ }
591
+ })
592
+
593
+ //check
594
+ if (!iseobj(r)) {
595
+ vo.$alert(`${vo.$t('cpemiEditNoTarget')}`, { type: 'error' })
596
+ return
597
+ }
598
+
599
+ //enable
600
+ let _enable = get(r, 'enable', 'n')
601
+ let enable = _enable === 'y' ? 'n' : 'y'
602
+ // console.log('enable', enable)
603
+
604
+ //set
605
+ set(vo, `opt.rows[${kr}].enable`, enable)
606
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
607
+
608
+ //refresh
609
+ vo.refresh()
610
+
611
+ //isModified
612
+ vo.isModified = true
613
+
614
+ },
615
+
616
+ showVeCpemisToggleItemsEnableAllYes: function() {
617
+ // console.log('showVeCpemisToggleItemsEnableAllYes')
618
+
619
+ let vo = this
620
+
621
+ //rows
622
+ let rows = get(vo, 'opt.rows', [])
623
+ // console.log('rows', rows)
624
+
625
+ //kpRow
626
+ let kpRow = {}
627
+ each(rows, (r, kr) => {
628
+ kpRow[r.name] = kr
629
+ })
630
+
631
+ //rowsEff
632
+ let rowsEff = vo.getDisplayData()
633
+ // console.log('rowsEff', rowsEff)
634
+
635
+ //toggle
636
+ each(rowsEff, (r) => {
637
+
638
+ //kr
639
+ let kr = kpRow[r.name]
640
+
641
+ //set
642
+ set(vo, `opt.rows[${kr}].enable`, 'y')
643
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
644
+
645
+ })
646
+
647
+ //refresh
648
+ vo.refresh()
649
+
650
+ //isModified
651
+ vo.isModified = true
652
+
653
+ },
654
+
655
+ showVeCpemisToggleItemsEnableAllNo: function() {
656
+ // console.log('showVeCpemisToggleItemsEnableAllNo')
657
+
658
+ let vo = this
659
+
660
+ //rows
661
+ let rows = get(vo, 'opt.rows', [])
662
+ // console.log('rows', rows)
663
+
664
+ //kpRow
665
+ let kpRow = {}
666
+ each(rows, (r, kr) => {
667
+ kpRow[r.name] = kr
668
+ })
669
+
670
+ //rowsEff
671
+ let rowsEff = vo.getDisplayData()
672
+ // console.log('rowsEff', rowsEff)
673
+
674
+ //toggle
675
+ each(rowsEff, (r) => {
676
+
677
+ //kr
678
+ let kr = kpRow[r.name]
679
+
680
+ //set
681
+ set(vo, `opt.rows[${kr}].enable`, 'n')
682
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
683
+
684
+ })
685
+
686
+ //refresh
687
+ vo.refresh()
688
+
689
+ //isModified
690
+ vo.isModified = true
691
+
692
+ },
693
+
694
+ showVeCpemisToggleItemsEnableAllInv: function() {
695
+ // console.log('showVeCpemisToggleItemsEnableAllInv')
696
+
697
+ let vo = this
698
+
699
+ //rows
700
+ let rows = get(vo, 'opt.rows', [])
701
+ // console.log('rows', rows)
702
+
703
+ //kpRow
704
+ let kpRow = {}
705
+ each(rows, (r, kr) => {
706
+ kpRow[r.name] = kr
707
+ })
708
+
709
+ //rowsEff
710
+ let rowsEff = vo.getDisplayData()
711
+ // console.log('rowsEff', rowsEff)
712
+
713
+ //toggle
714
+ each(rowsEff, (r) => {
715
+
716
+ //kr
717
+ let kr = kpRow[r.name]
718
+
719
+ //enable
720
+ let _enable = get(r, 'enable', 'n')
721
+ let enable = _enable === 'y' ? 'n' : 'y'
722
+
723
+ //set
724
+ set(vo, `opt.rows[${kr}].enable`, enable)
725
+ // console.log('vo.opt.rows[kr]', cloneDeep(vo.opt.rows[kr]))
726
+
727
+ })
728
+
729
+ //refresh
730
+ vo.refresh()
731
+
732
+ //isModified
733
+ vo.isModified = true
734
+
735
+ },
736
+
737
+ clickBtns: function(msg) {
738
+ // console.log('clickBtns', msg)
739
+
740
+ let vo = this
741
+
742
+ //evName
743
+ if (msg.evName === 'toFullscreen') {
744
+ vo.fullscreen = true
745
+ }
746
+ else if (msg.evName === 'toNormalscreen') {
747
+ vo.fullscreen = false
748
+ }
749
+
750
+ },
751
+
752
+ clickSave: function(msg) {
753
+ //console.log('methods clickSave', msg)
754
+
755
+ let vo = this
756
+
757
+ //save按鈕第一行立刻釋放視覺鎖
758
+ msg.pm.resolve()
759
+
760
+ //fire-and-forget, 不 await
761
+ vo.doSave()
762
+
763
+ },
764
+
765
+ doSave: function() {
766
+
767
+ let vo = this
768
+
769
+ async function core() {
770
+
771
+ //show loading
772
+ vo.$ui.updateLoading(true)
773
+
774
+ //delay
775
+ await delay(300)
776
+
777
+ //rows
778
+ let rows = get(vo, 'opt.rows', [])
779
+ // console.log('rows', rows)
780
+
781
+ //kpPemi
782
+ let kpPemi = {}
783
+ each(rows, (r) => {
784
+ let name = get(r, 'name', '')
785
+ let mode = get(r, 'mode', '')
786
+ let enable = get(r, 'enable', '')
787
+ if (!isestr(name)) {
788
+ console.log(`invalid name`)
789
+ return true //跳出換下一個
790
+ }
791
+ if (mode !== 'OR' && mode !== 'AND') {
792
+ console.log(`invalid mode[${mode}]`)
793
+ return true //跳出換下一個
794
+ }
795
+ if (!isestr(enable)) {
796
+ console.log(`invalid enable`)
797
+ return true //跳出換下一個
798
+ }
799
+ kpPemi[name] = {
800
+ mode,
801
+ isActive: enable,
802
+ }
803
+ })
804
+ // console.log('kpPemi', kpPemi)
805
+
806
+ //cpemis
807
+ let cpemis = JSON.stringify(kpPemi)
808
+ // console.log('cpemis', cpemis)
809
+
810
+ return cpemis
811
+ }
812
+
813
+ //core
814
+ core()
815
+ .then((rows) => {
816
+
817
+ //resolve
818
+ vo.pm.resolve(rows)
819
+
820
+ //hide
821
+ vo.bShow = false
822
+
823
+ })
824
+ .catch((err) => {
825
+ console.log('doSave', err)
826
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' }) //§5.1: 非預期例外須告知, 不靜默吞 (失敗時 .then 不執行→視窗不關)
827
+ })
828
+ .finally(() => {
829
+
830
+ //hide loading
831
+ vo.$ui.updateLoading(false)
832
+
833
+ })
834
+
835
+ },
836
+
837
+ clickClose: function() {
838
+ //console.log('methods clickClose')
839
+
840
+ let vo = this
841
+
842
+ //reject
843
+ vo.pm.reject('close window')
844
+
845
+ //hide
846
+ vo.bShow = false
847
+
848
+ },
849
+
850
+ show: function (msg) {
851
+ // console.log('methods show', msg)
852
+
853
+ let vo = this
854
+
855
+ //pm
856
+ vo.pm = genPm()
857
+
858
+ //default
859
+ vo.isModified = false
860
+
861
+ //isEditable, grup
862
+ let isEditable = get(msg, 'isEditable', false)
863
+ let grup = get(msg, 'grup', {})
864
+
865
+ //cloneDeep
866
+ grup = cloneDeep(grup)
867
+
868
+ //cpemis
869
+ let cpemis = get(grup, 'cpemis', '')
870
+ // console.log('cpemis', cpemis)
871
+
872
+ //kpPemi
873
+ let kpPemi = {}
874
+ if (isestr(cpemis)) {
875
+ try {
876
+ kpPemi = JSON5.parse(cpemis)
877
+ }
878
+ catch (err) {
879
+ console.log('cpemis', cpemis)
880
+ console.log('err', err)
881
+ }
882
+ }
883
+ // console.log('kpPemi', kpPemi)
884
+
885
+ //items
886
+ let items = map(vo.pemis, (v) => {
887
+ // console.log('pemis v', v)
888
+
889
+ //p
890
+ let p = get(kpPemi, v.name, null)
891
+ // console.log('p', p)
892
+
893
+ //name
894
+ let name = v.name
895
+ // console.log('name', name)
896
+
897
+ //mode
898
+ let mode = get(p, 'mode', '')
899
+ if (mode !== 'OR' && mode !== 'AND') {
900
+ mode = 'OR'
901
+ }
902
+ // console.log('mode', mode)
903
+
904
+ //enable
905
+ let _enable = get(p, 'isActive', '')
906
+ let enable = _enable === 'y' ? 'y' : 'n'
907
+ // console.log('isActive', enable)
908
+
909
+ //r
910
+ let r = {
911
+ name,
912
+ mode,
913
+ enable,
914
+ }
915
+ // console.log('r', r)
916
+
917
+ return r
918
+ })
919
+ // console.log('items', items)
920
+
921
+ //save
922
+ vo.isEditable = isEditable
923
+ vo.grup = grup
924
+ vo.items = items
925
+
926
+ //genOpt
927
+ vo.genOpt()
928
+
929
+ //firstLoading
930
+ vo.firstLoading = false
931
+
932
+ //bShow
933
+ vo.bShow = true
934
+
935
+ return vo.pm
936
+ },
937
+
938
+ }
939
+ }
940
+ </script>
941
+
942
+ <style scoped>
943
+ </style>