perf: Optimize translation files

This commit is contained in:
wangdan-fit2cloud 2025-11-26 12:37:38 +08:00
parent 85597a4568
commit 9368df5d39
108 changed files with 756 additions and 2276 deletions

View File

@ -229,7 +229,7 @@
</div>
<div class="card-never border-r-6 mt-8" v-if="data.type == WorkflowType.AiChat">
<h5 class="p-8-12">
{{ $t('views.applicationWorkflow.nodes.aiChatNode.think') }}
{{ $t('views.workflow.nodes.aiChatNode.think') }}
</h5>
<div class="p-8-12 border-t-dashed lighter pre-wrap">
{{ data.reasoning_content || '-' }}
@ -671,7 +671,7 @@
</div>
<div class="card-never border-r-6 mt-8">
<h5 class="p-8-12">
{{ $t('views.applicationWorkflow.nodes.imageGenerateNode.negative_prompt.label') }}
{{ $t('views.workflow.nodes.imageGenerateNode.negative_prompt.label') }}
</h5>
<div class="p-8-12 border-t-dashed lighter pre-wrap">
{{ data.negative_prompt || '-' }}
@ -709,7 +709,7 @@
</div>
<div class="card-never border-r-6 mt-8">
<h5 class="p-8-12">
{{ $t('views.applicationWorkflow.nodes.imageGenerateNode.negative_prompt.label') }}
{{ $t('views.workflow.nodes.imageGenerateNode.negative_prompt.label') }}
</h5>
<div class="p-8-12 border-t-dashed lighter pre-wrap">
{{ data.negative_prompt || '-' }}
@ -748,7 +748,7 @@
</div>
<div class="card-never border-r-6 mt-8">
<h5 class="p-8-12">
{{ $t('views.applicationWorkflow.nodes.imageGenerateNode.negative_prompt.label') }}
{{ $t('views.workflow.nodes.imageGenerateNode.negative_prompt.label') }}
</h5>
<div class="p-8-12 border-t-dashed lighter pre-wrap">
{{ data.negative_prompt || '-' }}
@ -756,7 +756,7 @@
</div>
<div class="card-never border-r-6 mt-8">
<h5 class="p-8-12">
{{ $t('views.applicationWorkflow.nodes.imageToVideoGenerate.first_frame.label') }}
{{ $t('views.workflow.nodes.imageToVideoGenerate.first_frame.label') }}
</h5>
<div class="p-8-12 border-t-dashed lighter pre-wrap">
<div v-if="typeof data.first_frame_url === 'string'">
@ -785,7 +785,7 @@
</div>
<div class="card-never border-r-6 mt-8">
<h5 class="p-8-12">
{{ $t('views.applicationWorkflow.nodes.imageToVideoGenerate.last_frame.label') }}
{{ $t('views.workflow.nodes.imageToVideoGenerate.last_frame.label') }}
</h5>
<div class="p-8-12 border-t-dashed lighter pre-wrap">
<div v-if="typeof data.last_frame_url === 'string'">
@ -889,7 +889,7 @@
<template v-if="data.type === WorkflowType.VariableAggregationNode">
<div class="card-never border-r-6">
<h5 class="p-8-12">
{{ $t('views.applicationWorkflow.nodes.variableAggregationNode.Strategy') }}
{{ $t('views.workflow.nodes.variableAggregationNode.Strategy') }}
</h5>
<div class="p-8-12 border-t-dashed lighter pre-wrap">
{{ data.strategy }}
@ -936,7 +936,7 @@
</div>
<div class="card-never border-r-6">
<h5 class="p-8-12">
{{ $t('views.applicationWorkflow.nodes.mcpNode.toolParam') }}
{{ $t('views.workflow.nodes.mcpNode.toolParam') }}
</h5>
<div class="p-8-12 border-t-dashed lighter">
<div v-for="(value, name) in data.tool_params" :key="name" class="mb-8">
@ -958,19 +958,19 @@
<!-- 循环 节点 -->
<div class="card-never border-r-6" v-if="data.type === WorkflowType.LoopNode">
<h5 class="p-8-12">
{{ $t('views.applicationWorkflow.nodes.loopNode.loopSetting') }}
{{ $t('views.workflow.nodes.loopNode.loopSetting') }}
</h5>
<div class="p-8-12 border-t-dashed lighter">
<div class="mb-8">
<span class="color-secondary">
{{ $t('views.applicationWorkflow.nodes.loopNode.loopType.label') }}:</span
{{ $t('views.workflow.nodes.loopNode.loopType.label') }}:</span
>
{{ data.loop_type || '-' }}
</div>
<div>
<span class="color-secondary">
{{ $t('views.applicationWorkflow.nodes.loopNode.loopArray.label') }}:</span
{{ $t('views.workflow.nodes.loopNode.loopArray.label') }}:</span
>
{{
data.loop_type === 'NUMBER'
@ -980,7 +980,7 @@
</div>
</div>
<h5 class="p-8-12">
{{ $t('views.applicationWorkflow.nodes.loopNode.loopDetail') }}
{{ $t('views.workflow.nodes.loopNode.loopDetail') }}
</h5>
<div class="p-8-12 border-t-dashed lighter">
<template v-if="data.type === WorkflowType.LoopNode">
@ -1010,14 +1010,14 @@
<div class="p-8-12 border-t-dashed lighter">
<div class="mb-8">
<span class="color-secondary">
{{ $t('views.applicationWorkflow.nodes.loopStartNode.loopItem') }}:</span
{{ $t('views.workflow.nodes.loopStartNode.loopItem') }}:</span
>
{{ data.current_item }}
</div>
<div class="mb-8">
<span class="color-secondary">
{{ $t('views.applicationWorkflow.nodes.loopStartNode.loopIndex') }}:</span
{{ $t('views.workflow.nodes.loopStartNode.loopIndex') }}:</span
>
{{ data.current_index }}
@ -1035,7 +1035,7 @@
<div class="p-8-12 border-t-dashed lighter">
<div class="mb-8">
<span class="color-secondary">
{{ $t('views.applicationWorkflow.nodes.loopContinueNode.isContinue') }}:</span
{{ $t('views.workflow.nodes.loopContinueNode.isContinue') }}:</span
>
{{ data.is_continue }}
@ -1053,7 +1053,7 @@
<div class="p-8-12 border-t-dashed lighter">
<div class="mb-8">
<span class="color-secondary">
{{ $t('views.applicationWorkflow.nodes.loopBreakNode.isBreak') }}:</span
{{ $t('views.workflow.nodes.loopBreakNode.isBreak') }}:</span
>
{{ data.is_break }}

View File

@ -13,7 +13,7 @@
<el-input
v-model="search_text"
class="mr-12 ml-12"
:placeholder="$t('views.applicationWorkflow.searchBar.placeholder')"
:placeholder="$t('common.searchBar.placeholder')"
>
<template #suffix>
<el-icon class="el-input__icon">
@ -23,7 +23,7 @@
</el-input>
</div>
<el-tab-pane :label="$t('views.applicationWorkflow.baseComponent')" name="base">
<el-tab-pane :label="$t('views.workflow.baseComponent')" name="base">
<el-scrollbar height="400">
<div v-if="filter_menu_nodes.length > 0">
<template v-for="(node, index) in filter_menu_nodes" :key="index">
@ -67,7 +67,7 @@
</template>
</div>
<div v-else class="ml-16 mt-8">
<el-text type="info">{{ $t('views.applicationWorkflow.tip.noData') }}</el-text>
<el-text type="info">{{ $t('views.workflow.tip.noData') }}</el-text>
</div>
</el-scrollbar>
</el-tab-pane>

View File

@ -13,7 +13,7 @@
<el-input
v-model="search_text"
class="mr-12 ml-12"
:placeholder="$t('views.applicationWorkflow.searchBar.placeholder')"
:placeholder="$t('common.searchBar.placeholder')"
>
<template #suffix>
<el-icon class="el-input__icon">
@ -23,7 +23,7 @@
</el-input>
</div>
<el-tab-pane :label="$t('views.applicationWorkflow.baseComponent')" name="base">
<el-tab-pane :label="$t('views.workflow.baseComponent')" name="base">
<el-scrollbar height="400">
<div v-if="filter_menu_nodes.length > 0">
<template v-for="(node, index) in filter_menu_nodes" :key="index">
@ -67,7 +67,7 @@
</template>
</div>
<div v-else class="ml-16 mt-8">
<el-text type="info">{{ $t('views.applicationWorkflow.tip.noData') }}</el-text>
<el-text type="info">{{ $t('views.workflow.tip.noData') }}</el-text>
</div>
</el-scrollbar>
</el-tab-pane>

View File

@ -37,7 +37,7 @@
ref="nodeCascaderRef"
:nodeModel="model"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="formValue.default_value"
/>
</el-form-item>
@ -78,7 +78,7 @@ const assignment_method_option_list = computed(() => {
]
if (getModel) {
option_list.push({
label: t('views.applicationWorkflow.variable.Referencing'),
label: t('views.workflow.variable.Referencing'),
value: 'ref_variables',
})
}
@ -137,7 +137,7 @@ const default_ref_variables_value_rule = {
validator: (rule: any, value: any, callback: any) => {
if (!(Array.isArray(value) && value.length > 1)) {
callback(
t('views.applicationWorkflow.variable.Referencing') + t('common.required'),
t('views.workflow.variable.Referencing') + t('common.required'),
)
}

View File

@ -47,7 +47,7 @@
ref="nodeCascaderRef"
:nodeModel="model"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="formValue.option_list"
/>
</el-form-item>
@ -150,7 +150,7 @@ const assignment_method_option_list = computed(() => {
]
if (getModel) {
option_list.push({
label: t('views.applicationWorkflow.variable.Referencing'),
label: t('views.workflow.variable.Referencing'),
value: 'ref_variables',
})
}
@ -183,7 +183,7 @@ const default_ref_variables_value_rule = {
console.log(value.length)
if (!(Array.isArray(value) && value.length > 1)) {
callback(
t('views.applicationWorkflow.variable.Referencing') + t('common.required'),
t('views.workflow.variable.Referencing') + t('common.required'),
)
}

View File

@ -47,7 +47,7 @@
ref="nodeCascaderRef"
:nodeModel="model"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="formValue.option_list"
/>
</el-form-item>
@ -159,7 +159,7 @@ const assignment_method_option_list = computed(() => {
]
if (getModel) {
option_list.push({
label: t('views.applicationWorkflow.variable.Referencing'),
label: t('views.workflow.variable.Referencing'),
value: 'ref_variables',
})
}
@ -192,7 +192,7 @@ const default_ref_variables_value_rule = {
console.log(value.length)
if (!(Array.isArray(value) && value.length > 1)) {
callback(
t('views.applicationWorkflow.variable.Referencing') + t('common.required'),
t('views.workflow.variable.Referencing') + t('common.required'),
)
}

View File

@ -47,7 +47,7 @@
ref="nodeCascaderRef"
:nodeModel="model"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="formValue.option_list"
/>
</el-form-item>
@ -150,7 +150,7 @@ const assignment_method_option_list = computed(() => {
]
if (getModel) {
option_list.push({
label: t('views.applicationWorkflow.variable.Referencing'),
label: t('views.workflow.variable.Referencing'),
value: 'ref_variables',
})
}
@ -182,7 +182,7 @@ const default_ref_variables_value_rule = {
console.log(value.length)
if (!(Array.isArray(value) && value.length > 1)) {
callback(
t('views.applicationWorkflow.variable.Referencing') + t('common.required'),
t('views.workflow.variable.Referencing') + t('common.required'),
)
}

View File

@ -47,7 +47,7 @@
ref="nodeCascaderRef"
:nodeModel="model"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="formValue.option_list"
/>
</el-form-item>
@ -150,7 +150,7 @@ const assignment_method_option_list = computed(() => {
]
if (getModel) {
option_list.push({
label: t('views.applicationWorkflow.variable.Referencing'),
label: t('views.workflow.variable.Referencing'),
value: 'ref_variables',
})
}
@ -183,7 +183,7 @@ const default_ref_variables_value_rule = {
console.log(value.length)
if (!(Array.isArray(value) && value.length > 1)) {
callback(
t('views.applicationWorkflow.variable.Referencing') + t('common.required'),
t('views.workflow.variable.Referencing') + t('common.required'),
)
}

View File

@ -46,7 +46,7 @@
ref="nodeCascaderRef"
:nodeModel="model"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="formValue.option_list"
/>
</el-form-item>
@ -149,7 +149,7 @@ const assignment_method_option_list = computed(() => {
]
if (getModel) {
option_list.push({
label: t('views.applicationWorkflow.variable.Referencing'),
label: t('views.workflow.variable.Referencing'),
value: 'ref_variables',
})
}
@ -182,7 +182,7 @@ const default_ref_variables_value_rule = {
console.log(value.length)
if (!(Array.isArray(value) && value.length > 1)) {
callback(
t('views.applicationWorkflow.variable.Referencing') + t('common.required'),
t('views.workflow.variable.Referencing') + t('common.required'),
)
}

View File

@ -6,7 +6,7 @@
<el-input
v-model="filterText"
:validate-event="false"
:placeholder="$t('dynamicsForm.searchBar.placeholder')"
:placeholder="$t('common.searchBar.placeholder')"
class="input-with-select"
style="--el-color-danger: #c0c4cc"
clearable

View File

@ -6,7 +6,7 @@
<el-input
v-model="filterText"
:validate-event="false"
:placeholder="$t('dynamicsForm.searchBar.placeholder')"
:placeholder="$t('common.searchBar.placeholder')"
class="input-with-select"
style="--el-color-danger: #c0c4cc"
clearable

View File

@ -1,7 +1,7 @@
<template>
<div class="reasoning">
<el-button text @click="showThink = !showThink" class="reasoning-button">
{{ $t('views.applicationWorkflow.nodes.aiChatNode.think') }}
{{ $t('views.workflow.nodes.aiChatNode.think') }}
<el-icon class="ml-4" :class="showThink ? 'rotate-180' : ''"><ArrowDownBold /> </el-icon>
</el-button>
<el-collapse-transition>

View File

@ -4,9 +4,6 @@ export default {
createSuccess: 'Successful',
copy: 'Copy',
copySuccess: 'Successful',
publishStatus: 'Publish Status',
published: 'Published',
unpublished: 'Unpublished',
copyError: 'Copy Failed',
save: 'Save',
saveSuccess: 'Successful',
@ -71,6 +68,8 @@ export default {
disabled: 'Disabled',
enableSuccess: 'Successful',
disableSuccess: 'Successful',
published: 'Published',
unpublished: 'Unpublished',
},
param: {
outputParam: 'Output Parameters',

View File

@ -24,9 +24,6 @@ export default {
requiredMessage: 'cannot be empty',
jsonMessage: 'Incorrect JSON format',
},
searchBar: {
placeholder: 'Please enter keywords to search',
},
paramForm: {
field: {
label: 'Parameter',

View File

@ -10,17 +10,9 @@ export default {
workflowPlaceholder:
'Suitable for advanced users to build complex logic AI assistants using low-code drag-and-drop',
appTest: 'Debug Preview',
searchBar: {
placeholder: 'Search by name',
},
status: {
published: 'Published',
unpublished: 'Unpublished',
},
operation: {
addModel: 'Add Model',
toChat: 'Chat',
publish: 'Publish',
},
delete: {
confirmTitle: 'Are you sure you want to delete this APP: ',
@ -78,8 +70,7 @@ export default {
placeholder:
'User prompt, you can reference variables in the system: {data} is the segment hit in the knowledge base; {question} is the question asked by the user',
requiredMessage: 'Please enter User prompt',
tooltip:
'The question or command that the user poses to the model',
tooltip: 'The question or command that the user poses to the model',
noReferencesTooltip:
'By adjusting the content of the prompt, you can guide the direction of the large model chat. This prompt will be fixed at the beginning of the context. Variables used: {question} is the question posed by the user.',
@ -250,4 +241,5 @@ export default {
emptyMessage2: 'No matching sections found',
},
publishTime: 'Publish Time',
publishStatus: 'Publish Status',
}

View File

@ -4,9 +4,6 @@ export default {
syncDocument: 'Sync Document',
items: 'Items',
migrateDocument: 'Migrate to',
searchBar: {
placeholder: 'Search by document name',
},
setting: {
migration: 'Move',
cancelGenerateQuestion: 'Cancel Generating Questions',

View File

@ -10,13 +10,12 @@ import workspace from './workspace'
import application from './application'
import problem from './problem'
import applicationOverview from './application-overview'
import applicationWorkflow from './application-workflow'
import workflow from './workflow'
import paragraph from './paragraph'
import chatLog from './chat-log'
import chatUser from './chat-user'
import operateLog from './operate-log'
import shared from './shared'
import knowledgeWorkflow from './knowledge-workflow'
export default {
login,
model,
@ -30,11 +29,10 @@ export default {
application,
problem,
applicationOverview,
applicationWorkflow,
workflow,
paragraph,
chatLog,
chatUser,
operateLog,
shared,
knowledgeWorkflow,
}

View File

@ -1,483 +0,0 @@
export default {
node: 'Node',
nodeName: 'Node Name',
baseComponent: 'Basic',
nodeSetting: 'Node Settings',
workflow: 'Workflow',
searchBar: {
placeholder: 'Search by name',
},
info: {
previewVersion: 'Preview Version:',
saveTime: 'Last Saved:',
},
operation: {
publish: 'Publish',
toImportDoc: 'Go to Import Documents',
},
setting: {
restoreVersion: 'Restore Previous Version"',
restoreCurrentVersion: 'Restore to This Version',
addComponent: 'Add',
releaseHistory: 'Release History',
autoSave: 'Auto Save',
latestRelease: 'Latest Release',
copyParam: 'Copy Parameters',
debug: 'Run',
exit: 'Exit',
exitSave: 'Save & Exit',
},
tip: {
noData: 'No related results found',
nameMessage: 'Name cannot be empty!',
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',
toolNodeError: 'This tool node is unavailable',
repeatedNodeError: 'A node with this name already exists',
cannotCopy: 'Cannot be copied',
copyError: 'Node already copied',
paramErrorMessage: 'Parameter already exists: ',
saveMessage: 'Current changes have not been saved. Save before exiting?',
},
delete: {
confirmTitle: 'Confirm to delete this node?',
deleteMessage: 'This node cannot be deleted',
},
control: {
zoomOut: 'Zoom Out',
zoomIn: 'Zoom In',
fitView: 'Fit to Screen',
retract: 'Collapse All',
extend: 'Expand All',
beautify: 'Auto-Arrange',
},
variable: {
global: 'Global Variable',
Referencing: 'Referenced Variable',
ReferencingRequired: 'Referenced variable is required',
ReferencingError: 'Invalid referenced variable',
NoReferencing: 'Referenced variable does not exist',
placeholder: 'Please select a variable',
inputPlaceholder: 'Please enter variable',
loop: 'Loop Variable',
},
condition: {
title: 'Execution Condition',
front: 'Precondition',
AND: 'All',
OR: 'Any',
text: 'After the connected node is executed, execute the current node',
},
validate: {
startNodeRequired: 'Start node is required',
startNodeOnly: 'Only one start node is allowed',
baseNodeRequired: 'Base information node is required',
baseNodeOnly: 'Only one base information node is allowed',
notInWorkFlowNode: 'Node not in workflow',
noNextNode: 'Next node does not exist',
nodeUnavailable: 'Node unavailable',
needConnect1: 'The branch of the node needs to be connected',
cannotEndNode: 'This node cannot be used as an end node',
loopNodeBreakNodeRequired: 'Wireless loop must have a Break node',
},
nodes: {
classify: {
aiCapability: 'AI capability',
businessLogic: 'Business logic',
other: 'Other',
dataProcessing: 'Data Processing',
},
startNode: {
label: 'Start',
question: 'User Question',
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.',
},
FileUploadSetting: {
title: 'File Upload Settings',
maxFiles: 'Maximum number of files per upload',
fileLimit: 'Maximum size per file (MB)',
fileUploadType: {
label: 'File types allowed for upload',
documentText: 'Requires "Document Content Extraction" node to parse document content',
imageText: 'Requires "Image Understanding" node to parse image content',
videoText: 'Requires "Video Understanding" node to parse video content',
audioText: 'Requires "Speech-to-Text" node to parse audio content',
},
},
},
aiChatNode: {
label: 'AI Chat',
text: 'Chat with an AI model',
answer: 'AI Content',
returnContent: {
label: 'Return Content',
tooltip: `If turned off, the content of this node will not be output to the user.
If you want the user to see the output of this node, please turn on the switch.`,
},
defaultPrompt: 'Known Information',
think: 'Thinking Process',
historyMessage: 'Historical chat records',
},
searchKnowledgeNode: {
label: 'Knowledge Retrieval',
text: 'Allows you to query text content related to user questions from the Knowledge',
paragraph_list: 'List of retrieved segments',
is_hit_handling_method_list: 'List of segments that meet direct response criteria',
result: 'Search Result',
directly_return: 'Content of segments that meet direct response criteria',
searchParam: 'Retrieval Parameters',
searchQuestion: {
label: 'Question',
placeholder: 'Please select a search question',
requiredMessage: 'Please select a search question',
},
},
searchDocumentNode: {
label: 'Document Tag Retrieval',
text: 'Search for documents that meet the conditions based on the document label within the specified search scope',
selectKnowledge: 'Search Scope',
searchSetting: 'Search Settings',
custom: 'Manual',
customTooltip: 'Manually set tag filtering conditions',
auto: 'Automatic',
autoTooltip: 'Automatically filter setting tag conditions based on the search question',
document_list: 'Document List',
knowledge_list: 'Knowledge Base List',
result: 'Search Results',
searchParam: 'Search Parameters',
select_variable: 'Select Variable',
valueMessage: `Value or {name} `,
showKnowledge: {
label: 'Results are displayed in the knowledge source',
requiredMessage: 'Please set parameters',
},
searchQuestion: {
label: 'Search Question',
placeholder: 'Please select a search question',
requiredMessage: 'Please select a search question',
},
},
questionNode: {
label: 'Question Optimization',
text: 'Optimize and improve the current question based on historical chat records to better match knowledge segments',
result: 'Optimized Question Result',
systemDefault: `#Role
You are a master of problem optimization, adept at accurately inferring user intentions based on context and optimizing the questions raised by users.
##Skills
###Skill 1: Optimizing Problems
2. Receive user input questions.
3. Carefully analyze the meaning of the problem based on the context.
4. Output optimized problems.
##Limitations:
-Only return the optimized problem without any additional explanation or clarification.
-Ensure that the optimized problem accurately reflects the original problem intent and does not alter the original intention.`,
},
conditionNode: {
label: 'Conditional Branch',
text: 'Trigger different nodes based on conditions',
branch_name: 'Branch Name',
conditions: {
label: 'Conditions',
info: 'Meets the following',
requiredMessage: 'Please select conditions',
},
valueMessage: 'Please enter a value',
addCondition: 'Add Condition',
addBranch: 'Add Branch',
},
replyNode: {
label: 'Specified Reply',
text: 'Specify reply content, referenced variables will be converted to strings for output',
replyContent: 'Reply Content',
},
rerankerNode: {
label: 'Multi-path Recall',
text: 'Use a re-ranking model to refine retrieval results from multiple knowledge sources',
result_list: 'Re-ranked Results List',
result: 'Re-ranking Result',
rerankerContent: {
label: 'Re-ranking Content',
requiredMessage: 'Please select re-ranking content',
},
higher: 'Higher',
ScoreTooltip: 'The higher the Score, the stronger the relevance.',
max_paragraph_char_number: 'Maximum Character',
reranker_model: {
label: 'Rerank',
placeholder: 'Please select a rerank',
},
},
formNode: {
label: 'Form Input',
text: 'Collect user input during Q&A and use it in subsequent processes',
form_content_format1: 'Hello, please fill out the form below:',
form_content_format2: 'Click the [Submit] button after filling it out.',
form_data: 'All Form Content',
formContent: {
label: 'Form Output Content',
requiredMessage:
'Please set the output content of this node, { form } is a placeholder for the form.',
tooltip: 'Define the output content of this node. { form } is a placeholder for the form',
},
formAllContent: 'All Form Content',
formSetting: 'Form Configuration',
},
documentExtractNode: {
label: 'Document Content Extraction',
text: 'Extract content from documents',
content: 'Document Content',
},
imageUnderstandNode: {
label: 'Image Understanding',
text: 'Analyze images to identify objects, scenes, and provide answers',
answer: 'AI Content',
model: {
label: 'Vision Model',
requiredMessage: 'Please select a vision model',
},
image: {
label: 'Select Image',
requiredMessage: 'Please select an image',
},
},
variableAssignNode: {
label: 'Variable Assign',
text: 'Update the value of the global variable',
assign: 'Set Value',
},
variableAggregationNode: {
label: 'Variable Aggregation',
text: 'Aggregate variables of each group according to the aggregation strategy',
Strategy: 'Aggregation Strategy',
placeholder: 'Return the first non-null value of each group',
placeholder1: 'Return the set of variables for each group',
group: {
noneError: 'Name cannot be empty',
dupError: 'Name cannot be duplicated',
},
addGroup: 'Add Group',
editGroup: 'Edit Group',
},
mcpNode: {
label: 'MCP Node',
text: 'Call external MCP services to process data',
getToolsSuccess: 'Tools fetched successfully',
getTool: 'Fetch Tools',
toolParam: 'Tool Parameters',
mcpServerTip: 'Please enter MCP server configuration in JSON format',
mcpToolTip: 'Please select a tool',
configLabel: 'MCP Server Config (Only SSE/Streamable HTTP calls are supported)',
reference: 'Reference MCP',
},
imageGenerateNode: {
label: 'Image Generation',
text: 'Generate images based on provided text content',
answer: 'AI Content',
model: {
label: 'Image Generation Model',
requiredMessage: 'Please select an image generation model',
},
prompt: {
label: 'Positive Prompt',
tooltip: 'Describe elements and visual features you want in the generated image',
},
negative_prompt: {
label: 'Negative Prompt',
tooltip: 'Describe elements you want to exclude from the generated image',
placeholder:
'Please describe content you do not want to generate, such as color, bloody content',
},
},
textToVideoGenerate: {
label: 'Text-to-Video',
text: 'Generate video based on provided text content',
answer: 'AI Response Content',
model: {
label: 'Text-to-Video Model',
requiredMessage: 'Please select a text-to-video model',
},
prompt: {
label: 'Prompt (Positive)',
tooltip:
'Positive prompt, used to describe elements and visual features expected in the generated video',
},
negative_prompt: {
label: 'Prompt (Negative)',
tooltip:
"Negative prompt, used to describe content you don't want to see in the video, which can restrict the video generation",
placeholder:
"Please describe video content you don't want to generate, such as: colors, bloody content",
},
},
imageToVideoGenerate: {
label: 'Image-to-Video',
text: 'Generate video based on provided images',
answer: 'AI Response Content',
model: {
label: 'Image-to-Video Model',
requiredMessage: 'Please select an image-to-video model',
},
prompt: {
label: 'Prompt (Positive)',
tooltip:
'Positive prompt, used to describe elements and visual features expected in the generated video',
},
negative_prompt: {
label: 'Prompt (Negative)',
tooltip:
"Negative prompt, used to describe content you don't want to see in the video, which can restrict the video generation",
placeholder:
"Please describe video content you don't want to generate, such as: colors, bloody content",
},
first_frame: {
label: 'First Frame Image',
requiredMessage: 'Please select the first frame image',
},
last_frame: {
label: 'Last Frame Image',
requiredMessage: 'Please select the last frame image',
},
},
speechToTextNode: {
label: 'Speech2Text',
text: 'Convert audio to text through speech recognition model',
stt_model: {
label: 'Speech Recognition Model',
},
audio: {
label: 'Select Audio File',
placeholder: 'Please select an audio file',
},
},
textToSpeechNode: {
label: 'TTS',
text: 'Convert text to audio through speech synthesis model',
tts_model: {
label: 'Speech Synthesis Model',
},
content: {
label: 'Select Text Content',
},
},
toolNode: {
label: 'Custom Tool',
text: 'Execute custom scripts to achieve data processing',
},
intentNode: {
label: 'IntentNode',
text: 'Match user questions with user-defined intent classifications',
other: 'other',
error2: 'Repeated intent',
placeholder: 'Please choose a classification option',
classify: {
label: 'Intent classify',
placeholder: 'Please input',
},
input: {
label: 'Input',
},
},
applicationNode: {
label: 'APP Node',
},
loopNode: {
label: 'Loop Node',
text: 'Repeat a series of tasks by setting the number of loops and logic',
loopType: {
label: 'Loop Type',
requiredMessage: 'Please select a loop type',
arrayLoop: 'Array Loop',
numberLoop: 'Loop for Specified Times',
infiniteLoop: 'Infinite Loop',
},
loopNumber: {
label: 'Loop Number',
requiredMessage: 'Please enter the number of loops',
},
loopArray: {
label: 'Circular Array',
requiredMessage: 'Circular Array is required',
placeholder: 'Please select a circular array',
},
loopSetting: 'Loop Settings',
loopDetail: 'Loop Details',
},
loopStartNode: {
label: 'Loop Start',
loopIndex: 'Index',
loopItem: 'Loop Element',
},
loopBodyNode: {
label: 'Loop Body',
text: 'Loop Body',
},
loopContinueNode: {
label: 'Continue',
text: 'Used to terminate the current loop and proceed to the next one.',
isContinue: 'Continue',
},
loopBreakNode: {
label: 'Break',
text: 'Terminate the current loop and exit the loop body',
isBreak: 'Break',
},
variableSplittingNode: {
label: 'Variable Splitting',
text: 'By configuring JSON Path expressions, parse and split the input JSON format variable',
result: 'Result',
splitVariables: 'Split Variables',
inputVariables: 'Input Variable',
addVariables: 'Add Variables',
editVariables: 'Edit Variables',
variableListPlaceholder: 'Please add split variables',
expression: {
label: 'Expression',
placeholder: 'Please enter expression',
tooltip: 'Please use JSON Path expressions to split variables, e.g.: $.store.book',
},
},
parameterExtractionNode: {
label: 'Parameter Extraction',
text: 'Use AI models to extract structured parameters',
extractParameters: {
label: 'Extract Parameters',
variableListPlaceholder: 'Please add extraction parameters',
parameterType: 'Parameter Type',
},
},
},
compare: {
is_null: 'Is null',
is_not_null: 'Is not null',
contain: 'Contains',
not_contain: 'Does not contain',
eq: 'Equal to',
ge: 'Greater than or equal to',
gt: 'Greater than',
le: 'Less than or equal to',
lt: 'Less than',
len_eq: 'Length equal to',
len_ge: 'Length greater than or equal to',
len_gt: 'Length greater than',
len_le: 'Length less than or equal to',
len_lt: 'Length less than',
},
SystemPromptPlaceholder: 'System Prompt, can reference variables in the system, such as',
UserPromptPlaceholder: 'User Prompt, can reference variables in the system, such as',
}

View File

@ -3,12 +3,6 @@ export default {
relatedApplications: 'Linked App',
document_count: 'docs',
relatedApp_count: 'linked apps',
searchBar: {
placeholder: 'Search by name',
},
operation: {
publish: 'Publish',
},
setting: {
vectorization: 'Vectorization',
sync: 'Sync',

View File

@ -15,9 +15,6 @@ export default {
batchDelete: 'Bulk Delete',
cancelRelated: 'Cancel Association'
},
searchBar: {
placeholder: 'Search by name'
},
table: {
paragraph_count: 'Related Segments',
updateTime: 'Update Time'

View File

@ -29,9 +29,6 @@ export default {
confirmTip: 'Are you sure to update tool: ',
updateStoreToolMessage: 'Updating tools may affect resources in use, so proceed with caution.',
},
searchBar: {
placeholder: 'Search by tool name',
},
tip: {
saveMessage: 'Unsaved changes will be lost. Are you sure you want to exit?',
},

View File

@ -4,13 +4,13 @@ export default {
baseComponent: 'Basic',
nodeSetting: 'Node Settings',
workflow: 'Workflow',
searchBar: {
placeholder: 'Search by name',
},
info: {
previewVersion: 'Preview Version:',
saveTime: 'Last Saved:',
},
operation: {
toImportDoc: 'Go to Import Documents',
},
setting: {
restoreVersion: 'Restore Previous Version"',
restoreCurrentVersion: 'Restore to This Version',

View File

@ -4,9 +4,6 @@ export default {
createSuccess: '创建成功',
copy: '复制',
copySuccess: '复制成功',
publishStatus: '发布状态',
published: '已发布',
unpublished: '未发布',
copyError: '复制失败',
save: '保存',
saveSuccess: '保存成功',
@ -51,6 +48,7 @@ export default {
classify: '分类',
reason: '理由',
removeSuccess: '移除成功',
publish: '发布',
searchBar: {
placeholder: '按名称搜索',
},
@ -72,6 +70,8 @@ export default {
disabled: '已禁用',
enableSuccess: '启用成功',
disableSuccess: '禁用成功',
published: '已发布',
unpublished: '未发布',
},
param: {
outputParam: '输出参数',

View File

@ -24,9 +24,6 @@ export default {
requiredMessage: '不能为空',
jsonMessage: 'JSON格式不正确',
},
searchBar: {
placeholder: '请输入关键字搜索',
},
paramForm: {
field: {
label: '参数',

View File

@ -11,18 +11,10 @@ export default {
simplePlaceholder: '适用于初级用户使用表单设置构建AI对话助手',
workflowPlaceholder: '适用于高级用户使用低代码拖拉拽方式构建复杂逻辑的AI对话助手',
appTest: '调试预览',
searchBar: {
placeholder: '按名称搜索',
},
status: {
published: '已发布',
unpublished: '未发布',
},
operation: {
addModel: '添加模型',
toChat: '去对话',
publish: '发布',
},
delete: {
confirmTitle: '是否删除应用:',
@ -239,4 +231,5 @@ export default {
emptyMessage2: '没有命中的分段',
},
publishTime: '发布时间',
publishStatus: '发布状态',
}

View File

@ -4,9 +4,7 @@ export default {
syncDocument: '同步文档',
items: '项',
migrateDocument: '文档迁移到',
searchBar: {
placeholder: '按 文档名称 搜索',
},
setting: {
migration: '迁移',
cancelGenerateQuestion: '取消生成问题',

View File

@ -10,13 +10,12 @@ import workspace from './workspace'
import application from './application'
import problem from './problem'
import applicationOverview from './application-overview'
import applicationWorkflow from './application-workflow'
import workflow from './workflow'
import paragraph from './paragraph'
import chatLog from './chat-log'
import chatUser from './chat-user'
import operateLog from './operate-log'
import shared from './shared'
import knowledgeWorkflow from './knowledge-workflow'
export default {
login,
model,
@ -30,11 +29,10 @@ export default {
application,
problem,
applicationOverview,
applicationWorkflow,
workflow,
paragraph,
chatLog,
chatUser,
operateLog,
shared,
knowledgeWorkflow,
}

View File

@ -1,495 +0,0 @@
export default {
node: '节点',
nodeName: '节点名称',
baseComponent: '基础组件',
nodeSetting: '节点设置',
workflow: '工作流',
searchBar: {
placeholder: '按名称搜索',
},
info: {
previewVersion: '预览版本:',
saveTime: '保存时间:',
},
operation: {
publish: '发布',
toImportDoc: '去导入文档',
},
setting: {
restoreVersion: '恢复版本',
restoreCurrentVersion: '恢复此版本',
addComponent: '添加组件',
releaseHistory: '发布历史',
autoSave: '自动保存',
latestRelease: '最近发布',
copyParam: '复制参数',
exit: '直接退出',
exitSave: '保存并退出',
},
tip: {
noData: '没有找到相关结果',
nameMessage: '名字不能为空!',
onlyRight: '只允许从右边的锚点连出',
notRecyclable: '不可循环连线',
onlyLeft: '只允许连接左边的锚点',
applicationNodeError: '该应用不可用',
toolNodeError: '该工具不可用',
repeatedNodeError: '节点名称已存在!',
cannotCopy: '不能被复制',
copyError: '已复制节点',
paramErrorMessage: '参数已存在: ',
saveMessage: '当前的更改尚未保存,是否保存后退出?',
},
delete: {
confirmTitle: '确定删除该节点?',
deleteMessage: '节点不允许删除',
},
control: {
zoomOut: '缩小',
zoomIn: '放大',
fitView: '适应',
retract: '收起全部节点',
extend: '展开全部节点',
beautify: '一键美化',
},
variable: {
global: '全局变量',
chat: '会话变量',
Referencing: '引用变量',
ReferencingRequired: '引用变量必填',
ReferencingError: '引用变量错误',
NoReferencing: '不存在的引用变量',
placeholder: '请选择变量',
inputPlaceholder: '请输入变量',
loop: '循环变量',
},
condition: {
title: '执行条件',
front: '前置',
AND: '所有',
OR: '任一',
text: '连线节点执行完,执行当前节点',
},
validate: {
startNodeRequired: '开始节点必填',
startNodeOnly: '开始节点只能有一个',
baseNodeRequired: '基本信息节点必填',
baseNodeOnly: '基本信息节点只能有一个',
notInWorkFlowNode: '未在流程中的节点',
noNextNode: '不存在的下一个节点',
nodeUnavailable: '节点不可用',
needConnect1: '节点的',
needConnect2: '分支需要连接',
cannotEndNode: '节点不能当做结束节点',
loopNodeBreakNodeRequired: '无限循环 必须存在 Break 节点',
},
nodes: {
classify: {
aiCapability: 'AI能力',
businessLogic: '业务逻辑',
other: '其他',
dataProcessing: '数据处理',
},
startNode: {
label: '开始',
question: '用户问题',
currentTime: '当前时间',
},
baseNode: {
label: '基本信息',
appName: {
label: '应用名称',
},
appDescription: {
label: '应用描述',
},
fileUpload: {
label: '文件上传',
tooltip: '开启后,问答页面会显示上传文件的按钮。',
},
FileUploadSetting: {
title: '文件上传设置',
maxFiles: '单次上传最多文件数',
fileLimit: '每个文件最大MB',
fileUploadType: {
label: '上传的文件类型',
documentText: '需要使用“文档内容提取”节点解析文档内容',
imageText: '需要使用“视觉模型”节点解析图片内容',
audioText: '需要使用“语音转文本”节点解析音频内容',
videoText: '需要使用“视频理解”节点解析视频内容',
otherText: '需要自行解析该类型文件',
},
},
},
aiChatNode: {
label: 'AI 对话',
text: '与 AI 大模型进行对话',
answer: 'AI 回答内容',
returnContent: {
label: '返回内容',
tooltip: `关闭后该节点的内容则不输出给用户。
`,
},
defaultPrompt: '已知信息',
think: '思考过程',
historyMessage: '历史聊天记录',
},
searchKnowledgeNode: {
label: '知识库检索',
text: '关联知识库,查找与问题相关的分段',
paragraph_list: '检索结果的分段列表',
is_hit_handling_method_list: '满足直接回答的分段列表',
result: '检索结果',
directly_return: '满足直接回答的分段内容',
searchParam: '检索参数',
showKnowledge: {
label: '结果显示在知识来源中',
requiredMessage: '请设置参数',
},
searchQuestion: {
label: '检索问题',
placeholder: '请选择检索问题',
requiredMessage: '请选择检索问题',
},
},
searchDocumentNode: {
label: '文档标签检索',
text: '从设定的检索范围中,根据文档标签检索出满足条件的文档',
selectKnowledge: '检索范围',
searchSetting: '检索设置',
custom: '手动',
customTooltip: '手动设置标签过滤条件',
auto: '自动',
autoTooltip: '根据检索问题自动匹配文档标签',
document_list: '文档列表',
knowledge_list: '知识库列表',
result: '检索结果',
searchParam: '检索参数',
select_variable: '选择变量',
valueMessage: `值或{name}`,
showKnowledge: {
label: '结果显示在知识来源中',
requiredMessage: '请设置参数',
},
searchQuestion: {
label: '检索问题',
placeholder: '请选择检索问题',
requiredMessage: '请选择检索问题',
},
},
questionNode: {
label: '问题优化',
text: '根据历史聊天记录优化完善当前问题,更利于匹配知识库分段',
result: '问题优化结果',
systemDefault: `# 角色
##
### 1: 优化问题
2.
3.
4.
## :
-
- `,
},
conditionNode: {
label: '判断器',
text: '根据不同条件执行不同的节点',
branch_name: '分支名称',
conditions: {
label: '条件',
info: '符合以下',
requiredMessage: '请选择条件',
},
valueMessage: '请输入值',
addCondition: '添加条件',
addBranch: '添加分支',
},
replyNode: {
label: '指定回复',
text: '指定回复内容,引用变量会转换为字符串进行输出',
replyContent: '回复内容',
},
rerankerNode: {
label: '多路召回',
text: '使用重排模型对多个知识库的检索结果进行二次召回',
result_list: '重排结果列表',
result: '重排结果',
rerankerContent: {
label: '重排内容',
requiredMessage: '请选择重排内容',
},
higher: '高于',
ScoreTooltip: 'Score越高相关性越强。',
max_paragraph_char_number: '最大引用字符数',
reranker_model: {
label: '重排模型',
placeholder: '请选择重排模型',
},
},
formNode: {
label: '表单收集',
text: '在问答过程中用于收集用户信息,可以根据收集到表单数据执行后续流程',
form_content_format1: '你好,请先填写下面表单内容:',
form_content_format2: '填写后请点击【提交】按钮进行提交。',
form_data: '表单全部内容',
formContent: {
label: '表单输出内容',
requiredMessage: '请表单输出内容',
tooltip: '设置执行该节点输出的内容,{ form } 为表单的占位符。',
},
formAllContent: '表单全部内容',
formSetting: '表单配置',
},
documentExtractNode: {
label: '文档内容提取',
text: '提取文档中的内容',
content: '文档内容',
},
imageUnderstandNode: {
label: '图片理解',
text: '识别出图片中的对象、场景等信息回答用户问题',
answer: 'AI 回答内容',
model: {
label: '视觉模型',
requiredMessage: '请选择视觉模型',
},
image: {
label: '选择图片',
requiredMessage: '请选择图片',
},
},
variableAggregationNode: {
label: '变量聚合',
text: '按聚合策略聚合每组的变量',
Strategy: '聚合策略',
placeholder: '返回每组的第一个非空值',
placeholder1: '返回每组变量的集合',
group: {
noneError: '名称不能为空',
dupError: '名称不能重复',
},
addGroup: '添加分组',
editGroup: '编辑分组',
},
variableAssignNode: {
label: '变量赋值',
text: '更新全局变量的值',
assign: '赋值',
},
mcpNode: {
label: 'MCP 调用',
text: '通过SSE/Streamable HTTP方式执行MCP服务中的工具',
getToolsSuccess: '获取工具成功',
getTool: '获取工具',
toolParam: '工具参数',
mcpServerTip: '请输入JSON格式的MCP服务器配置',
mcpToolTip: '请选择工具',
configLabel: 'MCP Server Config (仅支持SSE/Streamable HTTP调用方式)',
reference: '引用MCP',
},
imageGenerateNode: {
label: '图片生成',
text: '根据提供的文本内容生成图片',
answer: 'AI 回答内容',
model: {
label: '图片生成模型',
requiredMessage: '请选择图片生成模型',
},
prompt: {
label: '提示词(正向)',
tooltip: '正向提示词,用来描述生成图像中期望包含的元素和视觉特点',
},
negative_prompt: {
label: '提示词(负向)',
tooltip: '反向提示词,用来描述不希望在画面中看到的内容,可以对画面进行限制。',
placeholder: '请描述不想生成的图片内容,比如:颜色、血腥内容',
},
},
textToVideoGenerate: {
label: '文生视频',
text: '根据提供的文本内容生成视频',
answer: 'AI 回答内容',
model: {
label: '文生视频模型',
requiredMessage: '请选择文生视频模型',
},
prompt: {
label: '提示词(正向)',
tooltip: '正向提示词,用来描述生成视频中期望包含的元素和视觉特点',
},
negative_prompt: {
label: '提示词(负向)',
tooltip: '反向提示词,用来描述不希望在视频中看到的内容,可以对视频进行限制。',
placeholder: '请描述不想生成的视频内容,比如:颜色、血腥内容',
},
},
videoUnderstandNode: {
label: '视频理解',
text: '识别出视频中的对象、场景等信息回答用户问题',
answer: 'AI 回答内容',
model: {
label: '视觉模型',
requiredMessage: '请选择视觉模型',
},
image: {
label: '选择视频',
requiredMessage: '请选择视频',
},
},
imageToVideoGenerate: {
label: '图生视频',
text: '根据提供的图片生成视频',
answer: 'AI 回答内容',
model: {
label: '图生视频模型',
requiredMessage: '请选择图生视频模型',
},
prompt: {
label: '提示词(正向)',
tooltip: '正向提示词,用来描述生成视频中期望包含的元素和视觉特点',
},
negative_prompt: {
label: '提示词(负向)',
tooltip: '反向提示词,用来描述不希望在视频中看到的内容,可以对视频进行限制。',
placeholder: '请描述不想生成的视频内容,比如:颜色、血腥内容',
},
first_frame: {
label: '首帧图片',
requiredMessage: '请选择首帧图片',
},
last_frame: {
label: '尾帧图片',
requiredMessage: '请选择尾帧图片',
},
},
speechToTextNode: {
label: '语音转文本',
text: '将音频通过语音识别模型转换为文本',
stt_model: {
label: '语音识别模型',
},
audio: {
label: '选择语音文件',
placeholder: '请选择语音文件',
},
},
textToSpeechNode: {
label: '文本转语音',
text: '将文本通过语音合成模型转换为音频',
tts_model: {
label: '语音合成模型',
},
content: {
label: '选择文本内容',
},
},
toolNode: {
label: '自定义工具',
text: '通过执行自定义脚本,实现数据处理',
},
intentNode: {
label: '意图识别',
text: '将用户问题与用户预设的意图分类进行匹配',
other: '其他',
error2: '意图重复',
placeholder: '请选择分类项',
classify: {
label: '意图分类',
placeholder: '请输入',
},
input: {
label: '输入',
},
},
applicationNode: {
label: '应用节点',
},
loopNode: {
label: '循环节点',
text: '通过设置循环次数和逻辑,重复执行一系列任务',
loopType: {
label: '循环类型',
requiredMessage: '请选择循环类型',
arrayLoop: '数组循环',
numberLoop: '指定次数循环',
infiniteLoop: '无限循环',
},
loopNumber: {
label: '循环次数',
requiredMessage: '循环次数必填',
},
loopArray: {
label: '循环数组',
requiredMessage: '循环数组必填',
placeholder: '请选择循环数组',
},
loopSetting: '循环设置',
loopDetail: '循环详情',
},
loopStartNode: {
label: '循环开始',
loopIndex: '下标',
loopItem: '循环元素',
},
loopBodyNode: {
label: '循环体',
text: '循环体',
},
loopContinueNode: {
label: 'Continue',
text: '用于终止当前循环,执行下次循环',
isContinue: 'Continue',
},
loopBreakNode: {
label: 'Break',
text: '终止当前循环,跳出循环体',
isBreak: 'Break',
},
variableSplittingNode: {
label: '变量拆分',
text: '通过配置JSON Path 表达式,对输入的 JSON 格式变量进行解析和拆分',
splitVariables: '拆分变量',
inputVariables: '输入变量',
addVariables: '添加变量',
editVariables: '编辑变量',
variableListPlaceholder: '请添加拆分变量',
expression: {
label: '表达式',
placeholder: '请输入表达式',
tooltip: '请使用JSON Path 表达式拆分变量,例如:$.store.book',
},
},
parameterExtractionNode: {
label: '参数提取',
text: '利用 AI 模型提取结构化参数',
extractParameters: {
label: '提取参数',
variableListPlaceholder: '请添加提取参数',
parameterType: '参数类型',
},
},
},
compare: {
is_null: '为空',
is_not_null: '不为空',
contain: '包含',
not_contain: '不包含',
eq: '等于',
ge: '大于等于',
gt: '大于',
le: '小于等于',
lt: '小于',
len_eq: '长度等于',
len_ge: '长度大于等于',
len_gt: '长度大于',
len_le: '长度小于等于',
len_lt: '长度小于',
is_true: '为真',
is_not_true: '不为真',
},
SystemPromptPlaceholder: '系统提示词,可以引用系统中的变量:如',
UserPromptPlaceholder: '用户提示词,可以引用系统中的变量:如',
}

View File

@ -15,9 +15,6 @@ export default {
batchDelete: '批量删除',
cancelRelated: '取消关联'
},
searchBar: {
placeholder: '按名称搜索'
},
table: {
paragraph_count: '关联分段数',
updateTime: '更新时间'

View File

@ -4,13 +4,13 @@ export default {
baseComponent: '基础组件',
nodeSetting: '节点设置',
workflow: '工作流',
searchBar: {
placeholder: '按名称搜索',
},
info: {
previewVersion: '预览版本:',
saveTime: '保存时间:',
},
operation: {
toImportDoc: '去导入文档',
},
setting: {
restoreVersion: '恢复版本',
restoreCurrentVersion: '恢复此版本',

View File

@ -4,9 +4,6 @@ export default {
createSuccess: '創建成功',
copy: '複製',
copySuccess: '複製成功',
publishStatus: '發佈狀態',
published: '已發佈',
unpublished: '未發佈',
copyError: '複製失敗',
save: '儲存',
saveSuccess: '儲存成功',
@ -71,6 +68,8 @@ export default {
disabled: '已停用',
enableSuccess: '啟用成功',
disableSuccess: '停用成功',
published: '已發佈',
unpublished: '未發佈',
},
param: {
outputParam: '輸出參數',

View File

@ -24,9 +24,6 @@ export default {
requiredMessage: '不能為空',
jsonMessage: 'JSON格式不正確',
},
searchBar: {
placeholder: '請輸入關鍵字搜索',
},
paramForm: {
field: {
label: '參數',

View File

@ -9,16 +9,8 @@ export default {
simplePlaceholder: '適用於初級用戶使用表單設定構建AI對話助手',
workflowPlaceholder: '適用於高階用戶使用低代碼拖拉拽方式構建複雜邏輯的AI對話助手',
appTest: '調試預覽',
searchBar: {
placeholder: '按名稱搜尋',
},
status: {
published: '已發布',
unpublished: '未發布',
},
operation: {
toChat: '去對話',
publish: '發布',
addModel: '新增模型',
},
delete: {
@ -236,4 +228,5 @@ export default {
emptyMessage2: '沒有命中的分段',
},
publishTime: '發佈時間',
publishStatus: '發佈狀態',
}

View File

@ -4,9 +4,6 @@ export default {
syncDocument: '同步文檔',
items: '項',
migrateDocument: '文檔遷移到',
searchBar: {
placeholder: '按 文檔名稱 搜索',
},
setting: {
migration: '遷移',
cancelGenerateQuestion: '取消生成問題',

View File

@ -12,11 +12,10 @@ import paragraph from './paragraph'
import problem from './problem'
import chatLog from './chat-log'
import chatUser from './chat-user'
import applicationWorkflow from './application-workflow'
import workflow from './workflow'
import login from './login'
import operateLog from './operate-log'
import shared from './shared'
import knowledgeWorkflow from './knowledge-workflow'
export default {
application,
applicationOverview,
@ -25,7 +24,7 @@ export default {
userManage,
model,
knowledge,
applicationWorkflow,
workflow,
document,
paragraph,
problem,
@ -36,5 +35,4 @@ export default {
workspace,
chatUser,
shared,
knowledgeWorkflow,
}

View File

@ -1,468 +0,0 @@
export default {
node: '節點',
nodeName: '節點名稱',
baseComponent: '基礎組件',
nodeSetting: '節點設置',
workflow: '工作流',
searchBar: {
placeholder: '按名稱搜索',
},
info: {
previewVersion: '預覽版本:',
saveTime: '保存時間:',
},
operation: {
publish: '發布',
toImportDoc: '去導入文檔',
},
setting: {
restoreVersion: '恢復版本',
restoreCurrentVersion: '恢復此版本',
addComponent: '添加組件',
releaseHistory: '發布歷史',
autoSave: '自動保存',
latestRelease: '最近發布',
copyParam: '複製參數',
exit: '直接退出',
exitSave: '保存並退出',
},
tip: {
noData: '沒有找到相關結果',
nameMessage: '名字不能為空!',
onlyRight: '只允許從右邊的錨點連出',
notRecyclable: '不可循環連線',
onlyLeft: '只允許連接左邊的錨點',
applicationNodeError: '該應用不可用',
toolNodeError: '該函數不可用',
repeatedNodeError: '節點名稱已存在!',
cannotCopy: '不能被複製',
copyError: '已複製節點',
paramErrorMessage: '參數已存在: ',
saveMessage: '當前修改未保存,是否保存後退出?',
},
delete: {
confirmTitle: '確定刪除該節點?',
deleteMessage: '節點不允許刪除',
},
control: {
zoomOut: '縮小',
zoomIn: '放大',
fitView: '適應',
retract: '收起全部節點',
extend: '展開全部節點',
beautify: '一鍵美化',
},
variable: {
global: '全局變量',
Referencing: '引用變量',
ReferencingRequired: '引用變量必填',
ReferencingError: '引用變量錯誤',
NoReferencing: '不存在的引用變量',
placeholder: '請選擇變量',
inputPlaceholder: '請輸入變量',
loop: '循環變量',
},
condition: {
title: '執行條件',
front: '前置',
AND: '所有',
OR: '任一',
text: '連線節點執行完,執行當前節點',
},
validate: {
startNodeRequired: '開始節點必填',
startNodeOnly: '開始節點只能有一個',
baseNodeRequired: '基本信息節點必填',
baseNodeOnly: '基本信息節點只能有一個',
notInWorkFlowNode: '未在流程中的節點',
noNextNode: '不存在的下一個節點',
nodeUnavailable: '節點不可用',
needConnect1: '節點的',
needConnect2: '分支需要連接',
cannotEndNode: '節點不能當做結束節點',
loopNodeBreakNodeRequired: '無限循環必須存在Break節點',
},
nodes: {
classify: {
aiCapability: 'AI能力',
businessLogic: '業務邏輯',
other: '其他',
dataProcessing: '數據處理',
},
startNode: {
label: '開始',
question: '用戶問題',
currentTime: '當前時間',
},
baseNode: {
label: '基本信息',
appName: {
label: '應用名稱',
},
appDescription: {
label: '應用描述',
},
fileUpload: {
label: '文件上傳',
tooltip: '開啟後,問答頁面會顯示上傳文件的按鈕。',
},
FileUploadSetting: {
title: '文件上傳設置',
maxFiles: '單次上傳最多文件數',
fileLimit: '每個文件最大MB',
fileUploadType: {
label: '上傳的文件類型',
documentText: '需要使用「文檔內容提取」節點解析文檔內容',
imageText: '需要使用「圖片理解」節點解析圖片內容',
videoText: '需要使用「視頻理解」節點解析視頻內容',
audioText: '需要使用「語音轉文本」節點解析音頻內容',
},
},
},
aiChatNode: {
label: 'AI 對話',
text: '與 AI 大模型進行對話',
answer: 'AI 回答內容',
returnContent: {
label: '返回內容',
tooltip: `關閉後該節點的內容則不輸出給用戶。
`,
},
defaultPrompt: '已知信息',
think: '思考過程',
historyMessage: '歷史聊天記錄',
},
searchKnowledgeNode: {
label: '知識庫檢索',
text: '關聯知識庫,查找與問題相關的分段',
paragraph_list: '檢索結果的分段列表',
is_hit_handling_method_list: '滿足直接回答的分段列表',
result: '檢索結果',
directly_return: '滿足直接回答的分段內容',
searchParam: '檢索參數',
searchQuestion: {
label: '檢索問題',
placeholder: '請選擇檢索問題',
requiredMessage: '請選擇檢索問題',
},
},
searchDocumentNode: {
label: '文檔標籤檢索',
text: '從設定的檢索範圍中,根據文檔標籤檢索出符合條件的文檔',
selectKnowledge: '檢索範圍',
searchSetting: '檢索設定',
custom: '手動',
customTooltip: '手動設置標籤過濾條件',
auto: '自動',
autoTooltip: '根據檢索問題自動匹配文檔標簽',
document_list: '文件清單',
knowledge_list: '知識庫列表',
result: '檢索結果',
searchParam: '檢索參數',
select_variable: '選擇變數',
valueMessage: `值或{name}`,
showKnowledge: {
label: '結果顯示在知識來源',
requiredMessage: '請設定參數',
},
searchQuestion: {
label: '檢索問題',
placeholder: '請選擇檢索問題',
requiredMessage: '請選擇檢索問題',
},
},
questionNode: {
label: '問題優化',
text: '根據歷史聊天記錄優化完善當前問題,更利於匹配知識庫分段',
result: '問題優化結果',
systemDefault: `# 角色
##
### 1: 優化問題
2.
3.
4.
## :
-
- `,
},
conditionNode: {
label: '判斷器',
text: '根據不同條件執行不同的節點',
branch_name: '分支名稱',
conditions: {
label: '條件',
info: '符合以下',
requiredMessage: '請選擇條件',
},
valueMessage: '請輸入值',
addCondition: '添加條件',
addBranch: '添加分支',
},
replyNode: {
label: '指定回覆',
text: '指定回覆內容,引用變量會轉換為字符串進行輸出',
replyContent: '回覆內容',
},
rerankerNode: {
label: '多路召回',
text: '使用重排模型對多個知識庫的檢索結果進行二次召回',
result_list: '重排結果列表',
result: '重排結果',
rerankerContent: {
label: '重排內容',
requiredMessage: '請選擇重排內容',
},
higher: '高於',
ScoreTooltip: 'Score越高相關性越強。',
max_paragraph_char_number: '最大引用字符數',
reranker_model: {
label: '重排模型',
placeholder: '請選擇重排模型',
},
},
formNode: {
label: '表單收集',
text: '在問答過程中用於收集用戶信息,可以根據收集到表單數據執行後續流程',
form_content_format1: '你好,請先填寫下面表單內容:',
form_content_format2: '填寫後請點擊【提交】按鈕進行提交。',
form_data: '表單全部內容',
formContent: {
label: '表單輸出內容',
requiredMessage: '請表單輸出內容',
tooltip: '設置執行該節點輸出的內容,{ form } 為表單的佔位符。',
},
formAllContent: '表單全部內容',
formSetting: '表單配置',
},
documentExtractNode: {
label: '文檔內容提取',
text: '提取文檔中的內容',
content: '文檔內容',
},
imageUnderstandNode: {
label: '圖片理解',
text: '識別出圖片中的物件、場景等信息回答用戶問題',
answer: 'AI 回答內容',
model: {
label: '視覺模型',
requiredMessage: '請選擇視覺模型',
},
image: {
label: '選擇圖片',
requiredMessage: '請選擇圖片',
},
},
variableAssignNode: {
label: '變數賦值',
text: '更新全域變數的值',
assign: '賦值',
},
variableAggregationNode: {
label: '變量聚合',
text: '按聚合策略聚合每組的變量',
Strategy: '聚合策略',
placeholder: '返回每組的第一個非空值',
placeholder1: '返回每組變量的集合',
group: {
noneError: '名稱不能為空',
dupError: '名稱不能重複',
},
addGroup: '添加分組',
editGroup: '編輯分組',
},
mcpNode: {
label: 'MCP 調用',
text: '通過SSE/Streamable HTTP方式執行MCP服務中的工具',
getToolsSuccess: '獲取工具成功',
getTool: '獲取工具',
toolParam: '工具參數',
mcpServerTip: '請輸入JSON格式的MCP服務器配置',
mcpToolTip: '請選擇工具',
configLabel: 'MCP Server Config (僅支持SSE/Streamable HTTP調用方式)',
reference: '引用MCP',
},
imageGenerateNode: {
label: '圖片生成',
text: '根據提供的文本內容生成圖片',
answer: 'AI 回答內容',
model: {
label: '圖片生成模型',
requiredMessage: '請選擇圖片生成模型',
},
prompt: {
label: '提示詞(正向)',
tooltip: '正向提示詞,用來描述生成圖像中期望包含的元素和視覺特點',
},
negative_prompt: {
label: '提示詞(負向)',
tooltip: '反向提示詞,用來描述不希望在畫面中看到的內容,可以對畫面進行限制。',
placeholder: '請描述不想生成的圖片內容,比如:顏色、血腥內容',
},
},
textToVideoGenerate: {
label: '文生影片',
text: '根據提供的文字內容生成影片',
answer: 'AI 回答內容',
model: {
label: '文生影片模型',
requiredMessage: '請選擇文生影片模型',
},
prompt: {
label: '提示詞(正向)',
tooltip: '正向提示詞,用來描述生成影片中期望包含的元素和視覺特點',
},
negative_prompt: {
label: '提示詞(負向)',
tooltip: '反向提示詞,用來描述不希望在影片中看到的內容,可以對影片進行限制。',
placeholder: '請描述不想生成的影片內容,例如:顏色、血腥內容',
},
},
imageToVideoGenerate: {
label: '圖生影片',
text: '根據提供的圖片生成影片',
answer: 'AI 回答內容',
model: {
label: '圖生影片模型',
requiredMessage: '請選擇圖生影片模型',
},
prompt: {
label: '提示詞(正向)',
tooltip: '正向提示詞,用來描述生成影片中期望包含的元素和視覺特點',
},
negative_prompt: {
label: '提示詞(負向)',
tooltip: '反向提示詞,用來描述不希望在影片中看到的內容,可以對影片進行限制。',
placeholder: '請描述不想生成的影片內容,例如:顏色、血腥內容',
},
first_frame: {
label: '首幀圖片',
requiredMessage: '請選擇首幀圖片',
},
last_frame: {
label: '尾幀圖片',
requiredMessage: '請選擇尾幀圖片',
},
},
speechToTextNode: {
label: '語音轉文本',
text: '將音頻通過語音識別模型轉換為文本',
stt_model: {
label: '語音識別模型',
},
audio: {
label: '選擇語音文件',
placeholder: '請選擇語音文件',
},
},
textToSpeechNode: {
label: '文本轉語音',
text: '將文本通過語音合成模型轉換為音頻',
tts_model: {
label: '語音合成模型',
},
content: {
label: '選擇文本內容',
},
},
toolNode: {
label: '自定義工具',
text: '通過執行自定義腳本,實現數據處理',
},
intentNode: {
label: '意圖識別',
text: '將用戶問題與用戶預設的意圖分類進行匹配',
other: '其他',
error2: '意圖重複',
placeholder: '請選擇分類項',
classify: {
label: '意圖分類',
placeholder: '請輸入',
},
input: {
label: '輸入',
},
},
applicationNode: {
label: '應用節點',
},
loopNode: {
label: '循環節點',
text: '通過設置循環次數和邏輯,重複執行一系列任務',
loopType: {
label: '循環類型',
requiredMessage: '請選擇循環類型',
arrayLoop: '數組循環',
numberLoop: '指定次數循環',
infiniteLoop: '無限循環',
},
loopNumber: {
label: '循環次數',
requiredMessage: '請填寫循環次數',
},
loopArray: {
label: '循環數組',
requiredMessage: '循環數組必填',
placeholder: '請選擇循環數組',
},
loopSetting: '循環設置',
loopDetail: '循環詳情',
},
loopStartNode: {
label: '循環開始',
loopIndex: '下標',
loopItem: '循環元素',
},
loopBodyNode: { label: '循環體', text: '循環體' },
loopContinueNode: {
label: 'Continue',
text: '用於終止當前循環,執行下次循環',
isContinue: 'Continue',
},
loopBreakNode: { label: 'Break', text: '終止當前循環,跳出循環體', isBreak: 'Break' },
variableSplittingNode: {
label: '變量拆分',
text: '通過配置 JSON Path 表達式,對輸入的 JSON 格式變量進行解析和拆分',
result: '結果',
splitVariables: '拆分變量',
inputVariables: '輸入變量',
addVariables: '添加變量',
editVariables: '編輯變量',
variableListPlaceholder: '請添加折開變數',
expression: {
label: '表達式',
placeholder: '請輸入表達式',
tooltip: '請使用JSON Path 表達式拆分變量,例如:$.store.book',
},
},
parameterExtractionNode: {
label: '參數提取',
text: '利用 AI 模型提取結構化參數',
extractParameters: {
label: '提取參數',
variableListPlaceholder: '請添加選取參數',
parameterType: '參數類型',
},
},
},
compare: {
is_null: '為空',
is_not_null: '不為空',
contain: '包含',
not_contain: '不包含',
eq: '等於',
ge: '大於等於',
gt: '大於',
le: '小於等於',
lt: '小於',
len_eq: '長度等於',
len_ge: '長度大於等於',
len_gt: '長度大於',
len_le: '長度小於等於',
len_lt: '長度小於',
},
SystemPromptPlaceholder: '系統提示詞,可以引用系統中的變量:如',
UserPromptPlaceholder: '用戶提示詞,可以引用系統中的變量:如',
}

View File

@ -3,12 +3,6 @@ export default {
relatedApplications: '關聯應用',
document_count: '文檔數',
relatedApp_count: '關聯應用',
searchBar: {
placeholder: '按名稱搜尋',
},
operation: {
publish: '發佈',
},
setting: {
vectorization: '向量化',
sync: '同步',

View File

@ -15,9 +15,6 @@ export default {
batchDelete: '批量刪除',
cancelRelated: '取消關聯'
},
searchBar: {
placeholder: '按名稱搜尋'
},
table: {
paragraph_count: '關聯分段數',
updateTime: '更新時間'

View File

@ -29,9 +29,6 @@ export default {
confirmTip: '是否更新工具:',
updateStoreToolMessage: '更新工具可能會影響正在使用的資源,請謹慎操作。',
},
searchBar: {
placeholder: '按工具名稱搜尋',
},
tip: {
saveMessage: '當前的更改尚未保存,確認退出嗎?',
},

View File

@ -4,13 +4,13 @@ export default {
baseComponent: '基礎組件',
nodeSetting: '節點設置',
workflow: '工作流',
searchBar: {
placeholder: '按名稱搜索',
},
info: {
previewVersion: '預覽版本:',
saveTime: '保存時間:',
},
operation: {
toImportDoc: '去導入文檔',
},
setting: {
restoreVersion: '恢復版本',
restoreCurrentVersion: '恢復此版本',

View File

@ -1,6 +1,6 @@
<template>
<div class="workflow-publish-history border-l white-bg">
<h4 class="border-b p-16-24">{{ $t('views.applicationWorkflow.setting.releaseHistory') }}</h4>
<h4 class="border-b p-16-24">{{ $t('views.workflow.setting.releaseHistory') }}</h4>
<div class="list-height pt-0">
<el-scrollbar>
<div class="p-8 pt-0">
@ -24,7 +24,7 @@
@close="closeWrite(row)"
/>
<el-tag v-if="index === 0" class="default-tag ml-4">{{
$t('views.applicationWorkflow.setting.latestRelease')
$t('views.workflow.setting.latestRelease')
}}</el-tag>
</h5>
<el-text type="info" class="color-secondary flex align-center mt-8">
@ -48,7 +48,7 @@
</el-dropdown-item>
<el-dropdown-item @click="refreshVersion(row)">
<el-icon class="color-secondary"><RefreshLeft /></el-icon>
{{ $t('views.applicationWorkflow.setting.restoreCurrentVersion') }}
{{ $t('views.workflow.setting.restoreCurrentVersion') }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
@ -126,7 +126,7 @@ function editName(val: string, item: any) {
getList()
})
} else {
MsgError(t('views.applicationWorkflow.tip.nameMessage'))
MsgError(t('views.workflow.tip.nameMessage'))
}
}

View File

@ -6,18 +6,18 @@
<h4 class="ellipsis" style="max-width: 300px" :title="detail?.name">{{ detail?.name }}</h4>
<div v-if="showHistory && disablePublic">
<el-text type="info" class="ml-16 color-secondary"
>{{ $t('views.applicationWorkflow.info.previewVersion') }}
>{{ $t('views.workflow.info.previewVersion') }}
{{ currentVersion.name || datetimeFormat(currentVersion.update_time) }}</el-text
>
</div>
<el-text type="info" class="ml-16 color-secondary" v-else-if="saveTime"
>{{ $t('views.applicationWorkflow.info.saveTime')
>{{ $t('views.workflow.info.saveTime')
}}{{ datetimeFormat(saveTime) }}</el-text
>
</div>
<div v-if="showHistory && disablePublic">
<el-button type="primary" class="mr-8" @click="refreshVersion()">
{{ $t('views.applicationWorkflow.setting.restoreVersion') }}
{{ $t('views.workflow.setting.restoreVersion') }}
</el-button>
<el-divider direction="vertical" />
<el-button text @click="closeHistory">
@ -29,7 +29,7 @@
<div v-else>
<el-button @click="showPopover = !showPopover">
<AppIcon iconName="app-add-outlined" class="mr-4" />
{{ $t('views.applicationWorkflow.setting.addComponent') }}
{{ $t('views.workflow.setting.addComponent') }}
</el-button>
<el-button @click="clickShowDebug" :disabled="showDebug" v-if="permissionPrecise.debug(id)">
<AppIcon iconName="app-debug-outlined" class="mr-4"></AppIcon>
@ -40,7 +40,7 @@
{{ $t('common.save') }}
</el-button>
<el-button type="primary" @click="publish" v-if="permissionPrecise.edit(id)">
{{ $t('views.application.operation.publish') }}
{{ $t('common.publish') }}
</el-button>
<el-dropdown trigger="click">
@ -58,11 +58,11 @@
<el-dropdown-item @click="openHistory">
<AppIcon iconName="app-history-outlined" class="color-secondary"></AppIcon>
{{ $t('views.applicationWorkflow.setting.releaseHistory') }}
{{ $t('views.workflow.setting.releaseHistory') }}
</el-dropdown-item>
<el-dropdown-item>
<AppIcon iconName="app-save-outlined" class="color-secondary"></AppIcon>
{{ $t('views.applicationWorkflow.setting.autoSave') }}
{{ $t('views.workflow.setting.autoSave') }}
<div class="ml-4">
<el-switch size="small" v-model="isSave" @change="changeSave" />
</div>
@ -212,9 +212,9 @@ const shareUrl = computed(
function back() {
if (JSON.stringify(cloneWorkFlow.value) !== JSON.stringify(getGraphData())) {
MsgConfirm(t('common.tip'), t('views.applicationWorkflow.tip.saveMessage'), {
confirmButtonText: t('views.applicationWorkflow.setting.exitSave'),
cancelButtonText: t('views.applicationWorkflow.setting.exit'),
MsgConfirm(t('common.tip'), t('views.workflow.tip.saveMessage'), {
confirmButtonText: t('views.workflow.setting.exitSave'),
cancelButtonText: t('views.workflow.setting.exit'),
distinguishCancelAndClose: true,
})
.then(() => {
@ -351,14 +351,14 @@ const publish = () => {
if (typeof err_message == 'string') {
MsgError(
res.node.properties?.stepName +
` ${t('views.applicationWorkflow.node').toLowerCase()} ` +
` ${t('views.workflow.node').toLowerCase()} ` +
err_message.toLowerCase(),
)
} else {
const keys = Object.keys(err_message)
MsgError(
node.properties?.stepName +
` ${t('views.applicationWorkflow.node').toLowerCase()} ` +
` ${t('views.workflow.node').toLowerCase()} ` +
err_message[keys[0]]?.[0]?.message.toLowerCase(),
)
}
@ -369,13 +369,13 @@ const publish = () => {
const err_message = res.errMessage
if (typeof err_message == 'string') {
MsgError(
res.node.properties?.stepName + ` ${t('views.applicationWorkflow.node')}` + err_message,
res.node.properties?.stepName + ` ${t('views.workflow.node')}` + err_message,
)
} else {
const keys = Object.keys(err_message)
MsgError(
node.properties?.stepName +
` ${t('views.applicationWorkflow.node')}` +
` ${t('views.workflow.node')}` +
err_message[keys[0]]?.[0]?.message,
)
}
@ -407,13 +407,13 @@ const clickShowDebug = () => {
const err_message = res.errMessage
if (typeof err_message == 'string') {
MsgError(
res.node.properties?.stepName + ` ${t('views.applicationWorkflow.node')}` + err_message,
res.node.properties?.stepName + ` ${t('views.workflow.node')}` + err_message,
)
} else {
const keys = Object.keys(err_message)
MsgError(
node.properties?.stepName +
` ${t('views.applicationWorkflow.node')}` +
` ${t('views.workflow.node')}` +
err_message[keys[0]]?.[0]?.message,
)
}

View File

@ -19,7 +19,7 @@
:disabled="loading"
v-if="permissionPrecise.edit(id)"
>
{{ $t('views.application.operation.publish') }}
{{ $t('common.publish') }}
</el-button>
</div>
</div>

View File

@ -19,7 +19,7 @@
<el-form-item>
<el-radio-group v-model="form.mcp_source" @change="mcpSourceChange">
<el-radio value="referencing">
{{ $t('views.applicationWorkflow.nodes.mcpNode.reference') }}
{{ $t('views.workflow.nodes.mcpNode.reference') }}
</el-radio>
<el-radio value="custom">{{ $t('common.custom') }}</el-radio>
</el-radio-group>
@ -171,7 +171,7 @@ const submit = () => {
try {
JSON.parse(form.value.mcp_servers || '{}')
} catch (e) {
MsgError(t('views.applicationWorkflow.nodes.mcpNode.mcpServerTip'))
MsgError(t('views.workflow.nodes.mcpNode.mcpServerTip'))
return
}
emit('refresh', form.value)

View File

@ -29,7 +29,7 @@
<el-option :label="$t('common.name')" value="name" />
<el-option :label="$t('common.publishStatus')" value="publish_status" />
<el-option :label="$t('views.application.publishStatus')" value="publish_status" />
</el-select>
<el-input
v-if="search_type === 'name'"
@ -57,8 +57,8 @@
clearable
style="width: 220px"
>
<el-option :label="$t('common.published')" value="published" />
<el-option :label="$t('common.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-dropdown trigger="click" v-if="permissionPrecise.create()">
@ -216,7 +216,7 @@
<SuccessFilled />
</el-icon>
<span class="color-secondary">
{{ $t('views.application.status.published') }}
{{ $t('common.status.published') }}
</span>
<el-divider direction="vertical" />
<AppIcon iconName="app-clock" class="color-secondary mr-8"></AppIcon>
@ -226,7 +226,7 @@
<div v-else class="flex align-center">
<AppIcon iconName="app-disabled" class="color-secondary mr-8"></AppIcon>
<span class="color-secondary">
{{ $t('views.application.status.unpublished') }}
{{ $t('common.status.unpublished') }}
</span>
</div>
</template>

View File

@ -1,6 +1,6 @@
<template>
<div class="workflow-publish-history border-l white-bg">
<h4 class="border-b p-16-24">{{ $t('views.applicationWorkflow.setting.releaseHistory') }}</h4>
<h4 class="border-b p-16-24">{{ $t('views.workflow.setting.releaseHistory') }}</h4>
<div class="list-height pt-0">
<el-scrollbar>
<div class="p-8 pt-0">
@ -24,7 +24,7 @@
@close="closeWrite(row)"
/>
<el-tag v-if="index === 0" class="default-tag ml-4">{{
$t('views.applicationWorkflow.setting.latestRelease')
$t('views.workflow.setting.latestRelease')
}}</el-tag>
</h5>
<el-text type="info" class="color-secondary flex align-center mt-8">
@ -48,7 +48,7 @@
</el-dropdown-item>
<el-dropdown-item @click="refreshVersion(row)">
<el-icon class="color-secondary"><RefreshLeft /></el-icon>
{{ $t('views.applicationWorkflow.setting.restoreCurrentVersion') }}
{{ $t('views.workflow.setting.restoreCurrentVersion') }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
@ -126,7 +126,7 @@ function editName(val: string, item: any) {
getList()
})
} else {
MsgError(t('views.applicationWorkflow.tip.nameMessage'))
MsgError(t('views.workflow.tip.nameMessage'))
}
}

View File

@ -6,17 +6,17 @@
<h4 class="ellipsis" style="max-width: 300px" :title="detail?.name">{{ detail?.name }}</h4>
<div v-if="showHistory && disablePublic">
<el-text type="info" class="ml-16 color-secondary"
>{{ $t('views.knowledgeWorkflow.info.previewVersion') }}
>{{ $t('views.workflow.info.previewVersion') }}
{{ currentVersion.name || datetimeFormat(currentVersion.update_time) }}</el-text
>
</div>
<el-text type="info" class="ml-16 color-secondary" v-else-if="saveTime"
>{{ $t('views.knowledgeWorkflow.info.saveTime') }}{{ datetimeFormat(saveTime) }}</el-text
>{{ $t('views.workflow.info.saveTime') }}{{ datetimeFormat(saveTime) }}</el-text
>
</div>
<div v-if="showHistory && disablePublic">
<el-button type="primary" class="mr-8" @click="refreshVersion()">
{{ $t('views.knowledgeWorkflow.setting.restoreVersion') }}
{{ $t('views.workflow.setting.restoreVersion') }}
</el-button>
<el-divider direction="vertical" />
<el-button text @click="closeHistory">
@ -28,7 +28,7 @@
<div v-else>
<el-button @click="showPopover = !showPopover">
<AppIcon iconName="app-add-outlined" class="mr-4" />
{{ $t('views.knowledgeWorkflow.setting.addComponent') }}
{{ $t('views.workflow.setting.addComponent') }}
</el-button>
<el-button @click="clickShowDebug" :disabled="showDebug" v-if="permissionPrecise.debug(id)">
<AppIcon iconName="app-debug-outlined" class="mr-4"></AppIcon>
@ -39,7 +39,7 @@
{{ $t('common.save') }}
</el-button>
<el-button type="primary" @click="publish">
{{ $t('views.knowledgeWorkflow.operation.publish') }}
{{ $t('common.publish') }}
</el-button>
<el-dropdown trigger="click">
@ -51,17 +51,17 @@
<a :href="shareUrl" target="_blank">
<el-dropdown-item>
<AppIcon iconName="app-create-chat" class="color-secondary"></AppIcon>
{{ $t('views.knowledgeWorkflow.operation.toImportDoc') }}
{{ $t('views.workflow.operation.toImportDoc') }}
</el-dropdown-item>
</a>
<el-dropdown-item @click="openHistory">
<AppIcon iconName="app-history-outlined" class="color-secondary"></AppIcon>
{{ $t('views.knowledgeWorkflow.setting.releaseHistory') }}
{{ $t('views.workflow.setting.releaseHistory') }}
</el-dropdown-item>
<el-dropdown-item>
<AppIcon iconName="app-save-outlined" class="color-secondary"></AppIcon>
{{ $t('views.knowledgeWorkflow.setting.autoSave') }}
{{ $t('views.workflow.setting.autoSave') }}
<div class="ml-4">
<el-switch size="small" v-model="isSave" @change="changeSave" />
</div>
@ -212,9 +212,9 @@ const shareUrl = computed(
function back() {
if (JSON.stringify(cloneWorkFlow.value) !== JSON.stringify(getGraphData())) {
MsgConfirm(t('common.tip'), t('views.knowledgeWorkflow.tip.saveMessage'), {
confirmButtonText: t('views.knowledgeWorkflow.setting.exitSave'),
cancelButtonText: t('views.knowledgeWorkflow.setting.exit'),
MsgConfirm(t('common.tip'), t('views.workflow.tip.saveMessage'), {
confirmButtonText: t('views.workflow.setting.exitSave'),
cancelButtonText: t('views.workflow.setting.exit'),
distinguishCancelAndClose: true,
})
.then(() => {
@ -348,14 +348,14 @@ const publish = () => {
if (typeof err_message == 'string') {
MsgError(
res.node.properties?.stepName +
` ${t('views.knowledgeWorkflow.node').toLowerCase()} ` +
` ${t('views.workflow.node').toLowerCase()} ` +
err_message.toLowerCase(),
)
} else {
const keys = Object.keys(err_message)
MsgError(
node.properties?.stepName +
` ${t('views.knowledgeWorkflow.node').toLowerCase()} ` +
` ${t('views.workflow.node').toLowerCase()} ` +
err_message[keys[0]]?.[0]?.message.toLowerCase(),
)
}
@ -366,13 +366,13 @@ const publish = () => {
const err_message = res.errMessage
if (typeof err_message == 'string') {
MsgError(
res.node.properties?.stepName + ` ${t('views.knowledgeWorkflow.node')}` + err_message,
res.node.properties?.stepName + ` ${t('views.workflow.node')}` + err_message,
)
} else {
const keys = Object.keys(err_message)
MsgError(
node.properties?.stepName +
` ${t('views.knowledgeWorkflow.node')}` +
` ${t('views.workflow.node')}` +
err_message[keys[0]]?.[0]?.message,
)
}
@ -403,13 +403,13 @@ const clickShowDebug = () => {
const err_message = res.errMessage
if (typeof err_message == 'string') {
MsgError(
res.node.properties?.stepName + ` ${t('views.knowledgeWorkflow.node')}` + err_message,
res.node.properties?.stepName + ` ${t('views.workflow.node')}` + err_message,
)
} else {
const keys = Object.keys(err_message)
MsgError(
node.properties?.stepName +
` ${t('views.knowledgeWorkflow.node')}` +
` ${t('views.workflow.node')}` +
err_message[keys[0]]?.[0]?.message,
)
}

View File

@ -31,7 +31,7 @@
<el-input
v-model="filterText"
:placeholder="$t('views.problem.searchBar.placeholder')"
:placeholder="$t('common.searchBar.placeholder')"
prefix-icon="Search"
class="w-240"
@change="getList"

View File

@ -142,13 +142,13 @@
<SuccessFilled/>
</el-icon>
<span class="color-text-primary">
{{ $t('views.application.status.published') }}
{{ $t('common.status.published') }}
</span>
</div>
<div v-else class="flex align-center">
<AppIcon iconName="app-disabled" class="color-secondary mr-8"></AppIcon>
<span class="color-text-primary">
{{ $t('views.application.status.unpublished') }}
{{ $t('common.status.unpublished') }}
</span>
</div>
</template>
@ -462,11 +462,11 @@ const statusVisible = ref(false)
const statusArr = ref<any[]>([])
const statusOptions = ref<any[]>([
{
label: t('views.application.status.published'),
label: t('common.status.published'),
value: true,
},
{
label: t('views.application.status.unpublished'),
label: t('common.status.unpublished'),
value: false,
},
])

View File

@ -253,7 +253,7 @@ const submit = async (formEl: FormInstance | undefined) => {
throw new Error('Code must be a valid JSON object')
}
} catch (e) {
MsgError(t('views.applicationWorkflow.nodes.mcpNode.mcpServerTip'))
MsgError(t('views.workflow.nodes.mcpNode.mcpServerTip'))
return
}
loading.value = true

View File

@ -62,21 +62,21 @@ function visibleChange(bool: boolean) {
const validate = () => {
const incomingNodeValue = getOptionsValue()
if (!data.value || data.value.length === 0) {
return Promise.reject(t('views.applicationWorkflow.variable.ReferencingRequired'))
return Promise.reject(t('views.workflow.variable.ReferencingRequired'))
}
if (data.value.length < 2) {
return Promise.reject(t('views.applicationWorkflow.variable.ReferencingError'))
return Promise.reject(t('views.workflow.variable.ReferencingError'))
}
const node_id = data.value[0]
const node_field = data.value[1]
const nodeParent = incomingNodeValue.find((item: any) => item.value === node_id)
if (!nodeParent) {
data.value = []
return Promise.reject(t('views.applicationWorkflow.variable.NoReferencing'))
return Promise.reject(t('views.workflow.variable.NoReferencing'))
}
if (!nodeParent.children.some((item: any) => item.value === node_field)) {
data.value = []
return Promise.reject(t('views.applicationWorkflow.variable.NoReferencing'))
return Promise.reject(t('views.workflow.variable.NoReferencing'))
}
return Promise.resolve('')
}

View File

@ -42,17 +42,17 @@
</el-button>
<template #dropdown>
<div style="width: 280px" class="p-12-16">
<h5>{{ $t('views.applicationWorkflow.condition.title') }}</h5>
<h5>{{ $t('views.workflow.condition.title') }}</h5>
<p class="mt-8 lighter">
<span>{{ $t('views.applicationWorkflow.condition.front') }}</span>
<span>{{ $t('views.workflow.condition.front') }}</span>
<el-select v-model="condition" size="small" style="width: 60px; margin: 0 8px">
<el-option
:label="$t('views.applicationWorkflow.condition.AND')"
:label="$t('views.workflow.condition.AND')"
value="AND"
/>
<el-option :label="$t('views.applicationWorkflow.condition.OR')" value="OR" />
<el-option :label="$t('views.workflow.condition.OR')" value="OR" />
</el-select>
<span>{{ $t('views.applicationWorkflow.condition.text') }}</span>
<span>{{ $t('views.workflow.condition.text') }}</span>
</p>
</div>
</template>
@ -84,8 +84,8 @@
class="mb-16"
:title="
props.nodeModel.type === 'application-node'
? $t('views.applicationWorkflow.tip.applicationNodeError')
: $t('views.applicationWorkflow.tip.toolNodeError')
? $t('views.workflow.tip.applicationNodeError')
: $t('views.workflow.tip.toolNodeError')
"
type="error"
show-icon
@ -105,7 +105,7 @@
<span class="break-all">{{ item.label }} {{ '{' + item.value + '}' }}</span>
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.setting.copyParam')"
:content="$t('views.workflow.setting.copyParam')"
placement="top"
v-if="showicon === index"
>
@ -136,7 +136,7 @@
</el-collapse-transition>
<el-dialog
:title="$t('views.applicationWorkflow.nodeName')"
:title="$t('views.workflow.nodeName')"
v-model="nodeNameDialogVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
@ -261,7 +261,7 @@ const editName = async (formEl: FormInstance | undefined) => {
nodeNameDialogVisible.value = false
formEl.resetFields()
} else {
MsgError(t('views.applicationWorkflow.tip.repeatedNodeError'))
MsgError(t('views.workflow.tip.repeatedNodeError'))
}
}
})
@ -284,7 +284,7 @@ const copyNode = () => {
props.nodeModel.graphModel.toFront(cloneNode.id)
}
const deleteNode = () => {
MsgConfirm(t('common.tip'), t('views.applicationWorkflow.delete.confirmTitle'), {
MsgConfirm(t('common.tip'), t('views.workflow.delete.confirmTitle'), {
confirmButtonText: t('common.confirm'),
confirmButtonClass: 'danger',
}).then(() => {

View File

@ -18,10 +18,10 @@
<el-button link @click="zoomOut" style="border: none">
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.control.zoomOut')"
:content="$t('views.workflow.control.zoomOut')"
placement="top"
>
<el-icon :size="16" :title="$t('views.applicationWorkflow.control.zoomOut')"
<el-icon :size="16" :title="$t('views.workflow.control.zoomOut')"
><ZoomOut
/></el-icon>
</el-tooltip>
@ -29,10 +29,10 @@
<el-button link @click="zoomIn" style="border: none">
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.control.zoomIn')"
:content="$t('views.workflow.control.zoomIn')"
placement="top"
>
<el-icon :size="16" :title="$t('views.applicationWorkflow.control.zoomIn')"
<el-icon :size="16" :title="$t('views.workflow.control.zoomIn')"
><ZoomIn
/></el-icon>
</el-tooltip>
@ -40,12 +40,12 @@
<el-button link @click="fitView" style="border: none">
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.control.fitView')"
:content="$t('views.workflow.control.fitView')"
placement="top"
>
<AppIcon
iconName="app-fitview"
:title="$t('views.applicationWorkflow.control.fitView')"
:title="$t('views.workflow.control.fitView')"
></AppIcon>
</el-tooltip>
</el-button>
@ -53,39 +53,39 @@
<el-button link @click="retract" style="border: none">
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.control.retract')"
:content="$t('views.workflow.control.retract')"
placement="top"
>
<AppIcon
style="font-size: 16px"
iconName="app-retract"
:title="$t('views.applicationWorkflow.control.retract')"
:title="$t('views.workflow.control.retract')"
></AppIcon>
</el-tooltip>
</el-button>
<el-button link @click="extend" style="border: none">
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.control.extend')"
:content="$t('views.workflow.control.extend')"
placement="top"
>
<AppIcon
style="font-size: 16px"
iconName="app-extend"
:title="$t('views.applicationWorkflow.control.extend')"
:title="$t('views.workflow.control.extend')"
></AppIcon>
</el-tooltip>
</el-button>
<el-button link @click="layout" style="border: none">
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.control.beautify')"
:content="$t('views.workflow.control.beautify')"
placement="top"
>
<AppIcon
style="font-size: 16px"
iconName="app-beautify"
:title="$t('views.applicationWorkflow.control.beautify')"
:title="$t('views.workflow.control.beautify')"
></AppIcon>
</el-tooltip>
</el-button>

View File

@ -66,13 +66,13 @@ class AppNode extends HtmlResize.view {
if (this.props.model.type === 'start-node') {
result.push({
value: 'global',
label: t('views.applicationWorkflow.variable.global'),
label: t('views.workflow.variable.global'),
type: 'global',
children: this.props.model.properties?.config?.globalFields || [],
})
result.push({
value: 'chat',
label: t('views.applicationWorkflow.variable.chat'),
label: t('views.workflow.variable.chat'),
type: 'chat',
children: this.props.model.properties?.config?.chatFields || [],
})
@ -383,13 +383,13 @@ class AppNodeModel extends HtmlResize.model {
return false
}
const circleOnlyAsTarget = {
message: t('views.applicationWorkflow.tip.onlyRight'),
message: t('views.workflow.tip.onlyRight'),
validate: (sourceNode: any, targetNode: any, sourceAnchor: any) => {
return sourceAnchor.type === 'right'
},
}
this.sourceRules.push({
message: t('views.applicationWorkflow.tip.notRecyclable'),
message: t('views.workflow.tip.notRecyclable'),
validate: (sourceNode: any, targetNode: any, sourceAnchor: any, targetAnchor: any) => {
if (targetNode.id == sourceNode.id) {
return false
@ -405,7 +405,7 @@ class AppNodeModel extends HtmlResize.model {
this.sourceRules.push(circleOnlyAsTarget)
this.targetRules.push({
message: t('views.applicationWorkflow.tip.onlyLeft'),
message: t('views.workflow.tip.onlyLeft'),
validate: (sourceNode: any, targetNode: any, sourceAnchor: any, targetAnchor: any) => {
return targetAnchor.type === 'left'
},

View File

@ -9,16 +9,16 @@ export const startNode = {
y: 3340,
properties: {
height: 364,
stepName: t('views.applicationWorkflow.nodes.startNode.label'),
stepName: t('views.workflow.nodes.startNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.startNode.question'),
label: t('views.workflow.nodes.startNode.question'),
value: 'question',
},
],
globalFields: [
{ label: t('views.applicationWorkflow.nodes.startNode.currentTime'), value: 'time' },
{ label: t('views.workflow.nodes.startNode.currentTime'), value: 'time' },
{
label: t('views.application.form.historyRecord.label'),
value: 'history_context',
@ -29,9 +29,9 @@ export const startNode = {
},
],
},
fields: [{ label: t('views.applicationWorkflow.nodes.startNode.question'), value: 'question' }],
fields: [{ label: t('views.workflow.nodes.startNode.question'), value: 'question' }],
globalFields: [
{ label: t('views.applicationWorkflow.nodes.startNode.currentTime'), value: 'time' },
{ label: t('views.workflow.nodes.startNode.currentTime'), value: 'time' },
],
showNode: true,
},
@ -44,7 +44,7 @@ export const baseNode = {
text: '',
properties: {
height: 728.375,
stepName: t('views.applicationWorkflow.nodes.baseNode.label'),
stepName: t('views.workflow.nodes.baseNode.label'),
input_field_list: [],
node_data: {
name: '',
@ -66,7 +66,7 @@ export const knowledgeBaseNode = {
text: '',
properties: {
height: 728.375,
stepName: t('views.applicationWorkflow.nodes.baseNode.label'),
stepName: t('views.workflow.nodes.baseNode.label'),
input_field_list: [],
node_data: {
name: '',
@ -84,18 +84,18 @@ export const dataSourceLocalNode = {
type: WorkflowType.DataSourceLocalNode,
x: 360,
y: 2761.3875,
text: t('views.applicationWorkflow.nodes.dataSourceLocalNode.text', '本地文件'),
label: t('views.applicationWorkflow.nodes.dataSourceLocalNode.label', '本地文件'),
text: t('views.workflow.nodes.dataSourceLocalNode.text', '本地文件'),
label: t('views.workflow.nodes.dataSourceLocalNode.label', '本地文件'),
properties: {
kind: WorkflowKind.DataSource,
height: 728.375,
stepName: t('views.applicationWorkflow.nodes.dataSourceLocalNode.label', '本地文件'),
stepName: t('views.workflow.nodes.dataSourceLocalNode.label', '本地文件'),
input_field_list: [],
node_data: {},
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.dataSourceLocalNode.field_label', '文件列表'),
label: t('views.workflow.nodes.dataSourceLocalNode.field_label', '文件列表'),
value: 'file_list',
},
],
@ -111,16 +111,16 @@ export const dataSourceWebNode = {
type: WorkflowType.DataSourceWebNode,
x: 360,
y: 2761.3875,
text: t('views.applicationWorkflow.nodes.dataSourceWebNode.text', 'Web站点'),
label: t('views.applicationWorkflow.nodes.dataSourceWebNode.label', 'Web站点'),
text: t('views.workflow.nodes.dataSourceWebNode.text', 'Web站点'),
label: t('views.workflow.nodes.dataSourceWebNode.label', 'Web站点'),
properties: {
kind: WorkflowKind.DataSource,
height: 180,
stepName: t('views.applicationWorkflow.nodes.dataSourceWebNode.label', 'Web站点'),
stepName: t('views.workflow.nodes.dataSourceWebNode.label', 'Web站点'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.dataSourceWebNode.field_label'),
label: t('views.workflow.nodes.dataSourceWebNode.field_label'),
value: 'document_list',
},
],
@ -130,11 +130,11 @@ export const dataSourceWebNode = {
export const knowledgeWriteNode = {
type: WorkflowType.KnowledgeWriteNode,
text: t('views.applicationWorkflow.nodes.knowledgeWriteNode.text'),
label: t('views.applicationWorkflow.nodes.knowledgeWriteNode.label'),
text: t('views.workflow.nodes.knowledgeWriteNode.text'),
label: t('views.workflow.nodes.knowledgeWriteNode.label'),
properties: {
height: 252,
stepName: t('views.applicationWorkflow.nodes.knowledgeWriteNode.label'),
stepName: t('views.workflow.nodes.knowledgeWriteNode.label'),
config: {
fields: [],
},
@ -151,23 +151,23 @@ export const baseNodes = [baseNode, startNode]
*/
export const aiChatNode = {
type: WorkflowType.AiChat,
text: t('views.applicationWorkflow.nodes.aiChatNode.text'),
label: t('views.applicationWorkflow.nodes.aiChatNode.label'),
text: t('views.workflow.nodes.aiChatNode.text'),
label: t('views.workflow.nodes.aiChatNode.label'),
height: 340,
properties: {
stepName: t('views.applicationWorkflow.nodes.aiChatNode.label'),
stepName: t('views.workflow.nodes.aiChatNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.aiChatNode.answer'),
label: t('views.workflow.nodes.aiChatNode.answer'),
value: 'answer',
},
{
label: t('views.applicationWorkflow.nodes.aiChatNode.think'),
label: t('views.workflow.nodes.aiChatNode.think'),
value: 'reasoning_content',
},
{
label: t('views.applicationWorkflow.nodes.aiChatNode.historyMessage'),
label: t('views.workflow.nodes.aiChatNode.historyMessage'),
value: 'history_message',
},
],
@ -179,29 +179,29 @@ export const aiChatNode = {
*/
export const searchKnowledgeNode = {
type: WorkflowType.SearchKnowledge,
text: t('views.applicationWorkflow.nodes.searchKnowledgeNode.text'),
label: t('views.applicationWorkflow.nodes.searchKnowledgeNode.label'),
text: t('views.workflow.nodes.searchKnowledgeNode.text'),
label: t('views.workflow.nodes.searchKnowledgeNode.label'),
height: 355,
properties: {
stepName: t('views.applicationWorkflow.nodes.searchKnowledgeNode.label'),
stepName: t('views.workflow.nodes.searchKnowledgeNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.searchKnowledgeNode.paragraph_list'),
label: t('views.workflow.nodes.searchKnowledgeNode.paragraph_list'),
value: 'paragraph_list',
},
{
label: t(
'views.applicationWorkflow.nodes.searchKnowledgeNode.is_hit_handling_method_list',
'views.workflow.nodes.searchKnowledgeNode.is_hit_handling_method_list',
),
value: 'is_hit_handling_method_list',
},
{
label: t('views.applicationWorkflow.nodes.searchKnowledgeNode.result'),
label: t('views.workflow.nodes.searchKnowledgeNode.result'),
value: 'data',
},
{
label: t('views.applicationWorkflow.nodes.searchKnowledgeNode.directly_return'),
label: t('views.workflow.nodes.searchKnowledgeNode.directly_return'),
value: 'directly_return',
},
],
@ -214,20 +214,20 @@ export const searchKnowledgeNode = {
*/
export const searchDocumentNode = {
type: WorkflowType.SearchDocument,
text: t('views.applicationWorkflow.nodes.searchDocumentNode.text'),
label: t('views.applicationWorkflow.nodes.searchDocumentNode.label'),
text: t('views.workflow.nodes.searchDocumentNode.text'),
label: t('views.workflow.nodes.searchDocumentNode.label'),
height: 355,
properties: {
width: 600,
stepName: t('views.applicationWorkflow.nodes.searchDocumentNode.label'),
stepName: t('views.workflow.nodes.searchDocumentNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.searchDocumentNode.knowledge_list'),
label: t('views.workflow.nodes.searchDocumentNode.knowledge_list'),
value: 'knowledge_list',
},
{
label: t('views.applicationWorkflow.nodes.searchDocumentNode.document_list'),
label: t('views.workflow.nodes.searchDocumentNode.document_list'),
value: 'document_list',
},
],
@ -237,15 +237,15 @@ export const searchDocumentNode = {
export const questionNode = {
type: WorkflowType.Question,
text: t('views.applicationWorkflow.nodes.questionNode.text'),
label: t('views.applicationWorkflow.nodes.questionNode.label'),
text: t('views.workflow.nodes.questionNode.text'),
label: t('views.workflow.nodes.questionNode.label'),
height: 345,
properties: {
stepName: t('views.applicationWorkflow.nodes.questionNode.label'),
stepName: t('views.workflow.nodes.questionNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.questionNode.result'),
label: t('views.workflow.nodes.questionNode.result'),
value: 'answer',
},
],
@ -254,11 +254,11 @@ export const questionNode = {
}
export const variableSplittingNode = {
type: WorkflowType.VariableSplittingNode,
text: t('views.applicationWorkflow.nodes.variableSplittingNode.text'),
label: t('views.applicationWorkflow.nodes.variableSplittingNode.label'),
text: t('views.workflow.nodes.variableSplittingNode.text'),
label: t('views.workflow.nodes.variableSplittingNode.label'),
height: 345,
properties: {
stepName: t('views.applicationWorkflow.nodes.variableSplittingNode.label'),
stepName: t('views.workflow.nodes.variableSplittingNode.label'),
config: {
fields: [
{
@ -272,12 +272,12 @@ export const variableSplittingNode = {
export const parameterExtractionNode = {
type: WorkflowType.ParameterExtractionNode,
text: t('views.applicationWorkflow.nodes.parameterExtractionNode.text'),
label: t('views.applicationWorkflow.nodes.parameterExtractionNode.label'),
text: t('views.workflow.nodes.parameterExtractionNode.text'),
label: t('views.workflow.nodes.parameterExtractionNode.label'),
height: 345,
properties: {
width: 430,
stepName: t('views.applicationWorkflow.nodes.parameterExtractionNode.label'),
stepName: t('views.workflow.nodes.parameterExtractionNode.label'),
config: {
fields: [
{
@ -291,16 +291,16 @@ export const parameterExtractionNode = {
export const conditionNode = {
type: WorkflowType.Condition,
text: t('views.applicationWorkflow.nodes.conditionNode.text'),
label: t('views.applicationWorkflow.nodes.conditionNode.label'),
text: t('views.workflow.nodes.conditionNode.text'),
label: t('views.workflow.nodes.conditionNode.label'),
height: 175,
properties: {
width: 600,
stepName: t('views.applicationWorkflow.nodes.conditionNode.label'),
stepName: t('views.workflow.nodes.conditionNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.conditionNode.branch_name'),
label: t('views.workflow.nodes.conditionNode.branch_name'),
value: 'branch_name',
},
],
@ -309,11 +309,11 @@ export const conditionNode = {
}
export const replyNode = {
type: WorkflowType.Reply,
text: t('views.applicationWorkflow.nodes.replyNode.text'),
label: t('views.applicationWorkflow.nodes.replyNode.label'),
text: t('views.workflow.nodes.replyNode.text'),
label: t('views.workflow.nodes.replyNode.label'),
height: 210,
properties: {
stepName: t('views.applicationWorkflow.nodes.replyNode.label'),
stepName: t('views.workflow.nodes.replyNode.label'),
config: {
fields: [
{
@ -326,19 +326,19 @@ export const replyNode = {
}
export const rerankerNode = {
type: WorkflowType.RerankerNode,
text: t('views.applicationWorkflow.nodes.rerankerNode.text'),
label: t('views.applicationWorkflow.nodes.rerankerNode.label'),
text: t('views.workflow.nodes.rerankerNode.text'),
label: t('views.workflow.nodes.rerankerNode.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.rerankerNode.label'),
stepName: t('views.workflow.nodes.rerankerNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.rerankerNode.result_list'),
label: t('views.workflow.nodes.rerankerNode.result_list'),
value: 'result_list',
},
{
label: t('views.applicationWorkflow.nodes.rerankerNode.result'),
label: t('views.workflow.nodes.rerankerNode.result'),
value: 'result',
},
],
@ -347,23 +347,23 @@ export const rerankerNode = {
}
export const formNode = {
type: WorkflowType.FormNode,
text: t('views.applicationWorkflow.nodes.formNode.text'),
label: t('views.applicationWorkflow.nodes.formNode.label'),
text: t('views.workflow.nodes.formNode.text'),
label: t('views.workflow.nodes.formNode.label'),
height: 252,
properties: {
width: 600,
stepName: t('views.applicationWorkflow.nodes.formNode.label'),
stepName: t('views.workflow.nodes.formNode.label'),
node_data: {
is_result: true,
form_field_list: [],
form_content_format: `${t('views.applicationWorkflow.nodes.formNode.form_content_format1')}
form_content_format: `${t('views.workflow.nodes.formNode.form_content_format1')}
{{form}}
${t('views.applicationWorkflow.nodes.formNode.form_content_format2')}`,
${t('views.workflow.nodes.formNode.form_content_format2')}`,
},
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.formNode.form_data'),
label: t('views.workflow.nodes.formNode.form_data'),
value: 'form_data',
},
],
@ -372,19 +372,19 @@ ${t('views.applicationWorkflow.nodes.formNode.form_content_format2')}`,
}
export const documentExtractNode = {
type: WorkflowType.DocumentExtractNode,
text: t('views.applicationWorkflow.nodes.documentExtractNode.text'),
label: t('views.applicationWorkflow.nodes.documentExtractNode.label'),
text: t('views.workflow.nodes.documentExtractNode.text'),
label: t('views.workflow.nodes.documentExtractNode.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.documentExtractNode.label'),
stepName: t('views.workflow.nodes.documentExtractNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.documentExtractNode.content'),
label: t('views.workflow.nodes.documentExtractNode.content'),
value: 'content',
},
{
label: t('views.applicationWorkflow.nodes.dataSourceWebNode.field_label'),
label: t('views.workflow.nodes.dataSourceWebNode.field_label'),
value: 'document_list',
},
],
@ -393,16 +393,16 @@ export const documentExtractNode = {
}
export const documentSplitNode = {
type: WorkflowType.DocumentSplitNode,
text: t('views.applicationWorkflow.nodes.documentSplitNode.text'),
label: t('views.applicationWorkflow.nodes.documentSplitNode.label'),
text: t('views.workflow.nodes.documentSplitNode.text'),
label: t('views.workflow.nodes.documentSplitNode.label'),
height: 252,
properties: {
width: 500,
stepName: t('views.applicationWorkflow.nodes.documentSplitNode.label'),
stepName: t('views.workflow.nodes.documentSplitNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.documentSplitNode.paragraph_list'),
label: t('views.workflow.nodes.documentSplitNode.paragraph_list'),
value: 'paragraph_list',
},
],
@ -411,15 +411,15 @@ export const documentSplitNode = {
}
export const imageUnderstandNode = {
type: WorkflowType.ImageUnderstandNode,
text: t('views.applicationWorkflow.nodes.imageUnderstandNode.text'),
label: t('views.applicationWorkflow.nodes.imageUnderstandNode.label'),
text: t('views.workflow.nodes.imageUnderstandNode.text'),
label: t('views.workflow.nodes.imageUnderstandNode.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.imageUnderstandNode.label'),
stepName: t('views.workflow.nodes.imageUnderstandNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.imageUnderstandNode.answer'),
label: t('views.workflow.nodes.imageUnderstandNode.answer'),
value: 'answer',
},
],
@ -429,15 +429,15 @@ export const imageUnderstandNode = {
export const videoUnderstandNode = {
type: WorkflowType.VideoUnderstandNode,
text: t('views.applicationWorkflow.nodes.videoUnderstandNode.text'),
label: t('views.applicationWorkflow.nodes.videoUnderstandNode.label'),
text: t('views.workflow.nodes.videoUnderstandNode.text'),
label: t('views.workflow.nodes.videoUnderstandNode.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.videoUnderstandNode.label'),
stepName: t('views.workflow.nodes.videoUnderstandNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.videoUnderstandNode.answer'),
label: t('views.workflow.nodes.videoUnderstandNode.answer'),
value: 'answer',
},
],
@ -446,11 +446,11 @@ export const videoUnderstandNode = {
}
export const variableAggregationNode = {
type: WorkflowType.VariableAggregationNode,
text: t('views.applicationWorkflow.nodes.variableAggregationNode.text'),
label: t('views.applicationWorkflow.nodes.variableAggregationNode.label'),
text: t('views.workflow.nodes.variableAggregationNode.text'),
label: t('views.workflow.nodes.variableAggregationNode.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.variableAggregationNode.label'),
stepName: t('views.workflow.nodes.variableAggregationNode.label'),
config: {
fields: [],
},
@ -459,22 +459,22 @@ export const variableAggregationNode = {
export const variableAssignNode = {
type: WorkflowType.VariableAssignNode,
text: t('views.applicationWorkflow.nodes.variableAssignNode.text'),
label: t('views.applicationWorkflow.nodes.variableAssignNode.label'),
text: t('views.workflow.nodes.variableAssignNode.text'),
label: t('views.workflow.nodes.variableAssignNode.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.variableAssignNode.label'),
stepName: t('views.workflow.nodes.variableAssignNode.label'),
config: {},
},
}
export const mcpNode = {
type: WorkflowType.McpNode,
text: t('views.applicationWorkflow.nodes.mcpNode.text'),
label: t('views.applicationWorkflow.nodes.mcpNode.label'),
text: t('views.workflow.nodes.mcpNode.text'),
label: t('views.workflow.nodes.mcpNode.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.mcpNode.label'),
stepName: t('views.workflow.nodes.mcpNode.label'),
config: {
fields: [
{
@ -488,15 +488,15 @@ export const mcpNode = {
export const imageGenerateNode = {
type: WorkflowType.ImageGenerateNode,
text: t('views.applicationWorkflow.nodes.imageGenerateNode.text'),
label: t('views.applicationWorkflow.nodes.imageGenerateNode.label'),
text: t('views.workflow.nodes.imageGenerateNode.text'),
label: t('views.workflow.nodes.imageGenerateNode.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.imageGenerateNode.label'),
stepName: t('views.workflow.nodes.imageGenerateNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.imageGenerateNode.answer'),
label: t('views.workflow.nodes.imageGenerateNode.answer'),
value: 'answer',
},
{
@ -510,11 +510,11 @@ export const imageGenerateNode = {
export const speechToTextNode = {
type: WorkflowType.SpeechToTextNode,
text: t('views.applicationWorkflow.nodes.speechToTextNode.text'),
label: t('views.applicationWorkflow.nodes.speechToTextNode.label'),
text: t('views.workflow.nodes.speechToTextNode.text'),
label: t('views.workflow.nodes.speechToTextNode.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.speechToTextNode.label'),
stepName: t('views.workflow.nodes.speechToTextNode.label'),
config: {
fields: [
{
@ -527,11 +527,11 @@ export const speechToTextNode = {
}
export const textToSpeechNode = {
type: WorkflowType.TextToSpeechNode,
text: t('views.applicationWorkflow.nodes.textToSpeechNode.text'),
label: t('views.applicationWorkflow.nodes.textToSpeechNode.label'),
text: t('views.workflow.nodes.textToSpeechNode.text'),
label: t('views.workflow.nodes.textToSpeechNode.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.textToSpeechNode.label'),
stepName: t('views.workflow.nodes.textToSpeechNode.label'),
config: {
fields: [
{
@ -548,11 +548,11 @@ export const textToSpeechNode = {
*/
export const toolNode = {
type: WorkflowType.ToolLibCustom,
text: t('views.applicationWorkflow.nodes.toolNode.text'),
label: t('views.applicationWorkflow.nodes.toolNode.label'),
text: t('views.workflow.nodes.toolNode.text'),
label: t('views.workflow.nodes.toolNode.label'),
height: 260,
properties: {
stepName: t('views.applicationWorkflow.nodes.toolNode.label'),
stepName: t('views.workflow.nodes.toolNode.label'),
config: {
fields: [
{
@ -566,11 +566,11 @@ export const toolNode = {
export const intentNode = {
type: WorkflowType.IntentNode,
text: t('views.applicationWorkflow.nodes.intentNode.text'),
label: t('views.applicationWorkflow.nodes.intentNode.label'),
text: t('views.workflow.nodes.intentNode.text'),
label: t('views.workflow.nodes.intentNode.label'),
height: 260,
properties: {
stepName: t('views.applicationWorkflow.nodes.intentNode.label'),
stepName: t('views.workflow.nodes.intentNode.label'),
config: {
fields: [
{
@ -593,15 +593,15 @@ export const loopStartNode = {
y: 3340,
properties: {
height: 364,
stepName: t('views.applicationWorkflow.nodes.loopStartNode.label'),
stepName: t('views.workflow.nodes.loopStartNode.label'),
config: {
fields: [
{
label: t('views.applicationWorkflow.nodes.loopStartNode.loopIndex'),
label: t('views.workflow.nodes.loopStartNode.loopIndex'),
value: 'index',
},
{
label: t('views.applicationWorkflow.nodes.loopStartNode.loopItem'),
label: t('views.workflow.nodes.loopStartNode.loopItem'),
value: 'item',
},
],
@ -614,11 +614,11 @@ export const loopStartNode = {
export const loopNode = {
type: WorkflowType.LoopNode,
visible: false,
text: t('views.applicationWorkflow.nodes.loopNode.text'),
label: t('views.applicationWorkflow.nodes.loopNode.label'),
text: t('views.workflow.nodes.loopNode.text'),
label: t('views.workflow.nodes.loopNode.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.loopNode.label'),
stepName: t('views.workflow.nodes.loopNode.label'),
workflow: {
edges: [],
nodes: [
@ -649,11 +649,11 @@ export const loopNode = {
export const imageToVideoNode = {
type: WorkflowType.ImageToVideoGenerateNode,
text: t('views.applicationWorkflow.nodes.imageToVideoGenerate.text'),
label: t('views.applicationWorkflow.nodes.imageToVideoGenerate.label'),
text: t('views.workflow.nodes.imageToVideoGenerate.text'),
label: t('views.workflow.nodes.imageToVideoGenerate.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.imageToVideoGenerate.label'),
stepName: t('views.workflow.nodes.imageToVideoGenerate.label'),
config: {
fields: [
{
@ -667,12 +667,12 @@ export const imageToVideoNode = {
export const loopBodyNode = {
type: WorkflowType.LoopBodyNode,
text: t('views.applicationWorkflow.nodes.loopBodyNode.text'),
label: t('views.applicationWorkflow.nodes.loopBodyNode.label'),
text: t('views.workflow.nodes.loopBodyNode.text'),
label: t('views.workflow.nodes.loopBodyNode.label'),
height: 1080,
properties: {
width: 1920,
stepName: t('views.applicationWorkflow.nodes.loopBodyNode.label'),
stepName: t('views.workflow.nodes.loopBodyNode.label'),
config: {
fields: [],
},
@ -680,12 +680,12 @@ export const loopBodyNode = {
}
export const loopContinueNode = {
type: WorkflowType.LoopContinueNode,
text: t('views.applicationWorkflow.nodes.loopContinueNode.text'),
label: t('views.applicationWorkflow.nodes.loopContinueNode.label'),
text: t('views.workflow.nodes.loopContinueNode.text'),
label: t('views.workflow.nodes.loopContinueNode.label'),
height: 100,
properties: {
width: 600,
stepName: t('views.applicationWorkflow.nodes.loopContinueNode.label'),
stepName: t('views.workflow.nodes.loopContinueNode.label'),
config: {
fields: [],
},
@ -694,11 +694,11 @@ export const loopContinueNode = {
export const textToVideoNode = {
type: WorkflowType.TextToVideoGenerateNode,
text: t('views.applicationWorkflow.nodes.textToVideoGenerate.text'),
label: t('views.applicationWorkflow.nodes.textToVideoGenerate.label'),
text: t('views.workflow.nodes.textToVideoGenerate.text'),
label: t('views.workflow.nodes.textToVideoGenerate.label'),
height: 252,
properties: {
stepName: t('views.applicationWorkflow.nodes.textToVideoGenerate.label'),
stepName: t('views.workflow.nodes.textToVideoGenerate.label'),
config: {
fields: [
{
@ -712,12 +712,12 @@ export const textToVideoNode = {
export const loopBreakNode = {
type: WorkflowType.LoopBreakNode,
text: t('views.applicationWorkflow.nodes.loopBreakNode.text'),
label: t('views.applicationWorkflow.nodes.loopBreakNode.label'),
text: t('views.workflow.nodes.loopBreakNode.text'),
label: t('views.workflow.nodes.loopBreakNode.label'),
height: 100,
properties: {
width: 600,
stepName: t('views.applicationWorkflow.nodes.loopBreakNode.label'),
stepName: t('views.workflow.nodes.loopBreakNode.label'),
config: {
fields: [],
},
@ -726,11 +726,11 @@ export const loopBreakNode = {
export const knowledgeMenuNodes = [
{
label: t('views.applicationWorkflow.nodes.classify.dataSource', '数据源'),
label: t('views.workflow.nodes.classify.dataSource', '数据源'),
list: [dataSourceLocalNode, dataSourceWebNode],
},
{
label: t('views.applicationWorkflow.nodes.classify.aiCapability'),
label: t('views.workflow.nodes.classify.aiCapability'),
list: [
aiChatNode,
intentNode,
@ -749,11 +749,11 @@ export const knowledgeMenuNodes = [
list: [documentExtractNode, documentSplitNode, knowledgeWriteNode],
},
{
label: t('views.applicationWorkflow.nodes.classify.businessLogic'),
label: t('views.workflow.nodes.classify.businessLogic'),
list: [conditionNode, replyNode, loopNode],
},
{
label: t('views.applicationWorkflow.nodes.classify.dataProcessing'),
label: t('views.workflow.nodes.classify.dataProcessing'),
list: [
variableAssignNode,
variableAggregationNode,
@ -762,14 +762,14 @@ export const knowledgeMenuNodes = [
],
},
{
label: t('views.applicationWorkflow.nodes.classify.other'),
label: t('views.workflow.nodes.classify.other'),
list: [mcpNode, toolNode],
},
]
export const menuNodes = [
{
label: t('views.applicationWorkflow.nodes.classify.aiCapability'),
label: t('views.workflow.nodes.classify.aiCapability'),
list: [
aiChatNode,
intentNode,
@ -795,11 +795,11 @@ export const menuNodes = [
],
},
{
label: t('views.applicationWorkflow.nodes.classify.businessLogic'),
label: t('views.workflow.nodes.classify.businessLogic'),
list: [conditionNode, formNode, replyNode, loopNode],
},
{
label: t('views.applicationWorkflow.nodes.classify.dataProcessing'),
label: t('views.workflow.nodes.classify.dataProcessing'),
list: [
variableAssignNode,
variableAggregationNode,
@ -808,13 +808,13 @@ export const menuNodes = [
],
},
{
label: t('views.applicationWorkflow.nodes.classify.other'),
label: t('views.workflow.nodes.classify.other'),
list: [mcpNode, toolNode],
},
]
export const applicationLoopMenuNodes = [
{
label: t('views.applicationWorkflow.nodes.classify.aiCapability'),
label: t('views.workflow.nodes.classify.aiCapability'),
list: [
aiChatNode,
intentNode,
@ -833,11 +833,11 @@ export const applicationLoopMenuNodes = [
list: [searchKnowledgeNode, searchDocumentNode, rerankerNode, documentExtractNode],
},
{
label: t('views.applicationWorkflow.nodes.classify.businessLogic'),
label: t('views.workflow.nodes.classify.businessLogic'),
list: [conditionNode, formNode, replyNode, loopContinueNode, loopBreakNode],
},
{
label: t('views.applicationWorkflow.nodes.classify.dataProcessing', '数据处理'),
label: t('views.workflow.nodes.classify.dataProcessing', '数据处理'),
list: [
variableAssignNode,
variableSplittingNode,
@ -846,13 +846,13 @@ export const applicationLoopMenuNodes = [
],
},
{
label: t('views.applicationWorkflow.nodes.classify.other'),
label: t('views.workflow.nodes.classify.other'),
list: [mcpNode, toolNode],
},
]
export const knowledgeLoopMenuNodes = [
{
label: t('views.applicationWorkflow.nodes.classify.aiCapability'),
label: t('views.workflow.nodes.classify.aiCapability'),
list: [
aiChatNode,
intentNode,
@ -871,11 +871,11 @@ export const knowledgeLoopMenuNodes = [
list: [rerankerNode, documentExtractNode],
},
{
label: t('views.applicationWorkflow.nodes.classify.businessLogic'),
label: t('views.workflow.nodes.classify.businessLogic'),
list: [conditionNode, replyNode, loopContinueNode, loopBreakNode],
},
{
label: t('views.applicationWorkflow.nodes.classify.dataProcessing', '数据处理'),
label: t('views.workflow.nodes.classify.dataProcessing', '数据处理'),
list: [
variableAssignNode,
variableSplittingNode,
@ -884,7 +884,7 @@ export const knowledgeLoopMenuNodes = [
],
},
{
label: t('views.applicationWorkflow.nodes.classify.other'),
label: t('views.workflow.nodes.classify.other'),
list: [mcpNode, toolNode],
},
]
@ -909,11 +909,11 @@ export const getMenuNodes = (workflowMode: WorkflowMode) => {
*/
export const toolLibNode = {
type: WorkflowType.ToolLib,
text: t('views.applicationWorkflow.nodes.toolNode.text'),
label: t('views.applicationWorkflow.nodes.toolNode.label'),
text: t('views.workflow.nodes.toolNode.text'),
label: t('views.workflow.nodes.toolNode.label'),
height: 170,
properties: {
stepName: t('views.applicationWorkflow.nodes.toolNode.label'),
stepName: t('views.workflow.nodes.toolNode.label'),
config: {
fields: [
{
@ -927,11 +927,11 @@ export const toolLibNode = {
export const applicationNode = {
type: WorkflowType.Application,
text: t('views.applicationWorkflow.nodes.applicationNode.label'),
label: t('views.applicationWorkflow.nodes.applicationNode.label'),
text: t('views.workflow.nodes.applicationNode.label'),
label: t('views.workflow.nodes.applicationNode.label'),
height: 260,
properties: {
stepName: t('views.applicationWorkflow.nodes.applicationNode.label'),
stepName: t('views.workflow.nodes.applicationNode.label'),
config: {
fields: [
{
@ -944,22 +944,22 @@ export const applicationNode = {
}
export const compareList = [
{ value: 'is_null', label: t('views.applicationWorkflow.compare.is_null') },
{ value: 'is_not_null', label: t('views.applicationWorkflow.compare.is_not_null') },
{ value: 'contain', label: t('views.applicationWorkflow.compare.contain') },
{ value: 'not_contain', label: t('views.applicationWorkflow.compare.not_contain') },
{ value: 'eq', label: t('views.applicationWorkflow.compare.eq') },
{ value: 'ge', label: t('views.applicationWorkflow.compare.ge') },
{ value: 'gt', label: t('views.applicationWorkflow.compare.gt') },
{ value: 'le', label: t('views.applicationWorkflow.compare.le') },
{ value: 'lt', label: t('views.applicationWorkflow.compare.lt') },
{ value: 'len_eq', label: t('views.applicationWorkflow.compare.len_eq') },
{ value: 'len_ge', label: t('views.applicationWorkflow.compare.len_ge') },
{ value: 'len_gt', label: t('views.applicationWorkflow.compare.len_gt') },
{ value: 'len_le', label: t('views.applicationWorkflow.compare.len_le') },
{ value: 'len_lt', label: t('views.applicationWorkflow.compare.len_lt') },
{ value: 'is_true', label: t('views.applicationWorkflow.compare.is_true') },
{ value: 'is_not_true', label: t('views.applicationWorkflow.compare.is_not_true') },
{ value: 'is_null', label: t('views.workflow.compare.is_null') },
{ value: 'is_not_null', label: t('views.workflow.compare.is_not_null') },
{ value: 'contain', label: t('views.workflow.compare.contain') },
{ value: 'not_contain', label: t('views.workflow.compare.not_contain') },
{ value: 'eq', label: t('views.workflow.compare.eq') },
{ value: 'ge', label: t('views.workflow.compare.ge') },
{ value: 'gt', label: t('views.workflow.compare.gt') },
{ value: 'le', label: t('views.workflow.compare.le') },
{ value: 'lt', label: t('views.workflow.compare.lt') },
{ value: 'len_eq', label: t('views.workflow.compare.len_eq') },
{ value: 'len_ge', label: t('views.workflow.compare.len_ge') },
{ value: 'len_gt', label: t('views.workflow.compare.len_gt') },
{ value: 'len_le', label: t('views.workflow.compare.len_le') },
{ value: 'len_lt', label: t('views.workflow.compare.len_lt') },
{ value: 'is_true', label: t('views.workflow.compare.is_true') },
{ value: 'is_not_true', label: t('views.workflow.compare.is_not_true') },
{ value: 'start_with', label: 'startWith' },
{ value: 'end_with', label: 'endWith' },
]

View File

@ -61,13 +61,13 @@ export function initDefaultShortcut(lf: LogicFlow, graph: GraphModel) {
(node: any) => node.type === WorkflowType.Start || node.type === WorkflowType.Base,
)
if (base_nodes.length > 0) {
MsgError(base_nodes[0]?.properties?.stepName + t('views.applicationWorkflow.tip.cannotCopy'))
MsgError(base_nodes[0]?.properties?.stepName + t('views.workflow.tip.cannotCopy'))
return
}
selected = cloneDeep(elements)
selected.nodes.forEach((node: any) => translationNodeData(node, TRANSLATION_DISTANCE))
selected.edges.forEach((edge: any) => translationEdgeData(edge, TRANSLATION_DISTANCE))
MsgSuccess(t('views.applicationWorkflow.tip.copyError'))
MsgSuccess(t('views.workflow.tip.copyError'))
return false
}
const paste_node = () => {
@ -102,11 +102,11 @@ export function initDefaultShortcut(lf: LogicFlow, graph: GraphModel) {
)
if (nodes.length > 0) {
MsgError(
`${nodes[0].properties?.stepName}${t('views.applicationWorkflow.delete.deleteMessage')}`,
`${nodes[0].properties?.stepName}${t('views.workflow.delete.deleteMessage')}`,
)
return
}
MsgConfirm(t('common.tip'), t('views.applicationWorkflow.delete.confirmTitle'), {
MsgConfirm(t('common.tip'), t('views.workflow.delete.confirmTitle'), {
confirmButtonText: t('common.confirm'),
confirmButtonClass: 'danger',
}).then(() => {

View File

@ -69,9 +69,9 @@ export class WorkFlowInstance {
[WorkflowType.Start, WorkflowType.LoopStartNode].includes(item.id),
)
if (start_node_list.length == 0) {
throw t('views.applicationWorkflow.validate.startNodeRequired')
throw t('views.workflow.validate.startNodeRequired')
} else if (start_node_list.length > 1) {
throw t('views.applicationWorkflow.validate.startNodeOnly')
throw t('views.workflow.validate.startNodeOnly')
}
}
@ -81,9 +81,9 @@ export class WorkFlowInstance {
is_valid_base_node() {
const start_node_list = this.nodes.filter((item) => item.id === WorkflowType.Base)
if (start_node_list.length == 0) {
throw t('views.applicationWorkflow.validate.baseNodeRequired')
throw t('views.workflow.validate.baseNodeRequired')
} else if (start_node_list.length > 1) {
throw t('views.applicationWorkflow.validate.baseNodeOnly')
throw t('views.workflow.validate.baseNodeOnly')
}
}
@ -150,7 +150,7 @@ export class WorkFlowInstance {
.filter((node: any) => node.id !== WorkflowType.Start && node.id !== WorkflowType.Base)
.filter((node) => !this.workFlowNodes.includes(node))
if (notInWorkFlowNodes.length > 0) {
throw `${t('views.applicationWorkflow.validate.notInWorkFlowNode')}:${notInWorkFlowNodes.map((node) => node.properties.stepName).join('')}`
throw `${t('views.workflow.validate.notInWorkFlowNode')}:${notInWorkFlowNodes.map((node) => node.properties.stepName).join('')}`
}
this.workFlowNodes = []
}
@ -167,7 +167,7 @@ export class WorkFlowInstance {
.reduce((x, y) => [...x, ...y], [])
const end = end_nodes_dict[this.workflowModel]
if (node_list.length == 0 && !end.includes(node.type)) {
throw t('views.applicationWorkflow.validate.noNextNode')
throw t('views.workflow.validate.noNextNode')
}
return node_list
}
@ -180,7 +180,7 @@ export class WorkFlowInstance {
node.type !== WorkflowType.LoopStartNode
) {
if (!this.edges.some((edge) => edge.targetNodeId === node.id)) {
throw `${t('views.applicationWorkflow.validate.notInWorkFlowNode')}:${node.properties.stepName}`
throw `${t('views.workflow.validate.notInWorkFlowNode')}:${node.properties.stepName}`
}
}
}
@ -192,7 +192,7 @@ export class WorkFlowInstance {
*/
is_valid_node(node: any) {
if (node.properties.status && node.properties.status === 500) {
throw `${node.properties.stepName} ${t('views.applicationWorkflow.validate.nodeUnavailable')}`
throw `${node.properties.stepName} ${t('views.workflow.validate.nodeUnavailable')}`
}
if (node.type === WorkflowType.Condition) {
const branch_list = node.properties.node_data.branch
@ -200,18 +200,18 @@ export class WorkFlowInstance {
const source_anchor_id = `${node.id}_${branch.id}_right`
const edge_list = this.edges.filter((edge) => edge.sourceAnchorId == source_anchor_id)
if (edge_list.length == 0) {
throw `${node.properties.stepName} ${t('views.applicationWorkflow.validate.needConnect1')}${branch.type}${t('views.applicationWorkflow.validate.needConnect2')}`
throw `${node.properties.stepName} ${t('views.workflow.validate.needConnect1')}${branch.type}${t('views.workflow.validate.needConnect2')}`
}
}
} else {
const edge_list = this.edges.filter((edge) => edge.sourceNodeId == node.id)
const end = end_nodes_dict[this.workflowModel]
if (edge_list.length == 0 && !end.includes(node.type)) {
throw `${node.properties.stepName} ${t('views.applicationWorkflow.validate.cannotEndNode')}`
throw `${node.properties.stepName} ${t('views.workflow.validate.cannotEndNode')}`
}
}
if (node.properties.status && node.properties.status !== 200) {
throw `${node.properties.stepName} ${t('views.applicationWorkflow.validate.nodeUnavailable')}`
throw `${node.properties.stepName} ${t('views.workflow.validate.nodeUnavailable')}`
}
}
}
@ -222,7 +222,7 @@ export class KnowledgeWorkFlowInstance extends WorkFlowInstance {
(item) => item.properties.kind === WorkflowKind.DataSource,
)
if (start_node_list.length == 0) {
throw t('views.applicationWorkflow.validate.startNodeRequired')
throw t('views.workflow.validate.startNodeRequired')
}
}
/**
@ -231,9 +231,9 @@ export class KnowledgeWorkFlowInstance extends WorkFlowInstance {
is_valid_base_node() {
const base_node_list = this.nodes.filter((item) => item.id === WorkflowType.KnowledgeBase)
if (base_node_list.length == 0) {
throw t('views.applicationWorkflow.validate.baseNodeRequired')
throw t('views.workflow.validate.baseNodeRequired')
} else if (base_node_list.length > 1) {
throw t('views.applicationWorkflow.validate.baseNodeOnly')
throw t('views.workflow.validate.baseNodeOnly')
}
}
@ -254,7 +254,7 @@ export class KnowledgeWorkFlowInstance extends WorkFlowInstance {
)
.filter((node) => !this.workFlowNodes.includes(node))
if (notInWorkFlowNodes.length > 0) {
throw `${t('views.applicationWorkflow.validate.notInWorkFlowNode')}:${notInWorkFlowNodes.map((node) => node.properties.stepName).join('')}`
throw `${t('views.workflow.validate.notInWorkFlowNode')}:${notInWorkFlowNodes.map((node) => node.properties.stepName).join('')}`
}
this.workFlowNodes = []
}
@ -266,7 +266,7 @@ export class KnowledgeWorkFlowInstance extends WorkFlowInstance {
node.properties.kind !== WorkflowKind.DataSource
) {
if (!this.edges.some((edge) => edge.targetNodeId === node.id)) {
throw `${t('views.applicationWorkflow.validate.notInWorkFlowNode')}:${node.properties.stepName}`
throw `${t('views.workflow.validate.notInWorkFlowNode')}:${node.properties.stepName}`
}
}
}

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never" style="--el-card-padding: 12px">
<el-form
@submit.prevent
@ -82,7 +82,7 @@
v-model="chat_data.system"
style="height: 100px"
@submitDialog="submitSystemDialog"
:placeholder="`${t('views.applicationWorkflow.SystemPromptPlaceholder')}{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`"
:placeholder="`${t('views.workflow.SystemPromptPlaceholder')}{{${t('views.workflow.nodes.startNode.label')}.question}}`"
/>
</el-form-item>
<el-form-item
@ -114,7 +114,7 @@
v-model="chat_data.prompt"
style="height: 150px"
@submitDialog="submitDialog"
:placeholder="`${t('views.applicationWorkflow.UserPromptPlaceholder')}{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`"
:placeholder="`${t('views.workflow.UserPromptPlaceholder')}{{${t('views.workflow.nodes.startNode.label')}.question}}`"
/>
</el-form-item>
<el-form-item :label="$t('views.application.form.historyRecord.label')">
@ -122,8 +122,8 @@
<div class="flex-between">
<div>{{ $t('views.application.form.historyRecord.label') }}</div>
<el-select v-model="chat_data.dialogue_type" type="small" style="width: 100px">
<el-option :label="$t('views.applicationWorkflow.node')" value="NODE" />
<el-option :label="$t('views.applicationWorkflow.workflow')" value="WORKFLOW" />
<el-option :label="$t('views.workflow.node')" value="NODE" />
<el-option :label="$t('views.workflow.workflow')" value="WORKFLOW" />
</el-select>
</div>
</template>
@ -292,12 +292,12 @@
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')
$t('views.workflow.nodes.aiChatNode.returnContent.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{ $t('views.applicationWorkflow.nodes.aiChatNode.returnContent.tooltip') }}
{{ $t('views.workflow.nodes.aiChatNode.returnContent.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
@ -376,10 +376,10 @@ const model_change = (model_id?: string) => {
}
}
const defaultPrompt = `${t('views.applicationWorkflow.nodes.aiChatNode.defaultPrompt')}
{{${t('views.applicationWorkflow.nodes.searchKnowledgeNode.label')}.data}}
const defaultPrompt = `${t('views.workflow.nodes.aiChatNode.defaultPrompt')}
{{${t('views.workflow.nodes.searchKnowledgeNode.label')}.data}}
${t('views.problem.title')}
{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`
{{${t('views.workflow.nodes.startNode.label')}.question}}`
const form = {
model_id: '',

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent
@ -11,11 +11,11 @@
ref="applicationNodeFormRef"
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.startNode.question')"
:label="$t('views.workflow.nodes.startNode.question')"
prop="question_reference_address"
:rules="{
message: $t(
'views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.requiredMessage',
'views.workflow.nodes.searchKnowledgeNode.searchQuestion.requiredMessage',
),
trigger: 'blur',
required: true,
@ -26,7 +26,7 @@
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
$t('views.workflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
"
v-model="form_data.question_reference_address"
/>
@ -53,11 +53,11 @@
<el-form-item
v-if="form_data.hasOwnProperty('image_list') || 'image_list' in form_data"
:label="$t('views.applicationWorkflow.nodes.imageUnderstandNode.image.label')"
:label="$t('views.workflow.nodes.imageUnderstandNode.image.label')"
prop="image_list"
:rules="{
message: $t(
'views.applicationWorkflow.nodes.imageUnderstandNode.image.requiredMessage',
'views.workflow.nodes.imageUnderstandNode.image.requiredMessage',
),
trigger: 'blur',
required: false,
@ -68,7 +68,7 @@
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.imageUnderstandNode.image.requiredMessage')
$t('views.workflow.nodes.imageUnderstandNode.image.requiredMessage')
"
v-model="form_data.image_list"
/>
@ -76,10 +76,10 @@
<el-form-item
v-if="form_data.hasOwnProperty('audio_list') || 'audio_list' in form_data"
:label="$t('views.applicationWorkflow.nodes.speechToTextNode.audio.label')"
:label="$t('views.workflow.nodes.speechToTextNode.audio.label')"
prop="audio_list"
:rules="{
message: $t('views.applicationWorkflow.nodes.speechToTextNode.audio.placeholder'),
message: $t('views.workflow.nodes.speechToTextNode.audio.placeholder'),
trigger: 'blur',
required: false,
}"
@ -88,17 +88,17 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.nodes.speechToTextNode.audio.placeholder')"
:placeholder="$t('views.workflow.nodes.speechToTextNode.audio.placeholder')"
v-model="form_data.audio_list"
/>
</el-form-item>
<el-form-item
v-if="form_data.hasOwnProperty('video_list') || 'video_list' in form_data"
:label="$t('views.applicationWorkflow.nodes.videoUnderstandNode.video.label')"
:label="$t('views.workflow.nodes.videoUnderstandNode.video.label')"
prop="video_list"
:rules="{
message: $t(
'views.applicationWorkflow.nodes.videoUnderstandNode.video.requiredMessage',
'views.workflow.nodes.videoUnderstandNode.video.requiredMessage',
),
trigger: 'blur',
required: false,
@ -109,7 +109,7 @@
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.videoUnderstandNode.video.requiredMessage')
$t('views.workflow.nodes.videoUnderstandNode.video.requiredMessage')
"
v-model="form_data.video_list"
/>
@ -131,7 +131,7 @@
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
$t('views.workflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
"
v-model="form_data.api_input_field_list[index].value"
/>
@ -155,26 +155,26 @@
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
$t('views.workflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
"
v-model="form_data.user_input_field_list[index].value"
/>
</el-form-item>
</div>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')"
:label="$t('views.workflow.nodes.aiChatNode.returnContent.label')"
@click.prevent
>
<template #label>
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')
$t('views.workflow.nodes.aiChatNode.returnContent.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{ $t('views.applicationWorkflow.nodes.aiChatNode.returnContent.tooltip') }}
{{ $t('views.workflow.nodes.aiChatNode.returnContent.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>

View File

@ -92,7 +92,7 @@ function deleteField(index: any) {
function refreshFieldList(data: any) {
for (let i = 0; i < inputFieldList.value.length; i++) {
if (inputFieldList.value[i].variable === data.variable && currentIndex.value !== i) {
MsgError(t('views.applicationWorkflow.tip.paramErrorMessage') + data.variable)
MsgError(t('views.workflow.tip.paramErrorMessage') + data.variable)
return
}
}
@ -100,7 +100,7 @@ function refreshFieldList(data: any) {
const arr = props.nodeModel.properties.user_input_field_list
for (let i = 0; i < arr.length; i++) {
if (arr[i].field === data.variable) {
MsgError(t('views.applicationWorkflow.tip.paramErrorMessage') + data.variable)
MsgError(t('views.workflow.tip.paramErrorMessage') + data.variable)
return
}
}

View File

@ -1,7 +1,7 @@
<template>
<div class="flex-between mb-16">
<h5 class="break-all ellipsis lighter" style="max-width: 80%">
{{ $t('views.applicationWorkflow.variable.chat') }}
{{ $t('views.workflow.variable.chat') }}
</h5>
<div>
<span class="ml-4">
@ -80,7 +80,7 @@ function deleteField(index: any) {
function refreshFieldList(data: any, index: any) {
for (let i = 0; i < inputFieldList.value.length; i++) {
if (inputFieldList.value[i].field === data.field && index !== i) {
MsgError(t('views.applicationWorkflow.tip.paramErrorMessage') + data.field)
MsgError(t('views.workflow.tip.paramErrorMessage') + data.field)
return
}
}

View File

@ -1,6 +1,6 @@
<template>
<el-dialog
:title="$t('views.applicationWorkflow.nodes.baseNode.FileUploadSetting.title')"
:title="$t('views.workflow.nodes.baseNode.FileUploadSetting.title')"
v-model="dialogVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
@ -20,7 +20,7 @@
require-asterisk-position="right"
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.baseNode.FileUploadSetting.maxFiles')"
:label="$t('views.workflow.nodes.baseNode.FileUploadSetting.maxFiles')"
>
<el-slider
v-model="form_data.maxFiles"
@ -31,7 +31,7 @@
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.baseNode.FileUploadSetting.fileLimit')"
:label="$t('views.workflow.nodes.baseNode.FileUploadSetting.fileLimit')"
>
<el-slider
v-model="form_data.fileLimit"
@ -43,7 +43,7 @@
</el-form-item>
<el-form-item
:label="
$t('views.applicationWorkflow.nodes.baseNode.FileUploadSetting.fileUploadType.label')
$t('views.workflow.nodes.baseNode.FileUploadSetting.fileUploadType.label')
"
>
<el-card
@ -62,7 +62,7 @@
<el-text class="color-secondary"
>{{
$t(
'views.applicationWorkflow.nodes.baseNode.FileUploadSetting.fileUploadType.documentText',
'views.workflow.nodes.baseNode.FileUploadSetting.fileUploadType.documentText',
)
}}
</el-text>
@ -92,7 +92,7 @@
<el-text class="color-secondary"
>{{
$t(
'views.applicationWorkflow.nodes.baseNode.FileUploadSetting.fileUploadType.imageText',
'views.workflow.nodes.baseNode.FileUploadSetting.fileUploadType.imageText',
)
}}
</el-text>
@ -123,7 +123,7 @@
<el-text class="color-secondary"
>{{
$t(
'views.applicationWorkflow.nodes.baseNode.FileUploadSetting.fileUploadType.audioText',
'views.workflow.nodes.baseNode.FileUploadSetting.fileUploadType.audioText',
)
}}
</el-text>
@ -158,7 +158,7 @@
<el-text class="color-secondary"
>{{
$t(
'views.applicationWorkflow.nodes.baseNode.FileUploadSetting.fileUploadType.videoText',
'views.workflow.nodes.baseNode.FileUploadSetting.fileUploadType.videoText',
)
}}
</el-text>
@ -188,7 +188,7 @@
<el-text class="color-secondary"
>{{
$t(
'views.applicationWorkflow.nodes.baseNode.FileUploadSetting.fileUploadType.otherText',
'views.workflow.nodes.baseNode.FileUploadSetting.fileUploadType.otherText',
)
}}
</el-text>

View File

@ -138,7 +138,7 @@ function deleteField(index: any) {
function refreshFieldList(data: any, index: any) {
for (let i = 0; i < inputFieldList.value.length; i++) {
if (inputFieldList.value[i].field === data.field && index !== i) {
MsgError(t('views.applicationWorkflow.tip.paramErrorMessage') + data.field)
MsgError(t('views.workflow.tip.paramErrorMessage') + data.field)
return
}
}
@ -146,7 +146,7 @@ function refreshFieldList(data: any, index: any) {
const arr = props.nodeModel.properties.api_input_field_list
for (let i = 0; i < arr.length; i++) {
if (arr[i].variable === data.field) {
MsgError(t('views.applicationWorkflow.tip.paramErrorMessage') + data.field)
MsgError(t('views.workflow.tip.paramErrorMessage') + data.field)
return
}
}

View File

@ -10,7 +10,7 @@
ref="baseNodeFormRef"
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.baseNode.appName.label')"
:label="$t('views.workflow.nodes.baseNode.appName.label')"
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('views.applicationWorkflow.nodes.baseNode.appDescription.label')">
<el-form-item :label="$t('views.workflow.nodes.baseNode.appDescription.label')">
<el-input
v-model="form_data.desc"
:placeholder="$t('views.application.form.appDescription.placeholder')"
@ -50,11 +50,11 @@
<div class="flex-between">
<div class="flex align-center">
<span class="mr-4">{{
$t('views.applicationWorkflow.nodes.baseNode.fileUpload.label')
$t('views.workflow.nodes.baseNode.fileUpload.label')
}}</span>
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.nodes.baseNode.fileUpload.tooltip')"
:content="$t('views.workflow.nodes.baseNode.fileUpload.tooltip')"
placement="right"
>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>

View File

@ -34,7 +34,7 @@
</span>
<div class="info" v-if="item.conditions.length > 1">
<span>{{
$t('views.applicationWorkflow.nodes.conditionNode.conditions.info')
$t('views.workflow.nodes.conditionNode.conditions.info')
}}</span>
<el-select
:teleported="false"
@ -42,11 +42,11 @@
size="small"
style="width: 60px; margin: 0 8px"
>
<el-option :label="$t('views.applicationWorkflow.condition.AND')" value="and" />
<el-option :label="$t('views.applicationWorkflow.condition.OR')" value="or" />
<el-option :label="$t('views.workflow.condition.AND')" value="and" />
<el-option :label="$t('views.workflow.condition.OR')" value="or" />
</el-select>
<span>{{
$t('views.applicationWorkflow.nodes.conditionNode.conditions.label')
$t('views.workflow.nodes.conditionNode.conditions.label')
}}</span>
</div>
</div>
@ -59,7 +59,7 @@
:rules="{
type: 'array',
required: true,
message: $t('views.applicationWorkflow.variable.placeholder'),
message: $t('views.workflow.variable.placeholder'),
trigger: 'change',
}"
>
@ -67,7 +67,7 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="condition.field"
/>
</el-form-item>
@ -78,7 +78,7 @@
:rules="{
required: true,
message: $t(
'views.applicationWorkflow.nodes.conditionNode.conditions.requiredMessage',
'views.workflow.nodes.conditionNode.conditions.requiredMessage',
),
trigger: 'change',
}"
@ -89,7 +89,7 @@
v-model="condition.compare"
:placeholder="
$t(
'views.applicationWorkflow.nodes.conditionNode.conditions.requiredMessage',
'views.workflow.nodes.conditionNode.conditions.requiredMessage',
)
"
clearable
@ -111,14 +111,14 @@
:prop="'branch.' + index + '.conditions.' + cIndex + '.value'"
:rules="{
required: true,
message: $t('views.applicationWorkflow.nodes.conditionNode.valueMessage'),
message: $t('views.workflow.nodes.conditionNode.valueMessage'),
trigger: 'blur',
}"
>
<el-input
v-model="condition.value"
:placeholder="
$t('views.applicationWorkflow.nodes.conditionNode.valueMessage')
$t('views.workflow.nodes.conditionNode.valueMessage')
"
/>
</el-form-item>
@ -145,14 +145,14 @@
v-if="index !== form_data.branch.length - 1"
>
<AppIcon iconName="app-add-outlined" class="mr-4"></AppIcon>
{{ $t('views.applicationWorkflow.nodes.conditionNode.addCondition') }}
{{ $t('views.workflow.nodes.conditionNode.addCondition') }}
</el-button>
</el-card>
</template>
</VueDraggable>
<el-button link type="primary" @click="addBranch">
<AppIcon iconName="app-add-outlined" class="mr-4"></AppIcon>
{{ $t('views.applicationWorkflow.nodes.conditionNode.addBranch') }}
{{ $t('views.workflow.nodes.conditionNode.addBranch') }}
</el-button>
</el-form>
</NodeContainer>

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent
@ -12,7 +12,7 @@
<el-form-item
:label="
$t(
'views.applicationWorkflow.nodes.dataSourceLocalNode.fileFormat.label',
'views.workflow.nodes.dataSourceLocalNode.fileFormat.label',
'支持的文件格式',
)
"
@ -20,7 +20,7 @@
type: 'array',
required: true,
message: $t(
'views.applicationWorkflow.nodes.dataSourceLocalNode.fileFormat.message',
'views.workflow.nodes.dataSourceLocalNode.fileFormat.message',
'请选择文件格式',
),
trigger: 'change',
@ -30,7 +30,7 @@
v-model="form_data.file_type_list"
:placeholder="
$t(
'views.applicationWorkflow.nodes.dataSourceLocalNode.fileFormat.placeholder',
'views.workflow.nodes.dataSourceLocalNode.fileFormat.placeholder',
'请选择文件格式',
)
"
@ -52,7 +52,7 @@
<el-form-item
:label="
$t(
'views.applicationWorkflow.nodes.dataSourceLocalNode.maxFileNumber.label',
'views.workflow.nodes.dataSourceLocalNode.maxFileNumber.label',
'每次上传最大文件数',
)
"
@ -60,7 +60,7 @@
type: 'array',
required: true,
message: $t(
'views.applicationWorkflow.nodes.dataSourceLocalNode.maxFileNumber.placeholder',
'views.workflow.nodes.dataSourceLocalNode.maxFileNumber.placeholder',
'请输入最大文件数',
),
trigger: 'change',
@ -71,7 +71,7 @@
<el-form-item
:label="
$t(
'views.applicationWorkflow.nodes.dataSourceLocalNode.maxFileNumber.label',
'views.workflow.nodes.dataSourceLocalNode.maxFileNumber.label',
'上传的每个文档最大(MB)',
)
"
@ -79,7 +79,7 @@
type: 'array',
required: true,
message: $t(
'views.applicationWorkflow.nodes.dataSourceLocalNode.maxFileNumber.placeholder',
'views.workflow.nodes.dataSourceLocalNode.maxFileNumber.placeholder',
'上传的每个文档最大(MB) 必填',
),
trigger: 'change',

View File

@ -1,8 +1,8 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<h4>{{ $t('views.applicationWorkflow.nodes.dataSourceWebNode.display') }}</h4>
<h4>{{ $t('views.workflow.nodes.dataSourceWebNode.display') }}</h4>
</el-card>
</NodeContainer>
</template>

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
ref="aiChatNodeFormRef"
@ -26,16 +26,16 @@
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.documentSplitNode.splitStrategy.label')"
:label="$t('views.workflow.nodes.documentSplitNode.splitStrategy.label')"
:rules="{
required: true,
message: $t('views.applicationWorkflow.nodes.documentSplitNode.splitStrategy.required'),
message: $t('views.workflow.nodes.documentSplitNode.splitStrategy.required'),
trigger: 'change'
}"
>
<el-select
v-model="form_data.split_strategy"
:placeholder="$t('views.applicationWorkflow.nodes.documentSplitNode.splitStrategy.placeholder')">
:placeholder="$t('views.workflow.nodes.documentSplitNode.splitStrategy.placeholder')">
<el-option
:label="$t('views.document.setRules.intelligent.label')"
value="auto"
@ -118,11 +118,11 @@
<el-select v-model="form_data.paragraph_title_relate_problem_type" size="small"
style="width: 100px">
<el-option
:label="$t('views.applicationWorkflow.nodes.searchDocumentNode.custom')"
:label="$t('views.workflow.nodes.searchDocumentNode.custom')"
value="custom"
/>
<el-option
:label="$t('views.applicationWorkflow.variable.Referencing')"
:label="$t('views.workflow.variable.Referencing')"
value="referencing"
/>
</el-select>
@ -149,11 +149,11 @@
<el-select v-model="form_data.document_name_relate_problem_type" size="small"
style="width: 100px">
<el-option
:label="$t('views.applicationWorkflow.nodes.searchDocumentNode.custom')"
:label="$t('views.workflow.nodes.searchDocumentNode.custom')"
value="custom"
/>
<el-option
:label="$t('views.applicationWorkflow.variable.Referencing')"
:label="$t('views.workflow.variable.Referencing')"
value="referencing"
/>
</el-select>

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never" style="--el-card-padding: 12px">
<el-form
@submit.prevent
@ -12,11 +12,11 @@
hide-required-asterisk
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.formNode.formContent.label')"
:label="$t('views.workflow.nodes.formNode.formContent.label')"
prop="form_content_format"
:rules="{
required: true,
message: $t('views.applicationWorkflow.nodes.formNode.formContent.requiredMessage'),
message: $t('views.workflow.nodes.formNode.formContent.requiredMessage'),
trigger: 'blur',
}"
>
@ -24,14 +24,14 @@
<div class="flex align-center">
<div class="mr-4">
<span
>{{ $t('views.applicationWorkflow.nodes.formNode.formContent.label')
>{{ $t('views.workflow.nodes.formNode.formContent.label')
}}<span class="color-danger">*</span></span
>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{
$t('views.applicationWorkflow.nodes.formNode.formContent.tooltip', {
$t('views.workflow.nodes.formNode.formContent.tooltip', {
form: '{ form }',
})
}}
@ -41,20 +41,20 @@
</div>
</template>
<MdEditorMagnify
:title="$t('views.applicationWorkflow.nodes.formNode.formContent.label')"
:title="$t('views.workflow.nodes.formNode.formContent.label')"
v-model="form_data.form_content_format"
style="height: 150px"
@submitDialog="submitDialog"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.formNode.formSetting')"
:label="$t('views.workflow.nodes.formNode.formSetting')"
@click.prevent
>
<template #label>
<div class="flex-between">
<h5 class="lighter">
{{ $t('views.applicationWorkflow.nodes.formNode.formSetting') }}
{{ $t('views.workflow.nodes.formNode.formSetting') }}
</h5>
<el-button link type="primary" @click="openAddFormCollect()">
<AppIcon iconName="app-add-outlined" class="mr-4"></AppIcon>
@ -167,7 +167,7 @@ const editFormField = (form_field_data: any, field_index: number) => {
}
const addFormField = (form_field_data: any) => {
if (form_data.value.form_field_list.some((field: any) => field.field === form_field_data.field)) {
MsgError(t('views.applicationWorkflow.tip.paramErrorMessage') + form_field_data.field)
MsgError(t('views.workflow.tip.paramErrorMessage') + form_field_data.field)
return
}
form_data.value.form_field_list = cloneDeep([...form_data.value.form_field_list, form_field_data])
@ -176,7 +176,7 @@ const addFormField = (form_field_data: any) => {
const sync_form_field_list = () => {
const fields = [
{
label: t('views.applicationWorkflow.nodes.formNode.formAllContent'),
label: t('views.workflow.nodes.formNode.formAllContent'),
value: 'form_data',
},
...form_data.value.form_field_list.map((item: any) => ({
@ -204,9 +204,9 @@ const deleteField = (form_field_data: any) => {
}
const form = ref<any>({
is_result: true,
form_content_format: `${t('views.applicationWorkflow.nodes.formNode.form_content_format1')}
form_content_format: `${t('views.workflow.nodes.formNode.form_content_format1')}
{{form}}
${t('views.applicationWorkflow.nodes.formNode.form_content_format2')}`,
${t('views.workflow.nodes.formNode.form_content_format2')}`,
form_field_list: [],
})
const form_data = computed({

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :node-model="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent
@ -12,11 +12,11 @@
hide-required-asterisk
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.imageGenerateNode.model.label')"
:label="$t('views.workflow.nodes.imageGenerateNode.model.label')"
prop="model_id"
:rules="{
required: true,
message: $t('views.applicationWorkflow.nodes.imageGenerateNode.model.requiredMessage'),
message: $t('views.workflow.nodes.imageGenerateNode.model.requiredMessage'),
trigger: 'change',
}"
>
@ -24,7 +24,7 @@
<div class="flex-between w-full">
<div>
<span
>{{ $t('views.applicationWorkflow.nodes.imageGenerateNode.model.label')
>{{ $t('views.workflow.nodes.imageGenerateNode.model.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -46,7 +46,7 @@
:teleported="false"
v-model="form_data.model_id"
:placeholder="
$t('views.applicationWorkflow.nodes.imageGenerateNode.model.requiredMessage')
$t('views.workflow.nodes.imageGenerateNode.model.requiredMessage')
"
:options="modelOptions"
showFooter
@ -56,7 +56,7 @@
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.imageGenerateNode.prompt.label')"
:label="$t('views.workflow.nodes.imageGenerateNode.prompt.label')"
prop="prompt"
:rules="{
required: true,
@ -68,13 +68,13 @@
<div class="flex align-center">
<div class="mr-4">
<span
>{{ $t('views.applicationWorkflow.nodes.imageGenerateNode.prompt.label')
>{{ $t('views.workflow.nodes.imageGenerateNode.prompt.label')
}}<span class="color-danger">*</span></span
>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content
>{{ $t('views.applicationWorkflow.nodes.imageGenerateNode.prompt.tooltip') }}
>{{ $t('views.workflow.nodes.imageGenerateNode.prompt.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
@ -82,14 +82,14 @@
</template>
<MdEditorMagnify
@wheel="wheel"
:title="$t('views.applicationWorkflow.nodes.imageGenerateNode.prompt.label')"
:title="$t('views.workflow.nodes.imageGenerateNode.prompt.label')"
v-model="form_data.prompt"
style="height: 150px"
@submitDialog="submitDialog"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.imageGenerateNode.negative_prompt.label')"
:label="$t('views.workflow.nodes.imageGenerateNode.negative_prompt.label')"
prop="prompt"
:rules="{
required: false,
@ -101,13 +101,13 @@
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.imageGenerateNode.negative_prompt.label')
$t('views.workflow.nodes.imageGenerateNode.negative_prompt.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content
>{{
$t('views.applicationWorkflow.nodes.imageGenerateNode.negative_prompt.tooltip')
$t('views.workflow.nodes.imageGenerateNode.negative_prompt.tooltip')
}}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
@ -116,29 +116,29 @@
</template>
<MdEditorMagnify
@wheel="wheel"
:title="$t('views.applicationWorkflow.nodes.imageGenerateNode.negative_prompt.label')"
:title="$t('views.workflow.nodes.imageGenerateNode.negative_prompt.label')"
v-model="form_data.negative_prompt"
:placeholder="
$t('views.applicationWorkflow.nodes.imageGenerateNode.negative_prompt.placeholder')
$t('views.workflow.nodes.imageGenerateNode.negative_prompt.placeholder')
"
style="height: 150px"
@submitDialog="submitNegativeDialog"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')"
:label="$t('views.workflow.nodes.aiChatNode.returnContent.label')"
@click.prevent
>
<template #label>
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')
$t('views.workflow.nodes.aiChatNode.returnContent.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{ $t('views.applicationWorkflow.nodes.aiChatNode.returnContent.tooltip') }}
{{ $t('views.workflow.nodes.aiChatNode.returnContent.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
@ -197,7 +197,7 @@ const wheel = (e: any) => {
}
}
const defaultPrompt = `{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`
const defaultPrompt = `{{${t('views.workflow.nodes.startNode.label')}.question}}`
const form = {
model_id: '',

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :node-model="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent
@ -12,12 +12,12 @@
hide-required-asterisk
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.imageToVideoGenerate.model.label')"
:label="$t('views.workflow.nodes.imageToVideoGenerate.model.label')"
prop="model_id"
:rules="{
required: true,
message: $t(
'views.applicationWorkflow.nodes.imageToVideoGenerate.model.requiredMessage',
'views.workflow.nodes.imageToVideoGenerate.model.requiredMessage',
),
trigger: 'change',
}"
@ -26,7 +26,7 @@
<div class="flex-between w-full">
<div>
<span
>{{ $t('views.applicationWorkflow.nodes.imageToVideoGenerate.model.label')
>{{ $t('views.workflow.nodes.imageToVideoGenerate.model.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -49,7 +49,7 @@
v-model="form_data.model_id"
@focus="getSelectModel"
:placeholder="
$t('views.applicationWorkflow.nodes.imageToVideoGenerate.model.requiredMessage')
$t('views.workflow.nodes.imageToVideoGenerate.model.requiredMessage')
"
:options="modelOptions"
showFooter
@ -58,7 +58,7 @@
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.imageToVideoGenerate.prompt.label')"
:label="$t('views.workflow.nodes.imageToVideoGenerate.prompt.label')"
prop="prompt"
:rules="{
required: true,
@ -70,13 +70,13 @@
<div class="flex align-center">
<div class="mr-4">
<span
>{{ $t('views.applicationWorkflow.nodes.imageToVideoGenerate.prompt.label')
>{{ $t('views.workflow.nodes.imageToVideoGenerate.prompt.label')
}}<span class="color-danger">*</span></span
>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content
>{{ $t('views.applicationWorkflow.nodes.imageToVideoGenerate.prompt.tooltip') }}
>{{ $t('views.workflow.nodes.imageToVideoGenerate.prompt.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
@ -84,14 +84,14 @@
</template>
<MdEditorMagnify
@wheel="wheel"
:title="$t('views.applicationWorkflow.nodes.imageToVideoGenerate.prompt.label')"
:title="$t('views.workflow.nodes.imageToVideoGenerate.prompt.label')"
v-model="form_data.prompt"
style="height: 150px"
@submitDialog="submitDialog"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.imageToVideoGenerate.negative_prompt.label')"
:label="$t('views.workflow.nodes.imageToVideoGenerate.negative_prompt.label')"
prop="prompt"
:rules="{
required: false,
@ -103,14 +103,14 @@
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.imageToVideoGenerate.negative_prompt.label')
$t('views.workflow.nodes.imageToVideoGenerate.negative_prompt.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content
>{{
$t(
'views.applicationWorkflow.nodes.imageToVideoGenerate.negative_prompt.tooltip',
'views.workflow.nodes.imageToVideoGenerate.negative_prompt.tooltip',
)
}}
</template>
@ -121,29 +121,29 @@
<MdEditorMagnify
@wheel="wheel"
:title="
$t('views.applicationWorkflow.nodes.imageToVideoGenerate.negative_prompt.label')
$t('views.workflow.nodes.imageToVideoGenerate.negative_prompt.label')
"
v-model="form_data.negative_prompt"
:placeholder="
$t('views.applicationWorkflow.nodes.imageToVideoGenerate.negative_prompt.placeholder')
$t('views.workflow.nodes.imageToVideoGenerate.negative_prompt.placeholder')
"
style="height: 150px"
@submitDialog="submitNegativeDialog"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.imageToVideoGenerate.first_frame.label')"
:label="$t('views.workflow.nodes.imageToVideoGenerate.first_frame.label')"
:rules="{
type: 'array',
required: true,
message: $t(
'views.applicationWorkflow.nodes.imageToVideoGenerate.first_frame.requiredMessage',
'views.workflow.nodes.imageToVideoGenerate.first_frame.requiredMessage',
),
trigger: 'change',
}"
>
<template #label
>{{ $t('views.applicationWorkflow.nodes.imageToVideoGenerate.first_frame.label')
>{{ $t('views.workflow.nodes.imageToVideoGenerate.first_frame.label')
}}<span class="color-danger">*</span></template
>
<NodeCascader
@ -151,50 +151,50 @@
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.imageToVideoGenerate.first_frame.requiredMessage')
$t('views.workflow.nodes.imageToVideoGenerate.first_frame.requiredMessage')
"
v-model="form_data.first_frame_url"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.imageToVideoGenerate.last_frame.label')"
:label="$t('views.workflow.nodes.imageToVideoGenerate.last_frame.label')"
:rules="{
type: 'array',
required: false,
message: $t(
'views.applicationWorkflow.nodes.imageToVideoGenerate.last_frame.requiredMessage',
'views.workflow.nodes.imageToVideoGenerate.last_frame.requiredMessage',
),
trigger: 'change',
}"
>
<template #label
>{{ $t('views.applicationWorkflow.nodes.imageToVideoGenerate.last_frame.label') }}
>{{ $t('views.workflow.nodes.imageToVideoGenerate.last_frame.label') }}
</template>
<NodeCascader
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.imageToVideoGenerate.last_frame.requiredMessage')
$t('views.workflow.nodes.imageToVideoGenerate.last_frame.requiredMessage')
"
clearable
v-model="form_data.last_frame_url"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')"
:label="$t('views.workflow.nodes.aiChatNode.returnContent.label')"
@click.prevent
>
<template #label>
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')
$t('views.workflow.nodes.aiChatNode.returnContent.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{ $t('views.applicationWorkflow.nodes.aiChatNode.returnContent.tooltip') }}
{{ $t('views.workflow.nodes.aiChatNode.returnContent.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
@ -255,7 +255,7 @@ const wheel = (e: any) => {
}
}
const defaultPrompt = `{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`
const defaultPrompt = `{{${t('views.workflow.nodes.startNode.label')}.question}}`
const form = {
model_id: '',

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :node-model="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent
@ -12,12 +12,12 @@
hide-required-asterisk
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.imageUnderstandNode.model.label')"
:label="$t('views.workflow.nodes.imageUnderstandNode.model.label')"
prop="model_id"
:rules="{
required: true,
message: $t(
'views.applicationWorkflow.nodes.imageUnderstandNode.model.requiredMessage',
'views.workflow.nodes.imageUnderstandNode.model.requiredMessage',
),
trigger: 'change',
}"
@ -26,7 +26,7 @@
<div class="flex-between w-full">
<div>
<span
>{{ t('views.applicationWorkflow.nodes.imageUnderstandNode.model.label')
>{{ t('views.workflow.nodes.imageUnderstandNode.model.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -47,7 +47,7 @@
:teleported="false"
v-model="form_data.model_id"
:placeholder="
$t('views.applicationWorkflow.nodes.imageUnderstandNode.model.requiredMessage')
$t('views.workflow.nodes.imageUnderstandNode.model.requiredMessage')
"
:options="modelOptions"
showFooter
@ -83,7 +83,7 @@
v-model="form_data.system"
style="height: 100px"
@submitDialog="submitSystemDialog"
:placeholder="`${t('views.applicationWorkflow.SystemPromptPlaceholder')}{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`"
:placeholder="`${t('views.workflow.SystemPromptPlaceholder')}{{${t('views.workflow.nodes.startNode.label')}.question}}`"
/>
</el-form-item>
<el-form-item
@ -115,7 +115,7 @@
v-model="form_data.prompt"
style="height: 150px"
@submitDialog="submitDialog"
:placeholder="`${t('views.applicationWorkflow.UserPromptPlaceholder')}{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`"
:placeholder="`${t('views.workflow.UserPromptPlaceholder')}{{${t('views.workflow.nodes.startNode.label')}.question}}`"
/>
</el-form-item>
<el-form-item>
@ -123,8 +123,8 @@
<div class="flex-between">
<div>{{ $t('views.application.form.historyRecord.label') }}</div>
<el-select v-model="form_data.dialogue_type" type="small" style="width: 100px">
<el-option :label="$t('views.applicationWorkflow.node')" value="NODE" />
<el-option :label="$t('views.applicationWorkflow.workflow')" value="WORKFLOW" />
<el-option :label="$t('views.workflow.node')" value="NODE" />
<el-option :label="$t('views.workflow.workflow')" value="WORKFLOW" />
</el-select>
</div>
</template>
@ -139,18 +139,18 @@
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.imageUnderstandNode.image.label')"
:label="$t('views.workflow.nodes.imageUnderstandNode.image.label')"
:rules="{
type: 'array',
required: true,
message: $t(
'views.applicationWorkflow.nodes.imageUnderstandNode.image.requiredMessage',
'views.workflow.nodes.imageUnderstandNode.image.requiredMessage',
),
trigger: 'change',
}"
>
<template #label
>{{ $t('views.applicationWorkflow.nodes.imageUnderstandNode.image.label')
>{{ $t('views.workflow.nodes.imageUnderstandNode.image.label')
}}<span class="color-danger">*</span></template
>
<NodeCascader
@ -158,25 +158,25 @@
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.imageUnderstandNode.image.requiredMessage')
$t('views.workflow.nodes.imageUnderstandNode.image.requiredMessage')
"
v-model="form_data.image_list"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')"
:label="$t('views.workflow.nodes.aiChatNode.returnContent.label')"
@click.prevent
>
<template #label>
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')
$t('views.workflow.nodes.aiChatNode.returnContent.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{ $t('views.applicationWorkflow.nodes.aiChatNode.returnContent.tooltip') }}
{{ $t('views.workflow.nodes.aiChatNode.returnContent.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
@ -243,7 +243,7 @@ const wheel = (e: any) => {
}
}
const defaultPrompt = `{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`
const defaultPrompt = `{{${t('views.workflow.nodes.startNode.label')}.question}}`
const form = {
model_id: '',

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never" style="--el-card-padding: 12px">
<el-form
@submit.prevent
@ -53,9 +53,9 @@
</el-form-item>
<el-form-item
prop="content_list"
:label="$t('views.applicationWorkflow.nodes.intentNode.input.label')"
:label="$t('views.workflow.nodes.intentNode.input.label')"
:rules="{
message: $t('views.applicationWorkflow.nodes.textToSpeechNode.content.label'),
message: $t('views.workflow.nodes.textToSpeechNode.content.label'),
trigger: 'change',
required: true,
}"
@ -64,7 +64,7 @@
<div class="flex-between">
<div>
<span
>{{ $t('views.applicationWorkflow.nodes.intentNode.input.label')
>{{ $t('views.workflow.nodes.intentNode.input.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -74,7 +74,7 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.nodes.textToSpeechNode.content.label')"
:placeholder="$t('views.workflow.nodes.textToSpeechNode.content.label')"
v-model="form_data.content_list"
/>
</el-form-item>
@ -94,7 +94,7 @@
<div class="flex-between">
<div>
<span
>{{ $t('views.applicationWorkflow.nodes.intentNode.classify.label')
>{{ $t('views.workflow.nodes.intentNode.classify.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -108,7 +108,7 @@
<el-form-item
:prop="`branch.${index}.content`"
:rules="{
message: $t('views.applicationWorkflow.nodes.intentNode.classify.placeholder'),
message: $t('views.workflow.nodes.intentNode.classify.placeholder'),
trigger: 'change',
required: true,
}"
@ -120,7 +120,7 @@
style="width: 210px"
:disabled="item.isOther"
:placeholder="
$t('views.applicationWorkflow.nodes.intentNode.classify.placeholder')
$t('views.workflow.nodes.intentNode.classify.placeholder')
"
/>
</el-col>
@ -289,7 +289,7 @@ const form = {
},
{
id: randomId(),
content: t('views.applicationWorkflow.nodes.intentNode.other'),
content: t('views.workflow.nodes.intentNode.other'),
isOther: true,
},
],
@ -335,7 +335,7 @@ const validate = () => {
form_data.value.branch.length !=
new Set(form_data.value.branch.map((item: any) => item.content)).size
) {
throw t('views.applicationWorkflow.nodes.intentNode.error2')
throw t('views.workflow.nodes.intentNode.error2')
}
})
.catch((err: any) => {

View File

@ -144,7 +144,7 @@ function deleteField(index: any) {
function refreshFieldList(data: any, index: any) {
for (let i = 0; i < inputFieldList.value.length; i++) {
if (inputFieldList.value[i].field === data.field && index !== i) {
MsgError(t('views.applicationWorkflow.tip.paramErrorMessage') + data.field)
MsgError(t('views.workflow.tip.paramErrorMessage') + data.field)
return
}
}

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent
@ -15,10 +15,10 @@
prop="document_list"
:label="$t('common.inputContent')"
:rules="{
message: $t('views.applicationWorkflow.nodes.textToSpeechNode.content.label'),
message: $t('views.workflow.nodes.textToSpeechNode.content.label'),
trigger: 'change',
required: true,
}"
}"
>
<template #label>
<div class="flex-between">
@ -34,7 +34,7 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.nodes.textToSpeechNode.content.label')"
:placeholder="$t('views.workflow.nodes.textToSpeechNode.content.label')"
v-model="form_data.document_list"
/>
</el-form-item>

View File

@ -34,8 +34,8 @@
class="mb-16"
:title="
props.nodeModel.type === 'application-node'
? $t('views.applicationWorkflow.tip.applicationNodeError')
: $t('views.applicationWorkflow.tip.functionNodeError')
? $t('views.workflow.tip.applicationNodeError')
: $t('views.workflow.tip.functionNodeError')
"
type="error"
show-icon
@ -58,7 +58,7 @@
<span class="break-all">{{ item.label }} {{ '{' + item.value + '}' }}</span>
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.setting.copyParam')"
:content="$t('views.workflow.setting.copyParam')"
placement="top"
v-if="showicon === index"
>
@ -75,7 +75,7 @@
</div>
<el-dialog
:title="$t('views.applicationWorkflow.nodeName')"
:title="$t('views.workflow.nodeName')"
v-model="nodeNameDialogVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
@ -163,7 +163,7 @@ const editName = async (formEl: FormInstance | undefined) => {
nodeNameDialogVisible.value = false
formEl.resetFields()
} else {
ElMessage.error(t('views.applicationWorkflow.tip.repeatedNodeError'))
ElMessage.error(t('views.workflow.tip.repeatedNodeError'))
}
}
})

View File

@ -6,7 +6,7 @@ class LoopBodyNodeView extends AppNode {
super(props, LoopNode)
}
getNodeName() {
return t('views.applicationWorkflow.nodes.loopBodyNode.label')
return t('views.workflow.nodes.loopBodyNode.label')
}
get_up_node_field_list(contain_self: boolean, use_cache: boolean) {
const loop_node_id = this.props.model.properties.loop_node_id

View File

@ -31,7 +31,7 @@ const validate = () => {
if (loop_node.properties.node_data.loop_type == 'LOOP' && !workflow.exist_break_node()) {
return Promise.reject({
node: loop_node,
errMessage: t('views.applicationWorkflow.validate.loopNodeBreakNodeRequired'),
errMessage: t('views.workflow.validate.loopNodeBreakNodeRequired'),
})
}

View File

@ -11,17 +11,17 @@
>
<div class="handle flex-between lighter mb-8">
<div class="info" v-if="form_data.condition_list.length > 1">
<span>{{ $t('views.applicationWorkflow.nodes.conditionNode.conditions.info') }}</span>
<span>{{ $t('views.workflow.nodes.conditionNode.conditions.info') }}</span>
<el-select
:teleported="false"
v-model="form_data.condition"
size="small"
style="width: 60px; margin: 0 8px"
>
<el-option :label="$t('views.applicationWorkflow.condition.AND')" value="and" />
<el-option :label="$t('views.applicationWorkflow.condition.OR')" value="or" />
<el-option :label="$t('views.workflow.condition.AND')" value="and" />
<el-option :label="$t('views.workflow.condition.OR')" value="or" />
</el-select>
<span>{{ $t('views.applicationWorkflow.nodes.conditionNode.conditions.label') }}</span>
<span>{{ $t('views.workflow.nodes.conditionNode.conditions.label') }}</span>
</div>
</div>
<template v-for="(condition, index) in form_data.condition_list" :key="index">
@ -32,7 +32,7 @@
:rules="{
type: 'array',
required: true,
message: $t('views.applicationWorkflow.variable.placeholder'),
message: $t('views.workflow.variable.placeholder'),
trigger: 'change',
}"
>
@ -40,7 +40,7 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="condition.field"
/>
</el-form-item>
@ -51,7 +51,7 @@
:rules="{
required: true,
message: $t(
'views.applicationWorkflow.nodes.conditionNode.conditions.requiredMessage',
'views.workflow.nodes.conditionNode.conditions.requiredMessage',
),
trigger: 'change',
}"
@ -61,7 +61,7 @@
:teleported="false"
v-model="condition.compare"
:placeholder="
$t('views.applicationWorkflow.nodes.conditionNode.conditions.requiredMessage')
$t('views.workflow.nodes.conditionNode.conditions.requiredMessage')
"
clearable
>
@ -79,13 +79,13 @@
:prop="'condition_list.' + index + '.value'"
:rules="{
required: true,
message: $t('views.applicationWorkflow.nodes.conditionNode.valueMessage'),
message: $t('views.workflow.nodes.conditionNode.valueMessage'),
trigger: 'blur',
}"
>
<el-input
v-model="condition.value"
:placeholder="$t('views.applicationWorkflow.nodes.conditionNode.valueMessage')"
:placeholder="$t('views.workflow.nodes.conditionNode.valueMessage')"
/>
</el-form-item>
</el-col>
@ -100,7 +100,7 @@
<el-button link type="primary" @click="addCondition()">
<AppIcon iconName="app-add-outlined" class="mr-4"></AppIcon>
{{ $t('views.applicationWorkflow.nodes.conditionNode.addCondition') }}
{{ $t('views.workflow.nodes.conditionNode.addCondition') }}
</el-button>
</el-card>
</NodeContainer>

View File

@ -11,17 +11,17 @@
>
<div class="handle flex-between lighter mb-8">
<div class="info" v-if="form_data.condition_list.length > 1">
<span>{{ $t('views.applicationWorkflow.nodes.conditionNode.conditions.info') }}</span>
<span>{{ $t('views.workflow.nodes.conditionNode.conditions.info') }}</span>
<el-select
:teleported="false"
v-model="form_data.condition"
size="small"
style="width: 60px; margin: 0 8px"
>
<el-option :label="$t('views.applicationWorkflow.condition.AND')" value="and" />
<el-option :label="$t('views.applicationWorkflow.condition.OR')" value="or" />
<el-option :label="$t('views.workflow.condition.AND')" value="and" />
<el-option :label="$t('views.workflow.condition.OR')" value="or" />
</el-select>
<span>{{ $t('views.applicationWorkflow.nodes.conditionNode.conditions.label') }}</span>
<span>{{ $t('views.workflow.nodes.conditionNode.conditions.label') }}</span>
</div>
</div>
<template v-for="(condition, index) in form_data.condition_list" :key="index">
@ -32,7 +32,7 @@
:rules="{
type: 'array',
required: true,
message: $t('views.applicationWorkflow.variable.placeholder'),
message: $t('views.workflow.variable.placeholder'),
trigger: 'change',
}"
>
@ -40,7 +40,7 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="condition.field"
/>
</el-form-item>
@ -51,7 +51,7 @@
:rules="{
required: true,
message: $t(
'views.applicationWorkflow.nodes.conditionNode.conditions.requiredMessage',
'views.workflow.nodes.conditionNode.conditions.requiredMessage',
),
trigger: 'change',
}"
@ -61,7 +61,7 @@
:teleported="false"
v-model="condition.compare"
:placeholder="
$t('views.applicationWorkflow.nodes.conditionNode.conditions.requiredMessage')
$t('views.workflow.nodes.conditionNode.conditions.requiredMessage')
"
clearable
>
@ -79,13 +79,13 @@
:prop="'condition_list.' + index + '.value'"
:rules="{
required: true,
message: $t('views.applicationWorkflow.nodes.conditionNode.valueMessage'),
message: $t('views.workflow.nodes.conditionNode.valueMessage'),
trigger: 'blur',
}"
>
<el-input
v-model="condition.value"
:placeholder="$t('views.applicationWorkflow.nodes.conditionNode.valueMessage')"
:placeholder="$t('views.workflow.nodes.conditionNode.valueMessage')"
/>
</el-form-item>
</el-col>
@ -100,7 +100,7 @@
<el-button link type="primary" @click="addCondition()">
<AppIcon iconName="app-add-outlined" class="mr-4"></AppIcon>
{{ $t('views.applicationWorkflow.nodes.conditionNode.addCondition') }}
{{ $t('views.workflow.nodes.conditionNode.addCondition') }}
</el-button>
</el-card>
</NodeContainer>

View File

@ -10,37 +10,37 @@
ref="replyNodeFormRef"
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.loopNode.loopType.label')"
:label="$t('views.workflow.nodes.loopNode.loopType.label')"
@click.prevent
prop="loop_type"
:rules="{
message: $t('views.applicationWorkflow.nodes.loopNode.loopType.requiredMessage'),
message: $t('views.workflow.nodes.loopNode.loopType.requiredMessage'),
trigger: 'change',
required: true,
}"
>
<el-select v-model="form_data.loop_type" type="small">
<el-option
:label="$t('views.applicationWorkflow.nodes.loopNode.loopType.arrayLoop')"
:label="$t('views.workflow.nodes.loopNode.loopType.arrayLoop')"
value="ARRAY"
/>
<el-option
:label="$t('views.applicationWorkflow.nodes.loopNode.loopType.numberLoop')"
:label="$t('views.workflow.nodes.loopNode.loopType.numberLoop')"
value="NUMBER"
/>
<el-option
:label="$t('views.applicationWorkflow.nodes.loopNode.loopType.infiniteLoop')"
:label="$t('views.workflow.nodes.loopNode.loopType.infiniteLoop')"
value="LOOP"
/>
</el-select>
</el-form-item>
<el-form-item
v-if="form_data.loop_type == 'ARRAY'"
:label="$t('views.applicationWorkflow.nodes.loopNode.loopArray.label')"
:label="$t('views.workflow.nodes.loopNode.loopArray.label')"
@click.prevent
prop="array"
:rules="{
message: $t('views.applicationWorkflow.nodes.loopNode.loopArray.requiredMessage'),
message: $t('views.workflow.nodes.loopNode.loopArray.requiredMessage'),
trigger: 'blur',
required: true,
}"
@ -49,17 +49,17 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.nodes.loopNode.loopArray.placeholder')"
:placeholder="$t('views.workflow.nodes.loopNode.loopArray.placeholder')"
v-model="form_data.array"
/>
</el-form-item>
<el-form-item
v-else-if="form_data.loop_type == 'NUMBER'"
:label="$t('views.applicationWorkflow.nodes.loopNode.loopNumber.label')"
:label="$t('views.workflow.nodes.loopNode.loopNumber.label')"
@click.prevent
prop="number"
:rules="{
message: $t('views.applicationWorkflow.nodes.loopNode.loopNumber.requiredMessage'),
message: $t('views.workflow.nodes.loopNode.loopNumber.requiredMessage'),
trigger: 'blur',
required: true,
}"

View File

@ -1,7 +1,7 @@
<template>
<div class="flex-between mb-16">
<h5 class="break-all ellipsis lighter" style="max-width: 80%">
{{ $t('views.applicationWorkflow.variable.loop') }}
{{ $t('views.workflow.variable.loop') }}
</h5>
<div>
<span class="ml-4">
@ -79,7 +79,7 @@ function deleteField(index: any) {
function refreshFieldList(data: any, index: any) {
for (let i = 0; i < inputFieldList.value.length; i++) {
if (inputFieldList.value[i].field === data.field && index !== i) {
MsgError(t('views.applicationWorkflow.tip.paramErrorMessage') + data.field)
MsgError(t('views.workflow.tip.paramErrorMessage') + data.field)
return
}
}

View File

@ -10,7 +10,7 @@ class LoopStartNode extends AppNode {
if (this.props.model.type === 'loop-start-node') {
result.push({
value: 'loop',
label: t('views.applicationWorkflow.variable.loop'),
label: t('views.workflow.variable.loop'),
type: 'loop',
children:
(this.props.model.properties.loop_input_field_list

View File

@ -1,10 +1,10 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<LoopFieldTable :nodeModel="nodeModel"></LoopFieldTable>
<template v-if="loop_input_fields?.length">
<h5 class="title-decoration-1 mb-8">
{{ $t('views.applicationWorkflow.variable.loop') }}
{{ $t('views.workflow.variable.loop') }}
</h5>
<div
v-for="(item, index) in loop_input_fields || []"
@ -16,7 +16,7 @@
<span class="break-all">{{ item.label }} {{ '{' + item.value + '}' }}</span>
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.setting.copyParam')"
:content="$t('views.workflow.setting.copyParam')"
placement="top"
v-if="showicon === true"
>

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<div class="border-r-6 p-8-12 mb-8 layout-bg lighter">
<el-form
@submit.prevent
@ -25,7 +25,7 @@
style="width: 85px"
>
<el-option
:label="$t('views.applicationWorkflow.nodes.mcpNode.reference')"
:label="$t('views.workflow.nodes.mcpNode.reference')"
value="referencing"
/>
<el-option :label="$t('common.custom')" value="custom" />
@ -78,7 +78,7 @@
<span>{{ $t('views.tool.title') }}</span>
<el-button type="primary" link @click="getTools()">
<AppIcon iconName="app-add-outlined" class="mr-4"></AppIcon>
{{ $t('views.applicationWorkflow.nodes.mcpNode.getTool') }}
{{ $t('views.workflow.nodes.mcpNode.getTool') }}
</el-button>
</div>
</template>
@ -106,7 +106,7 @@
</el-form>
</div>
<h5 class="title-decoration-1 mb-8">
{{ $t('views.applicationWorkflow.nodes.mcpNode.toolParam') }}
{{ $t('views.workflow.nodes.mcpNode.toolParam') }}
</h5>
<template v-if="form_data.tool_params[form_data.params_nested]">
<div class="p-8-12" v-if="!form_data.mcp_tool">
@ -146,7 +146,7 @@
@change="form_data.tool_params[form_data.params_nested][item.label.label] = ''"
>
<el-option
:label="$t('views.applicationWorkflow.variable.Referencing')"
:label="$t('views.workflow.variable.Referencing')"
value="referencing"
/>
<el-option :label="$t('common.custom')" value="custom" />
@ -175,7 +175,7 @@
ref="nodeCascaderRef2"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="form_data.tool_params[form_data.params_nested][item.label.label]"
/>
</el-form-item>
@ -220,7 +220,7 @@
@change="form_data.tool_params[item.label.label] = ''"
>
<el-option
:label="$t('views.applicationWorkflow.variable.Referencing')"
:label="$t('views.workflow.variable.Referencing')"
value="referencing"
/>
<el-option :label="$t('common.custom')" value="custom" />
@ -249,7 +249,7 @@
ref="nodeCascaderRef2"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="form_data.tool_params[item.label.label]"
/>
</el-form-item>
@ -337,17 +337,17 @@ async function mcpToolSelectChange() {
function getTools() {
if (form_data.value.mcp_source === 'referencing' && !form_data.value.mcp_tool_id) {
MsgError(t('views.applicationWorkflow.nodes.mcpNode.mcpToolTip'))
MsgError(t('views.workflow.nodes.mcpNode.mcpToolTip'))
return
}
if (form_data.value.mcp_source === 'referencing' && form_data.value.mcp_tool_id) {
if (!mcpToolSelectOptions.value.find((item) => item.id === form_data.value.mcp_tool_id)) {
MsgError(t('views.applicationWorkflow.nodes.mcpNode.mcpToolTip'))
MsgError(t('views.workflow.nodes.mcpNode.mcpToolTip'))
return
}
}
if (form_data.value.mcp_source === 'custom' && !form_data.value.mcp_servers) {
MsgError(t('views.applicationWorkflow.nodes.mcpNode.mcpServerTip'))
MsgError(t('views.workflow.nodes.mcpNode.mcpServerTip'))
return
}
try {
@ -358,7 +358,7 @@ function getTools() {
return
}
} catch (e) {
MsgError(t('views.applicationWorkflow.nodes.mcpNode.mcpServerTip'))
MsgError(t('views.workflow.nodes.mcpNode.mcpServerTip'))
return
}
// tool
@ -370,7 +370,7 @@ function _getTools(mcp_servers: any) {
.getMcpTools(id, mcp_servers, loading)
.then((res: any) => {
form_data.value.mcp_tools = res.data
MsgSuccess(t('views.applicationWorkflow.nodes.mcpNode.getToolsSuccess'))
MsgSuccess(t('views.workflow.nodes.mcpNode.getToolsSuccess'))
// jsonmcp_server
form_data.value.mcp_server = form_data.value.mcp_tools.find(
(item: any) => item.name === form_data.value.mcp_tool,
@ -561,13 +561,13 @@ const validate = async () => {
if (!form.mcp_servers) {
return Promise.reject({
node: props.nodeModel,
errMessage: t('views.applicationWorkflow.nodes.mcpNode.mcpServerTip'),
errMessage: t('views.workflow.nodes.mcpNode.mcpServerTip'),
})
}
if (!form.mcp_tool) {
return Promise.reject({
node: props.nodeModel,
errMessage: t('views.applicationWorkflow.nodes.mcpNode.mcpToolTip'),
errMessage: t('views.workflow.nodes.mcpNode.mcpToolTip'),
})
}
}

View File

@ -44,7 +44,7 @@
<el-form-item
:label="
$t(
'views.applicationWorkflow.nodes.parameterExtractionNode.extractParameters.parameterType',
'views.workflow.nodes.parameterExtractionNode.extractParameters.parameterType',
)
"
:required="true"
@ -56,7 +56,7 @@
:placeholder="
$t('common.selectPlaceholder') +
$t(
'views.applicationWorkflow.nodes.parameterExtractionNode.extractParameters.parameterType',
'views.workflow.nodes.parameterExtractionNode.extractParameters.parameterType',
)
"
style="width: 100%"

View File

@ -1,7 +1,7 @@
<template>
<div class="flex-between w-full">
<h5 class="break-all lighter">
{{ $t('views.applicationWorkflow.nodes.parameterExtractionNode.extractParameters.label') }}
{{ $t('views.workflow.nodes.parameterExtractionNode.extractParameters.label') }}
<span class="color-danger">*</span>
</h5>
<span class="ml-4" style="margin-top: -4px">
@ -36,7 +36,7 @@
prop="label"
:label="
$t(
'views.applicationWorkflow.nodes.parameterExtractionNode.extractParameters.parameterType',
'views.workflow.nodes.parameterExtractionNode.extractParameters.parameterType',
)
"
>
@ -100,7 +100,7 @@ function deleteField(index: any) {
function refreshFieldList(data: any, index: any) {
for (let i = 0; i < inputFieldList.value.length; i++) {
if (inputFieldList.value[i].field === data.field && index !== i) {
MsgError(t('views.applicationWorkflow.tip.paramErrorMessage') + data.field)
MsgError(t('views.workflow.tip.paramErrorMessage') + data.field)
return
}
}

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never" style="--el-card-padding: 12px">
<el-form
@submit.prevent
@ -55,7 +55,7 @@
<el-form-item
prop="input_variable"
:rules="{
message: $t('views.applicationWorkflow.variable.placeholder'),
message: $t('views.workflow.variable.placeholder'),
trigger: 'blur',
required: true,
}"
@ -63,7 +63,7 @@
<template #label>
<div class="flex-between">
<div>
{{ $t('views.applicationWorkflow.nodes.variableSplittingNode.inputVariables') }}
{{ $t('views.workflow.nodes.variableSplittingNode.inputVariables') }}
<span class="color-danger">*</span>
</div>
</div>
@ -72,7 +72,7 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="form_data.input_variable"
/>
</el-form-item>
@ -80,7 +80,7 @@
prop="variable_list"
:rules="{
message: $t(
'views.applicationWorkflow.nodes.parameterExtractionNode.extractParameters.variableListPlaceholder',
'views.workflow.nodes.parameterExtractionNode.extractParameters.variableListPlaceholder',
),
trigger: 'blur',
required: true,

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never" style="--el-card-padding: 12px">
<el-form
@submit.prevent
@ -71,7 +71,7 @@
v-model="form_data.system"
style="height: 100px"
@submitDialog="submitSystemDialog"
:placeholder="`${t('views.applicationWorkflow.SystemPromptPlaceholder')}{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`"
:placeholder="`${t('views.workflow.SystemPromptPlaceholder')}{{${t('views.workflow.nodes.startNode.label')}.question}}`"
/>
</el-form-item>
<el-form-item
@ -103,7 +103,7 @@
v-model="form_data.prompt"
style="height: 150px"
@submitDialog="submitDialog"
:placeholder="`${t('views.applicationWorkflow.UserPromptPlaceholder')}{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`"
:placeholder="`${t('views.workflow.UserPromptPlaceholder')}{{${t('views.workflow.nodes.startNode.label')}.question}}`"
/>
</el-form-item>
<el-form-item :label="$t('views.application.form.historyRecord.label')">
@ -118,19 +118,19 @@
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')"
:label="$t('views.workflow.nodes.aiChatNode.returnContent.label')"
@click.prevent
>
<template #label>
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')
$t('views.workflow.nodes.aiChatNode.returnContent.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{ $t('views.applicationWorkflow.nodes.aiChatNode.returnContent.tooltip') }}
{{ $t('views.workflow.nodes.aiChatNode.returnContent.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
@ -197,11 +197,11 @@ function submitSystemDialog(val: string) {
set(props.nodeModel.properties.node_data, 'system', val)
}
const defaultPrompt = `{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`
const defaultPrompt = `{{${t('views.workflow.nodes.startNode.label')}.question}}`
const form = {
model_id: '',
system: t('views.applicationWorkflow.nodes.questionNode.systemDefault'),
system: t('views.workflow.nodes.questionNode.systemDefault'),
prompt: defaultPrompt,
dialogue_number: 1,
is_result: false,

View File

@ -9,10 +9,10 @@
label-width="auto"
ref="replyNodeFormRef"
>
<el-form-item :label="$t('views.applicationWorkflow.nodes.replyNode.replyContent')">
<el-form-item :label="$t('views.workflow.nodes.replyNode.replyContent')">
<template #label>
<div class="flex-between">
<span>{{ $t('views.applicationWorkflow.nodes.replyNode.replyContent') }}</span>
<span>{{ $t('views.workflow.nodes.replyNode.replyContent') }}</span>
<el-select
:teleported="false"
v-model="form_data.reply_type"
@ -20,7 +20,7 @@
style="width: 85px"
>
<el-option
:label="$t('views.applicationWorkflow.variable.Referencing')"
:label="$t('views.workflow.variable.Referencing')"
value="referencing"
/>
<el-option
@ -34,7 +34,7 @@
<MdEditorMagnify
v-if="form_data.reply_type === 'content'"
@wheel="wheel"
:title="$t('views.applicationWorkflow.nodes.replyNode.replyContent')"
:title="$t('views.workflow.nodes.replyNode.replyContent')"
v-model="form_data.content"
style="height: 150px"
@submitDialog="submitDialog"
@ -45,25 +45,25 @@
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
$t('views.workflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
"
v-model="form_data.fields"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')"
:label="$t('views.workflow.nodes.aiChatNode.returnContent.label')"
@click.prevent
>
<template #label>
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')
$t('views.workflow.nodes.aiChatNode.returnContent.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{ $t('views.applicationWorkflow.nodes.aiChatNode.returnContent.tooltip') }}
{{ $t('views.workflow.nodes.aiChatNode.returnContent.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>

View File

@ -16,11 +16,11 @@
<template #label>
<div class="flex align-center">
<span class="mr-4"
>Score {{ $t('views.applicationWorkflow.nodes.rerankerNode.higher') }}</span
>Score {{ $t('views.workflow.nodes.rerankerNode.higher') }}</span
>
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.nodes.rerankerNode.ScoreTooltip')"
:content="$t('views.workflow.nodes.rerankerNode.ScoreTooltip')"
placement="right"
>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>

View File

@ -11,12 +11,12 @@
hide-required-asterisk
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.rerankerNode.rerankerContent.label')"
:label="$t('views.workflow.nodes.rerankerNode.rerankerContent.label')"
prop="reranker_reference_list"
:rules="{
type: 'array',
message: $t(
'views.applicationWorkflow.nodes.rerankerNode.rerankerContent.requiredMessage',
'views.workflow.nodes.rerankerNode.rerankerContent.requiredMessage',
),
trigger: 'change',
required: true,
@ -25,7 +25,7 @@
<template #label>
<div class="flex-between">
<span
>{{ $t('views.applicationWorkflow.nodes.rerankerNode.rerankerContent.label')
>{{ $t('views.workflow.nodes.rerankerNode.rerankerContent.label')
}}<span class="color-danger">*</span></span
>
<el-button @click="add_reranker_reference" link type="primary">
@ -46,7 +46,7 @@
:rules="{
type: 'array',
required: true,
message: $t('views.applicationWorkflow.variable.placeholder'),
message: $t('views.workflow.variable.placeholder'),
trigger: 'change',
}"
>
@ -56,7 +56,7 @@
class="w-full"
:placeholder="
$t(
'views.applicationWorkflow.nodes.rerankerNode.rerankerContent.requiredMessage',
'views.workflow.nodes.rerankerNode.rerankerContent.requiredMessage',
)
"
v-model="form_data.reranker_reference_list[index]"
@ -71,12 +71,12 @@
</el-row>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchParam')"
:label="$t('views.workflow.nodes.searchKnowledgeNode.searchParam')"
>
<template #label>
<div class="flex-between">
<span>{{
$t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchParam')
$t('views.workflow.nodes.searchKnowledgeNode.searchParam')
}}</span>
<el-button type="primary" link @click="openParamSettingDialog">
<AppIcon iconName="app-setting"></AppIcon>
@ -87,7 +87,7 @@
<el-row>
<el-col :span="12" class="color-secondary lighter">
Score
{{ $t('views.applicationWorkflow.nodes.rerankerNode.higher') }}</el-col
{{ $t('views.workflow.nodes.rerankerNode.higher') }}</el-col
>
<el-col :span="12" class="lighter">
{{ form_data.reranker_setting.similarity?.toFixed(3) }}</el-col
@ -98,7 +98,7 @@
<el-col :span="12" class="lighter"> {{ form_data.reranker_setting.top_n }}</el-col>
<el-col :span="12" class="color-secondary lighter">
{{
$t('views.applicationWorkflow.nodes.rerankerNode.max_paragraph_char_number')
$t('views.workflow.nodes.rerankerNode.max_paragraph_char_number')
}}</el-col
>
<el-col :span="12" class="lighter">
@ -108,11 +108,11 @@
</div>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.label')"
:label="$t('views.workflow.nodes.searchKnowledgeNode.searchQuestion.label')"
prop="question_reference_address"
:rules="{
message: $t(
'views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.requiredMessage',
'views.workflow.nodes.searchKnowledgeNode.searchQuestion.requiredMessage',
),
trigger: 'blur',
required: true,
@ -121,7 +121,7 @@
<template #label>
<div class="flex-between">
<span
>{{ $t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.label')
>{{ $t('views.workflow.nodes.searchKnowledgeNode.searchQuestion.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -131,24 +131,24 @@
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.label')
$t('views.workflow.nodes.searchKnowledgeNode.searchQuestion.label')
"
v-model="form_data.question_reference_address"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.rerankerNode.reranker_model.label')"
:label="$t('views.workflow.nodes.rerankerNode.reranker_model.label')"
prop="reranker_model_id"
:rules="{
required: true,
message: $t('views.applicationWorkflow.nodes.rerankerNode.reranker_model.placeholder'),
message: $t('views.workflow.nodes.rerankerNode.reranker_model.placeholder'),
trigger: 'change',
}"
>
<template #label>
<div class="flex-between">
<span
>{{ $t('views.applicationWorkflow.nodes.rerankerNode.reranker_model.label')
>{{ $t('views.workflow.nodes.rerankerNode.reranker_model.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -158,7 +158,7 @@
:teleported="false"
v-model="form_data.reranker_model_id"
:placeholder="
$t('views.applicationWorkflow.nodes.rerankerNode.reranker_model.placeholder')
$t('views.workflow.nodes.rerankerNode.reranker_model.placeholder')
"
:options="modelOptions"
@submitModel="getSelectModel"
@ -167,7 +167,7 @@
></ModelSelect>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.searchKnowledgeNode.showKnowledge.label')"
:label="$t('views.workflow.nodes.searchKnowledgeNode.showKnowledge.label')"
prop="show_knowledge"
required
@click.prevent

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent
@ -14,7 +14,7 @@
<template #label>
<div class="flex-between">
<span>
{{ $t('views.applicationWorkflow.nodes.searchDocumentNode.selectKnowledge') }}
{{ $t('views.workflow.nodes.searchDocumentNode.selectKnowledge') }}
</span>
<span>
<el-button
@ -32,11 +32,11 @@
style="width: 85px"
>
<el-option
:label="$t('views.applicationWorkflow.nodes.searchDocumentNode.custom')"
:label="$t('views.workflow.nodes.searchDocumentNode.custom')"
value="custom"
/>
<el-option
:label="$t('views.applicationWorkflow.variable.Referencing')"
:label="$t('views.workflow.variable.Referencing')"
value="referencing"
/>
</el-select>
@ -72,7 +72,7 @@
<el-form-item
prop="search_scope_reference"
:rules="{
message: $t('views.applicationWorkflow.variable.placeholder'),
message: $t('views.workflow.variable.placeholder'),
trigger: 'blur',
required: true,
}"
@ -80,7 +80,7 @@
<template #label>
<div class="flex-between">
<span>
{{ $t('views.applicationWorkflow.nodes.searchDocumentNode.select_variable') }}
{{ $t('views.workflow.nodes.searchDocumentNode.select_variable') }}
<span class="color-danger">*</span></span
>
<span>
@ -93,13 +93,13 @@
>
<el-option
:label="
$t('views.applicationWorkflow.nodes.searchDocumentNode.knowledge_list')
$t('views.workflow.nodes.searchDocumentNode.knowledge_list')
"
value="knowledge"
/>
<el-option
:label="
$t('views.applicationWorkflow.nodes.searchDocumentNode.document_list')
$t('views.workflow.nodes.searchDocumentNode.document_list')
"
value="document"
/>
@ -111,21 +111,21 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="form_data.search_scope_reference"
/>
</el-form-item>
</div>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.searchDocumentNode.searchSetting')"
:label="$t('views.workflow.nodes.searchDocumentNode.searchSetting')"
>
<el-radio-group v-model="form_data.search_mode">
<el-radio value="auto">
<span class="flex align-center">
{{ $t('views.applicationWorkflow.nodes.searchDocumentNode.auto') }}
{{ $t('views.workflow.nodes.searchDocumentNode.auto') }}
<el-tooltip
:content="$t('views.applicationWorkflow.nodes.searchDocumentNode.autoTooltip')"
:content="$t('views.workflow.nodes.searchDocumentNode.autoTooltip')"
placement="top"
>
<AppIcon iconName="app-warning" class="app-warning-icon ml-4"></AppIcon>
@ -134,10 +134,10 @@
</el-radio>
<el-radio value="custom" v-if="form_data.search_scope_type === 'custom'">
<span class="flex align-center">
{{ $t('views.applicationWorkflow.nodes.searchDocumentNode.custom') }}
{{ $t('views.workflow.nodes.searchDocumentNode.custom') }}
<el-tooltip
c
:content="$t('views.applicationWorkflow.nodes.searchDocumentNode.customTooltip')"
:content="$t('views.workflow.nodes.searchDocumentNode.customTooltip')"
placement="top"
>
<AppIcon iconName="app-warning" class="app-warning-icon ml-4"></AppIcon>
@ -152,7 +152,7 @@
prop="question_reference"
:rules="{
message: $t(
'views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.requiredMessage',
'views.workflow.nodes.searchKnowledgeNode.searchQuestion.requiredMessage',
),
trigger: 'blur',
required: true,
@ -160,7 +160,7 @@
>
<template #label>
<span>
{{ $t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.label') }}
{{ $t('views.workflow.nodes.searchKnowledgeNode.searchQuestion.label') }}
<span class="color-danger">*</span></span
>
</template>
@ -169,7 +169,7 @@
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
$t('views.workflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
"
v-model="form_data.question_reference"
/>
@ -177,18 +177,18 @@
<div v-else>
<div class="flex align-center mb-8">
<el-text type="info" class="lighter" size="small">
{{ $t('views.applicationWorkflow.nodes.conditionNode.conditions.info') }}
{{ $t('views.workflow.nodes.conditionNode.conditions.info') }}
</el-text>
<el-select
v-model="form_data.search_condition_type"
size="small"
style="width: 60px; margin: 0 8px"
>
<el-option :label="$t('views.applicationWorkflow.condition.AND')" value="AND" />
<el-option :label="$t('views.applicationWorkflow.condition.OR')" value="OR" />
<el-option :label="$t('views.workflow.condition.AND')" value="AND" />
<el-option :label="$t('views.workflow.condition.OR')" value="OR" />
</el-select>
<el-text type="info" class="lighter" size="small">
{{ $t('views.applicationWorkflow.nodes.conditionNode.conditions.label') }}
{{ $t('views.workflow.nodes.conditionNode.conditions.label') }}
</el-text>
</div>
<div v-for="(c, index) in form_data.search_condition_list" :key="index">
@ -217,7 +217,7 @@
<el-input
v-model="c.value"
:placeholder="
$t('views.applicationWorkflow.nodes.searchDocumentNode.valueMessage')
$t('views.workflow.nodes.searchDocumentNode.valueMessage')
"
></el-input>
</el-col>
@ -230,7 +230,7 @@
</div>
<el-button link type="primary" @click="addCondition" class="mt-8">
<AppIcon iconName="app-add-outlined" class="mr-4"></AppIcon>
{{ $t('views.applicationWorkflow.nodes.conditionNode.addCondition') }}
{{ $t('views.workflow.nodes.conditionNode.addCondition') }}
</el-button>
</div>
</div>
@ -264,9 +264,9 @@ const props = defineProps<{ nodeModel: any }>()
const nodeCascaderRef = ref()
const nodeCascaderRef2 = ref()
const compareList = [
{ value: 'contain', label: t('views.applicationWorkflow.compare.contain') },
{ value: 'not_contain', label: t('views.applicationWorkflow.compare.not_contain') },
{ value: 'eq', label: t('views.applicationWorkflow.compare.eq') },
{ value: 'contain', label: t('views.workflow.compare.contain') },
{ value: 'not_contain', label: t('views.workflow.compare.not_contain') },
{ value: 'eq', label: t('views.workflow.compare.eq') },
]
const apiType = computed(() => {

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent
@ -15,7 +15,7 @@
<template #label>
<div class="flex-between">
<span>
{{ $t('views.applicationWorkflow.nodes.searchDocumentNode.selectKnowledge') }}</span
{{ $t('views.workflow.nodes.searchDocumentNode.selectKnowledge') }}</span
>
<span>
<el-button
@ -33,11 +33,11 @@
style="width: 85px"
>
<el-option
:label="$t('views.applicationWorkflow.nodes.searchDocumentNode.custom')"
:label="$t('views.workflow.nodes.searchDocumentNode.custom')"
value="custom"
/>
<el-option
:label="$t('views.applicationWorkflow.variable.Referencing')"
:label="$t('views.workflow.variable.Referencing')"
value="referencing"
/>
</el-select>
@ -71,7 +71,7 @@
<el-form-item
prop="search_scope_reference"
:rules="{
message: $t('views.applicationWorkflow.variable.placeholder'),
message: $t('views.workflow.variable.placeholder'),
trigger: 'blur',
required: true,
}"
@ -79,7 +79,7 @@
<template #label>
<div class="flex-between">
<span>
{{ $t('views.applicationWorkflow.nodes.searchDocumentNode.select_variable') }}
{{ $t('views.workflow.nodes.searchDocumentNode.select_variable') }}
<span class="color-danger">*</span>
</span>
<span>
@ -92,13 +92,13 @@
>
<el-option
:label="
$t('views.applicationWorkflow.nodes.searchDocumentNode.knowledge_list')
$t('views.workflow.nodes.searchDocumentNode.knowledge_list')
"
value="knowledge"
/>
<el-option
:label="
$t('views.applicationWorkflow.nodes.searchDocumentNode.document_list')
$t('views.workflow.nodes.searchDocumentNode.document_list')
"
value="document"
/>
@ -110,19 +110,19 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
:placeholder="$t('views.workflow.variable.placeholder')"
v-model="form_data.search_scope_reference"
/>
</el-form-item>
</div>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchParam')"
:label="$t('views.workflow.nodes.searchKnowledgeNode.searchParam')"
>
<template #label>
<div class="flex-between">
<span
>{{ $t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchParam') }}
>{{ $t('views.workflow.nodes.searchKnowledgeNode.searchParam') }}
</span>
<el-button type="primary" link @click="openParamSettingDialog">
<AppIcon iconName="app-setting"></AppIcon>
@ -162,7 +162,7 @@
prop="question_reference_address"
:rules="{
message: $t(
'views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.requiredMessage',
'views.workflow.nodes.searchKnowledgeNode.searchQuestion.requiredMessage',
),
trigger: 'blur',
required: true,
@ -171,7 +171,7 @@
<template #label>
<div class="flex-between">
<span>
{{ $t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.label') }}
{{ $t('views.workflow.nodes.searchKnowledgeNode.searchQuestion.label') }}
<span class="color-danger">*</span></span
>
</div>
@ -181,7 +181,7 @@
:nodeModel="nodeModel"
class="w-full"
:placeholder="
$t('views.applicationWorkflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
$t('views.workflow.nodes.searchKnowledgeNode.searchQuestion.placeholder')
"
v-model="form_data.question_reference_address"
/>
@ -190,7 +190,7 @@
prop="show_knowledge"
:rules="{
message: $t(
'views.applicationWorkflow.nodes.searchKnowledgeNode.showKnowledge.requiredMessage',
'views.workflow.nodes.searchKnowledgeNode.showKnowledge.requiredMessage',
),
trigger: 'blur',
required: true,
@ -200,7 +200,7 @@
<template #label>
<div class="flex-between">
<span>
{{ $t('views.applicationWorkflow.nodes.searchKnowledgeNode.showKnowledge.label') }}
{{ $t('views.workflow.nodes.searchKnowledgeNode.showKnowledge.label') }}
<span class="color-danger">*</span></span
>
</div>

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :node-model="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent
@ -12,7 +12,7 @@
hide-required-asterisk
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.speechToTextNode.stt_model.label')"
:label="$t('views.workflow.nodes.speechToTextNode.stt_model.label')"
prop="stt_model_id"
:rules="{
required: true,
@ -24,7 +24,7 @@
<div class="flex-between w-full">
<div>
<span
>{{ $t('views.applicationWorkflow.nodes.speechToTextNode.stt_model.label')
>{{ $t('views.workflow.nodes.speechToTextNode.stt_model.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -51,10 +51,10 @@
></ModelSelect>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.speechToTextNode.audio.label')"
:label="$t('views.workflow.nodes.speechToTextNode.audio.label')"
prop="audio_list"
:rules="{
message: $t('views.applicationWorkflow.nodes.speechToTextNode.audio.label'),
message: $t('views.workflow.nodes.speechToTextNode.audio.label'),
trigger: 'change',
required: true,
}"
@ -63,7 +63,7 @@
<div class="flex-between w-full">
<div>
<span
>{{ $t('views.applicationWorkflow.nodes.speechToTextNode.audio.label')
>{{ $t('views.workflow.nodes.speechToTextNode.audio.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -73,25 +73,25 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.nodes.speechToTextNode.audio.placeholder')"
:placeholder="$t('views.workflow.nodes.speechToTextNode.audio.placeholder')"
v-model="form_data.audio_list"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')"
:label="$t('views.workflow.nodes.aiChatNode.returnContent.label')"
@click.prevent
>
<template #label>
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')
$t('views.workflow.nodes.aiChatNode.returnContent.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{ $t('views.applicationWorkflow.nodes.aiChatNode.returnContent.tooltip') }}
{{ $t('views.workflow.nodes.aiChatNode.returnContent.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.variable.global') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.variable.global') }}</h5>
<div
v-for="(item, index) in nodeModel.properties.config.globalFields"
:key="index"
@ -11,7 +11,7 @@
<span class="break-all">{{ item.label }} {{ '{' + item.value + '}' }}</span>
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.setting.copyParam')"
:content="$t('views.workflow.setting.copyParam')"
placement="top"
v-if="showicon === true"
>
@ -21,7 +21,7 @@
</el-tooltip>
</div>
<template v-if="nodeModel.properties.config.chatFields?.length">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.variable.chat') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.variable.chat') }}</h5>
<div
v-for="(item, index) in nodeModel.properties.config.chatFields || []"
:key="index"
@ -32,7 +32,7 @@
<span class="break-all">{{ item.label }} {{ '{' + item.value + '}' }}</span>
<el-tooltip
effect="dark"
:content="$t('views.applicationWorkflow.setting.copyParam')"
:content="$t('views.workflow.setting.copyParam')"
placement="top"
v-if="showicon === true"
>
@ -54,7 +54,7 @@ const props = defineProps<{ nodeModel: any }>()
const showicon = ref(false)
const globalFields = [
{ label: t('views.applicationWorkflow.nodes.startNode.currentTime'), value: 'time' },
{ label: t('views.workflow.nodes.startNode.currentTime'), value: 'time' },
{
label: t('views.application.form.historyRecord.label'),
value: 'history_context',

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :node-model="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent
@ -12,7 +12,7 @@
hide-required-asterisk
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.textToSpeechNode.tts_model.label')"
:label="$t('views.workflow.nodes.textToSpeechNode.tts_model.label')"
prop="tts_model_id"
:rules="{
required: true,
@ -24,7 +24,7 @@
<div class="flex-between w-full">
<div>
<span
>{{ $t('views.applicationWorkflow.nodes.textToSpeechNode.tts_model.label')
>{{ $t('views.workflow.nodes.textToSpeechNode.tts_model.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -51,9 +51,9 @@
</el-form-item>
<el-form-item
prop="content_list"
:label="$t('views.applicationWorkflow.nodes.textToSpeechNode.content.label')"
:label="$t('views.workflow.nodes.textToSpeechNode.content.label')"
:rules="{
message: $t('views.applicationWorkflow.nodes.textToSpeechNode.content.label'),
message: $t('views.workflow.nodes.textToSpeechNode.content.label'),
trigger: 'blur',
required: true,
}"
@ -62,7 +62,7 @@
<div class="flex-between w-full">
<div>
<span
>{{ $t('views.applicationWorkflow.nodes.textToSpeechNode.content.label')
>{{ $t('views.workflow.nodes.textToSpeechNode.content.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -72,25 +72,25 @@
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
:placeholder="$t('views.applicationWorkflow.nodes.textToSpeechNode.content.label')"
:placeholder="$t('views.workflow.nodes.textToSpeechNode.content.label')"
v-model="form_data.content_list"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')"
:label="$t('views.workflow.nodes.aiChatNode.returnContent.label')"
@click.prevent
>
<template #label>
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')
$t('views.workflow.nodes.aiChatNode.returnContent.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{ $t('views.applicationWorkflow.nodes.aiChatNode.returnContent.tooltip') }}
{{ $t('views.workflow.nodes.aiChatNode.returnContent.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :node-model="nodeModel">
<h5 class="title-decoration-1 mb-8">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-8">{{ $t('views.workflow.nodeSetting') }}</h5>
<el-card shadow="never" class="card-never">
<el-form
@submit.prevent
@ -12,12 +12,12 @@
hide-required-asterisk
>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.textToVideoGenerate.model.label')"
:label="$t('views.workflow.nodes.textToVideoGenerate.model.label')"
prop="model_id"
:rules="{
required: true,
message: $t(
'views.applicationWorkflow.nodes.textToVideoGenerate.model.requiredMessage',
'views.workflow.nodes.textToVideoGenerate.model.requiredMessage',
),
trigger: 'change',
}"
@ -26,7 +26,7 @@
<div class="flex-between w-full">
<div>
<span
>{{ $t('views.applicationWorkflow.nodes.textToVideoGenerate.model.label')
>{{ $t('views.workflow.nodes.textToVideoGenerate.model.label')
}}<span class="color-danger">*</span></span
>
</div>
@ -49,7 +49,7 @@
:teleported="false"
v-model="form_data.model_id"
:placeholder="
$t('views.applicationWorkflow.nodes.textToVideoGenerate.model.requiredMessage')
$t('views.workflow.nodes.textToVideoGenerate.model.requiredMessage')
"
:options="modelOptions"
showFooter
@ -58,7 +58,7 @@
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.textToVideoGenerate.prompt.label')"
:label="$t('views.workflow.nodes.textToVideoGenerate.prompt.label')"
prop="prompt"
:rules="{
required: true,
@ -70,13 +70,13 @@
<div class="flex align-center">
<div class="mr-4">
<span
>{{ $t('views.applicationWorkflow.nodes.textToVideoGenerate.prompt.label')
>{{ $t('views.workflow.nodes.textToVideoGenerate.prompt.label')
}}<span class="color-danger">*</span></span
>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content
>{{ $t('views.applicationWorkflow.nodes.textToVideoGenerate.prompt.tooltip') }}
>{{ $t('views.workflow.nodes.textToVideoGenerate.prompt.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
@ -84,14 +84,14 @@
</template>
<MdEditorMagnify
@wheel="wheel"
:title="$t('views.applicationWorkflow.nodes.textToVideoGenerate.prompt.label')"
:title="$t('views.workflow.nodes.textToVideoGenerate.prompt.label')"
v-model="form_data.prompt"
style="height: 150px"
@submitDialog="submitDialog"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.textToVideoGenerate.negative_prompt.label')"
:label="$t('views.workflow.nodes.textToVideoGenerate.negative_prompt.label')"
prop="prompt"
:rules="{
required: false,
@ -103,14 +103,14 @@
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.textToVideoGenerate.negative_prompt.label')
$t('views.workflow.nodes.textToVideoGenerate.negative_prompt.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content
>{{
$t(
'views.applicationWorkflow.nodes.textToVideoGenerate.negative_prompt.tooltip',
'views.workflow.nodes.textToVideoGenerate.negative_prompt.tooltip',
)
}}
</template>
@ -120,29 +120,29 @@
</template>
<MdEditorMagnify
@wheel="wheel"
:title="$t('views.applicationWorkflow.nodes.textToVideoGenerate.negative_prompt.label')"
:title="$t('views.workflow.nodes.textToVideoGenerate.negative_prompt.label')"
v-model="form_data.negative_prompt"
:placeholder="
$t('views.applicationWorkflow.nodes.textToVideoGenerate.negative_prompt.placeholder')
$t('views.workflow.nodes.textToVideoGenerate.negative_prompt.placeholder')
"
style="height: 150px"
@submitDialog="submitNegativeDialog"
/>
</el-form-item>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')"
:label="$t('views.workflow.nodes.aiChatNode.returnContent.label')"
@click.prevent
>
<template #label>
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')
$t('views.workflow.nodes.aiChatNode.returnContent.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{ $t('views.applicationWorkflow.nodes.aiChatNode.returnContent.tooltip') }}
{{ $t('views.workflow.nodes.aiChatNode.returnContent.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>
@ -201,7 +201,7 @@ const wheel = (e: any) => {
}
}
const defaultPrompt = `{{${t('views.applicationWorkflow.nodes.startNode.label')}.question}}`
const defaultPrompt = `{{${t('views.workflow.nodes.startNode.label')}.question}}`
const form = {
model_id: '',

View File

@ -1,6 +1,6 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<h5 class="title-decoration-1 mb-16">{{ $t('views.applicationWorkflow.nodeSetting') }}</h5>
<h5 class="title-decoration-1 mb-16">{{ $t('views.workflow.nodeSetting') }}</h5>
<h5 class="lighter mb-8">{{ $t('common.param.inputParam') }}</h5>
<el-form
@submit.prevent
@ -71,19 +71,19 @@
<el-text type="info" v-else> {{ $t('common.noData') }} </el-text>
</el-card>
<el-form-item
:label="$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')"
:label="$t('views.workflow.nodes.aiChatNode.returnContent.label')"
@click.prevent
>
<template #label>
<div class="flex align-center">
<div class="mr-4">
<span>{{
$t('views.applicationWorkflow.nodes.aiChatNode.returnContent.label')
$t('views.workflow.nodes.aiChatNode.returnContent.label')
}}</span>
</div>
<el-tooltip effect="dark" placement="right" popper-class="max-w-200">
<template #content>
{{ $t('views.applicationWorkflow.nodes.aiChatNode.returnContent.tooltip') }}
{{ $t('views.workflow.nodes.aiChatNode.returnContent.tooltip') }}
</template>
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
</el-tooltip>

Some files were not shown because too many files have changed in this diff Show More