From 34b24494625fd4d207297f5be45be8ddd90e8bf7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=89=AB=E5=9C=B0=E5=83=A7?= <357099073@qq.com>
Date: Wed, 9 Sep 2026 00:30:44 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B9=B3=E5=8F=B0=E7=AB=AF?=
=?UTF-8?q?=E7=A7=9F=E6=88=B7=E7=AB=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
backend/src/api/menu.js | 4 +-
backend/src/api/platformRole.js | 39 +++
backend/src/api/tenantUser.js | 40 +++
.../basicSettings/roles/components/detail.vue | 23 +-
.../basicSettings/roles/components/edit.vue | 41 ++-
.../src/views/basicSettings/roles/index.vue | 47 +++-
.../tenants/components/TenantUsersTab.vue | 74 +++++-
.../tenants/components/adduser.vue | 4 +-
.../users/components/userEdit.vue | 43 +++
go/controllers/backend_admin_user.go | 24 ++
go/controllers/backend_menu.go | 100 ++++++-
go/controllers/backend_role.go | 249 ++++++++++++++++++
go/controllers/platform_tenant_user.go | 8 +
go/models/admin_role.go | 3 +-
go/models/admin_role_default.go | 80 ++++++
go/models/system_tenant_user.go | 22 +-
go/routers/backend/backend.go | 12 +
go/services/tenant_user.go | 4 +
platform/src/api/tenantUser.js | 10 +-
.../tenants/components/TenantUsersTab.vue | 62 ++++-
20 files changed, 847 insertions(+), 42 deletions(-)
create mode 100644 backend/src/api/platformRole.js
create mode 100644 backend/src/api/tenantUser.js
create mode 100644 go/controllers/backend_role.go
create mode 100644 go/models/admin_role_default.go
diff --git a/backend/src/api/menu.js b/backend/src/api/menu.js
index 00cd43c..a80b66b 100644
--- a/backend/src/api/menu.js
+++ b/backend/src/api/menu.js
@@ -1,10 +1,12 @@
import request from "@/utils/request";
// 获取所有菜单
-export function getAllMenus() {
+// params.cid=2 时仅返回租户端(backend)菜单,用于角色权限编辑
+export function getAllMenus(params = {}) {
return request({
url: `/backend/allmenu`,
method: "get",
+ params,
});
}
diff --git a/backend/src/api/platformRole.js b/backend/src/api/platformRole.js
new file mode 100644
index 0000000..f0dffea
--- /dev/null
+++ b/backend/src/api/platformRole.js
@@ -0,0 +1,39 @@
+import request from '@/utils/request'
+
+// 平台端角色管理(yz_system_admin_role,可同时管理平台角色 cid=1 与租户角色 cid=2)
+export function getAllPlatformRoles() {
+ return request({
+ url: '/platform/allRoles',
+ method: 'get'
+ })
+}
+
+export function getPlatformRoleById(id) {
+ return request({
+ url: `/platform/roles/${id}`,
+ method: 'get'
+ })
+}
+
+export function createPlatformRole(data) {
+ return request({
+ url: '/platform/roles',
+ method: 'post',
+ data
+ })
+}
+
+export function updatePlatformRole(id, data) {
+ return request({
+ url: `/platform/roles/${id}`,
+ method: 'put',
+ data
+ })
+}
+
+export function deletePlatformRole(id) {
+ return request({
+ url: `/platform/roles/${id}`,
+ method: 'delete'
+ })
+}
diff --git a/backend/src/api/tenantUser.js b/backend/src/api/tenantUser.js
new file mode 100644
index 0000000..3d1e7b1
--- /dev/null
+++ b/backend/src/api/tenantUser.js
@@ -0,0 +1,40 @@
+import request from '@/utils/request'
+
+// 平台端租户用户(yz_system_tenant_user)相关接口
+export function getTenantUserList(params) {
+ return request({
+ url: '/platform/tenantUser/list',
+ method: 'get',
+ params,
+ })
+}
+
+export function getTenantUsersByTid(tid) {
+ return request({
+ url: `/platform/getTenantUsers/${tid}`,
+ method: 'get',
+ })
+}
+
+export function createTenantUser(data) {
+ return request({
+ url: '/platform/tenantUser/create',
+ method: 'post',
+ data,
+ })
+}
+
+export function editTenantUser(id, data) {
+ return request({
+ url: `/platform/tenantUser/edit/${id}`,
+ method: 'post',
+ data,
+ })
+}
+
+export function deleteTenantUser(id) {
+ return request({
+ url: `/platform/tenantUser/delete/${id}`,
+ method: 'delete',
+ })
+}
diff --git a/backend/src/views/basicSettings/roles/components/detail.vue b/backend/src/views/basicSettings/roles/components/detail.vue
index d7d1bed..188f23c 100644
--- a/backend/src/views/basicSettings/roles/components/detail.vue
+++ b/backend/src/views/basicSettings/roles/components/detail.vue
@@ -12,6 +12,11 @@
{{ roleDetail.status === 1 ? "启用" : "禁用" }}
+
+
+ {{ roleDetail.cid === 1 ? "平台角色" : "租户角色" }}
+
+
import { ref, watch, computed } from "vue";
import { ElMessage } from "element-plus";
-import { getRoleById } from "@/api/role";
+import { getPlatformRoleById } from "@/api/platformRole";
import { getAllMenus } from "@/api/menu";
interface Props {
@@ -67,11 +72,11 @@ const allMenus = ref([]);
// 监听 modelValue
watch(
() => props.modelValue,
- (val) => {
+ async (val) => {
visible.value = val;
if (val && props.roleId) {
- loadRoleDetail();
- loadMenus();
+ await loadRoleDetail();
+ await loadMenus(roleDetail.value.cid);
}
}
);
@@ -127,7 +132,7 @@ const loadRoleDetail = async () => {
loading.value = true;
try {
- const res = await getRoleById(props.roleId);
+ const res = await getPlatformRoleById(props.roleId);
if (res.code === 200) {
roleDetail.value = res.data || {};
} else {
@@ -141,10 +146,12 @@ const loadRoleDetail = async () => {
}
};
-// 加载菜单树
-const loadMenus = async () => {
+// 加载菜单树:租户角色(cid=2)只展示租户端菜单;平台角色展示全部权限
+const loadMenus = async (cid?: number) => {
try {
- const res = await getAllMenus();
+ const isTenant = cid === undefined || cid === 2;
+ const params = isTenant ? { cid: 2 } : {};
+ const res = await getAllMenus(params);
if (res.code === 200) {
allMenus.value = res.data || [];
}
diff --git a/backend/src/views/basicSettings/roles/components/edit.vue b/backend/src/views/basicSettings/roles/components/edit.vue
index 116db43..d3bbe49 100644
--- a/backend/src/views/basicSettings/roles/components/edit.vue
+++ b/backend/src/views/basicSettings/roles/components/edit.vue
@@ -12,6 +12,14 @@
+
+
+ 租户角色
+ 平台角色
+
+ 租户角色仅显示租户端菜单;平台角色显示全部权限
+
+
@@ -38,7 +46,7 @@