w-web-perm 1.0.4 → 1.0.5

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 (57) hide show
  1. package/README.md +9 -4
  2. package/dist/css/app.c07ac905.css +1 -0
  3. package/dist/index.tmp +1 -1
  4. package/dist/js/app-legacy.08662a52.js +2 -0
  5. package/dist/js/app-legacy.08662a52.js.map +1 -0
  6. package/dist/js/app.08662a52.js +2 -0
  7. package/dist/js/app.08662a52.js.map +1 -0
  8. package/dist/js/chunk-vendors-legacy.01754e13.js +13 -0
  9. package/dist/js/chunk-vendors-legacy.01754e13.js.map +1 -0
  10. package/dist/js/chunk-vendors.01754e13.js +13 -0
  11. package/dist/js/chunk-vendors.01754e13.js.map +1 -0
  12. package/dist/w-web-perm.umd.js +2 -2
  13. package/dist/w-web-perm.umd.js.map +1 -1
  14. package/docs/WWebPerm.html +41 -5
  15. package/docs/WWebPerm.mjs.html +341 -25
  16. package/docs/index.html +1 -1
  17. package/{g.mDb.mjs → g.backupDb.mjs} +1 -1
  18. package/g.initialData.mjs +111 -0
  19. package/{g.mInitialTestData.mjs → g.initialTestData.mjs} +1 -1
  20. package/g.provideRuleGroups.mjs +56 -0
  21. package/g.provideTargets.mjs +57 -0
  22. package/g.provideUsers.mjs +45 -0
  23. package/package.json +2 -7
  24. package/public/index.html +1 -1
  25. package/server/WWebPerm.mjs +340 -24
  26. package/server/provideRuleGroups.mjs +65 -0
  27. package/server/provideTargets.mjs +59 -0
  28. package/server/provideUsers.mjs +68 -0
  29. package/src/App.vue +2 -10
  30. package/src/components/Common/CheckYes.vue +2 -2
  31. package/src/components/Common/CheckYesNo.vue +3 -3
  32. package/src/components/Common/LoadingWinBar.vue +1 -1
  33. package/src/components/LayoutContent.vue +35 -62
  34. package/src/components/LayoutContentGroups.vue +64 -61
  35. package/src/components/LayoutContentTargets.vue +52 -53
  36. package/src/components/LayoutContentUsers.vue +62 -60
  37. package/src/components/VeUser.vue +18 -26
  38. package/src/components/ruleGroup.vue +11 -11
  39. package/src/main.js +0 -2
  40. package/src/schema/tables/ruleGroups.mjs +11 -11
  41. package/src/schema/tables/targets.mjs +6 -9
  42. package/src/schema/tables/users.mjs +5 -5
  43. package/src/store/mutations.mjs +324 -69
  44. package/srv.mjs +10 -11
  45. package/tableTags-web-perm.json +1 -1
  46. package/dist/css/app.79b4b59b.css +0 -1
  47. package/dist/css/chunk-vendors.99633b53.css +0 -5
  48. package/dist/js/app-legacy.48e6e535.js +0 -2
  49. package/dist/js/app-legacy.48e6e535.js.map +0 -1
  50. package/dist/js/app.7f6428ac.js +0 -2
  51. package/dist/js/app.7f6428ac.js.map +0 -1
  52. package/dist/js/chunk-vendors-legacy.7cb6c366.js +0 -13
  53. package/dist/js/chunk-vendors-legacy.7cb6c366.js.map +0 -1
  54. package/dist/js/chunk-vendors.7cb6c366.js +0 -13
  55. package/dist/js/chunk-vendors.7cb6c366.js.map +0 -1
  56. package/g.mInitialData.mjs +0 -147
  57. package/src/plugins/mVuetify.mjs +0 -12
package/src/App.vue CHANGED
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <v-app
2
+ <div
3
3
  v-domresize
4
4
  @domresize="resize"
5
5
  >
@@ -16,7 +16,7 @@
16
16
 
17
17
  <VeUser></VeUser>
18
18
 
19
- </v-app>
19
+ </div>
20
20
  </template>
21
21
 
22
22
  <script>
@@ -124,14 +124,6 @@ button {
124
124
  font-family: inherit;
125
125
  }
126
126
 
127
- .v-application, .v-application--wrap {
128
- font-family: inherit;
129
- }
130
-
131
- .v-chip {
132
- cursor: inherit;
133
- }
134
-
135
127
  .fade-enter-active {
136
128
  animation: go 1s;
137
129
  }
@@ -1,14 +1,14 @@
1
1
  <template>
2
2
  <WConfirm
3
3
  :show.sync="bShow"
4
- :title="'系統確認訊息'"
4
+ :title="$t('systemMessage')"
5
5
  :content="content"
6
6
  :_contentColor="'white'"
7
7
  :_contentIconColor="'white'"
8
8
  :_contentBackgroundColor="'orange lighten-5'"
9
9
  :headerBackgroundColor="'grey lighten-3'"
10
10
  :hasNoBtn="false"
11
- :yesBtnText="'確認'"
11
+ :yesBtnText="$t('ok')"
12
12
  @click-yes="clickUnit()"
13
13
  ></WConfirm>
14
14
  </template>
@@ -1,15 +1,15 @@
1
1
  <template>
2
2
  <WConfirm
3
3
  :show.sync="bShow"
4
- :title="'系統確認訊息'"
4
+ :title="$t('systemMessage')"
5
5
  :content="content"
6
6
  :_contentColor="'white'"
7
7
  :_contentIconColor="'white'"
8
8
  :_contentBackgroundColor="'orange lighten-5'"
9
9
  :_titleColor="'white'"
10
10
  :headerBackgroundColor="'grey lighten-3'"
11
- :noBtnText="'取消'"
12
- :yesBtnText="'確定'"
11
+ :noBtnText="$t('no')"
12
+ :yesBtnText="$t('yes')"
13
13
  @click-no="clickBtn(false)"
14
14
  @click-yes="clickBtn(true)"
15
15
  ></WConfirm>
@@ -13,7 +13,7 @@
13
13
 
14
14
  <span v-if="msg!==''">{{msg}}</span>
15
15
 
16
- <span v-else>處理中請稍後...</span>
16
+ <span v-else>{{$t('processing')}}</span>
17
17
 
18
18
  </div>
19
19
 
@@ -14,8 +14,9 @@
14
14
  :drawerWidthMin="drawerWidthMin"
15
15
  :drawerWidthMax="drawerWidthMax"
16
16
  :mode="'from-left'"
17
- :afloat="drawerAfloat"
18
17
  :dragDrawerWidth="true"
18
+ :autoSwitch="true"
19
+ :switchWidth="drawerWidth*2.3"
19
20
  >
20
21
 
21
22
  <template v-slot:drawer="props">
@@ -71,7 +72,7 @@
71
72
  <template>
72
73
 
73
74
  <LayoutContentTargets
74
- v-if="menuKey==='blocks'"
75
+ v-if="menuKey==='targets'"
75
76
  ></LayoutContentTargets>
76
77
 
77
78
  <LayoutContentGroups
@@ -123,12 +124,9 @@
123
124
  </template>
124
125
 
125
126
  <script>
126
- import { mdiGamepadCircle, mdiStackOverflow, mdiAccountGroupOutline, mdiBallotRecountOutline } from '@mdi/js/mdi.js'
127
+ import { mdiGamepadCircle, mdiStackOverflow, mdiAccountGroupOutline } from '@mdi/js/mdi.js'
127
128
  import get from 'lodash/get'
128
- // import map from 'lodash/map'
129
- // import each from 'lodash/each'
130
- // import cloneDeep from 'lodash/cloneDeep'
131
- // import pmSeries from 'wsemi/src/pmSeries.mjs'
129
+ import find from 'lodash/find'
132
130
  import WDrawer from 'w-component-vue/src/components/WDrawer.vue'
133
131
  import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
134
132
  import WListVertical from 'w-component-vue/src/components/WListVertical.vue'
@@ -147,46 +145,16 @@ export default {
147
145
  LayoutContentUsers,
148
146
  },
149
147
  props: {
150
- // menuKey: {
151
- // type: String,
152
- // default: '',
153
- // },
154
148
  },
155
149
  data: function() {
156
- let menus = [
157
- {
158
- key: 'blocks',
159
- text: '管理區塊',
160
- icon: mdiGamepadCircle,
161
- },
162
- {
163
- key: 'groups',
164
- text: '權限群組',
165
- icon: mdiStackOverflow,
166
- },
167
- {
168
- key: 'users',
169
- text: '使用者權限',
170
- icon: mdiAccountGroupOutline,
171
- },
172
- // {
173
- // key: 'logs',
174
- // text: '事件紀錄',
175
- // icon: mdiBallotRecountOutline,
176
- // },
177
- ]
178
150
  return {
179
151
 
180
- menuKey: 'blocks',
181
- menus,
182
- menuActive: menus[0],
152
+ menuKey: 'targets',
183
153
 
184
154
  panelWidth: 0,
185
- panelWidthTemp: 0,
186
155
  panelHeight: 0,
187
156
 
188
157
  drawer: true,
189
- drawerAfloat: false,
190
158
  drawerWidth: 180,
191
159
  drawerWidthMin: 150,
192
160
  drawerWidthMax: 300,
@@ -199,6 +167,35 @@ export default {
199
167
  return get(this, '$store.state.syncState')
200
168
  },
201
169
 
170
+ menus: function() {
171
+ let vo = this
172
+ let ms = [
173
+ {
174
+ key: 'targets',
175
+ text: vo.$t('managementTargets'),
176
+ icon: mdiGamepadCircle,
177
+ },
178
+ {
179
+ key: 'groups',
180
+ text: vo.$t('permissionGroups'),
181
+ icon: mdiStackOverflow,
182
+ },
183
+ {
184
+ key: 'users',
185
+ text: vo.$t('userPermissions'),
186
+ icon: mdiAccountGroupOutline,
187
+ },
188
+ ]
189
+ return ms
190
+ },
191
+
192
+ menuActive: function() {
193
+ let vo = this
194
+ let r = find(vo.menus, { key: vo.menuKey })
195
+ // console.log(r)
196
+ return r
197
+ },
198
+
202
199
  },
203
200
  methods: {
204
201
 
@@ -212,30 +209,6 @@ export default {
212
209
  vo.panelHeight = msg.snew.clientHeight
213
210
  // console.log('vo.panelHeight', vo.panelHeight)
214
211
 
215
- //modeResize
216
- let modeResize = '' //寬度可能相同故得有預設空字串的種類
217
- if (vo.panelWidth > vo.panelWidthTemp) {
218
- modeResize = 'toLarge'
219
- }
220
- else if (vo.panelWidth < vo.panelWidthTemp) {
221
- modeResize = 'toSmall'
222
- }
223
- // console.log('modeResize', modeResize, vo.panelWidth, vo.panelWidthTemp)
224
-
225
- //drawer
226
- if (vo.drawer && modeResize === 'toSmall' && vo.panelWidth < 1.7 * vo.drawerWidthMax) { //已開啟抽屜且為變窄時才偵測
227
- vo.drawer = false
228
- }
229
- else if (!vo.drawer && modeResize === 'toLarge' && vo.panelWidth >= 1.7 * vo.drawerWidthMax) { //已隱藏抽屜且為變寬時才偵測
230
- vo.drawer = true
231
- }
232
-
233
- //drawerAfloat
234
- vo.drawerAfloat = vo.panelWidth < 1.7 * vo.drawerWidthMax
235
-
236
- //save
237
- vo.panelWidthTemp = vo.panelWidth
238
-
239
212
  },
240
213
 
241
214
  }
@@ -7,37 +7,35 @@
7
7
  >
8
8
 
9
9
  <div
10
- style="border-bottom:1px solid #ddd;"
10
+ style="border-bottom:1px solid #ddd; background:#fff;"
11
11
  v-domresize
12
12
  @domresize="resizeHead"
13
13
  >
14
14
 
15
15
  <!-- 標題區 -->
16
- <div style="padding:30px 25px 0px 20px; background:#fff;">
17
- <div style="padding:5px 15px 5px 5px; display:inline-block; border-bottom:3px solid #FF9100;">
18
- <div style="display:flex; align-items:center;">
16
+ <div style="display:inline-block; vertical-align:top; padding:10px 0px 5px 20px;">
17
+ <div style="display:flex; align-items:center; padding:5px 15px 5px 5px; border-bottom:3px solid #FF9100;">
19
18
 
20
- <WIcon
21
- :icon="mdiStackOverflow"
22
- :color="'#FF9800'"
23
- ></WIcon>
24
-
25
- <div style="padding-left:10px; font-size:1.3rem; color:#d3912c;">
26
- 管理權限群組
27
- </div>
19
+ <WIcon
20
+ :icon="mdiStackOverflow"
21
+ :color="'#FF9800'"
22
+ ></WIcon>
28
23
 
24
+ <div style="padding-left:10px; font-size:1.3rem; color:#d3912c;">
25
+ {{$t('permissionGroups')}}
29
26
  </div>
27
+
30
28
  </div>
31
29
  </div>
32
30
 
33
31
  <!-- 編輯設定區 -->
34
- <div style="background:#fff;">
32
+ <div style="display:inline-block; vertical-align:top;">
35
33
 
36
- <div style="padding:20px 20px 15px 20px; background:#fff;">
34
+ <div style="padding:15px 20px 15px 20px; background:#fff;">
37
35
 
38
36
  <div style="display:flex;">
39
37
  <WSwitch
40
- :text="'是否編輯'"
38
+ :text="$t('isEditabled')"
41
39
  :checkedSwitchCircleColor="'#D81B60'"
42
40
  :checkedSwitchCircleColorHover="'#f26'"
43
41
  :checkedSwitchBarColor="'#F8BBD0'"
@@ -48,37 +46,35 @@
48
46
 
49
47
  <div style="padding-top:5px; font-size:0.8rem; _color:#f26;" v-if="isOperatable">
50
48
  <div style="padding:3px 0px;">
51
- 1. 請依照系統管理需求創建適合各類使用者適合的權限群組。
49
+ 1. {{$t('groupMsg1')}}
52
50
  </div>
53
51
  <div style="padding:3px 0px;">
54
- 2. 開啟編輯時可拖曳權限群組變更其相對順序。
55
- </div>
56
- <div style="padding:3px 0px;">
57
- 3. 此區域變更時將自動儲存。
52
+ 2. {{$t('groupMsg2')}}
58
53
  </div>
59
54
  </div>
60
55
 
61
56
  </div>
62
57
 
63
- <div
64
- style="padding:10px 10px 12px 10px; border-top:1px solid #F48FB1; border-bottom:1px solid #F48FB1; background:#FCE4EC; display:flex; align-items:center; justify-content:flex-end;"
65
- v-if="isModified"
66
- >
67
-
68
- <WButtonChip
69
- :paddingStyle="{v:0,h:11}"
70
- :text="'儲存變更'"
71
- :icon="mdiCloudUploadOutline"
72
- :backgroundColor="'rgba(255,0,50,0.7)'"
73
- :backgroundColorHover="'rgba(255,0,50,0.8)'"
74
- :textColor="'#eee'"
75
- :textColorHover="'#fff'"
76
- :iconColor="'#eee'"
77
- :iconColorHover="'#fff'"
78
- @click="saveGroups"
79
- ></WButtonChip>
58
+ </div>
80
59
 
81
- </div>
60
+ <!-- 儲存變更提示區 -->
61
+ <div
62
+ style="padding:10px 10px 12px 10px; border-top:1px solid #F48FB1; border-bottom:1px solid #F48FB1; background:#FCE4EC; display:flex; align-items:center; justify-content:flex-end;"
63
+ v-if="isModified"
64
+ >
65
+
66
+ <WButtonChip
67
+ :paddingStyle="{v:0,h:11}"
68
+ :text="$t('saveChanges')"
69
+ :icon="mdiCloudUploadOutline"
70
+ :backgroundColor="'rgba(255,0,50,0.7)'"
71
+ :backgroundColorHover="'rgba(255,0,50,0.8)'"
72
+ :textColor="'#eee'"
73
+ :textColorHover="'#fff'"
74
+ :iconColor="'#eee'"
75
+ :iconColorHover="'#fff'"
76
+ @click="saveGroups"
77
+ ></WButtonChip>
82
78
 
83
79
  </div>
84
80
 
@@ -101,8 +97,8 @@
101
97
  :draggable="isOperatable"
102
98
  :editableClose="isOperatable"
103
99
  :editableInput="isOperatable"
104
- :addButtonText="'新增群組'"
105
- :addButtonTooltip="'新增權限群組'"
100
+ :addButtonText="$t('addGroup')"
101
+ :addButtonTooltip="$t('addPermissionGroup')"
106
102
  :addButtonTextColor="'#eee'"
107
103
  :addButtonTextColorHover="'#fff'"
108
104
  :addButtonIconColor="'#eee'"
@@ -132,7 +128,7 @@
132
128
  style="padding:20px; _color:#666; font-size:0.85rem;"
133
129
  v-else
134
130
  >
135
- 未選擇權限群組,請點擇上方任一權限群組以顯示管理範圍。
131
+ {{$t('groupMsgNoPick')}}
136
132
  </div>
137
133
 
138
134
  </div>
@@ -140,7 +136,7 @@
140
136
  </div>
141
137
 
142
138
  <div style="padding:10px 15px; font-size:0.8rem;" v-else>
143
- 載入中...
139
+ {{$t('waitingData')}}
144
140
  </div>
145
141
 
146
142
  </div>
@@ -161,6 +157,7 @@ import cloneDeep from 'lodash/cloneDeep'
161
157
  import genID from 'wsemi/src/genID.mjs'
162
158
  import isestr from 'wsemi/src/isestr.mjs'
163
159
  import iseobj from 'wsemi/src/iseobj.mjs'
160
+ import cstr from 'wsemi/src/cstr.mjs'
164
161
  import waitFun from 'wsemi/src/waitFun.mjs'
165
162
  import WIcon from 'w-component-vue/src/components/WIcon.vue'
166
163
  import WButtonChip from 'w-component-vue/src/components/WButtonChip.vue'
@@ -192,7 +189,7 @@ export default {
192
189
  groupInforHeight: 100,
193
190
 
194
191
  firstLoading: true,
195
- isOperatable: false,
192
+ isOperatable: true,
196
193
  isModified: false,
197
194
 
198
195
  groupsTrans: [],
@@ -318,12 +315,14 @@ export default {
318
315
  getDescription: function(g) {
319
316
  // console.log('methods getDescription', g)
320
317
 
318
+ let vo = this
319
+
321
320
  //r
322
321
  let r = get(g, 'description', '')
323
322
 
324
323
  //check
325
324
  if (!isestr(r)) {
326
- r = '無說明'
325
+ r = vo.$t('noDescription')
327
326
  }
328
327
 
329
328
  return r
@@ -365,7 +364,7 @@ export default {
365
364
  //g
366
365
  let g = {
367
366
  id: genID(),
368
- name: '新權限群組',
367
+ name: vo.$t('newGroup'),
369
368
  crules: `{ "___all___": { "show": "n", "active": "n" } }`,
370
369
  order: orderMax,
371
370
  }
@@ -378,7 +377,7 @@ export default {
378
377
 
379
378
  //check
380
379
  if (errTemp !== null) {
381
- vo.$alert(`新增權限群組失敗: ${errTemp}`, { type: 'error' })
380
+ vo.$alert(`${vo.$t('failedToAddPermissionGroup')}: ${errTemp}`, { type: 'error' })
382
381
  }
383
382
 
384
383
  //gn
@@ -392,7 +391,7 @@ export default {
392
391
  // console.log('gn', gn)
393
392
 
394
393
  //alert
395
- vo.$alert(`新增權限群組成功`)
394
+ vo.$alert(vo.$t('successfulToAddPermissionGroup'))
396
395
 
397
396
  }
398
397
 
@@ -403,7 +402,7 @@ export default {
403
402
  // })
404
403
  .catch((err) => {
405
404
  console.log('catch', err)
406
- vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })
405
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' })
407
406
  })
408
407
  .finally(() => {
409
408
 
@@ -426,11 +425,13 @@ export default {
426
425
  let g = get(msg, 'item', {})
427
426
 
428
427
  //name
429
- let name = get(g, 'name', '未知')
428
+ let name = get(g, 'name', vo.$t('unknow'))
430
429
 
431
430
  //showCheckYesNo
432
431
  let bExit = false
433
- await vo.$dg.showCheckYesNo(`確認是否刪除權限群組「${name}」?`)
432
+ let t_confirmToDeletePermissionGroup = vo.$t('confirmToDeletePermissionGroup')
433
+ t_confirmToDeletePermissionGroup = t_confirmToDeletePermissionGroup.replace('{name}', name)
434
+ await vo.$dg.showCheckYesNo(t_confirmToDeletePermissionGroup)
434
435
  .catch(() => {
435
436
  bExit = true
436
437
  })
@@ -449,7 +450,7 @@ export default {
449
450
 
450
451
  //check
451
452
  if (errTemp !== null) {
452
- vo.$alert(`刪除權限群組失敗: ${errTemp}`, { type: 'error' })
453
+ vo.$alert(`${vo.$t('failedToDeletePermissionGroup')}: ${errTemp}`, { type: 'error' })
453
454
  return
454
455
  }
455
456
 
@@ -464,7 +465,7 @@ export default {
464
465
  // console.log('gn', gn)
465
466
 
466
467
  //alert
467
- vo.$alert(`刪除權限群組成功`)
468
+ vo.$alert(vo.$t('successfulToDeletePermissionGroup'))
468
469
 
469
470
  }
470
471
 
@@ -475,7 +476,7 @@ export default {
475
476
  // })
476
477
  .catch((err) => {
477
478
  console.log('catch', err)
478
- vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })
479
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' })
479
480
  })
480
481
  .finally(() => {
481
482
 
@@ -522,7 +523,7 @@ export default {
522
523
 
523
524
  //check
524
525
  if (errTemp !== null) {
525
- vo.$alert(`變更權限群組順序失敗: ${errTemp}`, { type: 'error' })
526
+ vo.$alert(`${vo.$t('failedToChangeOrderPermissionGroup')}: ${errTemp}`, { type: 'error' })
526
527
  return
527
528
  }
528
529
 
@@ -540,7 +541,7 @@ export default {
540
541
  // console.log('gsn', gsn)
541
542
 
542
543
  //alert
543
- vo.$alert(`變更權限群組順序成功`)
544
+ vo.$alert(vo.$t('successfulToChangeOrderPermissionGroup'))
544
545
 
545
546
  }
546
547
 
@@ -551,7 +552,7 @@ export default {
551
552
  // })
552
553
  .catch((err) => {
553
554
  console.log('catch', err)
554
- vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })
555
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' })
555
556
  })
556
557
  .finally(() => {
557
558
 
@@ -569,7 +570,7 @@ export default {
569
570
 
570
571
  //check
571
572
  if (!isestr(group.name)) {
572
- vo.$alert(`權限群組名稱請記得給予`, { type: 'warning' })
573
+ vo.$alert(vo.$t('rememberToGivePermissionGroupName'), { type: 'warning' })
573
574
  }
574
575
 
575
576
  //modify
@@ -597,7 +598,9 @@ export default {
597
598
  let b = false
598
599
  each(vo.groupsTrans, (v, k) => {
599
600
  if (!isestr(v.name)) {
600
- vo.$alert(`第 ${k + 1} 個權限群組名稱為空`, { type: 'error' })
601
+ let t_isPermissionGroupNameEmpty = vo.$t('isPermissionGroupNameEmpty')
602
+ t_isPermissionGroupNameEmpty = t_isPermissionGroupNameEmpty.replace('{n}', cstr(k + 1))
603
+ vo.$alert(t_isPermissionGroupNameEmpty, { type: 'error' })
601
604
  b = true
602
605
  }
603
606
  })
@@ -627,7 +630,7 @@ export default {
627
630
 
628
631
  //check
629
632
  if (errTemp !== null) {
630
- vo.$alert(`儲存權限群組失敗: ${errTemp}`, { type: 'error' })
633
+ vo.$alert(`${vo.$t('failedToSavePermissionGroup')}: ${errTemp}`, { type: 'error' })
631
634
  return
632
635
  }
633
636
 
@@ -635,7 +638,7 @@ export default {
635
638
  vo.isModified = false
636
639
 
637
640
  //alert
638
- vo.$alert(`儲存權限群組成功`)
641
+ vo.$alert(vo.$t('successfulToSavePermissionGroup'))
639
642
 
640
643
  }
641
644
 
@@ -646,7 +649,7 @@ export default {
646
649
  // })
647
650
  .catch((err) => {
648
651
  console.log('catch', err)
649
- vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })
652
+ vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' })
650
653
  })
651
654
  .finally(() => {
652
655