n20-common-lib 2.2.6 → 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.
@@ -0,0 +1,183 @@
1
+ <template>
2
+ <div
3
+ class="elx-table--filter-wrapper filter--prevent-default p-a"
4
+ :class="{
5
+ 't--animat': $parent.animat,
6
+ 'is--multiple': filterStore.multiple,
7
+ 'filter--active': filterStore.visible
8
+ }"
9
+ :style="filterStore.style"
10
+ >
11
+ <slot v-if="filterStore.visible">
12
+ <el-input
13
+ v-model="searchVal"
14
+ class="input-w m-b"
15
+ :placeholder="'请输入' | $lc"
16
+ clearable
17
+ suffix-icon="el-icon-search"
18
+ />
19
+ <div v-if="filterStore.multiple">
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>
29
+ <div class="input-w p-b-s" style="max-height: 226px; overflow: auto">
30
+ <template v-for="filter in filters">
31
+ <el-checkbox
32
+ v-if="filter.label.includes(searchVal)"
33
+ :key="filter.value"
34
+ v-model="filter._checked"
35
+ class="m-t-s m-r-0"
36
+ style="display: block"
37
+ @change="(val) => itemCheckFn(val, filter)"
38
+ >
39
+ <span class="align-bottom">{{ filter.label }}</span>
40
+ <span>{{ filter | countF }}</span>
41
+ </el-checkbox>
42
+ </template>
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>
50
+ </div>
51
+ <div v-else>
52
+ <ul class="el-table-filter__list">
53
+ <li class="el-table-filter__list-item text-l" @click="allCheckFn">
54
+ {{ '全部' | $lc }}{{ filters | alltextF }}
55
+ </li>
56
+ </ul>
57
+ <ul class="el-table-filter__list" style="max-height: 226px; overflow: auto">
58
+ <template v-for="filter in filters">
59
+ <li
60
+ v-if="filter.label.includes(searchVal)"
61
+ :key="filter.value"
62
+ class="el-table-filter__list-item text-l"
63
+ :class="{ 'is-active': filter._checked }"
64
+ @click="itemCheckFn(!filter._checked, filter)"
65
+ >
66
+ <span class="text-ellipsis align-bottom">{{ filter.label }}</span>
67
+ <span>{{ filter | countF }}</span>
68
+ </li>
69
+ </template>
70
+ </ul>
71
+ </div>
72
+ </slot>
73
+ </div>
74
+ </template>
75
+
76
+ <script>
77
+ // import { $lc } from '../../utils/i18n/index'
78
+ function getCount(item) {
79
+ return item.count || (item.data ? item.data.count : undefined)
80
+ }
81
+
82
+ export default {
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
+ },
105
+ props: {
106
+ filterStore: { type: Object, default: () => ({}) }
107
+ },
108
+ data() {
109
+ return {
110
+ searchVal: ''
111
+ }
112
+ },
113
+ computed: {
114
+ column() {
115
+ return this.filterStore.column || {}
116
+ },
117
+ filters() {
118
+ return this.filterStore.options
119
+ },
120
+ multiple() {
121
+ return this.filterStore.multiple
122
+ },
123
+ indeterminate() {
124
+ return this.filterStore.isIndeterminate
125
+ }
126
+ },
127
+ watch: {
128
+ 'filterStore.visible': {
129
+ handler(val) {
130
+ if (val) this.searchVal = ''
131
+ }
132
+ }
133
+ },
134
+ mounted() {},
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
+ }
182
+ }
183
+ </script>
@@ -0,0 +1,115 @@
1
+ import 'umy-table/lib/theme-chalk/elx-table.css'
2
+ import { UTable, UTableColumn, UxGrid, UxTableColumn } from 'umy-table'
3
+ import ElxTableFilter from './ElxTableFilter.vue'
4
+
5
+ function install(Vue) {
6
+ Vue.component('UTable', UTable)
7
+ Vue.component('UTableColumn', UTableColumn)
8
+ repairUtable(Vue) // 美化
9
+
10
+ Vue.component('UxTable', UxGrid)
11
+
12
+ setPropsDefault(UxTableColumn, { headerAlign: { default: 'center' } })
13
+ const _created = UxTableColumn.created
14
+ UxTableColumn.created = function () {
15
+ _created.call(this, ...arguments)
16
+ this.$watch('filters', () => {
17
+ this.columnConfig.filters = this.filters
18
+ })
19
+ }
20
+ Vue.component('UxTableColumn', UxTableColumn)
21
+ // 自定义筛选
22
+ Vue.component('ElxTableFilter', ElxTableFilter)
23
+ }
24
+
25
+ export default {
26
+ install
27
+ }
28
+
29
+ //
30
+ //
31
+ //
32
+ //
33
+ //
34
+ //
35
+ //
36
+ //
37
+ //
38
+ //
39
+ //
40
+ //
41
+ //
42
+ //
43
+ //
44
+ //
45
+ //
46
+ //
47
+ //
48
+ //
49
+ //
50
+ // 美化表头搜索
51
+ import FilterPanel from '../../utils/tableheaderFilterpanel.vue'
52
+ function setPropsDefault(component, props) {
53
+ let c_props = component.props
54
+ Object.keys(props).forEach((key) => {
55
+ c_props[key] = Object.assign({}, c_props[key], props[key])
56
+ })
57
+ }
58
+ function setMethodsDefault(component, methods) {
59
+ let c_methods = component.methods
60
+ Object.keys(methods).forEach((key) => {
61
+ c_methods[key] = methods[key]
62
+ })
63
+ }
64
+ function hasClass(el, cls) {
65
+ if (!el || !cls) return false
66
+ if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.')
67
+ if (el.classList) {
68
+ return el.classList.contains(cls)
69
+ } else {
70
+ return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1
71
+ }
72
+ }
73
+
74
+ function repairUtable(Vue) {
75
+ setPropsDefault(UTableColumn, {
76
+ filterPlacement: {
77
+ default: 'bottom'
78
+ }
79
+ })
80
+ if (UTable.components.ElTable.components.TableHeader) {
81
+ setMethodsDefault(UTable.components.ElTable.components.TableHeader, {
82
+ handleFilterClick(event, column) {
83
+ event.stopPropagation()
84
+ const target = event.target
85
+ let cell = target.tagName === 'TH' ? target : target.parentNode
86
+ if (hasClass(cell, 'noclick')) return
87
+ cell = cell.querySelector('.el-table__column-filter-trigger') || cell
88
+ const table = this.$parent
89
+
90
+ let filterPanel = this.filterPanels[column.id]
91
+
92
+ if (filterPanel && column.filterOpened) {
93
+ filterPanel.showPopper = false
94
+ return
95
+ }
96
+
97
+ if (!filterPanel) {
98
+ filterPanel = new Vue(FilterPanel)
99
+ this.filterPanels[column.id] = filterPanel
100
+ if (column.filterPlacement) {
101
+ filterPanel.placement = column.filterPlacement
102
+ }
103
+ filterPanel.table = table
104
+ filterPanel.cell = cell
105
+ filterPanel.column = column
106
+ !this.$isServer && filterPanel.$mount(document.createElement('div'))
107
+ }
108
+
109
+ setTimeout(() => {
110
+ filterPanel.showPopper = true
111
+ }, 16)
112
+ }
113
+ })
114
+ }
115
+ }
@@ -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.relaNos = relaNos
38
- } else {
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
- sessionStorage.setItem('cltrelaNos', JSON.stringify(ssCltrelaNos))
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
@@ -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
- appNo: name,
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 relaNosStr = sessionStorage.getItem('relaNos')
16
- if (relaNosStr) {
17
- let relaNos = JSON.parse(relaNosStr)
18
- Object.assign(
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
- relaObj.relaNosGlobal = relaNos.map((item) => item.relaNos).flat()
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 resourcesStr = sessionStorage.getItem('resources')
29
- if (resourcesStr) {
30
- let resources = JSON.parse(resourcesStr)
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 cltrelaNosStr = sessionStorage.getItem('cltrelaNos')
45
- if (cltrelaNosStr) {
46
- cltrelaNos = JSON.parse(cltrelaNosStr)
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 = cltrelaNos[cltI]
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
- cltRela = aandb(cltRela, cltrelaNos[clts[i]])
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
- return cltrelaNos[clt] || []
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
+ }
@@ -14,9 +14,9 @@
14
14
  suffix-icon="el-icon-search"
15
15
  />
16
16
  <div>
17
- <el-checkbox v-model="allCheck" :label="true" :indeterminate="indeterminate">{{
18
- filters | alltextF
19
- }}</el-checkbox>
17
+ <el-checkbox v-model="allCheck" :label="true" :indeterminate="indeterminate"
18
+ >{{ '全部' | $lc }}{{ filters | alltextF }}</el-checkbox
19
+ >
20
20
  </div>
21
21
  <el-checkbox-group v-model="filteredValue" class="input-w p-b-s" style="max-height: 226px; overflow: auto">
22
22
  <template v-for="filter in filters">
@@ -64,7 +64,7 @@
64
64
  }"
65
65
  @click="handleSelect(null)"
66
66
  >
67
- {{ filters | alltextF }}
67
+ {{ '全部' | $lc }}{{ filters | alltextF }}
68
68
  </li>
69
69
  </ul>
70
70
  <ul class="el-table-filter__list" style="max-height: 226px; overflow: auto">
@@ -90,7 +90,7 @@
90
90
  </template>
91
91
 
92
92
  <script>
93
- import { $lc } from './i18n/index'
93
+ // import { $lc } from './i18n/index'
94
94
  import Popper from 'element-ui/lib/utils/vue-popper.js'
95
95
  export default {
96
96
  name: 'ElTableFilterPanelPor',
@@ -110,9 +110,9 @@ export default {
110
110
  total = total + Number(c.count)
111
111
  }
112
112
  })
113
- return $lc('全部') + ' (' + total + ')'
113
+ return ' (' + total + ')'
114
114
  } else {
115
- return $lc('全部')
115
+ return ''
116
116
  }
117
117
  }
118
118
  },