feat(角色管理): 添加获取全部角色接口并优化角色排序逻辑

- 新增getRoleAllApi接口用于获取所有角色数据
- 在角色列表查询中使用新接口并添加排序逻辑,将base角色置顶,admin角色置底
- 添加空值检查防止角色信息未找到时出错
- 在企业微信余额模块中,将总余额显示拆分为总借呗和已用借呗,并更新相关接口返回类型
This commit is contained in:
dzq 2025-05-29 10:04:10 +08:00
parent 9862f8bff8
commit dd957140e4
5 changed files with 51 additions and 13 deletions

View File

@ -4,6 +4,13 @@ import { UserDTO } from "../system/user";
/**
*
*/
export interface QyUserStatsDTO {
/** 用户余额 */
balance?: number;
/** 已使用余额 */
useBalance?: number;
}
export interface QyUserDTO {
/** 用户ID导出列用户ID */
id?: number;
@ -131,7 +138,7 @@ export const getQyUserDetailApi = (id: number) => {
};
export const getTotalBalanceApi = (corpid: string) => {
return http.request<ResponseData<number>>("get", `/qywx/users/getTotalBalance`, {
return http.request<ResponseData<QyUserStatsDTO>>("get", `/qywx/users/getTotalBalance`, {
params: { corpid }
});
};

View File

@ -30,6 +30,16 @@ export function getRoleListApi(params: RoleQuery) {
);
}
export function getRoleAllApi(params: RoleQuery) {
return http.request<ResponseData<RoleDTO[]>>(
"get",
"/system/role/all",
{
params
}
);
}
export function getRoleInfoApi(roleId: number) {
return http.request<ResponseData<RoleDTO>>("get", "/system/role/" + roleId);
}

View File

@ -34,13 +34,13 @@ const pagination = ref({
const loading = ref(false);
const dataList = ref<QyUserDTO[]>([]);
const totalBalance = ref(0);
const balanceData = ref([
{
name: '用户总余额', value:
totalBalance.value.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })
+ '元'
name: '用户总借呗', value: '0元',
},
{
name: '已用总借呗', value: '0元',
},
]);
@ -93,8 +93,10 @@ const handlePaginationChange = () => getList();
const getTotalBalance = async () => {
try {
const { data } = await getTotalBalanceApi(wxStore.corpid);
totalBalance.value = data;
balanceData.value[0].value = data.toLocaleString('en-US',
balanceData.value[0].value = data.balance.toLocaleString('en-US',
{ minimumFractionDigits: 2, maximumFractionDigits: 2 })
+ '元';
balanceData.value[1].value = data.useBalance.toLocaleString('en-US',
{ minimumFractionDigits: 2, maximumFractionDigits: 2 })
+ '元';
} catch (error) {
@ -156,8 +158,16 @@ getList().then(() => getTotalBalance());
<el-table ref="tableRef" v-loading="loading" :data="dataList" border>
<el-table-column label="用户ID" prop="id" width="80" />
<el-table-column label="姓名" prop="name" width="200" />
<el-table-column label="余额" prop="balance" width="230">
<template #default="{ row }">{{ row.balance.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 2 }) || 0 }}</template>
<el-table-column label="借呗" prop="balance" width="230">
<template #default="{ row }">{{ row.balance.toLocaleString('en-US', { minimumFractionDigits: 0,
maximumFractionDigits: 2 }) || 0 }}</template>
</el-table-column>
<el-table-column label="已用借呗" prop="balance" width="230">
<template #default="{ row }">{{ row.useBalance.toLocaleString('en-US', {
minimumFractionDigits: 0,
maximumFractionDigits: 2
}) || 0 }}
</template>
</el-table-column>
<el-table-column label="手机号" prop="mobile" />
<!-- <el-table-column label="所属部门" prop="department" /> -->

View File

@ -81,6 +81,9 @@ const rules: FormRules = {
watch(activeTab, async (val) => {
console.log("activeTab", val); // key
opRow.value = dataList.value.find(item => item.roleKey == val);
if (!opRow.value) {
return;
}
await getRoleInfo("update", opRow.value);
Object.assign(formData, opRow.value);
formData.menuIds = opRow.value.selectedMenuList;
@ -154,6 +157,7 @@ async function handleConfirm() {
try {
await formRef.value?.validate();
loading.value = true;
console.log("opType", opType.value);
if (opType.value === 'add') {
await addRoleApi(formData as AddRoleCommand);
} else {

View File

@ -2,6 +2,7 @@ import dayjs from "dayjs";
import { message } from "@/utils/message";
import {
deleteRoleApi,
getRoleAllApi,
getRoleListApi,
RoleDTO,
RoleQuery
@ -150,10 +151,16 @@ export function useRole() {
async function onSearch() {
try {
loading.value = true;
const { data } = await getRoleListApi(toRaw(form));
const { data } = await getRoleAllApi(toRaw(form));
console.log("role list", data);
dataList.value = data.rows;
pagination.total = data.total;
// 重新排序base排第一admin排最后
dataList.value = data.sort((a, b) => {
if (a.roleKey === 'base') return -1;
if (b.roleKey === 'base') return 1;
if (a.roleKey === 'admin') return 1;
if (b.roleKey === 'admin') return -1;
return 0;
});
} catch (e) {
console.error(e);
ElMessage.error((e as Error)?.message || "加载失败");
@ -190,7 +197,7 @@ export function useRole() {
form,
loading,
columns,
dataList,
dataList,
activeTab,
pagination,
onSearch,