feat: shared workspace

This commit is contained in:
wangdan-fit2cloud 2025-06-21 03:14:59 +08:00
parent 9c73c8dea0
commit 190d25857f
35 changed files with 223 additions and 263 deletions

View File

@ -1,7 +1,6 @@
import { Result } from '@/request/Result' import { Result } from '@/request/Result'
import { get, post, del, put } from '@/request/index' import { get, post, del, put } from '@/request/index'
import { type Ref } from 'vue' import { type Ref } from 'vue'
import type { pageRequest } from '@/api/type/common'
import useStore from '@/stores' import useStore from '@/stores'
const prefix: any = { _value: '/workspace/' } const prefix: any = { _value: '/workspace/' }

View File

@ -9,7 +9,6 @@ import type {
} from '@/api/type/model' } from '@/api/type/model'
import type { FormField } from '@/components/dynamics-form/type' import type { FormField } from '@/components/dynamics-form/type'
import useStore from '@/stores' import useStore from '@/stores'
const prefix: any = { _value: '/workspace/' } const prefix: any = { _value: '/workspace/' }
Object.defineProperty(prefix, 'value', { Object.defineProperty(prefix, 'value', {
@ -24,7 +23,7 @@ Object.defineProperty(prefix, 'value', {
* @params name, model_type, model_name * @params name, model_type, model_name
*/ */
const getModel: ( const getModel: (
request?: ListModelRequest, data?: ListModelRequest,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<Model>>> = (data, loading) => { ) => Promise<Result<Array<Model>>> = (data, loading) => {
return get(`${prefix.value}`, data, loading) return get(`${prefix.value}`, data, loading)

View File

@ -15,13 +15,13 @@ Object.defineProperty(prefix_workspace, 'value', {
}, },
}) })
const getSharedWorkspaceKnowledge: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = ( const getKnowledgeList: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (
loading, loading,
) => { ) => {
return get(`${prefix}/${prefix_workspace.value}/knowledge`, {}, loading) return get(`${prefix}/${prefix_workspace.value}/knowledge`, {}, loading)
} }
const getSharedWorkspaceKnowledgePage: ( const getKnowledgeListPage: (
page: pageRequest, page: pageRequest,
param: any, param: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
@ -33,46 +33,31 @@ const getSharedWorkspaceKnowledgePage: (
) )
} }
const getSharedWorkspaceModel: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = ( const getModel: (
loading,
) => {
return get(`${prefix}/${prefix_workspace.value}/model`, {}, loading)
}
const getCESharedWorkspaceModel: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (
loading,
) => {
return get(`/${prefix_workspace.value}/model`, {}, loading)
}
const getSharedWorkspaceModelPage: (
param: any, param: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (param: any, loading) => { ) => Promise<Result<Array<any>>> = (param: any, loading) => {
console.log(`${prefix}/${prefix_workspace.value}/model`)
return get(`${prefix}/${prefix_workspace.value}/model`, param, loading) return get(`${prefix}/${prefix_workspace.value}/model`, param, loading)
} }
const getSharedWorkspaceTool: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = ( const getToolList: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (
loading, loading,
) => { ) => {
return get(`${prefix}/${prefix_workspace.value}/tool`, {}, loading) return get(`${prefix}/${prefix_workspace.value}/tool`, {}, loading)
} }
const getSharedWorkspaceToolPage: ( const getToolListPage: (
param: any, page: pageRequest,
param?: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (param: any, loading) => { ) => Promise<Result<any>> = (page, param, loading) => {
return get(`${prefix}/${prefix_workspace.value}/tool`, param, loading) return get(`${prefix}/${prefix_workspace.value}/tool/${page.current_page}/${page.page_size}`, param, loading)
} }
export default { export default {
getSharedWorkspaceKnowledge, getKnowledgeList,
getSharedWorkspaceKnowledgePage, getKnowledgeListPage,
getSharedWorkspaceModel, getModel,
getSharedWorkspaceModelPage, getToolList,
getSharedWorkspaceTool, getToolListPage
getSharedWorkspaceToolPage,
getCESharedWorkspaceModel
} }

View File

@ -1,86 +0,0 @@
import {Result} from '@/request/Result'
import {get, post} from '@/request/index'
import type {Ref} from 'vue'
import type {Provider, BaseModel} from '@/api/type/model'
import type {FormField} from '@/components/dynamics-form/type'
import type {KeyValue} from '../type/common'
const prefix_provider = '/provider'
/**
*
*/
const getProvider: (loading?: Ref<boolean>) => Promise<Result<Array<Provider>>> = (loading) => {
return get(`${prefix_provider}`, {}, loading)
}
/**
*
*/
const getProviderByModelType: (
model_type: string,
loading?: Ref<boolean>,
) => Promise<Result<Array<Provider>>> = (model_type, loading) => {
return get(`${prefix_provider}`, {model_type}, loading)
}
/**
*
* @param provider
* @param model_type
* @param model_name
* @param loading
* @returns
*/
const getModelCreateForm: (
provider: string,
model_type: string,
model_name: string,
loading?: Ref<boolean>,
) => Promise<Result<Array<FormField>>> = (provider, model_type, model_name, loading) => {
return get(`${prefix_provider}/model_form`, {provider, model_type, model_name}, loading)
}
/**
*
* @param provider
* @param loading
* @returns
*/
const listModelType: (
provider: string,
loading?: Ref<boolean>,
) => Promise<Result<Array<KeyValue<string, string>>>> = (provider, loading?: Ref<boolean>) => {
return get(`${prefix_provider}/model_type_list`, {provider}, loading)
}
/**
*
* @param provider
* @param model_type
* @param loading
* @returns
*/
const listBaseModel: (
provider: string,
model_type: string,
loading?: Ref<boolean>,
) => Promise<Result<Array<BaseModel>>> = (provider, model_type, loading) => {
return get(`${prefix_provider}/model_list`, {provider, model_type}, loading)
}
const listBaseModelParamsForm: (
provider: string,
model_type: string,
model_name: string,
loading?: Ref<boolean>,
) => Promise<Result<Array<BaseModel>>> = (provider, model_type, model_name, loading) => {
return get(`${prefix_provider}/model_params_form`, {provider, model_type, model_name}, loading)
}
export default {
getProvider,
getModelCreateForm,
getProviderByModelType,
listModelType,
listBaseModel,
listBaseModelParamsForm,
}

View File

@ -2,8 +2,6 @@ import { Result } from '@/request/Result'
import { get, put, post, del } from '@/request/index' import { get, put, post, del } from '@/request/index'
import type { pageRequest } from '@/api/type/common' import type { pageRequest } from '@/api/type/common'
import type { Ref } from 'vue' import type { Ref } from 'vue'
import useStore from '@/stores'
const prefix = '/workspace' const prefix = '/workspace'
/** /**

View File

@ -17,10 +17,10 @@
</div> </div>
</slot> </slot>
<slot name="subTitle"> </slot> <slot name="subTitle"> </slot>
<div class="shared" v-if="isShared">{{t('views.system.shared')}}</div>
</div> </div>
<div class="status-tag"> <div class="status-tag">
<slot name="tag"> </slot> <slot name="tag"> <!-- 放标签 --> </slot>
</div> </div>
</div> </div>
</slot> </slot>
@ -61,9 +61,8 @@ const props = withDefaults(
* 是否展示icon * 是否展示icon
*/ */
showIcon?: boolean showIcon?: boolean
isShared?: boolean
}>(), }>(),
{ title: t('common.title'), description: '', showIcon: true, border: true, isShared: false }, { title: t('common.title'), description: '', showIcon: true, border: true },
) )
const show = ref(false) const show = ref(false)
@ -104,28 +103,6 @@ function subHoveredEnter() {
} }
} }
.shared {
position: absolute;
right: 20px;
top: 17px;
font-weight: 400;
font-size: 12px;
line-height: 20px;
color: #646a73;
&::after {
content: '';
background-color: #1f23291a;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 32px;
height: 20px;
border-radius: 4px;
}
}
.card-footer { .card-footer {
position: absolute; position: absolute;
bottom: 8px; bottom: 8px;

View File

@ -9,7 +9,7 @@
/> />
<div <div
@click="handleSharedNodeClick" @click="handleSharedNodeClick"
v-if="!!shareTitle" v-if="showShared && hasPermission(EditionConst.IS_EE, 'OR')"
class="shared-knowledge" class="shared-knowledge"
:class="currentNodeKey === 'share' && 'active'" :class="currentNodeKey === 'share' && 'active'"
> >
@ -83,6 +83,8 @@ import type { TreeInstance } from 'element-plus'
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue' import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
import { t } from '@/locales' import { t } from '@/locales'
import folderApi from '@/api/folder' import folderApi from '@/api/folder'
import { EditionConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index'
defineOptions({ name: 'FolderTree' }) defineOptions({ name: 'FolderTree' })
const props = defineProps({ const props = defineProps({
data: { data: {
@ -97,7 +99,7 @@ const props = defineProps({
type: String, type: String,
default: 'APPLICATION', default: 'APPLICATION',
}, },
isShared: { showShared: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },

View File

@ -47,7 +47,7 @@
import { ref } from 'vue' import { ref } from 'vue'
import type { ResetCurrentUserPasswordRequest } from '@/api/type/user' import type { ResetCurrentUserPasswordRequest } from '@/api/type/user'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import UserApi from '@/api/user/user-manage' import UserApi from '@/api/system/user-manage'
import useStore from '@/stores' import useStore from '@/stores'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { t } from '@/locales' import { t } from '@/locales'

View File

@ -4,9 +4,11 @@
border-radius: var(--el-border-radius-base); border-radius: var(--el-border-radius-base);
.el-select__wrapper { .el-select__wrapper {
box-shadow: none !important; box-shadow: none !important;
border-radius: var(--el-border-radius-base) 0 0 var(--el-border-radius-base);
} }
.el-input__wrapper { .el-input__wrapper {
box-shadow: none !important; box-shadow: none !important;
border-radius: 0 var(--el-border-radius-base) var(--el-border-radius-base) 0;
} }
&__left { &__left {
border-right: 1px solid var(--el-border-color); border-right: 1px solid var(--el-border-color);

View File

@ -28,3 +28,4 @@ export function loadPermissionApi(type: string) {
} }
} }
} }

View File

@ -0,0 +1,24 @@
import knowledgeWorkspaceApi from '@/api/knowledge/knowledge'
import modelWorkspaceApi from '@/api/model/model'
import toolWorkspaceApi from '@/api/tool/tool'
import sharedWorkspaceApi from '@/api/shared-workspace'
// 普通 API
const workspaceApiMap = {
knowledge: knowledgeWorkspaceApi,
model: modelWorkspaceApi,
tool: toolWorkspaceApi,
} as any
/** API
* loadSharedApi('knowledge', true)
*/
export function loadSharedApi(type: string, isShared?: boolean) {
if (isShared) {
// 共享 API
return sharedWorkspaceApi
} else {
return workspaceApiMap[type]
}
}

View File

@ -4,10 +4,15 @@
<h3> <h3>
{{ $t('common.setting') }} {{ $t('common.setting') }}
</h3> </h3>
<el-button type="primary" @click="submit(applicationFormRef)" :disabled="loading" <el-button
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, type="primary"
RoleConst.USER.getWorkspaceRole, @click="submit(applicationFormRef)"
PermissionConst.APPLICATION_OVERVIEW_PUBLIC.getWorkspacePermission]" :disabled="loading"
v-hasPermission="[
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
RoleConst.USER.getWorkspaceRole,
PermissionConst.APPLICATION_OVERVIEW_PUBLIC.getWorkspacePermission,
]"
> >
{{ $t('views.application.buttons.publish') }} {{ $t('views.application.buttons.publish') }}
</el-button> </el-button>
@ -635,7 +640,7 @@ function getDetail() {
} }
function getKnowledge() { function getKnowledge() {
knowledge.asyncGetFolderKnowledge(knowledgeLoading).then((res: any) => { knowledge.asyncGetFolderKnowledge('', knowledgeLoading).then((res: any) => {
knowledgeList.value = res.data knowledgeList.value = res.data
}) })
} }

View File

@ -44,6 +44,7 @@
class="p-8" class="p-8"
v-loading="folderLoading" v-loading="folderLoading"
:canOperation="false" :canOperation="false"
showShared
/> />
</template> </template>
<el-scrollbar> <el-scrollbar>
@ -51,7 +52,7 @@
<el-row :gutter="12" v-loading="loading"> <el-row :gutter="12" v-loading="loading">
<el-col <el-col
:span="12" :span="12"
v-for="(item, index) in filterData.filter((v:any) => v.resource_type !== 'folder')" v-for="(item, index) in filterData.filter((v: any) => v.resource_type !== 'folder')"
:key="index" :key="index"
class="mb-16" class="mb-16"
> >
@ -104,7 +105,7 @@ const props = defineProps({
}) })
const emit = defineEmits(['addData', 'refresh']) const emit = defineEmits(['addData', 'refresh'])
const { folder, user,knowledge } = useStore() const { folder, user, knowledge } = useStore()
const dialogVisible = ref<boolean>(false) const dialogVisible = ref<boolean>(false)
const checkList = ref([]) const checkList = ref([])
@ -192,10 +193,8 @@ function getFolder() {
} }
function getList() { function getList() {
const params = { const folder_id = currentFolder.value?.id || user.getWorkspaceId()
folder_id: currentFolder.value?.id || user.getWorkspaceId(), knowledge.asyncGetFolderKnowledge(folder_id, loading).then((res: any) => {
}
knowledge.asyncGetFolderKnowledge(params, loading).then((res) => {
searchDate.value = res.data searchDate.value = res.data
}) })
} }

View File

@ -61,7 +61,7 @@ import type { ResetPasswordRequest } from '@/api/type/user'
import { useRouter, useRoute } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
import { MsgSuccess } from '@/utils/message' import { MsgSuccess } from '@/utils/message'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import UserApi from '@/api/user/user-manage' import UserApi from '@/api/system/user-manage'
import { t } from '@/locales' import { t } from '@/locales'
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()

View File

@ -8,12 +8,11 @@
:currentNodeKey="currentFolder?.id" :currentNodeKey="currentFolder?.id"
@handleNodeClick="folderClickHandel" @handleNodeClick="folderClickHandel"
class="p-8" class="p-8"
isShared showShared
@refreshTree="refreshFolder" @refreshTree="refreshFolder"
/> />
</template> </template>
<SharedWorkspace v-if="currentFolder.id === 'share'"></SharedWorkspace> <ContentContainer :header="currentFolder?.name">
<ContentContainer v-else :header="currentFolder?.name">
<template #search> <template #search>
<div class="flex"> <div class="flex">
<div class="flex-between complex-search"> <div class="flex-between complex-search">
@ -45,7 +44,7 @@
<el-option v-for="u in user_options" :key="u.id" :value="u.id" :label="u.username" /> <el-option v-for="u in user_options" :key="u.id" :value="u.id" :label="u.username" />
</el-select> </el-select>
</div> </div>
<el-dropdown trigger="click"> <el-dropdown trigger="click" v-if="!isShared">
<el-button <el-button
type="primary" type="primary"
class="ml-8" class="ml-8"
@ -193,7 +192,6 @@
<CardBox <CardBox
:title="item.name" :title="item.name"
:description="item.desc" :description="item.desc"
:isShared="currentFolder.id === 'share'"
class="cursor" class="cursor"
@click=" @click="
router.push({ path: `/knowledge/${item.id}/${currentFolder.id}/document` }) router.push({ path: `/knowledge/${item.id}/${currentFolder.id}/document` })
@ -207,7 +205,11 @@
{{ $t('common.creator') }}: {{ item.nick_name }} {{ $t('common.creator') }}: {{ item.nick_name }}
</el-text> </el-text>
</template> </template>
<template #tag>
<el-tag v-if="isShared" type="info" class="info-tag">
{{ t('views.system.shared') }}
</el-tag>
</template>
<template #footer> <template #footer>
<div class="footer-content flex-between"> <div class="footer-content flex-between">
<div> <div>
@ -227,7 +229,7 @@
</div> </div>
</template> </template>
<template #mouseEnter> <template #mouseEnter>
<div @click.stop> <div @click.stop v-if="!isShared">
<el-dropdown trigger="click"> <el-dropdown trigger="click">
<el-button text @click.stop> <el-button text @click.stop>
<el-icon> <el-icon>
@ -338,7 +340,7 @@
<el-dropdown-item <el-dropdown-item
icon="Delete" icon="Delete"
type="danger" type="danger"
@click.stop="deleteKnowledge(item)" @click.stop="deleteKnowledge(item)"
v-if=" v-if="
hasPermission( hasPermission(
[ [
@ -367,15 +369,15 @@
</div> </div>
</ContentContainer> </ContentContainer>
<component :is="currentCreateDialog" ref="CreateKnowledgeDialogRef" /> <component :is="currentCreateDialog" ref="CreateKnowledgeDialogRef" v-if="!isShared" />
<CreateFolderDialog ref="CreateFolderDialogRef" @refresh="refreshFolder" /> <CreateFolderDialog ref="CreateFolderDialogRef" @refresh="refreshFolder" v-if="!isShared" />
<GenerateRelatedDialog ref="GenerateRelatedDialogRef" /> <GenerateRelatedDialog ref="GenerateRelatedDialogRef" />
<SyncWebDialog ref="SyncWebDialogRef" /> <SyncWebDialog ref="SyncWebDialogRef" v-if="!isShared" />
</LayoutContainer> </LayoutContainer>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, ref, reactive, shallowRef, nextTick } from 'vue' import { onMounted, ref, reactive, shallowRef, nextTick, computed } from 'vue'
import CreateKnowledgeDialog from './create-component/CreateKnowledgeDialog.vue' import CreateKnowledgeDialog from './create-component/CreateKnowledgeDialog.vue'
import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.vue' import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.vue'
import CreateLarkKnowledgeDialog from './create-component/CreateLarkKnowledgeDialog.vue' import CreateLarkKnowledgeDialog from './create-component/CreateLarkKnowledgeDialog.vue'
@ -383,7 +385,6 @@ import SyncWebDialog from './component/SyncWebDialog.vue'
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue' import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue' import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
import KnowledgeApi from '@/api/knowledge/knowledge' import KnowledgeApi from '@/api/knowledge/knowledge'
import SharedWorkspace from '@/views/shared/knowledge-shared/SharedWorkspace.vue'
import { MsgSuccess, MsgConfirm } from '@/utils/message' import { MsgSuccess, MsgConfirm } from '@/utils/message'
import useStore from '@/stores' import useStore from '@/stores'
import { numberFormat } from '@/utils/common' import { numberFormat } from '@/utils/common'
@ -392,6 +393,7 @@ import { useRouter } from 'vue-router'
import { FolderSource } from '@/enums/common' import { FolderSource } from '@/enums/common'
import { PermissionConst, RoleConst } from '@/utils/permission/data' import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index' import { hasPermission } from '@/utils/permission/index'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
const router = useRouter() const router = useRouter()
const { folder, user } = useStore() const { folder, user } = useStore()
@ -419,6 +421,9 @@ const currentFolder = ref<any>({})
const CreateKnowledgeDialogRef = ref() const CreateKnowledgeDialogRef = ref()
const currentCreateDialog = shallowRef<any>(null) const currentCreateDialog = shallowRef<any>(null)
const isShared = computed(() => {
return currentFolder.value.id === 'share'
})
function openCreateDialog(data: any) { function openCreateDialog(data: any) {
currentCreateDialog.value = data currentCreateDialog.value = data
nextTick(() => { nextTick(() => {
@ -463,10 +468,12 @@ function getList() {
[search_type.value]: search_form.value[search_type.value], [search_type.value]: search_form.value[search_type.value],
} }
KnowledgeApi.getKnowledgeListPage(paginationConfig, params, loading).then((res) => { loadSharedApi('knowledge', isShared.value)
paginationConfig.total = res.data.total .getKnowledgeListPage(paginationConfig, params, loading)
knowledgeList.value = [...knowledgeList.value, ...res.data.records] .then((res: any) => {
}) paginationConfig.total = res.data.total
knowledgeList.value = [...knowledgeList.value, ...res.data.records]
})
} }
function clickFolder(item: any) { function clickFolder(item: any) {
@ -531,11 +538,9 @@ function getFolder(bool?: boolean) {
function folderClickHandel(row: any) { function folderClickHandel(row: any) {
currentFolder.value = row currentFolder.value = row
knowledgeList.value = [] knowledgeList.value = []
if (currentFolder.value.id === 'share') return
getList() getList()
} }
function refreshFolder() { function refreshFolder() {
console.log(currentFolder.value)
knowledgeList.value = [] knowledgeList.value = []
getFolder() getFolder()
} }

View File

@ -75,7 +75,7 @@ import LoginLayout from '@/layout/login-layout/LoginLayout.vue'
import type { CheckCodeRequest } from '@/api/type/user' import type { CheckCodeRequest } from '@/api/type/user'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import UserApi from '@/api/user/user-manage' import UserApi from '@/api/system/user-manage'
import { MsgSuccess } from '@/utils/message' import { MsgSuccess } from '@/utils/message'
import { t } from '@/locales' import { t } from '@/locales'
import useStore from '@/stores' import useStore from '@/stores'

View File

@ -61,7 +61,7 @@ import type { ResetPasswordRequest } from '@/api/type/user'
import { useRouter, useRoute } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
import { MsgSuccess } from '@/utils/message' import { MsgSuccess } from '@/utils/message'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import UserApi from '@/api/user/user-manage' import UserApi from '@/api/system/user-manage'
import { t } from '@/locales' import { t } from '@/locales'
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()

View File

@ -8,7 +8,7 @@
{{ model.name }} {{ model.name }}
<span v-if="currentModel.status === 'ERROR'"> <span v-if="currentModel.status === 'ERROR'">
<el-tooltip effect="dark" :content="errMessage" placement="top"> <el-tooltip effect="dark" :content="errMessage" placement="top">
<el-icon class="danger ml-4" size="18"><Warning/></el-icon> <el-icon class="danger ml-4" size="18"><Warning /></el-icon>
</el-tooltip> </el-tooltip>
</span> </span>
<span v-if="currentModel.status === 'PAUSE_DOWNLOAD'"> <span v-if="currentModel.status === 'PAUSE_DOWNLOAD'">
@ -17,7 +17,7 @@
:content="`${$t('views.model.modelForm.base_model.label')}: ${props.model.model_name} ${$t('views.model.tip.downloadError')}`" :content="`${$t('views.model.modelForm.base_model.label')}: ${props.model.model_name} ${$t('views.model.tip.downloadError')}`"
placement="top" placement="top"
> >
<el-icon class="danger ml-4" size="18"><Warning/></el-icon> <el-icon class="danger ml-4" size="18"><Warning /></el-icon>
</el-tooltip> </el-tooltip>
</span> </span>
</div> </div>
@ -27,20 +27,23 @@
{{ $t('common.creator') }}: {{ model.username }} {{ $t('common.creator') }}: {{ model.username }}
</el-text> </el-text>
</template> </template>
<template #tag>
<el-tag v-if="isShared" type="info" class="info-tag">
{{ t('views.system.shared') }}
</el-tag>
</template>
<ul> <ul>
<li class="flex mb-4"> <li class="flex mb-4">
<el-text type="info" class="color-secondary">{{ <el-text type="info" class="color-secondary"
$t('views.model.modelForm.model_type.label') >{{ $t('views.model.modelForm.model_type.label') }}
}}
</el-text> </el-text>
<span class="ellipsis ml-16"> <span class="ellipsis ml-16">
{{ $t(modelType[model.model_type as keyof typeof modelType]) }}</span {{ $t(modelType[model.model_type as keyof typeof modelType]) }}</span
> >
</li> </li>
<li class="flex"> <li class="flex">
<el-text type="info" class="color-secondary">{{ <el-text type="info" class="color-secondary"
$t('views.model.modelForm.base_model.label') >{{ $t('views.model.modelForm.base_model.label') }}
}}
</el-text> </el-text>
<span class="ellipsis-1 ml-16" style="height: 20px; width: 70%"> <span class="ellipsis-1 ml-16" style="height: 20px; width: 70%">
{{ model.model_name }}</span {{ model.model_name }}</span
@ -59,25 +62,31 @@
class="ml-16" class="ml-16"
:disabled="!is_permisstion" :disabled="!is_permisstion"
@click.stop="cancelDownload" @click.stop="cancelDownload"
>{{ $t('views.model.download.cancelDownload') }} >{{ $t('views.model.download.cancelDownload') }}
</el-button </el-button>
>
</div> </div>
</div> </div>
<template #mouseEnter> <template #mouseEnter>
<el-dropdown trigger="click"> <el-dropdown trigger="click" v-if="!isShared">
<el-button text @click.stop> <el-button text @click.stop>
<el-icon> <el-icon>
<MoreFilled/> <MoreFilled />
</el-icon> </el-icon>
</el-button> </el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item <el-dropdown-item
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, v-if="
RoleConst.USER.getWorkspaceRole, hasPermission(
PermissionConst.MODEL_EDIT.getWorkspacePermission],'OR')" [
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
RoleConst.USER.getWorkspaceRole,
PermissionConst.MODEL_EDIT.getWorkspacePermission,
],
'OR',
)
"
icon="EditPen" icon="EditPen"
:disabled="!is_permisstion" :disabled="!is_permisstion"
text text
@ -92,9 +101,14 @@
currentModel.model_type === 'LLM' || currentModel.model_type === 'LLM' ||
currentModel.model_type === 'IMAGE' || currentModel.model_type === 'IMAGE' ||
currentModel.model_type === 'TTI' || currentModel.model_type === 'TTI' ||
hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, hasPermission(
RoleConst.USER.getWorkspaceRole, [
PermissionConst.MODEL_EDIT.getWorkspacePermission],'OR') RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
RoleConst.USER.getWorkspaceRole,
PermissionConst.MODEL_EDIT.getWorkspacePermission,
],
'OR',
)
" "
:disabled="!is_permisstion" :disabled="!is_permisstion"
icon="Setting" icon="Setting"
@ -108,9 +122,16 @@
:disabled="!is_permisstion" :disabled="!is_permisstion"
text text
@click.stop="deleteModel" @click.stop="deleteModel"
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, v-if="
RoleConst.USER.getWorkspaceRole, hasPermission(
PermissionConst.MODEL_DELETE.getWorkspacePermission],'OR')" [
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
RoleConst.USER.getWorkspaceRole,
PermissionConst.MODEL_DELETE.getWorkspacePermission,
],
'OR',
)
"
> >
{{ $t('common.delete') }} {{ $t('common.delete') }}
</el-dropdown-item> </el-dropdown-item>
@ -119,20 +140,20 @@
</el-dropdown> </el-dropdown>
</template> </template>
<EditModel ref="editModelRef" @submit="emit('change')"></EditModel> <EditModel ref="editModelRef" @submit="emit('change')"></EditModel>
<ParamSettingDialog ref="paramSettingRef" :model="model"/> <ParamSettingDialog ref="paramSettingRef" :model="model" />
</card-box> </card-box>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import type {Provider, Model} from '@/api/type/model' import type { Provider, Model } from '@/api/type/model'
import ModelApi from '@/api/model/model' import ModelApi from '@/api/model/model'
import {computed, ref, onMounted, onBeforeUnmount} from 'vue' import { computed, ref, onMounted, onBeforeUnmount } from 'vue'
import EditModel from '@/views/model/component/EditModel.vue' import EditModel from '@/views/model/component/EditModel.vue'
// import DownloadLoading from '@/components/loading/DownloadLoading.vue' // import DownloadLoading from '@/components/loading/DownloadLoading.vue'
import {MsgConfirm} from '@/utils/message' import { MsgConfirm } from '@/utils/message'
import {modelType} from '@/enums/model' import { modelType } from '@/enums/model'
import useStore from '@/stores' import useStore from '@/stores'
import ParamSettingDialog from './ParamSettingDialog.vue' import ParamSettingDialog from './ParamSettingDialog.vue'
import {t} from '@/locales' import { t } from '@/locales'
import { PermissionConst, RoleConst } from '@/utils/permission/data' import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission' import { hasPermission } from '@/utils/permission'
@ -140,9 +161,10 @@ const props = defineProps<{
model: Model model: Model
provider_list: Array<Provider> provider_list: Array<Provider>
updateModelById: (model_id: string, model: Model) => void updateModelById: (model_id: string, model: Model) => void
isShared?: boolean | undefined
}>() }>()
const {user} = useStore() const { user } = useStore()
const downModel = ref<Model>() const downModel = ref<Model>()
const is_permisstion = computed(() => { const is_permisstion = computed(() => {
@ -182,8 +204,7 @@ const deleteModel = () => {
emit('change') emit('change')
}) })
}) })
.catch(() => { .catch(() => {})
})
} }
const cancelDownload = () => { const cancelDownload = () => {

View File

@ -4,9 +4,9 @@
<div class="p-8"> <div class="p-8">
<div <div
@click="handleSharedNodeClick" @click="handleSharedNodeClick"
class="shared-knowledge" class="shared-model"
v-if="isShared" v-if="isShared && hasPermission(EditionConst.IS_EE, 'OR')"
:class="currentNodeKey === 'share' && 'active'" :class="active?.provider === 'share' && 'active'"
> >
<AppIcon iconName="app-folder-share-active" style="font-size: 18px"></AppIcon> <AppIcon iconName="app-folder-share-active" style="font-size: 18px"></AppIcon>
<span class="ml-8 lighter">{{ $t('views.system.share_model') }}</span> <span class="ml-8 lighter">{{ $t('views.system.share_model') }}</span>
@ -102,6 +102,9 @@
import { watch, ref } from 'vue' import { watch, ref } from 'vue'
import type { Provider, Model } from '@/api/type/model' import type { Provider, Model } from '@/api/type/model'
import { modelTypeList, allObj } from '@/views/model/component/data' import { modelTypeList, allObj } from '@/views/model/component/data'
import { EditionConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index'
import { t } from '@/locales'
const props = defineProps<{ const props = defineProps<{
data: Array<Provider> data: Array<Provider>
loading: boolean loading: boolean
@ -142,7 +145,7 @@ const clickListHandle = (item: Provider) => {
} }
const handleSharedNodeClick = () => { const handleSharedNodeClick = () => {
emit('click', { id: 'share' }) emit('click', { provider: 'share', name: t('views.system.share_model') })
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -188,7 +191,7 @@ const handleSharedNodeClick = () => {
padding-bottom: 0 !important; padding-bottom: 0 !important;
} }
} }
.shared-knowledge { .shared-model {
padding-left: 8px; padding-left: 8px;
display: flex; display: flex;
align-items: center; align-items: center;

View File

@ -11,8 +11,7 @@
:active="active_provider" :active="active_provider"
/> />
</template> </template>
<SharedWorkspace v-if="active_provider && active_provider.id === 'share'"></SharedWorkspace> <ContentContainer :header="active_provider?.name" v-loading="list_model_loading">
<ContentContainer v-else :header="active_provider?.name" v-loading="list_model_loading">
<template #search> <template #search>
<div class="flex"> <div class="flex">
<div class="flex-between complex-search"> <div class="flex-between complex-search">
@ -55,13 +54,19 @@
</template> </template>
</el-select> </el-select>
</div> </div>
<el-button class="ml-16" type="primary" @click="openCreateModel(active_provider)" <el-button
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole, v-if="!isShared"
RoleConst.USER.getWorkspaceRole, class="ml-16"
PermissionConst.MODEL_CREATE.getWorkspacePermission]" type="primary"
@click="openCreateModel(active_provider)"
v-hasPermission="[
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
RoleConst.USER.getWorkspaceRole,
PermissionConst.MODEL_CREATE.getWorkspacePermission,
]"
> >
{{ $t('views.model.addModel') }} {{ $t('views.model.addModel') }}
</el-button> </el-button>
</div> </div>
</template> </template>
@ -84,6 +89,7 @@
:updateModelById="updateModelById" :updateModelById="updateModelById"
:model="model" :model="model"
:provider_list="provider_list" :provider_list="provider_list"
:isShared="isShared"
> >
</ModelCard> </ModelCard>
</el-col> </el-col>
@ -98,11 +104,13 @@
ref="createModelRef" ref="createModelRef"
@submit="list_model" @submit="list_model"
@change="openCreateModel($event)" @change="openCreateModel($event)"
v-if="!isShared"
></CreateModelDialog> ></CreateModelDialog>
<SelectProviderDialog <SelectProviderDialog
ref="selectProviderRef" ref="selectProviderRef"
@change="(provider, modelType) => openCreateModel(provider, modelType)" @change="(provider, modelType) => openCreateModel(provider, modelType)"
v-if="!isShared"
></SelectProviderDialog> ></SelectProviderDialog>
</LayoutContainer> </LayoutContainer>
</template> </template>
@ -116,13 +124,10 @@ import ProviderComponent from '@/views/model/component/Provider.vue'
import { splitArray } from '@/utils/common' import { splitArray } from '@/utils/common'
import { modelTypeList, allObj } from '@/views/model/component/data' import { modelTypeList, allObj } from '@/views/model/component/data'
import CreateModelDialog from '@/views/model/component/CreateModelDialog.vue' import CreateModelDialog from '@/views/model/component/CreateModelDialog.vue'
import SharedWorkspace from '@/views/shared/model-shared/SharedWorkspace.vue'
import SelectProviderDialog from '@/views/model/component/SelectProviderDialog.vue' import SelectProviderDialog from '@/views/model/component/SelectProviderDialog.vue'
import useStore from '@/stores'
import { t } from '@/locales' import { t } from '@/locales'
import { PermissionConst, RoleConst } from '@/utils/permission/data' import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
const { model } = useStore()
const commonList1 = ref() const commonList1 = ref()
const commonList2 = ref() const commonList2 = ref()
@ -145,6 +150,9 @@ const provider_list = ref<Array<Provider>>([])
const model_list = ref<Array<Model>>([]) const model_list = ref<Array<Model>>([])
const isShared = computed(() => {
return active_provider.value && active_provider.value.provider === 'share'
})
const updateModelById = (model_id: string, model: Model) => { const updateModelById = (model_id: string, model: Model) => {
model_list.value model_list.value
.filter((m) => m.id == model_id) .filter((m) => m.id == model_id)
@ -177,8 +185,8 @@ const openCreateModel = (provider?: Provider, model_type?: string) => {
const list_model = () => { const list_model = () => {
const params = active_provider.value?.provider ? { provider: active_provider.value.provider } : {} const params = active_provider.value?.provider ? { provider: active_provider.value.provider } : {}
model loadSharedApi('model', isShared.value)
.asyncGetModel( { ...model_search_form.value, ...params }, list_model_loading) .getModel({ ...model_search_form.value, ...params }, list_model_loading)
.then((ok: any) => { .then((ok: any) => {
model_list.value = ok.data model_list.value = ok.data
const v = model_list.value.map((m) => ({ id: m.user_id, username: m.username })) const v = model_list.value.map((m) => ({ id: m.user_id, username: m.username }))

View File

@ -135,7 +135,6 @@ const defaultProps = {
} }
const loadTree = (node: any, resolve: any) => { const loadTree = (node: any, resolve: any) => {
console.log(node)
if (node.isLeaf) return resolve([]) if (node.isLeaf) return resolve([])
const folder_id = node.level === 0 ? '' : node.data.id const folder_id = node.level === 0 ? '' : node.data.id
knowledge.asyncGetFolderKnowledge(folder_id, optionLoading).then((res: any) => { knowledge.asyncGetFolderKnowledge(folder_id, optionLoading).then((res: any) => {

View File

@ -86,7 +86,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, ref, reactive, watch, computed } from 'vue' import { onMounted, ref, reactive, watch, computed } from 'vue'
import AuthorizationApi from '@/api/user/resource-authorization' import AuthorizationApi from '@/api/system/resource-authorization'
import PermissionSetting from './component/PermissionSetting.vue' import PermissionSetting from './component/PermissionSetting.vue'
import { MsgSuccess, MsgConfirm } from '@/utils/message' import { MsgSuccess, MsgConfirm } from '@/utils/message'
import { AuthorizationEnum } from '@/enums/system' import { AuthorizationEnum } from '@/enums/system'

View File

@ -32,7 +32,7 @@ import { t } from '@/locales'
import type { RoleItem } from '@/api/type/role' import type { RoleItem } from '@/api/type/role'
import { MsgSuccess } from '@/utils/message' import { MsgSuccess } from '@/utils/message'
import { RoleTypeEnum } from '@/enums/system' import { RoleTypeEnum } from '@/enums/system'
import { loadPermissionApi } from '@/utils/permission-api' import { loadPermissionApi } from '@/utils/dynamics-api/permission-api'
const props = defineProps<{ const props = defineProps<{
currentRole?: RoleItem currentRole?: RoleItem

View File

@ -67,7 +67,7 @@ import { MsgSuccess, MsgConfirm } from '@/utils/message'
import { t } from '@/locales' import { t } from '@/locales'
import AddMemberDrawer from './AddMemberDrawer.vue' import AddMemberDrawer from './AddMemberDrawer.vue'
import { RoleTypeEnum } from '@/enums/system' import { RoleTypeEnum } from '@/enums/system'
import { loadPermissionApi } from '@/utils/permission-api' import { loadPermissionApi } from '@/utils/dynamics-api/permission-api'
import { PermissionConst, RoleConst } from '@/utils/permission/data' import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { ComplexPermission } from '@/utils/permission/type' import { ComplexPermission } from '@/utils/permission/type'
const props = defineProps<{ const props = defineProps<{

View File

@ -162,7 +162,7 @@ import type { RoleItem } from '@/api/type/role'
import { RoleTypeEnum } from '@/enums/system' import { RoleTypeEnum } from '@/enums/system'
import { roleTypeMap } from './index' import { roleTypeMap } from './index'
import { MsgSuccess, MsgConfirm } from '@/utils/message' import { MsgSuccess, MsgConfirm } from '@/utils/message'
import { loadPermissionApi } from '@/utils/permission-api' import { loadPermissionApi } from '@/utils/dynamics-api/permission-api'
import { PermissionConst, RoleConst } from '@/utils/permission/data' import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { ComplexPermission } from '@/utils/permission/type' import { ComplexPermission } from '@/utils/permission/type'

View File

@ -134,11 +134,10 @@ import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialo
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue' import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue' import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
import KnowledgeApi from '@/api/shared/knowledge' import KnowledgeApi from '@/api/shared/knowledge'
import KnowledgeWorkspaceApi from '@/api/shared/workspace' import KnowledgeWorkspaceApi from '@/api/shared-workspace'
import { MsgSuccess, MsgConfirm } from '@/utils/message' import { MsgSuccess, MsgConfirm } from '@/utils/message'
import useStore from '@/stores/modules-shared-system' import useStore from '@/stores/modules-shared-system'
import { numberFormat } from '@/utils/common' import { numberFormat } from '@/utils/common'
import iconMap from '@/components/app-icon/icons/common'
import { t } from '@/locales' import { t } from '@/locales'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import AuthorizedWorkspace from '@/views/shared/AuthorizedWorkspaceDialog.vue' import AuthorizedWorkspace from '@/views/shared/AuthorizedWorkspaceDialog.vue'
@ -147,7 +146,6 @@ const router = useRouter()
const { folder } = useStore() const { folder } = useStore()
const loading = ref(false) const loading = ref(false)
const rightOutlined = iconMap['right-outlined'].iconReader()
const search_type = ref('name') const search_type = ref('name')
const search_form = ref<any>({ const search_form = ref<any>({

View File

@ -105,7 +105,7 @@
import { onMounted, ref, computed } from 'vue' import { onMounted, ref, computed } from 'vue'
import ProviderApi from '@/api/shared/provider' import ProviderApi from '@/api/shared/provider'
import ModelApi from '@/api/shared/model' import ModelApi from '@/api/shared/model'
import ModelWorkspaceApi from '@/api/shared/workspace' import ModelWorkspaceApi from '@/api/shared-workspace'
import type { Provider, Model } from '@/api/type/model' import type { Provider, Model } from '@/api/type/model'
import ModelCard from '@/views/shared/model-shared/component/ModelCardSharedWorkspace.vue' import ModelCard from '@/views/shared/model-shared/component/ModelCardSharedWorkspace.vue'
import ProviderComponent from '@/views/shared/model-shared/component/Provider.vue' import ProviderComponent from '@/views/shared/model-shared/component/Provider.vue'

View File

@ -119,7 +119,7 @@
import { onMounted, ref, reactive, computed } from 'vue' import { onMounted, ref, reactive, computed } from 'vue'
import { cloneDeep, get } from 'lodash' import { cloneDeep, get } from 'lodash'
import ToolApi from '@/api/shared/tool' import ToolApi from '@/api/shared/tool'
import ToolWorkspaceApi from '@/api/shared/workspace' import ToolWorkspaceApi from '@/api/shared-workspace'
import useStore from '@/stores/modules-shared-system' import useStore from '@/stores/modules-shared-system'
import InitParamDrawer from '@/views/shared/tool-shared/component/InitParamDrawer.vue' import InitParamDrawer from '@/views/shared/tool-shared/component/InitParamDrawer.vue'
import ToolFormDrawer from './ToolFormDrawer.vue' import ToolFormDrawer from './ToolFormDrawer.vue'

View File

@ -52,7 +52,7 @@
import { ref, reactive, watch } from 'vue' import { ref, reactive, watch } from 'vue'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import chatUserApi from '@/api/system/chat-user' import chatUserApi from '@/api/system/chat-user'
import userManageApi from '@/api/user/user-manage' import userManageApi from '@/api/system/user-manage'
import { MsgSuccess } from '@/utils/message' import { MsgSuccess } from '@/utils/message'
import { t } from '@/locales' import { t } from '@/locales'
import type { ListItem } from '@/api/type/common' import type { ListItem } from '@/api/type/common'

View File

@ -7,16 +7,25 @@
:data="folderList" :data="folderList"
:currentNodeKey="currentFolder?.id" :currentNodeKey="currentFolder?.id"
@handleNodeClick="folderClickHandel" @handleNodeClick="folderClickHandel"
@refreshTree ="refreshFolder" @refreshTree="refreshFolder"
:shareTitle="hasPermission(new ComplexPermission( :shareTitle="
[RoleConst.ADMIN],[PermissionConst.SHARED_TOOL_READ],[EditionConst.IS_EE],'OR' hasPermission(
), 'OR')?'views.system.share_tool':null" new ComplexPermission(
isShared [RoleConst.ADMIN],
[PermissionConst.SHARED_TOOL_READ],
[EditionConst.IS_EE],
'OR',
),
'OR',
)
? 'views.system.share_tool'
: null
"
showShared
class="p-8" class="p-8"
/> />
</template> </template>
<SharedWorkspace v-if="currentFolder.id === 'share'"></SharedWorkspace> <ContentContainer :header="currentFolder?.name">
<ContentContainer v-else :header="currentFolder?.name">
<template #search> <template #search>
<div class="flex"> <div class="flex">
<div class="flex-between complex-search"> <div class="flex-between complex-search">
@ -48,7 +57,7 @@
<el-option v-for="u in user_options" :key="u.id" :value="u.id" :label="u.username" /> <el-option v-for="u in user_options" :key="u.id" :value="u.id" :label="u.username" />
</el-select> </el-select>
</div> </div>
<el-dropdown trigger="click"> <el-dropdown trigger="click" v-if="!isShared">
<el-button <el-button
type="primary" type="primary"
class="ml-8" class="ml-8"
@ -104,7 +113,9 @@
<img src="@/assets/node/icon_tool.svg" style="width: 58%" alt="" /> <img src="@/assets/node/icon_tool.svg" style="width: 58%" alt="" />
</el-avatar> </el-avatar>
<div class="pre-wrap ml-8"> <div class="pre-wrap ml-8">
<div class="lighter">{{ $t('views.tool.toolStore.createFromToolStore') }}</div> <div class="lighter">
{{ $t('views.tool.toolStore.createFromToolStore') }}
</div>
</div> </div>
</div> </div>
</el-dropdown-item> --> </el-dropdown-item> -->
@ -186,6 +197,11 @@
{{ $t('common.creator') }}: {{ item.nick_name }} {{ $t('common.creator') }}: {{ item.nick_name }}
</el-text> </el-text>
</template> </template>
<template #tag>
<el-tag v-if="isShared" type="info" class="info-tag">
{{ t('views.system.shared') }}
</el-tag>
</template>
<template #footer> <template #footer>
<div v-if="item.is_active" class="flex align-center"> <div v-if="item.is_active" class="flex align-center">
@ -204,7 +220,7 @@
</div> </div>
</template> </template>
<template #mouseEnter> <template #mouseEnter>
<div @click.stop> <div @click.stop v-if="!isShared">
<el-switch <el-switch
v-model="item.is_active" v-model="item.is_active"
:before-change="() => changeState(item)" :before-change="() => changeState(item)"
@ -318,7 +334,7 @@
</ContentContainer> </ContentContainer>
<InitParamDrawer ref="InitParamDrawerRef" @refresh="refresh" /> <InitParamDrawer ref="InitParamDrawerRef" @refresh="refresh" />
<ToolFormDrawer ref="ToolFormDrawerRef" @refresh="refresh" :title="ToolDrawertitle" /> <ToolFormDrawer ref="ToolFormDrawerRef" @refresh="refresh" :title="ToolDrawertitle" />
<CreateFolderDialog ref="CreateFolderDialogRef" @refresh="refreshFolder" /> <CreateFolderDialog ref="CreateFolderDialogRef" @refresh="refreshFolder" v-if="!isShared" />
<ToolStoreDialog ref="toolStoreDialogRef" @refresh="refresh" /> <ToolStoreDialog ref="toolStoreDialogRef" @refresh="refresh" />
</LayoutContainer> </LayoutContainer>
</template> </template>
@ -334,12 +350,12 @@ import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
import { t } from '@/locales' import { t } from '@/locales'
import { isAppIcon } from '@/utils/common' import { isAppIcon } from '@/utils/common'
import { MsgSuccess, MsgConfirm, MsgError } from '@/utils/message' import { MsgSuccess, MsgConfirm, MsgError } from '@/utils/message'
import SharedWorkspace from '@/views/shared/tool-shared/SharedWorkspace.vue'
import { EditionConst, PermissionConst, RoleConst } from '@/utils/permission/data' import { EditionConst, PermissionConst, RoleConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index' import { hasPermission } from '@/utils/permission/index'
import { FolderSource } from '@/enums/common' import { FolderSource } from '@/enums/common'
import { ComplexPermission } from '@/utils/permission/type' import { ComplexPermission } from '@/utils/permission/type'
import ToolStoreDialog from './component/ToolStoreDialog.vue' import ToolStoreDialog from './component/ToolStoreDialog.vue'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
const { folder, user } = useStore() const { folder, user } = useStore()
@ -366,6 +382,10 @@ const folderList = ref<any[]>([])
const toolList = ref<any[]>([]) const toolList = ref<any[]>([])
const currentFolder = ref<any>({}) const currentFolder = ref<any>({})
const isShared = computed(() => {
return currentFolder.value.id === 'share'
})
const search_type_change = () => { const search_type_change = () => {
search_form.value = { name: '', create_user: '' } search_form.value = { name: '', create_user: '' }
} }
@ -392,10 +412,12 @@ function getList() {
folder_id: currentFolder.value?.id || user.getWorkspaceId(), folder_id: currentFolder.value?.id || user.getWorkspaceId(),
scope: 'WORKSPACE', scope: 'WORKSPACE',
} }
ToolApi.getToolListPage(paginationConfig, params, loading).then((res) => { loadSharedApi('tool', isShared.value)
paginationConfig.total = res.data?.total .getToolListPage(paginationConfig, params, loading)
toolList.value = [...toolList.value, ...res.data?.records] .then((res: any) => {
}) paginationConfig.total = res.data?.total
toolList.value = [...toolList.value, ...res.data?.records]
})
} }
function clickFolder(item: any) { function clickFolder(item: any) {
@ -565,7 +587,6 @@ function folderClickHandel(row: any) {
getList() getList()
} }
onMounted(() => { onMounted(() => {
getFolder(true) getFolder(true)
}) })

View File

@ -69,7 +69,7 @@
<script setup lang="ts"> <script setup lang="ts">
import {ref, reactive, watch, onBeforeMount} from 'vue' import {ref, reactive, watch, onBeforeMount} from 'vue'
import type {FormInstance} from 'element-plus' import type {FormInstance} from 'element-plus'
import userManageApi from '@/api/user/user-manage' import userManageApi from '@/api/system/user-manage'
import {MsgSuccess} from '@/utils/message' import {MsgSuccess} from '@/utils/message'
import {t} from '@/locales' import {t} from '@/locales'
import type {FormItemModel} from '@/api/type/role' import type {FormItemModel} from '@/api/type/role'

View File

@ -44,7 +44,7 @@ import { ref, reactive, watch } from 'vue'
import useStore from '@/stores' import useStore from '@/stores'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import type { ResetPasswordRequest } from '@/api/type/user' import type { ResetPasswordRequest } from '@/api/type/user'
import userManageApi from '@/api/user/user-manage' import userManageApi from '@/api/system/user-manage'
import { MsgSuccess } from '@/utils/message' import { MsgSuccess } from '@/utils/message'
import { t } from '@/locales' import { t } from '@/locales'
const emit = defineEmits(['refresh']) const emit = defineEmits(['refresh'])

View File

@ -143,7 +143,7 @@
import { onMounted, ref, reactive, watch } from 'vue' import { onMounted, ref, reactive, watch } from 'vue'
import UserDrawer from './component/UserDrawer.vue' import UserDrawer from './component/UserDrawer.vue'
import UserPwdDialog from './component/UserPwdDialog.vue' import UserPwdDialog from './component/UserPwdDialog.vue'
import userManageApi from '@/api/user/user-manage' import userManageApi from '@/api/system/user-manage'
import { datetimeFormat } from '@/utils/time' import { datetimeFormat } from '@/utils/time'
import { MsgSuccess, MsgConfirm } from '@/utils/message' import { MsgSuccess, MsgConfirm } from '@/utils/message'
import { t } from '@/locales' import { t } from '@/locales'

View File

@ -190,7 +190,7 @@ function getknowledge() {
// knowledgeList.value = res.data // knowledgeList.value = res.data
// }) // })
// } else { // } else {
knowledge.asyncGetFolderKnowledge(knowledgeLoading).then((res: any) => { knowledge.asyncGetFolderKnowledge('',knowledgeLoading).then((res: any) => {
knowledgeList.value = res.data?.filter((v: any) => v.user_id === user.userInfo?.id) knowledgeList.value = res.data?.filter((v: any) => v.user_id === user.userInfo?.id)
}) })
// } // }