Skip to content

Commit 78bfee7

Browse files
committed
fix: merge table rows of members
1 parent 327b6cc commit 78bfee7

File tree

4 files changed

+54
-2
lines changed

4 files changed

+54
-2
lines changed

ui/src/views/system/role/component/Member.vue

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,13 @@
2929
</div>
3030
</div>
3131
<app-table
32-
class="mt-16"
32+
class="member-table mt-16"
3333
:data="tableData"
3434
:pagination-config="paginationConfig"
3535
@sizeChange="handleSizeChange"
3636
@changePage="getList"
3737
v-loading="loading"
38+
:span-method="objectSpanMethod"
3839
>
3940
<el-table-column prop="nick_name" :label="$t('views.userManage.userForm.nick_name.label')" />
4041
<el-table-column prop="username" :label="$t('views.login.loginForm.username.label')" />
@@ -135,6 +136,23 @@ watch(
135136
},
136137
)
137138
139+
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }: any) => {
140+
if (column.property === 'nick_name' || column.property === 'username') {
141+
const sameUserRows = tableData.value.filter(item => item.user_id === row.user_id);
142+
if (rowIndex === tableData.value.findIndex(item => item.user_id === row.user_id)) {
143+
return {
144+
rowspan: sameUserRows.length,
145+
colspan: 1
146+
};
147+
} else {
148+
return {
149+
rowspan: 0,
150+
colspan: 0
151+
};
152+
}
153+
}
154+
};
155+
138156
const addMemberDrawerRef = ref<InstanceType<typeof AddMemberDrawer>>()
139157
140158
function handleAdd() {
@@ -158,3 +176,9 @@ function handleDelete(row: RoleMemberItem) {
158176
.catch(() => {})
159177
}
160178
</script>
179+
180+
<style lang="scss" scoped>
181+
.member-table :deep(.el-table__cell):nth-child(2) {
182+
border-right: 1px solid var(--el-table-border-color);
183+
}
184+
</style>

ui/src/views/system/role/component/MemberFormContent.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
</el-select>
1313
</el-form-item>
1414
<!-- 删除按钮 -->
15-
<el-button @click="handleDelete(index)" text
15+
<el-button :disabled="props.keepOneLine && form.length === 1" @click="handleDelete(index)" text
1616
:style="{ 'margin-top': index === 0 && props.models.some((item) => item.label) ? '30px' : '' }">
1717
<el-icon>
1818
<Delete />
@@ -38,6 +38,7 @@ import type { FormItemModel } from '@/api/type/role'
3838
const props = defineProps<{
3939
models: FormItemModel[];
4040
addText?: string;
41+
keepOneLine?: boolean; // 至少保留一行
4142
}>()
4243
4344
const formRef = ref()

ui/src/views/system/user-manage/component/UserDrawer.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
{{ $t('views.userManage.roleSetting') }}</h4>
5858
<MemberFormContent ref="memberFormContentRef" :models="formItemModel" v-model:form="list"
5959
v-loading="memberFormContentLoading"
60+
keepOneLine
6061
:addText="$t('views.userManage.addRole')" v-if="user.isEE() || user.isPE()"/>
6162
<template #footer>
6263
<el-button @click.prevent="visible = false"> {{ $t('common.cancel') }}</el-button>

ui/src/views/system/workspace/component/Member.vue

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
@sizeChange="handleSizeChange"
3333
@changePage="getList"
3434
v-loading="loading"
35+
class="member-table"
36+
:span-method="objectSpanMethod"
3537
>
3638
<el-table-column prop="nick_name" :label="$t('views.userManage.userForm.nick_name.label')" />
3739
<el-table-column prop="username" :label="$t('views.login.loginForm.username.label')" />
@@ -131,6 +133,23 @@ watch(
131133
},
132134
)
133135
136+
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }: any) => {
137+
if (column.property === 'nick_name' || column.property === 'username') {
138+
const sameUserRows = tableData.value.filter(item => item.user_id === row.user_id);
139+
if (rowIndex === tableData.value.findIndex(item => item.user_id === row.user_id)) {
140+
return {
141+
rowspan: sameUserRows.length,
142+
colspan: 1
143+
};
144+
} else {
145+
return {
146+
rowspan: 0,
147+
colspan: 0
148+
};
149+
}
150+
}
151+
};
152+
134153
const addMemberDrawerRef = ref<InstanceType<typeof AddMemberDrawer>>()
135154
function handleAdd() {
136155
addMemberDrawerRef.value?.open()
@@ -155,3 +174,10 @@ function handleDelete(row: WorkspaceMemberItem) {
155174
.catch(() => {})
156175
}
157176
</script>
177+
178+
<style lang="scss" scoped>
179+
.member-table :deep(.el-table__cell):nth-child(2) {
180+
border-right: 1px solid var(--el-table-border-color);
181+
}
182+
</style>
183+

0 commit comments

Comments
 (0)