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

115 lines
3.6 KiB
Vue
Raw Normal View History

2025-06-10 11:25:17 +00:00
<template>
2025-06-11 08:00:35 +00:00
<div class="p-24 pt-0">
<div class="flex-between mb-16">
<el-button type="primary" @click="handleAdd">
{{ $t('views.role.member.add') }}
</el-button>
<div class="flex complex-search">
<el-select class="complex-search__left" v-model="searchType" style="width: 120px">
2025-06-13 09:38:37 +00:00
<el-option :label="$t('views.login.loginForm.username.label')" value="username" />
2025-06-11 08:00:35 +00:00
</el-select>
<el-input v-if="searchType === 'username'" v-model="searchForm.username" @change="getList"
2025-06-13 09:38:37 +00:00
:placeholder="$t('common.inputPlaceholder')" style="width: 220px" clearable />
2025-06-11 08:00:35 +00:00
</div>
</div>
2025-06-13 09:38:37 +00:00
<app-table class="mt-16" :data="tableData" :pagination-config="paginationConfig" @sizeChange="handleSizeChange"
@changePage="getList" v-loading="loading">
<el-table-column prop="nick_name" :label="$t('views.userManage.userForm.nick_name.label')" />
<el-table-column prop="username" :label="$t('views.login.loginForm.username.label')" />
<el-table-column v-if="props.currentRole?.type !== RoleTypeEnum.ADMIN" prop="workspace_name"
:label="$t('views.role.member.workspace')" />
2025-06-11 08:00:35 +00:00
<el-table-column :label="$t('common.operation')" width="100" fixed="right">
<template #default="{ row }">
2025-06-13 09:38:37 +00:00
<el-tooltip effect="dark" :content="`${$t('views.role.member.delete.button')}`" placement="top">
2025-06-11 12:20:02 +00:00
<el-button type="primary" text @click.stop="handleDelete(row)">
2025-06-11 08:00:35 +00:00
<el-icon>
2025-06-13 09:38:37 +00:00
<Delete />
2025-06-11 08:00:35 +00:00
</el-icon>
</el-button>
</el-tooltip>
</template>
</el-table-column>
</app-table>
</div>
2025-06-13 09:38:37 +00:00
<AddMemberDrawer ref="addMemberDrawerRef" :currentRole="props.currentRole" @refresh="getList" />
2025-06-10 11:25:17 +00:00
</template>
2025-06-11 08:00:35 +00:00
<script setup lang="ts">
2025-06-13 09:38:37 +00:00
import { onMounted, ref, reactive, watch } from 'vue'
2025-06-11 08:00:35 +00:00
import RoleApi from '@/api/system/role'
2025-06-13 09:38:37 +00:00
import type { RoleItem, RoleMemberItem } from '@/api/type/role'
import { MsgSuccess, MsgConfirm } from '@/utils/message'
import { t } from '@/locales'
2025-06-11 12:20:02 +00:00
import AddMemberDrawer from './AddMemberDrawer.vue'
2025-06-13 09:38:37 +00:00
import { RoleTypeEnum } from '@/enums/system'
2025-06-11 08:00:35 +00:00
const props = defineProps<{
currentRole?: RoleItem
}>()
const loading = ref(false)
const searchType = ref('username')
const searchForm = ref<Record<string, any>>({
username: '',
})
const paginationConfig = reactive({
current_page: 1,
page_size: 20,
total: 0,
})
const tableData = ref<RoleMemberItem[]>([])
async function getList() {
try {
const params = {
[searchType.value]: searchForm.value[searchType.value],
}
const res = await RoleApi.getRoleMemberList(props.currentRole?.id as string, paginationConfig, params, loading)
2025-06-11 12:20:02 +00:00
tableData.value = res.data.records
paginationConfig.total = res.data.total
2025-06-11 08:00:35 +00:00
} catch (error) {
console.error(error)
}
}
function handleSizeChange() {
paginationConfig.current_page = 1
getList()
}
onMounted(() => {
getList()
})
watch(() => props.currentRole?.id, () => {
getList()
})
2025-06-11 12:20:02 +00:00
const addMemberDrawerRef = ref<InstanceType<typeof AddMemberDrawer>>()
2025-06-13 04:05:56 +00:00
2025-06-11 08:00:35 +00:00
function handleAdd() {
2025-06-11 12:20:02 +00:00
addMemberDrawerRef.value?.open();
2025-06-11 08:00:35 +00:00
}
function handleDelete(row: RoleMemberItem) {
MsgConfirm(
`${t('views.role.member.delete.confirmTitle')}${row.nick_name} ?`, '',
{
confirmButtonText: t('common.confirm'),
confirmButtonClass: 'danger',
},
)
.then(() => {
loading.value = true
RoleApi.deleteRoleMember(props.currentRole?.id as string, row.user_relation_id, loading).then(() => {
MsgSuccess(t('common.deleteSuccess'))
getList()
})
})
2025-06-13 04:05:56 +00:00
.catch(() => {
})
2025-06-11 08:00:35 +00:00
}
2025-06-13 04:05:56 +00:00
</script>