w-web-perm 1.0.48 → 1.0.50

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 (111) hide show
  1. package/.github/workflows/ci-test.yml +2 -2
  2. package/README.md +5 -5
  3. package/dist/css/app.8781355a.css +1 -0
  4. package/dist/css/{chunk-vendors.f149e124.css → chunk-vendors.58917286.css} +1 -1
  5. package/dist/index.tmp +2 -2
  6. package/dist/js/app-legacy.b2754bb1.js +1 -0
  7. package/dist/js/app.b2754bb1.js +1 -0
  8. package/dist/js/chunk-vendors-legacy.c14a1ed1.js +21 -0
  9. package/dist/js/chunk-vendors.c14a1ed1.js +21 -0
  10. package/dist/w-web-perm.umd.js +2 -2
  11. package/dist/w-web-perm.umd.js.map +1 -1
  12. package/docs/WWebPerm.html +3 -3
  13. package/docs/WWebPerm.mjs.html +162 -210
  14. package/docs/index.html +1 -1
  15. package/logs/2026-06-19T16.log +191 -0
  16. package/logs/2026-06-19T23.log +0 -0
  17. package/logs/2026-06-20T00.log +207 -0
  18. package/logs/2026-06-20T11.log +221 -0
  19. package/logs/2026-06-20T12.log +146 -0
  20. package/logs/2026-06-20T13.log +134 -0
  21. package/logs/2026-06-20T14.log +296 -0
  22. package/logs/2026-06-20T15.log +225 -0
  23. package/logs/2026-06-20T16.log +174 -0
  24. package/logs/2026-06-21T16.log +110 -0
  25. package/logs/2026-06-21T17.log +301 -0
  26. package/logs/2026-06-21T18.log +238 -0
  27. package/logs/2026-06-21T19.log +141 -0
  28. package/logs/2026-06-21T20.log +99 -0
  29. package/logs/2026-06-21T21.log +143 -0
  30. package/logs/2026-06-21T23.log +26 -0
  31. package/logs/2026-06-22T00.log +33 -0
  32. package/logs/2026-06-22T08.log +235 -0
  33. package/logs/2026-06-22T09.log +246 -0
  34. package/logs/2026-06-22T10.log +301 -0
  35. package/logs/2026-06-22T11.log +140 -0
  36. package/logs/2026-06-22T12.log +22 -0
  37. package/logs/2026-06-22T14.log +44 -0
  38. package/logs/2026-06-22T23.log +951 -0
  39. package/logs/2026-06-23T00.log +263 -0
  40. package/logs/2026-06-23T08.log +611 -0
  41. package/logs/2026-06-30T21.log +3609 -0
  42. package/logs/2026-06-30T22.log +3682 -0
  43. package/logs/2026-06-30T23.log +592 -0
  44. package/logs/2026-07-01T12.log +0 -0
  45. package/logs/2026-07-09T22.log +2220 -0
  46. package/logs/2026-07-09T23.log +1140 -0
  47. package/logs/2026-07-10T12.log +6 -0
  48. package/logs/2026-07-10T13.log +351 -0
  49. package/logs/2026-07-10T16.log +1272 -0
  50. package/logs/2026-07-10T19.log +6 -0
  51. package/logs/2026-07-10T20.log +1883 -0
  52. package/logs/2026-07-10T21.log +3505 -0
  53. package/logs/2026-07-10T22.log +3395 -0
  54. package/logs/2026-07-11T00.log +1338 -0
  55. package/logs/2026-07-11T01.log +2492 -0
  56. package/logs/2026-07-11T17.log +19 -0
  57. package/package.json +23 -16
  58. package/public/index.html +2 -2
  59. package/server/WWebPerm.mjs +161 -209
  60. package/server/procCore.mjs +187 -0
  61. package/server/procLang.mjs +276 -60
  62. package/server/procStaInfor.mjs +128 -0
  63. package/server/provideTabs.mjs +1 -1
  64. package/server/srLog.mjs +30 -0
  65. package/server/staLogs/filterVpfsByWindow.mjs +27 -0
  66. package/server/staLogs/staEvent.callWorker.mjs +46 -0
  67. package/server/staLogs/staEvent.mjs +118 -0
  68. package/server/staLogs/staEvent.shellWorker.mjs +19 -0
  69. package/server/staLogs/staEventTable.mjs +102 -0
  70. package/settings.json +43 -0
  71. package/src/components/Common/CheckYes.vue +18 -1
  72. package/src/components/Layout.vue +1 -1
  73. package/src/components/LayoutContent.vue +13 -3
  74. package/src/components/LayoutContentGrups.vue +32 -25
  75. package/src/components/LayoutContentPemis.vue +32 -25
  76. package/src/components/LayoutContentStaInfor.vue +534 -0
  77. package/src/components/LayoutContentTargets.vue +35 -28
  78. package/src/components/LayoutContentUsers.vue +32 -25
  79. package/src/components/LayoutState.vue +5 -0
  80. package/src/components/VeCgrups.vue +19 -9
  81. package/src/components/VeCpemis.vue +19 -9
  82. package/src/components/VeCrules.vue +19 -9
  83. package/src/components/VeGrupBlngUsers.vue +35 -29
  84. package/src/components/VePemiBlngGrups.vue +35 -29
  85. package/src/getPerm.mjs +7 -17
  86. package/src/getPermUserInfor.mjs +8 -18
  87. package/src/main.js +4 -9
  88. package/src/perm.mjs +3 -4
  89. package/src/plugins/mShare.mjs +8 -13
  90. package/src/plugins/mUI.mjs +7 -44
  91. package/src/store/mutations.mjs +0 -10
  92. package/src/store/types.mjs +0 -2
  93. package/srv.mjs +76 -101
  94. package/tableTags.json +1 -1
  95. package/z/344/277/256/346/255/243/350/246/217/345/212/203/346/233/270.md +450 -0
  96. package/db/wperm/grups/data.mdb +0 -0
  97. package/db/wperm/grups/lock.mdb +0 -0
  98. package/db/wperm/pemis/data.mdb +0 -0
  99. package/db/wperm/pemis/lock.mdb +0 -0
  100. package/db/wperm/targets/data.mdb +0 -0
  101. package/db/wperm/targets/lock.mdb +0 -0
  102. package/db/wperm/users/data.mdb +0 -0
  103. package/db/wperm/users/lock.mdb +0 -0
  104. package/dist/css/app.30e81bfe.css +0 -1
  105. package/dist/js/app-legacy.3324392e.js +0 -1
  106. package/dist/js/app.3324392e.js +0 -1
  107. package/dist/js/chunk-vendors-legacy.e8703728.js +0 -21
  108. package/dist/js/chunk-vendors.e8703728.js +0 -21
  109. package/src/plugins/mDataSelectorSchema.mjs +0 -30
  110. package/tableTags-web-perm.json +0 -1
  111. package/test/getUserRules.test.mjs +0 -899
@@ -39,6 +39,7 @@
39
39
 
40
40
  <!-- 功能區 -->
41
41
  <div
42
+ data-fmid="grups-toolbar"
42
43
  style="padding:5px; border-top:1px solid #ddd; display:flex; align-items:center;"
43
44
  _v-if="showIsEditable || isEditable"
44
45
  >
@@ -185,6 +186,7 @@
185
186
  :iconColor="'#eee'"
186
187
  :iconColorHover="'#fff'"
187
188
  :shadow="false"
189
+ :promiseUnlock="true"
188
190
  @click="saveGrups"
189
191
  ></WButtonCircle>
190
192
 
@@ -294,7 +296,6 @@ export default {
294
296
  mdiPencilOutline,
295
297
  mdiContentCopy,
296
298
 
297
- panelWidth: 100,
298
299
  panelHeight: 100,
299
300
  headHeight: 100,
300
301
 
@@ -622,7 +623,6 @@ export default {
622
623
  let vo = this
623
624
 
624
625
  //panelWidth, panelHeight
625
- vo.panelWidth = msg.snew.offsetWidth
626
626
  vo.panelHeight = msg.snew.offsetHeight
627
627
 
628
628
  },
@@ -1177,20 +1177,28 @@ export default {
1177
1177
 
1178
1178
  },
1179
1179
 
1180
- saveGrups: function() {
1181
- // console.log('method saveGrups')
1180
+ saveGrups: function(msg) {
1182
1181
 
1183
1182
  let vo = this
1184
1183
 
1185
- async function core() {
1186
- let errTemp = null
1184
+ //第一行立刻釋放按鈕視覺鎖
1185
+ msg.pm.resolve()
1187
1186
 
1188
- //show loading
1189
- vo.$ui.updateLoading(true)
1187
+ //fire-and-forget, 不 await
1188
+ vo.doSaveGrups()
1190
1189
 
1191
- //check
1190
+ },
1191
+
1192
+ doSaveGrups: function() {
1193
+ // console.log('method doSaveGrups')
1194
+
1195
+ let vo = this
1196
+
1197
+ async function core() {
1198
+
1199
+ //1) 同步檢測 (在開 loading 之前)
1192
1200
  if (isestr(vo.isError)) {
1193
- vo.$alert(`${vo.isError}`, { type: 'error' })
1201
+ await vo.$dg.showCheckYes(`${vo.isError}`)
1194
1202
  return
1195
1203
  }
1196
1204
 
@@ -1199,35 +1207,34 @@ export default {
1199
1207
 
1200
1208
  //check
1201
1209
  if (size(rows) === 0) {
1202
- vo.$alert(`${vo.$t('grupAddEmpty')}`, { type: 'error' })
1210
+ await vo.$dg.showCheckYes(`${vo.$t('grupAddEmpty')}`)
1203
1211
  return
1204
1212
  }
1205
1213
 
1206
- //updateGrups
1214
+ //2) 確定打 API 才開 loading
1215
+ vo.$ui.updateLoading(true)
1216
+
1217
+ //3) updateGrups, 各自 catch + 旗標短路
1218
+ let okSave = false
1207
1219
  await vo.$fapi.updateGrups(rows)
1208
- .catch((err) => {
1209
- errTemp = err
1220
+ .then(() => { okSave = true })
1221
+ .catch(async (err) => {
1222
+ vo.$ui.updateLoading(false) //showCheckYes 前關 loading(modal 阻斷期間避免 loading 疊在底下)
1223
+ await vo.$dg.showCheckYes(`${vo.$t('grupSaveGrupsFail')}: ${vo.$tErr(err)}`)
1210
1224
  })
1211
-
1212
- //check
1213
- if (errTemp !== null) {
1214
- vo.$alert(`${vo.$t('grupSaveGrupsFail')}: ${errTemp}`, { type: 'error' })
1215
- return
1216
- }
1225
+ if (!okSave) return
1217
1226
 
1218
1227
  //isModified
1219
1228
  vo.isModified = false
1220
1229
 
1221
- //alert
1222
- vo.$alert(vo.$t('grupSaveGrupsSuccess'))
1230
+ //alert(showCheckYes 前關 loading,避免 modal 等待期間 loading 疊在底下)
1231
+ vo.$ui.updateLoading(false)
1232
+ await vo.$dg.showCheckYes(vo.$t('grupSaveGrupsSuccess'), { type: 'success' })
1223
1233
 
1224
1234
  }
1225
1235
 
1226
1236
  //core
1227
1237
  core()
1228
- // .then((res) => {
1229
- // console.log('then', res)
1230
- // })
1231
1238
  .catch((err) => {
1232
1239
  console.log('catch', err)
1233
1240
  vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' })
@@ -39,6 +39,7 @@
39
39
 
40
40
  <!-- 功能區 -->
41
41
  <div
42
+ data-fmid="pemis-toolbar"
42
43
  style="padding:5px; border-top:1px solid #ddd; display:flex; align-items:center;"
43
44
  _v-if="showIsEditable || isEditable"
44
45
  >
@@ -185,6 +186,7 @@
185
186
  :iconColor="'#eee'"
186
187
  :iconColorHover="'#fff'"
187
188
  :shadow="false"
189
+ :promiseUnlock="true"
188
190
  @click="savePemis"
189
191
  ></WButtonCircle>
190
192
 
@@ -294,7 +296,6 @@ export default {
294
296
  mdiPencilOutline,
295
297
  mdiContentCopy,
296
298
 
297
- panelWidth: 100,
298
299
  panelHeight: 100,
299
300
  headHeight: 100,
300
301
 
@@ -622,7 +623,6 @@ export default {
622
623
  let vo = this
623
624
 
624
625
  //panelWidth, panelHeight
625
- vo.panelWidth = msg.snew.offsetWidth
626
626
  vo.panelHeight = msg.snew.offsetHeight
627
627
 
628
628
  },
@@ -1179,20 +1179,28 @@ export default {
1179
1179
 
1180
1180
  },
1181
1181
 
1182
- savePemis: function() {
1183
- // console.log('method savePemis')
1182
+ savePemis: function(msg) {
1184
1183
 
1185
1184
  let vo = this
1186
1185
 
1187
- async function core() {
1188
- let errTemp = null
1186
+ //第一行立刻釋放按鈕視覺鎖
1187
+ msg.pm.resolve()
1189
1188
 
1190
- //show loading
1191
- vo.$ui.updateLoading(true)
1189
+ //fire-and-forget, 不 await
1190
+ vo.doSavePemis()
1192
1191
 
1193
- //check
1192
+ },
1193
+
1194
+ doSavePemis: function() {
1195
+ // console.log('method doSavePemis')
1196
+
1197
+ let vo = this
1198
+
1199
+ async function core() {
1200
+
1201
+ //1) 同步檢測 (在開 loading 之前)
1194
1202
  if (isestr(vo.isError)) {
1195
- vo.$alert(`${vo.isError}`, { type: 'error' })
1203
+ await vo.$dg.showCheckYes(`${vo.isError}`)
1196
1204
  return
1197
1205
  }
1198
1206
 
@@ -1201,35 +1209,34 @@ export default {
1201
1209
 
1202
1210
  //check
1203
1211
  if (size(rows) === 0) {
1204
- vo.$alert(`${vo.$t('pemiAddEmpty')}`, { type: 'error' })
1212
+ await vo.$dg.showCheckYes(`${vo.$t('pemiAddEmpty')}`)
1205
1213
  return
1206
1214
  }
1207
1215
 
1208
- //updatePemis
1216
+ //2) 確定打 API 才開 loading
1217
+ vo.$ui.updateLoading(true)
1218
+
1219
+ //3) updatePemis, 各自 catch + 旗標短路
1220
+ let okSave = false
1209
1221
  await vo.$fapi.updatePemis(rows)
1210
- .catch((err) => {
1211
- errTemp = err
1222
+ .then(() => { okSave = true })
1223
+ .catch(async (err) => {
1224
+ vo.$ui.updateLoading(false) //showCheckYes 前關 loading(modal 阻斷期間避免 loading 疊在底下)
1225
+ await vo.$dg.showCheckYes(`${vo.$t('pemiSavePemisFail')}: ${vo.$tErr(err)}`)
1212
1226
  })
1213
-
1214
- //check
1215
- if (errTemp !== null) {
1216
- vo.$alert(`${vo.$t('pemiSavePemisFail')}: ${errTemp}`, { type: 'error' })
1217
- return
1218
- }
1227
+ if (!okSave) return
1219
1228
 
1220
1229
  //isModified
1221
1230
  vo.isModified = false
1222
1231
 
1223
- //alert
1224
- vo.$alert(vo.$t('pemiSavePemisSuccess'))
1232
+ //alert(showCheckYes 前關 loading,避免 modal 等待期間 loading 疊在底下)
1233
+ vo.$ui.updateLoading(false)
1234
+ await vo.$dg.showCheckYes(vo.$t('pemiSavePemisSuccess'), { type: 'success' })
1225
1235
 
1226
1236
  }
1227
1237
 
1228
1238
  //core
1229
1239
  core()
1230
- // .then((res) => {
1231
- // console.log('then', res)
1232
- // })
1233
1240
  .catch((err) => {
1234
1241
  console.log('catch', err)
1235
1242
  vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' })