feat: 支持企业级管理模式,项目管理,细分权限

This commit is contained in:
xiaojunnuo
2026-02-10 01:57:11 +08:00
parent d1a8dd7817
commit 37340838b6
35 changed files with 559 additions and 135 deletions
@@ -0,0 +1,11 @@
import { dict } from "@fast-crud/fast-crud";
export const userDict = dict({
url: "/sys/authority/user/getSimpleUsers",
value: "id",
onReady: ({ dict }) => {
for (const item of dict.data) {
item.label = item.nickName || item.username || item.phoneCode + item.mobile;
}
},
});
@@ -6,6 +6,7 @@ import { AddReq, compute, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq,
import { useUserStore } from "/@/store/user";
import { useSettingStore } from "/@/store/settings";
import { Modal } from "ant-design-vue";
import { userDict } from "../dicts";
export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const router = useRouter();
@@ -80,17 +81,12 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
},
form: {
component: {},
helper: t("certd.ent.projectNameHelper"),
rules: [{ required: true, message: t("certd.requiredField") }],
},
column: {
width: 200,
cellRender({ row }) {
return (
<router-link to={`/sys/enterprise/project/detail`} query={{ projectId: row.id }}>
{row.name}
</router-link>
);
return <router-link to={{ path: `/sys/enterprise/project/detail`, query: { projectId: row.id } }}>{row.name}</router-link>;
},
},
},
@@ -125,6 +121,14 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
},
},
},
adminId: {
title: t("certd.fields.adminId"),
type: "dict-select",
dict: userDict,
column: {
width: 160,
},
},
createTime: {
title: t("certd.createTime"),
type: "datetime",
@@ -6,6 +6,7 @@ import * as api from "./api";
import { useSettingStore } from "/@/store/settings";
import { useUserStore } from "/@/store/user";
import { useI18n } from "/src/locales";
import { userDict } from "../../dicts";
export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const router = useRouter();
@@ -27,6 +28,8 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
return res;
};
const projectId = context.projectId;
const userStore = useUserStore();
const settingStore = useSettingStore();
const selectedRowKeys: Ref<any[]> = ref([]);
@@ -60,6 +63,11 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
minWidth: 200,
fixed: "right",
},
search: {
initialForm: {
projectId,
},
},
columns: {
id: {
title: "ID",
@@ -79,6 +87,10 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
show: false,
},
form: {
value: projectId,
show: false,
},
editForm: {
show: false,
},
column: {
@@ -87,23 +99,18 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
},
},
userId: {
title: "用户ID",
title: "用户",
type: "dict-select",
dict: dict({
url: "/sys/authority/user/getSimpleUsers",
value: "id",
label: "nickName",
labelBuilder: (item: any) => item.nickName || item.username || item.phoneCode + item.mobile,
}),
dict: userDict,
search: {
show: false,
show: true,
},
form: {
form: {},
editForm: {
show: false,
},
column: {
width: 200,
show: false,
},
},
permission: {
@@ -111,9 +118,9 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
type: "dict-select",
dict: dict({
data: [
{ label: t("certd.read"), value: "read", color: "cyan" },
{ label: t("certd.write"), value: "write", color: "blue" },
{ label: t("certd.admin"), value: "admin", color: "green" },
{ label: t("certd.ent.permission.read"), value: "read", color: "cyan" },
{ label: t("certd.ent.permission.write"), value: "write", color: "blue" },
{ label: t("certd.ent.permission.admin"), value: "admin", color: "green" },
],
}),
search: {
@@ -1,10 +1,10 @@
<template>
<fs-page class="page-project-member">
<fs-page class="page-project-detail">
<template #header>
<div class="title">
{{ t("certd.projectMemberManager") }}
{{ t("certd.ent.projectDetailManager") }}
<span class="sub">
{{ t("certd.projectMemberDescription") }}
{{ t("certd.ent.projectDetailDescription") }}
</span>
</div>
</template>
@@ -30,7 +30,7 @@ import { useRoute } from "vue-router";
const { t } = useI18n();
defineOptions({
name: "ProjectMemberManager",
name: "ProjectDetail",
});
const route = useRoute();
@@ -29,7 +29,7 @@
<a-tab-pane key="network" :tab="t('certd.sys.setting.networkSetting')">
<SettingNetwork v-if="activeKey === 'network'" />
</a-tab-pane>
<a-tab-pane key="mode" :tab="t('certd.adminMode')">
<a-tab-pane key="mode" :tab="t('certd.sys.setting.adminModeSetting')">
<SettingMode v-if="activeKey === 'mode'" />
</a-tab-pane>
</a-tabs>
@@ -1,7 +1,7 @@
<template>
<div class="sys-settings-form sys-settings-mode">
<a-form :model="formState" name="basic" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }" autocomplete="off" @finish="onFinish">
<a-form-item :label="t('certd.adminMode')" :name="['public', 'adminMode']">
<a-form-item :label="t('certd.sys.setting.adminMode')" :name="['public', 'adminMode']">
<fs-dict-radio v-model:value="formState.public.adminMode" :dict="adminModeDict" />
</a-form-item>
@@ -30,11 +30,11 @@ defineOptions({
const adminModeDict = dict({
data: [
{
label: t("certd.adminMode.enterpriseMode"),
label: t("certd.sys.setting.enterpriseMode"),
value: "enterprise",
},
{
label: t("certd.adminMode.saasMode"),
label: t("certd.sys.setting.saasMode"),
value: "saas",
},
],