mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 10:02:46 +00:00
feat: shared workspace
This commit is contained in:
parent
9c73c8dea0
commit
190d25857f
|
|
@ -1,7 +1,6 @@
|
|||
import { Result } from '@/request/Result'
|
||||
import { get, post, del, put } from '@/request/index'
|
||||
import { type Ref } from 'vue'
|
||||
import type { pageRequest } from '@/api/type/common'
|
||||
|
||||
import useStore from '@/stores'
|
||||
const prefix: any = { _value: '/workspace/' }
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import type {
|
|||
} from '@/api/type/model'
|
||||
import type { FormField } from '@/components/dynamics-form/type'
|
||||
|
||||
|
||||
import useStore from '@/stores'
|
||||
const prefix: any = { _value: '/workspace/' }
|
||||
Object.defineProperty(prefix, 'value', {
|
||||
|
|
@ -24,7 +23,7 @@ Object.defineProperty(prefix, 'value', {
|
|||
* @params 参数 name, model_type, model_name
|
||||
*/
|
||||
const getModel: (
|
||||
request?: ListModelRequest,
|
||||
data?: ListModelRequest,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<Array<Model>>> = (data, loading) => {
|
||||
return get(`${prefix.value}`, data, loading)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
) => {
|
||||
return get(`${prefix}/${prefix_workspace.value}/knowledge`, {}, loading)
|
||||
}
|
||||
|
||||
const getSharedWorkspaceKnowledgePage: (
|
||||
const getKnowledgeListPage: (
|
||||
page: pageRequest,
|
||||
param: any,
|
||||
loading?: Ref<boolean>,
|
||||
|
|
@ -33,46 +33,31 @@ const getSharedWorkspaceKnowledgePage: (
|
|||
)
|
||||
}
|
||||
|
||||
const getSharedWorkspaceModel: (loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (
|
||||
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: (
|
||||
const getModel: (
|
||||
param: any,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<Array<any>>> = (param: any, loading) => {
|
||||
console.log(`${prefix}/${prefix_workspace.value}/model`)
|
||||
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,
|
||||
) => {
|
||||
return get(`${prefix}/${prefix_workspace.value}/tool`, {}, loading)
|
||||
}
|
||||
|
||||
const getSharedWorkspaceToolPage: (
|
||||
param: any,
|
||||
const getToolListPage: (
|
||||
page: pageRequest,
|
||||
param?: any,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<Array<any>>> = (param: any, loading) => {
|
||||
return get(`${prefix}/${prefix_workspace.value}/tool`, param, loading)
|
||||
) => Promise<Result<any>> = (page, param, loading) => {
|
||||
return get(`${prefix}/${prefix_workspace.value}/tool/${page.current_page}/${page.page_size}`, param, loading)
|
||||
}
|
||||
|
||||
export default {
|
||||
getSharedWorkspaceKnowledge,
|
||||
getSharedWorkspaceKnowledgePage,
|
||||
getSharedWorkspaceModel,
|
||||
getSharedWorkspaceModelPage,
|
||||
getSharedWorkspaceTool,
|
||||
getSharedWorkspaceToolPage,
|
||||
getCESharedWorkspaceModel
|
||||
getKnowledgeList,
|
||||
getKnowledgeListPage,
|
||||
getModel,
|
||||
getToolList,
|
||||
getToolListPage
|
||||
}
|
||||
|
|
@ -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,
|
||||
}
|
||||
|
|
@ -2,8 +2,6 @@ import { Result } from '@/request/Result'
|
|||
import { get, put, post, del } from '@/request/index'
|
||||
import type { pageRequest } from '@/api/type/common'
|
||||
import type { Ref } from 'vue'
|
||||
|
||||
import useStore from '@/stores'
|
||||
const prefix = '/workspace'
|
||||
|
||||
/**
|
||||
|
|
@ -17,10 +17,10 @@
|
|||
</div>
|
||||
</slot>
|
||||
<slot name="subTitle"> </slot>
|
||||
<div class="shared" v-if="isShared">{{t('views.system.shared')}}</div>
|
||||
</div>
|
||||
|
||||
<div class="status-tag">
|
||||
<slot name="tag"> </slot>
|
||||
<slot name="tag"> <!-- 放标签 --> </slot>
|
||||
</div>
|
||||
</div>
|
||||
</slot>
|
||||
|
|
@ -61,9 +61,8 @@ const props = withDefaults(
|
|||
* 是否展示icon
|
||||
*/
|
||||
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)
|
||||
|
|
@ -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 {
|
||||
position: absolute;
|
||||
bottom: 8px;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
/>
|
||||
<div
|
||||
@click="handleSharedNodeClick"
|
||||
v-if="!!shareTitle"
|
||||
v-if="showShared && hasPermission(EditionConst.IS_EE, 'OR')"
|
||||
class="shared-knowledge"
|
||||
:class="currentNodeKey === 'share' && 'active'"
|
||||
>
|
||||
|
|
@ -83,6 +83,8 @@ import type { TreeInstance } from 'element-plus'
|
|||
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
|
||||
import { t } from '@/locales'
|
||||
import folderApi from '@/api/folder'
|
||||
import { EditionConst } from '@/utils/permission/data'
|
||||
import { hasPermission } from '@/utils/permission/index'
|
||||
defineOptions({ name: 'FolderTree' })
|
||||
const props = defineProps({
|
||||
data: {
|
||||
|
|
@ -97,7 +99,7 @@ const props = defineProps({
|
|||
type: String,
|
||||
default: 'APPLICATION',
|
||||
},
|
||||
isShared: {
|
||||
showShared: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
import { ref } from 'vue'
|
||||
import type { ResetCurrentUserPasswordRequest } from '@/api/type/user'
|
||||
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 { useRouter } from 'vue-router'
|
||||
import { t } from '@/locales'
|
||||
|
|
|
|||
|
|
@ -4,9 +4,11 @@
|
|||
border-radius: var(--el-border-radius-base);
|
||||
.el-select__wrapper {
|
||||
box-shadow: none !important;
|
||||
border-radius: var(--el-border-radius-base) 0 0 var(--el-border-radius-base);
|
||||
}
|
||||
.el-input__wrapper {
|
||||
box-shadow: none !important;
|
||||
border-radius: 0 var(--el-border-radius-base) var(--el-border-radius-base) 0;
|
||||
}
|
||||
&__left {
|
||||
border-right: 1px solid var(--el-border-color);
|
||||
|
|
|
|||
|
|
@ -28,3 +28,4 @@ export function loadPermissionApi(type: string) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
|
|
@ -4,10 +4,15 @@
|
|||
<h3>
|
||||
{{ $t('common.setting') }}
|
||||
</h3>
|
||||
<el-button type="primary" @click="submit(applicationFormRef)" :disabled="loading"
|
||||
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
RoleConst.USER.getWorkspaceRole,
|
||||
PermissionConst.APPLICATION_OVERVIEW_PUBLIC.getWorkspacePermission]"
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submit(applicationFormRef)"
|
||||
:disabled="loading"
|
||||
v-hasPermission="[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
RoleConst.USER.getWorkspaceRole,
|
||||
PermissionConst.APPLICATION_OVERVIEW_PUBLIC.getWorkspacePermission,
|
||||
]"
|
||||
>
|
||||
{{ $t('views.application.buttons.publish') }}
|
||||
</el-button>
|
||||
|
|
@ -635,7 +640,7 @@ function getDetail() {
|
|||
}
|
||||
|
||||
function getKnowledge() {
|
||||
knowledge.asyncGetFolderKnowledge(knowledgeLoading).then((res: any) => {
|
||||
knowledge.asyncGetFolderKnowledge('', knowledgeLoading).then((res: any) => {
|
||||
knowledgeList.value = res.data
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@
|
|||
class="p-8"
|
||||
v-loading="folderLoading"
|
||||
:canOperation="false"
|
||||
showShared
|
||||
/>
|
||||
</template>
|
||||
<el-scrollbar>
|
||||
|
|
@ -51,7 +52,7 @@
|
|||
<el-row :gutter="12" v-loading="loading">
|
||||
<el-col
|
||||
: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"
|
||||
class="mb-16"
|
||||
>
|
||||
|
|
@ -104,7 +105,7 @@ const props = defineProps({
|
|||
})
|
||||
|
||||
const emit = defineEmits(['addData', 'refresh'])
|
||||
const { folder, user,knowledge } = useStore()
|
||||
const { folder, user, knowledge } = useStore()
|
||||
|
||||
const dialogVisible = ref<boolean>(false)
|
||||
const checkList = ref([])
|
||||
|
|
@ -192,10 +193,8 @@ function getFolder() {
|
|||
}
|
||||
|
||||
function getList() {
|
||||
const params = {
|
||||
folder_id: currentFolder.value?.id || user.getWorkspaceId(),
|
||||
}
|
||||
knowledge.asyncGetFolderKnowledge(params, loading).then((res) => {
|
||||
const folder_id = currentFolder.value?.id || user.getWorkspaceId()
|
||||
knowledge.asyncGetFolderKnowledge(folder_id, loading).then((res: any) => {
|
||||
searchDate.value = res.data
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ import type { ResetPasswordRequest } from '@/api/type/user'
|
|||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { MsgSuccess } from '@/utils/message'
|
||||
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'
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
|
|
|
|||
|
|
@ -8,12 +8,11 @@
|
|||
:currentNodeKey="currentFolder?.id"
|
||||
@handleNodeClick="folderClickHandel"
|
||||
class="p-8"
|
||||
isShared
|
||||
showShared
|
||||
@refreshTree="refreshFolder"
|
||||
/>
|
||||
</template>
|
||||
<SharedWorkspace v-if="currentFolder.id === 'share'"></SharedWorkspace>
|
||||
<ContentContainer v-else :header="currentFolder?.name">
|
||||
<ContentContainer :header="currentFolder?.name">
|
||||
<template #search>
|
||||
<div class="flex">
|
||||
<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-select>
|
||||
</div>
|
||||
<el-dropdown trigger="click">
|
||||
<el-dropdown trigger="click" v-if="!isShared">
|
||||
<el-button
|
||||
type="primary"
|
||||
class="ml-8"
|
||||
|
|
@ -193,7 +192,6 @@
|
|||
<CardBox
|
||||
:title="item.name"
|
||||
:description="item.desc"
|
||||
:isShared="currentFolder.id === 'share'"
|
||||
class="cursor"
|
||||
@click="
|
||||
router.push({ path: `/knowledge/${item.id}/${currentFolder.id}/document` })
|
||||
|
|
@ -207,7 +205,11 @@
|
|||
{{ $t('common.creator') }}: {{ item.nick_name }}
|
||||
</el-text>
|
||||
</template>
|
||||
|
||||
<template #tag>
|
||||
<el-tag v-if="isShared" type="info" class="info-tag">
|
||||
{{ t('views.system.shared') }}
|
||||
</el-tag>
|
||||
</template>
|
||||
<template #footer>
|
||||
<div class="footer-content flex-between">
|
||||
<div>
|
||||
|
|
@ -227,7 +229,7 @@
|
|||
</div>
|
||||
</template>
|
||||
<template #mouseEnter>
|
||||
<div @click.stop>
|
||||
<div @click.stop v-if="!isShared">
|
||||
<el-dropdown trigger="click">
|
||||
<el-button text @click.stop>
|
||||
<el-icon>
|
||||
|
|
@ -338,7 +340,7 @@
|
|||
<el-dropdown-item
|
||||
icon="Delete"
|
||||
type="danger"
|
||||
@click.stop="deleteKnowledge(item)"
|
||||
@click.stop="deleteKnowledge(item)"
|
||||
v-if="
|
||||
hasPermission(
|
||||
[
|
||||
|
|
@ -367,15 +369,15 @@
|
|||
</div>
|
||||
</ContentContainer>
|
||||
|
||||
<component :is="currentCreateDialog" ref="CreateKnowledgeDialogRef" />
|
||||
<CreateFolderDialog ref="CreateFolderDialogRef" @refresh="refreshFolder" />
|
||||
<component :is="currentCreateDialog" ref="CreateKnowledgeDialogRef" v-if="!isShared" />
|
||||
<CreateFolderDialog ref="CreateFolderDialogRef" @refresh="refreshFolder" v-if="!isShared" />
|
||||
<GenerateRelatedDialog ref="GenerateRelatedDialogRef" />
|
||||
<SyncWebDialog ref="SyncWebDialogRef" />
|
||||
<SyncWebDialog ref="SyncWebDialogRef" v-if="!isShared" />
|
||||
</LayoutContainer>
|
||||
</template>
|
||||
|
||||
<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 CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialog.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 GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
|
||||
import KnowledgeApi from '@/api/knowledge/knowledge'
|
||||
import SharedWorkspace from '@/views/shared/knowledge-shared/SharedWorkspace.vue'
|
||||
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
||||
import useStore from '@/stores'
|
||||
import { numberFormat } from '@/utils/common'
|
||||
|
|
@ -392,6 +393,7 @@ import { useRouter } from 'vue-router'
|
|||
import { FolderSource } from '@/enums/common'
|
||||
import { PermissionConst, RoleConst } from '@/utils/permission/data'
|
||||
import { hasPermission } from '@/utils/permission/index'
|
||||
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
|
||||
|
||||
const router = useRouter()
|
||||
const { folder, user } = useStore()
|
||||
|
|
@ -419,6 +421,9 @@ const currentFolder = ref<any>({})
|
|||
const CreateKnowledgeDialogRef = ref()
|
||||
const currentCreateDialog = shallowRef<any>(null)
|
||||
|
||||
const isShared = computed(() => {
|
||||
return currentFolder.value.id === 'share'
|
||||
})
|
||||
function openCreateDialog(data: any) {
|
||||
currentCreateDialog.value = data
|
||||
nextTick(() => {
|
||||
|
|
@ -463,10 +468,12 @@ function getList() {
|
|||
[search_type.value]: search_form.value[search_type.value],
|
||||
}
|
||||
|
||||
KnowledgeApi.getKnowledgeListPage(paginationConfig, params, loading).then((res) => {
|
||||
paginationConfig.total = res.data.total
|
||||
knowledgeList.value = [...knowledgeList.value, ...res.data.records]
|
||||
})
|
||||
loadSharedApi('knowledge', isShared.value)
|
||||
.getKnowledgeListPage(paginationConfig, params, loading)
|
||||
.then((res: any) => {
|
||||
paginationConfig.total = res.data.total
|
||||
knowledgeList.value = [...knowledgeList.value, ...res.data.records]
|
||||
})
|
||||
}
|
||||
|
||||
function clickFolder(item: any) {
|
||||
|
|
@ -531,11 +538,9 @@ function getFolder(bool?: boolean) {
|
|||
function folderClickHandel(row: any) {
|
||||
currentFolder.value = row
|
||||
knowledgeList.value = []
|
||||
if (currentFolder.value.id === 'share') return
|
||||
getList()
|
||||
}
|
||||
function refreshFolder() {
|
||||
console.log(currentFolder.value)
|
||||
knowledgeList.value = []
|
||||
getFolder()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ import LoginLayout from '@/layout/login-layout/LoginLayout.vue'
|
|||
import type { CheckCodeRequest } from '@/api/type/user'
|
||||
import { useRouter } from 'vue-router'
|
||||
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 { t } from '@/locales'
|
||||
import useStore from '@/stores'
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ import type { ResetPasswordRequest } from '@/api/type/user'
|
|||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { MsgSuccess } from '@/utils/message'
|
||||
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'
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
{{ model.name }}
|
||||
<span v-if="currentModel.status === 'ERROR'">
|
||||
<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>
|
||||
</span>
|
||||
<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')}`"
|
||||
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>
|
||||
</span>
|
||||
</div>
|
||||
|
|
@ -27,20 +27,23 @@
|
|||
{{ $t('common.creator') }}: {{ model.username }}
|
||||
</el-text>
|
||||
</template>
|
||||
<template #tag>
|
||||
<el-tag v-if="isShared" type="info" class="info-tag">
|
||||
{{ t('views.system.shared') }}
|
||||
</el-tag>
|
||||
</template>
|
||||
<ul>
|
||||
<li class="flex mb-4">
|
||||
<el-text type="info" class="color-secondary">{{
|
||||
$t('views.model.modelForm.model_type.label')
|
||||
}}
|
||||
<el-text type="info" class="color-secondary"
|
||||
>{{ $t('views.model.modelForm.model_type.label') }}
|
||||
</el-text>
|
||||
<span class="ellipsis ml-16">
|
||||
{{ $t(modelType[model.model_type as keyof typeof modelType]) }}</span
|
||||
>
|
||||
</li>
|
||||
<li class="flex">
|
||||
<el-text type="info" class="color-secondary">{{
|
||||
$t('views.model.modelForm.base_model.label')
|
||||
}}
|
||||
<el-text type="info" class="color-secondary"
|
||||
>{{ $t('views.model.modelForm.base_model.label') }}
|
||||
</el-text>
|
||||
<span class="ellipsis-1 ml-16" style="height: 20px; width: 70%">
|
||||
{{ model.model_name }}</span
|
||||
|
|
@ -59,25 +62,31 @@
|
|||
class="ml-16"
|
||||
:disabled="!is_permisstion"
|
||||
@click.stop="cancelDownload"
|
||||
>{{ $t('views.model.download.cancelDownload') }}
|
||||
</el-button
|
||||
>
|
||||
>{{ $t('views.model.download.cancelDownload') }}
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template #mouseEnter>
|
||||
<el-dropdown trigger="click">
|
||||
<el-dropdown trigger="click" v-if="!isShared">
|
||||
<el-button text @click.stop>
|
||||
<el-icon>
|
||||
<MoreFilled/>
|
||||
<MoreFilled />
|
||||
</el-icon>
|
||||
</el-button>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item
|
||||
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
RoleConst.USER.getWorkspaceRole,
|
||||
PermissionConst.MODEL_EDIT.getWorkspacePermission],'OR')"
|
||||
v-if="
|
||||
hasPermission(
|
||||
[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
RoleConst.USER.getWorkspaceRole,
|
||||
PermissionConst.MODEL_EDIT.getWorkspacePermission,
|
||||
],
|
||||
'OR',
|
||||
)
|
||||
"
|
||||
icon="EditPen"
|
||||
:disabled="!is_permisstion"
|
||||
text
|
||||
|
|
@ -92,9 +101,14 @@
|
|||
currentModel.model_type === 'LLM' ||
|
||||
currentModel.model_type === 'IMAGE' ||
|
||||
currentModel.model_type === 'TTI' ||
|
||||
hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
RoleConst.USER.getWorkspaceRole,
|
||||
PermissionConst.MODEL_EDIT.getWorkspacePermission],'OR')
|
||||
hasPermission(
|
||||
[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
RoleConst.USER.getWorkspaceRole,
|
||||
PermissionConst.MODEL_EDIT.getWorkspacePermission,
|
||||
],
|
||||
'OR',
|
||||
)
|
||||
"
|
||||
:disabled="!is_permisstion"
|
||||
icon="Setting"
|
||||
|
|
@ -108,9 +122,16 @@
|
|||
:disabled="!is_permisstion"
|
||||
text
|
||||
@click.stop="deleteModel"
|
||||
v-if="hasPermission([RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
RoleConst.USER.getWorkspaceRole,
|
||||
PermissionConst.MODEL_DELETE.getWorkspacePermission],'OR')"
|
||||
v-if="
|
||||
hasPermission(
|
||||
[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
RoleConst.USER.getWorkspaceRole,
|
||||
PermissionConst.MODEL_DELETE.getWorkspacePermission,
|
||||
],
|
||||
'OR',
|
||||
)
|
||||
"
|
||||
>
|
||||
{{ $t('common.delete') }}
|
||||
</el-dropdown-item>
|
||||
|
|
@ -119,20 +140,20 @@
|
|||
</el-dropdown>
|
||||
</template>
|
||||
<EditModel ref="editModelRef" @submit="emit('change')"></EditModel>
|
||||
<ParamSettingDialog ref="paramSettingRef" :model="model"/>
|
||||
<ParamSettingDialog ref="paramSettingRef" :model="model" />
|
||||
</card-box>
|
||||
</template>
|
||||
<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 {computed, ref, onMounted, onBeforeUnmount} from 'vue'
|
||||
import { computed, ref, onMounted, onBeforeUnmount } from 'vue'
|
||||
import EditModel from '@/views/model/component/EditModel.vue'
|
||||
// import DownloadLoading from '@/components/loading/DownloadLoading.vue'
|
||||
import {MsgConfirm} from '@/utils/message'
|
||||
import {modelType} from '@/enums/model'
|
||||
import { MsgConfirm } from '@/utils/message'
|
||||
import { modelType } from '@/enums/model'
|
||||
import useStore from '@/stores'
|
||||
import ParamSettingDialog from './ParamSettingDialog.vue'
|
||||
import {t} from '@/locales'
|
||||
import { t } from '@/locales'
|
||||
import { PermissionConst, RoleConst } from '@/utils/permission/data'
|
||||
import { hasPermission } from '@/utils/permission'
|
||||
|
||||
|
|
@ -140,9 +161,10 @@ const props = defineProps<{
|
|||
model: Model
|
||||
provider_list: Array<Provider>
|
||||
updateModelById: (model_id: string, model: Model) => void
|
||||
isShared?: boolean | undefined
|
||||
}>()
|
||||
|
||||
const {user} = useStore()
|
||||
const { user } = useStore()
|
||||
const downModel = ref<Model>()
|
||||
|
||||
const is_permisstion = computed(() => {
|
||||
|
|
@ -182,8 +204,7 @@ const deleteModel = () => {
|
|||
emit('change')
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
})
|
||||
.catch(() => {})
|
||||
}
|
||||
|
||||
const cancelDownload = () => {
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
<div class="p-8">
|
||||
<div
|
||||
@click="handleSharedNodeClick"
|
||||
class="shared-knowledge"
|
||||
v-if="isShared"
|
||||
:class="currentNodeKey === 'share' && 'active'"
|
||||
class="shared-model"
|
||||
v-if="isShared && hasPermission(EditionConst.IS_EE, 'OR')"
|
||||
:class="active?.provider === 'share' && 'active'"
|
||||
>
|
||||
<AppIcon iconName="app-folder-share-active" style="font-size: 18px"></AppIcon>
|
||||
<span class="ml-8 lighter">{{ $t('views.system.share_model') }}</span>
|
||||
|
|
@ -102,6 +102,9 @@
|
|||
import { watch, ref } from 'vue'
|
||||
import type { Provider, Model } from '@/api/type/model'
|
||||
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<{
|
||||
data: Array<Provider>
|
||||
loading: boolean
|
||||
|
|
@ -142,7 +145,7 @@ const clickListHandle = (item: Provider) => {
|
|||
}
|
||||
|
||||
const handleSharedNodeClick = () => {
|
||||
emit('click', { id: 'share' })
|
||||
emit('click', { provider: 'share', name: t('views.system.share_model') })
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
|
|
@ -188,7 +191,7 @@ const handleSharedNodeClick = () => {
|
|||
padding-bottom: 0 !important;
|
||||
}
|
||||
}
|
||||
.shared-knowledge {
|
||||
.shared-model {
|
||||
padding-left: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
|
|||
|
|
@ -11,8 +11,7 @@
|
|||
:active="active_provider"
|
||||
/>
|
||||
</template>
|
||||
<SharedWorkspace v-if="active_provider && active_provider.id === 'share'"></SharedWorkspace>
|
||||
<ContentContainer v-else :header="active_provider?.name" v-loading="list_model_loading">
|
||||
<ContentContainer :header="active_provider?.name" v-loading="list_model_loading">
|
||||
<template #search>
|
||||
<div class="flex">
|
||||
<div class="flex-between complex-search">
|
||||
|
|
@ -55,13 +54,19 @@
|
|||
</template>
|
||||
</el-select>
|
||||
</div>
|
||||
<el-button class="ml-16" type="primary" @click="openCreateModel(active_provider)"
|
||||
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
RoleConst.USER.getWorkspaceRole,
|
||||
PermissionConst.MODEL_CREATE.getWorkspacePermission]"
|
||||
<el-button
|
||||
v-if="!isShared"
|
||||
class="ml-16"
|
||||
type="primary"
|
||||
@click="openCreateModel(active_provider)"
|
||||
v-hasPermission="[
|
||||
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
|
||||
RoleConst.USER.getWorkspaceRole,
|
||||
PermissionConst.MODEL_CREATE.getWorkspacePermission,
|
||||
]"
|
||||
>
|
||||
{{ $t('views.model.addModel') }}
|
||||
</el-button>
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
|
@ -84,6 +89,7 @@
|
|||
:updateModelById="updateModelById"
|
||||
:model="model"
|
||||
:provider_list="provider_list"
|
||||
:isShared="isShared"
|
||||
>
|
||||
</ModelCard>
|
||||
</el-col>
|
||||
|
|
@ -98,11 +104,13 @@
|
|||
ref="createModelRef"
|
||||
@submit="list_model"
|
||||
@change="openCreateModel($event)"
|
||||
v-if="!isShared"
|
||||
></CreateModelDialog>
|
||||
|
||||
<SelectProviderDialog
|
||||
ref="selectProviderRef"
|
||||
@change="(provider, modelType) => openCreateModel(provider, modelType)"
|
||||
v-if="!isShared"
|
||||
></SelectProviderDialog>
|
||||
</LayoutContainer>
|
||||
</template>
|
||||
|
|
@ -116,13 +124,10 @@ import ProviderComponent from '@/views/model/component/Provider.vue'
|
|||
import { splitArray } from '@/utils/common'
|
||||
import { modelTypeList, allObj } from '@/views/model/component/data'
|
||||
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 useStore from '@/stores'
|
||||
import { t } from '@/locales'
|
||||
import { PermissionConst, RoleConst } from '@/utils/permission/data'
|
||||
|
||||
const { model } = useStore()
|
||||
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
|
||||
|
||||
const commonList1 = ref()
|
||||
const commonList2 = ref()
|
||||
|
|
@ -145,6 +150,9 @@ const provider_list = ref<Array<Provider>>([])
|
|||
|
||||
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) => {
|
||||
model_list.value
|
||||
.filter((m) => m.id == model_id)
|
||||
|
|
@ -177,8 +185,8 @@ const openCreateModel = (provider?: Provider, model_type?: string) => {
|
|||
|
||||
const list_model = () => {
|
||||
const params = active_provider.value?.provider ? { provider: active_provider.value.provider } : {}
|
||||
model
|
||||
.asyncGetModel( { ...model_search_form.value, ...params }, list_model_loading)
|
||||
loadSharedApi('model', isShared.value)
|
||||
.getModel({ ...model_search_form.value, ...params }, list_model_loading)
|
||||
.then((ok: any) => {
|
||||
model_list.value = ok.data
|
||||
const v = model_list.value.map((m) => ({ id: m.user_id, username: m.username }))
|
||||
|
|
|
|||
|
|
@ -135,7 +135,6 @@ const defaultProps = {
|
|||
}
|
||||
|
||||
const loadTree = (node: any, resolve: any) => {
|
||||
console.log(node)
|
||||
if (node.isLeaf) return resolve([])
|
||||
const folder_id = node.level === 0 ? '' : node.data.id
|
||||
knowledge.asyncGetFolderKnowledge(folder_id, optionLoading).then((res: any) => {
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@
|
|||
|
||||
<script lang="ts" setup>
|
||||
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 { MsgSuccess, MsgConfirm } from '@/utils/message'
|
||||
import { AuthorizationEnum } from '@/enums/system'
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ import { t } from '@/locales'
|
|||
import type { RoleItem } from '@/api/type/role'
|
||||
import { MsgSuccess } from '@/utils/message'
|
||||
import { RoleTypeEnum } from '@/enums/system'
|
||||
import { loadPermissionApi } from '@/utils/permission-api'
|
||||
import { loadPermissionApi } from '@/utils/dynamics-api/permission-api'
|
||||
|
||||
const props = defineProps<{
|
||||
currentRole?: RoleItem
|
||||
|
|
|
|||
|
|
@ -67,7 +67,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'
|
||||
import { loadPermissionApi } from '@/utils/dynamics-api/permission-api'
|
||||
import { PermissionConst, RoleConst } from '@/utils/permission/data'
|
||||
import { ComplexPermission } from '@/utils/permission/type'
|
||||
const props = defineProps<{
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ import type { RoleItem } from '@/api/type/role'
|
|||
import { RoleTypeEnum } from '@/enums/system'
|
||||
import { roleTypeMap } from './index'
|
||||
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 { ComplexPermission } from '@/utils/permission/type'
|
||||
|
||||
|
|
|
|||
|
|
@ -134,11 +134,10 @@ import CreateWebKnowledgeDialog from './create-component/CreateWebKnowledgeDialo
|
|||
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
|
||||
import GenerateRelatedDialog from '@/components/generate-related-shared-dialog/index.vue'
|
||||
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 useStore from '@/stores/modules-shared-system'
|
||||
import { numberFormat } from '@/utils/common'
|
||||
import iconMap from '@/components/app-icon/icons/common'
|
||||
import { t } from '@/locales'
|
||||
import { useRouter } from 'vue-router'
|
||||
import AuthorizedWorkspace from '@/views/shared/AuthorizedWorkspaceDialog.vue'
|
||||
|
|
@ -147,7 +146,6 @@ const router = useRouter()
|
|||
const { folder } = useStore()
|
||||
|
||||
const loading = ref(false)
|
||||
const rightOutlined = iconMap['right-outlined'].iconReader()
|
||||
|
||||
const search_type = ref('name')
|
||||
const search_form = ref<any>({
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@
|
|||
import { onMounted, ref, computed } from 'vue'
|
||||
import ProviderApi from '@/api/shared/provider'
|
||||
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 ModelCard from '@/views/shared/model-shared/component/ModelCardSharedWorkspace.vue'
|
||||
import ProviderComponent from '@/views/shared/model-shared/component/Provider.vue'
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@
|
|||
import { onMounted, ref, reactive, computed } from 'vue'
|
||||
import { cloneDeep, get } from 'lodash'
|
||||
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 InitParamDrawer from '@/views/shared/tool-shared/component/InitParamDrawer.vue'
|
||||
import ToolFormDrawer from './ToolFormDrawer.vue'
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@
|
|||
import { ref, reactive, watch } from 'vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
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 { t } from '@/locales'
|
||||
import type { ListItem } from '@/api/type/common'
|
||||
|
|
|
|||
|
|
@ -7,16 +7,25 @@
|
|||
:data="folderList"
|
||||
:currentNodeKey="currentFolder?.id"
|
||||
@handleNodeClick="folderClickHandel"
|
||||
@refreshTree ="refreshFolder"
|
||||
:shareTitle="hasPermission(new ComplexPermission(
|
||||
[RoleConst.ADMIN],[PermissionConst.SHARED_TOOL_READ],[EditionConst.IS_EE],'OR'
|
||||
), 'OR')?'views.system.share_tool':null"
|
||||
isShared
|
||||
@refreshTree="refreshFolder"
|
||||
:shareTitle="
|
||||
hasPermission(
|
||||
new ComplexPermission(
|
||||
[RoleConst.ADMIN],
|
||||
[PermissionConst.SHARED_TOOL_READ],
|
||||
[EditionConst.IS_EE],
|
||||
'OR',
|
||||
),
|
||||
'OR',
|
||||
)
|
||||
? 'views.system.share_tool'
|
||||
: null
|
||||
"
|
||||
showShared
|
||||
class="p-8"
|
||||
/>
|
||||
</template>
|
||||
<SharedWorkspace v-if="currentFolder.id === 'share'"></SharedWorkspace>
|
||||
<ContentContainer v-else :header="currentFolder?.name">
|
||||
<ContentContainer :header="currentFolder?.name">
|
||||
<template #search>
|
||||
<div class="flex">
|
||||
<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-select>
|
||||
</div>
|
||||
<el-dropdown trigger="click">
|
||||
<el-dropdown trigger="click" v-if="!isShared">
|
||||
<el-button
|
||||
type="primary"
|
||||
class="ml-8"
|
||||
|
|
@ -104,7 +113,9 @@
|
|||
<img src="@/assets/node/icon_tool.svg" style="width: 58%" alt="" />
|
||||
</el-avatar>
|
||||
<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>
|
||||
</el-dropdown-item> -->
|
||||
|
|
@ -186,6 +197,11 @@
|
|||
{{ $t('common.creator') }}: {{ item.nick_name }}
|
||||
</el-text>
|
||||
</template>
|
||||
<template #tag>
|
||||
<el-tag v-if="isShared" type="info" class="info-tag">
|
||||
{{ t('views.system.shared') }}
|
||||
</el-tag>
|
||||
</template>
|
||||
|
||||
<template #footer>
|
||||
<div v-if="item.is_active" class="flex align-center">
|
||||
|
|
@ -204,7 +220,7 @@
|
|||
</div>
|
||||
</template>
|
||||
<template #mouseEnter>
|
||||
<div @click.stop>
|
||||
<div @click.stop v-if="!isShared">
|
||||
<el-switch
|
||||
v-model="item.is_active"
|
||||
:before-change="() => changeState(item)"
|
||||
|
|
@ -318,7 +334,7 @@
|
|||
</ContentContainer>
|
||||
<InitParamDrawer ref="InitParamDrawerRef" @refresh="refresh" />
|
||||
<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" />
|
||||
</LayoutContainer>
|
||||
</template>
|
||||
|
|
@ -334,12 +350,12 @@ import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
|
|||
import { t } from '@/locales'
|
||||
import { isAppIcon } from '@/utils/common'
|
||||
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 { hasPermission } from '@/utils/permission/index'
|
||||
import { FolderSource } from '@/enums/common'
|
||||
import { ComplexPermission } from '@/utils/permission/type'
|
||||
import ToolStoreDialog from './component/ToolStoreDialog.vue'
|
||||
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
|
||||
|
||||
const { folder, user } = useStore()
|
||||
|
||||
|
|
@ -366,6 +382,10 @@ const folderList = ref<any[]>([])
|
|||
const toolList = ref<any[]>([])
|
||||
const currentFolder = ref<any>({})
|
||||
|
||||
const isShared = computed(() => {
|
||||
return currentFolder.value.id === 'share'
|
||||
})
|
||||
|
||||
const search_type_change = () => {
|
||||
search_form.value = { name: '', create_user: '' }
|
||||
}
|
||||
|
|
@ -392,10 +412,12 @@ function getList() {
|
|||
folder_id: currentFolder.value?.id || user.getWorkspaceId(),
|
||||
scope: 'WORKSPACE',
|
||||
}
|
||||
ToolApi.getToolListPage(paginationConfig, params, loading).then((res) => {
|
||||
paginationConfig.total = res.data?.total
|
||||
toolList.value = [...toolList.value, ...res.data?.records]
|
||||
})
|
||||
loadSharedApi('tool', isShared.value)
|
||||
.getToolListPage(paginationConfig, params, loading)
|
||||
.then((res: any) => {
|
||||
paginationConfig.total = res.data?.total
|
||||
toolList.value = [...toolList.value, ...res.data?.records]
|
||||
})
|
||||
}
|
||||
|
||||
function clickFolder(item: any) {
|
||||
|
|
@ -565,7 +587,6 @@ function folderClickHandel(row: any) {
|
|||
getList()
|
||||
}
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
getFolder(true)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@
|
|||
<script setup lang="ts">
|
||||
import {ref, reactive, watch, onBeforeMount} from 'vue'
|
||||
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 {t} from '@/locales'
|
||||
import type {FormItemModel} from '@/api/type/role'
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ import { ref, reactive, watch } from 'vue'
|
|||
import useStore from '@/stores'
|
||||
import type { FormInstance, FormRules } from 'element-plus'
|
||||
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 { t } from '@/locales'
|
||||
const emit = defineEmits(['refresh'])
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@
|
|||
import { onMounted, ref, reactive, watch } from 'vue'
|
||||
import UserDrawer from './component/UserDrawer.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 { MsgSuccess, MsgConfirm } from '@/utils/message'
|
||||
import { t } from '@/locales'
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ function getknowledge() {
|
|||
// knowledgeList.value = res.data
|
||||
// })
|
||||
// } 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)
|
||||
})
|
||||
// }
|
||||
|
|
|
|||
Loading…
Reference in New Issue