w-web-perm 1.0.12 → 1.0.13
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.
- package/.vscode/launch.json +0 -1
- package/README.md +0 -1
- package/dist/css/app.f22995d1.css +1 -0
- package/dist/index.tmp +1 -1
- package/dist/js/app-legacy.82274c39.js +2 -0
- package/dist/js/app-legacy.82274c39.js.map +1 -0
- package/dist/js/app.82274c39.js +2 -0
- package/dist/js/app.82274c39.js.map +1 -0
- package/dist/js/chunk-vendors-legacy.d89048a8.js +13 -0
- package/dist/js/chunk-vendors-legacy.d89048a8.js.map +1 -0
- package/dist/js/chunk-vendors.d89048a8.js +13 -0
- package/dist/js/chunk-vendors.d89048a8.js.map +1 -0
- package/dist/w-web-perm.umd.js +2 -2
- package/dist/w-web-perm.umd.js.map +1 -1
- package/docs/WWebPerm.html +2 -2
- package/docs/WWebPerm.mjs.html +212 -64
- package/docs/index.html +1 -1
- package/g.backupDb.mjs +1 -1
- package/g.initialData.mjs +211 -111
- package/g.initialTestData.mjs +2 -1
- package/g.mjs +0 -0
- package/g.provideGrups.mjs +87 -0
- package/g.providePemis.mjs +43 -0
- package/g.provideTargets.mjs +20 -13
- package/g.provideUsers.mjs +45 -13
- package/package.json +8 -8
- package/script.txt +5 -5
- package/server/WWebPerm.mjs +211 -63
- package/server/provideGrups.mjs +64 -0
- package/server/{provideRuleGroups.mjs → providePemis.mjs} +14 -15
- package/server/provideTargets.mjs +8 -5
- package/server/provideUsers.mjs +9 -9
- package/src/App.vue +16 -3
- package/src/components/Layout.vue +13 -5
- package/src/components/LayoutContent.vue +31 -16
- package/src/components/LayoutContentGrups.vue +793 -0
- package/src/components/LayoutContentPemis.vue +793 -0
- package/src/components/LayoutContentTargets.vue +481 -307
- package/src/components/LayoutContentUsers.vue +796 -291
- package/src/components/VeCgrups.vue +926 -0
- package/src/components/VeCpemis.vue +926 -0
- package/src/components/VeCrules.vue +820 -0
- package/src/main.js +2 -2
- package/src/perm.mjs +5 -5
- package/src/plugins/mShare.mjs +444 -153
- package/src/plugins/mUI.mjs +37 -19
- package/src/schema/gi.mjs +1 -1
- package/src/schema/index.mjs +4 -2
- package/src/schema/tables/grups.mjs +154 -0
- package/src/schema/tables/{ruleGroups.mjs → pemis.mjs} +27 -16
- package/src/schema/tables/targets.mjs +49 -16
- package/src/schema/tables/users.mjs +55 -27
- package/src/store/mutations.mjs +375 -150
- package/srv.mjs +2 -2
- package/tableTags-web-perm.json +1 -1
- package/dist/css/app.f6c50bec.css +0 -1
- package/dist/js/app-legacy.767522f1.js +0 -2
- package/dist/js/app-legacy.767522f1.js.map +0 -1
- package/dist/js/app.767522f1.js +0 -2
- package/dist/js/app.767522f1.js.map +0 -1
- package/dist/js/chunk-vendors-legacy.b0d63e17.js +0 -13
- package/dist/js/chunk-vendors-legacy.b0d63e17.js.map +0 -1
- package/dist/js/chunk-vendors.b0d63e17.js +0 -13
- package/dist/js/chunk-vendors.b0d63e17.js.map +0 -1
- package/g.provideRuleGroups.mjs +0 -56
- package/src/components/LayoutContentGroups.vue +0 -671
- package/src/components/VeUser.vue +0 -446
- package/src/components/ruleGroup.vue +0 -645
|
@@ -13,108 +13,124 @@
|
|
|
13
13
|
>
|
|
14
14
|
|
|
15
15
|
<!-- 標題區 -->
|
|
16
|
-
<div style="
|
|
17
|
-
<div style="display:flex; align-items:center; padding:5px
|
|
16
|
+
<div style="padding:10px 10px 10px 20px;">
|
|
17
|
+
<div :style="`display:flex; align-items:center; padding:${drawer?'5px':'5px 5px 5px 20px'};`">
|
|
18
18
|
|
|
19
19
|
<WIcon
|
|
20
20
|
:icon="mdiGamepadCircle"
|
|
21
|
-
:color="'#
|
|
21
|
+
:color="'#000'"
|
|
22
|
+
:size="26"
|
|
22
23
|
></WIcon>
|
|
23
24
|
|
|
24
|
-
<div style="padding-left:10px; font-size:1.
|
|
25
|
+
<div style="padding-left:10px; font-size:1.4rem; color:#000;">
|
|
25
26
|
{{$t('managementTargets')}}
|
|
26
27
|
</div>
|
|
27
28
|
|
|
28
29
|
</div>
|
|
29
30
|
</div>
|
|
30
31
|
|
|
31
|
-
<!--
|
|
32
|
-
<div style="
|
|
33
|
-
|
|
34
|
-
<
|
|
35
|
-
|
|
36
|
-
<
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
32
|
+
<!-- 功能區 -->
|
|
33
|
+
<div style="padding:5px; border-top:1px solid #ddd; display:flex; align-items:center;">
|
|
34
|
+
|
|
35
|
+
<template>
|
|
36
|
+
|
|
37
|
+
<WButtonCircle
|
|
38
|
+
:paddingStyle="{v:6,h:6}"
|
|
39
|
+
:tooltip="$t('targetAdd')"
|
|
40
|
+
:icon="mdiPlus"
|
|
41
|
+
:backgroundColor="'#fff'"
|
|
42
|
+
:backgroundColorHover="'#f2f2f2'"
|
|
43
|
+
_textColor="'#eee'"
|
|
44
|
+
_textColorHover="'#fff'"
|
|
45
|
+
:iconColor="'#444'"
|
|
46
|
+
:iconColorHover="'#222'"
|
|
47
|
+
:shadow="false"
|
|
48
|
+
@click="addItem"
|
|
49
|
+
></WButtonCircle>
|
|
50
|
+
|
|
51
|
+
<div style="padding-left:6px;"></div>
|
|
52
|
+
|
|
53
|
+
</template>
|
|
54
|
+
|
|
55
|
+
<template v-if="hasItemCheckOne">
|
|
56
|
+
|
|
57
|
+
<WButtonCircle
|
|
58
|
+
:paddingStyle="{v:6,h:6}"
|
|
59
|
+
:tooltip="$t('targetCopy')"
|
|
60
|
+
:icon="mdiContentCopy"
|
|
61
|
+
:backgroundColor="'#fff'"
|
|
62
|
+
:backgroundColorHover="'#f2f2f2'"
|
|
63
|
+
_textColor="'#eee'"
|
|
64
|
+
_textColorHover="'#fff'"
|
|
65
|
+
:iconColor="'#444'"
|
|
66
|
+
:iconColorHover="'#222'"
|
|
67
|
+
:shadow="false"
|
|
68
|
+
@click="copyItem"
|
|
69
|
+
></WButtonCircle>
|
|
70
|
+
|
|
71
|
+
<div style="padding-left:6px;"></div>
|
|
72
|
+
|
|
73
|
+
</template>
|
|
74
|
+
|
|
75
|
+
<template v-if="hasItemsCheck">
|
|
76
|
+
|
|
77
|
+
<WButtonCircle
|
|
78
|
+
:paddingStyle="{v:6,h:6}"
|
|
79
|
+
:tooltip="$t('targetDeleteChecks')"
|
|
80
|
+
:icon="mdiTrashCanOutline"
|
|
81
|
+
:backgroundColor="'#fff'"
|
|
82
|
+
:backgroundColorHover="'#f2f2f2'"
|
|
83
|
+
_textColor="'#eee'"
|
|
84
|
+
_textColorHover="'#fff'"
|
|
85
|
+
:iconColor="'#444'"
|
|
86
|
+
:iconColorHover="'#222'"
|
|
87
|
+
:shadow="false"
|
|
88
|
+
@click="deleteItemsCheck"
|
|
89
|
+
></WButtonCircle>
|
|
90
|
+
|
|
91
|
+
<div style="padding-left:6px;"></div>
|
|
92
|
+
|
|
93
|
+
</template>
|
|
94
|
+
|
|
95
|
+
<template v-if="isModified">
|
|
96
|
+
|
|
97
|
+
<WButtonCircle
|
|
98
|
+
:paddingStyle="{v:6,h:6}"
|
|
99
|
+
:tooltip="$t('saveChanges')"
|
|
100
|
+
:icon="mdiCloudUploadOutline"
|
|
101
|
+
:backgroundColor="'rgba(255,0,50,0.7)'"
|
|
102
|
+
:backgroundColorHover="'rgba(255,0,50,0.8)'"
|
|
103
|
+
:textColor="'#eee'"
|
|
104
|
+
:textColorHover="'#fff'"
|
|
105
|
+
:iconColor="'#eee'"
|
|
106
|
+
:iconColorHover="'#fff'"
|
|
107
|
+
:shadow="false"
|
|
108
|
+
@click="saveTargets"
|
|
109
|
+
></WButtonCircle>
|
|
110
|
+
|
|
111
|
+
<div style="padding-left:6px;"></div>
|
|
112
|
+
|
|
113
|
+
</template>
|
|
80
114
|
|
|
81
115
|
</div>
|
|
82
116
|
|
|
83
117
|
</div>
|
|
84
118
|
|
|
85
|
-
<
|
|
86
|
-
:style="`padding:${spacePading}px;`"
|
|
119
|
+
<template
|
|
87
120
|
v-if="!firstLoading"
|
|
88
121
|
>
|
|
89
122
|
|
|
90
|
-
<
|
|
91
|
-
<
|
|
92
|
-
ref="
|
|
93
|
-
:
|
|
94
|
-
:
|
|
95
|
-
:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
:iconToggleBackgroundColorHover="'transparent'"
|
|
100
|
-
:operatable="isOperatable"
|
|
101
|
-
:operateBtnTooltip="$t('edit')"
|
|
102
|
-
:operateItemTextForRename="$t('changeName')"
|
|
103
|
-
:operateItemTextForInsertBefore="$t('insertBefore')"
|
|
104
|
-
:operateItemTextForInsertChild="$t('insertChild')"
|
|
105
|
-
:operateItemTextForInsertAfter="$t('insertAfter')"
|
|
106
|
-
:operateItemTextForDelete="$t('deleteTarget')"
|
|
107
|
-
:editorRenameSaveBtnText="$t('save')"
|
|
108
|
-
:editorRenameSaveBtnTextColor="'#444'"
|
|
109
|
-
:editorRenameSaveBtnTextColorHover="'#222'"
|
|
110
|
-
:editorRenameCancelBtnText="$t('cancel')"
|
|
111
|
-
:editorRenameCancelBtnTextColor="'#444'"
|
|
112
|
-
:editorRenameCancelBtnTextColorHover="'#222'"
|
|
113
|
-
@click-operate-item="clickOperateItem"
|
|
114
|
-
></WTree>
|
|
115
|
-
</div>
|
|
123
|
+
<template v-if="items">
|
|
124
|
+
<WAggridVueDyn
|
|
125
|
+
ref="rftable"
|
|
126
|
+
:style="`width:100%;`"
|
|
127
|
+
:height="contentHeight"
|
|
128
|
+
:opt="opt"
|
|
129
|
+
>
|
|
130
|
+
</WAggridVueDyn>
|
|
131
|
+
</template>
|
|
116
132
|
|
|
117
|
-
</
|
|
133
|
+
</template>
|
|
118
134
|
|
|
119
135
|
<div style="padding:10px 15px; font-size:0.8rem;" v-else>
|
|
120
136
|
{{$t('waitingData')}}
|
|
@@ -124,38 +140,33 @@
|
|
|
124
140
|
</template>
|
|
125
141
|
|
|
126
142
|
<script>
|
|
127
|
-
import { mdiGamepadCircle, mdiStackOverflow, mdiAccountGroupOutline, mdiBallotRecountOutline, mdiCloudUploadOutline } from '@mdi/js/mdi.js'
|
|
128
|
-
import
|
|
129
|
-
import
|
|
130
|
-
import
|
|
131
|
-
import
|
|
132
|
-
import
|
|
133
|
-
import
|
|
134
|
-
import dropRight from 'lodash-es/dropRight.js'
|
|
135
|
-
import cloneDeep from 'lodash-es/cloneDeep.js'
|
|
143
|
+
import { mdiGamepadCircle, mdiStackOverflow, mdiAccountGroupOutline, mdiBallotRecountOutline, mdiCloudUploadOutline, mdiTrashCanOutline, mdiPlus, mdiPencilOutline, mdiContentCopy } from '@mdi/js/mdi.js'
|
|
144
|
+
import get from 'lodash-es/get.js'
|
|
145
|
+
import each from 'lodash-es/each.js'
|
|
146
|
+
import size from 'lodash-es/size.js'
|
|
147
|
+
import filter from 'lodash-es/filter.js'
|
|
148
|
+
import sortBy from 'lodash-es/sortBy.js'
|
|
149
|
+
import cloneDeep from 'lodash-es/cloneDeep.js'
|
|
136
150
|
import haskey from 'wsemi/src/haskey.mjs'
|
|
137
|
-
import
|
|
138
|
-
import
|
|
139
|
-
import
|
|
151
|
+
import isestr from 'wsemi/src/isestr.mjs'
|
|
152
|
+
import iseobj from 'wsemi/src/iseobj.mjs'
|
|
153
|
+
import cstr from 'wsemi/src/cstr.mjs'
|
|
140
154
|
import WIcon from 'w-component-vue/src/components/WIcon.vue'
|
|
141
|
-
import
|
|
142
|
-
import
|
|
143
|
-
import WTree from 'w-component-vue/src/components/WTree.vue'
|
|
144
|
-
import { getTreeBlocks } from '../plugins/mShare.mjs'
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
//dlm
|
|
148
|
-
let dlm = '.'
|
|
155
|
+
import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
|
|
156
|
+
import WAggridVueDyn from 'w-component-vue/src/components/WAggridVueDyn.vue'
|
|
149
157
|
|
|
150
158
|
|
|
151
159
|
export default {
|
|
152
160
|
components: {
|
|
153
161
|
WIcon,
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
WTree,
|
|
162
|
+
WButtonCircle,
|
|
163
|
+
WAggridVueDyn,
|
|
157
164
|
},
|
|
158
165
|
props: {
|
|
166
|
+
drawer: {
|
|
167
|
+
type: Boolean,
|
|
168
|
+
default: false,
|
|
169
|
+
},
|
|
159
170
|
},
|
|
160
171
|
data: function() {
|
|
161
172
|
return {
|
|
@@ -164,37 +175,54 @@ export default {
|
|
|
164
175
|
mdiAccountGroupOutline,
|
|
165
176
|
mdiBallotRecountOutline,
|
|
166
177
|
mdiCloudUploadOutline,
|
|
178
|
+
mdiTrashCanOutline,
|
|
179
|
+
mdiPlus,
|
|
180
|
+
mdiPencilOutline,
|
|
181
|
+
mdiContentCopy,
|
|
167
182
|
|
|
168
183
|
panelWidth: 100,
|
|
169
184
|
panelHeight: 100,
|
|
170
185
|
headHeight: 100,
|
|
171
186
|
|
|
172
187
|
firstLoading: true,
|
|
173
|
-
isOperatable: true,
|
|
174
188
|
isModified: false,
|
|
175
189
|
|
|
176
|
-
|
|
177
|
-
|
|
190
|
+
items: [],
|
|
191
|
+
itemsCheck: [],
|
|
192
|
+
opt: null,
|
|
178
193
|
|
|
179
194
|
}
|
|
180
195
|
},
|
|
181
196
|
mounted: function() {
|
|
182
197
|
// console.log('mounted')
|
|
183
198
|
|
|
184
|
-
let vo = this
|
|
185
|
-
|
|
186
|
-
//clear
|
|
187
|
-
vo.listRename = []
|
|
199
|
+
// let vo = this
|
|
188
200
|
|
|
189
201
|
},
|
|
190
202
|
computed: {
|
|
191
203
|
|
|
192
204
|
targets: function() {
|
|
193
|
-
|
|
205
|
+
let rs = get(this, `$store.state.targets`)
|
|
206
|
+
rs = sortBy(rs, 'order')
|
|
207
|
+
return rs
|
|
208
|
+
},
|
|
209
|
+
|
|
210
|
+
pemis: function() {
|
|
211
|
+
let rs = get(this, `$store.state.pemis`)
|
|
212
|
+
rs = sortBy(rs, 'order')
|
|
213
|
+
return rs
|
|
214
|
+
},
|
|
215
|
+
|
|
216
|
+
grups: function() {
|
|
217
|
+
let rs = get(this, `$store.state.grups`)
|
|
218
|
+
rs = sortBy(rs, 'order')
|
|
219
|
+
return rs
|
|
194
220
|
},
|
|
195
221
|
|
|
196
|
-
|
|
197
|
-
|
|
222
|
+
users: function() {
|
|
223
|
+
let rs = get(this, `$store.state.users`)
|
|
224
|
+
rs = sortBy(rs, 'order')
|
|
225
|
+
return rs
|
|
198
226
|
},
|
|
199
227
|
|
|
200
228
|
changeTargets: function() {
|
|
@@ -207,13 +235,14 @@ export default {
|
|
|
207
235
|
return ''
|
|
208
236
|
}
|
|
209
237
|
|
|
210
|
-
//
|
|
211
|
-
let
|
|
212
|
-
// console.log('targets', vo.targets)
|
|
213
|
-
// console.log('treeBlocks', treeBlocks)
|
|
238
|
+
//cloneDeep
|
|
239
|
+
let items = cloneDeep(vo.targets)
|
|
214
240
|
|
|
215
241
|
//save
|
|
216
|
-
vo.
|
|
242
|
+
vo.items = items
|
|
243
|
+
|
|
244
|
+
//genOpt
|
|
245
|
+
vo.genOpt()
|
|
217
246
|
|
|
218
247
|
//firstLoading
|
|
219
248
|
vo.firstLoading = false
|
|
@@ -221,25 +250,85 @@ export default {
|
|
|
221
250
|
return ''
|
|
222
251
|
},
|
|
223
252
|
|
|
224
|
-
|
|
253
|
+
contentHeight: function() {
|
|
225
254
|
let vo = this
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
return 20
|
|
255
|
+
|
|
256
|
+
//h
|
|
257
|
+
let h = vo.panelHeight - vo.headHeight
|
|
258
|
+
h = Math.max(h, 0)
|
|
259
|
+
|
|
260
|
+
return h
|
|
233
261
|
},
|
|
234
262
|
|
|
235
|
-
|
|
263
|
+
hasItemsCheck: function() {
|
|
236
264
|
let vo = this
|
|
237
265
|
|
|
238
266
|
//h
|
|
239
|
-
let
|
|
240
|
-
h = Math.max(h, 0)
|
|
267
|
+
let b = vo.itemsCheck.length > 0
|
|
241
268
|
|
|
242
|
-
return
|
|
269
|
+
return b
|
|
270
|
+
},
|
|
271
|
+
|
|
272
|
+
hasItemCheckOne: function() {
|
|
273
|
+
let vo = this
|
|
274
|
+
|
|
275
|
+
//h
|
|
276
|
+
let b = size(vo.itemsCheck) === 1
|
|
277
|
+
|
|
278
|
+
return b
|
|
279
|
+
},
|
|
280
|
+
|
|
281
|
+
errItemsById: function() {
|
|
282
|
+
let vo = this
|
|
283
|
+
|
|
284
|
+
//rows
|
|
285
|
+
let rows = get(vo, 'opt.rows', [])
|
|
286
|
+
|
|
287
|
+
//kpErr
|
|
288
|
+
let kpErr = {}
|
|
289
|
+
let kpId = {}
|
|
290
|
+
each(rows, (v, k) => {
|
|
291
|
+
|
|
292
|
+
//id
|
|
293
|
+
let id = get(v, 'id', '')
|
|
294
|
+
|
|
295
|
+
//check
|
|
296
|
+
if (!isestr(id)) {
|
|
297
|
+
|
|
298
|
+
//kpErr
|
|
299
|
+
kpErr[id] = vo.$t(`targetIdEmpty`)
|
|
300
|
+
|
|
301
|
+
return true //跳出換下一個
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
//check
|
|
305
|
+
if (haskey(kpId, id)) {
|
|
306
|
+
|
|
307
|
+
//kpErr
|
|
308
|
+
kpErr[id] = vo.$t(`targetIdDuplicate`)
|
|
309
|
+
|
|
310
|
+
return true //跳出換下一個
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
//kpId
|
|
314
|
+
kpId[id] = true
|
|
315
|
+
|
|
316
|
+
})
|
|
317
|
+
|
|
318
|
+
return kpErr
|
|
319
|
+
},
|
|
320
|
+
|
|
321
|
+
isError: function() {
|
|
322
|
+
let vo = this
|
|
323
|
+
|
|
324
|
+
let c = ''
|
|
325
|
+
let b = false
|
|
326
|
+
b = iseobj(vo.errItemsByName)
|
|
327
|
+
if (b) {
|
|
328
|
+
c = vo.$t('errInNames')
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
return c
|
|
243
332
|
},
|
|
244
333
|
|
|
245
334
|
},
|
|
@@ -266,250 +355,335 @@ export default {
|
|
|
266
355
|
|
|
267
356
|
},
|
|
268
357
|
|
|
269
|
-
|
|
270
|
-
// console.log('methods
|
|
358
|
+
genOpt: function() {
|
|
359
|
+
// console.log('methods genOpt')
|
|
271
360
|
|
|
272
361
|
let vo = this
|
|
273
362
|
|
|
274
|
-
|
|
275
|
-
|
|
363
|
+
//default
|
|
364
|
+
vo.itemsCheck = []
|
|
365
|
+
|
|
366
|
+
//opt
|
|
367
|
+
let opt = null
|
|
368
|
+
if (size(vo.items) > 0) {
|
|
369
|
+
|
|
370
|
+
//ks
|
|
371
|
+
let ks = [
|
|
372
|
+
'id',
|
|
373
|
+
'description',
|
|
374
|
+
'from',
|
|
375
|
+
'userId',
|
|
376
|
+
'timeCreate',
|
|
377
|
+
'userIdUpdate',
|
|
378
|
+
'timeUpdate',
|
|
379
|
+
]
|
|
380
|
+
// console.log('ks', ks)
|
|
381
|
+
|
|
382
|
+
//kpHead
|
|
383
|
+
let kpHead = {
|
|
384
|
+
'id': vo.$t('targetId'),
|
|
385
|
+
'description': vo.$t('description'),
|
|
386
|
+
'from': vo.$t('from'),
|
|
387
|
+
'userId': vo.$t('userId'),
|
|
388
|
+
'timeCreate': vo.$t('timeCreate'),
|
|
389
|
+
'userIdUpdate': vo.$t('userIdUpdate'),
|
|
390
|
+
'timeUpdate': vo.$t('timeUpdate'),
|
|
391
|
+
}
|
|
276
392
|
|
|
277
|
-
//
|
|
278
|
-
|
|
393
|
+
//opt
|
|
394
|
+
opt = {
|
|
395
|
+
language: vo.$t('aggridLanguage'),
|
|
396
|
+
rows: vo.items,
|
|
397
|
+
keys: ks,
|
|
398
|
+
kpHead,
|
|
399
|
+
// autoFitColumn: true,
|
|
400
|
+
defHeadFilter: true,
|
|
401
|
+
defCellAlignH: 'left',
|
|
402
|
+
// kpHeadHide: {
|
|
403
|
+
// 'id': true,
|
|
404
|
+
// },
|
|
405
|
+
kpHeadFixLeft: {
|
|
406
|
+
'id': true,
|
|
407
|
+
},
|
|
408
|
+
defHeadMinWidth: 150,
|
|
409
|
+
kpHeadWidth: {
|
|
410
|
+
'id': 300,
|
|
411
|
+
'timeCreate': 220,
|
|
412
|
+
'timeUpdate': 220,
|
|
413
|
+
},
|
|
414
|
+
kpHeadFilterType: {
|
|
415
|
+
'id': 'text',
|
|
416
|
+
'description': 'text',
|
|
417
|
+
'from': 'text',
|
|
418
|
+
'userId': 'text',
|
|
419
|
+
'timeCreate': 'text',
|
|
420
|
+
'userIdUpdate': 'text',
|
|
421
|
+
'timeUpdate': 'text',
|
|
422
|
+
},
|
|
423
|
+
kpCellEditable: {
|
|
424
|
+
'id': true,
|
|
425
|
+
'description': true,
|
|
426
|
+
'from': true,
|
|
427
|
+
},
|
|
428
|
+
kpRowDrag: {
|
|
429
|
+
'id': true,
|
|
430
|
+
},
|
|
431
|
+
kpHeadCheckBox: {
|
|
432
|
+
'id': true,
|
|
433
|
+
},
|
|
434
|
+
kpCellRender: {
|
|
435
|
+
'id': (v) => {
|
|
436
|
+
// console.log('kpCellRender', v)
|
|
437
|
+
|
|
438
|
+
//err
|
|
439
|
+
let err = get(vo.errItemsById, v, '')
|
|
440
|
+
// console.log(v, err)
|
|
441
|
+
|
|
442
|
+
//check
|
|
443
|
+
if (isestr(err)) {
|
|
444
|
+
v = `
|
|
445
|
+
<span title="${err}">
|
|
446
|
+
<span style="color:#F57C00;">${cstr(v)}</span>
|
|
447
|
+
<img style="vertical-align:sub; width:16px; height:16px;" src="${vo.$ui.getIcon('warning')}" />
|
|
448
|
+
</span>
|
|
449
|
+
`
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
return v
|
|
453
|
+
},
|
|
454
|
+
},
|
|
455
|
+
// kpCellTooltip: {
|
|
456
|
+
// 'id': (v) => {
|
|
457
|
+
// // console.log('kpCellTooltip', v)
|
|
458
|
+
|
|
459
|
+
// //err
|
|
460
|
+
// let err = get(vo.errItemsById, v, '')
|
|
461
|
+
// // console.log(v, err)
|
|
462
|
+
|
|
463
|
+
// //check
|
|
464
|
+
// let t = ''
|
|
465
|
+
// if (isestr(err)) {
|
|
466
|
+
// t = err
|
|
467
|
+
// }
|
|
468
|
+
|
|
469
|
+
// return t
|
|
470
|
+
// },
|
|
471
|
+
// },
|
|
472
|
+
rowsChange: (rs) => {
|
|
473
|
+
// console.log('rowsChange', rs)
|
|
474
|
+
// console.log('rowsChange cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
|
|
475
|
+
|
|
476
|
+
//isModified
|
|
477
|
+
vo.isModified = true
|
|
478
|
+
|
|
479
|
+
},
|
|
480
|
+
rowChecked: (rs) => {
|
|
481
|
+
// console.log('rowChecked', rs)
|
|
482
|
+
// console.log('rowChecked cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
|
|
483
|
+
|
|
484
|
+
//save itemsCheck
|
|
485
|
+
vo.itemsCheck = cloneDeep(rs)
|
|
486
|
+
|
|
487
|
+
},
|
|
488
|
+
}
|
|
489
|
+
// console.log('opt', opt)
|
|
279
490
|
|
|
280
|
-
|
|
281
|
-
if (isOperatable) {
|
|
282
|
-
//切換至編輯模式時
|
|
283
|
-
try {
|
|
491
|
+
}
|
|
284
492
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
let toLevel = null
|
|
288
|
-
vo.$refs.wt.toggleItemsAll(toUnfolding, toLevel)
|
|
493
|
+
//save
|
|
494
|
+
vo.opt = opt
|
|
289
495
|
|
|
290
|
-
|
|
291
|
-
await delay(300)
|
|
496
|
+
},
|
|
292
497
|
|
|
293
|
-
|
|
294
|
-
|
|
498
|
+
refresh: function() {
|
|
499
|
+
let vo = this
|
|
295
500
|
|
|
501
|
+
//cmp
|
|
502
|
+
let cmp = get(vo, '$refs.rftable.$refs.$self')
|
|
503
|
+
// console.log('cmp', cmp)
|
|
296
504
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}
|
|
300
|
-
else {
|
|
301
|
-
//切換至顯示模式時
|
|
505
|
+
//refresh, 因set不會觸發kpCellRender, 故須另外調用組件函數refresh, 進而觸發kpCellRender, 使能更新數據
|
|
506
|
+
cmp.refresh()
|
|
302
507
|
|
|
303
|
-
|
|
304
|
-
vo.isOperatable = isOperatable
|
|
508
|
+
},
|
|
305
509
|
|
|
306
|
-
|
|
510
|
+
addItem: function() {
|
|
511
|
+
// console.log('method addItem')
|
|
307
512
|
|
|
308
|
-
|
|
513
|
+
let vo = this
|
|
309
514
|
|
|
310
|
-
//
|
|
311
|
-
|
|
312
|
-
// .then((res) => {
|
|
313
|
-
// console.log('then', res)
|
|
314
|
-
// })
|
|
315
|
-
.catch((err) => {
|
|
316
|
-
console.log('catch', err)
|
|
317
|
-
vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' })
|
|
318
|
-
})
|
|
319
|
-
.finally(() => {
|
|
515
|
+
//cloneDeep
|
|
516
|
+
let rows = get(vo, 'opt.rows', [])
|
|
320
517
|
|
|
321
|
-
|
|
322
|
-
|
|
518
|
+
//cloneDeep
|
|
519
|
+
rows = cloneDeep(rows)
|
|
323
520
|
|
|
324
|
-
|
|
521
|
+
//r
|
|
522
|
+
let r = vo.$ds.targets.funNew()
|
|
523
|
+
r.id = vo.$s.getNameNew(rows, 'id', '', vo.$t('targetAddNameNew'))
|
|
524
|
+
r.userId = `{${vo.$t('targetAddIdNew')}}`
|
|
525
|
+
r.timeCreate = `{${vo.$t('targetAddIdNew')}}`
|
|
526
|
+
r.userIdUpdate = `{${vo.$t('targetAddIdNew')}}`
|
|
527
|
+
r.timeUpdate = `{${vo.$t('targetAddIdNew')}}`
|
|
528
|
+
// console.log('r', r)
|
|
529
|
+
|
|
530
|
+
//添加至最首
|
|
531
|
+
rows = [
|
|
532
|
+
r,
|
|
533
|
+
...rows,
|
|
534
|
+
]
|
|
535
|
+
|
|
536
|
+
//save
|
|
537
|
+
vo.opt.rows = rows
|
|
538
|
+
// console.log('cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
|
|
539
|
+
|
|
540
|
+
//isModified
|
|
541
|
+
vo.isModified = true
|
|
325
542
|
|
|
326
543
|
},
|
|
327
544
|
|
|
328
|
-
|
|
329
|
-
// console.log('
|
|
545
|
+
copyItem: function() {
|
|
546
|
+
// console.log('method copyItem')
|
|
330
547
|
|
|
331
548
|
let vo = this
|
|
332
549
|
|
|
333
|
-
|
|
550
|
+
//check
|
|
551
|
+
if (size(vo.itemsCheck) !== 1) {
|
|
552
|
+
console.log(`size(vo.itemsCheck) !== 1`, vo.itemsCheck)
|
|
553
|
+
vo.$alert(`${vo.$t('anUnexpectedErrorOccurred')}`, { type: 'error' })
|
|
554
|
+
return
|
|
555
|
+
}
|
|
334
556
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
557
|
+
//cloneDeep
|
|
558
|
+
let rows = get(vo, 'opt.rows', [])
|
|
559
|
+
|
|
560
|
+
//cloneDeep
|
|
561
|
+
rows = cloneDeep(rows)
|
|
562
|
+
|
|
563
|
+
//find
|
|
564
|
+
let tar = vo.itemsCheck[0]
|
|
565
|
+
let tarId = get(tar, 'data.id', '')
|
|
566
|
+
let row = null
|
|
567
|
+
each(rows, (v) => {
|
|
568
|
+
let id = get(v, 'id', '')
|
|
569
|
+
if (id === tarId) {
|
|
570
|
+
row = v
|
|
571
|
+
return false //跳出
|
|
344
572
|
}
|
|
573
|
+
})
|
|
574
|
+
// console.log('tar', tar)
|
|
575
|
+
// console.log('row', row)
|
|
345
576
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
577
|
+
//check
|
|
578
|
+
if (!iseobj(row)) {
|
|
579
|
+
console.log(`!iseobj(row)`, row)
|
|
580
|
+
vo.$alert(`${vo.$t('anUnexpectedErrorOccurred')}`, { type: 'error' })
|
|
581
|
+
return
|
|
582
|
+
}
|
|
351
583
|
|
|
352
|
-
|
|
353
|
-
|
|
584
|
+
//r
|
|
585
|
+
let r = cloneDeep(row)
|
|
586
|
+
let nameOld = r.id
|
|
587
|
+
let _r = vo.$ds.targets.funNew()
|
|
588
|
+
r.id = _r.id //使用新建方式預先產生id避免重複
|
|
589
|
+
r.id = vo.$s.getNameNew(rows, 'id', nameOld, vo.$t('targetCopyNameNew'))
|
|
590
|
+
r.userId = `{${vo.$t('targetAddIdNew')}}`
|
|
591
|
+
r.timeCreate = `{${vo.$t('targetAddIdNew')}}`
|
|
592
|
+
r.userIdUpdate = `{${vo.$t('targetAddIdNew')}}`
|
|
593
|
+
r.timeUpdate = `{${vo.$t('targetAddIdNew')}}`
|
|
594
|
+
// console.log('r', r)
|
|
595
|
+
|
|
596
|
+
//添加至最首
|
|
597
|
+
rows = [
|
|
598
|
+
r,
|
|
599
|
+
...rows,
|
|
600
|
+
]
|
|
354
601
|
|
|
355
|
-
|
|
602
|
+
//save
|
|
603
|
+
vo.opt.rows = rows
|
|
604
|
+
// console.log('cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
|
|
356
605
|
|
|
357
|
-
//
|
|
358
|
-
|
|
359
|
-
// .then((res) => {
|
|
360
|
-
// console.log('then', res)
|
|
361
|
-
// })
|
|
362
|
-
.catch((err) => {
|
|
363
|
-
console.log('catch', err)
|
|
364
|
-
vo.$alert(vo.$t('anUnexpectedErrorOccurred'), { type: 'error' })
|
|
365
|
-
})
|
|
606
|
+
//isModified
|
|
607
|
+
vo.isModified = true
|
|
366
608
|
|
|
367
609
|
},
|
|
368
610
|
|
|
369
|
-
|
|
370
|
-
// console.log('
|
|
611
|
+
deleteItemsCheck: function() {
|
|
612
|
+
// console.log('method deleteItemsCheck')
|
|
371
613
|
|
|
372
614
|
let vo = this
|
|
373
615
|
|
|
374
|
-
//
|
|
375
|
-
|
|
616
|
+
//check
|
|
617
|
+
if (size(vo.itemsCheck) === 0) {
|
|
618
|
+
return
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
//cloneDeep
|
|
622
|
+
let rows = get(vo, 'opt.rows', [])
|
|
376
623
|
|
|
377
|
-
//
|
|
378
|
-
|
|
379
|
-
// console.log('blocksNew', cloneDeep(blocksNew))
|
|
624
|
+
//cloneDeep
|
|
625
|
+
rows = cloneDeep(rows)
|
|
380
626
|
|
|
381
|
-
//
|
|
382
|
-
each(
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
let nkParent = dropRight(v.nk, 2)
|
|
389
|
-
let p = get(treeBlocksTemp, nkParent)
|
|
390
|
-
v.parentId = p.id
|
|
391
|
-
v.id = `${v.parentId}${dlm}${v.text}` //[tag:dlm]
|
|
627
|
+
//filter
|
|
628
|
+
each(vo.itemsCheck, (v) => {
|
|
629
|
+
// console.log('v', v)
|
|
630
|
+
let id = get(v, 'data.id', '')
|
|
631
|
+
if (!isestr(id)) {
|
|
632
|
+
console.log(`invalid id`)
|
|
633
|
+
return true //跳出換下一個
|
|
392
634
|
}
|
|
393
|
-
|
|
394
|
-
|
|
635
|
+
rows = filter(rows, (vv) => {
|
|
636
|
+
return vv.id !== id
|
|
637
|
+
})
|
|
395
638
|
})
|
|
396
639
|
|
|
640
|
+
//clear
|
|
641
|
+
vo.itemsCheck = []
|
|
642
|
+
|
|
397
643
|
//save
|
|
398
|
-
vo.
|
|
399
|
-
// console.log('
|
|
644
|
+
vo.opt.rows = rows
|
|
645
|
+
// console.log('deleteItemsCheck cloneDeep(vo.opt.rows)', cloneDeep(vo.opt.rows))
|
|
400
646
|
|
|
401
647
|
//isModified
|
|
402
648
|
vo.isModified = true
|
|
403
649
|
|
|
404
650
|
},
|
|
405
651
|
|
|
406
|
-
|
|
407
|
-
// console.log('method
|
|
652
|
+
saveTargets: function() {
|
|
653
|
+
// console.log('method saveTargets')
|
|
408
654
|
|
|
409
655
|
let vo = this
|
|
410
656
|
|
|
411
|
-
//replaceObjKeys
|
|
412
|
-
let replaceObjKeys = (obj, kpKeys) => {
|
|
413
|
-
// console.log('methods replaceObjKeys', obj, kpKeys)
|
|
414
|
-
|
|
415
|
-
//r
|
|
416
|
-
let b = false
|
|
417
|
-
let r = {}
|
|
418
|
-
each(obj, (v, k) => {
|
|
419
|
-
if (haskey(kpKeys, k)) {
|
|
420
|
-
b = true
|
|
421
|
-
let kk = kpKeys[k]
|
|
422
|
-
r[kk] = v
|
|
423
|
-
}
|
|
424
|
-
else {
|
|
425
|
-
r[k] = v
|
|
426
|
-
}
|
|
427
|
-
})
|
|
428
|
-
|
|
429
|
-
return {
|
|
430
|
-
obj: r,
|
|
431
|
-
isChanged: b,
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
|
|
435
657
|
async function core() {
|
|
436
658
|
let errTemp = null
|
|
437
659
|
|
|
438
660
|
//show loading
|
|
439
661
|
vo.$ui.updateLoading(true)
|
|
440
662
|
|
|
441
|
-
//treeBlocksTemp
|
|
442
|
-
let treeBlocksTemp = cloneDeep(vo.treeBlocks)
|
|
443
|
-
|
|
444
|
-
//flattenTree
|
|
445
|
-
let blocksNew = flattenTree(treeBlocksTemp)
|
|
446
|
-
// console.log('blocksNew1', cloneDeep(blocksNew))
|
|
447
|
-
|
|
448
|
-
//kpDiffs
|
|
449
|
-
let kpDiffs = {}
|
|
450
|
-
map(blocksNew, (v, k) => {
|
|
451
|
-
if (v.id !== v.idTemp) {
|
|
452
|
-
kpDiffs[v.idTemp] = v.id
|
|
453
|
-
}
|
|
454
|
-
})
|
|
455
|
-
// console.log('kpDiffs', kpDiffs)
|
|
456
|
-
|
|
457
|
-
//gs
|
|
458
|
-
let gs = []
|
|
459
|
-
each(vo.ruleGroups, (v) => {
|
|
460
|
-
let rules = JSON5.parse(v.crules)
|
|
461
|
-
let r = replaceObjKeys(rules, kpDiffs)
|
|
462
|
-
if (r.isChanged) {
|
|
463
|
-
gs.push({
|
|
464
|
-
id: v.id,
|
|
465
|
-
crules: JSON.stringify(r.obj),
|
|
466
|
-
})
|
|
467
|
-
}
|
|
468
|
-
})
|
|
469
|
-
// console.log('ruleGroups', vo.ruleGroups, gs)
|
|
470
|
-
|
|
471
|
-
//save
|
|
472
|
-
await vo.$fapi.ruleGroups.save(gs)
|
|
473
|
-
.catch((err) => {
|
|
474
|
-
errTemp = err
|
|
475
|
-
})
|
|
476
|
-
|
|
477
663
|
//check
|
|
478
|
-
if (
|
|
479
|
-
vo.$alert(`${vo
|
|
664
|
+
if (isestr(vo.isError)) {
|
|
665
|
+
vo.$alert(`${vo.isError}`, { type: 'error' })
|
|
480
666
|
return
|
|
481
667
|
}
|
|
482
668
|
|
|
483
|
-
//
|
|
484
|
-
let
|
|
485
|
-
return {
|
|
486
|
-
id: v.id,
|
|
487
|
-
order: v.order,
|
|
488
|
-
}
|
|
489
|
-
})
|
|
490
|
-
// console.log('targets rs', rs)
|
|
491
|
-
|
|
492
|
-
//delAll
|
|
493
|
-
await vo.$fapi.targets.delAll()
|
|
494
|
-
.catch((err) => {
|
|
495
|
-
errTemp = err
|
|
496
|
-
})
|
|
669
|
+
//rows
|
|
670
|
+
let rows = get(vo, 'opt.rows', [])
|
|
497
671
|
|
|
498
672
|
//check
|
|
499
|
-
if (
|
|
500
|
-
vo.$alert(`${vo.$t('
|
|
673
|
+
if (size(rows) === 0) {
|
|
674
|
+
vo.$alert(`${vo.$t('targetAddEmpty')}`, { type: 'error' })
|
|
501
675
|
return
|
|
502
676
|
}
|
|
503
677
|
|
|
504
|
-
//
|
|
505
|
-
await vo.$fapi.
|
|
678
|
+
//updateTargets
|
|
679
|
+
await vo.$fapi.updateTargets(rows)
|
|
506
680
|
.catch((err) => {
|
|
507
681
|
errTemp = err
|
|
508
682
|
})
|
|
509
683
|
|
|
510
684
|
//check
|
|
511
685
|
if (errTemp !== null) {
|
|
512
|
-
vo.$alert(`${vo.$t('
|
|
686
|
+
vo.$alert(`${vo.$t('targetSaveTargetsFail')}: ${errTemp}`, { type: 'error' })
|
|
513
687
|
return
|
|
514
688
|
}
|
|
515
689
|
|
|
@@ -517,7 +691,7 @@ export default {
|
|
|
517
691
|
vo.isModified = false
|
|
518
692
|
|
|
519
693
|
//alert
|
|
520
|
-
vo.$alert(vo.$t('
|
|
694
|
+
vo.$alert(vo.$t('targetSaveTargetsSuccess'))
|
|
521
695
|
|
|
522
696
|
}
|
|
523
697
|
|