feat: Application replaced with agent

This commit is contained in:
wangdan-fit2cloud 2025-12-29 15:53:51 +08:00
parent 5f7881467f
commit 0d8445288d
47 changed files with 260 additions and 274 deletions

View File

@ -128,7 +128,6 @@ watch(
)
onMounted(() => {
console.log(props.option.dataZoom)
nextTick(() => {
initChart()
window.addEventListener('resize', changeChartSize)

View File

@ -49,8 +49,8 @@
collapse-tags-tooltip
style="width: 220px"
>
<el-option label="应用" value="APPLICATION" />
<el-option label="知识库" value="KNOWLEDGE" />
<el-option :label="$t('views.application.title')" value="APPLICATION" />
<el-option :label="$t('views.knowledge.title')" value="KNOWLEDGE" />
</el-select>
</div>
</div>

View File

@ -55,7 +55,7 @@
</div>
<div v-if="item.type" class="status-tag" style="margin-left: auto">
<el-tag class="warning-tag" v-if="isWorkFlow(item.type)">
{{ $t('views.application.workflow') }}
{{ $t('views.application.senior') }}
</el-tag>
<el-tag class="blue-tag" v-else>
{{ $t('views.application.simple') }}

View File

@ -97,7 +97,6 @@ export default {
rename: 'Rename',
renameSuccess: 'Successful',
EditAvatarDialog: {
title: 'App Logo',
customizeUpload: 'Custom Upload',
upload: 'Upload',
default: 'Default Logo',

View File

@ -1,7 +1,6 @@
export default {
title: 'Overview',
appInfo: {
header: 'App Information',
publicAccessLink: 'Public URL',
openText: 'On',
closeText: 'Off',
@ -44,7 +43,7 @@ export default {
toSettingChatUser: 'Go to configure chat user',
displayCodeRequired: 'Please enter the number of failed attempts',
authenticationTooltip:
'Enabling login authentication requires chat users to have authorization configured for both the app and its associated knowledge bases. Without proper authorization, users will not be able to log in or access knowledge base retrieval features.',
'Enabling login authentication requires chat users to have authorization configured for both the agent and its associated knowledge bases. Without proper authorization, users will not be able to log in or access knowledge base retrieval features.',
},
SettingAPIKeyDialog: {
allowCrossDomainLabel: 'Allow Cross-Domain Access',

View File

@ -1,11 +1,13 @@
export default {
title: 'APP',
createApplication: 'Create Simple APP',
createWorkFlowApplication: 'Create Workflow APP',
importApplication: 'Import APP',
copyApplication: 'Copy APP',
title: 'Agent',
createApplication: 'Create Simple Agent',
createWorkFlowApplication: 'Create Workflow Agent',
importApplication: 'Import Agent',
copyApplication: 'Copy Agent',
workflow: 'WORKFLOW',
simple: 'SIMPLE',
senior: 'WORKFLOW',
simpleAgent: 'SIMPLE',
simplePlaceholder: 'Suitable for beginners to create assistant using form settings',
workflowPlaceholder:
'Suitable for advanced users to build complex logic AI assistants using low-code drag-and-drop',
@ -15,16 +17,16 @@ export default {
toChat: 'Chat',
},
delete: {
confirmTitle: 'Are you sure you want to delete this APP: ',
confirmTitle: 'Are you sure you want to delete this agent: ',
confirmMessage:
'Deleting this APP will no longer provide its services. Please proceed with caution.',
resourceCountMessage: 'This application is associated with {count} resources, and will be unavailable after deletion. Please proceed with caution.',
'Deleting this agent will no longer provide its services. Please proceed with caution.',
resourceCountMessage: 'This agent is associated with {count} resources, and will be unavailable after deletion. Please proceed with caution.',
},
tip: {
publishSuccess: 'Published successfully',
ExportError: 'Export Failed',
professionalMessage:
'The Community Edition supports up to 5 APP. If you need more APP, please upgrade to the Professional Edition.',
'The Community Edition supports up to 5 agents. If you need more agents, please upgrade to the Professional Edition.',
saveErrorMessage: 'Saving failed, please check your input or try again later',
loadingErrorMessage: 'Failed to load configuration, please check your input or try again later',
noDocPermission: 'No permission to create documents',
@ -34,12 +36,12 @@ export default {
form: {
appName: {
placeholder: 'Please enter the APP name',
requiredMessage: 'APP name is required',
placeholder: 'Please enter the agent name',
requiredMessage: 'Agent name is required',
},
appDescription: {
placeholder:
'Describe the APP scenario and use, e.g.: XXX assistant answering user questions about XXX product usage',
'Describe the Agent scenario and use, e.g.: XXX assistant answering user questions about XXX product usage',
},
appType: {
simplePlaceholder: 'Suitable for beginners to create assistant.',
@ -47,7 +49,7 @@ export default {
},
appTemplate: {
blankApp: {
title: 'Blank APP',
title: 'Blank Agent',
},
assistantApp: {
title: 'Knowledge Assistant',
@ -165,17 +167,17 @@ export default {
defaultPrompt2: 'tag',
},
applicationAccess: {
title: 'APP Access',
title: 'Third-Party Access',
wecom: 'WeCom',
wecomTip: 'Create WeCom intelligent APP',
wecomTip: 'Create WeCom Agent',
wecomBot: 'WeCom Bot',
wecomBotTip: 'Create WeCom intelligent Bot',
dingtalk: 'DingTalk',
dingtalkTip: 'Create DingTalk intelligent APP',
dingtalkTip: 'Create DingTalk Agent',
wechat: 'WeChat',
wechatTip: 'Create WeChat intelligent APP',
wechatTip: 'Create WeChat Agent',
lark: 'Lark',
larkTip: 'Create Lark intelligent APP',
larkTip: 'Create Lark Agent',
setting: 'Setting',
callback: 'Callback Address',
callbackTip: 'Please fill in the callback address',
@ -184,7 +186,7 @@ export default {
dingtalkPlatform: 'DingTalk Open Platform',
larkPlatform: 'Lark Open Platform',
slack: 'Slack',
slackTip: 'Create Slack intelligent APP',
slackTip: 'Create Slack Agent',
wecomSetting: {
title: 'WeCom Configuration',
cropId: 'Crop ID',

View File

@ -4,9 +4,9 @@ export default {
syncUsersTip: 'Only import newly added users',
setUserGroups: 'Configure User Groups',
knowledgeTitleTip:
'This configuration will only take effect after enabling chat user login authentication in the associated application',
'This configuration will only take effect after enabling chat user login authentication in the associated agent',
applicationTitleTip:
'This configuration requires login authentication to be enabled in the application',
'This configuration requires login authentication to be enabled in the agent',
autoAuthorization: 'Auto Authorization',
authorization: 'Authorization',
batchDeleteUser: 'Delete selected {count} users?',

View File

@ -1,8 +1,8 @@
export default {
title: 'Knowledge',
relatedApplications: 'Linked App',
relatedApplications: 'Linked Agent',
document_count: 'docs',
relatedApp_count: 'linked apps',
relatedApp_count: 'linked agents',
setting: {
vectorization: 'Vectorization',
sync: 'Sync',
@ -17,7 +17,7 @@ export default {
delete: {
confirmTitle: 'Confirm deletion of knowledge:',
confirmMessage1: 'This knowledge is related with',
confirmMessage2: 'APP. Deleting it will be irreversible, please proceed with caution.',
confirmMessage2: 'agent. Deleting it will be irreversible, please proceed with caution.',
resourceCountMessage: 'This knowledge is associated with {count} resources, and will be unavailable after deletion. Please proceed with caution.',
},
knowledgeType: {

View File

@ -58,20 +58,20 @@ export default {
model_type: {
label: 'Model Type',
placeholder: 'Select a model type',
tooltip1: 'LLM: An inference model for AI chats in the APP.',
tooltip1: 'LLM: An inference model for AI chats in the agent.',
tooltip2: 'Embedding Model: A model for vectorizing document content in the knowledge.',
tooltip3: 'Speech2Text: A model used for speech recognition in the APP.',
tooltip4: 'TTS: A model used for TTS in the APP.',
tooltip3: 'Speech2Text: A model used for speech recognition in the agent.',
tooltip4: 'TTS: A model used for TTS in the agent.',
tooltip5:
'Rerank: A model used to reorder candidate segments when using multi-route recall in advanced orchestration APP.',
'Rerank: A model used to reorder candidate segments when using multi-route recall in advanced orchestration agent.',
tooltip6:
'Vision Model: A visual model used for image understanding in advanced orchestration APP.',
'Vision Model: A visual model used for image understanding in advanced orchestration agent.',
tooltip7:
'Image Generation: A visual model used for image generation in advanced orchestration APP.',
'Image Generation: A visual model used for image generation in advanced orchestration agent.',
tooltip8:
'Text-to-Video: A visual model used for text-to-video in the APP.',
'Text-to-Video: A visual model used for text-to-video in the agent.',
tooltip9:
'Image-to-Video: A visual model used for image-to-video in the APP.',
'Image-to-Video: A visual model used for image-to-video in the agent.',
requiredMessage: 'Model type cannot be empty',
},
base_model: {

View File

@ -39,13 +39,13 @@ export default {
delete: {
confirmTitle: 'Confirm deletion of tool:',
confirmMessage:
'Deleting this tool will cause errors in APP that reference it when they are queried. Please proceed with caution.',
'Deleting this tool will cause errors in agent that reference it when they are queried. Please proceed with caution.',
resourceCountMessage: 'This tool is associated with {count} resources, and will be unavailable after deletion. Please proceed with caution.',
},
disabled: {
confirmTitle: 'Confirm disable tool:',
confirmMessage:
'Disabling this tool will cause errors in APP that reference it when they are queried. Please proceed with caution.',
'Disabling this tool will cause errors in agent that reference it when they are queried. Please proceed with caution.',
},
form: {

View File

@ -15,12 +15,12 @@ export default {
delete: {
confirmTitle: 'Confirm deletion of user:',
confirmMessage:
'Deleting this user will also not delete all resources (APP, knowledge, models) created by this user. Please proceed with caution.',
'Deleting this user will also not delete all resources (agent, knowledge, models) created by this user. Please proceed with caution.',
},
disabled: {
confirmTitle: 'Confirm disable tool:',
confirmMessage:
'Disabling this tool will cause errors when APP that reference it are queried. Please proceed with caution.',
'Disabling this tool will cause errors when agent that reference it are queried. Please proceed with caution.',
},
userForm: {
nick_name: {

View File

@ -8,7 +8,7 @@ export default {
confirmContent:
'After deletion, all members in this space will be removed. Please proceed with caution.',
confirmContentNotDelete:
'This workspace contains knowledge base resources and application resources, and cannot be deleted.',
'This workspace contains knowledge base resources and agent resources, and cannot be deleted.',
},
member: {
delete: {

View File

@ -33,7 +33,7 @@ export default {
onlyRight: 'Connections can only be made from the right anchor',
notRecyclable: 'Loop connections are not allowed',
onlyLeft: 'Connections can only be made to the left anchor',
applicationNodeError: 'This application is unavailable',
applicationNodeError: 'This agent is unavailable',
toolNodeError: 'This tool node is unavailable',
repeatedNodeError: 'A node with this name already exists',
cannotCopy: 'Cannot be copied',
@ -119,13 +119,6 @@ export default {
currentTime: 'Current Time',
},
baseNode: {
label: 'Base Information',
appName: {
label: 'App Name',
},
appDescription: {
label: 'App Description',
},
fileUpload: {
label: 'File Upload',
tooltip: 'When enabled, the Q&A page will display a file upload button.',
@ -454,7 +447,7 @@ You are a master of problem optimization, adept at accurately inferring user int
},
},
applicationNode: {
label: 'APP Node',
label: 'Agent Node',
},
loopNode: {
label: 'Loop Node',

View File

@ -98,7 +98,6 @@ export default {
rename: '重命名',
renameSuccess: '重命名成功',
EditAvatarDialog: {
title: '应用头像',
customizeUpload: '自定义上传',
upload: '上传',
default: '默认Logo',

View File

@ -1,7 +1,6 @@
export default {
title: '概览',
appInfo: {
header: '应用信息',
publicAccessLink: '公开访问链接',
openText: '开',
closeText: '关',
@ -44,7 +43,7 @@ export default {
displayCodeRequired: '请输入失败次数',
toSettingChatUser: '去配置对话用户',
authenticationTooltip:
'开启登录认证后,应用和关联的知识库均需要对话用户授权配置,否则用户无权限登录和知识库检索',
'开启登录认证后,智能体和关联的知识库均需要对话用户授权配置,否则用户无权限登录和知识库检索',
},
SettingAPIKeyDialog: {
allowCrossDomainLabel: '允许跨域地址',

View File

@ -1,13 +1,13 @@
import tool from '@/api/tool/tool'
export default {
title: '应用',
createApplication: '创建简易应用',
createWorkFlowApplication: '创建高级编排应用',
importApplication: '导入应用',
copyApplication: '复制应用',
workflow: '高级编排',
simple: '简易应用',
title: '智能体',
createApplication: '创建简易智能体',
createWorkFlowApplication: '创建高级智能体',
importApplication: '导入智能体',
copyApplication: '复制智能体',
workflow: '高级智能体',
simple: '简易',
senior: '高级',
simpleAgent: '简易智能体',
simplePlaceholder: '适用于初级用户使用表单设置构建AI对话助手',
workflowPlaceholder: '适用于高级用户使用低代码拖拉拽方式构建复杂逻辑的AI对话助手',
appTest: '调试预览',
@ -17,14 +17,14 @@ export default {
toChat: '去对话',
},
delete: {
confirmTitle: '是否删除应用',
confirmMessage: '删除后该应用将不再提供服务,请谨慎操作。',
resourceCountMessage: '此应用关联 {count} 个资源,删除后无法使用,请谨慎操作。',
confirmTitle: '是否删除智能体',
confirmMessage: '删除后该智能体将不再提供服务,请谨慎操作。',
resourceCountMessage: '此智能体关联 {count} 个资源,删除后无法使用,请谨慎操作。',
},
tip: {
publishSuccess: '发布成功',
ExportError: '导出失败',
professionalMessage: '社区版最多支持 5 个应用,如需拥有更多应用,请升级为专业版。',
professionalMessage: '社区版最多支持 5 个智能体,如需拥有更多智能体,请升级为专业版。',
saveErrorMessage: '保存失败,请检查输入或稍后再试',
loadingErrorMessage: '加载配置失败,请检查输入或稍后再试',
noDocPermission: '无文档创建权限',
@ -33,11 +33,11 @@ export default {
},
form: {
appName: {
placeholder: '请输入应用名称',
requiredMessage: '请输入应用名称',
placeholder: '请输入智能体名称',
requiredMessage: '请输入智能体名称',
},
appDescription: {
placeholder: '描述该应用的应用场景及用途XXX 小助手回答用户提出的 XXX 产品使用问题',
placeholder: '描述该智能体的应用场景及用途XXX 小助手回答用户提出的 XXX 产品使用问题',
},
appType: {
simplePlaceholder: '适合新手创建小助手',
@ -70,8 +70,7 @@ export default {
placeholder:
'用户提示词,可以引用系统中的变量:{data} 是命中知识库中的分段;{question} 是用户提出的问题。',
requiredMessage: '请输入用户提示词',
tooltip:
'用户向模型提出的问题或输入的指令',
tooltip: '用户向模型提出的问题或输入的指令',
noReferencesTooltip:
'通过调整提示词内容,可以引导大模型聊天方向,该提示词会被固定在上下文的开头。可以使用变量:{question} 是用户提出问题的占位符。',
referencesTooltip:
@ -158,19 +157,19 @@ export default {
defaultPrompt2: '标签中',
},
applicationAccess: {
title: '应用接入',
title: '接入第三方',
wecom: '企业微信应用',
wecomTip: '打造企业微信智能应用',
wecomTip: '打造企业微信智能',
wecomBot: '企业微信智能机器人',
wecomBotTip: '打造企业微信智能机器人',
dingtalk: '钉钉应用',
dingtalkTip: '打造钉钉智能应用',
dingtalkTip: '打造钉钉智能',
wechat: '公众号',
wechatTip: '打造公众号智能应用',
wechatTip: '打造公众号智能',
lark: '飞书应用',
larkTip: '打造飞书智能应用',
larkTip: '打造飞书智能',
slack: 'Slack',
slackTip: '打造 Slack 智能应用',
slackTip: '打造 Slack 智能',
setting: '配置',
callback: '回调地址',
callbackTip: '请输入回调地址',

View File

@ -3,8 +3,8 @@ export default {
syncUsers: '导入用户',
syncUsersTip: '仅导入新增用户',
setUserGroups: '设置用户组',
knowledgeTitleTip: '该配置需要关联的应用开启对话用户登录认证后才会生效',
applicationTitleTip: '该配置需要应用开启登录认证后生效',
knowledgeTitleTip: '该配置需要关联的智能体开启对话用户登录认证后才会生效',
applicationTitleTip: '该配置需要智能体开启登录认证后生效',
autoAuthorization: '自动授权',
authorization: '授权',
batchDeleteUser: '是否删除选中的 {count} 个用户?',

View File

@ -1,7 +1,7 @@
export default {
title: '知识库',
document_count: '文档数',
relatedApp_count: '关联应用',
relatedApp_count: '关联智能体',
setting: {
vectorization: '向量化',
sync: '同步',
@ -15,7 +15,7 @@ export default {
delete: {
confirmTitle: '是否删除知识库:',
confirmMessage1: '此知识库关联',
confirmMessage2: '个应用,删除后无法恢复,请谨慎操作。',
confirmMessage2: '个智能体,删除后无法恢复,请谨慎操作。',
resourceCountMessage: '此知识库关联 {count} 个资源,删除后无法使用,请谨慎操作。',
},
knowledgeType: {

View File

@ -56,15 +56,15 @@ export default {
model_type: {
label: '模型类型',
placeholder: '请选择模型类型',
tooltip1: '大语言模型:在应用中与AI对话的推理模型。',
tooltip1: '大语言模型:在智能体中与AI对话的推理模型。',
tooltip2: '向量模型:在知识库中对文档内容进行向量化的模型。',
tooltip3: '语音识别:在应用中开启语音识别后用于语音转文字的模型。',
tooltip4: '语音合成:在应用中开启语音播放后用于文字转语音的模型。',
tooltip5: '重排模型:在高级编排应用中使用多路召回时,对候选分段进行重新排序的模型。',
tooltip6: '视觉模型:在高级编排应用中用于图片理解的视觉模型。',
tooltip7: '图片生成:在高级编排应用中用于图片生成的视觉模型。',
tooltip8: '文生视频:在高级编排应用中用于文生视频的模型。',
tooltip9: '图生视频:在高级编排应用中用于图生视频的模型。',
tooltip3: '语音识别:在智能体中开启语音识别后用于语音转文字的模型。',
tooltip4: '语音合成:在智能体中开启语音播放后用于文字转语音的模型。',
tooltip5: '重排模型:在高级智能体中使用多路召回时,对候选分段进行重新排序的模型。',
tooltip6: '视觉模型:在高级智能体中用于图片理解的视觉模型。',
tooltip7: '图片生成:在高级智能体中用于图片生成的视觉模型。',
tooltip8: '文生视频:在高级智能体中用于文生视频的模型。',
tooltip9: '图生视频:在高级智能体中用于图生视频的模型。',
requiredMessage: '模型类型不能为空',
},
base_model: {

View File

@ -34,12 +34,12 @@ export default {
},
delete: {
confirmTitle: '是否刪除工具',
confirmMessage: '删除后,引用了该工具的应用提问时会报错 ,请谨慎操作。',
confirmMessage: '删除后,引用了该工具的智能体提问时会报错 ,请谨慎操作。',
resourceCountMessage: '此工具关联 {count} 个资源,删除后无法使用,请谨慎操作。',
},
disabled: {
confirmTitle: '是否禁用工具:',
confirmMessage: '禁用后,引用了该工具的应用提问时会报错 ,请谨慎操作。',
confirmMessage: '禁用后,引用了该工具的智能体提问时会报错 ,请谨慎操作。',
},
tip: {
saveMessage: '当前的更改尚未保存,确认退出吗?',

View File

@ -13,11 +13,11 @@ export default {
},
delete: {
confirmTitle: '是否删除用户:',
confirmMessage: '删除用户,该用户创建的资源(应用、知识库、模型)不会删除,请谨慎操作。',
confirmMessage: '删除用户,该用户创建的资源(智能体、知识库、模型)不会删除,请谨慎操作。',
},
disabled: {
confirmTitle: '是否禁用工具:',
confirmMessage: '禁用后,引用了该工具的应用提问时会报错 ,请谨慎操作。',
confirmMessage: '禁用后,引用了该工具的智能体提问时会报错 ,请谨慎操作。',
},
userForm: {
nick_name: {

View File

@ -6,7 +6,7 @@ export default {
delete: {
confirmTitle: '是否删除工作空间:',
confirmContent: '删除后,该空间下的成员都会被移除,请谨慎操作。',
confirmContentNotDelete: '该工作空间下存在 知识库资源、应用资源,无法删除。',
confirmContentNotDelete: '该工作空间下存在 知识库资源、智能体资源,无法删除。',
},
member: {
delete: {

View File

@ -32,7 +32,7 @@ export default {
onlyRight: '只允许从右边的锚点连出',
notRecyclable: '不可循环连线',
onlyLeft: '只允许连接左边的锚点',
applicationNodeError: '该应用不可用',
applicationNodeError: '该智能体不可用',
toolNodeError: '该工具不可用',
repeatedNodeError: '节点名称已存在!',
cannotCopy: '不能被复制',
@ -120,13 +120,6 @@ export default {
currentTime: '当前时间',
},
baseNode: {
label: '基本信息',
appName: {
label: '应用名称',
},
appDescription: {
label: '应用描述',
},
fileUpload: {
label: '文件上传',
tooltip: '开启后,问答页面会显示上传文件的按钮。',
@ -452,7 +445,7 @@ export default {
},
},
applicationNode: {
label: '应用节点',
label: '智能体节点',
},
loopNode: {
label: '循环节点',

View File

@ -97,7 +97,6 @@ export default {
rename: '重命名',
renameSuccess: '重命名成功',
EditAvatarDialog: {
title: '應用頭像',
customizeUpload: '自訂上傳',
upload: '上傳',
default: '預設 logo',

View File

@ -1,7 +1,6 @@
export default {
title: '概覽',
appInfo: {
header: '應用資訊',
publicAccessLink: '公開訪問連結',
openText: '開',
closeText: '關',
@ -43,7 +42,7 @@ export default {
displayCodeRequired: '請輸入失敗次數',
toSettingChatUser: '去配置對話用戶',
authenticationTooltip:
'開啟登陸認證後,應用和關聯的知識庫均需要對話用戶授權配置,否則用戶無權限登陸和知識庫檢索',
'開啟登陸認證後,智能體和關聯的知識庫均需要對話用戶授權配置,否則用戶無權限登陸和知識庫檢索',
},
SettingAPIKeyDialog: {
dialogTitle: '設定',

View File

@ -1,11 +1,13 @@
export default {
title: '應用',
createApplication: '建立簡易應用',
createWorkFlowApplication: '建立進階編排應用',
importApplication: '匯入應用',
copyApplication: '複製應用',
workflow: '進階編排',
simple: '簡易應用',
title: '智能體',
createApplication: '建立簡易智能體',
createWorkFlowApplication: '建立進階智能體',
importApplication: '匯入智能體',
copyApplication: '複製智能體',
workflow: '進階編智能體',
simpleAgent: '簡易智能體',
simple: '簡易',
senior: '進階',
simplePlaceholder: '適用於初級用戶使用表單設定構建AI對話助手',
workflowPlaceholder: '適用於高階用戶使用低代碼拖拉拽方式構建複雜邏輯的AI對話助手',
appTest: '調試預覽',
@ -14,14 +16,14 @@ export default {
addModel: '新增模型',
},
delete: {
confirmTitle: '是否刪除應用',
confirmMessage: '刪除後該應用將不再提供服務,請謹慎操作。',
resourceCountMessage: '此應用關聯 {count} 個資源,刪除後無法使用,請謹慎操作。',
confirmTitle: '是否刪除智能體',
confirmMessage: '刪除後該智能體將不再提供服務,請謹慎操作。',
resourceCountMessage: '此智能體關聯 {count} 個資源,刪除後無法使用,請謹慎操作。',
},
tip: {
publishSuccess: '發布成功',
ExportError: '匯出失敗',
professionalMessage: '社群版最多支援 5 個應用,如需擁有更多應用,請升級為專業版。',
professionalMessage: '社群版最多支援 5 個智能體,如需擁有更多智能體,請升級為專業版。',
saveErrorMessage: '儲存失敗,請檢查輸入或稍後再試',
loadingErrorMessage: '載入配置失敗,請檢查輸入或稍後再試',
noDocPermission: '無文檔創建權限',
@ -30,11 +32,11 @@ export default {
},
form: {
appName: {
placeholder: '請輸入應用名稱',
requiredMessage: '請輸入應用名稱',
placeholder: '請輸入智能體名稱',
requiredMessage: '請輸入智能體名稱',
},
appDescription: {
placeholder: '描述該應用的應用場景及用途XXX 小助手回答用戶提出的 XXX 產品使用問題',
placeholder: '描述該智能體的應用場景及用途XXX 小助手回答用戶提出的 XXX 產品使用問題',
},
appType: {
simplePlaceholder: '適合新手建立小助手',
@ -156,19 +158,19 @@ export default {
defaultPrompt2: '標籤中',
},
applicationAccess: {
title: '應用接入',
title: '接入第三方',
wecom: '企業微信應用',
wecomTip: '打造企業微信智慧應用',
wecomTip: '打造企業微信智能體',
dingtalk: '釘釘應用',
dingtalkTip: '打造釘釘智慧應用',
dingtalkTip: '打造釘釘智能體',
wecomBot: '企業微信智能機器人',
wecomBotTip: '打造企業微信智能機器人',
wechat: '公眾號',
wechatTip: '打造公眾號智慧應用',
wechatTip: '打造公眾號智能體',
lark: '飛書應用',
larkTip: '打造飛書智慧應用',
larkTip: '打造飛書智能體',
slack: 'Slack',
slackTip: '打造 Slack 智慧應用',
slackTip: '打造 Slack 智能體',
setting: '配置',
callback: '回呼位址',
callbackTip: '請輸入回呼位址',

View File

@ -3,8 +3,8 @@ export default {
syncUsers: '导入用戶',
syncUsersTip: '僅导入新增用戶',
setUserGroups: '設定用戶組',
knowledgeTitleTip: '該配置需要關聯的應用開啟對話用戶登入認證後才會生效',
applicationTitleTip: '該配置需要應用開啟登入認證後生效',
knowledgeTitleTip: '該配置需要關聯的智能體開啟對話用戶登入認證後才會生效',
applicationTitleTip: '該配置需要智能體開啟登入認證後生效',
autoAuthorization: '自動授權',
authorization: '授權',
batchDeleteUser: '是否刪除選中的 {count} 個用戶?',

View File

@ -1,8 +1,8 @@
export default {
title: '知識庫',
relatedApplications: '關聯應用',
relatedApplications: '關聯智能體',
document_count: '文檔數',
relatedApp_count: '關聯應用',
relatedApp_count: '關聯智能體',
setting: {
vectorization: '向量化',
sync: '同步',
@ -15,7 +15,7 @@ export default {
delete: {
confirmTitle: '是否刪除知識庫:',
confirmMessage1: '此知識庫關聯',
confirmMessage2: '個應用,刪除後無法恢復,請謹慎操作。',
confirmMessage2: '個智能體,刪除後無法恢復,請謹慎操作。',
resourceCountMessage: '此知識庫關聯 {count} 個資源,刪除後無法使用,請謹慎操作。',
},
knowledgeType: {
@ -36,7 +36,7 @@ export default {
knowledgeName: {
label: '知識庫名稱',
placeholder: '請輸入知識庫名稱',
requiredMessage: '請輸入應用名稱',
requiredMessage: '請輸入知識庫名稱',
},
knowledgeDescription: {
label: '知識庫描述',

View File

@ -56,15 +56,15 @@ export default {
model_type: {
label: '模型類型',
placeholder: '請選擇模型類型',
tooltip1: '大語言模型:在應用中與 AI 對話的推理模型。',
tooltip1: '大語言模型:在智能體中與 AI 對話的推理模型。',
tooltip2: '向量模型:在知識庫中對文件內容進行向量化化的模型。',
tooltip3: '語音辨識:在應用中開啟語音辨識後用於語音轉文字的模型。',
tooltip4: '語音合成:在應用中開啟語音播放後用於文字轉語音的模型。',
tooltip5: '重排模型:在高階編排應用中使用多路召回時,對候選分段進行重新排序的模型。',
tooltip6: '視覺模型:在高階編排應用中用於圖片理解的視覺模型。',
tooltip7: '圖片生成:在高階編排應用中用於圖片生成的視覺模型。',
tooltip8: '文生視頻:在高階編排應用中用於文生視頻的模型。',
tooltip9: '圖生視頻:在高階編排應用中用於圖生視頻的模型。',
tooltip3: '語音辨識:在智能體中開啟語音辨識後用於語音轉文字的模型。',
tooltip4: '語音合成:在智能體中開啟語音播放後用於文字轉語音的模型。',
tooltip5: '重排模型:在高階智能體中使用多路召回時,對候選分段進行重新排序的模型。',
tooltip6: '視覺模型:在高階智能體中用於圖片理解的視覺模型。',
tooltip7: '圖片生成:在高階智能體中用於圖片生成的視覺模型。',
tooltip8: '文生視頻:在高階智能體中用於文生視頻的模型。',
tooltip9: '圖生視頻:在高階智能體中用於圖生視頻的模型。',
requiredMessage: '模型類型不能為空',
},
base_model: {

View File

@ -37,12 +37,12 @@ export default {
},
delete: {
confirmTitle: '是否刪除工具',
confirmMessage: '刪除後,引用該工具的應用在查詢時會報錯,請謹慎操作。',
confirmMessage: '刪除後,引用該工具的智能體在查詢時會報錯,請謹慎操作。',
resourceCountMessage: '此工具關聯 {count} 個資源,刪除後無法使用,請謹慎操作。',
},
disabled: {
confirmTitle: '是否停用工具:',
confirmMessage: '停用後,引用該工具的應用在查詢時會報錯,請謹慎操作。',
confirmMessage: '停用後,引用該工具的智能體在查詢時會報錯,請謹慎操作。',
},
form: {
toolName: {

View File

@ -14,11 +14,11 @@ export default {
delete: {
confirmTitle: '是否刪除該用戶?',
confirmMessage:
'刪除該用戶後,該使用者建立的所有資源(應用、知識庫、模型)都不會被刪除,請謹慎操作。',
'刪除該用戶後,該使用者建立的所有資源(智能體、知識庫、模型)都不會被刪除,請謹慎操作。',
},
disabled: {
confirmTitle: '是否停用工具?',
confirmMessage: '停用後,引用該工具的應用在查詢時會報錯,請謹慎操作。',
confirmMessage: '停用後,引用該工具的智能體在查詢時會報錯,請謹慎操作。',
},
userForm: {
nick_name: {

View File

@ -6,7 +6,7 @@ export default {
delete: {
confirmTitle: '是否刪除工作空間:',
confirmContent: '刪除後,該空間下的成員都會被移除,請謹慎操作。',
confirmContentNotDelete: '該工作空間下存在知識庫資源、應用資源,無法刪除。',
confirmContentNotDelete: '該工作空間下存在知識庫資源、智能體資源,無法刪除。',
},
member: {
delete: {

View File

@ -32,7 +32,7 @@ export default {
onlyRight: '只允許從右邊的錨點連出',
notRecyclable: '不可循環連線',
onlyLeft: '只允許連接左邊的錨點',
applicationNodeError: '該應用不可用',
applicationNodeError: '該智能體不可用',
toolNodeError: '該函數不可用',
repeatedNodeError: '節點名稱已存在!',
cannotCopy: '不能被複製',
@ -119,13 +119,6 @@ export default {
currentTime: '當前時間',
},
baseNode: {
label: '基本信息',
appName: {
label: '應用名稱',
},
appDescription: {
label: '應用描述',
},
fileUpload: {
label: '文件上傳',
tooltip: '開啟後,問答頁面會顯示上傳文件的按鈕。',
@ -446,7 +439,7 @@ export default {
},
},
applicationNode: {
label: '應用節點',
label: '智能體節點',
},
loopNode: {
label: '循環節點',

View File

@ -20,7 +20,7 @@ const applicationRouter = {
{
path: '/application',
name: 'application-index',
meta: { title: '应用主页', activeMenu: '/application', sameRoute: 'application' },
meta: { title: '智能体主页', activeMenu: '/application', sameRoute: 'application' },
component: () => import('@/views/application/index.vue'),
hidden: true,
},

View File

@ -5,7 +5,7 @@
<div class="main-calc-height">
<el-card style="--el-card-padding: 24px">
<h4 class="title-decoration-1 mb-16">
{{ $t('views.applicationOverview.appInfo.header') }}
{{ $t('common.info') }}
</h4>
<el-card shadow="never" class="overview-card" v-loading="loading">
<div class="title flex align-center">

View File

@ -29,7 +29,7 @@
<el-col :span="10">
<div class="p-24 mb-16" style="padding-bottom: 0">
<h4 class="title-decoration-1">
{{ $t('views.applicationOverview.appInfo.header') }}
{{ $t('common.info') }}
</h4>
</div>
<div class="scrollbar-height-left">

View File

@ -12,7 +12,7 @@
<div class="flex-between mb-8">
<div class="flex">
<h4 :id="titleId" :class="titleClass" class="mr-8">
{{ $t('设置应用') }}
{{ $t('views.application.title') }}
</h4>
</div>

View File

@ -14,7 +14,7 @@
</template>
<ContentContainer>
<template #header>
<FolderBreadcrumb :folderList="folderList" @click="folderClickHandle"/>
<FolderBreadcrumb :folderList="folderList" @click="folderClickHandle" />
</template>
<template #search>
<div class="flex">
@ -25,11 +25,11 @@
style="width: 120px"
@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-option :label="$t('views.application.publishStatus')" value="publish_status"/>
<el-option :label="$t('views.application.publishStatus')" value="publish_status" />
</el-select>
<el-input
v-if="search_type === 'name'"
@ -47,7 +47,7 @@
clearable
style="width: 220px"
>
<el-option v-for="u in user_options" :key="u.id" :value="u.id" :label="u.nick_name"/>
<el-option v-for="u in user_options" :key="u.id" :value="u.id" :label="u.nick_name" />
</el-select>
<el-select
v-else-if="search_type === 'publish_status'"
@ -57,8 +57,8 @@
clearable
style="width: 220px"
>
<el-option :label="$t('common.status.published')" value="published"/>
<el-option :label="$t('common.status.unpublished')" value="unpublished"/>
<el-option :label="$t('common.status.published')" value="published" />
<el-option :label="$t('common.status.unpublished')" value="unpublished" />
</el-select>
</div>
<el-button
@ -66,14 +66,14 @@
v-if="permissionPrecise.create()"
@click="openTemplateStoreDialog()"
>
<AppIcon iconName="app-template-center" class="mr-4"/>
<AppIcon iconName="app-template-center" class="mr-4" />
{{ $t('workflow.setting.templateCenter') }}
</el-button>
<el-dropdown trigger="click" v-if="permissionPrecise.create()">
<el-button type="primary" class="ml-8">
{{ $t('common.create') }}
<el-icon class="el-icon--right">
<arrow-down/>
<arrow-down />
</el-icon>
</el-button>
<template #dropdown>
@ -88,9 +88,11 @@
/>
</el-avatar>
<div class="pre-wrap ml-8">
<div class="lighter">{{ $t('views.application.simple') }}</div>
<div class="lighter">
{{ $t('views.application.simpleAgent') }}
</div>
<el-text type="info" size="small"
>{{ $t('views.application.simplePlaceholder') }}
>{{ $t('views.application.simplePlaceholder') }}
</el-text>
</div>
</div>
@ -107,7 +109,7 @@
<div class="pre-wrap ml-8">
<div class="lighter">{{ $t('views.application.workflow') }}</div>
<el-text type="info" size="small"
>{{ $t('views.application.workflowPlaceholder') }}
>{{ $t('views.application.workflowPlaceholder') }}
</el-text>
</div>
</div>
@ -126,10 +128,10 @@
<el-dropdown-item>
<div class="flex align-center w-full">
<el-avatar shape="square" class="mt-4" :size="32" style="background: none">
<img src="@/assets/icon_import.svg" alt=""/>
<img src="@/assets/icon_import.svg" alt="" />
</el-avatar>
<div class="pre-wrap ml-8">
<div class="lighter">{{ $t('common.importCreate') }}</div>
<div class="lighter">{{ $t('views.application.importApplication') }}</div>
</div>
</div>
</el-dropdown-item>
@ -172,7 +174,7 @@
>
<template #icon>
<el-avatar shape="square" :size="32" style="background: none">
<img :src="resetUrl(item?.icon, resetUrl('./favicon.ico'))" alt=""/>
<img :src="resetUrl(item?.icon, resetUrl('./favicon.ico'))" alt="" />
</el-avatar>
</template>
<template #subTitle>
@ -184,7 +186,7 @@
</template>
<template #tag>
<el-tag v-if="isWorkFlow(item.type)" class="warning-tag">
{{ $t('views.application.workflow') }}
{{ $t('views.application.senior') }}
</el-tag>
<el-tag class="blue-tag" v-else>
{{ $t('views.application.simple') }}
@ -194,12 +196,12 @@
<template #footer>
<div v-if="item.is_publish" class="flex align-center">
<el-icon class="color-success mr-8" style="font-size: 16px">
<SuccessFilled/>
<SuccessFilled />
</el-icon>
<span class="color-secondary">
{{ $t('common.status.published') }}
</span>
<el-divider direction="vertical"/>
<el-divider direction="vertical" />
<AppIcon iconName="app-clock" class="color-secondary mr-8"></AppIcon>
<span class="color-secondary">{{ dateFormat(item.update_time) }}</span>
@ -282,13 +284,13 @@
</el-col>
</template>
</el-row>
<el-empty :description="$t('common.noData')" v-else/>
<el-empty :description="$t('common.noData')" v-else />
</InfiniteScroll>
</div>
</ContentContainer>
<CreateApplicationDialog ref="CreateApplicationDialogRef"/>
<CopyApplicationDialog ref="CopyApplicationDialogRef"/>
<CreateFolderDialog ref="CreateFolderDialogRef" @refresh="refreshFolder"/>
<CreateApplicationDialog ref="CreateApplicationDialogRef" />
<CopyApplicationDialog ref="CopyApplicationDialogRef" />
<CreateFolderDialog ref="CreateFolderDialogRef" @refresh="refreshFolder" />
<MoveToDialog
ref="MoveToDialogRef"
:source="SourceTypeEnum.APPLICATION"
@ -299,33 +301,33 @@
:type="SourceTypeEnum.APPLICATION"
ref="ResourceAuthorizationDrawerRef"
/>
<TemplateStoreDialog ref="templateStoreDialogRef" :api-type="apiType" @refresh="getList"/>
<TemplateStoreDialog ref="templateStoreDialogRef" :api-type="apiType" @refresh="getList" />
</LayoutContainer>
</template>
<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 CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
import CopyApplicationDialog from '@/views/application/component/CopyApplicationDialog.vue'
import MoveToDialog from '@/components/folder-tree/MoveToDialog.vue'
import ResourceAuthorizationDrawer from '@/components/resource-authorization-drawer/index.vue'
import ApplicationApi from '@/api/application/application'
import {MsgSuccess, MsgConfirm, MsgError} from '@/utils/message'
import { MsgSuccess, MsgConfirm, MsgError } from '@/utils/message'
import useStore from '@/stores'
import {t} from '@/locales'
import {i18n_name} from '@/utils/common'
import {useRouter, useRoute} from 'vue-router'
import {isWorkFlow} from '@/utils/application'
import {resetUrl} from '@/utils/common'
import {dateFormat} from '@/utils/time'
import {SourceTypeEnum} from '@/enums/common'
import { t } from '@/locales'
import { i18n_name } from '@/utils/common'
import { useRouter, useRoute } from 'vue-router'
import { isWorkFlow } from '@/utils/application'
import { resetUrl } from '@/utils/common'
import { dateFormat } from '@/utils/time'
import { SourceTypeEnum } from '@/enums/common'
import permissionMap from '@/permission'
import WorkspaceApi from '@/api/workspace/workspace'
import {hasPermission} from '@/utils/permission'
import {ComplexPermission} from '@/utils/permission/type'
import {EditionConst, PermissionConst, RoleConst} from '@/utils/permission/data'
import TemplateStoreDialog from "@/views/application/template-store/TemplateStoreDialog.vue";
import { hasPermission } from '@/utils/permission'
import { ComplexPermission } from '@/utils/permission/type'
import { EditionConst, PermissionConst, RoleConst } from '@/utils/permission/data'
import TemplateStoreDialog from '@/views/application/template-store/TemplateStoreDialog.vue'
const router = useRouter()
@ -336,7 +338,7 @@ const permissionPrecise = computed(() => {
return permissionMap['application'][apiType.value]
})
const {folder, application, user} = useStore()
const { folder, application, user } = useStore()
const loading = ref(false)
@ -384,7 +386,7 @@ function refreshApplicationList(row: any) {
}
const goApp = (item: any) => {
router.push({path: get_route(item)})
router.push({ path: get_route(item) })
}
const get_route = (item: any) => {
@ -516,34 +518,34 @@ function openCreateDialog(type?: string) {
}
const search_type_change = () => {
search_form.value = {name: '', create_user: ''}
search_form.value = { name: '', create_user: '' }
}
function toChat(row: any) {
const api =
row.type == 'WORK_FLOW'
? (id: string) => ApplicationApi.getApplicationDetail(id)
: (id: string) => Promise.resolve({data: row})
: (id: string) => Promise.resolve({ data: row })
api(row.id).then((ok) => {
let aips = ok.data?.work_flow?.nodes
?.filter((v: any) => v.id === 'base-node')
.map((v: any) => {
return v.properties.api_input_field_list
? v.properties.api_input_field_list.map((v: any) => {
return {
name: v.variable,
value: v.default_value,
}
})
return {
name: v.variable,
value: v.default_value,
}
})
: v.properties.input_field_list
? v.properties.input_field_list
.filter((v: any) => v.assignment_method === 'api_input')
.map((v: any) => {
return {
name: v.variable,
value: v.default_value,
}
})
.filter((v: any) => v.assignment_method === 'api_input')
.map((v: any) => {
return {
name: v.variable,
value: v.default_value,
}
})
: []
})
.reduce((x: Array<any>, y: Array<any>) => [...x, ...y])
@ -570,7 +572,7 @@ function copyApplication(row: any) {
ApplicationApi.getApplicationDetail(row.id, loading).then((res: any) => {
if (res?.data) {
CopyApplicationDialogRef.value.open(
{...res.data, model_id: res.data.model},
{ ...res.data, model_id: res.data.model },
folder.currentFolder?.id || 'default',
)
}
@ -587,17 +589,19 @@ function settingApplication(event: any, row: any) {
}).href
window.open(newUrl)
} else {
router.push({path: `/application/workspace/${row.id}/workflow`})
router.push({ path: `/application/workspace/${row.id}/workflow` })
}
} else {
router.push({path: `/application/workspace/${row.id}/${row.type}/setting`})
router.push({ path: `/application/workspace/${row.id}/${row.type}/setting` })
}
}
function deleteApplication(row: any) {
MsgConfirm(
`${t('views.application.delete.confirmTitle')}${row.name} ?`,
row.resource_count > 0 ? t('views.application.delete.resourceCountMessage', row.resource_count) : '',
row.resource_count > 0
? t('views.application.delete.resourceCountMessage', row.resource_count)
: '',
{
confirmButtonText: t('common.confirm'),
cancelButtonText: t('common.cancel'),
@ -611,8 +615,7 @@ function deleteApplication(row: any) {
MsgSuccess(t('common.deleteSuccess'))
})
})
.catch(() => {
})
.catch(() => {})
}
const exportApplication = (application: any) => {
@ -674,7 +677,6 @@ function getFolder(bool?: boolean) {
})
}
function folderClickHandle(row: any) {
if (row.id === folder.currentFolder?.id) {
return

View File

@ -79,7 +79,7 @@
>
<template #default="scope">
<el-tag class="warning-tag" v-if="isWorkFlow(scope.row.type)">
{{ $t('views.application.workflow') }}
{{ $t('views.application.senior') }}
</el-tag>
<el-tag class="blue-tag" v-else>
{{ $t('views.application.simple') }}
@ -439,7 +439,7 @@ const search_form = ref<any>({
const user_options = ref<any[]>([])
const type_options = ref<any[]>([
{
label: t('views.application.workflow'),
label: t('views.application.senior'),
value: 'WORK_FLOW',
},
{

View File

@ -1,29 +1,38 @@
<template>
<el-dialog width="600" :title="$t('views.userManage.settingRole')" v-model="dialogVisible"
:close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true">
<el-form label-position="top" ref="formRef" :rules="rules" :model="form"
require-asterisk-position="right">
<el-dialog
width="600"
:title="$t('views.userManage.settingRole')"
v-model="dialogVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
:destroy-on-close="true"
>
<el-form
label-position="top"
ref="formRef"
:rules="rules"
:model="form"
require-asterisk-position="right"
>
<el-form-item :label="$t('views.chatUser.settingMethod')">
<el-radio-group v-model="form.is_append">
<el-radio :value="true">{{ $t('views.chatUser.append') }}</el-radio>
<el-radio :value="false">{{
$t('views.applicationOverview.SettingDisplayDialog.replace')
}}
<el-radio :value="false"
>{{ $t('views.applicationOverview.SettingDisplayDialog.replace') }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<MemberFormContent
ref="memberFormContentRef"
:models="formItemModel"
v-model:form="list"
v-loading="memberFormContentLoading"
keepOneLine
:need-add-button="!user.isPE()"
:addText="$t('views.userManage.addRole')"
v-if="user.isEE() || user.isPE()"
/>
</el-form-item>
<MemberFormContent
ref="memberFormContentRef"
:models="formItemModel"
v-model:form="list"
v-loading="memberFormContentLoading"
keepOneLine
:need-add-button="!user.isPE()"
:addText="$t('views.userManage.addRole')"
v-if="user.isEE() || user.isPE()"
/>
</el-form>
<template #footer>
<span class="dialog-footer">
@ -37,52 +46,54 @@
</template>
<script setup lang="ts">
import {ref, reactive, onBeforeMount} from 'vue'
import type {FormInstance} from 'element-plus'
import {t} from '@/locales'
import { ref, reactive, onBeforeMount } from 'vue'
import type { FormInstance } from 'element-plus'
import { t } from '@/locales'
const memberFormContentLoading = ref(false)
import userManageApi from '@/api/system/user-manage'
import MemberFormContent from "@/views/system/role/component/MemberFormContent.vue";
import type {FormItemModel} from "@/api/type/role.ts";
import WorkspaceApi from "@/api/workspace/workspace.ts";
import useStore from "@/stores";
import {RoleTypeEnum} from "@/enums/system.ts";
import {loadPermissionApi} from "@/utils/dynamics-api/permission-api.ts";
import {MsgSuccess} from "@/utils/message.ts";
import MemberFormContent from '@/views/system/role/component/MemberFormContent.vue'
import type { FormItemModel } from '@/api/type/role.ts'
import WorkspaceApi from '@/api/workspace/workspace.ts'
import useStore from '@/stores'
import { RoleTypeEnum } from '@/enums/system.ts'
import { loadPermissionApi } from '@/utils/dynamics-api/permission-api.ts'
import { MsgSuccess } from '@/utils/message.ts'
const list = ref<any[]>([])
const formItemModel = ref<FormItemModel[]>([])
const {user, common} = useStore()
const { user, common } = useStore()
const workspaceFormItem = ref<FormItemModel[]>([])
const roleFormItem = ref<FormItemModel[]>([])
const emit = defineEmits<{
(e: 'refresh'): void;
}>();
(e: 'refresh'): void
}>()
const dialogVisible = ref<boolean>(false)
const defaultForm = {
role_ids: [],
is_append: true,
ids: []
ids: [],
}
const form = ref<{
ids: string[], role_ids: string[], is_append: boolean
ids: string[]
role_ids: string[]
is_append: boolean
}>({
...defaultForm,
})
function open(ids: string[]) {
form.value = {...defaultForm, ids}
list.value = [{role_id: '', workspace_ids: []}]
form.value = { ...defaultForm, ids }
list.value = [{ role_id: '', workspace_ids: [] }]
dialogVisible.value = true
}
const formRef = ref<FormInstance>();
const formRef = ref<FormInstance>()
const adminRoleList = ref<any[]>([])
const rules = reactive({
is_append: [{required: true, message: t('common.selectPlaceholder'), trigger: 'blur'}],
is_append: [{ required: true, message: t('common.selectPlaceholder'), trigger: 'blur' }],
})
const loading = ref<boolean>(false)
@ -108,7 +119,7 @@ const submit = async (formEl: FormInstance | undefined) => {
// ['None']
if (isAdminRole) {
return {...item, workspace_ids: ['None']}
return { ...item, workspace_ids: ['None'] }
}
return item
})
@ -123,7 +134,6 @@ const submit = async (formEl: FormInstance | undefined) => {
dialogVisible.value = false
})
}
}
})
}
@ -153,7 +163,6 @@ async function getRoleFormItem() {
},
]
adminRoleList.value = res.data.filter((item) => item.type === RoleTypeEnum.ADMIN)
} catch (e) {
console.error(e)
}
@ -208,8 +217,8 @@ onBeforeMount(async () => {
}
formItemModel.value = [...roleFormItem.value, ...workspaceFormItem.value]
}
list.value = [{role_id: '', workspace_ids: []}]
list.value = [{ role_id: '', workspace_ids: [] }]
})
defineExpose({open})
defineExpose({ open })
</script>

View File

@ -42,7 +42,7 @@ export const baseNode = {
text: '',
properties: {
height: 728.375,
stepName: t('workflow.nodes.baseNode.label'),
stepName: t('common.info'),
input_field_list: [],
node_data: {
name: '',
@ -64,7 +64,7 @@ export const knowledgeBaseNode = {
text: '',
properties: {
height: 728.375,
stepName: t('workflow.nodes.baseNode.label'),
stepName: t('common.info'),
input_field_list: [],
node_data: {
name: '',

View File

@ -1,5 +1,5 @@
<template>
<el-avatar shape="square avatar-orange">
<el-avatar shape="square" class="avatar-orange">
<img src="@/assets/workflow/icon_hi.svg" style="width: 75%" alt="" />
</el-avatar>
</template>

View File

@ -1,5 +1,5 @@
<template>
<el-avatar shape="square avatar-orange">
<el-avatar shape="square" class="avatar-orange">
<img src="@/assets/workflow/icon_knowledge-base.svg" style="width: 75%" alt="" />
</el-avatar>
</template>

View File

@ -1,5 +1,5 @@
<template>
<el-avatar shape="square avatar-orange">
<el-avatar shape="square" class="avatar-orange">
<img src="@/assets/workflow/icon_reply.svg" style="width: 65%" alt="" />
</el-avatar>
</template>

View File

@ -1,5 +1,5 @@
<template>
<el-avatar shape="square avatar-orange">
<el-avatar shape="square" class="avatar-orange">
<img src="@/assets/workflow/icon_speech_to_text.svg" style="width: 70%" alt="" />
</el-avatar>
</template>

View File

@ -1,5 +1,5 @@
<template>
<el-avatar shape="square avatar-orange">
<el-avatar shape="square" class="avatar-orange">
<img src="@/assets/workflow/icon_text_to_speech.svg" style="width: 70%" alt="" />
</el-avatar>
</template>

View File

@ -10,7 +10,7 @@
ref="baseNodeFormRef"
>
<el-form-item
:label="$t('workflow.nodes.baseNode.appName.label')"
:label="$t('common.name')"
prop="name"
:rules="{
message: t('views.application.form.appName.requiredMessage'),
@ -26,7 +26,7 @@
@blur="form_data.name = form_data.name?.trim()"
/>
</el-form-item>
<el-form-item :label="$t('workflow.nodes.baseNode.appDescription.label')">
<el-form-item :label="$t('common.desc')">
<el-input
v-model="form_data.desc"
:placeholder="$t('views.application.form.appDescription.placeholder')"