w-web-perm 1.0.4 → 1.0.6

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 (58) hide show
  1. package/README.md +9 -4
  2. package/dist/css/app.dad1d596.css +1 -0
  3. package/dist/index.tmp +1 -1
  4. package/dist/js/app-legacy.4e39a313.js +2 -0
  5. package/dist/js/app-legacy.4e39a313.js.map +1 -0
  6. package/dist/js/app.4e39a313.js +2 -0
  7. package/dist/js/app.4e39a313.js.map +1 -0
  8. package/dist/js/chunk-vendors-legacy.827f1c54.js +13 -0
  9. package/dist/js/chunk-vendors-legacy.827f1c54.js.map +1 -0
  10. package/dist/js/chunk-vendors.827f1c54.js +13 -0
  11. package/dist/js/chunk-vendors.827f1c54.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 +37 -68
  34. package/src/components/LayoutContentGroups.vue +68 -62
  35. package/src/components/LayoutContentTargets.vue +56 -54
  36. package/src/components/LayoutContentUsers.vue +66 -61
  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/vue.config.js +1 -1
  47. package/dist/css/app.79b4b59b.css +0 -1
  48. package/dist/css/chunk-vendors.99633b53.css +0 -5
  49. package/dist/js/app-legacy.48e6e535.js +0 -2
  50. package/dist/js/app-legacy.48e6e535.js.map +0 -1
  51. package/dist/js/app.7f6428ac.js +0 -2
  52. package/dist/js/app.7f6428ac.js.map +0 -1
  53. package/dist/js/chunk-vendors-legacy.7cb6c366.js +0 -13
  54. package/dist/js/chunk-vendors-legacy.7cb6c366.js.map +0 -1
  55. package/dist/js/chunk-vendors.7cb6c366.js +0 -13
  56. package/dist/js/chunk-vendors.7cb6c366.js.map +0 -1
  57. package/g.mInitialData.mjs +0 -147
  58. package/src/plugins/mVuetify.mjs +0 -12
@@ -5,9 +5,9 @@
5
5
  _maxWidth="1200"
6
6
  _minWidth="1200"
7
7
  :fullscreen="true"
8
- :title="'編修使用者'"
9
- :save-btn-tooltip="'儲存'"
10
- :close-btn-tooltip="'關閉'"
8
+ :title="$t('editUser')"
9
+ :save-btn-tooltip="$t('save')"
10
+ :close-btn-tooltip="$t('close')"
11
11
  @click-save="clickSave"
12
12
  @click-close="clickClose"
13
13
  @resize="resize"
@@ -19,7 +19,7 @@
19
19
 
20
20
  <div style="padding:0px 20px 20px 20px; display:flex; align-items:center;">
21
21
 
22
- <div style="padding-right:10px; color:#777; white-space:nowrap;">使用者姓名:</div>
22
+ <div style="padding-right:10px; color:#777; white-space:nowrap;">{{$t('username')}}:</div>
23
23
 
24
24
  <WText
25
25
  style="width:100%;"
@@ -30,7 +30,7 @@
30
30
 
31
31
  <div style="padding:0px 20px 20px 20px; display:flex; align-items:center;">
32
32
 
33
- <div style="padding-right:10px; color:#777; white-space:nowrap;">電子郵件:</div>
33
+ <div style="padding-right:10px; color:#777; white-space:nowrap;">{{$t('email')}}:</div>
34
34
 
35
35
  <WText
36
36
  style="width:100%;"
@@ -41,7 +41,7 @@
41
41
 
42
42
  <div style="padding:0px 20px 20px 20px; display:flex; align-items:center;">
43
43
 
44
- <div style="padding-right:10px; color:#777; white-space:nowrap;">來源:</div>
44
+ <div style="padding-right:10px; color:#777; white-space:nowrap;">{{$t('from')}}:</div>
45
45
 
46
46
  <WTextSuggest
47
47
  style="width:200px;"
@@ -56,7 +56,7 @@
56
56
 
57
57
  <div style="padding:0px 20px 20px 20px;">
58
58
 
59
- <div style="padding-bottom:5px; color:#777; white-space:nowrap;">隸屬權限群組:</div>
59
+ <div style="padding-bottom:5px; color:#777; white-space:nowrap;">{{$t('belongToPermissionGroup')}}:</div>
60
60
 
61
61
  <div
62
62
  style="display:inline-block; padding:0px 15px 15px 0px;"
@@ -81,7 +81,7 @@
81
81
 
82
82
  </div>
83
83
 
84
- <div style="padding-bottom:5px; color:#777; white-space:nowrap;">使用者可用區塊:</div>
84
+ <div style="padding-bottom:5px; color:#777; white-space:nowrap;">{{$t('availableTarget')}}:</div>
85
85
 
86
86
  <div style="border:1px dashed #f26; background:rgba(255,50,100,0.05);">
87
87
 
@@ -100,7 +100,7 @@
100
100
 
101
101
  <div style="padding:0px 20px 20px 20px; display:flex; align-items:center;">
102
102
 
103
- <div style="padding-right:10px; color:#777; white-space:nowrap;">是否為管理者:</div>
103
+ <div style="padding-right:10px; color:#777; white-space:nowrap;">{{$t('isAManager')}}:</div>
104
104
 
105
105
  <WSwitch
106
106
  :value="u.isAdmin==='y'"
@@ -111,7 +111,7 @@
111
111
 
112
112
  <div style="padding:0px 20px 20px 20px; display:flex; align-items:center;">
113
113
 
114
- <div style="padding-right:10px; color:#777; white-space:nowrap;">是否有效:</div>
114
+ <div style="padding-right:10px; color:#777; white-space:nowrap;">{{$t('isActive')}}:</div>
115
115
 
116
116
  <WSwitch
117
117
  :value="u.isActive==='y'"
@@ -124,7 +124,7 @@
124
124
 
125
125
  <div style="padding:0px 20px 20px 20px; display:flex; align-items:center;">
126
126
 
127
- <div style="padding-right:10px; color:#777; white-space:nowrap;">備註:</div>
127
+ <div style="padding-right:10px; color:#777; white-space:nowrap;">{{$t('remark')}}:</div>
128
128
 
129
129
  <WText
130
130
  style="width:100%;"
@@ -137,7 +137,7 @@
137
137
 
138
138
  <div style="padding:0px 20px 20px 20px; display:flex; align-items:center;">
139
139
 
140
- <div style="padding-right:10px; color:#777; white-space:nowrap;">創建日期:</div>
140
+ <div style="padding-right:10px; color:#777; white-space:nowrap;">{{$t('dayCreate')}}:</div>
141
141
 
142
142
  <div style="padding:0px 7px; border-radius:20px; font-size:0.8rem; color:#fff; background:#A1887F;">
143
143
  {{getCreateDay(u)}}
@@ -262,7 +262,7 @@ export default {
262
262
  resize: function(msg) {
263
263
  // console.log('methods resize', msg)
264
264
 
265
- let vo = this
265
+ // let vo = this
266
266
 
267
267
  // //panelHeight
268
268
  // vo.panelHeight = msg.contentHeightMax - 59 //- 61.6
@@ -331,7 +331,7 @@ export default {
331
331
 
332
332
  //check
333
333
  if (!isestr(vo.u.name)) {
334
- vo.$alert(`使用者名稱不得為空`, { type: 'error' })
334
+ vo.$alert(vo.$t('isUsernameEmpty'), { type: 'error' })
335
335
  return
336
336
  }
337
337
 
@@ -346,7 +346,6 @@ export default {
346
346
  description: trim(vo.u.description),
347
347
  ruleGroupsIds: trim(vo.u.ruleGroupsIds),
348
348
  from: trim(vo.u.from),
349
- isVirtual: 'n', //儲存時則更改為非虛擬使用者, 也就是將外部系統(如SSO或AD)使用者資料另存至資料庫中, 用以識別
350
349
  isAdmin: vo.u.isAdmin,
351
350
  isActive: vo.u.isActive,
352
351
  // userId, //insert時自動由後端給予
@@ -355,27 +354,20 @@ export default {
355
354
  // timeUpdate: timeCreate,
356
355
  }
357
356
 
358
- //mode
359
- let mode = 'save'
360
- if (vo.u.isVirtual === 'y') { //若是儲存虛擬使用者, 代表是第1次儲存至資料庫中, 故需要insert來自動給予userId與timeCreate
361
- mode = 'insert'
362
- }
363
- // console.log('vo.u.isVirtual', vo.u.isVirtual)
364
-
365
- //insert or save
366
- await vo.$fapi.users[mode](u)
357
+ //save
358
+ await vo.$fapi.users.save(u)
367
359
  .catch((err) => {
368
360
  errTemp = err
369
361
  })
370
362
 
371
363
  //check
372
364
  if (errTemp !== null) {
373
- vo.$alert(`變更使用者失敗: ${errTemp}`, { type: 'error' })
365
+ vo.$alert(`${vo.$t('failedToSaveUser')}: ${errTemp}`, { type: 'error' })
374
366
  return
375
367
  }
376
368
 
377
369
  //alert
378
- vo.$alert(`變更使用者成功`)
370
+ vo.$alert(vo.$t('successfulToSaveUser'))
379
371
 
380
372
  }
381
373
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  <div style="padding:5px 0px; display:flex; align-items:center;">
20
20
  <div style="padding-right:5px; font-size:0.9rem; color:#888;">
21
- 名稱:
21
+ {{$t('name')}}:
22
22
  </div>
23
23
  <div style="">
24
24
  <WText
@@ -31,7 +31,7 @@
31
31
 
32
32
  <div style="padding:5px 0px; display:flex; align-items:center;">
33
33
  <div style="padding-right:5px; font-size:0.9rem; color:#888;">
34
- 說明:
34
+ {{$t('description')}}:
35
35
  </div>
36
36
  <div style="">
37
37
  <WText
@@ -64,10 +64,10 @@
64
64
  v-if="false"
65
65
  >
66
66
 
67
- <div style="margin-right:10px;">全部項目預設值:</div>
67
+ <div style="margin-right:10px;">{{$t('allDefaults')}}:</div>
68
68
 
69
69
  <div style="margin-right:10px; display:flex; align-items:center;">
70
- <div style="margin-right:5px;">顯示</div>
70
+ <div style="margin-right:5px;">{{$t('show')}}</div>
71
71
  <div>
72
72
  <WSwitch
73
73
  :value="defaultShow"
@@ -77,7 +77,7 @@
77
77
  </div>
78
78
 
79
79
  <div style="margin-right:10px; display:flex; align-items:center;">
80
- <div style="margin-right:5px;">啟用</div>
80
+ <div style="margin-right:5px;">{{$t('active')}}</div>
81
81
  <div>
82
82
  <WSwitch
83
83
  :value="defaultActive"
@@ -115,7 +115,7 @@
115
115
  :iconSize="18"
116
116
  :paddingStyle="{v:4,h:4}"
117
117
  :shadow="false"
118
- :tooltip="'所屬顯示'"
118
+ :tooltip="$t('showChildren')"
119
119
  :backgroundColor="'rgba(200,200,200,0.2)'"
120
120
  :backgroundColorHover="'rgba(255,150,100,0.2)'"
121
121
  :backgroundColorFocus="'rgba(255,150,100,0.2)'"
@@ -130,7 +130,7 @@
130
130
  :iconSize="18"
131
131
  :paddingStyle="{v:4,h:4}"
132
132
  :shadow="false"
133
- :tooltip="'所屬不顯示'"
133
+ :tooltip="$t('hideChildren')"
134
134
  :backgroundColor="'rgba(200,200,200,0.2)'"
135
135
  :backgroundColorHover="'rgba(255,150,100,0.2)'"
136
136
  :backgroundColorFocus="'rgba(255,150,100,0.2)'"
@@ -145,7 +145,7 @@
145
145
  :iconSize="18"
146
146
  :paddingStyle="{v:4,h:4}"
147
147
  :shadow="false"
148
- :tooltip="'所屬啟用'"
148
+ :tooltip="$t('activateChildren')"
149
149
  :backgroundColor="'rgba(200,200,200,0.2)'"
150
150
  :backgroundColorHover="'rgba(255,150,100,0.2)'"
151
151
  :backgroundColorFocus="'rgba(255,150,100,0.2)'"
@@ -160,7 +160,7 @@
160
160
  :iconSize="18"
161
161
  :paddingStyle="{v:4,h:4}"
162
162
  :shadow="false"
163
- :tooltip="'所屬不啟用'"
163
+ :tooltip="$t('deactivateChildren')"
164
164
  :backgroundColor="'rgba(200,200,200,0.2)'"
165
165
  :backgroundColorHover="'rgba(255,150,100,0.2)'"
166
166
  :backgroundColorFocus="'rgba(255,150,100,0.2)'"
@@ -174,7 +174,7 @@
174
174
 
175
175
  <div style="margin-left:10px; display:inline-block;">
176
176
  <div style="display:flex; align-items:center;">
177
- <div style="margin-right:3px; font-size:0.8rem;">顯示</div>
177
+ <div style="margin-right:3px; font-size:0.8rem;">{{$t('show')}}</div>
178
178
  <WCheckbox
179
179
  :checkedIconColor="'yellow darken-4'"
180
180
  :uncheckedIconColor="'yellow darken-4'"
@@ -187,7 +187,7 @@
187
187
 
188
188
  <div style="margin-left:10px; display:inline-block;">
189
189
  <div style="display:flex; align-items:center;">
190
- <div style="margin-right:3px; font-size:0.8rem;">啟用</div>
190
+ <div style="margin-right:3px; font-size:0.8rem;">{{$t('active')}}</div>
191
191
  <WCheckbox
192
192
  :checkedIconColor="'yellow darken-4'"
193
193
  :uncheckedIconColor="'yellow darken-4'"
package/src/main.js CHANGED
@@ -7,7 +7,6 @@ import domResize from 'w-component-vue/src/js/domResize.mjs'
7
7
  import domDragDrop from 'w-component-vue/src/js/domDragDrop.mjs'
8
8
  import App from './App.vue'
9
9
  import store from './store/index.mjs'
10
- import mVuetify from './plugins/mVuetify.mjs'
11
10
  import ui from './plugins/mUI.mjs'
12
11
  import mDataSelectorSchema from './plugins/mDataSelectorSchema.mjs'
13
12
  // import mDataSupport from './plugins/mDataSupport.mjs'
@@ -91,7 +90,6 @@ WServHapiClient({
91
90
 
92
91
  //new
93
92
  new Vue({
94
- vuetify: mVuetify,
95
93
  store,
96
94
  render: h => h(App)
97
95
  }).$mount('#app')
@@ -18,24 +18,24 @@ let settings = {
18
18
  name: '主鍵',
19
19
  type: 'STRING',
20
20
  },
21
- name: {
22
- name: '名稱',
23
- type: 'STRING',
24
- },
25
21
  order: {
26
22
  name: '順序',
27
23
  type: 'INTEGER',
28
24
  },
29
- // type: { //可依照type分組
30
- // name: '類別',
31
- // type: 'STRING',
32
- // },
25
+ name: {
26
+ name: '名稱',
27
+ type: 'STRING',
28
+ },
33
29
  description: {
34
30
  name: '說明',
35
31
  type: 'TEXT',
36
32
  },
33
+ from: {
34
+ name: '來源',
35
+ type: 'STRING',
36
+ },
37
37
  crules: {
38
- name: '規則', //為json字串, 例如{ '___all___': {show:'y',active:'n'}, '專案A.頁A': {show:'y',active:'y'}, '專案A.頁B': {show:'n',active:'n'} }
38
+ name: '規則', //為json字串, 例如{ '___all___': {show:'y',active:'n'}, '專案A/頁A': {show:'y',active:'y'}, '專案A/頁B': {show:'n',active:'n'} }
39
39
  type: 'TEXT',
40
40
  },
41
41
  userId: {
@@ -68,15 +68,15 @@ let funNew = (ndata = {}) => {
68
68
 
69
69
  let funTest = () => {
70
70
  let rs = [
71
- ['權限群組1', `{ "___all___": { "show": "y", "active": "n" }, "專案A.頁A": { "show": "y", "active": "y" }, "專案A.頁B": { "show": "n", "active": "n" } }`],
71
+ ['權限群組1', `{ "___all___": { "show": "y", "active": "n" }, "專案A/頁A": { "show": "y", "active": "y" }, "專案A/頁B": { "show": "n", "active": "n" } }`],
72
72
  ['權限群組2', `{ "___all___": { "show": "y", "active": "n" } }`],
73
73
  ['權限群組3', `{ "___all___": { "show": "y", "active": "y" } }`],
74
74
  ]
75
75
  rs = map(rs, ([g, crules], k) => {
76
76
  let v = funNew({ userId: 'id-for-admin', crules })
77
77
  v.id = `id-for-${g}`
78
- v.name = g
79
78
  v.order = k
79
+ v.name = g
80
80
  v.description = `${g}的說明`
81
81
  v = dtpick(v, keys(settings))
82
82
  return v
@@ -22,18 +22,14 @@ let settings = {
22
22
  name: '順序',
23
23
  type: 'INTEGER',
24
24
  },
25
- // key: {
26
- // name: '所屬區塊識別鍊',
27
- // type: 'STRING',
28
- // },
29
- // name: {
30
- // name: '區塊名稱',
31
- // type: 'STRING',
32
- // },
33
25
  description: {
34
26
  name: '說明',
35
27
  type: 'TEXT',
36
28
  },
29
+ from: {
30
+ name: '來源',
31
+ type: 'STRING',
32
+ },
37
33
  }
38
34
 
39
35
  let funNew = (ndata = {}) => {
@@ -71,7 +67,8 @@ let funTest = () => {
71
67
  ]
72
68
  rs = map(rs, (key, k) => {
73
69
  let v = funNew({ description: key })
74
- v.id = `id-for-${key}`
70
+ v.id = key
71
+ v.order = k
75
72
  v = dtpick(v, keys(settings))
76
73
  return v
77
74
  })
@@ -18,6 +18,10 @@ let settings = {
18
18
  name: '主鍵',
19
19
  type: 'STRING',
20
20
  },
21
+ order: {
22
+ name: '順序',
23
+ type: 'INTEGER',
24
+ },
21
25
  name: {
22
26
  name: '姓名',
23
27
  type: 'STRING',
@@ -38,10 +42,6 @@ let settings = {
38
42
  name: '所屬權限群組主鍵', //多主鍵用分號區隔
39
43
  type: 'STRING',
40
44
  },
41
- isVirtual: {
42
- name: '是否為虛擬使用者', //代表由外部系統(如SSO或AD)提供之使用者
43
- type: 'STRING',
44
- },
45
45
  isAdmin: {
46
46
  name: '是否為系統管理員',
47
47
  type: 'STRING',
@@ -71,7 +71,6 @@ let settings = {
71
71
  let funNew = (ndata = {}) => {
72
72
  let o = dtmapping(ndata, keys(settings))
73
73
  o.id = `${now2strp()}-${genID()}`
74
- o.isVirtual = 'n'
75
74
  o.isAdmin = 'n'
76
75
  o.userIdUpdate = o.userId
77
76
  o.timeCreate = nowms2str()
@@ -92,6 +91,7 @@ let funTest = () => {
92
91
  rs = map(rs, (name, k) => {
93
92
  let v = funNew({ userId: 'id-for-admin', name })
94
93
  v.id = `id-for-${name}`
94
+ v.order = k
95
95
  v.email = `${name}@example.com`
96
96
  v = dtpick(v, keys(settings))
97
97
  return v