n20-common-lib 2.2.7 → 2.2.8
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/package.json +1 -1
- package/src/assets/css/umy-table/ux-grid.scss +14 -2
- package/src/components/LoginTemporary/form.vue +9 -4
- package/src/components/Table/filters.js +6 -2
- package/src/components/Table/index.vue +76 -16
- package/src/components/TableOperateColumn/index.vue +6 -2
- package/src/components/UTable/ElxTableFilter.vue +101 -23
- package/src/components/UTable/index.js +2 -1
- package/src/utils/asyncGetRelaNos.js +21 -18
- package/src/utils/relaNo.js +45 -22
- package/src/utils/storageEdit.js +15 -0
- package/src/utils/tableheaderFilterpanel.vue +7 -7
- package/style/index.css +1 -1
- package/style/index.css.map +1 -1
- package/theme/blue.css +1 -1
- package/theme/cctcRed.css +1 -1
- package/theme/green.css +1 -1
- package/theme/lightBlue.css +1 -1
- package/theme/orange.css +1 -1
- package/theme/purple.css +1 -1
- package/theme/red.css +1 -1
- package/theme/yellow.css +1 -1
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.elx-table {
|
|
1
|
+
.plTableBox .elx-table {
|
|
2
2
|
.elx-body--column,
|
|
3
3
|
.elx-footer--column,
|
|
4
4
|
.elx-header--column {
|
|
@@ -41,6 +41,12 @@
|
|
|
41
41
|
top: 3px;
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
|
+
.elx-checkbox--indeterminate-icon:after {
|
|
45
|
+
position: absolute;
|
|
46
|
+
top: 50%;
|
|
47
|
+
left: 50%;
|
|
48
|
+
width: 7px;
|
|
49
|
+
}
|
|
44
50
|
}
|
|
45
51
|
|
|
46
52
|
.elx-cell--sort {
|
|
@@ -89,7 +95,13 @@
|
|
|
89
95
|
padding-left: 0;
|
|
90
96
|
}
|
|
91
97
|
.elx-table--filter-wrapper {
|
|
92
|
-
margin-top:
|
|
98
|
+
margin-top: 6px;
|
|
99
|
+
min-width: auto;
|
|
100
|
+
border: 1px solid #ebeef5;
|
|
101
|
+
border-radius: 2px;
|
|
102
|
+
background-color: #fff;
|
|
103
|
+
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15);
|
|
104
|
+
box-sizing: border-box;
|
|
93
105
|
}
|
|
94
106
|
.filter--active {
|
|
95
107
|
.elx-cell--title {
|
|
@@ -146,6 +146,7 @@ import qrCode from './qrcode.vue'
|
|
|
146
146
|
import { siteTree2menus, siteTree2RelaNos } from './utils'
|
|
147
147
|
import CaMap from '../../plugins/Sign/CaMap.js'
|
|
148
148
|
import importG from '../../utils/importGlobal.js'
|
|
149
|
+
import { setItem } from '../../utils/storageEdit'
|
|
149
150
|
|
|
150
151
|
function encode(pwd = '', key = 0) {
|
|
151
152
|
if (pwd === '') return ''
|
|
@@ -596,15 +597,18 @@ export default {
|
|
|
596
597
|
sessionStorage.setItem('menuTree', JSON.stringify(layoutMenus))
|
|
597
598
|
|
|
598
599
|
let relaNos = siteTree2RelaNos(data)
|
|
599
|
-
sessionStorage.setItem('relaNos', JSON.stringify(relaNos))
|
|
600
|
+
// sessionStorage.setItem('relaNos', JSON.stringify(relaNos))
|
|
601
|
+
setItem('relaNos', relaNos)
|
|
600
602
|
|
|
601
603
|
// XXX: 兼容旧版resources
|
|
602
|
-
sessionStorage.setItem('resources', JSON.stringify(data))
|
|
604
|
+
// sessionStorage.setItem('resources', JSON.stringify(data))
|
|
605
|
+
setItem('resources', data)
|
|
603
606
|
},
|
|
604
607
|
// 新增不同单位对应不同角色,具有不同权限
|
|
605
608
|
getCltRelaNos() {
|
|
606
609
|
if (this.asyncRelaNos) {
|
|
607
|
-
sessionStorage.setItem('cltrelaNos', '{}')
|
|
610
|
+
// sessionStorage.setItem('cltrelaNos', '{}')
|
|
611
|
+
setItem('cltrelaNos', {})
|
|
608
612
|
return Promise.resolve()
|
|
609
613
|
}
|
|
610
614
|
|
|
@@ -621,7 +625,8 @@ export default {
|
|
|
621
625
|
cltrelaMap.forEach((item) => {
|
|
622
626
|
cltrelaNos[item.cltNo] = item.relaNos
|
|
623
627
|
})
|
|
624
|
-
sessionStorage.setItem('cltrelaNos', JSON.stringify(cltrelaNos))
|
|
628
|
+
// sessionStorage.setItem('cltrelaNos', JSON.stringify(cltrelaNos))
|
|
629
|
+
setItem('cltrelaNos', cltrelaNos)
|
|
625
630
|
})
|
|
626
631
|
.finally(resolve)
|
|
627
632
|
})
|
|
@@ -75,7 +75,7 @@ export function colf_BD_F(colf, map) {
|
|
|
75
75
|
return ({ row }) => tplFn(row, sc, mck, map)
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
export function colft_BD_F(colft, fMap) {
|
|
78
|
+
export function colft_BD_F(colft, fMap, key) {
|
|
79
79
|
let list = undefined
|
|
80
80
|
if (typeof colft !== 'string') {
|
|
81
81
|
list = colft
|
|
@@ -83,6 +83,10 @@ export function colft_BD_F(colft, fMap) {
|
|
|
83
83
|
list = fMap[colft]
|
|
84
84
|
}
|
|
85
85
|
if (Array.isArray(list)) {
|
|
86
|
-
return list.map((item) => ({
|
|
86
|
+
return list.map((item) => ({
|
|
87
|
+
label: item.text,
|
|
88
|
+
data: { count: item.count },
|
|
89
|
+
...item
|
|
90
|
+
}))
|
|
87
91
|
}
|
|
88
92
|
}
|
|
@@ -26,24 +26,28 @@
|
|
|
26
26
|
</el-table>
|
|
27
27
|
<ux-table
|
|
28
28
|
v-else
|
|
29
|
+
ref="ux-table"
|
|
29
30
|
:key="colsKey"
|
|
30
31
|
:header-cell-style="{ 'text-align': 'center' }"
|
|
31
32
|
:data="data"
|
|
32
33
|
:height="height"
|
|
33
34
|
v-bind="$attrs"
|
|
34
|
-
v-on="
|
|
35
|
+
v-on="{ ...$listeners, 'filter-change': bigFilter, 'expand-change': bigExpand }"
|
|
35
36
|
>
|
|
36
37
|
<template v-for="(item, i) in columns">
|
|
37
|
-
<slot v-if="item.slotName" :name="item.slotName" :column="item"></slot>
|
|
38
|
+
<slot v-if="item.slotName" :name="item.slotName" :column="item" :big-data="bigData"></slot>
|
|
38
39
|
<ux-table-column
|
|
39
40
|
v-else-if="item.render"
|
|
40
41
|
:key="'cl-table-' + i"
|
|
42
|
+
:filters="item.filters | colft_BD_F(filtersMap)"
|
|
43
|
+
:class-name="item | colKey"
|
|
41
44
|
:field="item.prop"
|
|
42
45
|
:title="item.label"
|
|
43
46
|
:type="item.type | typeF"
|
|
47
|
+
:show-overflow="item | overflowF"
|
|
44
48
|
v-bind="item"
|
|
45
49
|
>
|
|
46
|
-
<columnRender slot-scope="{ row, $
|
|
50
|
+
<columnRender slot-scope="{ row, $rowIndex }" :c-render="item.render" :row="row" :index="$rowIndex" />
|
|
47
51
|
</ux-table-column>
|
|
48
52
|
|
|
49
53
|
<ux-table-column
|
|
@@ -51,9 +55,11 @@
|
|
|
51
55
|
:key="'cl-table-' + i"
|
|
52
56
|
:formatter="item.formatter | colf_BD_F(item.formatterMap)"
|
|
53
57
|
:filters="item.filters | colft_BD_F(filtersMap)"
|
|
58
|
+
:class-name="item | colKey"
|
|
54
59
|
:field="item.prop"
|
|
55
60
|
:title="item.label"
|
|
56
61
|
:type="item.type | typeF"
|
|
62
|
+
:show-overflow="item | overflowF"
|
|
57
63
|
v-bind="item"
|
|
58
64
|
/>
|
|
59
65
|
</template>
|
|
@@ -92,8 +98,15 @@ export default {
|
|
|
92
98
|
typeF(type) {
|
|
93
99
|
return type && type === 'selection' ? 'checkbox' : type
|
|
94
100
|
},
|
|
101
|
+
overflowF(item) {
|
|
102
|
+
return item.showOverflowTooltip || item['show-overflow-tooltip'] ? 'tooltip' : 'ellipsis'
|
|
103
|
+
},
|
|
95
104
|
colf_BD_F,
|
|
96
|
-
colft_BD_F
|
|
105
|
+
colft_BD_F,
|
|
106
|
+
colKey(item) {
|
|
107
|
+
let key = item.columnKey || item['column-key']
|
|
108
|
+
return key ? 'key@' + key : ''
|
|
109
|
+
}
|
|
97
110
|
},
|
|
98
111
|
props: {
|
|
99
112
|
bigData: {
|
|
@@ -135,24 +148,71 @@ export default {
|
|
|
135
148
|
colsKey: 0
|
|
136
149
|
}
|
|
137
150
|
},
|
|
151
|
+
provide() {
|
|
152
|
+
let bigData = this.bigData
|
|
153
|
+
return {
|
|
154
|
+
bigData
|
|
155
|
+
}
|
|
156
|
+
},
|
|
138
157
|
watch: {
|
|
139
158
|
columns() {
|
|
140
159
|
this.colsKey = this.colsKey + 1
|
|
141
160
|
}
|
|
142
161
|
},
|
|
143
162
|
mounted() {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
163
|
+
if (!this.bigData) {
|
|
164
|
+
let inTable = this.$refs['el-table']
|
|
165
|
+
if (inTable) {
|
|
166
|
+
this.$refs['table'] = inTable
|
|
167
|
+
this.clearSelection = inTable.clearSelection
|
|
168
|
+
this.toggleRowSelection = inTable.toggleRowSelection
|
|
169
|
+
this.toggleAllSelection = inTable.toggleAllSelection
|
|
170
|
+
this.toggleRowExpansion = inTable.toggleRowExpansion
|
|
171
|
+
this.setCurrentRow = inTable.setCurrentRow
|
|
172
|
+
this.clearSort = inTable.clearSort
|
|
173
|
+
this.clearFilter = inTable.clearFilter
|
|
174
|
+
this.doLayout = inTable.doLayout
|
|
175
|
+
this.sort = inTable.sort
|
|
176
|
+
}
|
|
177
|
+
} else {
|
|
178
|
+
let inTable = this.$refs['ux-table']
|
|
179
|
+
if (inTable) {
|
|
180
|
+
this.$refs['table'] = inTable
|
|
181
|
+
this.clearSelection = inTable.clearSelection
|
|
182
|
+
this.toggleRowSelection = function (row, selected) {
|
|
183
|
+
inTable.toggleRowSelection([{ row, selected }])
|
|
184
|
+
}
|
|
185
|
+
this.toggleAllSelection = inTable.toggleAllSelection
|
|
186
|
+
this.toggleRowExpansion = inTable.toggleRowExpansion
|
|
187
|
+
this.setCurrentRow = inTable.setCurrentRow
|
|
188
|
+
this.clearSort = inTable.clearSort
|
|
189
|
+
this.clearFilter = inTable.clearFilter
|
|
190
|
+
//
|
|
191
|
+
this.doLayout = inTable.loadData
|
|
192
|
+
this.sort = inTable.sort
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
methods: {
|
|
197
|
+
bigFilter(arg) {
|
|
198
|
+
let filters = arg.filters || []
|
|
199
|
+
let elFilters = {}
|
|
200
|
+
filters.forEach((item) => {
|
|
201
|
+
let key = item.column.className
|
|
202
|
+
if (key && typeof key === 'string') {
|
|
203
|
+
let _key = key.split(',').find((s) => s.includes('key@'))
|
|
204
|
+
|
|
205
|
+
if (_key) _key = _key.replace('key@', '')
|
|
206
|
+
|
|
207
|
+
if (_key) key = _key
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
elFilters[key || item.property] = item.column.filterMultiple ? item.values : item.values[0]
|
|
211
|
+
})
|
|
212
|
+
this.$emit('filter-change', elFilters, arg)
|
|
213
|
+
},
|
|
214
|
+
bigExpand(arg) {
|
|
215
|
+
this.$emit('expand-change', arg.row, arg.expanded, arg)
|
|
156
216
|
}
|
|
157
217
|
}
|
|
158
218
|
}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<el-table-column v-bind="$attrs">
|
|
2
|
+
<el-table-column v-if="!bigData" v-bind="$attrs">
|
|
3
3
|
<OperateBtns slot-scope="{ row, $index }" :btn-list="btnList" :row="row" @command="(c) => $emit(c, row, $index)" />
|
|
4
4
|
</el-table-column>
|
|
5
|
+
<ux-table-column v-else :field="$attrs.prop" :title="$attrs.label" v-bind="$attrs">
|
|
6
|
+
<OperateBtns slot-scope="{ row, $index }" :btn-list="btnList" :row="row" @command="(c) => $emit(c, row, $index)" />
|
|
7
|
+
</ux-table-column>
|
|
5
8
|
</template>
|
|
6
9
|
|
|
7
10
|
<script>
|
|
8
|
-
import { $lc } from '../../utils/i18n/index'
|
|
11
|
+
// import { $lc } from '../../utils/i18n/index'
|
|
9
12
|
import OperateBtns from './OperateBtns.vue'
|
|
10
13
|
export default {
|
|
11
14
|
name: 'TableOperateColumn',
|
|
12
15
|
components: {
|
|
13
16
|
OperateBtns
|
|
14
17
|
},
|
|
18
|
+
inject: ['bigData'],
|
|
15
19
|
props: {
|
|
16
20
|
btnList: {
|
|
17
21
|
type: Array,
|
|
@@ -17,24 +17,42 @@
|
|
|
17
17
|
suffix-icon="el-icon-search"
|
|
18
18
|
/>
|
|
19
19
|
<div v-if="filterStore.multiple">
|
|
20
|
-
<
|
|
20
|
+
<div>
|
|
21
|
+
<el-checkbox
|
|
22
|
+
v-model="filterStore.isAllSelected"
|
|
23
|
+
:label="true"
|
|
24
|
+
:indeterminate="indeterminate"
|
|
25
|
+
@change="allCheckFn"
|
|
26
|
+
>{{ '全部' | $lc }}{{ filters | alltextF }}</el-checkbox
|
|
27
|
+
>
|
|
28
|
+
</div>
|
|
21
29
|
<div class="input-w p-b-s" style="max-height: 226px; overflow: auto">
|
|
22
30
|
<template v-for="filter in filters">
|
|
23
31
|
<el-checkbox
|
|
24
32
|
v-if="filter.label.includes(searchVal)"
|
|
25
33
|
:key="filter.value"
|
|
26
|
-
v-model="filter.
|
|
34
|
+
v-model="filter._checked"
|
|
27
35
|
class="m-t-s m-r-0"
|
|
28
36
|
style="display: block"
|
|
37
|
+
@change="(val) => itemCheckFn(val, filter)"
|
|
29
38
|
>
|
|
30
39
|
<span class="align-bottom">{{ filter.label }}</span>
|
|
40
|
+
<span>{{ filter | countF }}</span>
|
|
31
41
|
</el-checkbox>
|
|
32
42
|
</template>
|
|
33
43
|
</div>
|
|
44
|
+
<div class="flex-box flex-c m-t-s">
|
|
45
|
+
<el-button type="primary" size="mini" @click="handleConfirm">
|
|
46
|
+
{{ '确认' | $lc }}
|
|
47
|
+
</el-button>
|
|
48
|
+
<el-button plain size="mini" @click="handleReset">{{ '清空' | $lc }}</el-button>
|
|
49
|
+
</div>
|
|
34
50
|
</div>
|
|
35
51
|
<div v-else>
|
|
36
52
|
<ul class="el-table-filter__list">
|
|
37
|
-
<li class="el-table-filter__list-item text-l"
|
|
53
|
+
<li class="el-table-filter__list-item text-l" @click="allCheckFn">
|
|
54
|
+
{{ '全部' | $lc }}{{ filters | alltextF }}
|
|
55
|
+
</li>
|
|
38
56
|
</ul>
|
|
39
57
|
<ul class="el-table-filter__list" style="max-height: 226px; overflow: auto">
|
|
40
58
|
<template v-for="filter in filters">
|
|
@@ -42,12 +60,11 @@
|
|
|
42
60
|
v-if="filter.label.includes(searchVal)"
|
|
43
61
|
:key="filter.value"
|
|
44
62
|
class="el-table-filter__list-item text-l"
|
|
45
|
-
:class="{ 'is-active': filter.
|
|
46
|
-
@click="filter.
|
|
63
|
+
:class="{ 'is-active': filter._checked }"
|
|
64
|
+
@click="itemCheckFn(!filter._checked, filter)"
|
|
47
65
|
>
|
|
48
|
-
<span class="text-ellipsis align-bottom"
|
|
49
|
-
|
|
50
|
-
}}</span>
|
|
66
|
+
<span class="text-ellipsis align-bottom">{{ filter.label }}</span>
|
|
67
|
+
<span>{{ filter | countF }}</span>
|
|
51
68
|
</li>
|
|
52
69
|
</template>
|
|
53
70
|
</ul>
|
|
@@ -57,16 +74,40 @@
|
|
|
57
74
|
</template>
|
|
58
75
|
|
|
59
76
|
<script>
|
|
60
|
-
import { $lc } from '../../utils/i18n/index'
|
|
77
|
+
// import { $lc } from '../../utils/i18n/index'
|
|
78
|
+
function getCount(item) {
|
|
79
|
+
return item.count || (item.data ? item.data.count : undefined)
|
|
80
|
+
}
|
|
81
|
+
|
|
61
82
|
export default {
|
|
62
83
|
name: 'ElxTableFilter',
|
|
84
|
+
filters: {
|
|
85
|
+
countF(item) {
|
|
86
|
+
let N = getCount(item)
|
|
87
|
+
if (N !== undefined) {
|
|
88
|
+
return ' (' + N + ')'
|
|
89
|
+
} else {
|
|
90
|
+
return ''
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
alltextF(list = []) {
|
|
94
|
+
if (list.some((c) => getCount(c) !== undefined)) {
|
|
95
|
+
let total = 0
|
|
96
|
+
list.forEach((c) => {
|
|
97
|
+
total = total + (Number(c) || 0)
|
|
98
|
+
})
|
|
99
|
+
return ' (' + total + ')'
|
|
100
|
+
} else {
|
|
101
|
+
return ''
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
},
|
|
63
105
|
props: {
|
|
64
106
|
filterStore: { type: Object, default: () => ({}) }
|
|
65
107
|
},
|
|
66
108
|
data() {
|
|
67
109
|
return {
|
|
68
|
-
searchVal: ''
|
|
69
|
-
filteredValue: []
|
|
110
|
+
searchVal: ''
|
|
70
111
|
}
|
|
71
112
|
},
|
|
72
113
|
computed: {
|
|
@@ -75,31 +116,68 @@ export default {
|
|
|
75
116
|
},
|
|
76
117
|
filters() {
|
|
77
118
|
return this.filterStore.options
|
|
78
|
-
// _checked
|
|
79
119
|
},
|
|
80
120
|
multiple() {
|
|
81
121
|
return this.filterStore.multiple
|
|
82
122
|
},
|
|
83
123
|
indeterminate() {
|
|
84
124
|
return this.filterStore.isIndeterminate
|
|
85
|
-
},
|
|
86
|
-
allCheck: {
|
|
87
|
-
get() {
|
|
88
|
-
return this.filterStore.isAllSelected
|
|
89
|
-
},
|
|
90
|
-
set(val) {
|
|
91
|
-
this.filterStore.isAllSelected = val
|
|
92
|
-
}
|
|
93
125
|
}
|
|
94
126
|
},
|
|
95
127
|
watch: {
|
|
96
128
|
'filterStore.visible': {
|
|
97
|
-
handler() {
|
|
98
|
-
|
|
129
|
+
handler(val) {
|
|
130
|
+
if (val) this.searchVal = ''
|
|
99
131
|
}
|
|
100
132
|
}
|
|
101
133
|
},
|
|
102
134
|
mounted() {},
|
|
103
|
-
methods: {
|
|
135
|
+
methods: {
|
|
136
|
+
allCheckFn(t) {
|
|
137
|
+
if (this.filterStore.multiple) {
|
|
138
|
+
this.filterStore.options.forEach((e) => {
|
|
139
|
+
this.$set(e, '_checked', t)
|
|
140
|
+
this.$set(e, 'checked', t)
|
|
141
|
+
})
|
|
142
|
+
this.$set(this.filterStore, 'isAllSelected', t)
|
|
143
|
+
this.$set(this.filterStore, 'isIndeterminate', false)
|
|
144
|
+
} else {
|
|
145
|
+
this.$parent.resetFilterEvent()
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
itemCheckFn(t, i) {
|
|
149
|
+
if (this.filterStore.multiple) {
|
|
150
|
+
this.$set(i, '_checked', t)
|
|
151
|
+
|
|
152
|
+
this.$parent.checkFilterOptions()
|
|
153
|
+
} else {
|
|
154
|
+
this.filterStore.options.forEach((e) => {
|
|
155
|
+
this.$set(e, '_checked', false)
|
|
156
|
+
this.$set(e, '_checked', false)
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
this.$set(i, '_checked', t)
|
|
160
|
+
this.$set(i, 'checked', t)
|
|
161
|
+
|
|
162
|
+
this.$parent.checkFilterOptions()
|
|
163
|
+
this.$parent.confirmFilterEvent()
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
handleConfirm() {
|
|
167
|
+
let someC = false
|
|
168
|
+
this.filterStore.options.forEach((e) => {
|
|
169
|
+
e.checked = e._checked
|
|
170
|
+
e._checked && (someC = true)
|
|
171
|
+
})
|
|
172
|
+
if (someC) {
|
|
173
|
+
this.$parent.confirmFilterEvent()
|
|
174
|
+
} else {
|
|
175
|
+
this.$parent.resetFilterEvent()
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
handleReset() {
|
|
179
|
+
this.$parent.resetFilterEvent()
|
|
180
|
+
}
|
|
181
|
+
}
|
|
104
182
|
}
|
|
105
183
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import 'umy-table/lib/theme-chalk/elx-table.css'
|
|
1
2
|
import { UTable, UTableColumn, UxGrid, UxTableColumn } from 'umy-table'
|
|
2
|
-
|
|
3
3
|
import ElxTableFilter from './ElxTableFilter.vue'
|
|
4
4
|
|
|
5
5
|
function install(Vue) {
|
|
@@ -9,6 +9,7 @@ function install(Vue) {
|
|
|
9
9
|
|
|
10
10
|
Vue.component('UxTable', UxGrid)
|
|
11
11
|
|
|
12
|
+
setPropsDefault(UxTableColumn, { headerAlign: { default: 'center' } })
|
|
12
13
|
const _created = UxTableColumn.created
|
|
13
14
|
UxTableColumn.created = function () {
|
|
14
15
|
_created.call(this, ...arguments)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import axios from './axios'
|
|
2
|
-
|
|
2
|
+
import { getItem, setItem } from './storageEdit'
|
|
3
3
|
// 按需/按模块 加载权限
|
|
4
4
|
async function asyncGetRelaNos(appNo, rns) {
|
|
5
5
|
let uno = sessionStorage.getItem('userNo')
|
|
@@ -20,27 +20,30 @@ async function asyncGetRelaNos(appNo, rns) {
|
|
|
20
20
|
{ loading: false, noMsg: true }
|
|
21
21
|
)
|
|
22
22
|
|
|
23
|
-
let ssRelaNos = JSON.parse(sessionStorage.getItem('relaNos'))
|
|
24
|
-
let ssCltrelaNos = JSON.parse(sessionStorage.getItem('cltrelaNos'))
|
|
25
|
-
|
|
26
|
-
let relaNos = []
|
|
27
|
-
data.forEach((el) => {
|
|
28
|
-
ssCltrelaNos[el.cltNo] || (ssCltrelaNos[el.cltNo] = [])
|
|
29
|
-
|
|
30
|
-
relaNos.push(...el.relaNos)
|
|
31
|
-
ssCltrelaNos[el.cltNo].push(...el.relaNos)
|
|
32
|
-
})
|
|
33
|
-
relaNos = Array.from(new Set(relaNos))
|
|
23
|
+
let ssRelaNos = getItem('relaNos') // JSON.parse(sessionStorage.getItem('relaNos'))
|
|
24
|
+
let ssCltrelaNos = getItem('cltrelaNos') // JSON.parse(sessionStorage.getItem('cltrelaNos'))
|
|
34
25
|
|
|
35
26
|
let rnObj = ssRelaNos.find((el) => el.appNo === appNo)
|
|
36
|
-
if (rnObj) {
|
|
37
|
-
rnObj
|
|
38
|
-
|
|
39
|
-
ssRelaNos.push({ appNo: appNo || 'null', relaNos: relaNos })
|
|
27
|
+
if (!rnObj) {
|
|
28
|
+
rnObj = { appNo: appNo || 'null', relaNos: [] }
|
|
29
|
+
ssRelaNos.push(rnObj)
|
|
40
30
|
}
|
|
31
|
+
let oRelaNos = []
|
|
32
|
+
data.forEach((el) => {
|
|
33
|
+
if (ssCltrelaNos[el.cltNo]) {
|
|
34
|
+
ssCltrelaNos[el.cltNo].push(...el.relaNos)
|
|
35
|
+
} else {
|
|
36
|
+
ssCltrelaNos[el.cltNo] = el.relaNos
|
|
37
|
+
}
|
|
38
|
+
oRelaNos.push(...el.relaNos)
|
|
39
|
+
})
|
|
40
|
+
oRelaNos = [...new Set(oRelaNos)]
|
|
41
|
+
rnObj.relaNos = oRelaNos
|
|
41
42
|
|
|
42
|
-
sessionStorage.setItem('relaNos', JSON.stringify(ssRelaNos))
|
|
43
|
-
|
|
43
|
+
// sessionStorage.setItem('relaNos', JSON.stringify(ssRelaNos))
|
|
44
|
+
setItem('relaNos', ssRelaNos)
|
|
45
|
+
// sessionStorage.setItem('cltrelaNos', JSON.stringify(ssCltrelaNos))
|
|
46
|
+
setItem('cltrelaNos', ssCltrelaNos)
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
export default asyncGetRelaNos
|
package/src/utils/relaNo.js
CHANGED
|
@@ -1,33 +1,37 @@
|
|
|
1
1
|
import forEachs from './forEachs'
|
|
2
|
+
import { getItem } from './storageEdit'
|
|
2
3
|
|
|
3
4
|
const name = process.env.VUE_APP_RelaAppNo || process.env.VUE_APP_NAME
|
|
4
5
|
|
|
5
|
-
let relaObj =
|
|
6
|
-
|
|
7
|
-
relaNos: []
|
|
8
|
-
}
|
|
6
|
+
let relaObj = undefined
|
|
7
|
+
let cltrelaNos = undefined
|
|
9
8
|
|
|
10
9
|
export function getRela() {
|
|
10
|
+
if (!relaObj) setRela()
|
|
11
|
+
|
|
11
12
|
return relaObj
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export function setRela() {
|
|
15
|
-
let
|
|
16
|
-
if (
|
|
17
|
-
let relaNos =
|
|
18
|
-
|
|
19
|
-
relaObj,
|
|
20
|
-
relaNos.find((r) => r.appNo === name)
|
|
21
|
-
)
|
|
16
|
+
let _relaNos = getItem('relaNos') // sessionStorage.getItem('relaNos')
|
|
17
|
+
if (_relaNos) {
|
|
18
|
+
let relaNos = _relaNos
|
|
19
|
+
relaObj = relaNos.find((r) => r.appNo === name)
|
|
22
20
|
console.log(relaObj, 'has权限列表')
|
|
23
21
|
|
|
24
|
-
|
|
22
|
+
let relaNosG = []
|
|
23
|
+
for (let i = 0; i < relaNos.length; i++) {
|
|
24
|
+
let item = relaNos[i]
|
|
25
|
+
relaNosG.push(...item.relaNos)
|
|
26
|
+
}
|
|
27
|
+
relaObj.relaNosGlobal = relaNosG
|
|
28
|
+
|
|
25
29
|
return
|
|
26
30
|
}
|
|
27
31
|
/* 兼容旧门户 */
|
|
28
|
-
let
|
|
29
|
-
if (
|
|
30
|
-
let resources =
|
|
32
|
+
let _resources = getItem('resources') // sessionStorage.getItem('resources')
|
|
33
|
+
if (_resources) {
|
|
34
|
+
let resources = _resources
|
|
31
35
|
let relaNos = []
|
|
32
36
|
forEachs(resources, (item) => {
|
|
33
37
|
relaNos.push(item.relaNo)
|
|
@@ -37,13 +41,12 @@ export function setRela() {
|
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
43
|
|
|
40
|
-
let cltrelaNos = undefined
|
|
41
44
|
export function getCltRela(clt) {
|
|
42
45
|
/* 获取全部单位权限 */
|
|
43
46
|
if (!cltrelaNos) {
|
|
44
|
-
let
|
|
45
|
-
if (
|
|
46
|
-
cltrelaNos =
|
|
47
|
+
let _cltrelaNos = getItem('cltrelaNos') // sessionStorage.getItem('cltrelaNos')
|
|
48
|
+
if (_cltrelaNos) {
|
|
49
|
+
cltrelaNos = _cltrelaNos
|
|
47
50
|
} else {
|
|
48
51
|
cltrelaNos = {}
|
|
49
52
|
}
|
|
@@ -52,14 +55,34 @@ export function getCltRela(clt) {
|
|
|
52
55
|
if (Array.isArray(clt)) {
|
|
53
56
|
let clts = clt
|
|
54
57
|
let cltI = clts[0]
|
|
55
|
-
let cltRela =
|
|
58
|
+
let cltRela = []
|
|
59
|
+
for (let id in cltrelaNos) {
|
|
60
|
+
let ids = id.split(',')
|
|
61
|
+
if (ids.includes(cltI)) {
|
|
62
|
+
cltRela.push(...cltrelaNos[id])
|
|
63
|
+
}
|
|
64
|
+
}
|
|
56
65
|
|
|
57
66
|
for (let i = 1; i < clt.length; i++) {
|
|
58
|
-
|
|
67
|
+
let cltRela2 = []
|
|
68
|
+
for (let id in cltrelaNos) {
|
|
69
|
+
let ids = id.split(',')
|
|
70
|
+
if (ids.includes(clts[i])) {
|
|
71
|
+
cltRela2.push(...cltrelaNos[id])
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
cltRela = aandb(cltRela, cltRela2)
|
|
59
75
|
}
|
|
60
76
|
return cltRela || []
|
|
61
77
|
} else {
|
|
62
|
-
|
|
78
|
+
let cltRela = []
|
|
79
|
+
for (let id in cltrelaNos) {
|
|
80
|
+
let ids = id.split(',')
|
|
81
|
+
if (ids.includes(clt)) {
|
|
82
|
+
cltRela.push(...cltrelaNos[id])
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return cltRela
|
|
63
86
|
}
|
|
64
87
|
}
|
|
65
88
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function setItem(key, obj) {
|
|
2
|
+
window['_keep_' + key] = obj
|
|
3
|
+
setTimeout(function () {
|
|
4
|
+
sessionStorage.setItem(key, JSON.stringify(obj))
|
|
5
|
+
}, 100)
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function getItem(key) {
|
|
9
|
+
let obj = window['_keep_' + key]
|
|
10
|
+
if (!obj) {
|
|
11
|
+
obj = JSON.parse(sessionStorage.getItem(key))
|
|
12
|
+
window['_keep_' + key] = obj
|
|
13
|
+
}
|
|
14
|
+
return obj
|
|
15
|
+
}
|