lw-cdp-ui 1.2.22 → 1.2.23
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/dist/components/lwTable/index.js +54 -218
- package/dist/components/lwTable/index.vue +96 -51
- package/dist/lw-cdp-ui.esm.js +2276 -2361
- package/dist/lw-cdp-ui.umd.js +11 -11
- package/dist/style.css +1 -1
- package/package.json +1 -1
|
@@ -4,6 +4,7 @@ import dayjs from 'dayjs'
|
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
6
|
name: 'lwTable',
|
|
7
|
+
|
|
7
8
|
// 组件属性定义
|
|
8
9
|
props: {
|
|
9
10
|
refName: { type: String, default: 'multipleTableRef' }, // 表格ref名称
|
|
@@ -26,7 +27,7 @@ export default {
|
|
|
26
27
|
isSetting: { type: Boolean, default: false }, // 是否启用设置功能
|
|
27
28
|
saveKey: { type: String, default: '' }, // 保存设置的键名
|
|
28
29
|
orderPage: { type: Boolean, default: false }, // 是否为订单页面
|
|
29
|
-
tableSize: { type: String, default: 'large' }, // 表格大小
|
|
30
|
+
tableSize: { type: String, default: 'large' }, // 表格大小
|
|
30
31
|
loading: { type: Boolean, default: false }, // 加载状态
|
|
31
32
|
rowSelection: { type: Boolean, default: false }, // 是否可选择行
|
|
32
33
|
selectedKeys: { type: Array }, // 选中的键值数组
|
|
@@ -40,16 +41,14 @@ export default {
|
|
|
40
41
|
setup(props, context) {
|
|
41
42
|
// 表格引用
|
|
42
43
|
const multipleTable = ref()
|
|
43
|
-
|
|
44
|
+
|
|
44
45
|
// 获取全局实例
|
|
45
|
-
const {
|
|
46
|
-
proxy: { $bus, $tool }
|
|
47
|
-
} = getCurrentInstance()
|
|
46
|
+
const { proxy: { $bus, $tool } } = getCurrentInstance()
|
|
48
47
|
|
|
49
48
|
// 全屏相关状态
|
|
50
49
|
const { isFullscreen, toggle: toggleFullScreen } = useFullscreen()
|
|
51
50
|
|
|
52
|
-
//
|
|
51
|
+
// 响应式状态
|
|
53
52
|
const state = reactive({
|
|
54
53
|
dialogVisible: false, // 对话框可见性
|
|
55
54
|
tableSettingTitle: '选择字段', // 表格设置标题
|
|
@@ -91,14 +90,13 @@ export default {
|
|
|
91
90
|
|
|
92
91
|
// 组件挂载前
|
|
93
92
|
onBeforeMount(async () => {
|
|
94
|
-
//
|
|
93
|
+
// 监听窗口大小变化
|
|
95
94
|
window.addEventListener('resize', () => {
|
|
96
|
-
let isFull =
|
|
97
|
-
document.
|
|
98
|
-
document.
|
|
99
|
-
document.
|
|
100
|
-
document.
|
|
101
|
-
document.mozRequestFullScreen ||
|
|
95
|
+
let isFull = document.mozFullScreen ||
|
|
96
|
+
document.fullScreen ||
|
|
97
|
+
document.webkitIsFullScreen ||
|
|
98
|
+
document.webkitRequestFullScreen ||
|
|
99
|
+
document.mozRequestFullScreen ||
|
|
102
100
|
document.msFullscreenEnabled
|
|
103
101
|
if (isFull === undefined) {
|
|
104
102
|
isFull = false
|
|
@@ -110,213 +108,93 @@ export default {
|
|
|
110
108
|
})
|
|
111
109
|
|
|
112
110
|
// 监听表格列变化
|
|
113
|
-
watch(
|
|
114
|
-
()
|
|
115
|
-
|
|
116
|
-
filterData()
|
|
117
|
-
},
|
|
118
|
-
{ deep: true, immediate: true }
|
|
119
|
-
)
|
|
111
|
+
watch(() => props.tableColumns, (newVal) => {
|
|
112
|
+
filterData()
|
|
113
|
+
}, { deep: true, immediate: true })
|
|
120
114
|
|
|
121
|
-
// 选择相关的响应式引用
|
|
115
|
+
// 选择相关的响应式引用
|
|
122
116
|
const selectedKeysForm = ref([])
|
|
123
117
|
const selectGoodsDatas = ref([])
|
|
124
118
|
const selectAllGoods = ref([])
|
|
125
119
|
|
|
126
120
|
// 监听表格数据变化
|
|
127
|
-
watch(
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
selectAllGoods.value = newAllArr || []
|
|
138
|
-
},
|
|
139
|
-
{ deep: true, immediate: true }
|
|
140
|
-
)
|
|
121
|
+
watch(() => props.tableData, (newVal) => {
|
|
122
|
+
// 合并并去重数据
|
|
123
|
+
const allArr = [...newVal, ...selectAllGoods.value]
|
|
124
|
+
const allObj = {}
|
|
125
|
+
const newAllArr = allArr.reduce((cur, next) => {
|
|
126
|
+
allObj[next[props.rowKey]] ? '' : (allObj[next[props.rowKey]] = true && cur.push(next))
|
|
127
|
+
return cur
|
|
128
|
+
}, [])
|
|
129
|
+
selectAllGoods.value = newAllArr || []
|
|
130
|
+
}, { deep: true, immediate: true })
|
|
141
131
|
|
|
142
132
|
// 监听选中键变化
|
|
143
|
-
watch(
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
},
|
|
164
|
-
{ deep: true, immediate: true }
|
|
165
|
-
)
|
|
133
|
+
watch(() => props.selectedKeys, (newVal) => {
|
|
134
|
+
selectedKeysForm.value = newVal
|
|
135
|
+
selectGoodsDatas.value = []
|
|
136
|
+
|
|
137
|
+
if (selectAllGoods.value.length && !!newVal) {
|
|
138
|
+
// 过滤并合并选中数据
|
|
139
|
+
const data = selectAllGoods.value.filter((item) => {
|
|
140
|
+
return newVal.includes(item[props.rowKey])
|
|
141
|
+
})
|
|
142
|
+
const arr = [...data, ...selectGoodsDatas.value]
|
|
143
|
+
const obj = {}
|
|
144
|
+
const newArr = arr.reduce((cur, next) => {
|
|
145
|
+
obj[next[props.rowKey]] ? '' : (obj[next[props.rowKey]] = true && cur.push(next))
|
|
146
|
+
return cur
|
|
147
|
+
}, [])
|
|
148
|
+
selectGoodsDatas.value = newArr || []
|
|
149
|
+
context.emit('update:selectDatas', newArr)
|
|
150
|
+
}
|
|
151
|
+
}, { deep: true, immediate: true })
|
|
166
152
|
|
|
167
|
-
//
|
|
153
|
+
// 表格功能方法
|
|
168
154
|
const handleChange = (currentData) => {
|
|
169
155
|
context.emit('draggable', currentData)
|
|
170
156
|
}
|
|
171
157
|
|
|
172
|
-
// 选择变化处理函数
|
|
173
158
|
const handleSelectionChange = (val) => {
|
|
174
159
|
context.emit('multipleSelection', val)
|
|
175
160
|
}
|
|
176
161
|
|
|
177
|
-
// 当前项变化处理函数
|
|
178
162
|
const handleCurrentChange = (val) => {
|
|
179
163
|
context.emit('currentChange', val)
|
|
180
164
|
}
|
|
181
165
|
|
|
182
|
-
// 分页大小变化处理函数
|
|
183
166
|
const sizeChange = (val) => {
|
|
184
167
|
props.searchParams.size = val
|
|
185
168
|
context.emit('getTableData')
|
|
186
169
|
}
|
|
187
170
|
|
|
188
|
-
// 页码变化处理函数
|
|
189
171
|
const currentChange = (page) => {
|
|
190
172
|
props.searchParams.page = page - 1
|
|
191
173
|
context.emit('getTableData', props.searchParams.page)
|
|
192
174
|
}
|
|
193
175
|
|
|
194
|
-
// 刷新处理函数
|
|
195
176
|
const refresh = () => {
|
|
196
177
|
currentChange(1)
|
|
197
178
|
}
|
|
198
179
|
|
|
199
|
-
//
|
|
180
|
+
// 表格行选择方法
|
|
200
181
|
const toggleRowChange = (row, status) => {
|
|
201
182
|
multipleTable.value.toggleRowSelection(row, status)
|
|
202
183
|
}
|
|
203
184
|
|
|
204
|
-
|
|
205
|
-
const clearTableSelection = (row, status) => {
|
|
185
|
+
const clearTableSelection = () => {
|
|
206
186
|
multipleTable.value.clearSelection()
|
|
207
187
|
}
|
|
208
188
|
|
|
209
|
-
//
|
|
210
|
-
const allowDrop = (draggingNode, dropNode, type) => {
|
|
211
|
-
return type !== 'inner'
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// 允许拖拽判断
|
|
215
|
-
const allowDrag = (draggingNode) => {
|
|
216
|
-
return draggingNode.data.label.indexOf('Level three 3-1-1') === -1
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
// 表格设置处理函数
|
|
220
|
-
const tableSetting = () => {
|
|
221
|
-
state.tableSettingTitle = '选择字段'
|
|
222
|
-
state.dialogVisible = true
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// 下一步处理函数
|
|
226
|
-
const next = () => {
|
|
227
|
-
if (state.checkedList.length === 0) {
|
|
228
|
-
Message.error('选择字段不可以为空!')
|
|
229
|
-
return
|
|
230
|
-
}
|
|
231
|
-
state.tableSettingTitle = '排序'
|
|
232
|
-
|
|
233
|
-
state.treeData = []
|
|
234
|
-
let num = 0
|
|
235
|
-
let list = JSON.parse(JSON.stringify(state.checkedList))
|
|
236
|
-
list.forEach((item, index) => {
|
|
237
|
-
props.tableHeader.forEach((it) => {
|
|
238
|
-
if (item === it.label) {
|
|
239
|
-
let obj = {
|
|
240
|
-
label: item,
|
|
241
|
-
children: [],
|
|
242
|
-
index: index,
|
|
243
|
-
fixed: it.fixed ? it.fixed : ''
|
|
244
|
-
}
|
|
245
|
-
state.treeData.push(obj)
|
|
246
|
-
if (it.fixed === 'left') {
|
|
247
|
-
num++
|
|
248
|
-
} else if (it.fixed === 'right') {
|
|
249
|
-
state.endFixed = true
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
})
|
|
253
|
-
|
|
254
|
-
state.num = num
|
|
255
|
-
})
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
// 上一步处理函数
|
|
259
|
-
const prev = () => {
|
|
260
|
-
state.tableSettingTitle = '选择字段'
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
// 表头确认处理函数
|
|
264
|
-
const tableHeaderConfirm = () => {
|
|
265
|
-
if ((state.num > 2 && state.endFixed) || (state.num > 3 && !state.endFixed)) {
|
|
266
|
-
Message.error('固定列最多只能选择3列!')
|
|
267
|
-
return
|
|
268
|
-
}
|
|
269
|
-
state.tableHeaderList = []
|
|
270
|
-
state.treeData.forEach((item, index) => {
|
|
271
|
-
if (state.num > 0 && state.num > index) {
|
|
272
|
-
item.fixed = 'left'
|
|
273
|
-
} else if (state.endFixed && index === state.treeData.length - 1) {
|
|
274
|
-
item.fixed = 'right'
|
|
275
|
-
} else {
|
|
276
|
-
item.fixed = ''
|
|
277
|
-
}
|
|
278
|
-
state.tableHeaderList.push(item)
|
|
279
|
-
})
|
|
280
|
-
state.dialogVisible = false
|
|
281
|
-
let obj = {
|
|
282
|
-
userId: 1,
|
|
283
|
-
json: state.tableHeaderList
|
|
284
|
-
}
|
|
285
|
-
localStorage.setItem('userTable', JSON.stringify(obj))
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
// 下载处理函数
|
|
289
|
-
const download = (url) => {
|
|
290
|
-
let fileUrl =
|
|
291
|
-
(process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') && location.hostname !== 'localhost'
|
|
292
|
-
? location.origin + url
|
|
293
|
-
: 'http://dev.yihai.lianwei.com.cn' + url
|
|
294
|
-
window.open(fileUrl, '_blank')
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
// 排序变化处理函数
|
|
298
|
-
const sortChange = ({ column, prop, order }) => {
|
|
299
|
-
props.searchParams.sortField = prop?.split(',')[0]
|
|
300
|
-
props.searchParams.sortType = order
|
|
301
|
-
const data = { ...props.searchParams }
|
|
302
|
-
context.emit('getTableData', data)
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
// 获取表头处理函数
|
|
306
|
-
const getHeader = (header) => {
|
|
307
|
-
context.emit('getHeader', header)
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
// 选择处理函数
|
|
189
|
+
// 表格设置相关方法
|
|
311
190
|
const handleSelect = (v) => {
|
|
312
191
|
state.tableSize = v
|
|
313
192
|
}
|
|
314
193
|
|
|
315
|
-
// 全选处理函数
|
|
316
194
|
const checkAll = (selected) => {
|
|
317
195
|
if (selected) {
|
|
318
196
|
state.tableHeaders = JSON.parse(JSON.stringify(props.tableColumns))
|
|
319
|
-
state.tableHeaders.forEach((item
|
|
197
|
+
state.tableHeaders.forEach((item) => {
|
|
320
198
|
if (!item.key) {
|
|
321
199
|
item.key = $tool.getUUID()
|
|
322
200
|
}
|
|
@@ -332,19 +210,18 @@ export default {
|
|
|
332
210
|
})
|
|
333
211
|
}
|
|
334
212
|
|
|
335
|
-
// 树形选择处理函数
|
|
336
213
|
const treeCheck = () => {
|
|
337
214
|
let list = state.treeData.filter((t) => state.checkedKeys.includes(t.key))
|
|
338
215
|
state.tableHeaders = list
|
|
339
216
|
}
|
|
340
217
|
|
|
341
|
-
//
|
|
218
|
+
// 全屏切换
|
|
342
219
|
const tableToggleFullScreen = () => {
|
|
343
220
|
$bus.$emit('tableFullScreen', !isFullscreen.value)
|
|
344
221
|
toggleFullScreen()
|
|
345
222
|
}
|
|
346
223
|
|
|
347
|
-
//
|
|
224
|
+
// 固定列设置
|
|
348
225
|
const fixNumChange = () => {
|
|
349
226
|
let num = state.fixNum
|
|
350
227
|
if (num > 0) {
|
|
@@ -363,33 +240,7 @@ export default {
|
|
|
363
240
|
}
|
|
364
241
|
}
|
|
365
242
|
|
|
366
|
-
//
|
|
367
|
-
const setSelectAll = (status) => {
|
|
368
|
-
multipleTable.value.selectAll(status)
|
|
369
|
-
context.emit('update:selectedKeys', status ? props.tableData.map((item) => item.id) : [])
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
// 设置选择处理函数
|
|
373
|
-
const setSelect = (rowKey, status) => {
|
|
374
|
-
multipleTable.value.select(rowKey, status)
|
|
375
|
-
const selectedKeys = [...props.selectedKeys]
|
|
376
|
-
context.emit('update:selectedKeys', status ? selectedKeys.push(rowKey) : selectedKeys.filter((item) => item !== rowKey))
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
// 全选处理函数
|
|
380
|
-
const selectAll = (status) => {
|
|
381
|
-
context.emit('update:selectedKeys', status ? props.tableData.map((item) => item[props.rowKey]) : [])
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
// 选择处理函数
|
|
385
|
-
const select = (rowKeys, rowKey, record) => {
|
|
386
|
-
context.emit('update:selectedKeys', rowKeys)
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
// 列宽变化处理函数
|
|
390
|
-
const changeColWidth = (newWidth, oldWidth, { property }) => {}
|
|
391
|
-
|
|
392
|
-
// 权限检查函数
|
|
243
|
+
// 权限检查
|
|
393
244
|
const checkAuth = (auth) => {
|
|
394
245
|
const data = JSON.parse(localStorage.getItem('userAuthInfo'))
|
|
395
246
|
const { menus, authorities } = data
|
|
@@ -402,12 +253,11 @@ export default {
|
|
|
402
253
|
return false
|
|
403
254
|
}
|
|
404
255
|
|
|
405
|
-
//
|
|
256
|
+
// 操作按钮过滤
|
|
406
257
|
const filterOperations = (operations, row) => {
|
|
407
258
|
return operations.filter((o) => (!o?.isShow || o.isShow(row)) && checkAuth(o.auth))
|
|
408
259
|
}
|
|
409
260
|
|
|
410
|
-
// 返回所有需要暴露的属性和方法
|
|
411
261
|
return {
|
|
412
262
|
...toRefs(state),
|
|
413
263
|
checkAuth,
|
|
@@ -420,30 +270,16 @@ export default {
|
|
|
420
270
|
sizeChange,
|
|
421
271
|
currentChange,
|
|
422
272
|
multipleTable,
|
|
423
|
-
allowDrop,
|
|
424
|
-
allowDrag,
|
|
425
|
-
tableSetting,
|
|
426
|
-
next,
|
|
427
|
-
prev,
|
|
428
|
-
tableHeaderConfirm,
|
|
429
273
|
toggleRowChange,
|
|
430
274
|
clearTableSelection,
|
|
431
|
-
download,
|
|
432
|
-
sortChange,
|
|
433
|
-
getHeader,
|
|
434
275
|
handleSelect,
|
|
435
276
|
checkAll,
|
|
436
277
|
tableToggleFullScreen,
|
|
437
278
|
isFullscreen,
|
|
438
279
|
treeCheck,
|
|
439
280
|
fixNumChange,
|
|
440
|
-
setSelectAll,
|
|
441
|
-
setSelect,
|
|
442
281
|
selectedKeysForm,
|
|
443
|
-
selectGoodsDatas
|
|
444
|
-
selectAll,
|
|
445
|
-
select,
|
|
446
|
-
changeColWidth
|
|
282
|
+
selectGoodsDatas
|
|
447
283
|
}
|
|
448
284
|
}
|
|
449
285
|
}
|