refactor: ui

v3.2
wxg0103 2025-06-06 09:39:01 +08:00
parent e9d7decef8
commit 9c205048d4
34 changed files with 528 additions and 484 deletions

View File

@ -1,17 +1,17 @@
import { Result } from '@/request/Result' import {Result} from '@/request/Result'
import { get, post, postStream, del, put, request, download, exportFile } from '@/request/index' import {get, post, postStream, del, put, request, download, exportFile} from '@/request/index'
import type { pageRequest } from '@/api/type/common' import type {pageRequest} from '@/api/type/common'
import type { ApplicationFormType } from '@/api/type/application' import type {ApplicationFormType} from '@/api/type/application'
import { type Ref } from 'vue' import {type Ref} from 'vue'
import type { FormField } from '@/components/dynamics-form/type' import type {FormField} from '@/components/dynamics-form/type'
const prefix = '/workspace' const prefix = '/workspace/' + localStorage.getItem('workspace_id') + '/application'
/** /**
* *
* @param * @param
*/ */
const getAllAppilcation: () => Promise<Result<any[]>> = () => { const getAllApplication: () => Promise<Result<any[]>> = () => {
return get(`${prefix}`) return get(`${prefix}`)
} }
@ -22,13 +22,12 @@ const getAllAppilcation: () => Promise<Result<any[]>> = () => {
} }
*/ */
const getApplication: ( const getApplication: (
wordspace_id: string,
page: pageRequest, page: pageRequest,
param: any, param: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, page, param, loading) => { ) => Promise<Result<any>> = (page, param, loading) => {
return get( return get(
`${prefix}/${wordspace_id}/application/${page.current_page}/${page.page_size}`, `${prefix}/${page.current_page}/${page.page_size}`,
param, param,
loading, loading,
) )
@ -39,11 +38,10 @@ const getApplication: (
* @param * @param
*/ */
const postApplication: ( const postApplication: (
wordspace_id: string,
data: ApplicationFormType, data: ApplicationFormType,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, data, loading) => { ) => Promise<Result<any>> = (data, loading) => {
return post(`${prefix}/${wordspace_id}/application`, data, undefined, loading) return post(`${prefix}`, data, undefined, loading)
} }
/** /**
@ -131,7 +129,7 @@ const postAppAuthentication: (
) => Promise<any> = (access_token, loading, authentication_value) => { ) => Promise<any> = (access_token, loading, authentication_value) => {
return post( return post(
`${prefix}/authentication`, `${prefix}/authentication`,
{ access_token: access_token, authentication_value }, {access_token: access_token, authentication_value},
undefined, undefined,
loading, loading,
) )
@ -257,7 +255,7 @@ const getApplicationRerankerModel: (
application_id: string, application_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (application_id, loading) => { ) => Promise<Result<Array<any>>> = (application_id, loading) => {
return get(`${prefix}/${application_id}/model`, { model_type: 'RERANKER' }, loading) return get(`${prefix}/${application_id}/model`, {model_type: 'RERANKER'}, loading)
} }
/** /**
@ -271,7 +269,7 @@ const getApplicationSTTModel: (
application_id: string, application_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (application_id, loading) => { ) => Promise<Result<Array<any>>> = (application_id, loading) => {
return get(`${prefix}/${application_id}/model`, { model_type: 'STT' }, loading) return get(`${prefix}/${application_id}/model`, {model_type: 'STT'}, loading)
} }
/** /**
@ -285,21 +283,21 @@ const getApplicationTTSModel: (
application_id: string, application_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (application_id, loading) => { ) => Promise<Result<Array<any>>> = (application_id, loading) => {
return get(`${prefix}/${application_id}/model`, { model_type: 'TTS' }, loading) return get(`${prefix}/${application_id}/model`, {model_type: 'TTS'}, loading)
} }
const getApplicationImageModel: ( const getApplicationImageModel: (
application_id: string, application_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (application_id, loading) => { ) => Promise<Result<Array<any>>> = (application_id, loading) => {
return get(`${prefix}/${application_id}/model`, { model_type: 'IMAGE' }, loading) return get(`${prefix}/${application_id}/model`, {model_type: 'IMAGE'}, loading)
} }
const getApplicationTTIModel: ( const getApplicationTTIModel: (
application_id: string, application_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (application_id, loading) => { ) => Promise<Result<Array<any>>> = (application_id, loading) => {
return get(`${prefix}/${application_id}/model`, { model_type: 'TTI' }, loading) return get(`${prefix}/${application_id}/model`, {model_type: 'TTI'}, loading)
} }
/** /**
@ -542,7 +540,7 @@ const importApplication: (data: any, loading?: Ref<boolean>) => Promise<Result<a
return post(`${prefix}/import`, data, undefined, loading) return post(`${prefix}/import`, data, undefined, loading)
} }
export default { export default {
getAllAppilcation, getAllAppilcation: getAllApplication,
getApplication, getApplication,
postApplication, postApplication,
putApplication, putApplication,

View File

@ -1,8 +1,9 @@
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 type {pageRequest} from '@/api/type/common'
const prefix = '/workspace'
const prefix = '/workspace/' + localStorage.getItem('workspace_id')
/** /**
* *
@ -11,31 +12,29 @@ const prefix = '/workspace'
* data : {name: string} * data : {name: string}
*/ */
const getFolder: ( const getFolder: (
wordspace_id: string,
source: string, source: string,
data?: any, data?: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (wordspace_id, source, data, loading) => { ) => Promise<Result<Array<any>>> = (source, data, loading) => {
return get(`${prefix}/${wordspace_id}/${source}/folder`, data, loading) return get(`${prefix}/${source}/folder`, data, loading)
} }
/** /**
* *
* @params * @params
* source : APPLICATION, KNOWLEDGE, TOOL * source : APPLICATION, KNOWLEDGE, TOOL
{ {
"name": "string", "name": "string",
"desc": "string", "desc": "string",
"parent_id": "root" "parent_id": "root"
} }
*/ */
const postFolder: ( const postFolder: (
wordspace_id: string,
source: string, source: string,
data?: any, data?: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (wordspace_id, source, data, loading) => { ) => Promise<Result<Array<any>>> = (source, data, loading) => {
return post(`${prefix}/${wordspace_id}/${source}/folder`, data, loading) return post(`${prefix}/${source}/folder`, data, loading)
} }
export default { export default {

View File

@ -1,10 +1,10 @@
import { Result } from '@/request/Result' import {Result} from '@/request/Result'
import { get, post, del, put, exportExcel, exportFile } from '@/request/index' import {get, post, del, put, exportExcel, exportFile} from '@/request/index'
import type { Ref } from 'vue' import type {Ref} from 'vue'
import type { KeyValue } from '@/api/type/common' import type {KeyValue} from '@/api/type/common'
import type { pageRequest } from '@/api/type/common' import type {pageRequest} from '@/api/type/common'
const prefix = '/workspace' const prefix = '/workspace/' + localStorage.getItem('workspace_id') + '/knowledge'
/** /**
* *
@ -19,14 +19,13 @@ const prefix = '/workspace'
*/ */
const getDocument: ( const getDocument: (
wordspace_id: string,
knowledge_id: string, knowledge_id: string,
page: pageRequest, page: pageRequest,
param: any, param: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, knowledge_id, page, param, loading) => { ) => Promise<Result<any>> = (knowledge_id, page, param, loading) => {
return get( return get(
`${prefix}/${wordspace_id}/knowledge/${knowledge_id}/document/${page.current_page}/${page.page_size}`, `${prefix}/${knowledge_id}/document/${page.current_page}/${page.page_size}`,
param, param,
loading, loading,
) )
@ -124,7 +123,7 @@ const delMulDocument: (
data: any, data: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<boolean>> = (dataset_id, data, loading) => { ) => Promise<Result<boolean>> = (dataset_id, data, loading) => {
return del(`${prefix}/${dataset_id}/document/_bach`, undefined, { id_list: data }, loading) return del(`${prefix}/${dataset_id}/document/_bach`, undefined, {id_list: data}, loading)
} }
const batchRefresh: ( const batchRefresh: (
@ -135,7 +134,7 @@ const batchRefresh: (
) => Promise<Result<boolean>> = (dataset_id, data, stateList, loading) => { ) => Promise<Result<boolean>> = (dataset_id, data, stateList, loading) => {
return put( return put(
`${prefix}/${dataset_id}/document/batch_refresh`, `${prefix}/${dataset_id}/document/batch_refresh`,
{ id_list: data, state_list: stateList }, {id_list: data, state_list: stateList},
undefined, undefined,
loading, loading,
) )
@ -164,7 +163,7 @@ const putDocumentRefresh: (
) => Promise<Result<any>> = (dataset_id, document_id, state_list, loading) => { ) => Promise<Result<any>> = (dataset_id, document_id, state_list, loading) => {
return put( return put(
`${prefix}/${dataset_id}/document/${document_id}/refresh`, `${prefix}/${dataset_id}/document/${document_id}/refresh`,
{ state_list }, {state_list},
undefined, undefined,
loading, loading,
) )
@ -204,14 +203,14 @@ const delMulSyncDocument: (
data: any, data: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<boolean>> = (dataset_id, data, loading) => { ) => Promise<Result<boolean>> = (dataset_id, data, loading) => {
return put(`${prefix}/${dataset_id}/document/_bach`, { id_list: data }, undefined, loading) return put(`${prefix}/${dataset_id}/document/_bach`, {id_list: data}, undefined, loading)
} }
const delMulLarkSyncDocument: ( const delMulLarkSyncDocument: (
dataset_id: string, dataset_id: string,
data: any, data: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<boolean>> = (dataset_id, data, loading) => { ) => Promise<Result<boolean>> = (dataset_id, data, loading) => {
return put(`${prefix}/lark/${dataset_id}/_batch`, { id_list: data }, undefined, loading) return put(`${prefix}/lark/${dataset_id}/_batch`, {id_list: data}, undefined, loading)
} }
/** /**
@ -302,7 +301,7 @@ const exportQATemplate: (fileName: string, type: string, loading?: Ref<boolean>)
type, type,
loading, loading,
) => { ) => {
return exportExcel(fileName, `${prefix}/document/template/export`, { type }, loading) return exportExcel(fileName, `${prefix}/document/template/export`, {type}, loading)
} }
/** /**
@ -314,7 +313,7 @@ const exportTableTemplate: (fileName: string, type: string, loading?: Ref<boolea
type, type,
loading, loading,
) => { ) => {
return exportExcel(fileName, `${prefix}/document/table_template/export`, { type }, loading) return exportExcel(fileName, `${prefix}/document/table_template/export`, {type}, loading)
} }
/** /**

View File

@ -1,9 +1,10 @@
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 type {pageRequest} from '@/api/type/common'
import type { knowledgeData } from '@/api/type/knowledge' import type {knowledgeData} from '@/api/type/knowledge'
const prefix = '/workspace'
const prefix = '/workspace/' + localStorage.getItem('workspace_id')
/** /**
* *
@ -14,31 +15,29 @@ const prefix = '/workspace'
* desc: string,} * desc: string,}
*/ */
const getKnowledgeByFolder: ( const getKnowledgeByFolder: (
wordspace_id: string,
data?: any, data?: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (wordspace_id, data, loading) => { ) => Promise<Result<Array<any>>> = (data, loading) => {
return get(`${prefix}/${wordspace_id}/knowledge`, data, loading) return get(`${prefix}/knowledge`, data, loading)
} }
/** /**
* *
* @param * @param
* param { * param {
"folder_id": "string", "folder_id": "string",
"name": "string", "name": "string",
"tool_type": "string", "tool_type": "string",
desc: string, desc: string,
} }
*/ */
const getKnowledgeList: ( const getKnowledgeList: (
wordspace_id: string,
page: pageRequest, page: pageRequest,
param?: any, param?: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, page, param, loading) => { ) => Promise<Result<any>> = (page, param, loading) => {
return get( return get(
`${prefix}/${wordspace_id}/knowledge/${page.current_page}/${page.page_size}`, `${prefix}/knowledge/${page.current_page}/${page.page_size}`,
param, param,
loading, loading,
) )
@ -58,15 +57,14 @@ const getKnowledgeList: (
* @query sync_type // 同步类型->replace:替换同步,complete:完整同步 * @query sync_type // 同步类型->replace:替换同步,complete:完整同步
*/ */
const putSyncWebKnowledge: ( const putSyncWebKnowledge: (
wordspace_id: string,
knowledge_id: string, knowledge_id: string,
sync_type: string, sync_type: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, knowledge_id, sync_type, loading) => { ) => Promise<Result<any>> = (knowledge_id, sync_type, loading) => {
return put( return put(
`${prefix}/${wordspace_id}/knowledge/${knowledge_id}/sync`, `${prefix}/knowledge/${knowledge_id}/sync`,
undefined, undefined,
{ sync_type }, {sync_type},
loading, loading,
) )
} }
@ -76,12 +74,11 @@ const putSyncWebKnowledge: (
* @param knowledge_id * @param knowledge_id
*/ */
const putReEmbeddingKnowledge: ( const putReEmbeddingKnowledge: (
wordspace_id: string,
knowledge_id: string, knowledge_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, knowledge_id, loading) => { ) => Promise<Result<any>> = (knowledge_id, loading) => {
return put( return put(
`${prefix}/${wordspace_id}/knowledge/${knowledge_id}/embedding`, `${prefix}/knowledge/${knowledge_id}/embedding`,
undefined, undefined,
undefined, undefined,
loading, loading,
@ -93,29 +90,27 @@ const putReEmbeddingKnowledge: (
* @param knowledge_id * @param knowledge_id
*/ */
const getKnowledgeDetail: ( const getKnowledgeDetail: (
wordspace_id: string,
knowledge_id: string, knowledge_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, knowledge_id, loading) => { ) => Promise<Result<any>> = (knowledge_id, loading) => {
return get(`${prefix}/${wordspace_id}/knowledge/${knowledge_id}`, undefined, loading) return get(`${prefix}/knowledge/${knowledge_id}`, undefined, loading)
} }
/** /**
* *
* @param * @param
* { * {
"name": "string", "name": "string",
"folder_id": "string", "folder_id": "string",
"desc": "string", "desc": "string",
"embedding": "string" "embedding": "string"
} }
*/ */
const postKnowledge: ( const postKnowledge: (
wordspace_id: string,
data: knowledgeData, data: knowledgeData,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, data, loading) => { ) => Promise<Result<any>> = (data, loading) => {
return post(`${prefix}/${wordspace_id}/knowledge/base`, data, undefined, loading, 1000 * 60 * 5) return post(`${prefix}/knowledge/base`, data, undefined, loading, 1000 * 60 * 5)
} }
/** /**
@ -123,19 +118,18 @@ const postKnowledge: (
* @param * @param
* { * {
"name": "string", "name": "string",
"folder_id": "string", "folder_id": "string",
"desc": "string", "desc": "string",
"embedding": "string", "embedding": "string",
"source_url": "string", "source_url": "string",
"selector": "string" "selector": "string"
} }
*/ */
const postWebKnowledge: ( const postWebKnowledge: (
wordspace_id: string,
data: any, data: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, data, loading) => { ) => Promise<Result<any>> = (data, loading) => {
return post(`${prefix}/${wordspace_id}/knowledge/web`, data, undefined, loading) return post(`${prefix}/knowledge/web`, data, undefined, loading)
} }
/** /**
* *
@ -147,12 +141,11 @@ const postWebKnowledge: (
} }
*/ */
const putKnowledge: ( const putKnowledge: (
wordspace_id: string,
knowledge_id: string, knowledge_id: string,
data: any, data: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, knowledge_id, data, loading) => { ) => Promise<Result<any>> = (knowledge_id, data, loading) => {
return put(`${prefix}/${wordspace_id}/knowledge/${knowledge_id}`, data, undefined, loading) return put(`${prefix}/knowledge/${knowledge_id}`, data, undefined, loading)
} }
export default { export default {

View File

@ -2,7 +2,7 @@ import { Result } from '@/request/Result'
import { get, post, del, put } from '@/request/index' import { get, post, del, put } 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'
const prefix = '/dataset' const prefix = '/workspace/' + localStorage.getItem('workspace_id') + '/knowledge'
/** /**
* *

View File

@ -1,31 +1,31 @@
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 { KeyValue } from '@/api/type/common' import type {KeyValue} from '@/api/type/common'
import type { pageRequest } from '@/api/type/common' import type {pageRequest} from '@/api/type/common'
const prefix = '/workspace'
const prefix = '/workspace/' + localStorage.getItem('workspace_id') + '/knowledge'
/** /**
* *
* @param dataset_id, * @param dataset_id,
* page { * page {
"current_page": "string", "current_page": "string",
"page_size": "string", "page_size": "string",
} }
* query { * query {
"content": "string", "content": "string",
} }
*/ */
const getProblems: ( const getProblems: (
workspace_id: string,
dataset_id: string, dataset_id: string,
page: pageRequest, page: pageRequest,
param: any, param: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, dataset_id, page, param, loading) => { ) => Promise<Result<any>> = (dataset_id, page, param, loading) => {
return get( return get(
`${prefix}/${wordspace_id}/knowledge/${dataset_id}/problem/${page.current_page}/${page.page_size}`, `${prefix}/${dataset_id}/problem/${page.current_page}/${page.page_size}`,
param, param,
loading, loading,
) )
@ -73,8 +73,8 @@ const delMulProblem: (
* @param * @param
* dataset_id, problem_id, * dataset_id, problem_id,
* { * {
"content": "string", "content": "string",
} }
*/ */
const putProblems: ( const putProblems: (
dataset_id: string, dataset_id: string,
@ -102,9 +102,9 @@ const getDetailProblems: (
* *
* @param dataset_id, * @param dataset_id,
* { * {
"problem_id_list": "Array", "problem_id_list": "Array",
"paragraph_list": "Array", "paragraph_list": "Array",
} }
*/ */
const postMulAssociationProblem: ( const postMulAssociationProblem: (
dataset_id: string, dataset_id: string,

View File

@ -1,26 +1,25 @@
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 { import type {
ListModelRequest, ListModelRequest,
Model, Model,
CreateModelRequest, CreateModelRequest,
EditModelRequest, EditModelRequest,
} from '@/api/type/model' } from '@/api/type/model'
import type { FormField } from '@/components/dynamics-form/type' import type {FormField} from '@/components/dynamics-form/type'
const prefix = '/workspace' const prefix = '/workspace/' + localStorage.getItem('workspace_id')
/** /**
* *
* @params name, model_type, model_name * @params name, model_type, model_name
*/ */
const getModel: ( const getModel: (
wordspace_id: string,
request?: ListModelRequest, request?: ListModelRequest,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<Model>>> = (wordspace_id, data, loading) => { ) => Promise<Result<Array<Model>>> = (data, loading) => {
return get(`${prefix}/${wordspace_id}/model`, data, loading) return get(`${prefix}/model`, data, loading)
} }
/** /**
@ -30,11 +29,10 @@ const getModel: (
* @returns * @returns
*/ */
const getModelParamsForm: ( const getModelParamsForm: (
wordspace_id: string,
model_id: string, model_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<FormField>>> = (wordspace_id, model_id, loading) => { ) => Promise<Result<Array<FormField>>> = (model_id, loading) => {
return get(`${prefix}/${wordspace_id}/model/${model_id}/model_params_form`, {}, loading) return get(`${prefix}/model/${model_id}/model_params_form`, {}, loading)
} }
/** /**
@ -44,11 +42,10 @@ const getModelParamsForm: (
* @returns * @returns
*/ */
const createModel: ( const createModel: (
wordspace_id: string,
request: CreateModelRequest, request: CreateModelRequest,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Model>> = (wordspace_id, request, loading) => { ) => Promise<Result<Model>> = (request, loading) => {
return post(`${prefix}/${wordspace_id}/model`, request, {}, loading) return post(`${prefix}/model`, request, {}, loading)
} }
/** /**
@ -58,12 +55,11 @@ const createModel: (
* @returns * @returns
*/ */
const updateModel: ( const updateModel: (
wordspace_id: string,
model_id: string, model_id: string,
request: EditModelRequest, request: EditModelRequest,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Model>> = (wordspace_id, model_id, request, loading) => { ) => Promise<Result<Model>> = (model_id, request, loading) => {
return put(`${prefix}/${wordspace_id}/model/${model_id}`, request, {}, loading) return put(`${prefix}/model/${model_id}`, request, {}, loading)
} }
/** /**
@ -73,12 +69,11 @@ const updateModel: (
* @returns * @returns
*/ */
const updateModelParamsForm: ( const updateModelParamsForm: (
wordspace_id: string,
model_id: string, model_id: string,
request: any[], request: any[],
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Model>> = (wordspace_id, model_id, request, loading) => { ) => Promise<Result<Model>> = (model_id, request, loading) => {
return put(`${prefix}/${wordspace_id}/model/${model_id}/model_params_form`, request, {}, loading) return put(`${prefix}/model/${model_id}/model_params_form`, request, {}, loading)
} }
/** /**
@ -88,11 +83,10 @@ const updateModelParamsForm: (
* @returns * @returns
*/ */
const getModelById: ( const getModelById: (
wordspace_id: string,
model_id: string, model_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Model>> = (wordspace_id, model_id, loading) => { ) => Promise<Result<Model>> = (model_id, loading) => {
return get(`${prefix}/${wordspace_id}/model/${model_id}`, {}, loading) return get(`${prefix}/model/${model_id}`, {}, loading)
} }
/** /**
* id * id
@ -101,11 +95,10 @@ const getModelById: (
* @returns * @returns
*/ */
const getModelMetaById: ( const getModelMetaById: (
wordspace_id: string,
model_id: string, model_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Model>> = (wordspace_id, model_id, loading) => { ) => Promise<Result<Model>> = (model_id, loading) => {
return get(`${prefix}/${wordspace_id}/model/${model_id}/meta`, {}, loading) return get(`${prefix}/model/${model_id}/meta`, {}, loading)
} }
/** /**
* *
@ -114,18 +107,16 @@ const getModelMetaById: (
* @returns * @returns
*/ */
const pauseDownload: ( const pauseDownload: (
wordspace_id: string,
model_id: string, model_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<boolean>> = (wordspace_id, model_id, loading) => { ) => Promise<Result<boolean>> = (model_id, loading) => {
return put(`${prefix}/${wordspace_id}/model/${model_id}/pause_download`, undefined, {}, loading) return put(`${prefix}/model/${model_id}/pause_download`, undefined, {}, loading)
} }
const deleteModel: ( const deleteModel: (
wordspace_id: string,
model_id: string, model_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<boolean>> = (wordspace_id, model_id, loading) => { ) => Promise<Result<boolean>> = (model_id, loading) => {
return del(`${prefix}/${wordspace_id}/model/${model_id}`, undefined, {}, loading) return del(`${prefix}/model/${model_id}`, undefined, {}, loading)
} }
export default { export default {
getModel, getModel,

View File

@ -1,9 +1,10 @@
import { Result } from '@/request/Result' import {Result} from '@/request/Result'
import { get, post } from '@/request/index' import {get, post} from '@/request/index'
import type { Ref } from 'vue' import type {Ref} from 'vue'
import type { Provider, BaseModel } from '@/api/type/model' import type {Provider, BaseModel} from '@/api/type/model'
import type { FormField } from '@/components/dynamics-form/type' import type {FormField} from '@/components/dynamics-form/type'
import type { KeyValue } from '../type/common' import type {KeyValue} from '../type/common'
const prefix_provider = '/provider' const prefix_provider = '/provider'
/** /**
* *
@ -19,7 +20,7 @@ const getProviderByModelType: (
model_type: string, model_type: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<Provider>>> = (model_type, loading) => { ) => Promise<Result<Array<Provider>>> = (model_type, loading) => {
return get(`${prefix_provider}`, { model_type }, loading) return get(`${prefix_provider}`, {model_type}, loading)
} }
/** /**
@ -36,7 +37,7 @@ const getModelCreateForm: (
model_name: string, model_name: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<FormField>>> = (provider, model_type, model_name, loading) => { ) => Promise<Result<Array<FormField>>> = (provider, model_type, model_name, loading) => {
return get(`${prefix_provider}/model_form`, { provider, model_type, model_name }, loading) return get(`${prefix_provider}/model_form`, {provider, model_type, model_name}, loading)
} }
/** /**
@ -49,7 +50,7 @@ const listModelType: (
provider: string, provider: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<KeyValue<string, string>>>> = (provider, loading?: Ref<boolean>) => { ) => Promise<Result<Array<KeyValue<string, string>>>> = (provider, loading?: Ref<boolean>) => {
return get(`${prefix_provider}/model_type_list`, { provider }, loading) return get(`${prefix_provider}/model_type_list`, {provider}, loading)
} }
/** /**
@ -64,7 +65,7 @@ const listBaseModel: (
model_type: string, model_type: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<BaseModel>>> = (provider, model_type, loading) => { ) => Promise<Result<Array<BaseModel>>> = (provider, model_type, loading) => {
return get(`${prefix_provider}/model_list`, { provider, model_type }, loading) return get(`${prefix_provider}/model_list`, {provider, model_type}, loading)
} }
const listBaseModelParamsForm: ( const listBaseModelParamsForm: (
@ -73,7 +74,7 @@ const listBaseModelParamsForm: (
model_name: string, model_name: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<BaseModel>>> = (provider, model_type, model_name, loading) => { ) => Promise<Result<Array<BaseModel>>> = (provider, model_type, model_name, loading) => {
return get(`${prefix_provider}/model_params_form`, { provider, model_type, model_name }, loading) return get(`${prefix_provider}/model_params_form`, {provider, model_type, model_name}, loading)
} }
export default { export default {
getProvider, getProvider,

View File

@ -1,39 +1,39 @@
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 type {pageRequest} from '@/api/type/common'
import type { toolData } from '@/api/type/tool' import type {toolData} from '@/api/type/tool'
const prefix = '/workspace'
const prefix = '/workspace/' + localStorage.getItem('workspace_id')
/** /**
* *
* @params {folder_id: string} * @params {folder_id: string}
*/ */
const getToolByFolder: ( const getToolByFolder: (
wordspace_id: string,
data?: any, data?: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<Array<any>>> = (wordspace_id, data, loading) => { ) => Promise<Result<Array<any>>> = (data, loading) => {
return get(`${prefix}/${wordspace_id}/tool`, data, loading) return get(`${prefix}/tool`, data, loading)
} }
/** /**
* *
* @param * @param
* param { * param {
"folder_id": "string", "folder_id": "string",
"name": "string", "name": "string",
"tool_type": "string", "tool_type": "string",
} }
*/ */
const getToolList: ( const getToolList: (
wordspace_id: string,
page: pageRequest, page: pageRequest,
param?: any, param?: any,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, page, param, loading) => { ) => Promise<Result<any>> = (page, param, loading) => {
return get( return get(
`${prefix}/${wordspace_id}/tool/${page.current_page}/${page.page_size}`, `${prefix}/tool/${page.current_page}/${page.page_size}`,
param, param,
loading, loading,
) )
@ -44,11 +44,10 @@ const getToolList: (
* @param * @param
*/ */
const postTool: ( const postTool: (
wordspace_id: string,
data: toolData, data: toolData,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, data, loading) => { ) => Promise<Result<any>> = (data, loading) => {
return post(`${prefix}/${wordspace_id}/tool`, data, undefined, loading) return post(`${prefix}/tool`, data, undefined, loading)
} }
/** /**
@ -57,12 +56,11 @@ const postTool: (
*/ */
const putTool: ( const putTool: (
wordspace_id: string,
tool_id: string, tool_id: string,
data: toolData, data: toolData,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, tool_id, data, loading) => { ) => Promise<Result<any>> = (tool_id, data, loading) => {
return put(`${prefix}/${wordspace_id}/tool/${tool_id}`, data, undefined, loading) return put(`${prefix}/tool/${tool_id}`, data, undefined, loading)
} }
/** /**
@ -72,19 +70,17 @@ const putTool: (
* @returns * @returns
*/ */
const getToolById: ( const getToolById: (
wordspace_id: string,
tool_id: String, tool_id: String,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, tool_id, loading) => { ) => Promise<Result<any>> = (tool_id, loading) => {
return get(`${prefix}/${wordspace_id}/tool/${tool_id}`, undefined, loading) return get(`${prefix}/tool/${tool_id}`, undefined, loading)
} }
const postPylint: ( const postPylint: (
wordspace_id: string,
code: string, code: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) => Promise<Result<any>> = (wordspace_id, code, loading) => { ) => Promise<Result<any>> = (code, loading) => {
return post(`${prefix}/${wordspace_id}/tool/pylint`, { code }, {}, loading) return post(`${prefix}/tool/pylint`, {code}, {}, loading)
} }
/** /**

View File

@ -39,14 +39,14 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, watch } from 'vue' import {ref, computed, watch} from 'vue'
import { Codemirror } from 'vue-codemirror' import {Codemirror} from 'vue-codemirror'
import { python } from '@codemirror/lang-python' import {python} from '@codemirror/lang-python'
import { oneDark } from '@codemirror/theme-one-dark' import {oneDark} from '@codemirror/theme-one-dark'
import { linter, type Diagnostic } from '@codemirror/lint' import {linter, type Diagnostic} from '@codemirror/lint'
import ToolApi from '@/api/tool/tool' import ToolApi from '@/api/tool/tool'
defineOptions({ name: 'CodemirrorEditor' }) defineOptions({name: 'CodemirrorEditor'})
const props = defineProps<{ const props = defineProps<{
title: String title: String
@ -74,7 +74,7 @@ function getRangeFromLineAndColumn(state: any, line: number, column: number, end
const regexpLinter = linter(async (view) => { const regexpLinter = linter(async (view) => {
let diagnostics: Diagnostic[] = [] let diagnostics: Diagnostic[] = []
await ToolApi.postPylint('default', view.state.doc.toString()).then((ok) => { await ToolApi.postPylint(view.state.doc.toString()).then((ok) => {
ok.data.forEach((element: any) => { ok.data.forEach((element: any) => {
const range = getRangeFromLineAndColumn( const range = getRangeFromLineAndColumn(
view.state, view.state,
@ -124,6 +124,7 @@ function submitDialog() {
<style lang="scss" scoped> <style lang="scss" scoped>
.codemirror-editor { .codemirror-editor {
position: relative; position: relative;
&__footer { &__footer {
position: absolute; position: absolute;
bottom: 10px; bottom: 10px;

View File

@ -96,7 +96,7 @@ const open = (source: string, id: string) => {
const submitHandle = async () => { const submitHandle = async () => {
await FolderFormRef.value.validate((valid: any) => { await FolderFormRef.value.validate((valid: any) => {
if (valid) { if (valid) {
folderApi.postFolder('default', sourceType.value, folderForm.value, loading).then((res) => { folderApi.postFolder( sourceType.value, folderForm.value, loading).then((res) => {
MsgSuccess(t('common.createSuccess')) MsgSuccess(t('common.createSuccess'))
emit('refresh') emit('refresh')
dialogVisible.value = false dialogVisible.value = false

View File

@ -1,14 +1,14 @@
import { defineStore } from 'pinia' import {defineStore} from 'pinia'
import { type Ref } from 'vue' import {type Ref} from 'vue'
import folderApi from '@/api/folder' import folderApi from '@/api/folder'
const useFolderStore = defineStore('folder', { const useFolderStore = defineStore('folder', {
state: () => ({}), state: () => ({}),
actions: { actions: {
async asynGetFolder(workspace_id: string, source: string, data: any, loading?: Ref<boolean>) { async asyncGetFolder(source: string, data: any, loading?: Ref<boolean>) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
folderApi folderApi
.getFolder(workspace_id, source, data, loading) .getFolder(source, data, loading)
.then((res) => { .then((res) => {
resolve(res) resolve(res)
}) })

View File

@ -1,8 +1,8 @@
import { defineStore } from 'pinia' import {defineStore} from 'pinia'
import type { knowledgeData } from '@/api/type/knowledge' import type {knowledgeData} from '@/api/type/knowledge'
import type { UploadUserFile } from 'element-plus' import type {UploadUserFile} from 'element-plus'
import knowledgeApi from '@/api/knowledge/knowledge' import knowledgeApi from '@/api/knowledge/knowledge'
import { type Ref } from 'vue' import {type Ref} from 'vue'
export interface knowledgeStateTypes { export interface knowledgeStateTypes {
baseInfo: knowledgeData | null baseInfo: knowledgeData | null
@ -44,13 +44,12 @@ const useKnowledgeStore = defineStore('knowledge', {
// }) // })
// }, // },
async asyncGetDatasetDetail( async asyncGetDatasetDetail(
workspace_id: string,
knowledge_id: string, knowledge_id: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) { ) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
knowledgeApi knowledgeApi
.getKnowledgeDetail(workspace_id, knowledge_id, loading) .getKnowledgeDetail(knowledge_id, loading)
.then((data) => { .then((data) => {
resolve(data) resolve(data)
}) })
@ -60,14 +59,13 @@ const useKnowledgeStore = defineStore('knowledge', {
}) })
}, },
async asyncSyncDataset( async asyncSyncDataset(
workspace_id: string,
id: string, id: string,
sync_type: string, sync_type: string,
loading?: Ref<boolean>, loading?: Ref<boolean>,
) { ) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
knowledgeApi knowledgeApi
.putSyncWebKnowledge(workspace_id, id, sync_type, loading) .putSyncWebKnowledge(id, sync_type, loading)
.then((data) => { .then((data) => {
resolve(data) resolve(data)
}) })

View File

@ -1,14 +1,15 @@
import { defineStore } from 'pinia' import {defineStore} from 'pinia'
import { type Ref } from 'vue' import {type Ref} from 'vue'
import ModelApi from '@/api/model/model' import ModelApi from '@/api/model/model'
import ProviderApi from '@/api/model/provider' import ProviderApi from '@/api/model/provider'
import type { ListModelRequest } from '@/api/type/model' import type {ListModelRequest} from '@/api/type/model'
const useModelStore = defineStore('model', { const useModelStore = defineStore('model', {
state: () => ({}), state: () => ({}),
actions: { actions: {
async asyncGetModel(wordspace_id: string, data?: ListModelRequest, loading?: Ref<boolean>) { async asyncGetModel(data?: ListModelRequest, loading?: Ref<boolean>) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
ModelApi.getModel(wordspace_id, data, loading) ModelApi.getModel(data, loading)
.then((res) => { .then((res) => {
resolve(res) resolve(res)
}) })

View File

@ -20,7 +20,6 @@ const useProblemStore = defineStore('problem', {
}) })
}, },
async asyncGetProblem( async asyncGetProblem(
workspace_id: string,
datasetId: string, datasetId: string,
page: pageRequest, page: pageRequest,
param: any, param: any,
@ -28,7 +27,7 @@ const useProblemStore = defineStore('problem', {
) { ) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
problemApi problemApi
.getProblems(workspace_id, datasetId, page, param, loading) .getProblems(datasetId, page, param, loading)
.then((data) => { .then((data) => {
resolve(data) resolve(data)
}) })

View File

@ -82,15 +82,16 @@
</el-dialog> </el-dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch, reactive } from 'vue' import {ref, watch, reactive} from 'vue'
import { useRouter, useRoute } from 'vue-router' import {useRouter, useRoute} from 'vue-router'
import type { ApplicationFormType } from '@/api/type/application' import type {ApplicationFormType} from '@/api/type/application'
import type { FormInstance, FormRules } from 'element-plus' import type {FormInstance, FormRules} from 'element-plus'
import applicationApi from '@/api/application/application' import applicationApi from '@/api/application/application'
import { MsgSuccess, MsgAlert } from '@/utils/message' import {MsgSuccess, MsgAlert} from '@/utils/message'
import { isWorkFlow } from '@/utils/application' import {isWorkFlow} from '@/utils/application'
import { baseNodes } from '@/workflow/common/data' import {baseNodes} from '@/workflow/common/data'
import { t } from '@/locales' import {t} from '@/locales'
const router = useRouter() const router = useRouter()
const emit = defineEmits(['refresh']) const emit = defineEmits(['refresh'])
@ -227,17 +228,16 @@ const submitHandle = async (formEl: FormInstance | undefined) => {
console.log(applicationForm.value.type) console.log(applicationForm.value.type)
applicationApi applicationApi
.postApplication( .postApplication(
'default', {...applicationForm.value, folder_id: currentFolder.value},
{ ...applicationForm.value, folder_id: currentFolder.value },
loading, loading,
) )
.then((res) => { .then((res) => {
MsgSuccess(t('common.createSuccess')) MsgSuccess(t('common.createSuccess'))
emit('refresh') emit('refresh')
if (isWorkFlow(applicationForm.value.type)) { if (isWorkFlow(applicationForm.value.type)) {
router.push({ path: `/application/${res.data.id}/workflow` }) router.push({path: `/application/${res.data.id}/workflow`})
} else { } else {
router.push({ path: `/application/${res.data.id}/${res.data.type}/setting` }) router.push({path: `/application/${res.data.id}/${res.data.type}/setting`})
} }
dialogVisible.value = false dialogVisible.value = false
}) })
@ -249,11 +249,12 @@ function selectedType(type: string) {
appTemplate.value = type appTemplate.value = type
} }
defineExpose({ open }) defineExpose({open})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.radio-card { .radio-card {
line-height: 22px; line-height: 22px;
&.active { &.active {
border-color: var(--el-color-primary); border-color: var(--el-color-primary);
color: var(--el-color-primary); color: var(--el-color-primary);

View File

@ -19,9 +19,9 @@
style="width: 120px" style="width: 120px"
@change="search_type_change" @change="search_type_change"
> >
<el-option :label="$t('common.creator')" value="create_user" /> <el-option :label="$t('common.creator')" value="create_user"/>
<el-option :label="$t('common.name')" value="name" /> <el-option :label="$t('common.name')" value="name"/>
</el-select> </el-select>
<el-input <el-input
v-if="search_type === 'name'" v-if="search_type === 'name'"
@ -38,12 +38,15 @@
clearable clearable
style="width: 220px" style="width: 220px"
> >
<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">
<el-button type="primary" class="ml-8"> <el-button type="primary" class="ml-8">
{{ $t('common.create') }}<el-icon class="el-icon--right"><arrow-down /></el-icon> {{ $t('common.create') }}
<el-icon class="el-icon--right">
<arrow-down/>
</el-icon>
</el-button> </el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu class="create-dropdown"> <el-dropdown-menu class="create-dropdown">
@ -59,8 +62,9 @@
<div class="pre-wrap ml-8"> <div class="pre-wrap ml-8">
<div class="lighter">{{ $t('views.application.simple') }}</div> <div class="lighter">{{ $t('views.application.simple') }}</div>
<el-text type="info" size="small">{{ <el-text type="info" size="small">{{
$t('views.application.simplePlaceholder') $t('views.application.simplePlaceholder')
}}</el-text> }}
</el-text>
</div> </div>
</div> </div>
</el-dropdown-item> </el-dropdown-item>
@ -76,8 +80,9 @@
<div class="pre-wrap ml-8"> <div class="pre-wrap ml-8">
<div class="lighter">{{ $t('views.application.workflow') }}</div> <div class="lighter">{{ $t('views.application.workflow') }}</div>
<el-text type="info" size="small">{{ <el-text type="info" size="small">{{
$t('views.application.workflowPlaceholder') $t('views.application.workflowPlaceholder')
}}</el-text> }}
</el-text>
</div> </div>
</div> </div>
</el-dropdown-item> </el-dropdown-item>
@ -117,7 +122,7 @@
@click="router.push({ path: `/application/${item.id}/${item.type}/overview` })" @click="router.push({ path: `/application/${item.id}/${item.type}/overview` })"
> >
<template #icon> <template #icon>
<LogoIcon height="28px" style="width: 28px; height: 28px; display: block" /> <LogoIcon height="28px" style="width: 28px; height: 28px; display: block"/>
</template> </template>
<template #subTitle> <template #subTitle>
<el-text class="color-secondary" size="small"> <el-text class="color-secondary" size="small">
@ -146,17 +151,17 @@
<AppIcon iconName="app-view"></AppIcon> <AppIcon iconName="app-view"></AppIcon>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
<el-divider direction="vertical" /> <el-divider direction="vertical"/>
<el-tooltip effect="dark" :content="$t('common.setting')" placement="top"> <el-tooltip effect="dark" :content="$t('common.setting')" placement="top">
<el-button text @click.stop="settingApplication(item)"> <el-button text @click.stop="settingApplication(item)">
<AppIcon iconName="Setting"></AppIcon> <AppIcon iconName="Setting"></AppIcon>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
<el-divider direction="vertical" /> <el-divider direction="vertical"/>
<span @click.stop> <span @click.stop>
<el-dropdown trigger="click"> <el-dropdown trigger="click">
<el-button text @click.stop> <el-button text @click.stop>
<el-icon><MoreFilled /></el-icon> <el-icon><MoreFilled/></el-icon>
</el-button> </el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
@ -173,8 +178,8 @@
{{ $t('common.export') }} {{ $t('common.export') }}
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item icon="Delete" @click.stop="deleteApplication(item)">{{ <el-dropdown-item icon="Delete" @click.stop="deleteApplication(item)">{{
$t('common.delete') $t('common.delete')
}}</el-dropdown-item> }}</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
@ -185,7 +190,9 @@
<div @click.stop> <div @click.stop>
<el-dropdown trigger="click"> <el-dropdown trigger="click">
<el-button text @click.stop> <el-button text @click.stop>
<el-icon><MoreFilled /></el-icon> <el-icon>
<MoreFilled/>
</el-icon>
</el-button> </el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
@ -193,7 +200,8 @@
icon="Refresh" icon="Refresh"
@click.stop="syncDataset(item)" @click.stop="syncDataset(item)"
v-if="item.type === 1" v-if="item.type === 1"
>{{ $t('views.knowledge.setting.sync') }}</el-dropdown-item >{{ $t('views.knowledge.setting.sync') }}
</el-dropdown-item
> >
<el-dropdown-item @click.stop="reEmbeddingDataset(item)"> <el-dropdown-item @click.stop="reEmbeddingDataset(item)">
<AppIcon iconName="app-vectorization"></AppIcon> <AppIcon iconName="app-vectorization"></AppIcon>
@ -232,25 +240,26 @@
</el-col> </el-col>
</template> </template>
</el-row> </el-row>
<el-empty :description="$t('common.noData')" v-else /> <el-empty :description="$t('common.noData')" v-else/>
</div> </div>
</ContentContainer> </ContentContainer>
<CreateApplicationDialog ref="CreateApplicationDialogRef" /> <CreateApplicationDialog ref="CreateApplicationDialogRef"/>
</LayoutContainer> </LayoutContainer>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, ref, reactive, computed } from 'vue' import {onMounted, ref, reactive, computed} from 'vue'
import CreateApplicationDialog from '@/views/application/component/CreateApplicationDialog.vue' import CreateApplicationDialog from '@/views/application/component/CreateApplicationDialog.vue'
import ApplicaitonApi from '@/api/application/application' import ApplicaitonApi from '@/api/application/application'
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'
import { t } from '@/locales' import {t} from '@/locales'
import { useRouter } from 'vue-router' import {useRouter} from 'vue-router'
import { isWorkFlow } from '@/utils/application' import {isWorkFlow} from '@/utils/application'
const router = useRouter() const router = useRouter()
const { folder } = useStore() const {folder} = useStore()
const loading = ref(false) const loading = ref(false)
@ -296,14 +305,14 @@ function openCreateDialog(type?: string) {
} }
const search_type_change = () => { const search_type_change = () => {
search_form.value = { name: '', create_user: '' } search_form.value = {name: '', create_user: ''}
} }
function getList() { function getList() {
const params = { const params = {
folder_id: currentFolder.value?.id || 'root', folder_id: currentFolder.value?.id || 'root',
} }
ApplicaitonApi.getApplication('default', paginationConfig, params, loading).then((res) => { ApplicaitonApi.getApplication(paginationConfig, params, loading).then((res) => {
paginationConfig.total = res.data.total paginationConfig.total = res.data.total
applicationList.value = [...applicationList.value, ...res.data.records] applicationList.value = [...applicationList.value, ...res.data.records]
}) })
@ -311,7 +320,7 @@ function getList() {
function getFolder() { function getFolder() {
const params = {} const params = {}
folder.asynGetFolder('default', 'APPLICATION', params, loading).then((res: any) => { folder.asyncGetFolder('APPLICATION', params, loading).then((res: any) => {
folderList.value = res.data folderList.value = res.data
currentFolder.value = res.data?.[0] || {} currentFolder.value = res.data?.[0] || {}
getList() getList()

View File

@ -930,7 +930,7 @@ function getList(bool?: boolean) {
folder_id: folderId, folder_id: folderId,
} }
documentApi documentApi
.getDocument('default', id as string, paginationConfig.value, param, bool ? undefined : loading) .getDocument( id as string, paginationConfig.value, param, bool ? undefined : loading)
.then((res) => { .then((res) => {
documentData.value = res.data.records documentData.value = res.data.records
paginationConfig.value.total = res.data.total paginationConfig.value.total = res.data.total
@ -938,7 +938,7 @@ function getList(bool?: boolean) {
} }
function getDetail() { function getDetail() {
knowledge.asyncGetDatasetDetail('default', id, loading).then((res: any) => { knowledge.asyncGetDatasetDetail( id, loading).then((res: any) => {
datasetDetail.value = res.data datasetDetail.value = res.data
}) })
} }

View File

@ -8,7 +8,7 @@
<h4 class="title-decoration-1 mb-16"> <h4 class="title-decoration-1 mb-16">
{{ $t('common.info') }} {{ $t('common.info') }}
</h4> </h4>
<BaseForm ref="BaseFormRef" :data="detail" /> <BaseForm ref="BaseFormRef" :data="detail"/>
<el-form <el-form
ref="webFormRef" ref="webFormRef"
@ -21,12 +21,12 @@
<el-card shadow="never" class="mb-8" style="width: 50%" v-if="detail.type === 0"> <el-card shadow="never" class="mb-8" style="width: 50%" v-if="detail.type === 0">
<div class="flex align-center"> <div class="flex align-center">
<el-avatar class="mr-8 avatar-blue" shape="square" :size="32"> <el-avatar class="mr-8 avatar-blue" shape="square" :size="32">
<img src="@/assets/knowledge/icon_document.svg" style="width: 58%" alt="" /> <img src="@/assets/knowledge/icon_document.svg" style="width: 58%" alt=""/>
</el-avatar> </el-avatar>
<div> <div>
<div>{{ $t('views.knowledge.knowledgeType.generalKnowledge') }}</div> <div>{{ $t('views.knowledge.knowledgeType.generalKnowledge') }}</div>
<el-text type="info" <el-text type="info"
>{{ $t('views.knowledge.knowledgeType.generalInfo') }} >{{ $t('views.knowledge.knowledgeType.generalInfo') }}
</el-text> </el-text>
</div> </div>
</div> </div>
@ -34,7 +34,7 @@
<el-card shadow="never" class="mb-8" style="width: 50%" v-if="detail?.type === 1"> <el-card shadow="never" class="mb-8" style="width: 50%" v-if="detail?.type === 1">
<div class="flex align-center"> <div class="flex align-center">
<el-avatar class="mr-8 avatar-purple" shape="square" :size="32"> <el-avatar class="mr-8 avatar-purple" shape="square" :size="32">
<img src="@/assets/knowledge/icon_web.svg" style="width: 58%" alt="" /> <img src="@/assets/knowledge/icon_web.svg" style="width: 58%" alt=""/>
</el-avatar> </el-avatar>
<div> <div>
<div>{{ $t('views.knowledge.knowledgeType.webKnowledge') }}</div> <div>{{ $t('views.knowledge.knowledgeType.webKnowledge') }}</div>
@ -47,14 +47,14 @@
<el-card shadow="never" class="mb-8" style="width: 50%" v-if="detail?.type === 2"> <el-card shadow="never" class="mb-8" style="width: 50%" v-if="detail?.type === 2">
<div class="flex align-center"> <div class="flex align-center">
<el-avatar shape="square" :size="32" style="background: none"> <el-avatar shape="square" :size="32" style="background: none">
<img src="@/assets/knowledge/logo_lark.svg" style="width: 100%" alt="" /> <img src="@/assets/knowledge/logo_lark.svg" style="width: 100%" alt=""/>
</el-avatar> </el-avatar>
<div> <div>
<p> <p>
<el-text>{{ $t('views.knowledge.knowledgeType.larkKnowledge') }}</el-text> <el-text>{{ $t('views.knowledge.knowledgeType.larkKnowledge') }}</el-text>
</p> </p>
<el-text type="info" <el-text type="info"
>{{ $t('views.knowledge.knowledgeType.larkInfo') }} >{{ $t('views.knowledge.knowledgeType.larkInfo') }}
</el-text> </el-text>
</div> </div>
</div> </div>
@ -131,7 +131,7 @@
style="background: none" style="background: none"
class="mr-12" class="mr-12"
> >
<img :src="item?.icon" alt="" /> <img :src="item?.icon" alt=""/>
</el-avatar> </el-avatar>
<el-avatar <el-avatar
v-else-if="item?.name" v-else-if="item?.name"
@ -159,22 +159,22 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, reactive } from 'vue' import {ref, onMounted, reactive} from 'vue'
import { useRoute } from 'vue-router' import {useRoute} from 'vue-router'
import BaseForm from '@/views/knowledge/component/BaseForm.vue' import BaseForm from '@/views/knowledge/component/BaseForm.vue'
import KnowledgeApi from '@/api/knowledge/knowledge' import KnowledgeApi from '@/api/knowledge/knowledge'
import type { ApplicationFormType } from '@/api/type/application' import type {ApplicationFormType} from '@/api/type/application'
import { MsgSuccess, MsgConfirm } from '@/utils/message' import {MsgSuccess, MsgConfirm} from '@/utils/message'
import { isAppIcon } from '@/utils/common' import {isAppIcon} from '@/utils/common'
import useStore from '@/stores' import useStore from '@/stores'
import { t } from '@/locales' import {t} from '@/locales'
const route = useRoute() const route = useRoute()
const { const {
params: { id }, params: {id},
} = route as any } = route as any
const { knowledge } = useStore() const {knowledge} = useStore()
const webFormRef = ref() const webFormRef = ref()
const BaseFormRef = ref() const BaseFormRef = ref()
const loading = ref(false) const loading = ref(false)
@ -229,14 +229,14 @@ async function submit() {
const obj = const obj =
detail.value.type === '1' || detail.value.type === '2' detail.value.type === '1' || detail.value.type === '2'
? { ? {
application_id_list: application_id_list.value, application_id_list: application_id_list.value,
meta: form.value, meta: form.value,
...BaseFormRef.value.form, ...BaseFormRef.value.form,
} }
: { : {
application_id_list: application_id_list.value, application_id_list: application_id_list.value,
...BaseFormRef.value.form, ...BaseFormRef.value.form,
} }
if (cloneModelId.value !== BaseFormRef.value.form.embedding_mode_id) { if (cloneModelId.value !== BaseFormRef.value.form.embedding_mode_id) {
MsgConfirm(t('common.tip'), t('views.knowledge.tip.updateModeMessage'), { MsgConfirm(t('common.tip'), t('views.knowledge.tip.updateModeMessage'), {
@ -250,14 +250,15 @@ async function submit() {
}) })
}) })
} else { } else {
KnowledgeApi.putKnowledge('default', id, obj, loading).then((res) => { KnowledgeApi.putKnowledge(id, obj, loading).then((res) => {
KnowledgeApi.putReEmbeddingDataset(id).then(() => { KnowledgeApi.putReEmbeddingDataset(id).then(() => {
MsgSuccess(t('common.saveSuccess')) MsgSuccess(t('common.saveSuccess'))
}) })
}) })
} }
}) })
.catch(() => {}) .catch(() => {
})
} else { } else {
if (detail.value.type === 2) { if (detail.value.type === 2) {
KnowledgeApi.putLarkDataset(id, obj, loading).then((res) => { KnowledgeApi.putLarkDataset(id, obj, loading).then((res) => {
@ -266,7 +267,7 @@ async function submit() {
}) })
}) })
} else { } else {
KnowledgeApi.putKnowledge('default', id, obj, loading).then((res) => { KnowledgeApi.putKnowledge(id, obj, loading).then((res) => {
MsgSuccess(t('common.saveSuccess')) MsgSuccess(t('common.saveSuccess'))
}) })
} }

View File

@ -42,18 +42,20 @@
</el-form> </el-form>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onMounted, onUnmounted, computed, watch } from 'vue' import {ref, reactive, onMounted, onUnmounted, computed, watch} from 'vue'
import { groupBy } from 'lodash' import {groupBy} from 'lodash'
import useStore from '@/stores' import useStore from '@/stores'
import type { knowledgeData } from '@/api/type/knowledge' import type {knowledgeData} from '@/api/type/knowledge'
import { t } from '@/locales' import {t} from '@/locales'
const props = defineProps({ const props = defineProps({
data: { data: {
type: Object, type: Object,
default: () => {}, default: () => {
},
}, },
}) })
const { model } = useStore() const {model} = useStore()
const form = ref<knowledgeData>({ const form = ref<knowledgeData>({
name: '', name: '',
desc: '', desc: '',
@ -101,6 +103,7 @@ watch(
immediate: true, immediate: true,
}, },
) )
/* /*
表单校验 表单校验
*/ */
@ -114,7 +117,7 @@ function validate() {
function getModel() { function getModel() {
loading.value = true loading.value = true
model model
.asyncGetModel('default', { model_type: 'EMBEDDING' }) .asyncGetModel({model_type: 'EMBEDDING'})
.then((res: any) => { .then((res: any) => {
modelOptions.value = groupBy(res?.data, 'provider') modelOptions.value = groupBy(res?.data, 'provider')
loading.value = false loading.value = false

View File

@ -55,7 +55,7 @@ const submitHandle = async () => {
folder_id: currentFolder.value?.id, folder_id: currentFolder.value?.id,
...BaseFormRef.value.form, ...BaseFormRef.value.form,
} }
KnowledgeApi.postDataset('default', obj, loading).then((res) => { KnowledgeApi.postKnowledge(obj, loading).then((res) => {
MsgSuccess(t('common.createSuccess')) MsgSuccess(t('common.createSuccess'))
// router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` }) // router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` })
emit('refresh') emit('refresh')

View File

@ -101,7 +101,7 @@ const submitHandle = async () => {
...BaseFormRef.value.form, ...BaseFormRef.value.form,
...knowledgeForm.value, ...knowledgeForm.value,
} }
KnowledgeApi.postWebDataset('default', obj, loading).then((res) => { KnowledgeApi.postWebKnowledge(obj, loading).then((res) => {
MsgSuccess(t('common.createSuccess')) MsgSuccess(t('common.createSuccess'))
router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` }) router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` })
emit('refresh') emit('refresh')

View File

@ -19,9 +19,9 @@
style="width: 120px" style="width: 120px"
@change="search_type_change" @change="search_type_change"
> >
<el-option :label="$t('common.creator')" value="create_user" /> <el-option :label="$t('common.creator')" value="create_user"/>
<el-option :label="$t('common.name')" value="name" /> <el-option :label="$t('common.name')" value="name"/>
</el-select> </el-select>
<el-input <el-input
v-if="search_type === 'name'" v-if="search_type === 'name'"
@ -38,42 +38,47 @@
clearable clearable
style="width: 220px" style="width: 220px"
> >
<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">
<el-button type="primary" class="ml-8"> <el-button type="primary" class="ml-8">
{{ $t('common.create') }}<el-icon class="el-icon--right"><arrow-down /></el-icon> {{ $t('common.create') }}
<el-icon class="el-icon--right">
<arrow-down/>
</el-icon>
</el-button> </el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu class="create-dropdown"> <el-dropdown-menu class="create-dropdown">
<el-dropdown-item @click="openCreateDialog(CreateKnowledgeDialog)"> <el-dropdown-item @click="openCreateDialog(CreateKnowledgeDialog)">
<div class="flex"> <div class="flex">
<el-avatar class="avatar-blue mt-4" shape="square" :size="32"> <el-avatar class="avatar-blue mt-4" shape="square" :size="32">
<img src="@/assets/knowledge/icon_document.svg" style="width: 58%" alt="" /> <img src="@/assets/knowledge/icon_document.svg" style="width: 58%" alt=""/>
</el-avatar> </el-avatar>
<div class="pre-wrap ml-8"> <div class="pre-wrap ml-8">
<div class="lighter"> <div class="lighter">
{{ $t('views.knowledge.knowledgeType.generalKnowledge') }} {{ $t('views.knowledge.knowledgeType.generalKnowledge') }}
</div> </div>
<el-text type="info" size="small">{{ <el-text type="info" size="small">{{
$t('views.knowledge.knowledgeType.generalInfo') $t('views.knowledge.knowledgeType.generalInfo')
}}</el-text> }}
</el-text>
</div> </div>
</div> </div>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item @click="openCreateDialog(CreateWebKnowledgeDialog)"> <el-dropdown-item @click="openCreateDialog(CreateWebKnowledgeDialog)">
<div class="flex"> <div class="flex">
<el-avatar class="avatar-purple mt-4" shape="square" :size="32"> <el-avatar class="avatar-purple mt-4" shape="square" :size="32">
<img src="@/assets/knowledge/icon_web.svg" style="width: 58%" alt="" /> <img src="@/assets/knowledge/icon_web.svg" style="width: 58%" alt=""/>
</el-avatar> </el-avatar>
<div class="pre-wrap ml-8"> <div class="pre-wrap ml-8">
<div class="lighter"> <div class="lighter">
{{ $t('views.knowledge.knowledgeType.webKnowledge') }} {{ $t('views.knowledge.knowledgeType.webKnowledge') }}
</div> </div>
<el-text type="info" size="small">{{ <el-text type="info" size="small">{{
$t('views.knowledge.knowledgeType.webInfo') $t('views.knowledge.knowledgeType.webInfo')
}}</el-text> }}
</el-text>
</div> </div>
</div> </div>
</el-dropdown-item> </el-dropdown-item>
@ -85,15 +90,16 @@
:size="32" :size="32"
style="background: none" style="background: none"
> >
<img src="@/assets/knowledge/logo_lark.svg" alt="" /> <img src="@/assets/knowledge/logo_lark.svg" alt=""/>
</el-avatar> </el-avatar>
<div class="pre-wrap ml-8"> <div class="pre-wrap ml-8">
<div class="lighter"> <div class="lighter">
{{ $t('views.knowledge.knowledgeType.larkKnowledge') }} {{ $t('views.knowledge.knowledgeType.larkKnowledge') }}
</div> </div>
<el-text type="info" size="small">{{ <el-text type="info" size="small">{{
$t('views.knowledge.knowledgeType.larkInfo') $t('views.knowledge.knowledgeType.larkInfo')
}}</el-text> }}
</el-text>
</div> </div>
</div> </div>
</el-dropdown-item> </el-dropdown-item>
@ -105,15 +111,16 @@
:size="32" :size="32"
style="background: none" style="background: none"
> >
<img src="@/assets/knowledge/logo_yuque.svg" alt="" /> <img src="@/assets/knowledge/logo_yuque.svg" alt=""/>
</el-avatar> </el-avatar>
<div class="pre-wrap ml-8"> <div class="pre-wrap ml-8">
<div class="lighter"> <div class="lighter">
{{ $t('views.knowledge.knowledgeType.yuqueKnowledge') }} {{ $t('views.knowledge.knowledgeType.yuqueKnowledge') }}
</div> </div>
<el-text type="info" size="small">{{ <el-text type="info" size="small">{{
$t('views.knowledge.knowledgeType.yuqueInfo') $t('views.knowledge.knowledgeType.yuqueInfo')
}}</el-text> }}
</el-text>
</div> </div>
</div> </div>
</el-dropdown-item> </el-dropdown-item>
@ -179,7 +186,7 @@
" "
> >
<template #icon> <template #icon>
<KnowledgeIcon :type="item.type" /> <KnowledgeIcon :type="item.type"/>
</template> </template>
<template #subTitle> <template #subTitle>
<el-text class="color-secondary" size="small"> <el-text class="color-secondary" size="small">
@ -192,16 +199,17 @@
<div> <div>
<span class="bold mr-4">{{ item?.document_count || 0 }}</span> <span class="bold mr-4">{{ item?.document_count || 0 }}</span>
<span class="color-secondary">{{ <span class="color-secondary">{{
$t('views.knowledge.document_count') $t('views.knowledge.document_count')
}}</span> }}</span>
<el-divider direction="vertical" /> <el-divider direction="vertical"/>
<span class="bold mr-4">{{ numberFormat(item?.char_length) || 0 }}</span> <span class="bold mr-4">{{ numberFormat(item?.char_length) || 0 }}</span>
<span class="color-secondary">{{ $t('common.character') }}</span <span class="color-secondary">{{ $t('common.character') }}</span
><el-divider direction="vertical" /> >
<el-divider direction="vertical"/>
<span class="bold mr-4">{{ item?.application_mapping_count || 0 }}</span> <span class="bold mr-4">{{ item?.application_mapping_count || 0 }}</span>
<span class="color-secondary">{{ <span class="color-secondary">{{
$t('views.knowledge.relatedApp_count') $t('views.knowledge.relatedApp_count')
}}</span> }}</span>
</div> </div>
</div> </div>
</template> </template>
@ -209,7 +217,9 @@
<div @click.stop> <div @click.stop>
<el-dropdown trigger="click"> <el-dropdown trigger="click">
<el-button text @click.stop> <el-button text @click.stop>
<el-icon><MoreFilled /></el-icon> <el-icon>
<MoreFilled/>
</el-icon>
</el-button> </el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
@ -217,7 +227,8 @@
icon="Refresh" icon="Refresh"
@click.stop="syncDataset(item)" @click.stop="syncDataset(item)"
v-if="item.type === 1" v-if="item.type === 1"
>{{ $t('views.knowledge.setting.sync') }}</el-dropdown-item >{{ $t('views.knowledge.setting.sync') }}
</el-dropdown-item
> >
<el-dropdown-item @click.stop="reEmbeddingDataset(item)"> <el-dropdown-item @click.stop="reEmbeddingDataset(item)">
<AppIcon iconName="app-vectorization"></AppIcon> <AppIcon iconName="app-vectorization"></AppIcon>
@ -256,31 +267,31 @@
</el-col> </el-col>
</template> </template>
</el-row> </el-row>
<el-empty :description="$t('common.noData')" v-else /> <el-empty :description="$t('common.noData')" v-else/>
</InfiniteScroll> </InfiniteScroll>
</div> </div>
</ContentContainer> </ContentContainer>
<component :is="currentCreateDialog" ref="CreateKnowledgeDialogRef" /> <component :is="currentCreateDialog" ref="CreateKnowledgeDialogRef"/>
<CreateFolderDialog ref="CreateFolderDialogRef" @refresh="refreshFolder" /> <CreateFolderDialog ref="CreateFolderDialogRef" @refresh="refreshFolder"/>
</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} from 'vue'
import KnowledgeIcon from '@/views/knowledge/component/KnowledgeIcon.vue' import KnowledgeIcon from '@/views/knowledge/component/KnowledgeIcon.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 CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue' import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
import KnowledgeApi from '@/api/knowledge/knowledge' import KnowledgeApi from '@/api/knowledge/knowledge'
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'
import { t } from '@/locales' import {t} from '@/locales'
import { useRouter } from 'vue-router' import {useRouter} from 'vue-router'
const router = useRouter() const router = useRouter()
const { folder } = useStore() const {folder} = useStore()
const loading = ref(false) const loading = ref(false)
@ -331,25 +342,26 @@ function openCreateDialog(data: any) {
} }
function reEmbeddingDataset(row: any) { function reEmbeddingDataset(row: any) {
KnowledgeApi.putReEmbeddingDataset('default', row.id).then(() => { KnowledgeApi.putReEmbeddingKnowledge(row.id).then(() => {
MsgSuccess(t('common.submitSuccess')) MsgSuccess(t('common.submitSuccess'))
}) })
} }
const SyncWebDialogRef = ref() const SyncWebDialogRef = ref()
function syncDataset(row: any) { function syncDataset(row: any) {
SyncWebDialogRef.value.open(row.id) SyncWebDialogRef.value.open(row.id)
} }
const search_type_change = () => { const search_type_change = () => {
search_form.value = { name: '', create_user: '' } search_form.value = {name: '', create_user: ''}
} }
function getList() { function getList() {
const params = { const params = {
folder_id: currentFolder.value?.id || 'root', folder_id: currentFolder.value?.id || 'root',
} }
KnowledgeApi.getKnowledgeList('default', paginationConfig, params, loading).then((res) => { KnowledgeApi.getKnowledgeList(paginationConfig, params, loading).then((res) => {
paginationConfig.total = res.data.total paginationConfig.total = res.data.total
knowledgeList.value = [...knowledgeList.value, ...res.data.records] knowledgeList.value = [...knowledgeList.value, ...res.data.records]
}) })
@ -357,7 +369,7 @@ function getList() {
function getFolder() { function getFolder() {
const params = {} const params = {}
folder.asynGetFolder('default', 'KNOWLEDGE', params, loading).then((res: any) => { folder.asyncGetFolder('KNOWLEDGE', params, loading).then((res: any) => {
folderList.value = res.data folderList.value = res.data
currentFolder.value = res.data?.[0] || {} currentFolder.value = res.data?.[0] || {}
getList() getList()
@ -369,6 +381,7 @@ function folderClickHandel(row: any) {
knowledgeList.value = [] knowledgeList.value = []
getList() getList()
} }
const CreateFolderDialogRef = ref() const CreateFolderDialogRef = ref()
function openCreateFolder() { function openCreateFolder() {

View File

@ -183,6 +183,7 @@ const loginHandle = () => {
} else { } else {
login.asyncLogin(loginForm.value, loading).then(() => { login.asyncLogin(loginForm.value, loading).then(() => {
locale.value = localStorage.getItem('MaxKB-locale') || getBrowserLang() || 'en-US' locale.value = localStorage.getItem('MaxKB-locale') || getBrowserLang() || 'en-US'
localStorage.setItem('workspace_id', 'default')
router.push({name: 'home'}) router.push({name: 'home'})
}) })
} }

View File

@ -412,7 +412,6 @@ const submit = () => {
.then(() => { .then(() => {
if (providerValue.value) { if (providerValue.value) {
ModelApi.createModel( ModelApi.createModel(
'default',
{ {
...base_form_data.value, ...base_form_data.value,
credential: credential_form_data.value, credential: credential_form_data.value,

View File

@ -10,7 +10,7 @@
<template #header="{ close, titleId, titleClass }"> <template #header="{ close, titleId, titleClass }">
<el-breadcrumb separator=">"> <el-breadcrumb separator=">">
<el-breadcrumb-item <el-breadcrumb-item
><span class="active-breadcrumb">{{ ><span class="active-breadcrumb">{{
`${$t('common.edit')} ${providerValue?.name}` `${$t('common.edit')} ${providerValue?.name}`
}}</span></el-breadcrumb-item }}</span></el-breadcrumb-item
> >
@ -100,8 +100,8 @@
<div class="mr-4"> <div class="mr-4">
<span>{{ $t('views.model.modelForm.base_model.label') }} </span> <span>{{ $t('views.model.modelForm.base_model.label') }} </span>
<span class="danger ml-4">{{ <span class="danger ml-4">{{
$t('views.model.modelForm.base_model.tooltip') $t('views.model.modelForm.base_model.tooltip')
}}</span> }}</span>
</div> </div>
</div> </div>
</template> </template>
@ -145,17 +145,17 @@
</el-dialog> </el-dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed } from 'vue' import {ref, computed} from 'vue'
import type { Provider, BaseModel, Model } from '@/api/type/model' import type {Provider, BaseModel, Model} from '@/api/type/model'
import type { Dict, KeyValue } from '@/api/type/common' import type {Dict, KeyValue} from '@/api/type/common'
import ModelApi from '@/api/model/model' import ModelApi from '@/api/model/model'
import ProviderApi from '@/api/model/provider' import ProviderApi from '@/api/model/provider'
import type { FormField } from '@/components/dynamics-form/type' import type {FormField} from '@/components/dynamics-form/type'
import DynamicsForm from '@/components/dynamics-form/index.vue' import DynamicsForm from '@/components/dynamics-form/index.vue'
import type { FormRules } from 'element-plus' import type {FormRules} from 'element-plus'
import { MsgSuccess } from '@/utils/message' import {MsgSuccess} from '@/utils/message'
import { PermissionType, PermissionDesc } from '@/enums/model' import {PermissionType, PermissionDesc} from '@/enums/model'
import { t } from '@/locales' import {t} from '@/locales'
const providerValue = ref<Provider>() const providerValue = ref<Provider>()
const dynamicsFormRef = ref<InstanceType<typeof DynamicsForm>>() const dynamicsFormRef = ref<InstanceType<typeof DynamicsForm>>()
@ -194,13 +194,13 @@ const base_form_data = ref<{
model_type: string model_type: string
model_name: string model_name: string
}>({ name: '', model_type: '', model_name: '', permission_type: 'PRIVATE' }) }>({name: '', model_type: '', model_name: '', permission_type: 'PRIVATE'})
const credential_form_data = ref<Dict<any>>({}) const credential_form_data = ref<Dict<any>>({})
const form_data = computed({ const form_data = computed({
get: () => { get: () => {
return { ...credential_form_data.value, ...base_form_data.value } return {...credential_form_data.value, ...base_form_data.value}
}, },
set: (event: any) => { set: (event: any) => {
credential_form_data.value = event credential_form_data.value = event
@ -236,7 +236,7 @@ const list_base_model = (model_type: any, change?: boolean) => {
} }
const open = (provider: Provider, model: Model) => { const open = (provider: Provider, model: Model) => {
modelValue.value = model modelValue.value = model
ModelApi.getModelById('default', model.id, formLoading).then((ok) => { ModelApi.getModelById(model.id, formLoading).then((ok) => {
modelValue.value = ok.data modelValue.value = ok.data
ProviderApi.listModelType(model.provider, model_type_loading).then((ok) => { ProviderApi.listModelType(model.provider, model_type_loading).then((ok) => {
model_type_list.value = ok.data model_type_list.value = ok.data
@ -257,7 +257,7 @@ const open = (provider: Provider, model: Model) => {
} }
const close = () => { const close = () => {
base_form_data.value = { name: '', model_type: '', model_name: '', permission_type: '' } base_form_data.value = {name: '', model_type: '', model_name: '', permission_type: ''}
dynamicsFormRef.value?.ruleFormRef?.resetFields() dynamicsFormRef.value?.ruleFormRef?.resetFields()
credential_form_data.value = {} credential_form_data.value = {}
model_form_field.value = [] model_form_field.value = []
@ -269,7 +269,6 @@ const submit = () => {
dynamicsFormRef.value?.validate().then(() => { dynamicsFormRef.value?.validate().then(() => {
if (modelValue.value) { if (modelValue.value) {
ModelApi.updateModel( ModelApi.updateModel(
'default',
modelValue.value.id, modelValue.value.id,
{ {
...base_form_data.value, ...base_form_data.value,
@ -285,7 +284,7 @@ const submit = () => {
}) })
} }
defineExpose({ open, close }) defineExpose({open, close})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.select-provider { .select-provider {

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>
@ -30,16 +30,18 @@
<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
> >
@ -57,7 +59,8 @@
class="ml-16" class="ml-16"
:disabled="!is_permisstion" :disabled="!is_permisstion"
@click.stop="cancelDownload" @click.stop="cancelDownload"
>{{ $t('views.model.download.cancelDownload') }}</el-button >{{ $t('views.model.download.cancelDownload') }}
</el-button
> >
</div> </div>
</div> </div>
@ -65,7 +68,9 @@
<template #mouseEnter> <template #mouseEnter>
<el-dropdown trigger="click"> <el-dropdown trigger="click">
<el-button text @click.stop> <el-button text @click.stop>
<el-icon><MoreFilled /></el-icon> <el-icon>
<MoreFilled/>
</el-icon>
</el-button> </el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
@ -105,27 +110,28 @@
</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'
const props = defineProps<{ 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
}>() }>()
const { user } = useStore() const {user} = useStore()
const downModel = ref<Model>() const downModel = ref<Model>()
const is_permisstion = computed(() => { const is_permisstion = computed(() => {
@ -161,15 +167,16 @@ const deleteModel = () => {
}, },
) )
.then(() => { .then(() => {
ModelApi.deleteModel('default', props.model.id).then(() => { ModelApi.deleteModel(props.model.id).then(() => {
emit('change') emit('change')
}) })
}) })
.catch(() => {}) .catch(() => {
})
} }
const cancelDownload = () => { const cancelDownload = () => {
ModelApi.pauseDownload('default', props.model.id).then(() => { ModelApi.pauseDownload(props.model.id).then(() => {
downModel.value = undefined downModel.value = undefined
emit('change') emit('change')
}) })
@ -190,7 +197,7 @@ const icon = computed(() => {
const initInterval = () => { const initInterval = () => {
interval = setInterval(() => { interval = setInterval(() => {
if (currentModel.value.status === 'DOWNLOAD') { if (currentModel.value.status === 'DOWNLOAD') {
ModelApi.getModelMetaById('default', props.model.id).then((ok) => { ModelApi.getModelMetaById(props.model.id).then((ok) => {
downModel.value = ok.data downModel.value = ok.data
}) })
} else { } else {
@ -228,12 +235,14 @@ onBeforeUnmount(() => {
.model-card { .model-card {
min-height: 135px; min-height: 135px;
min-width: auto; min-width: auto;
.operation-button { .operation-button {
position: absolute; position: absolute;
right: 12px; right: 12px;
bottom: 12px; bottom: 12px;
height: auto; height: auto;
} }
.progress-mask { .progress-mask {
position: absolute; position: absolute;
top: 0; top: 0;
@ -243,6 +252,7 @@ onBeforeUnmount(() => {
height: 100%; height: 100%;
z-index: 99; z-index: 99;
text-align: center; text-align: center;
.percentage { .percentage {
margin-top: 55px; margin-top: 55px;
margin-bottom: 16px; margin-bottom: 16px;

View File

@ -100,7 +100,7 @@ const AddParamRef = ref()
const open = () => { const open = () => {
dialogVisible.value = true dialogVisible.value = true
loading.value = true loading.value = true
ModelApi.getModelParamsForm('default', props.model.id, loading) ModelApi.getModelParamsForm(props.model.id, loading)
.then((ok) => { .then((ok) => {
loading.value = false loading.value = false
modelParamsForm.value = ok.data modelParamsForm.value = ok.data
@ -151,7 +151,7 @@ function refresh(data: any, index: any) {
} }
function submit() { function submit() {
ModelApi.updateModelParamsForm('default', props.model.id, modelParamsForm.value, loading).then( ModelApi.updateModelParamsForm(props.model.id, modelParamsForm.value, loading).then(
(ok) => { (ok) => {
MsgSuccess(t('views.model.tip.saveSuccessMessage')) MsgSuccess(t('views.model.tip.saveSuccessMessage'))
close() close()

View File

@ -185,7 +185,7 @@ 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 model
.asyncGetModel('default', { ...model_search_form.value, ...params }, list_model_loading) .asyncGetModel( { ...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

@ -174,7 +174,6 @@ const remoteMethod = (query: string) => {
function getProblemOption(filterText?: string) { function getProblemOption(filterText?: string) {
return problem return problem
.asyncGetProblem( .asyncGetProblem(
'default',
props.datasetId || (id as string), props.datasetId || (id as string),
{ current_page: 1, page_size: 100 }, { current_page: 1, page_size: 100 },
filterText && { content: filterText }, filterText && { content: filterText },

View File

@ -7,14 +7,17 @@
<div class="flex-between"> <div class="flex-between">
<div> <div>
<el-button type="primary" @click="createProblem">{{ <el-button type="primary" @click="createProblem">{{
$t('views.problem.createProblem') $t('views.problem.createProblem')
}}</el-button> }}
</el-button>
<el-button @click="relateProblem()" :disabled="multipleSelection.length === 0">{{ <el-button @click="relateProblem()" :disabled="multipleSelection.length === 0">{{
$t('views.problem.relateParagraph.title') $t('views.problem.relateParagraph.title')
}}</el-button> }}
</el-button>
<el-button @click="deleteMulDocument" :disabled="multipleSelection.length === 0">{{ <el-button @click="deleteMulDocument" :disabled="multipleSelection.length === 0">{{
$t('views.problem.setting.batchDelete') $t('views.problem.setting.batchDelete')
}}</el-button> }}
</el-button>
</div> </div>
<el-input <el-input
@ -46,7 +49,7 @@
v-loading="loading" v-loading="loading"
:row-key="(row: any) => row.id" :row-key="(row: any) => row.id"
> >
<el-table-column type="selection" width="55" :reserve-selection="true" /> <el-table-column type="selection" width="55" :reserve-selection="true"/>
<el-table-column prop="content" :label="$t('views.problem.title')" min-width="280"> <el-table-column prop="content" :label="$t('views.problem.title')" min-width="280">
<template #default="{ row }"> <template #default="{ row }">
<ReadWrite <ReadWrite
@ -100,14 +103,14 @@
placement="top" placement="top"
> >
<el-button type="primary" text @click.stop="relateProblem(row)"> <el-button type="primary" text @click.stop="relateProblem(row)">
<el-icon><Connection /></el-icon> <el-icon><Connection/></el-icon>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
</span> </span>
<span> <span>
<el-tooltip effect="dark" :content="$t('common.delete')" placement="top"> <el-tooltip effect="dark" :content="$t('common.delete')" placement="top">
<el-button type="primary" text @click.stop="deleteProblem(row)"> <el-button type="primary" text @click.stop="deleteProblem(row)">
<el-icon><Delete /></el-icon> <el-icon><Delete/></el-icon>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
</span> </span>
@ -118,7 +121,7 @@
</div> </div>
</div> </div>
</el-card> </el-card>
<CreateProblemDialog ref="CreateProblemDialogRef" @refresh="refresh" /> <CreateProblemDialog ref="CreateProblemDialogRef" @refresh="refresh"/>
<DetailProblemDrawer <DetailProblemDrawer
:next="nextChatRecord" :next="nextChatRecord"
:pre="preChatRecord" :pre="preChatRecord"
@ -129,28 +132,29 @@
:next_disable="next_disable" :next_disable="next_disable"
@refresh="refreshRelate" @refresh="refreshRelate"
/> />
<RelateProblemDialog ref="RelateProblemDialogRef" @refresh="refreshRelate" /> <RelateProblemDialog ref="RelateProblemDialogRef" @refresh="refreshRelate"/>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, reactive, onBeforeUnmount, computed } from 'vue' import {ref, onMounted, reactive, onBeforeUnmount, computed} from 'vue'
import { useRouter, useRoute } from 'vue-router' import {useRouter, useRoute} from 'vue-router'
import { ElTable } from 'element-plus' import {ElTable} from 'element-plus'
import problemApi from '@/api/knowledge/problem' import problemApi from '@/api/knowledge/problem'
import CreateProblemDialog from './component/CreateProblemDialog.vue' import CreateProblemDialog from './component/CreateProblemDialog.vue'
import DetailProblemDrawer from './component/DetailProblemDrawer.vue' import DetailProblemDrawer from './component/DetailProblemDrawer.vue'
import RelateProblemDialog from './component/RelateProblemDialog.vue' import RelateProblemDialog from './component/RelateProblemDialog.vue'
import { datetimeFormat } from '@/utils/time' import {datetimeFormat} from '@/utils/time'
import { MsgSuccess, MsgConfirm, MsgError } from '@/utils/message' import {MsgSuccess, MsgConfirm, MsgError} from '@/utils/message'
import type { Dict } from '@/api/type/common' import type {Dict} from '@/api/type/common'
import useStore from '@/stores' import useStore from '@/stores'
import { t } from '@/locales' import {t} from '@/locales'
const route = useRoute() const route = useRoute()
const { const {
params: { id }, // id params: {id}, // id
} = route as any } = route as any
const { problem } = useStore() const {problem} = useStore()
const RelateProblemDialogRef = ref() const RelateProblemDialogRef = ref()
const DetailProblemRef = ref() const DetailProblemRef = ref()
@ -176,7 +180,7 @@ const problemIndexMap = computed<Dict<number>>(() => {
.map((row, index) => ({ .map((row, index) => ({
[row.id]: index, [row.id]: index,
})) }))
.reduce((pre, next) => ({ ...pre, ...next }), {}) .reduce((pre, next) => ({...pre, ...next}), {})
}) })
const multipleTableRef = ref<InstanceType<typeof ElTable>>() const multipleTableRef = ref<InstanceType<typeof ElTable>>()
@ -251,7 +255,8 @@ function deleteProblem(row: any) {
getList() getList()
}) })
}) })
.catch(() => {}) .catch(() => {
})
} }
function editName(val: string, problemId: string) { function editName(val: string, problemId: string) {
@ -271,6 +276,7 @@ function editName(val: string, problemId: string) {
function cellMouseEnter(row: any) { function cellMouseEnter(row: any) {
currentMouseId.value = row.id currentMouseId.value = row.id
} }
function cellMouseLeave() { function cellMouseLeave() {
currentMouseId.value = '' currentMouseId.value = ''
} }
@ -308,7 +314,7 @@ const next_disable = computed(() => {
return ( return (
index >= problemData.value.length && index >= problemData.value.length &&
index + (paginationConfig.current_page - 1) * paginationConfig.page_size >= index + (paginationConfig.current_page - 1) * paginationConfig.page_size >=
paginationConfig.total - 1 paginationConfig.total - 1
) )
}) })
/** /**
@ -344,7 +350,7 @@ function rowClickHandle(row: any, column?: any) {
} }
} }
const setRowClass = ({ row }: any) => { const setRowClass = ({row}: any) => {
return currentClickId.value === row?.id ? 'highlight' : '' return currentClickId.value === row?.id ? 'highlight' : ''
} }
@ -356,10 +362,9 @@ function handleSizeChange() {
function getList() { function getList() {
return problem return problem
.asyncGetProblem( .asyncGetProblem(
'default',
id as string, id as string,
paginationConfig, paginationConfig,
filterText.value && { content: filterText.value }, filterText.value && {content: filterText.value},
loading, loading,
) )
.then((res: any) => { .then((res: any) => {
@ -367,10 +372,12 @@ function getList() {
paginationConfig.total = res.data.total paginationConfig.total = res.data.total
}) })
} }
function refreshRelate() { function refreshRelate() {
getList() getList()
multipleTableRef.value?.clearSelection() multipleTableRef.value?.clearSelection()
} }
function refresh() { function refresh() {
paginationConfig.current_page = 1 paginationConfig.current_page = 1
getList() getList()
@ -380,6 +387,7 @@ onMounted(() => {
getList() getList()
}) })
onBeforeUnmount(() => {}) onBeforeUnmount(() => {
})
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

View File

@ -32,10 +32,10 @@
:size="32" :size="32"
style="background: none" style="background: none"
> >
<img :src="String(form.icon)" alt="" /> <img :src="String(form.icon)" alt=""/>
</el-Avatar> </el-Avatar>
<el-avatar v-else class="avatar-green" shape="square" :size="32"> <el-avatar v-else class="avatar-green" shape="square" :size="32">
<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>
<el-Avatar <el-Avatar
v-if="showEditIcon" v-if="showEditIcon"
@ -45,11 +45,13 @@
:size="32" :size="32"
@click="openEditAvatar" @click="openEditAvatar"
> >
<el-icon><EditPen /></el-icon> <el-icon>
<EditPen/>
</el-icon>
</el-Avatar> </el-Avatar>
</div> </div>
<el-avatar v-else class="avatar-green" shape="square" :size="32"> <el-avatar v-else class="avatar-green" shape="square" :size="32">
<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>
<el-input <el-input
v-model="form.name" v-model="form.name"
@ -78,7 +80,10 @@
{{ $t('common.param.initParam') }} {{ $t('common.param.initParam') }}
</h4> </h4>
<el-button link type="primary" @click="openAddInitDialog()"> <el-button link type="primary" @click="openAddInitDialog()">
<el-icon class="mr-4"><Plus /></el-icon> {{ $t('common.add') }} <el-icon class="mr-4">
<Plus/>
</el-icon>
{{ $t('common.add') }}
</el-button> </el-button>
</div> </div>
<el-table ref="initFieldTableRef" :data="form.init_field_list" class="mb-16"> <el-table ref="initFieldTableRef" :data="form.init_field_list" class="mb-16">
@ -90,35 +95,43 @@
<el-table-column :label="$t('dynamicsForm.paramForm.input_type.label')"> <el-table-column :label="$t('dynamicsForm.paramForm.input_type.label')">
<template #default="{ row }"> <template #default="{ row }">
<el-tag type="info" class="info-tag" v-if="row.input_type === 'TextInput'">{{ <el-tag type="info" class="info-tag" v-if="row.input_type === 'TextInput'">{{
$t('dynamicsForm.input_type_list.TextInput') $t('dynamicsForm.input_type_list.TextInput')
}}</el-tag> }}
</el-tag>
<el-tag type="info" class="info-tag" v-if="row.input_type === 'PasswordInput'">{{ <el-tag type="info" class="info-tag" v-if="row.input_type === 'PasswordInput'">{{
$t('dynamicsForm.input_type_list.PasswordInput') $t('dynamicsForm.input_type_list.PasswordInput')
}}</el-tag> }}
</el-tag>
<el-tag type="info" class="info-tag" v-if="row.input_type === 'Slider'">{{ <el-tag type="info" class="info-tag" v-if="row.input_type === 'Slider'">{{
$t('dynamicsForm.input_type_list.Slider') $t('dynamicsForm.input_type_list.Slider')
}}</el-tag> }}
</el-tag>
<el-tag type="info" class="info-tag" v-if="row.input_type === 'SwitchInput'">{{ <el-tag type="info" class="info-tag" v-if="row.input_type === 'SwitchInput'">{{
$t('dynamicsForm.input_type_list.SwitchInput') $t('dynamicsForm.input_type_list.SwitchInput')
}}</el-tag> }}
</el-tag>
<el-tag type="info" class="info-tag" v-if="row.input_type === 'SingleSelect'">{{ <el-tag type="info" class="info-tag" v-if="row.input_type === 'SingleSelect'">{{
$t('dynamicsForm.input_type_list.SingleSelect') $t('dynamicsForm.input_type_list.SingleSelect')
}}</el-tag> }}
</el-tag>
<el-tag type="info" class="info-tag" v-if="row.input_type === 'MultiSelect'">{{ <el-tag type="info" class="info-tag" v-if="row.input_type === 'MultiSelect'">{{
$t('dynamicsForm.input_type_list.MultiSelect') $t('dynamicsForm.input_type_list.MultiSelect')
}}</el-tag> }}
</el-tag>
<el-tag type="info" class="info-tag" v-if="row.input_type === 'RadioCard'">{{ <el-tag type="info" class="info-tag" v-if="row.input_type === 'RadioCard'">{{
$t('dynamicsForm.input_type_list.RadioCard') $t('dynamicsForm.input_type_list.RadioCard')
}}</el-tag> }}
</el-tag>
<el-tag type="info" class="info-tag" v-if="row.input_type === 'DatePicker'">{{ <el-tag type="info" class="info-tag" v-if="row.input_type === 'DatePicker'">{{
$t('dynamicsForm.input_type_list.DatePicker') $t('dynamicsForm.input_type_list.DatePicker')
}}</el-tag> }}
</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('common.required')"> <el-table-column :label="$t('common.required')">
<template #default="{ row }"> <template #default="{ row }">
<div @click.stop> <div @click.stop>
<el-switch disabled size="small" v-model="row.required" /> <el-switch disabled size="small" v-model="row.required"/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -127,14 +140,14 @@
<span class="mr-4"> <span class="mr-4">
<el-tooltip effect="dark" :content="$t('common.modify')" placement="top"> <el-tooltip effect="dark" :content="$t('common.modify')" placement="top">
<el-button type="primary" text @click.stop="openAddInitDialog(row, $index)"> <el-button type="primary" text @click.stop="openAddInitDialog(row, $index)">
<el-icon><EditPen /></el-icon> <el-icon><EditPen/></el-icon>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
</span> </span>
<el-tooltip effect="dark" :content="$t('common.delete')" placement="top"> <el-tooltip effect="dark" :content="$t('common.delete')" placement="top">
<el-button type="primary" text @click="deleteInitField($index)"> <el-button type="primary" text @click="deleteInitField($index)">
<el-icon> <el-icon>
<Delete /> <Delete/>
</el-icon> </el-icon>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
@ -149,12 +162,15 @@
</el-text> </el-text>
</h4> </h4>
<el-button link type="primary" @click="openAddDialog()"> <el-button link type="primary" @click="openAddDialog()">
<el-icon class="mr-4"><Plus /></el-icon> {{ $t('common.add') }} <el-icon class="mr-4">
<Plus/>
</el-icon>
{{ $t('common.add') }}
</el-button> </el-button>
</div> </div>
<el-table ref="inputFieldTableRef" :data="form.input_field_list" class="mb-16"> <el-table ref="inputFieldTableRef" :data="form.input_field_list" class="mb-16">
<el-table-column prop="name" :label="$t('views.tool.form.paramName.label')" /> <el-table-column prop="name" :label="$t('views.tool.form.paramName.label')"/>
<el-table-column :label="$t('views.tool.form.dataType.label')"> <el-table-column :label="$t('views.tool.form.dataType.label')">
<template #default="{ row }"> <template #default="{ row }">
<el-tag type="info" class="info-tag">{{ row.type }}</el-tag> <el-tag type="info" class="info-tag">{{ row.type }}</el-tag>
@ -163,7 +179,7 @@
<el-table-column :label="$t('common.required')"> <el-table-column :label="$t('common.required')">
<template #default="{ row }"> <template #default="{ row }">
<div @click.stop> <div @click.stop>
<el-switch size="small" v-model="row.is_required" /> <el-switch size="small" v-model="row.is_required"/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -181,14 +197,14 @@
<span class="mr-4"> <span class="mr-4">
<el-tooltip effect="dark" :content="$t('common.modify')" placement="top"> <el-tooltip effect="dark" :content="$t('common.modify')" placement="top">
<el-button type="primary" text @click.stop="openAddDialog(row, $index)"> <el-button type="primary" text @click.stop="openAddDialog(row, $index)">
<el-icon><EditPen /></el-icon> <el-icon><EditPen/></el-icon>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
</span> </span>
<el-tooltip effect="dark" :content="$t('common.delete')" placement="top"> <el-tooltip effect="dark" :content="$t('common.delete')" placement="top">
<el-button type="primary" text @click="deleteField($index)"> <el-button type="primary" text @click="deleteField($index)">
<el-icon> <el-icon>
<Delete /> <Delete/>
</el-icon> </el-icon>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
@ -226,32 +242,33 @@
<el-button :loading="loading" @click="visible = false">{{ $t('common.cancel') }}</el-button> <el-button :loading="loading" @click="visible = false">{{ $t('common.cancel') }}</el-button>
<el-button :loading="loading" @click="openDebug">{{ $t('common.debug') }}</el-button> <el-button :loading="loading" @click="openDebug">{{ $t('common.debug') }}</el-button>
<el-button type="primary" @click="submit(FormRef)" :loading="loading"> <el-button type="primary" @click="submit(FormRef)" :loading="loading">
{{ isEdit ? $t('common.save') : $t('common.create') }}</el-button {{ isEdit ? $t('common.save') : $t('common.create') }}
</el-button
> >
</div> </div>
</template> </template>
<ToolDebugDrawer ref="ToolDebugDrawerRef" /> <ToolDebugDrawer ref="ToolDebugDrawerRef"/>
<FieldFormDialog ref="FieldFormDialogRef" @refresh="refreshFieldList" /> <FieldFormDialog ref="FieldFormDialogRef" @refresh="refreshFieldList"/>
<UserFieldFormDialog ref="UserFieldFormDialogRef" @refresh="refreshInitFieldList" /> <UserFieldFormDialog ref="UserFieldFormDialogRef" @refresh="refreshInitFieldList"/>
<EditAvatarDialog ref="EditAvatarDialogRef" @refresh="refreshTool" /> <EditAvatarDialog ref="EditAvatarDialogRef" @refresh="refreshTool"/>
</el-drawer> </el-drawer>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, watch, nextTick } from 'vue' import {ref, reactive, watch, nextTick} from 'vue'
import FieldFormDialog from '@/views/tool/component/FieldFormDialog.vue' import FieldFormDialog from '@/views/tool/component/FieldFormDialog.vue'
import ToolDebugDrawer from './ToolDebugDrawer.vue' import ToolDebugDrawer from './ToolDebugDrawer.vue'
import UserFieldFormDialog from '@/views/tool/component/UserFieldFormDialog.vue' import UserFieldFormDialog from '@/views/tool/component/UserFieldFormDialog.vue'
import EditAvatarDialog from '@/views/tool/component/EditAvatarDialog.vue' import EditAvatarDialog from '@/views/tool/component/EditAvatarDialog.vue'
import type { toolData } from '@/api/type/tool' import type {toolData} from '@/api/type/tool'
import ToolApi from '@/api/tool/tool' import ToolApi from '@/api/tool/tool'
import type { FormInstance } from 'element-plus' import type {FormInstance} from 'element-plus'
import { MsgSuccess, MsgConfirm } from '@/utils/message' import {MsgSuccess, MsgConfirm} from '@/utils/message'
import { cloneDeep } from 'lodash' import {cloneDeep} from 'lodash'
import { PermissionType, PermissionDesc } from '@/enums/model' import {PermissionType, PermissionDesc} from '@/enums/model'
import { t } from '@/locales' import {t} from '@/locales'
import { isAppIcon } from '@/utils/common' import {isAppIcon} from '@/utils/common'
const props = defineProps({ const props = defineProps({
title: String, title: String,
@ -325,7 +342,8 @@ function close() {
.then(() => { .then(() => {
visible.value = false visible.value = false
}) })
.catch(() => {}) .catch(() => {
})
} }
} }
@ -397,13 +415,13 @@ const submit = async (formEl: FormInstance | undefined) => {
await formEl.validate((valid: any) => { await formEl.validate((valid: any) => {
if (valid) { if (valid) {
if (isEdit.value) { if (isEdit.value) {
ToolApi.putTool('default', form.value?.id as string, form.value, loading).then((res) => { ToolApi.putTool(form.value?.id as string, form.value, loading).then((res) => {
MsgSuccess(t('common.editSuccess')) MsgSuccess(t('common.editSuccess'))
emit('refresh', res.data) emit('refresh', res.data)
visible.value = false visible.value = false
}) })
} else { } else {
ToolApi.postTool('default', form.value, loading).then((res) => { ToolApi.postTool(form.value, loading).then((res) => {
MsgSuccess(t('common.createSuccess')) MsgSuccess(t('common.createSuccess'))
emit('refresh') emit('refresh')
visible.value = false visible.value = false

View File

@ -27,12 +27,12 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch } from 'vue' import {ref, watch} from 'vue'
import ToolApi from '@/api/tool/tool' import ToolApi from '@/api/tool/tool'
import DynamicsForm from '@/components/dynamics-form/index.vue' import DynamicsForm from '@/components/dynamics-form/index.vue'
import { MsgSuccess } from '@/utils/message' import {MsgSuccess} from '@/utils/message'
import { t } from '@/locales' import {t} from '@/locales'
import { cloneDeep } from 'lodash' import {cloneDeep} from 'lodash'
const emit = defineEmits(['refresh']) const emit = defineEmits(['refresh'])
@ -55,7 +55,7 @@ watch(debugVisible, (bool) => {
const submit = async () => { const submit = async () => {
dynamicsFormRef.value.validate().then(() => { dynamicsFormRef.value.validate().then(() => {
ToolApi.putToolLib('default', form.value?.id as string, form.value, loading).then((res) => { ToolApi.putTool(form.value?.id as string, form.value, loading).then((res) => {
MsgSuccess(t('common.editSuccess')) MsgSuccess(t('common.editSuccess'))
emit('refresh') emit('refresh')
debugVisible.value = false debugVisible.value = false
@ -71,12 +71,12 @@ const open = (data: any, is_active: boolean) => {
const init_params = form.value.init_field_list const init_params = form.value.init_field_list
.map((item: any) => { .map((item: any) => {
if (item.show_default_value === false) { if (item.show_default_value === false) {
return { [item.field]: undefined } return {[item.field]: undefined}
} }
return { [item.field]: item.default_value } return {[item.field]: item.default_value}
}) })
.reduce((x: any, y: any) => ({ ...x, ...y }), {}) .reduce((x: any, y: any) => ({...x, ...y}), {})
form.value.init_params = { ...init_params, ...form.value.init_params } form.value.init_params = {...init_params, ...form.value.init_params}
debugVisible.value = true debugVisible.value = true
} }

View File

@ -19,9 +19,9 @@
style="width: 120px" style="width: 120px"
@change="search_type_change" @change="search_type_change"
> >
<el-option :label="$t('common.creator')" value="create_user" /> <el-option :label="$t('common.creator')" value="create_user"/>
<el-option :label="$t('views.model.modelForm.modeName.label')" value="name" /> <el-option :label="$t('views.model.modelForm.modeName.label')" value="name"/>
</el-select> </el-select>
<el-input <el-input
v-if="search_type === 'name'" v-if="search_type === 'name'"
@ -38,7 +38,7 @@
clearable clearable
style="width: 220px" style="width: 220px"
> >
<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-button class="ml-16" type="primary"> {{ $t('common.create') }}</el-button> <el-button class="ml-16" type="primary"> {{ $t('common.create') }}</el-button>
@ -84,10 +84,10 @@
style="background: none" style="background: none"
class="mr-8" class="mr-8"
> >
<img :src="item?.icon" alt="" /> <img :src="item?.icon" alt=""/>
</el-avatar> </el-avatar>
<el-avatar v-else class="avatar-green" shape="square" :size="32"> <el-avatar v-else class="avatar-green" shape="square" :size="32">
<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>
</template> </template>
<template #subTitle> <template #subTitle>
@ -99,8 +99,10 @@
<template #footer> <template #footer>
<div v-if="item.is_active" class="flex align-center"> <div v-if="item.is_active" class="flex align-center">
<el-icon class="color-success mr-8" style="font-size: 16px" <el-icon class="color-success mr-8" style="font-size: 16px"
><SuccessFilled >
/></el-icon> <SuccessFilled
/>
</el-icon>
<span class="color-secondary"> <span class="color-secondary">
{{ $t('common.status.enabled') }} {{ $t('common.status.enabled') }}
</span> </span>
@ -120,10 +122,12 @@
size="small" size="small"
class="mr-4" class="mr-4"
/> />
<el-divider direction="vertical" /> <el-divider direction="vertical"/>
<el-dropdown trigger="click"> <el-dropdown trigger="click">
<el-button text @click.stop> <el-button text @click.stop>
<el-icon><MoreFilled /></el-icon> <el-icon>
<MoreFilled/>
</el-icon>
</el-button> </el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
@ -132,7 +136,9 @@
:disabled="!canEdit(item)" :disabled="!canEdit(item)"
@click.stop="openCreateDialog(item)" @click.stop="openCreateDialog(item)"
> >
<el-icon><EditPen /></el-icon> <el-icon>
<EditPen/>
</el-icon>
{{ $t('common.edit') }} {{ $t('common.edit') }}
</el-dropdown-item> </el-dropdown-item>
<!-- <el-dropdown-item <!-- <el-dropdown-item
@ -176,25 +182,25 @@
</el-col> </el-col>
</template> </template>
</el-row> </el-row>
<el-empty :description="$t('common.noData')" v-else /> <el-empty :description="$t('common.noData')" v-else/>
</div> </div>
</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"/>
</LayoutContainer> </LayoutContainer>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, ref, reactive, computed } from 'vue' import {onMounted, ref, reactive, computed} from 'vue'
import ToolApi from '@/api/tool/tool' import ToolApi from '@/api/tool/tool'
import useStore from '@/stores' import useStore from '@/stores'
import { MsgConfirm } from '@/utils/message' import {MsgConfirm} from '@/utils/message'
import InitParamDrawer from '@/views/tool/component/InitParamDrawer.vue' import InitParamDrawer from '@/views/tool/component/InitParamDrawer.vue'
import ToolFormDrawer from './ToolFormDrawer.vue' import ToolFormDrawer from './ToolFormDrawer.vue'
import { t } from '@/locales' import {t} from '@/locales'
import { isAppIcon } from '@/utils/common' import {isAppIcon} from '@/utils/common'
const { folder, user } = useStore() const {folder, user} = useStore()
const InitParamDrawerRef = ref() const InitParamDrawerRef = ref()
const search_type = ref('name') const search_type = ref('name')
@ -220,7 +226,7 @@ const toolList = ref<any[]>([])
const currentFolder = ref<any>({}) const currentFolder = ref<any>({})
const search_type_change = () => { const search_type_change = () => {
search_form.value = { name: '', create_user: '' } search_form.value = {name: '', create_user: ''}
} }
const canEdit = (row: any) => { const canEdit = (row: any) => {
return user.userInfo?.id === row?.user_id return user.userInfo?.id === row?.user_id
@ -228,6 +234,7 @@ const canEdit = (row: any) => {
const ToolFormDrawerRef = ref() const ToolFormDrawerRef = ref()
const ToolDrawertitle = ref('') const ToolDrawertitle = ref('')
function openCreateDialog(data?: any) { function openCreateDialog(data?: any) {
// template_id // template_id
if (data?.template_id) { if (data?.template_id) {
@ -236,7 +243,7 @@ function openCreateDialog(data?: any) {
ToolDrawertitle.value = data ? t('views.tool.editTool') : t('views.tool.createTool') ToolDrawertitle.value = data ? t('views.tool.editTool') : t('views.tool.createTool')
if (data) { if (data) {
if (data?.permission_type !== 'PUBLIC' || canEdit(data)) { if (data?.permission_type !== 'PUBLIC' || canEdit(data)) {
ToolApi.getToolById('default', data?.id, changeStateloading).then((res) => { ToolApi.getToolById(data?.id, changeStateloading).then((res) => {
ToolFormDrawerRef.value.open(res.data) ToolFormDrawerRef.value.open(res.data)
}) })
} }
@ -250,7 +257,7 @@ function getList() {
folder_id: currentFolder.value?.id || 'root', folder_id: currentFolder.value?.id || 'root',
scope: 'WORKSPACE', scope: 'WORKSPACE',
} }
ToolApi.getToolList('default', paginationConfig, params, loading).then((res) => { ToolApi.getToolList(paginationConfig, params, loading).then((res) => {
paginationConfig.total = res.data?.total paginationConfig.total = res.data?.total
toolList.value = [...toolList.value, ...res.data?.records] toolList.value = [...toolList.value, ...res.data?.records]
}) })
@ -258,7 +265,7 @@ function getList() {
function getFolder() { function getFolder() {
const params = {} const params = {}
folder.asynGetFolder('default', 'TOOL', params, loading).then((res: any) => { folder.asyncGetFolder('TOOL', params, loading).then((res: any) => {
folderList.value = res.data folderList.value = res.data
currentFolder.value = res.data?.[0] || {} currentFolder.value = res.data?.[0] || {}
getList() getList()
@ -278,7 +285,7 @@ async function changeState(row: any) {
const obj = { const obj = {
is_active: !row.is_active, is_active: !row.is_active,
} }
ToolApi.putTool('default', row.id, obj, changeStateloading) ToolApi.putTool(row.id, obj, changeStateloading)
.then(() => { .then(() => {
return true return true
}) })
@ -287,7 +294,7 @@ async function changeState(row: any) {
}) })
}) })
} else { } else {
const res = await ToolApi.getToolById('default', row.id, changeStateloading) const res = await ToolApi.getToolById(row.id, changeStateloading)
if ( if (
!res.data.init_params && !res.data.init_params &&
res.data.init_field_list && res.data.init_field_list &&
@ -301,7 +308,7 @@ async function changeState(row: any) {
const obj = { const obj = {
is_active: !row.is_active, is_active: !row.is_active,
} }
ToolApi.putTool('default', row.id, obj, changeStateloading) ToolApi.putTool(row.id, obj, changeStateloading)
.then(() => { .then(() => {
return true return true
}) })