w-web-perm 1.0.49 → 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 (120) hide show
  1. package/README.md +5 -5
  2. package/dist/css/app.8781355a.css +1 -0
  3. package/dist/css/{chunk-vendors.2d3ef2ba.css → chunk-vendors.58917286.css} +1 -1
  4. package/dist/index.tmp +1 -1
  5. package/dist/js/app-legacy.b2754bb1.js +1 -0
  6. package/dist/js/app.b2754bb1.js +1 -0
  7. package/dist/js/{chunk-vendors-legacy.8fdd4435.js → chunk-vendors-legacy.c14a1ed1.js} +6 -6
  8. package/dist/js/{chunk-vendors.8fdd4435.js → chunk-vendors.c14a1ed1.js} +6 -6
  9. package/dist/w-web-perm.umd.js +2 -2
  10. package/dist/w-web-perm.umd.js.map +1 -1
  11. package/docs/WWebPerm.html +3 -3
  12. package/docs/WWebPerm.mjs.html +33 -20
  13. package/docs/index.html +1 -1
  14. package/logs/2026-06-19T16.log +191 -0
  15. package/logs/2026-06-20T00.log +207 -0
  16. package/logs/2026-06-20T11.log +221 -0
  17. package/logs/2026-06-20T12.log +146 -0
  18. package/logs/2026-06-20T13.log +134 -0
  19. package/logs/2026-06-20T14.log +296 -0
  20. package/logs/2026-06-20T15.log +225 -0
  21. package/logs/2026-06-20T16.log +174 -0
  22. package/logs/2026-06-21T16.log +110 -0
  23. package/logs/2026-06-21T17.log +301 -0
  24. package/logs/2026-06-21T18.log +238 -0
  25. package/logs/2026-06-21T19.log +141 -0
  26. package/logs/2026-06-21T20.log +99 -0
  27. package/logs/2026-06-21T21.log +143 -0
  28. package/logs/2026-06-21T23.log +26 -0
  29. package/logs/2026-06-22T00.log +33 -0
  30. package/logs/2026-06-22T08.log +235 -0
  31. package/logs/2026-06-22T09.log +246 -0
  32. package/logs/2026-06-22T10.log +301 -0
  33. package/logs/2026-06-22T11.log +140 -0
  34. package/logs/2026-06-22T12.log +22 -0
  35. package/logs/2026-06-22T14.log +44 -0
  36. package/logs/2026-06-22T23.log +951 -0
  37. package/logs/2026-06-23T00.log +263 -0
  38. package/logs/2026-06-23T08.log +611 -0
  39. package/logs/2026-06-30T21.log +3609 -0
  40. package/logs/2026-06-30T22.log +3682 -0
  41. package/logs/2026-06-30T23.log +592 -0
  42. package/logs/2026-07-01T12.log +0 -0
  43. package/logs/2026-07-09T22.log +2220 -0
  44. package/logs/2026-07-09T23.log +1140 -0
  45. package/logs/2026-07-10T12.log +6 -0
  46. package/logs/2026-07-10T13.log +351 -0
  47. package/logs/2026-07-10T16.log +1272 -0
  48. package/logs/2026-07-10T19.log +6 -0
  49. package/logs/2026-07-10T20.log +1883 -0
  50. package/logs/2026-07-10T21.log +3505 -0
  51. package/logs/2026-07-10T22.log +3395 -0
  52. package/logs/2026-07-11T00.log +1338 -0
  53. package/logs/2026-07-11T01.log +2492 -0
  54. package/logs/2026-07-11T17.log +19 -0
  55. package/package.json +18 -15
  56. package/server/WWebPerm.mjs +32 -19
  57. package/server/procCore.mjs +22 -4
  58. package/server/procLang.mjs +84 -65
  59. package/server/procStaInfor.mjs +10 -0
  60. package/server/staLogs/filterVpfsByWindow.mjs +27 -0
  61. package/server/staLogs/staEvent.mjs +2 -0
  62. package/server/staLogs/staEventTable.mjs +2 -0
  63. package/settings.json +3 -0
  64. package/src/components/LayoutContent.vue +0 -2
  65. package/src/components/LayoutContentGrups.vue +0 -2
  66. package/src/components/LayoutContentPemis.vue +0 -2
  67. package/src/components/LayoutContentStaInfor.vue +0 -2
  68. package/src/components/LayoutContentTargets.vue +3 -5
  69. package/src/components/LayoutContentUsers.vue +0 -2
  70. package/src/components/VeCgrups.vue +7 -6
  71. package/src/components/VeCpemis.vue +7 -6
  72. package/src/components/VeCrules.vue +7 -6
  73. package/src/components/VeGrupBlngUsers.vue +21 -27
  74. package/src/components/VePemiBlngGrups.vue +21 -27
  75. package/src/main.js +3 -9
  76. package/src/perm.mjs +3 -4
  77. package/src/plugins/mUI.mjs +0 -48
  78. package/src/store/mutations.mjs +0 -10
  79. package/src/store/types.mjs +0 -2
  80. package/tableTags.json +1 -1
  81. package/z/344/277/256/346/255/243/350/246/217/345/212/203/346/233/270.md +450 -0
  82. package/_gh-pages-deploy/WWebPerm.html +0 -938
  83. package/_gh-pages-deploy/WWebPerm.mjs.html +0 -1228
  84. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  85. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  86. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  87. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  88. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  89. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  90. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  91. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  92. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  93. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -978
  94. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  95. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  96. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  97. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  98. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -1049
  99. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  100. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  101. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  102. package/_gh-pages-deploy/index.html +0 -84
  103. package/_gh-pages-deploy/scripts/collapse.js +0 -39
  104. package/_gh-pages-deploy/scripts/commonNav.js +0 -28
  105. package/_gh-pages-deploy/scripts/linenumber.js +0 -25
  106. package/_gh-pages-deploy/scripts/nav.js +0 -12
  107. package/_gh-pages-deploy/scripts/polyfill.js +0 -4
  108. package/_gh-pages-deploy/scripts/prettify/Apache-License-2.0.txt +0 -202
  109. package/_gh-pages-deploy/scripts/prettify/lang-css.js +0 -2
  110. package/_gh-pages-deploy/scripts/prettify/prettify.js +0 -28
  111. package/_gh-pages-deploy/scripts/search.js +0 -99
  112. package/_gh-pages-deploy/styles/jsdoc.css +0 -776
  113. package/_gh-pages-deploy/styles/prettify.css +0 -80
  114. package/dist/css/app.d8b16216.css +0 -1
  115. package/dist/js/app-legacy.fb48310a.js +0 -1
  116. package/dist/js/app.fb48310a.js +0 -1
  117. package/server/staLogs/test_staEvent.mjs +0 -22
  118. package/src/plugins/mDataSelectorSchema.mjs +0 -30
  119. package/tableTags-web-perm.json +0 -1
  120. /package/{_gh-pages-deploy/.nojekyll → logs/2026-06-19T23.log} +0 -0
@@ -284,7 +284,6 @@ export default {
284
284
  mdiPencilOutline,
285
285
  mdiContentCopy,
286
286
 
287
- panelWidth: 100,
288
287
  panelHeight: 100,
289
288
  headHeight: 100,
290
289
 
@@ -489,9 +488,9 @@ export default {
489
488
 
490
489
  let c = ''
491
490
  let b = false
492
- b = iseobj(vo.errItemsByName)
491
+ b = iseobj(vo.errItemsById)
493
492
  if (b) {
494
- c = vo.$t('errInNames')
493
+ c = vo.$t('errInIds')
495
494
  }
496
495
 
497
496
  return c
@@ -522,7 +521,6 @@ export default {
522
521
  let vo = this
523
522
 
524
523
  //panelWidth, panelHeight
525
- vo.panelWidth = msg.snew.offsetWidth
526
524
  vo.panelHeight = msg.snew.offsetHeight
527
525
 
528
526
  },
@@ -610,7 +608,7 @@ export default {
610
608
  defHeadMinWidth: 150,
611
609
  kpHeadWidth: {
612
610
  'id': isnum(vo.widthTargetId) ? cdbl(vo.widthTargetId) : 600,
613
- 'description': isnum(vo.widthTargetId) ? cdbl(vo.widthTargetId) : 600,
611
+ 'description': isnum(vo.widthTargetDescription) ? cdbl(vo.widthTargetDescription) : 600,
614
612
  'timeCreate': 220,
615
613
  'timeUpdate': 220,
616
614
  },
@@ -300,7 +300,6 @@ export default {
300
300
  mdiPencilOutline,
301
301
  mdiContentCopy,
302
302
 
303
- panelWidth: 100,
304
303
  panelHeight: 100,
305
304
  headHeight: 100,
306
305
 
@@ -618,7 +617,6 @@ export default {
618
617
  let vo = this
619
618
 
620
619
  //panelWidth, panelHeight
621
- vo.panelWidth = msg.snew.offsetWidth
622
620
  vo.panelHeight = msg.snew.offsetHeight
623
621
 
624
622
  },
@@ -198,7 +198,6 @@ export default {
198
198
 
199
199
  fullscreen: false,
200
200
 
201
- panelWidth: 100,
202
201
  panelHeight: 100,
203
202
  headHeight: 100,
204
203
 
@@ -339,7 +338,6 @@ export default {
339
338
  let vo = this
340
339
 
341
340
  //panelWidth, panelHeight
342
- vo.panelWidth = msg.panelWidth
343
341
  vo.panelHeight = msg.contentHeightMax
344
342
 
345
343
  },
@@ -411,9 +409,9 @@ export default {
411
409
  'mode': 'text',
412
410
  'enable': 'text',
413
411
  },
414
- // kpHeadCheckBox: {
415
- // 'name': true,
416
- // },
412
+ kpHeadCheckBox: {
413
+ 'name': true,
414
+ },
417
415
  rowsChange: (rs) => {
418
416
  // console.log('rowsChange', rs)
419
417
  // console.log('rowsChange cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
@@ -814,7 +812,10 @@ export default {
814
812
  vo.bShow = false
815
813
 
816
814
  })
817
- .catch(() => { })
815
+ .catch((err) => {
816
+ console.log('doSave', err)
817
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' }) //§5.1: 非預期例外須告知, 不靜默吞 (失敗時 .then 不執行→視窗不關)
818
+ })
818
819
  .finally(() => {
819
820
 
820
821
  //hide loading
@@ -198,7 +198,6 @@ export default {
198
198
 
199
199
  fullscreen: false,
200
200
 
201
- panelWidth: 100,
202
201
  panelHeight: 100,
203
202
  headHeight: 100,
204
203
 
@@ -339,7 +338,6 @@ export default {
339
338
  let vo = this
340
339
 
341
340
  //panelWidth, panelHeight
342
- vo.panelWidth = msg.panelWidth
343
341
  vo.panelHeight = msg.contentHeightMax
344
342
 
345
343
  },
@@ -411,9 +409,9 @@ export default {
411
409
  'mode': 'text',
412
410
  'enable': 'text',
413
411
  },
414
- // kpHeadCheckBox: {
415
- // 'name': true,
416
- // },
412
+ kpHeadCheckBox: {
413
+ 'name': true,
414
+ },
417
415
  rowsChange: (rs) => {
418
416
  // console.log('rowsChange', rs)
419
417
  // console.log('rowsChange cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
@@ -814,7 +812,10 @@ export default {
814
812
  vo.bShow = false
815
813
 
816
814
  })
817
- .catch(() => { })
815
+ .catch((err) => {
816
+ console.log('doSave', err)
817
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' }) //§5.1: 非預期例外須告知, 不靜默吞 (失敗時 .then 不執行→視窗不關)
818
+ })
818
819
  .finally(() => {
819
820
 
820
821
  //hide loading
@@ -194,7 +194,6 @@ export default {
194
194
 
195
195
  fullscreen: false,
196
196
 
197
- panelWidth: 100,
198
197
  panelHeight: 100,
199
198
  headHeight: 100,
200
199
 
@@ -334,7 +333,6 @@ export default {
334
333
  let vo = this
335
334
 
336
335
  //panelWidth, panelHeight
337
- vo.panelWidth = msg.panelWidth
338
336
  vo.panelHeight = msg.contentHeightMax
339
337
 
340
338
  },
@@ -401,9 +399,9 @@ export default {
401
399
  'id': 'text',
402
400
  'enable': 'text',
403
401
  },
404
- // kpHeadCheckBox: {
405
- // 'id': true,
406
- // },
402
+ kpHeadCheckBox: {
403
+ 'id': true,
404
+ },
407
405
  rowsChange: (rs) => {
408
406
  // console.log('rowsChange', rs)
409
407
  // console.log('rowsChange cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
@@ -749,7 +747,10 @@ export default {
749
747
  vo.bShow = false
750
748
 
751
749
  })
752
- .catch(() => { })
750
+ .catch((err) => {
751
+ console.log('doSave', err)
752
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' }) //§5.1: 非預期例外須告知, 不靜默吞 (失敗時 .then 不執行→視窗不關)
753
+ })
753
754
  .finally(() => {
754
755
 
755
756
  //hide loading
@@ -225,7 +225,6 @@ export default {
225
225
 
226
226
  fullscreen: false,
227
227
 
228
- panelWidth: 100,
229
228
  panelHeight: 100,
230
229
  headHeight: 100,
231
230
 
@@ -374,7 +373,6 @@ export default {
374
373
  let vo = this
375
374
 
376
375
  //panelWidth, panelHeight
377
- vo.panelWidth = msg.panelWidth
378
376
  vo.panelHeight = msg.contentHeightMax
379
377
 
380
378
  },
@@ -960,30 +958,19 @@ export default {
960
958
 
961
959
  let vo = this
962
960
 
963
- //errTemp
964
- let errTemp = null
965
-
966
- //check
967
- if (size(rows) === 0) {
968
- vo.$ui.updateLoading(false) //showCheckYes 前關 loading(modal 阻斷、避免 clickSave 包裝層 loading 疊在 modal 後)
969
- await vo.$dg.showCheckYes(`${vo.$t('userSaveUsersEmpty')}`)
970
- return
971
- }
972
-
973
- //updateUsers
961
+ //3) updateUsers, 各自 catch + okX 旗標短路 (canonical 五段結構; 空清單檢查已上移至 doSave core())
962
+ let okSave = false
974
963
  await vo.$fapi.updateUsers(rows)
975
- .catch((err) => {
976
- errTemp = err
964
+ .then(() => { okSave = true })
965
+ .catch(async (err) => {
966
+ vo.$ui.updateLoading(false) //showCheckYes 前關 loading(modal 阻斷期間避免 loading 疊在底下)
967
+ await vo.$dg.showCheckYes(`${vo.$t('userSaveUsersFail')}: ${vo.$tErr(err)}`)
977
968
  })
978
-
979
- //check
980
- if (errTemp !== null) {
981
- vo.$ui.updateLoading(false)
982
- await vo.$dg.showCheckYes(`${vo.$t('userSaveUsersFail')}: ${vo.$tErr(errTemp)}`)
969
+ if (!okSave) {
983
970
  return
984
971
  }
985
972
 
986
- //alert
973
+ //alert(showCheckYes 前關 loading,避免 modal 等待期間 loading 疊在底下)
987
974
  vo.$ui.updateLoading(false)
988
975
  await vo.$dg.showCheckYes(vo.$t('userSaveUsersSuccess'), { type: 'success' })
989
976
 
@@ -1023,16 +1010,20 @@ export default {
1023
1010
 
1024
1011
  async function core() {
1025
1012
 
1026
- //show loading
1013
+ //1) 事先檢測 (所有同步檢查在開 loading 之前, 空清單不應先閃 loading)
1014
+ let rows = get(vo, 'opt.rows', [])
1015
+ // console.log('rows', rows)
1016
+ if (size(rows) === 0) {
1017
+ await vo.$dg.showCheckYes(`${vo.$t('userSaveUsersEmpty')}`)
1018
+ return
1019
+ }
1020
+
1021
+ //2) 確定打 API 才開 loading
1027
1022
  vo.$ui.updateLoading(true)
1028
1023
 
1029
1024
  //delay
1030
1025
  await delay(300)
1031
1026
 
1032
- //rows
1033
- let rows = get(vo, 'opt.rows', [])
1034
- // console.log('rows', rows)
1035
-
1036
1027
  //users
1037
1028
  let users = cloneDeep(vo.users)
1038
1029
  // console.log('users', users)
@@ -1099,7 +1090,10 @@ export default {
1099
1090
  vo.bShow = false
1100
1091
 
1101
1092
  })
1102
- .catch(() => { })
1093
+ .catch((err) => {
1094
+ console.log('doSave', err)
1095
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' }) //§5.1: 非預期例外須告知, 不靜默吞 (失敗時 .then 不執行→視窗不關)
1096
+ })
1103
1097
  .finally(() => {
1104
1098
 
1105
1099
  //hide loading
@@ -225,7 +225,6 @@ export default {
225
225
 
226
226
  fullscreen: false,
227
227
 
228
- panelWidth: 100,
229
228
  panelHeight: 100,
230
229
  headHeight: 100,
231
230
 
@@ -374,7 +373,6 @@ export default {
374
373
  let vo = this
375
374
 
376
375
  //panelWidth, panelHeight
377
- vo.panelWidth = msg.panelWidth
378
376
  vo.panelHeight = msg.contentHeightMax
379
377
 
380
378
  },
@@ -960,30 +958,19 @@ export default {
960
958
 
961
959
  let vo = this
962
960
 
963
- //errTemp
964
- let errTemp = null
965
-
966
- //check
967
- if (size(rows) === 0) {
968
- vo.$ui.updateLoading(false) //showCheckYes 前關 loading(modal 阻斷、避免 clickSave 包裝層 loading 疊在 modal 後)
969
- await vo.$dg.showCheckYes(`${vo.$t('grupSaveGrupsEmpty')}`)
970
- return
971
- }
972
-
973
- //updateGrups
961
+ //3) updateGrups, 各自 catch + okX 旗標短路 (canonical 五段結構; 空清單檢查已上移至 doSave core())
962
+ let okSave = false
974
963
  await vo.$fapi.updateGrups(rows)
975
- .catch((err) => {
976
- errTemp = err
964
+ .then(() => { okSave = true })
965
+ .catch(async (err) => {
966
+ vo.$ui.updateLoading(false) //showCheckYes 前關 loading(modal 阻斷期間避免 loading 疊在底下)
967
+ await vo.$dg.showCheckYes(`${vo.$t('grupSaveGrupsFail')}: ${vo.$tErr(err)}`)
977
968
  })
978
-
979
- //check
980
- if (errTemp !== null) {
981
- vo.$ui.updateLoading(false)
982
- await vo.$dg.showCheckYes(`${vo.$t('grupSaveGrupsFail')}: ${vo.$tErr(errTemp)}`)
969
+ if (!okSave) {
983
970
  return
984
971
  }
985
972
 
986
- //alert
973
+ //alert(showCheckYes 前關 loading,避免 modal 等待期間 loading 疊在底下)
987
974
  vo.$ui.updateLoading(false)
988
975
  await vo.$dg.showCheckYes(vo.$t('grupSaveGrupsSuccess'), { type: 'success' })
989
976
 
@@ -1023,16 +1010,20 @@ export default {
1023
1010
 
1024
1011
  async function core() {
1025
1012
 
1026
- //show loading
1013
+ //1) 事先檢測 (所有同步檢查在開 loading 之前, 空清單不應先閃 loading)
1014
+ let rows = get(vo, 'opt.rows', [])
1015
+ // console.log('rows', rows)
1016
+ if (size(rows) === 0) {
1017
+ await vo.$dg.showCheckYes(`${vo.$t('grupSaveGrupsEmpty')}`)
1018
+ return
1019
+ }
1020
+
1021
+ //2) 確定打 API 才開 loading
1027
1022
  vo.$ui.updateLoading(true)
1028
1023
 
1029
1024
  //delay
1030
1025
  await delay(300)
1031
1026
 
1032
- //rows
1033
- let rows = get(vo, 'opt.rows', [])
1034
- // console.log('rows', rows)
1035
-
1036
1027
  //grups
1037
1028
  let grups = cloneDeep(vo.grups)
1038
1029
  // console.log('grups', grups)
@@ -1099,7 +1090,10 @@ export default {
1099
1090
  vo.bShow = false
1100
1091
 
1101
1092
  })
1102
- .catch(() => { })
1093
+ .catch((err) => {
1094
+ console.log('doSave', err)
1095
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' }) //§5.1: 非預期例外須告知, 不靜默吞 (失敗時 .then 不執行→視窗不關)
1096
+ })
1103
1097
  .finally(() => {
1104
1098
 
1105
1099
  //hide loading
package/src/main.js CHANGED
@@ -2,13 +2,10 @@ import Vue from 'vue'
2
2
  import get from 'lodash-es/get.js'
3
3
  import WServHapiClient from 'w-serv-hapi/src/WServHapiClient.mjs'
4
4
  import WAlert from 'w-component-vue/src/components/WAlert.mjs'
5
- import domMutation from 'w-component-vue/src/js/domMutation.mjs'
6
5
  import domResize from 'w-component-vue/src/js/domResize.mjs'
7
- import domDragDrop from 'w-component-vue/src/js/domDragDrop.mjs'
8
6
  import App from './App.vue'
9
7
  import store from './store/index.mjs'
10
8
  import ui from './plugins/mUI.mjs'
11
- import mDataSelectorSchema from './plugins/mDataSelectorSchema.mjs'
12
9
  import * as s from './plugins/mShare.mjs'
13
10
  import ds from './schema/index.mjs'
14
11
  // console.log('ds', ds)
@@ -26,22 +23,16 @@ Vue.prototype.$alert = function() {
26
23
  }
27
24
  }
28
25
 
29
- //dssm
30
- let dssm = mDataSelectorSchema(ds)
31
-
32
26
  //prototype
33
27
  Vue.prototype.$ui = ui
34
28
  Vue.prototype.$t = ui.getKpText
35
29
  Vue.prototype.$tErr = ui.tErr
36
30
  Vue.prototype.$s = s
37
- Vue.prototype.$dssm = dssm
38
31
  Vue.prototype.$ds = ds
39
32
  Vue.prototype.$dg = {}
40
33
 
41
34
  //directive
42
35
  Vue.directive('domresize', domResize())
43
- Vue.directive('dommutation', domMutation())
44
- Vue.directive('domdragdrop', domDragDrop())
45
36
 
46
37
  //WServHapiClient
47
38
  // let bFirstSync = false //不需要bFirstSync, 由getWebInfor結束代表第1次完成同步
@@ -76,6 +67,9 @@ WServHapiClient({
76
67
  })
77
68
  .catch((err) => {
78
69
  console.log(err)
70
+ //getWebInfor 失敗時, connState 已為 csLogin 但 webInfor 為空 → ready 永遠為 false 會永久卡「已登入」轉圈畫面.
71
+ //改落到 csErrConn, 讓 LayoutState 顯示「無法連線」狀態畫面 (使用者可見錯誤而非靜默卡死).
72
+ ui.updateConnState('csErrConn')
79
73
  })
80
74
 
81
75
  },
package/src/perm.mjs CHANGED
@@ -23,12 +23,11 @@ function perm() {
23
23
  if (!isestr(url)) {
24
24
  throw new Error(`invalid url`)
25
25
  }
26
- if (url.indexOf('token=') === 0) {
26
+ if (url.indexOf('token=') < 0) {
27
27
  throw new Error(`url does not include 'token='`)
28
28
  }
29
- if (url.indexOf('userId=') === 0) {
30
- throw new Error(`url does not include 'userId='`)
31
- }
29
+ //註: conn() 為通用連線, getPerm 之 url 僅含 token=、getPermUserInfor 才含 userId=,
30
+ //故此處不強制 userId=(端點專屬之 userId 驗證由後端對應 handler 負責)。
32
31
 
33
32
  //permSuccess
34
33
  let permSuccess = get(opt, 'permSuccess')
@@ -1,45 +1,11 @@
1
1
  import Vue from 'vue'
2
- import min from 'lodash-es/min.js'
3
- import size from 'lodash-es/size.js'
4
- import take from 'lodash-es/take.js'
5
- import isEqual from 'lodash-es/isEqual.js'
6
- import uniq from 'lodash-es/uniq.js'
7
- import set from 'lodash-es/set.js'
8
2
  import get from 'lodash-es/get.js'
9
3
  import each from 'lodash-es/each.js'
10
- import map from 'lodash-es/map.js'
11
- import filter from 'lodash-es/filter.js'
12
- import last from 'lodash-es/last.js'
13
- import split from 'lodash-es/split.js'
14
- import join from 'lodash-es/join.js'
15
- import drop from 'lodash-es/drop.js'
16
- import dropRight from 'lodash-es/dropRight.js'
17
- import groupBy from 'lodash-es/groupBy.js'
18
- import sortBy from 'lodash-es/sortBy.js'
19
4
  import cloneDeep from 'lodash-es/cloneDeep.js'
20
- import cint from 'wsemi/src/cint.mjs'
21
5
  import delay from 'wsemi/src/delay.mjs'
22
- import isarr from 'wsemi/src/isarr.mjs'
23
6
  import isestr from 'wsemi/src/isestr.mjs'
24
7
  import isfun from 'wsemi/src/isfun.mjs'
25
- import isearr from 'wsemi/src/isearr.mjs'
26
- import isEle from 'wsemi/src/isEle.mjs'
27
- import strleft from 'wsemi/src/strleft.mjs'
28
- import strdelleft from 'wsemi/src/strdelleft.mjs'
29
- import sep from 'wsemi/src/sep.mjs'
30
- import aes2str from 'wsemi/src/aes2str.mjs'
31
- import str2aes from 'wsemi/src/str2aes.mjs'
32
- import haskey from 'wsemi/src/haskey.mjs'
33
- import genPm from 'wsemi/src/genPm.mjs'
34
- import pmSeries from 'wsemi/src/pmSeries.mjs'
35
8
  import waitFun from 'wsemi/src/waitFun.mjs'
36
- import browserView from 'wsemi/src/browserView.mjs'
37
- import arrHas from 'wsemi/src/arrHas.mjs'
38
- import arrSort from 'wsemi/src/arrSort.mjs'
39
- import arrInsert from 'wsemi/src/arrInsert.mjs'
40
- import replace from 'wsemi/src/replace.mjs'
41
- import timemsTZ2past from 'wsemi/src/timemsTZ2past.mjs'
42
- import convertToTree from 'wsemi/src/convertToTree.mjs'
43
9
  // import WUiDwload from 'w-ui-dwload/src/WUiDwload.mjs'
44
10
 
45
11
 
@@ -225,19 +191,6 @@ function tErr(err) {
225
191
  }
226
192
 
227
193
 
228
- function gv(o, k, cv = null) {
229
- let r = get(o, k, '')
230
- if (!isestr(r)) {
231
- let def = getKpText('empty')
232
- return def
233
- }
234
- if (isfun(cv)) {
235
- r = cv(r)
236
- }
237
- return r
238
- }
239
-
240
-
241
194
  function syncHeight() {
242
195
 
243
196
  //heightToolbar
@@ -302,7 +255,6 @@ let mUI = {
302
255
  getKpText,
303
256
  tErr,
304
257
 
305
- gv,
306
258
  syncHeight,
307
259
 
308
260
  // waitData,
@@ -74,12 +74,6 @@ export let mutations = {
74
74
  state[msg.tableName] = msg.data
75
75
  },
76
76
 
77
- [types.UpdateData] (state, msg) {
78
- //msg.path內為存取路徑, 需使用set處理
79
- // console.log('UpdateData msg', msg)
80
- set(state, msg.path, msg.data)
81
- },
82
-
83
77
  [types.UpdateHeightApp] (state, heightApp) {
84
78
  state.heightApp = heightApp
85
79
  },
@@ -92,10 +86,6 @@ export let mutations = {
92
86
  state.heightToolbar = heightToolbar
93
87
  },
94
88
 
95
- [types.UpdateMenu] (state, menu) {
96
- state.menu = menu
97
- },
98
-
99
89
  [types.UpdateUserToken] (state, userToken) {
100
90
  state.userToken = userToken
101
91
  },
@@ -6,10 +6,8 @@ export const UpdateSyncState = 'UpdateSyncState'
6
6
  export const UpdateLoading = 'UpdateLoading'
7
7
  // export const UpdateViewState = 'UpdateViewState'
8
8
  export const UpdateTableData = 'UpdateTableData'
9
- export const UpdateData = 'UpdateData'
10
9
  export const UpdateHeightApp = 'UpdateHeightApp'
11
10
  export const UpdateHeightAppEff = 'UpdateHeightAppEff'
12
11
  export const UpdateHeightToolbar = 'UpdateHeightToolbar'
13
- export const UpdateMenu = 'UpdateMenu'
14
12
  export const UpdateUserToken = 'UpdateUserToken'
15
13
  export const UpdateUserSelf = 'UpdateUserSelf'
package/tableTags.json CHANGED
@@ -1 +1 @@
1
- {"grups":"2026-06-22T14:53:50+08:00|dxIazx","pemis":"2026-06-22T14:53:50+08:00|kg4x7v","targets":"2026-06-22T14:53:50+08:00|jNJCZK","users":"2026-06-22T14:53:50+08:00|zponD1"}
1
+ {"grups":"2026-07-11T17:38:16+08:00|oibw7P","pemis":"2026-07-11T17:38:16+08:00|cnWe25","targets":"2026-07-11T17:38:16+08:00|OChCfm","users":"2026-07-11T17:38:16+08:00|7oyfiw"}