w-web-perm 1.0.85 → 1.1.1

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 (67) hide show
  1. package/dist/index.tmp +1 -1
  2. package/dist/js/{chunk-vendors-legacy.7b6ae0b0.js → chunk-vendors-legacy.dc1d9630.js} +2 -2
  3. package/dist/js/{chunk-vendors.7b6ae0b0.js → chunk-vendors.dc1d9630.js} +2 -2
  4. package/dist/w-web-perm.umd.js +2 -2
  5. package/dist/w-web-perm.umd.js.map +1 -1
  6. package/docs/WWebPerm.html +1 -1
  7. package/docs/global.html +1 -1
  8. package/docs/index.html +1 -1
  9. package/docs/server_WWebPerm.mjs.html +1 -1
  10. package/docs/server_procCore.mjs.html +1 -1
  11. package/docs/src_fetchJson.mjs.html +1 -1
  12. package/package.json +12 -12
  13. package/tableTags-web-perm.json +1 -1
  14. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/README.md +0 -58
  15. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/server_procLang.mjs.diff +0 -31
  16. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_App.vue.diff +0 -19
  17. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_LayoutContentGrups.vue.diff +0 -40
  18. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_LayoutContentPemis.vue.diff +0 -40
  19. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_ModeSelectChip.vue.new.diff +0 -124
  20. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_RelationChip.vue.new.diff +0 -116
  21. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_RelationChips.vue.new.diff +0 -152
  22. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_VeCgrups.vue.diff +0 -76
  23. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_VeCpemis.vue.diff +0 -76
  24. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_VeCrules.vue.diff +0 -14
  25. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_VeGrupBlngUsers.vue.diff +0 -121
  26. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/diff/src_components_VePemiBlngGrups.vue.diff +0 -121
  27. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/server/procLang.mjs +0 -1049
  28. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/App.vue +0 -204
  29. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/LayoutContentGrups.vue +0 -1260
  30. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/LayoutContentPemis.vue +0 -1262
  31. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/ModeSelectChip.vue +0 -121
  32. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/RelationChip.vue +0 -113
  33. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/RelationChips.vue +0 -149
  34. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/VeCgrups.vue +0 -943
  35. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/VeCpemis.vue +0 -943
  36. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/VeCrules.vue +0 -848
  37. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/VeGrupBlngUsers.vue +0 -1157
  38. package/w-web-perm/351/232/250/351/231/204/350/263/207/346/226/231/src/components/VePemiBlngGrups.vue +0 -1157
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  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/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
  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/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
  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/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
  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/verify.json +0 -390
  59. 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 +0 -93
  60. 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 +0 -23
  61. 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 +0 -321
  62. 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 +0 -173
  63. 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 +0 -330
  64. package//345/273/272/350/255/260w-aggrid-vue/350/252/277/346/225/264.md +0 -193
  65. package//345/273/272/350/255/260w-component-vue/350/210/207wsemi/350/252/277/346/225/264.md +0 -76
  66. package//345/273/272/350/255/260w-web-perm/350/252/277/346/225/264.md +0 -244
  67. 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 +0 -166
@@ -1,152 +0,0 @@
1
- --- /dev/null 2026-09-15 21:52:30.000000000 +0800
2
- +++ "./w-web-perm�\232��\231\204�\207�\226\231/src/components/RelationChips.vue" 2026-09-15 21:52:29.978398800 +0800
3
- @@ -0,0 +1,149 @@
4
- +<template>
5
- + <span style="white-space:nowrap;">
6
- +
7
- + <!-- 展開全部: 固定在最左, 不隨 chip 溢出被裁; 點擊以浮層列出全部 chip(可換行、可捲動) -->
8
- + <!-- WPopup(WTooltip) 之 displayType: 'block' 為 inline-block、'line' 為 block(命名與 CSS 相反), 此處須為行內元素以與其後之 chip 同列 -->
9
- + <template v-if="n > 0">
10
- + <WPopup
11
- + style="vertical-align:middle;"
12
- + :displayType="'block'"
13
- + :isolated="true"
14
- + :placement="'bottom-start'"
15
- + :paddingStyle="{v:8,h:10}"
16
- + :minWidth="320"
17
- + :maxWidth="560"
18
- + :labelContent="labelContentAll"
19
- + >
20
- + <template v-slot:trigger>
21
- + <div
22
- + :style="`display:inline-flex; align-items:center; box-sizing:border-box; height:22px; margin-right:4px; padding:0 6px; border:1px solid ${hoverAll?'#888':'#aaa'}; border-radius:4px; background:${hoverAll?'#f5f5f5':'#fff'}; color:${hoverAll?'#333':'#555'}; font-size:12px; line-height:20px; vertical-align:middle; cursor:pointer; user-select:none; transition:all 0.3s;`"
23
- + :title="tooltipAll"
24
- + @mouseenter="hoverAll=true"
25
- + @mouseleave="hoverAll=false"
26
- + >
27
- + <WIcon
28
- + :icon="mdiDotsHorizontal"
29
- + :size="14"
30
- + :color="hoverAll?'#333':'#555'"
31
- + :colorHover="'#333'"
32
- + ></WIcon>
33
- + <span style="padding-left:3px;">{{ n }}</span>
34
- + </div>
35
- + </template>
36
- + <template v-slot:content>
37
- + <div style="font-size:12px; color:#666; padding-bottom:6px;">
38
- + {{ usePopupTitle }}
39
- + </div>
40
- + <!-- 最大高 50vh: 於 900px 高之視窗自列位往下展開仍留得住底邊, 超過即於浮層內捲動 -->
41
- + <div style="display:flex; flex-wrap:wrap; gap:4px 6px; max-height:50vh; max-width:540px; overflow:auto;">
42
- + <RelationChip
43
- + v-for="(item, kitem) in itemsSorted"
44
- + :key="`p-${kitem}`"
45
- + :name="item.name"
46
- + :mode="item.mode"
47
- + :isCurrent="item.enable==='y'"
48
- + :editable="false"
49
- + :nameMaxWidth="600"
50
- + ></RelationChip>
51
- + </div>
52
- + </template>
53
- + </WPopup>
54
- + </template>
55
- +
56
- + <!-- 儲存格內之 chip: 本項永遠第 1 顆; 相鄰間距 4px; 溢出由儲存格裁切 -->
57
- + <RelationChip
58
- + v-for="(item, kitem) in itemsSorted"
59
- + :key="`c-${kitem}`"
60
- + :style="`margin-right:4px;`"
61
- + :name="item.name"
62
- + :mode="item.mode"
63
- + :isCurrent="item.enable==='y'"
64
- + :editable="editable"
65
- + :labelContent="labelContent"
66
- + @input="(item)=>{$emit('input',item)}"
67
- + ></RelationChip>
68
- +
69
- + </span>
70
- +</template>
71
- +
72
- +<script>
73
- +import { mdiDotsHorizontal } from '@mdi/js/mdi.js'
74
- +import get from 'lodash-es/get.js'
75
- +import size from 'lodash-es/size.js'
76
- +import filter from 'lodash-es/filter.js'
77
- +import WIcon from 'w-component-vue/src/components/WIcon.vue'
78
- +import WPopup from 'w-component-vue/src/components/WPopup.vue'
79
- +import RelationChip from './RelationChip.vue'
80
- +
81
- +
82
- +//關聯 chip 列表(供 VeGrupBlngUsers 之「所屬權限群組名稱」欄與 VePemiBlngGrups 之「所屬權限名稱」欄)
83
- +// - items: genItems 產生之 grups/pemis 陣列, 各項含 name、mode、enable('y' 為本項)
84
- +// - 顯示順序: enable='y'(本項)永遠第 1 顆, 其餘依原順序; 只改顯示, 不改儲存之 cgrups/cpemis 字串(權限合併結果與順序無關, 見 mShare.mjs 之 mergeRules)
85
- +// - 本項 chip 之模式段即下拉(RelationChip 之 ModeSelectChip), 變更以 input 事件回傳新模式, 由呼叫端沿用既有 showXxxToggleItemModeByName 處理
86
- +// - 「展開全部」鈕固定於最左, 浮層(WPopup, Teleport 至 body, 與 WDialog 共用 z-index 池故可疊於對話框上)內以 flex-wrap 列出全部 chip
87
- +export default {
88
- + components: {
89
- + WIcon,
90
- + WPopup,
91
- + RelationChip,
92
- + },
93
- + props: {
94
- + items: {
95
- + type: Array,
96
- + default: () => [],
97
- + },
98
- + editable: {
99
- + type: Boolean,
100
- + default: false,
101
- + },
102
- + popupTitle: { //浮層標題所用之欄名(如「所屬權限名稱」), 與數量合成 chipsPopupTitle
103
- + type: String,
104
- + default: '',
105
- + },
106
- + tooltipAll: {
107
- + type: String,
108
- + default: '',
109
- + },
110
- + labelContent: { //本項 chip 之模式下拉浮層之 wtlp 屬性值
111
- + type: String,
112
- + default: 'modeSelect',
113
- + },
114
- + labelContentAll: { //展開全部之浮層之 wtlp 屬性值
115
- + type: String,
116
- + default: 'relationChipsAll',
117
- + },
118
- + },
119
- + data: function() {
120
- + return {
121
- + mdiDotsHorizontal,
122
- + hoverAll: false,
123
- + }
124
- + },
125
- + computed: {
126
- +
127
- + n: function() {
128
- + let vo = this
129
- + return size(vo.items)
130
- + },
131
- +
132
- + itemsSorted: function() {
133
- + let vo = this
134
- + let a = filter(vo.items, (v) => get(v, 'enable', '') === 'y')
135
- + let b = filter(vo.items, (v) => get(v, 'enable', '') !== 'y')
136
- + return [...a, ...b]
137
- + },
138
- +
139
- + usePopupTitle: function() {
140
- + let vo = this
141
- + let t = vo.$t('chipsPopupTitle')
142
- + t = t.replace('{title}', vo.popupTitle)
143
- + t = t.replace('{n}', vo.n)
144
- + return t
145
- + },
146
- +
147
- + },
148
- +}
149
- +</script>
150
- +
151
- +<style scoped>
152
- +</style>
@@ -1,76 +0,0 @@
1
- diff --git a/../rddmanager_2_perm/node_modules/w-web-perm/src/components/VeCgrups.vue "b/./w-web-perm\351\232\250\351\231\204\350\263\207\346\226\231/src/components/VeCgrups.vue"
2
- index b51b65d..0408bc8 100644
3
- --- a/../rddmanager_2_perm/node_modules/w-web-perm/src/components/VeCgrups.vue
4
- +++ "b/./w-web-perm\351\232\250\351\231\204\350\263\207\346\226\231/src/components/VeCgrups.vue"
5
- @@ -128,19 +128,13 @@
6
- >
7
- <template v-slot:cell-render="props">
8
- <span v-if="props.key==='name'">{{ props.value }}</span>
9
- - <WTextSelect
10
- + <ModeSelectChip
11
- v-else-if="props.key==='mode'"
12
- - :style="`width:${modeSelectWidth}px;`"
13
- - :items="modeItems"
14
- :value="props.row.mode"
15
- - :editable="isEditable"
16
- - :paddingStyle="{v:0,h:10}"
17
- - :shadow="false"
18
- - :itemPaddingStyle="{v:8,h:10}"
19
- - :placementDistX="-10"
20
- + :editable="isEditable && props.row.enable === 'y'"
21
- :labelContent="'modeSelect'"
22
- @input="(item)=>{showVeCgrupsToggleItemModeByName(props.row.name, item)}"
23
- - ></WTextSelect>
24
- + ></ModeSelectChip>
25
- <input v-else-if="props.key==='enable'" type="checkbox" :checked="props.value === 'y'" @click="showVeCgrupsToggleItemEnableByName(props.row.name)" :disabled="!isEditable" />
26
- <span v-else>{{ props.value }}</span>
27
- </template>
28
- @@ -180,7 +174,7 @@ import isestr from 'wsemi/src/isestr.mjs'
29
- import WDialog from 'w-component-vue/src/components/WDialog.vue'
30
- import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
31
- import WAggridVue from 'w-aggrid-vue/src/components/WAggridVue.vue'
32
- -import WTextSelect from 'w-component-vue/src/components/WTextSelect.vue'
33
- +import ModeSelectChip from './ModeSelectChip.vue'
34
-
35
-
36
- export default {
37
- @@ -188,7 +182,7 @@ export default {
38
- WDialog,
39
- WButtonCircle,
40
- WAggridVue,
41
- - WTextSelect,
42
- + ModeSelectChip,
43
- },
44
- props: {
45
- },
46
- @@ -217,10 +211,6 @@ export default {
47
- isEditable: false,
48
- isModified: false,
49
-
50
- - //mode 欄之自製下拉(WTextSelect, 取代原生 select 以免彈出清單之 highlight 色由 OS 決定)
51
- - modeItems: ['OR', 'AND'],
52
- - modeSelectWidth: 72, //= 最長項 'AND' 文字實寬 + 左右內距 10×2 + 展開箭頭 18 + 邊框 1×2, 實測後定值(見 CLAUDE_experience.md)
53
- -
54
- user: null,
55
-
56
- items: [],
57
- @@ -410,7 +400,7 @@ export default {
58
- 'enable': false,
59
- },
60
- kpHeadWidth: {
61
- - 'mode': 100,
62
- + 'mode': 90, //ModeSelectChip 寬 56 + 儲存格內距 11×2 = 78, 留餘裕
63
- 'enable': 100,
64
- },
65
- // kpRowDrag: {
66
- @@ -427,6 +417,10 @@ export default {
67
- kpHeadCheckBox: {
68
- 'name': true,
69
- },
70
- + kpHeadFocusHighlight: { //儲存格內已有自己的控制項(模式下拉、勾選框), 不再疊儲存格焦點框
71
- + 'mode': false,
72
- + 'enable': false,
73
- + },
74
- rowsChange: (rs) => {
75
- // console.log('rowsChange', rs)
76
- // console.log('rowsChange cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
@@ -1,76 +0,0 @@
1
- diff --git a/../rddmanager_2_perm/node_modules/w-web-perm/src/components/VeCpemis.vue "b/./w-web-perm\351\232\250\351\231\204\350\263\207\346\226\231/src/components/VeCpemis.vue"
2
- index 7abe87e..8aac5db 100644
3
- --- a/../rddmanager_2_perm/node_modules/w-web-perm/src/components/VeCpemis.vue
4
- +++ "b/./w-web-perm\351\232\250\351\231\204\350\263\207\346\226\231/src/components/VeCpemis.vue"
5
- @@ -128,19 +128,13 @@
6
- >
7
- <template v-slot:cell-render="props">
8
- <span v-if="props.key==='name'">{{ props.value }}</span>
9
- - <WTextSelect
10
- + <ModeSelectChip
11
- v-else-if="props.key==='mode'"
12
- - :style="`width:${modeSelectWidth}px;`"
13
- - :items="modeItems"
14
- :value="props.row.mode"
15
- - :editable="isEditable"
16
- - :paddingStyle="{v:0,h:10}"
17
- - :shadow="false"
18
- - :itemPaddingStyle="{v:8,h:10}"
19
- - :placementDistX="-10"
20
- + :editable="isEditable && props.row.enable === 'y'"
21
- :labelContent="'modeSelect'"
22
- @input="(item)=>{showVeCpemisToggleItemModeByName(props.row.name, item)}"
23
- - ></WTextSelect>
24
- + ></ModeSelectChip>
25
- <input v-else-if="props.key==='enable'" type="checkbox" :checked="props.value === 'y'" @click="showVeCpemisToggleItemEnableByName(props.row.name)" :disabled="!isEditable" />
26
- <span v-else>{{ props.value }}</span>
27
- </template>
28
- @@ -180,7 +174,7 @@ import isestr from 'wsemi/src/isestr.mjs'
29
- import WDialog from 'w-component-vue/src/components/WDialog.vue'
30
- import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
31
- import WAggridVue from 'w-aggrid-vue/src/components/WAggridVue.vue'
32
- -import WTextSelect from 'w-component-vue/src/components/WTextSelect.vue'
33
- +import ModeSelectChip from './ModeSelectChip.vue'
34
-
35
-
36
- export default {
37
- @@ -188,7 +182,7 @@ export default {
38
- WDialog,
39
- WButtonCircle,
40
- WAggridVue,
41
- - WTextSelect,
42
- + ModeSelectChip,
43
- },
44
- props: {
45
- },
46
- @@ -217,10 +211,6 @@ export default {
47
- isEditable: false,
48
- isModified: false,
49
-
50
- - //mode 欄之自製下拉(WTextSelect, 取代原生 select 以免彈出清單之 highlight 色由 OS 決定)
51
- - modeItems: ['OR', 'AND'],
52
- - modeSelectWidth: 72, //= 最長項 'AND' 文字實寬 + 左右內距 10×2 + 展開箭頭 18 + 邊框 1×2, 實測後定值(見 CLAUDE_experience.md)
53
- -
54
- grup: null,
55
-
56
- items: [],
57
- @@ -410,7 +400,7 @@ export default {
58
- 'enable': false,
59
- },
60
- kpHeadWidth: {
61
- - 'mode': 100,
62
- + 'mode': 90, //ModeSelectChip 寬 56 + 儲存格內距 11×2 = 78, 留餘裕
63
- 'enable': 100,
64
- },
65
- // kpRowDrag: {
66
- @@ -427,6 +417,10 @@ export default {
67
- kpHeadCheckBox: {
68
- 'name': true,
69
- },
70
- + kpHeadFocusHighlight: { //儲存格內已有自己的控制項(模式下拉、勾選框), 不再疊儲存格焦點框
71
- + 'mode': false,
72
- + 'enable': false,
73
- + },
74
- rowsChange: (rs) => {
75
- // console.log('rowsChange', rs)
76
- // console.log('rowsChange cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
@@ -1,14 +0,0 @@
1
- diff --git a/../rddmanager_2_perm/node_modules/w-web-perm/src/components/VeCrules.vue "b/./w-web-perm\351\232\250\351\231\204\350\263\207\346\226\231/src/components/VeCrules.vue"
2
- index a456c45..deb9b64 100644
3
- --- a/../rddmanager_2_perm/node_modules/w-web-perm/src/components/VeCrules.vue
4
- +++ "b/./w-web-perm\351\232\250\351\231\204\350\263\207\346\226\231/src/components/VeCrules.vue"
5
- @@ -402,6 +402,9 @@ export default {
6
- kpHeadCheckBox: {
7
- 'id': true,
8
- },
9
- + kpHeadFocusHighlight: { //儲存格內已有自己的控制項(勾選框), 不再疊儲存格焦點框, 與其餘關聯對話框一致
10
- + 'enable': false,
11
- + },
12
- rowsChange: (rs) => {
13
- // console.log('rowsChange', rs)
14
- // console.log('rowsChange cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
@@ -1,121 +0,0 @@
1
- diff --git a/../rddmanager_2_perm/node_modules/w-web-perm/src/components/VeGrupBlngUsers.vue "b/./w-web-perm\351\232\250\351\231\204\350\263\207\346\226\231/src/components/VeGrupBlngUsers.vue"
2
- index 796f754..9fb6b7f 100644
3
- --- a/../rddmanager_2_perm/node_modules/w-web-perm/src/components/VeGrupBlngUsers.vue
4
- +++ "b/./w-web-perm\351\232\250\351\231\204\350\263\207\346\226\231/src/components/VeGrupBlngUsers.vue"
5
- @@ -140,31 +140,15 @@
6
- :opt="opt"
7
- >
8
- <template v-slot:cell-render="props">
9
- - <template v-if="props.key==='grupsNames'">
10
- - <span v-for="(item, idx) in props.row.grups" :key="idx" style="display:inline-block; line-height:20px; height:20px;">
11
- - <div style="display:flex;">
12
- - <div :style="'padding:0px 5px; border-top-left-radius:4px; border-bottom-left-radius:4px; ' + (item.enable === 'y' ? 'border-left:1px solid #ac2451; border-right:1px solid #9e2149; border-top:1px solid #ac2451; border-bottom:1px solid #ac2451; background:#be295a; color:#fff;' : 'border-left:1px solid #aaaaaa; border-right:1px solid #aaaaaa; border-top:1px solid #aaaaaa; border-bottom:1px solid #aaaaaa; background:#ffffff; color:#555;')">
13
- - {{ item.mode }}
14
- - </div>
15
- - <div :style="'padding:0px 5px; border-top-right-radius:4px; border-bottom-right-radius:4px; ' + (item.enable === 'y' ? '_border-left:1px solid #ac2451; border-right:1px solid #ac2451; border-top:1px solid #ac2451; border-bottom:1px solid #ac2451; background:#d22f64; color:#fff;' : '_border-left:1px solid #aaaaaa; border-right:1px solid #aaaaaa; border-top:1px solid #aaaaaa; border-bottom:1px solid #aaaaaa; background:#eeeeee; color:#555;')">
16
- - {{ item.name }}
17
- - </div>
18
- - </div>
19
- - </span>
20
- - </template>
21
- - <WTextSelect
22
- - v-else-if="props.key==='mode'"
23
- - :style="`width:${modeSelectWidth}px;`"
24
- - :items="modeItems"
25
- - :value="props.row.mode"
26
- + <RelationChips
27
- + v-if="props.key==='grupsNames'"
28
- + :items="props.row.grups"
29
- :editable="isEditable"
30
- - :paddingStyle="{v:0,h:10}"
31
- - :shadow="false"
32
- - :itemPaddingStyle="{v:8,h:10}"
33
- - :placementDistX="-10"
34
- + :popupTitle="$t('belongGrupsNames')"
35
- + :tooltipAll="$t('chipsShowAll')"
36
- :labelContent="'modeSelect'"
37
- @input="(item)=>{showVeGrupBlngUsersToggleItemModeByName(props.row.name, item)}"
38
- - ></WTextSelect>
39
- + ></RelationChips>
40
- <input v-else-if="props.key==='enable'" type="checkbox" :checked="props.value === 'y'" @click="showVeGrupBlngUsersToggleItemEnableByName(props.row.name)" :disabled="!isEditable" />
41
- <span v-else>{{ props.value }}</span>
42
- </template>
43
- @@ -207,7 +191,7 @@ import isestr from 'wsemi/src/isestr.mjs'
44
- import WDialog from 'w-component-vue/src/components/WDialog.vue'
45
- import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
46
- import WAggridVue from 'w-aggrid-vue/src/components/WAggridVue.vue'
47
- -import WTextSelect from 'w-component-vue/src/components/WTextSelect.vue'
48
- +import RelationChips from './RelationChips.vue'
49
-
50
-
51
- export default {
52
- @@ -215,7 +199,7 @@ export default {
53
- WDialog,
54
- WButtonCircle,
55
- WAggridVue,
56
- - WTextSelect,
57
- + RelationChips,
58
- },
59
- props: {
60
- },
61
- @@ -244,10 +228,6 @@ export default {
62
- isEditable: false,
63
- isModified: false,
64
-
65
- - //mode 欄之自製下拉(WTextSelect, 取代原生 select 以免彈出清單之 highlight 色由 OS 決定)
66
- - modeItems: ['OR', 'AND'],
67
- - modeSelectWidth: 72, //= 最長項 'AND' 文字實寬 + 左右內距 10×2 + 展開箭頭 18 + 邊框 1×2, 實測後定值(見 CLAUDE_experience.md)
68
- -
69
- grup: null,
70
-
71
- items: [],
72
- @@ -414,21 +394,19 @@ export default {
73
- let opt = null
74
- if (size(vo.items) > 0) {
75
-
76
- - //ks
77
- + //ks, 本列自己可改的(是否使用)在左, 由其他權限群組帶來的(所屬權限群組名稱)在右; 合併模式併入 grupsNames 欄之本項 chip(RelationChips), 不再獨立成欄
78
- let ks = [
79
- 'name',
80
- - 'grupsNames',
81
- - 'mode',
82
- 'enable',
83
- + 'grupsNames',
84
- ]
85
- // console.log('ks', ks)
86
-
87
- //kpHead
88
- let kpHead = {
89
- 'name': vo.$t('userName'),
90
- - 'grupsNames': vo.$t('belongGrupsNames'),
91
- - 'mode': vo.$t('operGrupMode'),
92
- 'enable': vo.$t('operEnable'),
93
- + 'grupsNames': vo.$t('belongGrupsNames'),
94
- }
95
-
96
- //opt
97
- @@ -447,7 +425,6 @@ export default {
98
- 'enable': false,
99
- },
100
- kpHeadWidth: {
101
- - 'mode': 100,
102
- 'enable': 100,
103
- },
104
- // kpRowDrag: {
105
- @@ -459,14 +436,14 @@ export default {
106
- kpHeadFilterType: {
107
- 'name': 'text',
108
- 'grupsNames': 'text',
109
- - 'mode': 'text',
110
- 'enable': 'text',
111
- },
112
- // kpHeadCheckBox: {
113
- // 'name': true,
114
- // },
115
- - kpHeadFocusHighlight: { //雖然效果不完全, 但因按鈕與cell有padding可被點擊, 故還是需要開啟
116
- + kpHeadFocusHighlight: { //儲存格內已有自己的控制項(chip 下拉、勾選框), 不再疊儲存格焦點框
117
- 'grupsNames': false,
118
- + 'enable': false,
119
- },
120
- rowsChange: (rs) => {
121
- // console.log('rowsChange', rs)
@@ -1,121 +0,0 @@
1
- diff --git a/../rddmanager_2_perm/node_modules/w-web-perm/src/components/VePemiBlngGrups.vue "b/./w-web-perm\351\232\250\351\231\204\350\263\207\346\226\231/src/components/VePemiBlngGrups.vue"
2
- index 9c5a143..d2f585b 100644
3
- --- a/../rddmanager_2_perm/node_modules/w-web-perm/src/components/VePemiBlngGrups.vue
4
- +++ "b/./w-web-perm\351\232\250\351\231\204\350\263\207\346\226\231/src/components/VePemiBlngGrups.vue"
5
- @@ -140,31 +140,15 @@
6
- :opt="opt"
7
- >
8
- <template v-slot:cell-render="props">
9
- - <template v-if="props.key==='pemisNames'">
10
- - <span v-for="(item, idx) in props.row.pemis" :key="idx" style="display:inline-block; line-height:20px; height:20px;">
11
- - <div style="display:flex;">
12
- - <div :style="'padding:0px 5px; border-top-left-radius:4px; border-bottom-left-radius:4px; ' + (item.enable === 'y' ? 'border-left:1px solid #ac2451; border-right:1px solid #9e2149; border-top:1px solid #ac2451; border-bottom:1px solid #ac2451; background:#be295a; color:#fff;' : 'border-left:1px solid #aaaaaa; border-right:1px solid #aaaaaa; border-top:1px solid #aaaaaa; border-bottom:1px solid #aaaaaa; background:#ffffff; color:#555;')">
13
- - {{ item.mode }}
14
- - </div>
15
- - <div :style="'padding:0px 5px; border-top-right-radius:4px; border-bottom-right-radius:4px; ' + (item.enable === 'y' ? '_border-left:1px solid #ac2451; border-right:1px solid #ac2451; border-top:1px solid #ac2451; border-bottom:1px solid #ac2451; background:#d22f64; color:#fff;' : '_border-left:1px solid #aaaaaa; border-right:1px solid #aaaaaa; border-top:1px solid #aaaaaa; border-bottom:1px solid #aaaaaa; background:#eeeeee; color:#555;')">
16
- - {{ item.name }}
17
- - </div>
18
- - </div>
19
- - </span>
20
- - </template>
21
- - <WTextSelect
22
- - v-else-if="props.key==='mode'"
23
- - :style="`width:${modeSelectWidth}px;`"
24
- - :items="modeItems"
25
- - :value="props.row.mode"
26
- + <RelationChips
27
- + v-if="props.key==='pemisNames'"
28
- + :items="props.row.pemis"
29
- :editable="isEditable"
30
- - :paddingStyle="{v:0,h:10}"
31
- - :shadow="false"
32
- - :itemPaddingStyle="{v:8,h:10}"
33
- - :placementDistX="-10"
34
- + :popupTitle="$t('belongPemisNames')"
35
- + :tooltipAll="$t('chipsShowAll')"
36
- :labelContent="'modeSelect'"
37
- @input="(item)=>{showVePemiBlngGrupsToggleItemModeByName(props.row.name, item)}"
38
- - ></WTextSelect>
39
- + ></RelationChips>
40
- <input v-else-if="props.key==='enable'" type="checkbox" :checked="props.value === 'y'" @click="showVePemiBlngGrupsToggleItemEnableByName(props.row.name)" :disabled="!isEditable" />
41
- <span v-else>{{ props.value }}</span>
42
- </template>
43
- @@ -207,7 +191,7 @@ import isestr from 'wsemi/src/isestr.mjs'
44
- import WDialog from 'w-component-vue/src/components/WDialog.vue'
45
- import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
46
- import WAggridVue from 'w-aggrid-vue/src/components/WAggridVue.vue'
47
- -import WTextSelect from 'w-component-vue/src/components/WTextSelect.vue'
48
- +import RelationChips from './RelationChips.vue'
49
-
50
-
51
- export default {
52
- @@ -215,7 +199,7 @@ export default {
53
- WDialog,
54
- WButtonCircle,
55
- WAggridVue,
56
- - WTextSelect,
57
- + RelationChips,
58
- },
59
- props: {
60
- },
61
- @@ -244,10 +228,6 @@ export default {
62
- isEditable: false,
63
- isModified: false,
64
-
65
- - //mode 欄之自製下拉(WTextSelect, 取代原生 select 以免彈出清單之 highlight 色由 OS 決定)
66
- - modeItems: ['OR', 'AND'],
67
- - modeSelectWidth: 72, //= 最長項 'AND' 文字實寬 + 左右內距 10×2 + 展開箭頭 18 + 邊框 1×2, 實測後定值(見 CLAUDE_experience.md)
68
- -
69
- pemi: null,
70
-
71
- items: [],
72
- @@ -414,21 +394,19 @@ export default {
73
- let opt = null
74
- if (size(vo.items) > 0) {
75
-
76
- - //ks
77
- + //ks, 本列自己可改的(是否使用)在左, 由其他權限帶來的(所屬權限名稱)在右; 合併模式併入 pemisNames 欄之本項 chip(RelationChips), 不再獨立成欄
78
- let ks = [
79
- 'name',
80
- - 'pemisNames',
81
- - 'mode',
82
- 'enable',
83
- + 'pemisNames',
84
- ]
85
- // console.log('ks', ks)
86
-
87
- //kpHead
88
- let kpHead = {
89
- 'name': vo.$t('grupName'),
90
- - 'pemisNames': vo.$t('belongPemisNames'),
91
- - 'mode': vo.$t('operPemiMode'),
92
- 'enable': vo.$t('operEnable'),
93
- + 'pemisNames': vo.$t('belongPemisNames'),
94
- }
95
-
96
- //opt
97
- @@ -447,7 +425,6 @@ export default {
98
- 'enable': false,
99
- },
100
- kpHeadWidth: {
101
- - 'mode': 100,
102
- 'enable': 100,
103
- },
104
- // kpRowDrag: {
105
- @@ -459,14 +436,14 @@ export default {
106
- kpHeadFilterType: {
107
- 'name': 'text',
108
- 'pemisNames': 'text',
109
- - 'mode': 'text',
110
- 'enable': 'text',
111
- },
112
- // kpHeadCheckBox: {
113
- // 'name': true,
114
- // },
115
- - kpHeadFocusHighlight: { //雖然效果不完全, 但因按鈕與cell有padding可被點擊, 故還是需要開啟
116
- + kpHeadFocusHighlight: { //儲存格內已有自己的控制項(chip 下拉、勾選框), 不再疊儲存格焦點框
117
- 'pemisNames': false,
118
- + 'enable': false,
119
- },
120
- rowsChange: (rs) => {
121
- // console.log('rowsChange', rs)