优化平台端租户端

This commit is contained in:
2026-09-09 00:30:44 +08:00
parent 672c22d9b6
commit 34b2449462
20 changed files with 847 additions and 42 deletions
+35 -12
View File
@@ -15,6 +15,15 @@
</div>
<el-divider></el-divider>
<!-- 分类筛选 -->
<div class="filter-bar">
<el-radio-group v-model="typeFilter">
<el-radio-button :value="'all'">全部</el-radio-button>
<el-radio-button :value="1">平台角色</el-radio-button>
<el-radio-button :value="2">租户角色</el-radio-button>
</el-radio-group>
</div>
<!-- 错误状态 -->
<div v-if="error" class="error-state">
<el-alert title="加载失败" :message="error" type="error" show-icon />
@@ -23,14 +32,20 @@
<!-- 角色列表 -->
<div v-else>
<el-table :data="roles" stripe style="width: 100%" v-loading="loading">
<el-table-column prop="id" label="ID" width="80" align="center" />
<el-table :data="displayRoles" stripe style="width: 100%" v-loading="loading">
<el-table-column
prop="name"
label="角色名称"
min-width="150"
align="center"
/>
<el-table-column prop="cid" label="类型" width="120" align="center">
<template #default="{ row }">
<el-tag :type="row.cid === 1 ? 'warning' : 'primary'" size="small">
{{ row.cid === 1 ? "平台角色" : "租户角色" }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="status" label="状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="row.status === 1 ? 'success' : 'info'" size="small">
@@ -38,12 +53,12 @@
</el-tag>
</template>
</el-table-column>
<el-table-column
prop="rights"
label="权限"
min-width="150"
align="center"
/>
<el-table-column label="权限" min-width="150" align="center">
<template #default="{ row }">
<el-tag v-if="!row.rights" type="success" size="small">全权限</el-tag>
<el-tag v-else type="info" size="small">自定义权限</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="220" fixed="right" align="center">
<template #default="{ row }">
<el-button
@@ -96,10 +111,13 @@
</template>
<script setup lang="ts">
import { ref, onMounted } from "vue";
import { ref, computed, onMounted } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { Plus, View, Edit, Delete, Refresh } from "@element-plus/icons-vue";
import { getAllRoles, getRoleById, deleteRole } from "@/api/role";
import {
getAllPlatformRoles,
deletePlatformRole,
} from "@/api/platformRole";
import RoleEditDialog from "./components/edit.vue";
import RoleDetailDialog from "./components/detail.vue";
import { useAuthStore } from "@/stores/auth";
@@ -110,6 +128,11 @@ const authStore = useAuthStore();
const roles = ref<any[]>([]);
const loading = ref(false);
const error = ref("");
const typeFilter = ref<string | number>("all");
const displayRoles = computed(() => {
if (typeFilter.value === "all") return roles.value;
return roles.value.filter((r) => Number(r.cid) === Number(typeFilter.value));
});
const editDialogVisible = ref(false);
const detailDialogVisible = ref(false);
@@ -131,7 +154,7 @@ const fetchRoles = async () => {
loading.value = true;
error.value = "";
try {
const res = await getAllRoles();
const res = await getAllPlatformRoles();
if (res.code === 200) {
roles.value = res.data || [];
// console.log('角色列表:', roles.value);
@@ -184,7 +207,7 @@ async function handleDelete(row: any) {
loading.value = true;
try {
const res = await deleteRole(row.id);
const res = await deletePlatformRole(row.id);
if (res.code === 200) {
ElMessage.success("删除成功");
fetchRoles();