lw-cdp-ui 1.0.19 → 1.0.21
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/README.md +5 -5
- package/dist/components/lwForm/index.vue +312 -312
- package/dist/components/lwIconSelect/iconSelect.js +288 -288
- package/dist/components/lwIconSelect/index.vue +142 -142
- package/dist/components/lwLayout/components/NavMenu.vue +36 -36
- package/dist/components/lwLayout/components/aside.vue +291 -295
- package/dist/components/lwLayout/components/bu.vue +72 -70
- package/dist/components/lwLayout/components/iframeView.vue +57 -57
- package/dist/components/lwLayout/components/lang.vue +76 -76
- package/dist/components/lwLayout/components/setting.vue +80 -80
- package/dist/components/lwLayout/components/sideM.vue +137 -136
- package/dist/components/lwLayout/components/tags.vue +329 -329
- package/dist/components/lwLayout/components/topbar.vue +70 -70
- package/dist/components/lwLayout/components/userbar.vue +210 -209
- package/dist/components/lwLayout/index.vue +399 -398
- package/dist/components/lwLogin/index.vue +446 -383
- package/dist/components/lwSearch/date/date.vue +110 -110
- package/dist/components/lwSearch/dateRange/dateRange.vue +110 -110
- package/dist/components/lwSearch/dates/dates.vue +366 -366
- package/dist/components/lwSearch/index.vue +636 -636
- package/dist/components/lwSearch/input/input.vue +54 -54
- package/dist/components/lwSearch/locale/en-us.js +10 -10
- package/dist/components/lwSearch/locale/zh-cn.js +10 -10
- package/dist/components/lwSearch/select/select.vue +57 -57
- package/dist/components/lwSvgIcon/index.vue +28 -28
- package/dist/components/lwTable/index.js +425 -425
- package/dist/components/lwTable/index.scss +229 -229
- package/dist/components/lwTable/index.vue +225 -226
- package/dist/components/lwTable/locale/en-US.js +26 -26
- package/dist/components/lwTable/locale/zh-CN.js +26 -26
- package/dist/components/lwTable/useFullscreen.js +73 -73
- package/dist/components/lwTableSelect/index.vue +254 -254
- package/dist/components/lwTableSelect/tableSelect.js +23 -23
- package/dist/components/lwUpload/index.vue +365 -365
- package/dist/en-US-YCjgxjEt.js.map +1 -1
- package/dist/en-us-CziFtIQi.js.map +1 -1
- package/dist/lw-cdp-ui.esm.js +1484 -1459
- package/dist/lw-cdp-ui.esm.js.map +1 -1
- package/dist/lw-cdp-ui.umd.js +9 -9
- package/dist/lw-cdp-ui.umd.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/zh-CN-BdDNsX4e.js.map +1 -1
- package/dist/zh-cn-DJpQp_O7.js.map +1 -1
- package/package.json +45 -45
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
// useFullscreen.js - 全屏功能实现
|
|
2
|
-
import { ref, onMounted, onUnmounted } from 'vue'
|
|
3
|
-
|
|
4
|
-
export function useFullscreen() {
|
|
5
|
-
const isFullscreen = ref(false)
|
|
6
|
-
|
|
7
|
-
// 进入全屏
|
|
8
|
-
const enterFullscreen = (element) => {
|
|
9
|
-
if (element.requestFullscreen) {
|
|
10
|
-
element.requestFullscreen()
|
|
11
|
-
} else if (element.mozRequestFullScreen) {
|
|
12
|
-
// Firefox
|
|
13
|
-
element.mozRequestFullScreen()
|
|
14
|
-
} else if (element.webkitRequestFullscreen) {
|
|
15
|
-
// Chrome, Safari and Opera
|
|
16
|
-
element.webkitRequestFullscreen()
|
|
17
|
-
} else if (element.msRequestFullscreen) {
|
|
18
|
-
// IE/Edge
|
|
19
|
-
element.msRequestFullscreen()
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// 退出全屏
|
|
24
|
-
const exitFullscreen = () => {
|
|
25
|
-
if (document.exitFullscreen) {
|
|
26
|
-
document.exitFullscreen()
|
|
27
|
-
} else if (document.mozCancelFullScreen) {
|
|
28
|
-
// Firefox
|
|
29
|
-
document.mozCancelFullScreen()
|
|
30
|
-
} else if (document.webkitExitFullscreen) {
|
|
31
|
-
// Chrome, Safari and Opera
|
|
32
|
-
document.webkitExitFullscreen()
|
|
33
|
-
} else if (document.msExitFullscreen) {
|
|
34
|
-
// IE/Edge
|
|
35
|
-
document.msExitFullscreen()
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// 全屏切换
|
|
40
|
-
const toggleFullScreen = () => {
|
|
41
|
-
if (isFullscreen.value) {
|
|
42
|
-
exitFullscreen()
|
|
43
|
-
} else {
|
|
44
|
-
enterFullscreen(document.documentElement)
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// 检查全屏状态
|
|
49
|
-
const handleFullscreenChange = () => {
|
|
50
|
-
isFullscreen.value = Boolean(document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// 监听全屏状态变化
|
|
54
|
-
onMounted(() => {
|
|
55
|
-
document.addEventListener('fullscreenchange', handleFullscreenChange)
|
|
56
|
-
document.addEventListener('webkitfullscreenchange', handleFullscreenChange)
|
|
57
|
-
document.addEventListener('mozfullscreenchange', handleFullscreenChange)
|
|
58
|
-
document.addEventListener('MSFullscreenChange', handleFullscreenChange)
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
// 清理监听器
|
|
62
|
-
onUnmounted(() => {
|
|
63
|
-
document.removeEventListener('fullscreenchange', handleFullscreenChange)
|
|
64
|
-
document.removeEventListener('webkitfullscreenchange', handleFullscreenChange)
|
|
65
|
-
document.removeEventListener('mozfullscreenchange', handleFullscreenChange)
|
|
66
|
-
document.removeEventListener('MSFullscreenChange', handleFullscreenChange)
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
return {
|
|
70
|
-
isFullscreen,
|
|
71
|
-
toggle: toggleFullScreen
|
|
72
|
-
}
|
|
73
|
-
}
|
|
1
|
+
// useFullscreen.js - 全屏功能实现
|
|
2
|
+
import { ref, onMounted, onUnmounted } from 'vue'
|
|
3
|
+
|
|
4
|
+
export function useFullscreen() {
|
|
5
|
+
const isFullscreen = ref(false)
|
|
6
|
+
|
|
7
|
+
// 进入全屏
|
|
8
|
+
const enterFullscreen = (element) => {
|
|
9
|
+
if (element.requestFullscreen) {
|
|
10
|
+
element.requestFullscreen()
|
|
11
|
+
} else if (element.mozRequestFullScreen) {
|
|
12
|
+
// Firefox
|
|
13
|
+
element.mozRequestFullScreen()
|
|
14
|
+
} else if (element.webkitRequestFullscreen) {
|
|
15
|
+
// Chrome, Safari and Opera
|
|
16
|
+
element.webkitRequestFullscreen()
|
|
17
|
+
} else if (element.msRequestFullscreen) {
|
|
18
|
+
// IE/Edge
|
|
19
|
+
element.msRequestFullscreen()
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// 退出全屏
|
|
24
|
+
const exitFullscreen = () => {
|
|
25
|
+
if (document.exitFullscreen) {
|
|
26
|
+
document.exitFullscreen()
|
|
27
|
+
} else if (document.mozCancelFullScreen) {
|
|
28
|
+
// Firefox
|
|
29
|
+
document.mozCancelFullScreen()
|
|
30
|
+
} else if (document.webkitExitFullscreen) {
|
|
31
|
+
// Chrome, Safari and Opera
|
|
32
|
+
document.webkitExitFullscreen()
|
|
33
|
+
} else if (document.msExitFullscreen) {
|
|
34
|
+
// IE/Edge
|
|
35
|
+
document.msExitFullscreen()
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// 全屏切换
|
|
40
|
+
const toggleFullScreen = () => {
|
|
41
|
+
if (isFullscreen.value) {
|
|
42
|
+
exitFullscreen()
|
|
43
|
+
} else {
|
|
44
|
+
enterFullscreen(document.documentElement)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// 检查全屏状态
|
|
49
|
+
const handleFullscreenChange = () => {
|
|
50
|
+
isFullscreen.value = Boolean(document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// 监听全屏状态变化
|
|
54
|
+
onMounted(() => {
|
|
55
|
+
document.addEventListener('fullscreenchange', handleFullscreenChange)
|
|
56
|
+
document.addEventListener('webkitfullscreenchange', handleFullscreenChange)
|
|
57
|
+
document.addEventListener('mozfullscreenchange', handleFullscreenChange)
|
|
58
|
+
document.addEventListener('MSFullscreenChange', handleFullscreenChange)
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
// 清理监听器
|
|
62
|
+
onUnmounted(() => {
|
|
63
|
+
document.removeEventListener('fullscreenchange', handleFullscreenChange)
|
|
64
|
+
document.removeEventListener('webkitfullscreenchange', handleFullscreenChange)
|
|
65
|
+
document.removeEventListener('mozfullscreenchange', handleFullscreenChange)
|
|
66
|
+
document.removeEventListener('MSFullscreenChange', handleFullscreenChange)
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
isFullscreen,
|
|
71
|
+
toggle: toggleFullScreen
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -1,254 +1,254 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<el-select ref="select"
|
|
3
|
-
v-model="defaultValue"
|
|
4
|
-
:size="size"
|
|
5
|
-
:clearable="clearable"
|
|
6
|
-
:multiple="multiple"
|
|
7
|
-
:collapse-tags="collapseTags"
|
|
8
|
-
:collapse-tags-tooltip="collapseTagsTooltip"
|
|
9
|
-
:filterable="filterable"
|
|
10
|
-
:placeholder="placeholder"
|
|
11
|
-
:disabled="disabled"
|
|
12
|
-
:filter-method="filterMethod"
|
|
13
|
-
@remove-tag="removeTag"
|
|
14
|
-
@visible-change="visibleChange"
|
|
15
|
-
@clear="clear">
|
|
16
|
-
<template #empty>
|
|
17
|
-
<div class="lw-table-select__table"
|
|
18
|
-
style="width: 100%;"
|
|
19
|
-
v-loading="loading">
|
|
20
|
-
<div class="lw-table-select__header">
|
|
21
|
-
<slot name="header"
|
|
22
|
-
:form="formData"
|
|
23
|
-
:submit="formSubmit"></slot>
|
|
24
|
-
</div>
|
|
25
|
-
<el-table ref="table"
|
|
26
|
-
:data="tableData"
|
|
27
|
-
:max-height="245"
|
|
28
|
-
:highlight-current-row="!multiple"
|
|
29
|
-
@row-click="click"
|
|
30
|
-
@select="select"
|
|
31
|
-
@select-all="selectAll">
|
|
32
|
-
<el-table-column v-if="multiple"
|
|
33
|
-
type="selection"
|
|
34
|
-
width="45"></el-table-column>
|
|
35
|
-
<el-table-column v-else
|
|
36
|
-
type="index"
|
|
37
|
-
width="45">
|
|
38
|
-
<template
|
|
39
|
-
#default="scope"><span>{{scope.$index+(currentPage - 1) * pageSize + 1}}</span></template>
|
|
40
|
-
</el-table-column>
|
|
41
|
-
<slot></slot>
|
|
42
|
-
</el-table>
|
|
43
|
-
<div class="lw-table-select__page">
|
|
44
|
-
<el-pagination small
|
|
45
|
-
background
|
|
46
|
-
layout="prev, pager, next"
|
|
47
|
-
:total="total"
|
|
48
|
-
:page-size="pageSize"
|
|
49
|
-
v-model:currentPage="currentPage"
|
|
50
|
-
@current-change="reload"></el-pagination>
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
|
-
</template>
|
|
54
|
-
</el-select>
|
|
55
|
-
</template>
|
|
56
|
-
|
|
57
|
-
<script>
|
|
58
|
-
import config from "./tableSelect";
|
|
59
|
-
|
|
60
|
-
export default {
|
|
61
|
-
props: {
|
|
62
|
-
modelValue: null,
|
|
63
|
-
apiObj: { type: Object, default: () => { } },
|
|
64
|
-
params: { type: Object, default: () => { } },
|
|
65
|
-
placeholder: { type: String, default: "请选择" },
|
|
66
|
-
size: { type: String, default: "default" },
|
|
67
|
-
clearable: { type: Boolean, default: false },
|
|
68
|
-
multiple: { type: Boolean, default: false },
|
|
69
|
-
filterable: { type: Boolean, default: false },
|
|
70
|
-
collapseTags: { type: Boolean, default: false },
|
|
71
|
-
collapseTagsTooltip: { type: Boolean, default: false },
|
|
72
|
-
disabled: { type: Boolean, default: false },
|
|
73
|
-
tableWidth: { type: Number, default: 400 },
|
|
74
|
-
mode: { type: String, default: "popover" },
|
|
75
|
-
|
|
76
|
-
// 定义什么参数就返回什么 value label 为 必须字段
|
|
77
|
-
props: { type: Object, default: () => { } }
|
|
78
|
-
},
|
|
79
|
-
data() {
|
|
80
|
-
return {
|
|
81
|
-
loading: false,
|
|
82
|
-
keyword: null,
|
|
83
|
-
defaultValue: [],
|
|
84
|
-
tableData: [],
|
|
85
|
-
pageSize: config.pageSize,
|
|
86
|
-
total: 0,
|
|
87
|
-
currentPage: 1,
|
|
88
|
-
defaultProps: {
|
|
89
|
-
label: config.props.label,
|
|
90
|
-
value: config.props.value,
|
|
91
|
-
page: config.request.page,
|
|
92
|
-
pageSize: config.request.pageSize,
|
|
93
|
-
keyword: config.request.keyword
|
|
94
|
-
},
|
|
95
|
-
formData: {}
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
computed: {
|
|
99
|
-
|
|
100
|
-
},
|
|
101
|
-
watch: {
|
|
102
|
-
modelValue: {
|
|
103
|
-
handler() {
|
|
104
|
-
this.defaultValue = this.modelValue
|
|
105
|
-
},
|
|
106
|
-
deep: true
|
|
107
|
-
}
|
|
108
|
-
},
|
|
109
|
-
mounted() {
|
|
110
|
-
this.defaultProps = Object.assign(this.defaultProps, this.props);
|
|
111
|
-
this.defaultValue = this.modelValue
|
|
112
|
-
},
|
|
113
|
-
methods: {
|
|
114
|
-
//表格显示隐藏回调
|
|
115
|
-
visibleChange(visible) {
|
|
116
|
-
if (visible) {
|
|
117
|
-
this.currentPage = 1
|
|
118
|
-
this.keyword = null
|
|
119
|
-
this.formData = {}
|
|
120
|
-
this.getData()
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
//获取表格数据
|
|
124
|
-
async getData() {
|
|
125
|
-
this.loading = true;
|
|
126
|
-
var reqData = {
|
|
127
|
-
[this.defaultProps.page]: this.currentPage - 1,
|
|
128
|
-
[this.defaultProps.pageSize]: this.pageSize,
|
|
129
|
-
[this.defaultProps.keyword]: this.keyword
|
|
130
|
-
}
|
|
131
|
-
Object.assign(reqData, this.params, this.formData)
|
|
132
|
-
var res = await this.apiObj(reqData);
|
|
133
|
-
var parseData = config.parseData(res)
|
|
134
|
-
this.tableData = parseData.rows;
|
|
135
|
-
this.total = parseData.total;
|
|
136
|
-
this.loading = false;
|
|
137
|
-
//表格默认赋值
|
|
138
|
-
this.$nextTick(() => {
|
|
139
|
-
if (this.multiple) {
|
|
140
|
-
this.defaultValue.forEach(row => {
|
|
141
|
-
var setrow = this.tableData.filter(item => item[this.defaultProps.value] === row['value'])
|
|
142
|
-
if (setrow.length > 0) {
|
|
143
|
-
this.$refs.table.toggleRowSelection(setrow[0], true);
|
|
144
|
-
}
|
|
145
|
-
})
|
|
146
|
-
} else {
|
|
147
|
-
var setrow = this.tableData.filter(item => item[this.defaultProps.value] === this.defaultValue['value'])
|
|
148
|
-
this.$refs.table.setCurrentRow(setrow[0]);
|
|
149
|
-
}
|
|
150
|
-
this.$refs.table.setScrollTop(0)
|
|
151
|
-
})
|
|
152
|
-
},
|
|
153
|
-
//插糟表单提交
|
|
154
|
-
formSubmit() {
|
|
155
|
-
this.currentPage = 1
|
|
156
|
-
this.keyword = null
|
|
157
|
-
this.getData()
|
|
158
|
-
},
|
|
159
|
-
//分页刷新表格
|
|
160
|
-
reload() {
|
|
161
|
-
this.getData()
|
|
162
|
-
},
|
|
163
|
-
// 处理选中值
|
|
164
|
-
getCurVlaue(row) {
|
|
165
|
-
const filteredRow = {};
|
|
166
|
-
// 遍历 this.defaultProps 中定义的字段并保留对应的值
|
|
167
|
-
Object.entries(this.defaultProps).forEach(([key, propKey]) => {
|
|
168
|
-
|
|
169
|
-
if (row[propKey]) {
|
|
170
|
-
filteredRow[key] = row[propKey]
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
});
|
|
174
|
-
return filteredRow
|
|
175
|
-
},
|
|
176
|
-
//表格勾选事件
|
|
177
|
-
select(rows, row) {
|
|
178
|
-
var isSelect = rows.length && rows.indexOf(row) !== -1
|
|
179
|
-
if (isSelect) {
|
|
180
|
-
this.defaultValue.push(this.getCurVlaue(row))
|
|
181
|
-
} else {
|
|
182
|
-
this.defaultValue.splice(this.defaultValue.findIndex(item => item['value'] == row[this.defaultProps.value]), 1)
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
},
|
|
186
|
-
//表格全选事件
|
|
187
|
-
selectAll(rows) {
|
|
188
|
-
var isAllSelect = rows.length > 0
|
|
189
|
-
if (isAllSelect) {
|
|
190
|
-
rows.forEach(row => {
|
|
191
|
-
var isHas = this.defaultValue.find(item => item['value'] == row[this.defaultProps.value])
|
|
192
|
-
if (!isHas) {
|
|
193
|
-
this.defaultValue.push(this.getCurVlaue(row))
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
})
|
|
197
|
-
} else {
|
|
198
|
-
this.defaultValue = []
|
|
199
|
-
}
|
|
200
|
-
this.$emit('update:modelValue', this.defaultValue);
|
|
201
|
-
this.$emit('change', this.defaultValue);
|
|
202
|
-
},
|
|
203
|
-
click(row) {
|
|
204
|
-
if (this.multiple) {
|
|
205
|
-
//处理多选点击行
|
|
206
|
-
} else {
|
|
207
|
-
this.defaultValue = this.getCurVlaue(row)
|
|
208
|
-
this.$refs.select.blur()
|
|
209
|
-
this.$emit('update:modelValue', this.defaultValue);
|
|
210
|
-
this.$emit('change', this.defaultValue);
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
//tags删除后回调
|
|
214
|
-
removeTag(tag) {
|
|
215
|
-
var row = this.findRowByKey(tag[this.defaultProps.value])
|
|
216
|
-
this.$refs.table.toggleRowSelection(row, false);
|
|
217
|
-
this.$emit('update:modelValue', this.defaultValue);
|
|
218
|
-
},
|
|
219
|
-
//清空后的回调
|
|
220
|
-
clear() {
|
|
221
|
-
this.$emit('update:modelValue', this.defaultValue);
|
|
222
|
-
},
|
|
223
|
-
// 关键值查询表格数据行
|
|
224
|
-
findRowByKey(value) {
|
|
225
|
-
return this.tableData.find(item => item[this.defaultProps.value] === value)
|
|
226
|
-
},
|
|
227
|
-
filterMethod(keyword) {
|
|
228
|
-
if (!keyword) {
|
|
229
|
-
this.keyword = null;
|
|
230
|
-
return false;
|
|
231
|
-
}
|
|
232
|
-
this.keyword = keyword;
|
|
233
|
-
this.getData()
|
|
234
|
-
},
|
|
235
|
-
// 触发select隐藏
|
|
236
|
-
blur() {
|
|
237
|
-
this.$refs.select.blur();
|
|
238
|
-
},
|
|
239
|
-
// 触发select显示
|
|
240
|
-
focus() {
|
|
241
|
-
this.$refs.select.focus();
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
</script>
|
|
246
|
-
|
|
247
|
-
<style scoped>
|
|
248
|
-
.lw-table-select__table {
|
|
249
|
-
padding: 12px;
|
|
250
|
-
}
|
|
251
|
-
.lw-table-select__page {
|
|
252
|
-
padding-top: 12px;
|
|
253
|
-
}
|
|
254
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<el-select ref="select"
|
|
3
|
+
v-model="defaultValue"
|
|
4
|
+
:size="size"
|
|
5
|
+
:clearable="clearable"
|
|
6
|
+
:multiple="multiple"
|
|
7
|
+
:collapse-tags="collapseTags"
|
|
8
|
+
:collapse-tags-tooltip="collapseTagsTooltip"
|
|
9
|
+
:filterable="filterable"
|
|
10
|
+
:placeholder="placeholder"
|
|
11
|
+
:disabled="disabled"
|
|
12
|
+
:filter-method="filterMethod"
|
|
13
|
+
@remove-tag="removeTag"
|
|
14
|
+
@visible-change="visibleChange"
|
|
15
|
+
@clear="clear">
|
|
16
|
+
<template #empty>
|
|
17
|
+
<div class="lw-table-select__table"
|
|
18
|
+
style="width: 100%;"
|
|
19
|
+
v-loading="loading">
|
|
20
|
+
<div class="lw-table-select__header">
|
|
21
|
+
<slot name="header"
|
|
22
|
+
:form="formData"
|
|
23
|
+
:submit="formSubmit"></slot>
|
|
24
|
+
</div>
|
|
25
|
+
<el-table ref="table"
|
|
26
|
+
:data="tableData"
|
|
27
|
+
:max-height="245"
|
|
28
|
+
:highlight-current-row="!multiple"
|
|
29
|
+
@row-click="click"
|
|
30
|
+
@select="select"
|
|
31
|
+
@select-all="selectAll">
|
|
32
|
+
<el-table-column v-if="multiple"
|
|
33
|
+
type="selection"
|
|
34
|
+
width="45"></el-table-column>
|
|
35
|
+
<el-table-column v-else
|
|
36
|
+
type="index"
|
|
37
|
+
width="45">
|
|
38
|
+
<template
|
|
39
|
+
#default="scope"><span>{{scope.$index+(currentPage - 1) * pageSize + 1}}</span></template>
|
|
40
|
+
</el-table-column>
|
|
41
|
+
<slot></slot>
|
|
42
|
+
</el-table>
|
|
43
|
+
<div class="lw-table-select__page">
|
|
44
|
+
<el-pagination small
|
|
45
|
+
background
|
|
46
|
+
layout="prev, pager, next"
|
|
47
|
+
:total="total"
|
|
48
|
+
:page-size="pageSize"
|
|
49
|
+
v-model:currentPage="currentPage"
|
|
50
|
+
@current-change="reload"></el-pagination>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</template>
|
|
54
|
+
</el-select>
|
|
55
|
+
</template>
|
|
56
|
+
|
|
57
|
+
<script>
|
|
58
|
+
import config from "./tableSelect";
|
|
59
|
+
|
|
60
|
+
export default {
|
|
61
|
+
props: {
|
|
62
|
+
modelValue: null,
|
|
63
|
+
apiObj: { type: Object, default: () => { } },
|
|
64
|
+
params: { type: Object, default: () => { } },
|
|
65
|
+
placeholder: { type: String, default: "请选择" },
|
|
66
|
+
size: { type: String, default: "default" },
|
|
67
|
+
clearable: { type: Boolean, default: false },
|
|
68
|
+
multiple: { type: Boolean, default: false },
|
|
69
|
+
filterable: { type: Boolean, default: false },
|
|
70
|
+
collapseTags: { type: Boolean, default: false },
|
|
71
|
+
collapseTagsTooltip: { type: Boolean, default: false },
|
|
72
|
+
disabled: { type: Boolean, default: false },
|
|
73
|
+
tableWidth: { type: Number, default: 400 },
|
|
74
|
+
mode: { type: String, default: "popover" },
|
|
75
|
+
|
|
76
|
+
// 定义什么参数就返回什么 value label 为 必须字段
|
|
77
|
+
props: { type: Object, default: () => { } }
|
|
78
|
+
},
|
|
79
|
+
data() {
|
|
80
|
+
return {
|
|
81
|
+
loading: false,
|
|
82
|
+
keyword: null,
|
|
83
|
+
defaultValue: [],
|
|
84
|
+
tableData: [],
|
|
85
|
+
pageSize: config.pageSize,
|
|
86
|
+
total: 0,
|
|
87
|
+
currentPage: 1,
|
|
88
|
+
defaultProps: {
|
|
89
|
+
label: config.props.label,
|
|
90
|
+
value: config.props.value,
|
|
91
|
+
page: config.request.page,
|
|
92
|
+
pageSize: config.request.pageSize,
|
|
93
|
+
keyword: config.request.keyword
|
|
94
|
+
},
|
|
95
|
+
formData: {}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
computed: {
|
|
99
|
+
|
|
100
|
+
},
|
|
101
|
+
watch: {
|
|
102
|
+
modelValue: {
|
|
103
|
+
handler() {
|
|
104
|
+
this.defaultValue = this.modelValue
|
|
105
|
+
},
|
|
106
|
+
deep: true
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
mounted() {
|
|
110
|
+
this.defaultProps = Object.assign(this.defaultProps, this.props);
|
|
111
|
+
this.defaultValue = this.modelValue
|
|
112
|
+
},
|
|
113
|
+
methods: {
|
|
114
|
+
//表格显示隐藏回调
|
|
115
|
+
visibleChange(visible) {
|
|
116
|
+
if (visible) {
|
|
117
|
+
this.currentPage = 1
|
|
118
|
+
this.keyword = null
|
|
119
|
+
this.formData = {}
|
|
120
|
+
this.getData()
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
//获取表格数据
|
|
124
|
+
async getData() {
|
|
125
|
+
this.loading = true;
|
|
126
|
+
var reqData = {
|
|
127
|
+
[this.defaultProps.page]: this.currentPage - 1,
|
|
128
|
+
[this.defaultProps.pageSize]: this.pageSize,
|
|
129
|
+
[this.defaultProps.keyword]: this.keyword
|
|
130
|
+
}
|
|
131
|
+
Object.assign(reqData, this.params, this.formData)
|
|
132
|
+
var res = await this.apiObj(reqData);
|
|
133
|
+
var parseData = config.parseData(res)
|
|
134
|
+
this.tableData = parseData.rows;
|
|
135
|
+
this.total = parseData.total;
|
|
136
|
+
this.loading = false;
|
|
137
|
+
//表格默认赋值
|
|
138
|
+
this.$nextTick(() => {
|
|
139
|
+
if (this.multiple) {
|
|
140
|
+
this.defaultValue.forEach(row => {
|
|
141
|
+
var setrow = this.tableData.filter(item => item[this.defaultProps.value] === row['value'])
|
|
142
|
+
if (setrow.length > 0) {
|
|
143
|
+
this.$refs.table.toggleRowSelection(setrow[0], true);
|
|
144
|
+
}
|
|
145
|
+
})
|
|
146
|
+
} else {
|
|
147
|
+
var setrow = this.tableData.filter(item => item[this.defaultProps.value] === this.defaultValue['value'])
|
|
148
|
+
this.$refs.table.setCurrentRow(setrow[0]);
|
|
149
|
+
}
|
|
150
|
+
this.$refs.table.setScrollTop(0)
|
|
151
|
+
})
|
|
152
|
+
},
|
|
153
|
+
//插糟表单提交
|
|
154
|
+
formSubmit() {
|
|
155
|
+
this.currentPage = 1
|
|
156
|
+
this.keyword = null
|
|
157
|
+
this.getData()
|
|
158
|
+
},
|
|
159
|
+
//分页刷新表格
|
|
160
|
+
reload() {
|
|
161
|
+
this.getData()
|
|
162
|
+
},
|
|
163
|
+
// 处理选中值
|
|
164
|
+
getCurVlaue(row) {
|
|
165
|
+
const filteredRow = {};
|
|
166
|
+
// 遍历 this.defaultProps 中定义的字段并保留对应的值
|
|
167
|
+
Object.entries(this.defaultProps).forEach(([key, propKey]) => {
|
|
168
|
+
|
|
169
|
+
if (row[propKey]) {
|
|
170
|
+
filteredRow[key] = row[propKey]
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
});
|
|
174
|
+
return filteredRow
|
|
175
|
+
},
|
|
176
|
+
//表格勾选事件
|
|
177
|
+
select(rows, row) {
|
|
178
|
+
var isSelect = rows.length && rows.indexOf(row) !== -1
|
|
179
|
+
if (isSelect) {
|
|
180
|
+
this.defaultValue.push(this.getCurVlaue(row))
|
|
181
|
+
} else {
|
|
182
|
+
this.defaultValue.splice(this.defaultValue.findIndex(item => item['value'] == row[this.defaultProps.value]), 1)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
},
|
|
186
|
+
//表格全选事件
|
|
187
|
+
selectAll(rows) {
|
|
188
|
+
var isAllSelect = rows.length > 0
|
|
189
|
+
if (isAllSelect) {
|
|
190
|
+
rows.forEach(row => {
|
|
191
|
+
var isHas = this.defaultValue.find(item => item['value'] == row[this.defaultProps.value])
|
|
192
|
+
if (!isHas) {
|
|
193
|
+
this.defaultValue.push(this.getCurVlaue(row))
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
})
|
|
197
|
+
} else {
|
|
198
|
+
this.defaultValue = []
|
|
199
|
+
}
|
|
200
|
+
this.$emit('update:modelValue', this.defaultValue);
|
|
201
|
+
this.$emit('change', this.defaultValue);
|
|
202
|
+
},
|
|
203
|
+
click(row) {
|
|
204
|
+
if (this.multiple) {
|
|
205
|
+
//处理多选点击行
|
|
206
|
+
} else {
|
|
207
|
+
this.defaultValue = this.getCurVlaue(row)
|
|
208
|
+
this.$refs.select.blur()
|
|
209
|
+
this.$emit('update:modelValue', this.defaultValue);
|
|
210
|
+
this.$emit('change', this.defaultValue);
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
//tags删除后回调
|
|
214
|
+
removeTag(tag) {
|
|
215
|
+
var row = this.findRowByKey(tag[this.defaultProps.value])
|
|
216
|
+
this.$refs.table.toggleRowSelection(row, false);
|
|
217
|
+
this.$emit('update:modelValue', this.defaultValue);
|
|
218
|
+
},
|
|
219
|
+
//清空后的回调
|
|
220
|
+
clear() {
|
|
221
|
+
this.$emit('update:modelValue', this.defaultValue);
|
|
222
|
+
},
|
|
223
|
+
// 关键值查询表格数据行
|
|
224
|
+
findRowByKey(value) {
|
|
225
|
+
return this.tableData.find(item => item[this.defaultProps.value] === value)
|
|
226
|
+
},
|
|
227
|
+
filterMethod(keyword) {
|
|
228
|
+
if (!keyword) {
|
|
229
|
+
this.keyword = null;
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
this.keyword = keyword;
|
|
233
|
+
this.getData()
|
|
234
|
+
},
|
|
235
|
+
// 触发select隐藏
|
|
236
|
+
blur() {
|
|
237
|
+
this.$refs.select.blur();
|
|
238
|
+
},
|
|
239
|
+
// 触发select显示
|
|
240
|
+
focus() {
|
|
241
|
+
this.$refs.select.focus();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
</script>
|
|
246
|
+
|
|
247
|
+
<style scoped>
|
|
248
|
+
.lw-table-select__table {
|
|
249
|
+
padding: 12px;
|
|
250
|
+
}
|
|
251
|
+
.lw-table-select__page {
|
|
252
|
+
padding-top: 12px;
|
|
253
|
+
}
|
|
254
|
+
</style>
|