Skip to content

Commit 90cd377

Browse files
committed
feat: 显示列信息支持对象格式
1 parent df3af0a commit 90cd377

File tree

2 files changed

+76
-44
lines changed

2 files changed

+76
-44
lines changed

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

Lines changed: 60 additions & 28 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 size="mini" circle icon="el-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 size="mini" circle icon="el-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 size="mini" circle icon="el-icon-menu" />
@@ -17,9 +17,9 @@
1717
<el-checkbox :indeterminate="isIndeterminate" v-model="isChecked" @change="toggleCheckAll"> 列展示 </el-checkbox>
1818
</el-dropdown-item>
1919
<div class="check-line"></div>
20-
<template v-for="item in columns">
21-
<el-dropdown-item :key="item.key">
22-
<el-checkbox v-model="item.visible" @change="checkboxChange($event, item.label)" :label="item.label" />
20+
<template v-for="(item, key) in columns">
21+
<el-dropdown-item :key="key">
22+
<el-checkbox v-model="item.visible" @change="checkboxChange($event, key)" :label="item.label" />
2323
</el-dropdown-item>
2424
</template>
2525
</el-dropdown-menu>
@@ -30,12 +30,13 @@
3030
<el-transfer
3131
:titles="['显示', '隐藏']"
3232
v-model="value"
33-
:data="columns"
33+
:data="transferData"
3434
@change="dataChange"
3535
></el-transfer>
3636
</el-dialog>
3737
</div>
3838
</template>
39+
3940
<script>
4041
export default {
4142
name: "RightToolbar",
@@ -47,17 +48,18 @@ export default {
4748
title: "显示/隐藏",
4849
// 是否显示弹出层
4950
open: false
50-
};
51+
}
5152
},
5253
props: {
5354
/* 是否显示检索条件 */
5455
showSearch: {
5556
type: Boolean,
5657
default: true
5758
},
58-
/* 显隐列信息 */
59+
/* 显隐列信息(数组格式、对象格式) */
5960
columns: {
60-
type: Array
61+
type: [Array, Object],
62+
default: () => ({})
6163
},
6264
/* 是否显示检索图标 */
6365
search: {
@@ -77,64 +79,94 @@ export default {
7779
},
7880
computed: {
7981
style() {
80-
const ret = {};
82+
const ret = {}
8183
if (this.gutter) {
82-
ret.marginRight = `${this.gutter / 2}px`;
84+
ret.marginRight = `${this.gutter / 2}px`
8385
}
84-
return ret;
86+
return ret
8587
},
8688
isChecked: {
8789
get() {
88-
return this.columns.every((col) => col.visible);
90+
return Array.isArray(this.columns) ? this.columns.every((col) => col.visible) : Object.values(this.columns).every((col) => col.visible)
8991
},
9092
set() {}
9193
},
9294
isIndeterminate() {
93-
return this.columns.some((col) => col.visible) && !this.isChecked;
95+
return Array.isArray(this.columns) ? this.columns.some((col) => col.visible) && !this.isChecked : Object.values(this.columns).some((col) => col.visible) && !this.isChecked
96+
},
97+
transferData() {
98+
if (Array.isArray(this.columns)) {
99+
return this.columns.map((item, index) => ({ key: index, label: item.label }))
100+
} else {
101+
return Object.keys(this.columns).map((key, index) => ({ key: index, label: this.columns[key].label }))
102+
}
94103
}
95104
},
96105
created() {
97106
if (this.showColumnsType == 'transfer') {
98-
// 显隐列初始默认隐藏列
99-
for (let item in this.columns) {
100-
if (this.columns[item].visible === false) {
101-
this.value.push(parseInt(item));
107+
// transfer穿梭显隐列初始默认隐藏列
108+
if (Array.isArray(this.columns)) {
109+
for (let item in this.columns) {
110+
if (this.columns[item].visible === false) {
111+
this.value.push(parseInt(item))
112+
}
102113
}
114+
} else {
115+
Object.keys(this.columns).forEach((key, index) => {
116+
if (this.columns[key].visible === false) {
117+
this.value.push(index)
118+
}
119+
})
103120
}
104121
}
105122
},
106123
methods: {
107124
// 搜索
108125
toggleSearch() {
109-
this.$emit("update:showSearch", !this.showSearch);
126+
this.$emit("update:showSearch", !this.showSearch)
110127
},
111128
// 刷新
112129
refresh() {
113-
this.$emit("queryTable");
130+
this.$emit("queryTable")
114131
},
115132
// 右侧列表元素变化
116133
dataChange(data) {
117-
for (let item in this.columns) {
118-
const key = this.columns[item].key;
119-
this.columns[item].visible = !data.includes(key);
134+
if (Array.isArray(this.columns)) {
135+
for (let item in this.columns) {
136+
const key = this.columns[item].key
137+
this.columns[item].visible = !data.includes(key)
138+
}
139+
} else {
140+
Object.keys(this.columns).forEach((key, index) => {
141+
this.columns[key].visible = !data.includes(index)
142+
})
120143
}
121144
},
122145
// 打开显隐列dialog
123146
showColumn() {
124-
this.open = true;
147+
this.open = true
125148
},
126149
// 单勾选
127-
checkboxChange(event, label) {
128-
this.columns.filter(item => item.label == label)[0].visible = event;
150+
checkboxChange(event, key) {
151+
if (Array.isArray(this.columns)) {
152+
this.columns.filter(item => item.key == key)[0].visible = event
153+
} else {
154+
this.columns[key].visible = event
155+
}
129156
},
130157
// 切换全选/反选
131158
toggleCheckAll() {
132-
const newValue = !this.isChecked;
133-
this.columns.forEach((col) => (col.visible = newValue))
159+
const newValue = !this.isChecked
160+
if (Array.isArray(this.columns)) {
161+
this.columns.forEach((col) => (col.visible = newValue))
162+
} else {
163+
Object.values(this.columns).forEach((col) => (col.visible = newValue))
164+
}
134165
}
135166
},
136-
};
167+
}
137168
</script>
169+
138170
<style lang="scss" scoped>
139171
::v-deep .el-transfer__button {
140172
border-radius: 50%;

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

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,12 @@
140140

141141
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
142142
<el-table-column type="selection" width="50" align="center" />
143-
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
144-
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
145-
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
146-
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
147-
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
148-
<el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
143+
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns.userId.visible" />
144+
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns.userName.visible" :show-overflow-tooltip="true" />
145+
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns.nickName.visible" :show-overflow-tooltip="true" />
146+
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns.deptName.visible" :show-overflow-tooltip="true" />
147+
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns.phonenumber.visible" width="120" />
148+
<el-table-column label="状态" align="center" key="status" v-if="columns.status.visible">
149149
<template slot-scope="scope">
150150
<el-switch
151151
v-model="scope.row.status"
@@ -155,7 +155,7 @@
155155
></el-switch>
156156
</template>
157157
</el-table-column>
158-
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
158+
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns.createTime.visible" width="160">
159159
<template slot-scope="scope">
160160
<span>{{ parseTime(scope.row.createTime) }}</span>
161161
</template>
@@ -421,15 +421,15 @@ export default {
421421
deptId: undefined
422422
},
423423
// 列信息
424-
columns: [
425-
{ key: 0, label: `用户编号`, visible: true },
426-
{ key: 1, label: `用户名称`, visible: true },
427-
{ key: 2, label: `用户昵称`, visible: true },
428-
{ key: 3, label: `部门`, visible: true },
429-
{ key: 4, label: `手机号码`, visible: true },
430-
{ key: 5, label: `状态`, visible: true },
431-
{ key: 6, label: `创建时间`, visible: true }
432-
],
424+
columns: {
425+
userId: { label: '用户编号', visible: true },
426+
userName: { label: '用户名称', visible: true },
427+
nickName: { label: '用户昵称', visible: true },
428+
deptName: { label: '部门', visible: true },
429+
phonenumber: { label: '手机号码', visible: true },
430+
status: { label: '状态', visible: true },
431+
createTime: { label: '创建时间', visible: true }
432+
},
433433
// 表单校验
434434
rules: {
435435
userName: [

0 commit comments

Comments
 (0)