diff --git a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts index 58a37f091..d6c4123db 100644 --- a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts @@ -883,4 +883,7 @@ export default { enterpriseMode: "企业模式", saasMode: "SaaS模式", }, + ent: { + projectName: "项目名称", + }, }; diff --git a/packages/ui/certd-client/src/router/source/modules/sys.ts b/packages/ui/certd-client/src/router/source/modules/sys.ts index 85357a6de..4cd71b0ce 100644 --- a/packages/ui/certd-client/src/router/source/modules/sys.ts +++ b/packages/ui/certd-client/src/router/source/modules/sys.ts @@ -215,10 +215,10 @@ export const sysResources = [ }, }, { - title: "certd.sysResources.projectUserManager", - name: "ProjectUserManager", - path: "/sys/enterprise/project/user", - component: "/sys/enterprise/project/user/index.vue", + title: "certd.sysResources.projectMemberManager", + name: "ProjectMemberManager", + path: "/sys/enterprise/project/member", + component: "/sys/enterprise/project/member/index.vue", meta: { isMenu: false, show: true, diff --git a/packages/ui/certd-client/src/views/sys/enterprise/project/api.ts b/packages/ui/certd-client/src/views/sys/enterprise/project/api.ts index f71795b3c..85cff52ac 100644 --- a/packages/ui/certd-client/src/views/sys/enterprise/project/api.ts +++ b/packages/ui/certd-client/src/views/sys/enterprise/project/api.ts @@ -1,6 +1,7 @@ import { request } from "/src/api/service"; -const apiPrefix = "/sys/project/provider"; +const apiPrefix = "/sys/enterprise/project"; +const userApiPrefix = "/sys/authority/user"; export async function GetList(query: any) { return await request({ @@ -58,14 +59,6 @@ export async function DeleteBatch(ids: any[]) { }); } -export async function SetDefault(id: any) { - return await request({ - url: apiPrefix + "/setDefault", - method: "post", - data: { id }, - }); -} - export async function SetDisabled(id: any, disabled: boolean) { return await request({ url: apiPrefix + "/setDisabled", diff --git a/packages/ui/certd-client/src/views/sys/enterprise/project/crud.tsx b/packages/ui/certd-client/src/views/sys/enterprise/project/crud.tsx index 025a168bb..e6d4dcb61 100644 --- a/packages/ui/certd-client/src/views/sys/enterprise/project/crud.tsx +++ b/packages/ui/certd-client/src/views/sys/enterprise/project/crud.tsx @@ -72,128 +72,21 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat show: false, }, }, - domain: { - title: t("certd.cnameDomain"), + name: { + title: t("certd.ent.projectName"), type: "text", - editForm: { - component: { - disabled: true, - }, - }, search: { show: true, }, form: { - component: { - placeholder: t("certd.cnameDomainPlaceholder"), - }, - helper: t("certd.cnameDomainHelper"), - rules: [ - { required: true, message: t("certd.requiredField") }, - { pattern: /^[^*]+$/, message: t("certd.cnameDomainPattern") }, - ], + component: {}, + helper: t("certd.ent.projectNameHelper"), + rules: [{ required: true, message: t("certd.requiredField") }], }, column: { width: 200, }, }, - dnsProviderType: { - title: t("certd.dnsProvider"), - type: "dict-select", - search: { - show: true, - }, - dict: dict({ - url: "pi/dnsProvider/list", - value: "key", - label: "title", - }), - form: { - rules: [{ required: true, message: t("certd.requiredField") }], - }, - column: { - width: 150, - component: { - color: "auto", - }, - }, - }, - accessId: { - title: t("certd.dnsProviderAuthorization"), - type: "dict-select", - dict: dict({ - url: "/pi/access/list", - value: "id", - label: "name", - }), - form: { - component: { - name: "access-selector", - vModel: "modelValue", - type: compute(({ form }) => { - return form.dnsProviderType; - }), - }, - rules: [{ required: true, message: t("certd.requiredField") }], - }, - column: { - width: 150, - component: { - color: "auto", - }, - }, - }, - isDefault: { - title: t("certd.isDefault"), - type: "dict-switch", - dict: dict({ - data: [ - { label: t("certd.yes"), value: true, color: "success" }, - { label: t("certd.no"), value: false, color: "default" }, - ], - }), - form: { - value: false, - rules: [{ required: true, message: t("certd.selectIsDefault") }], - }, - column: { - align: "center", - width: 100, - }, - }, - setDefault: { - title: t("certd.setDefault"), - type: "text", - form: { - show: false, - }, - column: { - width: 100, - align: "center", - conditionalRenderDisabled: true, - cellRender: ({ row }) => { - if (row.isDefault) { - return; - } - const onClick = async () => { - Modal.confirm({ - title: t("certd.prompt"), - content: t("certd.confirmSetDefault"), - onOk: async () => { - await api.SetDefault(row.id); - await crudExpose.doRefresh(); - }, - }); - }; - - return ( - - {t("certd.setAsDefault")} - - ); - }, - }, - }, disabled: { title: t("certd.disabled"), type: "dict-switch", diff --git a/packages/ui/certd-client/src/views/sys/enterprise/project/index.vue b/packages/ui/certd-client/src/views/sys/enterprise/project/index.vue index e1f2427df..0022b28a1 100644 --- a/packages/ui/certd-client/src/views/sys/enterprise/project/index.vue +++ b/packages/ui/certd-client/src/views/sys/enterprise/project/index.vue @@ -2,13 +2,7 @@ - {{ t("certd.cnameTitle") }} - - {{ t("certd.cnameDescription") }} - - {{ t("certd.cnameLinkText") }} - - + {{ t("certd.sysResources.projectManager") }} @@ -32,7 +26,7 @@ import { useI18n } from "/src/locales"; const { t } = useI18n(); defineOptions({ - name: "CnameProvider", + name: "ProjectManager", }); const { crudBinding, crudRef, crudExpose, context } = useFs({ createCrudOptions }); diff --git a/packages/ui/certd-client/src/views/sys/enterprise/project/member/api.ts b/packages/ui/certd-client/src/views/sys/enterprise/project/member/api.ts new file mode 100644 index 000000000..bff9f6adf --- /dev/null +++ b/packages/ui/certd-client/src/views/sys/enterprise/project/member/api.ts @@ -0,0 +1,67 @@ +import { request } from "/src/api/service"; + +const apiPrefix = "/sys/enterprise/projectMember"; +const userApiPrefix = "/sys/authority/user"; +export async function GetList(query: any) { + return await request({ + url: apiPrefix + "/page", + method: "post", + data: query, + }); +} + +export async function AddObj(obj: any) { + return await request({ + url: apiPrefix + "/add", + method: "post", + data: obj, + }); +} + +export async function UpdateObj(obj: any) { + return await request({ + url: apiPrefix + "/update", + method: "post", + data: obj, + }); +} + +export async function DelObj(id: any) { + return await request({ + url: apiPrefix + "/delete", + method: "post", + params: { id }, + }); +} + +export async function GetObj(id: any) { + return await request({ + url: apiPrefix + "/info", + method: "post", + params: { id }, + }); +} + +export async function GetDetail(id: any) { + return await request({ + url: apiPrefix + "/detail", + method: "post", + params: { id }, + }); +} + +export async function DeleteBatch(ids: any[]) { + return await request({ + url: apiPrefix + "/deleteByIds", + method: "post", + data: { ids }, + }); +} + +export async function GetUserSimpleByIds(query: any) { + return await request({ + url: userApiPrefix + "/getSimpleByIds", + method: "post", + data: query, + }); +} diff --git a/packages/ui/certd-client/src/views/sys/enterprise/project/member/crud.tsx b/packages/ui/certd-client/src/views/sys/enterprise/project/member/crud.tsx new file mode 100644 index 000000000..07144fadd --- /dev/null +++ b/packages/ui/certd-client/src/views/sys/enterprise/project/member/crud.tsx @@ -0,0 +1,155 @@ +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; +import { Modal } from "ant-design-vue"; +import { Ref, ref } from "vue"; +import { useRouter } from "vue-router"; +import * as api from "./api"; +import { useSettingStore } from "/@/store/settings"; +import { useUserStore } from "/@/store/user"; +import { useI18n } from "/src/locales"; + +export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const router = useRouter(); + const { t } = useI18n(); + const pageRequest = async (query: UserPageQuery): Promise => { + return await api.GetList(query); + }; + const editRequest = async ({ form, row }: EditReq) => { + form.id = row.id; + const res = await api.UpdateObj(form); + return res; + }; + const delRequest = async ({ row }: DelReq) => { + return await api.DelObj(row.id); + }; + + const addRequest = async ({ form }: AddReq) => { + const res = await api.AddObj(form); + return res; + }; + + const userStore = useUserStore(); + const settingStore = useSettingStore(); + const selectedRowKeys: Ref = ref([]); + context.selectedRowKeys = selectedRowKeys; + + return { + crudOptions: { + settings: { + plugins: { + //这里使用行选择插件,生成行选择crudOptions配置,最终会与crudOptions合并 + rowSelection: { + enabled: true, + order: -2, + before: true, + // handle: (pluginProps,useCrudProps)=>CrudOptions, + props: { + multiple: true, + crossPage: true, + selectedRowKeys, + }, + }, + }, + }, + request: { + pageRequest, + addRequest, + editRequest, + delRequest, + }, + rowHandle: { + minWidth: 200, + fixed: "right", + }, + columns: { + id: { + title: "ID", + key: "id", + type: "number", + column: { + width: 100, + }, + form: { + show: false, + }, + }, + projectId: { + title: "项目ID", + type: "text", + search: { + show: false, + }, + form: { + show: false, + }, + column: { + width: 200, + show: false, + }, + }, + userId: { + title: "用户ID", + 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, + }), + search: { + show: false, + }, + form: { + show: false, + }, + column: { + width: 200, + show: false, + }, + }, + permission: { + title: t("certd.ent.projectPermission"), + 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" }, + ], + }), + search: { + show: true, + }, + form: { + show: true, + }, + column: { + width: 200, + }, + }, + createTime: { + title: t("certd.createTime"), + type: "datetime", + form: { + show: false, + }, + column: { + sorter: true, + width: 160, + align: "center", + }, + }, + updateTime: { + title: t("certd.updateTime"), + type: "datetime", + form: { + show: false, + }, + column: { + show: true, + width: 160, + }, + }, + }, + }, + }; +} diff --git a/packages/ui/certd-client/src/views/sys/enterprise/project/member/index.vue b/packages/ui/certd-client/src/views/sys/enterprise/project/member/index.vue new file mode 100644 index 000000000..c632d1211 --- /dev/null +++ b/packages/ui/certd-client/src/views/sys/enterprise/project/member/index.vue @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + diff --git a/packages/ui/certd-server/src/controller/sys/authority/user-controller.ts b/packages/ui/certd-server/src/controller/sys/authority/user-controller.ts index ccd5da62e..c37ed60a6 100644 --- a/packages/ui/certd-server/src/controller/sys/authority/user-controller.ts +++ b/packages/ui/certd-server/src/controller/sys/authority/user-controller.ts @@ -28,7 +28,7 @@ export class UserController extends CrudController { return this.service; } - @Post('/getSimpleUserByIds', {summary: 'sys:auth:user:add'}) + @Post('/getSimpleUserByIds', {summary: 'sys:auth:user:view'}) async getSimpleUserByIds(@Body('ids') ids: number[]) { const users = await this.service.find({ select: { @@ -46,6 +46,21 @@ export class UserController extends CrudController { return this.ok(users); } + + @Post('/getSimpleUsers', {summary: 'sys:auth:user:view'}) + async getSimpleUsers() { + const users = await this.service.find({ + select: { + id: true, + username: true, + nickName: true, + mobile: true, + phoneCode: true, + }, + }); + return this.ok(users); + } + @Post('/page', {summary: 'sys:auth:user:view'}) async page( @Body(ALL) @@ -153,4 +168,6 @@ export class UserController extends CrudController { } + + } diff --git a/packages/ui/certd-server/src/controller/sys/enterprise/project-user-controller.ts b/packages/ui/certd-server/src/controller/sys/enterprise/project-member-controller.ts similarity index 79% rename from packages/ui/certd-server/src/controller/sys/enterprise/project-user-controller.ts rename to packages/ui/certd-server/src/controller/sys/enterprise/project-member-controller.ts index cbe0f7c2a..794600728 100644 --- a/packages/ui/certd-server/src/controller/sys/enterprise/project-user-controller.ts +++ b/packages/ui/certd-server/src/controller/sys/enterprise/project-member-controller.ts @@ -1,16 +1,16 @@ import { CrudController, SysSettingsService } from "@certd/lib-server"; import { ALL, Body, Controller, Inject, Post, Provide, Query } from "@midwayjs/core"; -import { ProjectUserEntity } from "../../../modules/sys/enterprise/entity/project-user.js"; -import { ProjectUserService } from "../../../modules/sys/enterprise/service/project-user-service.js"; +import { ProjectMemberEntity } from "../../../modules/sys/enterprise/entity/project-member.js"; +import { ProjectMemberService } from "../../../modules/sys/enterprise/service/project-member-service.js"; import { merge } from "lodash-es"; /** */ @Provide() -@Controller("/api/sys/enterprise/projectUser") -export class SysProjectUserController extends CrudController { +@Controller("/api/sys/enterprise/projectMember") +export class SysProjectMemberController extends CrudController { @Inject() - service: ProjectUserService; + service: ProjectMemberService; @Inject() sysSettingsService: SysSettingsService; diff --git a/packages/ui/certd-server/src/modules/sys/enterprise/entity/project-user.ts b/packages/ui/certd-server/src/modules/sys/enterprise/entity/project-member.ts similarity index 84% rename from packages/ui/certd-server/src/modules/sys/enterprise/entity/project-user.ts rename to packages/ui/certd-server/src/modules/sys/enterprise/entity/project-member.ts index c58bf5ccd..b0fb8a60d 100644 --- a/packages/ui/certd-server/src/modules/sys/enterprise/entity/project-user.ts +++ b/packages/ui/certd-server/src/modules/sys/enterprise/entity/project-member.ts @@ -2,8 +2,8 @@ import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; /** */ -@Entity('cd_project_user') -export class ProjectUserEntity { +@Entity('cd_project_member') +export class ProjectMemberEntity { @PrimaryGeneratedColumn() id: number; @@ -14,7 +14,7 @@ export class ProjectUserEntity { projectId: number; @Column({ name: 'permission', comment: '权限' }) - permission: string; // read / write + permission: string; // read / write / admin @Column({ name: 'create_time', diff --git a/packages/ui/certd-server/src/modules/sys/enterprise/service/project-user-service.ts b/packages/ui/certd-server/src/modules/sys/enterprise/service/project-member-service.ts similarity index 74% rename from packages/ui/certd-server/src/modules/sys/enterprise/service/project-user-service.ts rename to packages/ui/certd-server/src/modules/sys/enterprise/service/project-member-service.ts index e5729a010..74953946d 100644 --- a/packages/ui/certd-server/src/modules/sys/enterprise/service/project-user-service.ts +++ b/packages/ui/certd-server/src/modules/sys/enterprise/service/project-member-service.ts @@ -2,13 +2,13 @@ import {Inject, Provide, Scope, ScopeEnum} from '@midwayjs/core'; import {BaseService, SysSettingsService} from '@certd/lib-server'; import {InjectEntityModel} from '@midwayjs/typeorm'; import {Repository} from 'typeorm'; -import { ProjectUserEntity } from '../entity/project-user.js'; +import { ProjectMemberEntity } from '../entity/project-member.js'; @Provide() @Scope(ScopeEnum.Request, { allowDowngrade: true }) -export class ProjectUserService extends BaseService { - @InjectEntityModel(ProjectUserEntity) - repository: Repository; +export class ProjectMemberService extends BaseService { + @InjectEntityModel(ProjectMemberEntity) + repository: Repository; @Inject() sysSettingsService: SysSettingsService; @@ -18,7 +18,7 @@ export class ProjectUserService extends BaseService { return this.repository; } - async add(bean: ProjectUserEntity) { + async add(bean: ProjectMemberEntity) { const {projectId, userId} = bean; if (!projectId) { throw new Error('项目ID不能为空');