mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-29 16:12:55 +00:00
feat: api
This commit is contained in:
parent
35433b4752
commit
3360c49f4c
|
|
@ -44,7 +44,57 @@ const postFolder: (
|
|||
return post(`${prefix.value}/${source}/folder`, data, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得文件夹详情
|
||||
* @params 参数
|
||||
* folder_id
|
||||
* source : APPLICATION, KNOWLEDGE, TOOL
|
||||
*/
|
||||
const getFolderDetail: (
|
||||
folder_id: string,
|
||||
source: string,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<Array<any>>> = (folder_id, source, loading) => {
|
||||
return get(`${prefix.value}/${source}/folder/${folder_id}`, null, loading)
|
||||
}
|
||||
/**
|
||||
* 修改文件夹
|
||||
* @params 参数
|
||||
* folder_id: string,
|
||||
* source : APPLICATION, KNOWLEDGE, TOOL
|
||||
{
|
||||
"name": "string",
|
||||
"desc": "string",
|
||||
"parent_id": "root"
|
||||
}
|
||||
*/
|
||||
const putFolder: (
|
||||
folder_id: string,
|
||||
source: string,
|
||||
data?: any,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<Array<any>>> = (folder_id, source, data, loading) => {
|
||||
return put(`${prefix.value}/${source}/folder/${folder_id}`, data, {}, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除文件夹
|
||||
* @params 参数
|
||||
* folder_id
|
||||
* source : APPLICATION, KNOWLEDGE, TOOL
|
||||
*/
|
||||
const delFolder: (
|
||||
folder_id: string,
|
||||
source: string,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<boolean>> = (folder_id, source, loading) => {
|
||||
return del(`${prefix.value}/${source}/folder${folder_id}`, undefined, {}, loading)
|
||||
}
|
||||
|
||||
export default {
|
||||
getFolder,
|
||||
postFolder,
|
||||
getFolderDetail,
|
||||
putFolder,
|
||||
delFolder,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
import { Result } from '@/request/Result'
|
||||
import { get, post, del, put, exportFile, exportExcel } from '@/request/index'
|
||||
import { type Ref } from 'vue'
|
||||
import type { pageRequest } from '@/api/type/common'
|
||||
import type { knowledgeData } from '@/api/type/knowledge'
|
||||
|
||||
const prefix = '/system/shared'
|
||||
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ const postKnowledge: (data: knowledgeData, loading?: Ref<boolean>) => Promise<Re
|
|||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户可使用的向量化模型列表
|
||||
* 获取当前用户可使用的向量化模型列表(没用到)
|
||||
* @param application_id
|
||||
* @param loading
|
||||
* @query { query_text: string, top_number: number, similarity: number }
|
||||
|
|
@ -232,6 +232,8 @@ const postWebKnowledge: (data: any, loading?: Ref<boolean>) => Promise<Result<an
|
|||
) => {
|
||||
return post(`${prefix}/web`, data, undefined, loading)
|
||||
}
|
||||
|
||||
// 创建飞书知识库
|
||||
const postLarkKnowledge: (data: any, loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (
|
||||
data,
|
||||
loading,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import type {
|
|||
} from '@/api/type/model'
|
||||
import type { FormField } from '@/components/dynamics-form/type'
|
||||
|
||||
const prefix = '/system/shared'
|
||||
const prefix = '/system/shared/model'
|
||||
|
||||
/**
|
||||
* 获得模型列表
|
||||
|
|
@ -19,7 +19,7 @@ const getModel: (
|
|||
request?: ListModelRequest,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<Array<Model>>> = (data, loading) => {
|
||||
return get(`${prefix}/model`, data, loading)
|
||||
return get(`${prefix}`, data, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -32,7 +32,7 @@ const getModelParamsForm: (
|
|||
model_id: string,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<Array<FormField>>> = (model_id, loading) => {
|
||||
return get(`${prefix}/model/${model_id}/model_params_form`, {}, loading)
|
||||
return get(`${prefix}/${model_id}/model_params_form`, {}, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -45,7 +45,7 @@ const createModel: (
|
|||
request: CreateModelRequest,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<Model>> = (request, loading) => {
|
||||
return post(`${prefix}/model`, request, {}, loading)
|
||||
return post(`${prefix}`, request, {}, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -59,7 +59,7 @@ const updateModel: (
|
|||
request: EditModelRequest,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<Model>> = (model_id, request, loading) => {
|
||||
return put(`${prefix}/model/${model_id}`, request, {}, loading)
|
||||
return put(`${prefix}/${model_id}`, request, {}, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -73,7 +73,7 @@ const updateModelParamsForm: (
|
|||
request: any[],
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<Model>> = (model_id, request, loading) => {
|
||||
return put(`${prefix}/model/${model_id}/model_params_form`, request, {}, loading)
|
||||
return put(`${prefix}/${model_id}/model_params_form`, request, {}, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -86,7 +86,7 @@ const getModelById: (model_id: string, loading?: Ref<boolean>) => Promise<Result
|
|||
model_id,
|
||||
loading,
|
||||
) => {
|
||||
return get(`${prefix}/model/${model_id}`, {}, loading)
|
||||
return get(`${prefix}/${model_id}`, {}, loading)
|
||||
}
|
||||
/**
|
||||
* 获取模型信息不包括认证信息根据模型id
|
||||
|
|
@ -98,7 +98,7 @@ const getModelMetaById: (model_id: string, loading?: Ref<boolean>) => Promise<Re
|
|||
model_id,
|
||||
loading,
|
||||
) => {
|
||||
return get(`${prefix}/model/${model_id}/meta`, {}, loading)
|
||||
return get(`${prefix}/${model_id}/meta`, {}, loading)
|
||||
}
|
||||
/**
|
||||
* 暂停下载
|
||||
|
|
@ -110,13 +110,13 @@ const pauseDownload: (model_id: string, loading?: Ref<boolean>) => Promise<Resul
|
|||
model_id,
|
||||
loading,
|
||||
) => {
|
||||
return put(`${prefix}/model/${model_id}/pause_download`, undefined, {}, loading)
|
||||
return put(`${prefix}/${model_id}/pause_download`, undefined, {}, loading)
|
||||
}
|
||||
const deleteModel: (model_id: string, loading?: Ref<boolean>) => Promise<Result<boolean>> = (
|
||||
model_id,
|
||||
loading,
|
||||
) => {
|
||||
return del(`${prefix}/model/${model_id}`, undefined, {}, loading)
|
||||
return del(`${prefix}/${model_id}`, undefined, {}, loading)
|
||||
}
|
||||
|
||||
export default {
|
||||
|
|
|
|||
|
|
@ -138,6 +138,29 @@ const postParagraphProblem: (
|
|||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 段落调整顺序
|
||||
* @param knowledge_id 数据集id
|
||||
* @param document_id 文档id
|
||||
* @param loading 加载器
|
||||
* @query data {
|
||||
* paragraph_id 段落id new_position 新顺序
|
||||
* }
|
||||
*/
|
||||
const putAdjustPosition: (
|
||||
knowledge_id: string,
|
||||
document_id: string,
|
||||
data: any,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<any>> = (knowledge_id, document_id, data, loading) => {
|
||||
return put(
|
||||
`${prefix}/${knowledge_id}/document/${document_id}/paragraph/adjust_position`,
|
||||
{},
|
||||
data,
|
||||
loading,
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加某段落关联问题
|
||||
* @param knowledge_id 数据集id
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { type Ref } from 'vue'
|
|||
import type { pageRequest } from '@/api/type/common'
|
||||
import type { toolData } from '@/api/type/tool'
|
||||
|
||||
const prefix = '/system/shared'
|
||||
const prefix = '/system/shared/tool'
|
||||
|
||||
/**
|
||||
* 工具列表带分页(无分页)
|
||||
|
|
@ -14,7 +14,7 @@ const getToolList: (data?: any, loading?: Ref<boolean>) => Promise<Result<Array<
|
|||
data,
|
||||
loading,
|
||||
) => {
|
||||
return get(`${prefix}/tool`, data, loading)
|
||||
return get(`${prefix}`, data, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -31,7 +31,7 @@ const getToolListPage: (
|
|||
param?: any,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<any>> = (page, param, loading) => {
|
||||
return get(`${prefix}/tool/${page.current_page}/${page.page_size}`, param, loading)
|
||||
return get(`${prefix}/${page.current_page}/${page.page_size}`, param, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -42,7 +42,7 @@ const postTool: (data: toolData, loading?: Ref<boolean>) => Promise<Result<any>>
|
|||
data,
|
||||
loading,
|
||||
) => {
|
||||
return post(`${prefix}/tool`, data, undefined, loading)
|
||||
return post(`${prefix}`, data, undefined, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -55,7 +55,7 @@ const putTool: (tool_id: string, data: toolData, loading?: Ref<boolean>) => Prom
|
|||
data,
|
||||
loading,
|
||||
) => {
|
||||
return put(`${prefix}/tool/${tool_id}`, data, undefined, loading)
|
||||
return put(`${prefix}/${tool_id}`, data, undefined, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -68,7 +68,7 @@ const getToolById: (tool_id: string, loading?: Ref<boolean>) => Promise<Result<a
|
|||
tool_id,
|
||||
loading,
|
||||
) => {
|
||||
return get(`${prefix}/tool/${tool_id}`, undefined, loading)
|
||||
return get(`${prefix}/${tool_id}`, undefined, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -117,7 +117,7 @@ const postPylint: (code: string, loading?: Ref<boolean>) => Promise<Result<any>>
|
|||
code,
|
||||
loading,
|
||||
) => {
|
||||
return post(`${prefix}/tool/pylint`, { code }, {}, loading)
|
||||
return post(`${prefix}/pylint`, { code }, {}, loading)
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,13 @@
|
|||
import { get, post, del } from '@/request/index'
|
||||
import type { Ref } from 'vue'
|
||||
import { Result } from '@/request/Result'
|
||||
import type { RoleItem, RolePermissionItem, CreateOrUpdateParams, 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, PageList } from '@/api/type/common'
|
||||
|
||||
|
|
@ -9,7 +15,9 @@ const prefix = '/workspace/role'
|
|||
/**
|
||||
* 获取角色列表
|
||||
*/
|
||||
const getRoleList: (loading?: Ref<boolean>) => Promise<Result<{ internal_role: RoleItem[], custom_role: RoleItem[] }>> = (loading) => {
|
||||
const getRoleList: (
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<{ internal_role: RoleItem[]; custom_role: RoleItem[] }>> = (loading) => {
|
||||
return get(`${prefix}`, undefined, loading)
|
||||
}
|
||||
|
||||
|
|
@ -24,7 +32,36 @@ const CreateMember: (
|
|||
return post(`${prefix}/${role_id}/add_member`, data, undefined, loading)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取角色成员列表
|
||||
*/
|
||||
const getRoleMemberList: (
|
||||
role_id: string,
|
||||
page: pageRequest,
|
||||
param: any,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<PageList<RoleMemberItem[]>>> = (role_id, page, param, loading) => {
|
||||
return get(
|
||||
`${prefix}/${role_id}/user_list/${page.current_page}/${page.page_size}`,
|
||||
param,
|
||||
loading,
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除角色成员
|
||||
*/
|
||||
const deleteRoleMember: (
|
||||
role_id: string,
|
||||
user_relation_id: string,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<any>> = (role_id, user_relation_id, loading) => {
|
||||
return del(`${prefix}/${role_id}/remove_member/${user_relation_id}`, undefined, {}, loading)
|
||||
}
|
||||
|
||||
export default {
|
||||
getRoleList,
|
||||
CreateMember,
|
||||
getRoleMemberList,
|
||||
deleteRoleMember,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@
|
|||
import { ref, watch } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { copyClick } from '@/utils/clipboard'
|
||||
import systemKeyApi from '@/api/system-api-key'
|
||||
import systemKeyApi from '@/api/system/api-key'
|
||||
import { datetimeFormat } from '@/utils/time'
|
||||
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
||||
import { t } from '@/locales'
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script setup lang="ts">
|
||||
import { onBeforeMount, ref } from 'vue'
|
||||
import WorkspaceApi from '@/api/workspace'
|
||||
import WorkspaceApi from '@/api/workspace/workspace'
|
||||
import type { WorkspaceItem } from '@/api/type/workspace'
|
||||
import useStore from '@/stores'
|
||||
const { user } = useStore()
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ import { ref, watch } from 'vue'
|
|||
import { useRoute } from 'vue-router'
|
||||
import type { FormInstance, FormRules } from 'element-plus'
|
||||
import applicationKeyApi from '@/api/application/application-key'
|
||||
import overviewSystemApi from '@/api/system-api-key'
|
||||
import overviewSystemApi from '@/api/system/api-key'
|
||||
import { MsgSuccess } from '@/utils/message'
|
||||
import { t } from '@/locales'
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import { onBeforeMount, ref } from 'vue'
|
|||
import type { CreateMemberParamsItem, FormItemModel } from '@/api/type/role'
|
||||
import RoleApi from '@/api/system/role'
|
||||
import UserApi from '@/api/user/user'
|
||||
import WorkspaceApi from '@/api/workspace'
|
||||
import WorkspaceApi from '@/api/workspace/workspace'
|
||||
import MemberFormContent from './MemberFormContent.vue'
|
||||
import { t } from '@/locales'
|
||||
import type { RoleItem } from '@/api/type/role'
|
||||
|
|
|
|||
|
|
@ -8,19 +8,38 @@
|
|||
<el-select class="complex-search__left" v-model="searchType" style="width: 120px">
|
||||
<el-option :label="$t('views.login.loginForm.username.label')" value="username" />
|
||||
</el-select>
|
||||
<el-input v-if="searchType === 'username'" v-model="searchForm.username" @change="getList"
|
||||
:placeholder="$t('common.inputPlaceholder')" style="width: 220px" clearable />
|
||||
<el-input
|
||||
v-if="searchType === 'username'"
|
||||
v-model="searchForm.username"
|
||||
@change="getList"
|
||||
:placeholder="$t('common.inputPlaceholder')"
|
||||
style="width: 220px"
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<app-table class="mt-16" :data="tableData" :pagination-config="paginationConfig" @sizeChange="handleSizeChange"
|
||||
@changePage="getList" v-loading="loading">
|
||||
<app-table
|
||||
class="mt-16"
|
||||
:data="tableData"
|
||||
:pagination-config="paginationConfig"
|
||||
@sizeChange="handleSizeChange"
|
||||
@changePage="getList"
|
||||
v-loading="loading"
|
||||
>
|
||||
<el-table-column prop="nick_name" :label="$t('views.userManage.userForm.nick_name.label')" />
|
||||
<el-table-column prop="username" :label="$t('views.login.loginForm.username.label')" />
|
||||
<el-table-column v-if="props.currentRole?.type !== RoleTypeEnum.ADMIN" prop="workspace_name"
|
||||
:label="$t('views.role.member.workspace')" />
|
||||
<el-table-column
|
||||
v-if="props.currentRole?.type !== RoleTypeEnum.ADMIN"
|
||||
prop="workspace_name"
|
||||
:label="$t('views.role.member.workspace')"
|
||||
/>
|
||||
<el-table-column :label="$t('common.operation')" width="100" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-tooltip effect="dark" :content="`${$t('views.role.member.delete.button')}`" placement="top">
|
||||
<el-tooltip
|
||||
effect="dark"
|
||||
:content="`${$t('views.role.member.delete.button')}`"
|
||||
placement="top"
|
||||
>
|
||||
<el-button type="primary" text @click.stop="handleDelete(row)">
|
||||
<el-icon>
|
||||
<Delete />
|
||||
|
|
@ -42,6 +61,7 @@ import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
|||
import { t } from '@/locales'
|
||||
import AddMemberDrawer from './AddMemberDrawer.vue'
|
||||
import { RoleTypeEnum } from '@/enums/system'
|
||||
import { loadPermissionApi } from '@/utils/permission-api'
|
||||
|
||||
const props = defineProps<{
|
||||
currentRole?: RoleItem
|
||||
|
|
@ -66,7 +86,12 @@ async function getList() {
|
|||
const params = {
|
||||
[searchType.value]: searchForm.value[searchType.value],
|
||||
}
|
||||
const res = await RoleApi.getRoleMemberList(props.currentRole?.id as string, paginationConfig, params, loading)
|
||||
const res = await loadPermissionApi('role').getRoleMemberList(
|
||||
props.currentRole?.id as string,
|
||||
paginationConfig,
|
||||
params,
|
||||
loading,
|
||||
)
|
||||
tableData.value = res.data.records
|
||||
paginationConfig.total = res.data.total
|
||||
} catch (error) {
|
||||
|
|
@ -83,32 +108,33 @@ onMounted(() => {
|
|||
getList()
|
||||
})
|
||||
|
||||
watch(() => props.currentRole?.id, () => {
|
||||
getList()
|
||||
})
|
||||
watch(
|
||||
() => props.currentRole?.id,
|
||||
() => {
|
||||
getList()
|
||||
},
|
||||
)
|
||||
|
||||
const addMemberDrawerRef = ref<InstanceType<typeof AddMemberDrawer>>()
|
||||
|
||||
function handleAdd() {
|
||||
addMemberDrawerRef.value?.open();
|
||||
addMemberDrawerRef.value?.open()
|
||||
}
|
||||
|
||||
function handleDelete(row: RoleMemberItem) {
|
||||
MsgConfirm(
|
||||
`${t('views.role.member.delete.confirmTitle')}${row.nick_name} ?`, '',
|
||||
{
|
||||
confirmButtonText: t('common.confirm'),
|
||||
confirmButtonClass: 'danger',
|
||||
},
|
||||
)
|
||||
MsgConfirm(`${t('views.role.member.delete.confirmTitle')}${row.nick_name} ?`, '', {
|
||||
confirmButtonText: t('common.confirm'),
|
||||
confirmButtonClass: 'danger',
|
||||
})
|
||||
.then(() => {
|
||||
loading.value = true
|
||||
RoleApi.deleteRoleMember(props.currentRole?.id as string, row.user_relation_id, loading).then(() => {
|
||||
MsgSuccess(t('common.deleteSuccess'))
|
||||
getList()
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
loadPermissionApi('role')
|
||||
.deleteRoleMember(props.currentRole?.id as string, row.user_relation_id, loading)
|
||||
.then(() => {
|
||||
MsgSuccess(t('common.deleteSuccess'))
|
||||
getList()
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
<script setup lang="ts">
|
||||
import { onBeforeMount, ref } from 'vue'
|
||||
import UserApi from '@/api/user/user'
|
||||
import WorkspaceApi from '@/api/workspace'
|
||||
import WorkspaceApi from '@/api/workspace/workspace'
|
||||
import MemberFormContent from '@/views/role/component/MemberFormContent.vue'
|
||||
import { t } from '@/locales'
|
||||
import { MsgSuccess } from '@/utils/message'
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import type { FormInstance } from 'element-plus'
|
|||
import { MsgSuccess } from '@/utils/message'
|
||||
import { t } from '@/locales'
|
||||
import type { WorkspaceItem } from '@/api/type/workspace'
|
||||
import WorkspaceApi from '@/api/workspace'
|
||||
import WorkspaceApi from '@/api/workspace/workspace'
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'refresh', currentWorkspace: WorkspaceItem): void;
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ import { onMounted, ref, reactive, watch } from 'vue'
|
|||
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
||||
import { t } from '@/locales'
|
||||
import AddMemberDrawer from './AddMemberDrawer.vue'
|
||||
import WorkspaceApi from '@/api/workspace'
|
||||
import WorkspaceApi from '@/api/workspace/workspace'
|
||||
import type { WorkspaceMemberItem, WorkspaceItem } from '@/api/type/workspace'
|
||||
|
||||
const props = defineProps<{
|
||||
|
|
@ -106,4 +106,4 @@ function handleDelete(row: WorkspaceMemberItem) {
|
|||
})
|
||||
.catch(() => { })
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@
|
|||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref, watch } from 'vue'
|
||||
import WorkspaceApi from '@/api/workspace'
|
||||
import WorkspaceApi from '@/api/workspace/workspace'
|
||||
import { t } from '@/locales'
|
||||
import Member from './component/Member.vue'
|
||||
import CreateOrUpdateWorkspaceDialog from './component/CreateOrUpdateWorkspaceDialog.vue'
|
||||
|
|
|
|||
Loading…
Reference in New Issue