diff --git a/ui/src/api/system/role.ts b/ui/src/api/system/role.ts index b00141519..18e74cb1e 100644 --- a/ui/src/api/system/role.ts +++ b/ui/src/api/system/role.ts @@ -1,9 +1,9 @@ import { get, post, del } from '@/request/index' import type { Ref } from 'vue' import { Result } from '@/request/Result' -import type { RoleItem, RolePermissionItem, CreateOrUpdateParams, PageList, RoleMemberItem, CreateMemberParamsItem } from '@/api/type/role' +import type { RoleItem, RolePermissionItem, CreateOrUpdateParams, RoleMemberItem, CreateMemberParamsItem } from '@/api/type/role' import { RoleTypeEnum } from '@/enums/system' -import type { pageRequest } from '@/api/type/common' +import type { pageRequest, PageList } from '@/api/type/common' const prefix = '/system/role' /** diff --git a/ui/src/api/type/common.ts b/ui/src/api/type/common.ts index 1912b77f8..f5674e206 100644 --- a/ui/src/api/type/common.ts +++ b/ui/src/api/type/common.ts @@ -11,4 +11,11 @@ interface pageRequest { page_size: number } -export type { KeyValue, Dict, pageRequest } +interface PageList { + current: number, + size: number, + total: number, + records: T +} + +export type { KeyValue, Dict, pageRequest, PageList } diff --git a/ui/src/api/type/role.ts b/ui/src/api/type/role.ts index ed31c0809..72d4de928 100644 --- a/ui/src/api/type/role.ts +++ b/ui/src/api/type/role.ts @@ -51,14 +51,7 @@ interface RoleMemberItem { interface CreateMemberParamsItem { user_ids: string[], - workspace_ids: string[] -} - -interface PageList { - current: number, - size: number, - total: number, - records: T + workspace_ids?: string[] } type Arrayable = T | T[] @@ -72,4 +65,4 @@ interface FormItemModel { } } -export type { RoleItem, FormItemModel, RolePermissionItem, RoleTableDataItem, CreateOrUpdateParams, PageList, ChildrenPermissionItem, RoleMemberItem, CreateMemberParamsItem } \ No newline at end of file +export type { RoleItem, FormItemModel, RolePermissionItem, RoleTableDataItem, CreateOrUpdateParams, ChildrenPermissionItem, RoleMemberItem, CreateMemberParamsItem } \ No newline at end of file diff --git a/ui/src/api/type/workspace.ts b/ui/src/api/type/workspace.ts new file mode 100644 index 000000000..044d0ff9c --- /dev/null +++ b/ui/src/api/type/workspace.ts @@ -0,0 +1,19 @@ +interface WorkspaceItem { + name: string, + id?: string +} + +interface CreateWorkspaceMemberParamsItem { + user_ids: string[], + role_ids: string[] +} + +interface WorkspaceMemberItem { + user_relation_id: string, + user_id: string, + username: string, + nick_name: string, + role_id: string, + role_name: string, +} +export type { WorkspaceItem, CreateWorkspaceMemberParamsItem, WorkspaceMemberItem } \ No newline at end of file diff --git a/ui/src/api/workspace.ts b/ui/src/api/workspace.ts new file mode 100644 index 000000000..41b3cbb17 --- /dev/null +++ b/ui/src/api/workspace.ts @@ -0,0 +1,97 @@ +import { Result } from '@/request/Result' +import type { Ref } from 'vue' +import { get, post, del } from '@/request/index' +import type { WorkspaceItem, CreateWorkspaceMemberParamsItem, WorkspaceMemberItem } from '@/api/type/workspace' +import type { pageRequest, PageList } from '@/api/type/common' + +const prefix = '/system/workspace' + +/** + * 获取添加成员时的工作空间下拉列表 + */ +const getWorkspaceList: (loading?: Ref) => Promise[]>> = (loading) => { + return get('/workspace/current_user', undefined, loading) +} + +/** + * 获取工作空间列表 + */ +const getSystemWorkspaceList: (loading?: Ref) => Promise> = (loading) => { + return get(`${prefix}`, undefined, loading) +} + +/** + * 新建或更新工作空间 + */ +const CreateOrUpdateWorkspace: ( + data: WorkspaceItem, + loading?: Ref, +) => Promise> = (data, loading) => { + return post(`${prefix}`, data, undefined, loading) +} + +/** + * 删除工作空间 + */ +const deleteWorkspace: (workspace_id: string, loading?: Ref) => Promise> = ( + workspace_id, + loading, +) => { + return del(`${prefix}/${workspace_id}`, undefined, {}, loading) +} + +/** + * 获取工作空间成员列表 + */ +const getWorkspaceMemberList: ( + workspace_id: string, + page: pageRequest, + param: any, + loading?: Ref, +) => Promise>> = (workspace_id, page, param, loading) => { + return get( + `${prefix}/${workspace_id}/user_list/${page.current_page}/${page.page_size}`, + param, + loading, + ) +} + +/** + * 新建工作空间成员 + */ +const CreateWorkspaceMember: ( + workspace_id: string, + data: CreateWorkspaceMemberParamsItem[], + loading?: Ref, +) => Promise> = (workspace_id, data, loading) => { + return post(`${prefix}/${workspace_id}/add_member`, data, undefined, loading) +} + +/** + * 删除工作空间成员 + */ +const deleteWorkspaceMember: (workspace_id: string, user_relation_id: string, loading?: Ref) => Promise> = ( + workspace_id, + user_relation_id, + loading, +) => { + return post(`${prefix}/${workspace_id}/remove_member/${user_relation_id}`, undefined, {}, loading) +} + +/** + * 获取添加成员时的角色下拉列表 + */ +const getWorkspaceRoleList: (loading?: Ref) => Promise[]>> = (loading) => { + return get('/role_list/current_user', undefined, loading) +} + +export default { + getWorkspaceList, + getSystemWorkspaceList, + CreateOrUpdateWorkspace, + deleteWorkspace, + getWorkspaceMemberList, + CreateWorkspaceMember, + deleteWorkspaceMember, + getWorkspaceRoleList, +} \ No newline at end of file diff --git a/ui/src/locales/lang/en-US/views/index.ts b/ui/src/locales/lang/en-US/views/index.ts index db445ebbc..002bce6ab 100644 --- a/ui/src/locales/lang/en-US/views/index.ts +++ b/ui/src/locales/lang/en-US/views/index.ts @@ -1,6 +1,7 @@ import notFound from './404' import application from './application' import role from './role' +import workspace from './workspace' import applicationOverview from './application-overview' import knowledge from './knowledge' import system from './system' @@ -34,5 +35,6 @@ export default { chatLog, login, operateLog, - role + role, + workspace } diff --git a/ui/src/locales/lang/en-US/views/workspace.ts b/ui/src/locales/lang/en-US/views/workspace.ts new file mode 100644 index 000000000..27a424feb --- /dev/null +++ b/ui/src/locales/lang/en-US/views/workspace.ts @@ -0,0 +1,11 @@ +export default { + // TODO + title: '工作空间', + list: '工作空间列表', + name: '工作空间名称', + member: { + delete: { + confirmTitle: '是否移除成员:', + } + } +} \ No newline at end of file diff --git a/ui/src/locales/lang/zh-CN/views/index.ts b/ui/src/locales/lang/zh-CN/views/index.ts index 4c5c42b9c..985d365fa 100644 --- a/ui/src/locales/lang/zh-CN/views/index.ts +++ b/ui/src/locales/lang/zh-CN/views/index.ts @@ -7,6 +7,7 @@ import system from './system' import userManage from './user-manage' import resourceAuthorization from './resource-authorization' import role from './role' +import workspace from './workspace' import application from './application' import problem from './problem' import applicationOverview from './application-overview' @@ -26,6 +27,7 @@ export default { userManage, resourceAuthorization, role, + workspace, application, problem, applicationOverview, diff --git a/ui/src/locales/lang/zh-CN/views/workspace.ts b/ui/src/locales/lang/zh-CN/views/workspace.ts new file mode 100644 index 000000000..311d0a5a3 --- /dev/null +++ b/ui/src/locales/lang/zh-CN/views/workspace.ts @@ -0,0 +1,10 @@ +export default { + title: '工作空间', + list: '工作空间列表', + name: '工作空间名称', + member: { + delete: { + confirmTitle: '是否移除成员:', + } + } +} \ No newline at end of file diff --git a/ui/src/locales/lang/zh-Hant/views/index.ts b/ui/src/locales/lang/zh-Hant/views/index.ts index db445ebbc..002bce6ab 100644 --- a/ui/src/locales/lang/zh-Hant/views/index.ts +++ b/ui/src/locales/lang/zh-Hant/views/index.ts @@ -1,6 +1,7 @@ import notFound from './404' import application from './application' import role from './role' +import workspace from './workspace' import applicationOverview from './application-overview' import knowledge from './knowledge' import system from './system' @@ -34,5 +35,6 @@ export default { chatLog, login, operateLog, - role + role, + workspace } diff --git a/ui/src/locales/lang/zh-Hant/views/workspace.ts b/ui/src/locales/lang/zh-Hant/views/workspace.ts new file mode 100644 index 000000000..27a424feb --- /dev/null +++ b/ui/src/locales/lang/zh-Hant/views/workspace.ts @@ -0,0 +1,11 @@ +export default { + // TODO + title: '工作空间', + list: '工作空间列表', + name: '工作空间名称', + member: { + delete: { + confirmTitle: '是否移除成员:', + } + } +} \ No newline at end of file diff --git a/ui/src/router/modules/system.ts b/ui/src/router/modules/system.ts index cb66d3496..2be64803e 100644 --- a/ui/src/router/modules/system.ts +++ b/ui/src/router/modules/system.ts @@ -45,6 +45,19 @@ const systemRouter = { }, component: () => import('@/views/role/index.vue'), }, + { + path: '/system/workspace', + name: 'workspace', + meta: { + icon: 'app-resource-authorization', // TODO + iconActive: 'app-resource-authorization-active', // TODO + title: 'views.workspace.title', + activeMenu: '/system', + parentPath: '/system', + parentName: 'system', + }, + component: () => import('@/views/workspace/index.vue'), + }, { path: '/system/shared', name: 'shared', diff --git a/ui/src/styles/app.scss b/ui/src/styles/app.scss index e2260d2bf..40753dfc3 100644 --- a/ui/src/styles/app.scss +++ b/ui/src/styles/app.scss @@ -109,6 +109,9 @@ h5 { .bold { font-weight: 600; } +.medium { + font-weight: 500; +} .lighter { font-weight: 400; } diff --git a/ui/src/views/role/component/AddMemberDrawer.vue b/ui/src/views/role/component/AddMemberDrawer.vue index 749129a03..66a305b03 100644 --- a/ui/src/views/role/component/AddMemberDrawer.vue +++ b/ui/src/views/role/component/AddMemberDrawer.vue @@ -4,7 +4,8 @@

{{ $t('views.role.member.add') }}

diff --git a/ui/src/views/role/index.vue b/ui/src/views/role/index.vue index 33bd106f1..679388b5d 100644 --- a/ui/src/views/role/index.vue +++ b/ui/src/views/role/index.vue @@ -25,9 +25,11 @@