Skip to content

Commit ac3056b

Browse files
committed
feat: 显示列信息支持对象格式
1 parent 10719a4 commit ac3056b

File tree

2 files changed

+62
-37
lines changed

2 files changed

+62
-37
lines changed

ruoyi-fastapi-frontend/src/components/RightToolbar/index.vue

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<el-tooltip class="item" effect="dark" content="刷新" placement="top">
88
<el-button circle icon="Refresh" @click="refresh()" />
99
</el-tooltip>
10-
<el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="columns">
10+
<el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="Object.keys(columns).length > 0">
1111
<el-button circle icon="Menu" @click="showColumn()" v-if="showColumnsType == 'transfer'"/>
1212
<el-dropdown trigger="click" :hide-on-click="false" style="padding-left: 12px" v-if="showColumnsType == 'checkbox'">
1313
<el-button circle icon="Menu" />
@@ -18,9 +18,9 @@
1818
<el-checkbox :indeterminate="isIndeterminate" v-model="isChecked" @change="toggleCheckAll"> 列展示 </el-checkbox>
1919
</el-dropdown-item>
2020
<div class="check-line"></div>
21-
<template v-for="item in columns" :key="item.key">
21+
<template v-for="(item, key) in columns" :key="item.key">
2222
<el-dropdown-item>
23-
<el-checkbox v-model="item.visible" @change="checkboxChange($event, item.label)" :label="item.label" />
23+
<el-checkbox v-model="item.visible" @change="checkboxChange($event, key)" :label="item.label" />
2424
</el-dropdown-item>
2525
</template>
2626
</el-dropdown-menu>
@@ -32,7 +32,7 @@
3232
<el-transfer
3333
:titles="['显示', '隐藏']"
3434
v-model="value"
35-
:data="columns"
35+
:data="transferData"
3636
@change="dataChange"
3737
></el-transfer>
3838
</el-dialog>
@@ -46,9 +46,10 @@ const props = defineProps({
4646
type: Boolean,
4747
default: true
4848
},
49-
/* 显隐列信息 */
49+
/* 显隐列信息(数组格式、对象格式) */
5050
columns: {
51-
type: Array
51+
type: [Array, Object],
52+
default: () => ({})
5253
},
5354
/* 是否显示检索图标 */
5455
search: {
@@ -82,14 +83,15 @@ const style = computed(() => {
8283
ret.marginRight = `${props.gutter / 2}px`
8384
}
8485
return ret
85-
});
86+
})
8687
8788
// 是否全选/半选 状态
8889
const isChecked = computed({
89-
get: () => props.columns.every(col => col.visible),
90+
get: () => Array.isArray(props.columns) ? props.columns.every(col => col.visible) : Object.values(props.columns).every((col) => col.visible),
9091
set: () => {}
9192
})
92-
const isIndeterminate = computed(() => props.columns.some((col) => col.visible) && !isChecked.value)
93+
const isIndeterminate = computed(() => Array.isArray(props.columns) ? props.columns.some((col) => col.visible) && !isChecked.value : Object.values(props.columns).some((col) => col.visible) && !isChecked.value)
94+
const transferData = computed(() => Array.isArray(props.columns) ? props.columns.map((item, index) => ({ key: index, label: item.label })) : Object.keys(props.columns).map((key, index) => ({ key: index, label: props.columns[key].label })))
9395
9496
// 搜索
9597
function toggleSearch() {
@@ -98,14 +100,20 @@ function toggleSearch() {
98100
99101
// 刷新
100102
function refresh() {
101-
emits("queryTable");
103+
emits("queryTable")
102104
}
103105
104106
// 右侧列表元素变化
105107
function dataChange(data) {
106-
for (let item in props.columns) {
107-
const key = props.columns[item].key
108-
props.columns[item].visible = !data.includes(key)
108+
if (Array.isArray(props.columns)) {
109+
for (let item in props.columns) {
110+
const key = props.columns[item].key
111+
props.columns[item].visible = !data.includes(key)
112+
}
113+
} else {
114+
Object.keys(props.columns).forEach((key, index) => {
115+
props.columns[key].visible = !data.includes(index)
116+
})
109117
}
110118
}
111119
@@ -114,24 +122,40 @@ function showColumn() {
114122
open.value = true
115123
}
116124
117-
if (props.showColumnsType == 'transfer') {
118-
// 显隐列初始默认隐藏列
119-
for (let item in props.columns) {
120-
if (props.columns[item].visible === false) {
121-
value.value.push(parseInt(item))
125+
if (props.showColumnsType == "transfer") {
126+
// transfer穿梭显隐列初始默认隐藏列
127+
if (Array.isArray(props.columns)) {
128+
for (let item in props.columns) {
129+
if (props.columns[item].visible === false) {
130+
value.value.push(parseInt(item))
131+
}
122132
}
133+
} else {
134+
Object.keys(props.columns).forEach((key, index) => {
135+
if (props.columns[key].visible === false) {
136+
value.value.push(index)
137+
}
138+
})
123139
}
124140
}
125141
126142
// 单勾选
127-
function checkboxChange(event, label) {
128-
props.columns.filter(item => item.label == label)[0].visible = event
143+
function checkboxChange(event, key) {
144+
if (Array.isArray(props.columns)) {
145+
props.columns.filter(item => item.key == key)[0].visible = event
146+
} else {
147+
props.columns[key].visible = event
148+
}
129149
}
130150
131151
// 切换全选/反选
132152
function toggleCheckAll() {
133153
const newValue = !isChecked.value
134-
props.columns.forEach((col) => (col.visible = newValue))
154+
if (Array.isArray(props.columns)) {
155+
props.columns.forEach((col) => (col.visible = newValue))
156+
} else {
157+
Object.values(props.columns).forEach((col) => (col.visible = newValue))
158+
}
135159
}
136160
</script>
137161

ruoyi-fastapi-frontend/src/views/system/user/index.vue

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -164,45 +164,45 @@
164164
align="center"
165165
key="userId"
166166
prop="userId"
167-
v-if="columns[0].visible"
167+
v-if="columns.userId.visible"
168168
/>
169169
<el-table-column
170170
label="用户名称"
171171
align="center"
172172
key="userName"
173173
prop="userName"
174-
v-if="columns[1].visible"
174+
v-if="columns.userName.visible"
175175
:show-overflow-tooltip="true"
176176
/>
177177
<el-table-column
178178
label="用户昵称"
179179
align="center"
180180
key="nickName"
181181
prop="nickName"
182-
v-if="columns[2].visible"
182+
v-if="columns.nickName.visible"
183183
:show-overflow-tooltip="true"
184184
/>
185185
<el-table-column
186186
label="部门"
187187
align="center"
188188
key="deptName"
189189
prop="dept.deptName"
190-
v-if="columns[3].visible"
190+
v-if="columns.deptName.visible"
191191
:show-overflow-tooltip="true"
192192
/>
193193
<el-table-column
194194
label="手机号码"
195195
align="center"
196196
key="phonenumber"
197197
prop="phonenumber"
198-
v-if="columns[4].visible"
198+
v-if="columns.phonenumber.visible"
199199
width="120"
200200
/>
201201
<el-table-column
202202
label="状态"
203203
align="center"
204204
key="status"
205-
v-if="columns[5].visible"
205+
v-if="columns.status.visible"
206206
>
207207
<template #default="scope">
208208
<el-switch
@@ -217,7 +217,7 @@
217217
label="创建时间"
218218
align="center"
219219
prop="createTime"
220-
v-if="columns[6].visible"
220+
v-if="columns.createTime.visible"
221221
width="160"
222222
>
223223
<template #default="scope">
@@ -556,15 +556,16 @@ const upload = reactive({
556556
url: import.meta.env.VITE_APP_BASE_API + "/system/user/importData",
557557
});
558558
// 列显隐信息
559-
const columns = ref([
560-
{ key: 0, label: `用户编号`, visible: true },
561-
{ key: 1, label: `用户名称`, visible: true },
562-
{ key: 2, label: `用户昵称`, visible: true },
563-
{ key: 3, label: `部门`, visible: true },
564-
{ key: 4, label: `手机号码`, visible: true },
565-
{ key: 5, label: `状态`, visible: true },
566-
{ key: 6, label: `创建时间`, visible: true },
567-
]);
559+
560+
const columns = ref({
561+
userId: { label: "用户编号", visible: true },
562+
userName: { label: "用户名称", visible: true },
563+
nickName: { label: "用户昵称", visible: true },
564+
deptName: { label: "部门", visible: true },
565+
phonenumber: { label: "手机号码", visible: true },
566+
status: { label: "状态", visible: true },
567+
createTime: { label: "创建时间", visible: true },
568+
});
568569
569570
const data = reactive({
570571
form: {},

0 commit comments

Comments
 (0)