feat: i18n
This commit is contained in:
parent
27a8faccd1
commit
1389c581b7
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
class="execution-details-dialog"
|
class="execution-details-dialog"
|
||||||
:title="$t('components.chat.executionDetails.title')"
|
:title="$t('chat.executionDetails.title')"
|
||||||
v-model="dialogVisible"
|
v-model="dialogVisible"
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
append-to-body
|
append-to-body
|
||||||
@ -57,11 +57,13 @@
|
|||||||
>
|
>
|
||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12">
|
<h5 class="p-8-12">
|
||||||
{{ $t('components.chat.executionDetails.paramInput') }}
|
{{ $t('chat.executionDetails.paramInput') }}
|
||||||
</h5>
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<div class="mb-8">
|
<div class="mb-8">
|
||||||
<span class="color-secondary">用户问题:</span>
|
<span class="color-secondary">
|
||||||
|
{{ $t('chat.paragraphSource.question') }}:</span
|
||||||
|
>
|
||||||
{{ item.question || '-' }}
|
{{ item.question || '-' }}
|
||||||
</div>
|
</div>
|
||||||
<div v-for="(f, i) in item.global_fields" :key="i" class="mb-8">
|
<div v-for="(f, i) in item.global_fields" :key="i" class="mb-8">
|
||||||
@ -105,7 +107,9 @@
|
|||||||
</el-space>
|
</el-space>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="item.audio_list?.length > 0">
|
<div v-if="item.audio_list?.length > 0">
|
||||||
<p class="mb-8 color-secondary">语音文件:</p>
|
<p class="mb-8 color-secondary">
|
||||||
|
{{ $t('chat.executionDetails.audioFile') }}:
|
||||||
|
</p>
|
||||||
|
|
||||||
<el-space wrap>
|
<el-space wrap>
|
||||||
<template v-for="(f, i) in item.audio_list" :key="i">
|
<template v-for="(f, i) in item.audio_list" :key="i">
|
||||||
@ -124,11 +128,15 @@
|
|||||||
<!-- 知识库检索 -->
|
<!-- 知识库检索 -->
|
||||||
<template v-if="item.type == WorkflowType.SearchDataset">
|
<template v-if="item.type == WorkflowType.SearchDataset">
|
||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12">检索内容</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.searchContent') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">{{ item.question || '-' }}</div>
|
<div class="p-8-12 border-t-dashed lighter">{{ item.question || '-' }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-never border-r-4 mt-8">
|
<div class="card-never border-r-4 mt-8">
|
||||||
<h5 class="p-8-12">检索结果</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.searchResult') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<template v-if="item.paragraph_list?.length > 0">
|
<template v-if="item.paragraph_list?.length > 0">
|
||||||
<template
|
<template
|
||||||
@ -149,7 +157,9 @@
|
|||||||
<!-- 判断器 -->
|
<!-- 判断器 -->
|
||||||
<template v-if="item.type == WorkflowType.Condition">
|
<template v-if="item.type == WorkflowType.Condition">
|
||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12">判断结果</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.conditionResult') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
{{ item.branch_name || '-' }}
|
{{ item.branch_name || '-' }}
|
||||||
</div>
|
</div>
|
||||||
@ -179,7 +189,7 @@
|
|||||||
class="card-never border-r-4 mt-8"
|
class="card-never border-r-4 mt-8"
|
||||||
v-if="item.type !== WorkflowType.Application"
|
v-if="item.type !== WorkflowType.Application"
|
||||||
>
|
>
|
||||||
<h5 class="p-8-12">{{ $t('components.chat.history') }}</h5>
|
<h5 class="p-8-12">{{ $t('chat.history') }}</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<template v-if="item.history_message?.length > 0">
|
<template v-if="item.history_message?.length > 0">
|
||||||
<p
|
<p
|
||||||
@ -198,7 +208,9 @@
|
|||||||
class="card-never border-r-4 mt-8"
|
class="card-never border-r-4 mt-8"
|
||||||
v-if="item.type !== WorkflowType.Application"
|
v-if="item.type !== WorkflowType.Application"
|
||||||
>
|
>
|
||||||
<h5 class="p-8-12">本次对话</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.currentChat') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter pre-wrap">
|
<div class="p-8-12 border-t-dashed lighter pre-wrap">
|
||||||
{{ item.question || '-' }}
|
{{ item.question || '-' }}
|
||||||
</div>
|
</div>
|
||||||
@ -207,8 +219,8 @@
|
|||||||
<h5 class="p-8-12">
|
<h5 class="p-8-12">
|
||||||
{{
|
{{
|
||||||
item.type == WorkflowType.Application
|
item.type == WorkflowType.Application
|
||||||
? $t('components.chat.executionDetails.paramOutput')
|
? $t('chat.executionDetails.paramOutput')
|
||||||
: 'AI 回答'
|
: $t('chat.executionDetails.answer')
|
||||||
}}
|
}}
|
||||||
</h5>
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
@ -227,7 +239,9 @@
|
|||||||
<!-- 指定回复 -->
|
<!-- 指定回复 -->
|
||||||
<template v-if="item.type === WorkflowType.Reply">
|
<template v-if="item.type === WorkflowType.Reply">
|
||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12">回复内容</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.replyContent') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<el-scrollbar height="150">
|
<el-scrollbar height="150">
|
||||||
<MdPreview
|
<MdPreview
|
||||||
@ -248,12 +262,12 @@
|
|||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12 flex align-center">
|
<h5 class="p-8-12 flex align-center">
|
||||||
<span class="mr-4">{{
|
<span class="mr-4">{{
|
||||||
$t('components.chat.executionDetails.paramOutput')
|
$t('chat.executionDetails.paramOutput')
|
||||||
}}</span>
|
}}</span>
|
||||||
|
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
effect="dark"
|
effect="dark"
|
||||||
content="每个文档仅支持预览500字"
|
:content="$t('chat.executionDetails.paramOutputTooltip')"
|
||||||
placement="right"
|
placement="right"
|
||||||
>
|
>
|
||||||
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
|
<AppIcon iconName="app-warning" class="app-warning-icon"></AppIcon>
|
||||||
@ -283,11 +297,15 @@
|
|||||||
</template>
|
</template>
|
||||||
<template v-if="item.type === WorkflowType.SpeechToTextNode">
|
<template v-if="item.type === WorkflowType.SpeechToTextNode">
|
||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12"> {{ $t('components.chat.executionDetails.paramInput') }}</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.paramInput') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<div class="mb-8">
|
<div class="mb-8">
|
||||||
<div v-if="item.audio_list?.length > 0">
|
<div v-if="item.audio_list?.length > 0">
|
||||||
<p class="mb-8 color-secondary">语音文件:</p>
|
<p class="mb-8 color-secondary">
|
||||||
|
{{ $t('chat.executionDetails.audioFile') }}:
|
||||||
|
</p>
|
||||||
|
|
||||||
<el-space wrap>
|
<el-space wrap>
|
||||||
<template v-for="(f, i) in item.audio_list" :key="i">
|
<template v-for="(f, i) in item.audio_list" :key="i">
|
||||||
@ -305,7 +323,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12">
|
<h5 class="p-8-12">
|
||||||
{{ $t('components.chat.executionDetails.paramOutput') }}
|
{{ $t('chat.executionDetails.paramOutput') }}
|
||||||
</h5>
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<el-card
|
<el-card
|
||||||
@ -330,10 +348,14 @@
|
|||||||
|
|
||||||
<template v-if="item.type === WorkflowType.TextToSpeechNode">
|
<template v-if="item.type === WorkflowType.TextToSpeechNode">
|
||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12"> {{ $t('components.chat.executionDetails.paramInput') }}</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.paramInput') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<p class="mb-8 color-secondary">文本内容:</p>
|
<p class="mb-8 color-secondary">
|
||||||
|
{{ $t('chat.executionDetails.textContent') }}:
|
||||||
|
</p>
|
||||||
<div v-if="item.content">
|
<div v-if="item.content">
|
||||||
<MdPreview
|
<MdPreview
|
||||||
ref="editorRef"
|
ref="editorRef"
|
||||||
@ -347,10 +369,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12">
|
<h5 class="p-8-12">
|
||||||
{{ $t('components.chat.executionDetails.paramOutput') }}
|
{{ $t('chat.executionDetails.paramOutput') }}
|
||||||
</h5>
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<p class="mb-8 color-secondary">语音文件:</p>
|
<p class="mb-8 color-secondary">
|
||||||
|
{{ $t('chat.executionDetails.audioFile') }}:
|
||||||
|
</p>
|
||||||
<div v-if="item.answer" v-html="item.answer"></div>
|
<div v-if="item.answer" v-html="item.answer"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -364,13 +388,13 @@
|
|||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="card-never border-r-4 mt-8">
|
<div class="card-never border-r-4 mt-8">
|
||||||
<h5 class="p-8-12">输入</h5>
|
<h5 class="p-8-12">{{ $t('chat.executionDetails.input') }}</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter pre-wrap">
|
<div class="p-8-12 border-t-dashed lighter pre-wrap">
|
||||||
{{ item.params || '-' }}
|
{{ item.params || '-' }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-never border-r-4 mt-8">
|
<div class="card-never border-r-4 mt-8">
|
||||||
<h5 class="p-8-12">输出</h5>
|
<h5 class="p-8-12">{{ $t('chat.executionDetails.output') }}</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter pre-wrap">
|
<div class="p-8-12 border-t-dashed lighter pre-wrap">
|
||||||
{{ item.result || '-' }}
|
{{ item.result || '-' }}
|
||||||
</div>
|
</div>
|
||||||
@ -379,11 +403,15 @@
|
|||||||
<!-- 多路召回 -->
|
<!-- 多路召回 -->
|
||||||
<template v-if="item.type == WorkflowType.RrerankerNode">
|
<template v-if="item.type == WorkflowType.RrerankerNode">
|
||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12">检索内容</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.searchContent') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">{{ item.question || '-' }}</div>
|
<div class="p-8-12 border-t-dashed lighter">{{ item.question || '-' }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-never border-r-4 mt-8">
|
<div class="card-never border-r-4 mt-8">
|
||||||
<h5 class="p-8-12">重排内容</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.rerankerContent') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<template v-if="item.document_list?.length > 0">
|
<template v-if="item.document_list?.length > 0">
|
||||||
<template
|
<template
|
||||||
@ -407,7 +435,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-never border-r-4 mt-8">
|
<div class="card-never border-r-4 mt-8">
|
||||||
<h5 class="p-8-12">重排结果</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.rerankerResult') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<template v-if="item.result_list?.length > 0">
|
<template v-if="item.result_list?.length > 0">
|
||||||
<template
|
<template
|
||||||
@ -416,7 +446,7 @@
|
|||||||
>
|
>
|
||||||
<CardBox
|
<CardBox
|
||||||
shadow="never"
|
shadow="never"
|
||||||
:title="`分段${paragraphIndex + 1}`"
|
:title="`${$t('chat.executionDetails.paragraph')}${paragraphIndex + 1}`"
|
||||||
class="paragraph-source-card cursor mb-8 paragraph-source-card-height"
|
class="paragraph-source-card cursor mb-8 paragraph-source-card-height"
|
||||||
:showIcon="false"
|
:showIcon="false"
|
||||||
>
|
>
|
||||||
@ -446,9 +476,11 @@
|
|||||||
<template v-if="item.type === WorkflowType.FormNode">
|
<template v-if="item.type === WorkflowType.FormNode">
|
||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12">
|
<h5 class="p-8-12">
|
||||||
{{ $t('components.chat.executionDetails.paramOutput')
|
{{ $t('chat.executionDetails.paramOutput')
|
||||||
}}<span style="color: #f54a45">{{
|
}}<span style="color: #f54a45">{{
|
||||||
item.is_submit ? '' : '(用户未提交)'
|
item.is_submit
|
||||||
|
? ''
|
||||||
|
: `(${$t('chat.executionDetails.noSubmit')})`
|
||||||
}}</span>
|
}}</span>
|
||||||
</h5>
|
</h5>
|
||||||
|
|
||||||
@ -473,9 +505,7 @@
|
|||||||
v-if="item.type !== WorkflowType.Application"
|
v-if="item.type !== WorkflowType.Application"
|
||||||
>
|
>
|
||||||
<h5 class="p-8-12">
|
<h5 class="p-8-12">
|
||||||
{{
|
{{ $t('views.application.applicationForm.form.roleSettings.label') }}
|
||||||
$t('views.application.applicationForm.form.roleSettings.label')
|
|
||||||
}}
|
|
||||||
(System)
|
(System)
|
||||||
</h5>
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
@ -486,7 +516,7 @@
|
|||||||
class="card-never border-r-4 mt-8"
|
class="card-never border-r-4 mt-8"
|
||||||
v-if="item.type !== WorkflowType.Application"
|
v-if="item.type !== WorkflowType.Application"
|
||||||
>
|
>
|
||||||
<h5 class="p-8-12">{{ $t('components.chat.history') }}</h5>
|
<h5 class="p-8-12">{{ $t('chat.history') }}</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
<template v-if="item.history_message?.length > 0">
|
<template v-if="item.history_message?.length > 0">
|
||||||
<p
|
<p
|
||||||
@ -518,7 +548,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-never border-r-4 mt-8">
|
<div class="card-never border-r-4 mt-8">
|
||||||
<h5 class="p-8-12">本次对话</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.currentChat') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter pre-wrap">
|
<div class="p-8-12 border-t-dashed lighter pre-wrap">
|
||||||
<div v-if="item.image_list?.length > 0">
|
<div v-if="item.image_list?.length > 0">
|
||||||
<el-space wrap>
|
<el-space wrap>
|
||||||
@ -542,8 +574,8 @@
|
|||||||
<h5 class="p-8-12">
|
<h5 class="p-8-12">
|
||||||
{{
|
{{
|
||||||
item.type == WorkflowType.Application
|
item.type == WorkflowType.Application
|
||||||
? $t('components.chat.executionDetails.paramOutput')
|
? $t('chat.executionDetails.paramOutput')
|
||||||
: 'AI 回答'
|
: $t('chat.executionDetails.answer')
|
||||||
}}
|
}}
|
||||||
</h5>
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
@ -561,7 +593,9 @@
|
|||||||
<!-- 图片生成 -->
|
<!-- 图片生成 -->
|
||||||
<template v-if="item.type == WorkflowType.ImageGenerateNode">
|
<template v-if="item.type == WorkflowType.ImageGenerateNode">
|
||||||
<div class="card-never border-r-4 mt-8">
|
<div class="card-never border-r-4 mt-8">
|
||||||
<h5 class="p-8-12">本次对话</h5>
|
<h5 class="p-8-12">
|
||||||
|
{{ $t('chat.executionDetails.currentChat') }}
|
||||||
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter pre-wrap">
|
<div class="p-8-12 border-t-dashed lighter pre-wrap">
|
||||||
{{ item.question || '-' }}
|
{{ item.question || '-' }}
|
||||||
</div>
|
</div>
|
||||||
@ -570,8 +604,8 @@
|
|||||||
<h5 class="p-8-12">
|
<h5 class="p-8-12">
|
||||||
{{
|
{{
|
||||||
item.type == WorkflowType.Application
|
item.type == WorkflowType.Application
|
||||||
? $t('components.chat.executionDetails.paramOutput')
|
? $t('chat.executionDetails.paramOutput')
|
||||||
: 'AI 回答'
|
: $t('chat.executionDetails.answer')
|
||||||
}}
|
}}
|
||||||
</h5>
|
</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">
|
<div class="p-8-12 border-t-dashed lighter">
|
||||||
@ -589,7 +623,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<div class="card-never border-r-4">
|
<div class="card-never border-r-4">
|
||||||
<h5 class="p-8-12">错误日志</h5>
|
<h5 class="p-8-12">{{ $t('chat.executionDetails.errMessage') }}</h5>
|
||||||
<div class="p-8-12 border-t-dashed lighter">{{ item.err_message || '-' }}</div>
|
<div class="p-8-12 border-t-dashed lighter">{{ item.err_message || '-' }}</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex align-center mt-16" v-if="!isWorkFlow(props.type)">
|
<div class="flex align-center mt-16" v-if="!isWorkFlow(props.type)">
|
||||||
<span class="mr-4 color-secondary">{{ $t('components.chat.KnowledgeSource.title') }}</span>
|
<span class="mr-4 color-secondary">{{ $t('chat.KnowledgeSource.title') }}</span>
|
||||||
<el-divider direction="vertical" />
|
<el-divider direction="vertical" />
|
||||||
<el-button type="primary" class="mr-8" link @click="openParagraph(data)">
|
<el-button type="primary" class="mr-8" link @click="openParagraph(data)">
|
||||||
<AppIcon iconName="app-reference-outlined" class="mr-4"></AppIcon>
|
<AppIcon iconName="app-reference-outlined" class="mr-4"></AppIcon>
|
||||||
{{ $t('components.chat.KnowledgeSource.referenceParagraph') }}
|
{{ $t('chat.KnowledgeSource.referenceParagraph') }}
|
||||||
{{ data.paragraph_list?.length || 0 }}</el-button
|
{{ data.paragraph_list?.length || 0 }}</el-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
@ -43,8 +43,8 @@
|
|||||||
|
|
||||||
<div class="border-t color-secondary flex-between mt-12" style="padding-top: 12px">
|
<div class="border-t color-secondary flex-between mt-12" style="padding-top: 12px">
|
||||||
<div>
|
<div>
|
||||||
<span class="mr-8"> {{ $t('components.chat.KnowledgeSource.consume') }} tokens: {{ data?.message_tokens + data?.answer_tokens }} </span>
|
<span class="mr-8"> {{ $t('chat.KnowledgeSource.consume') }} tokens: {{ data?.message_tokens + data?.answer_tokens }} </span>
|
||||||
<span> {{ $t('components.chat.KnowledgeSource.consumeTime') }}: {{ data?.run_time?.toFixed(2) }} s</span>
|
<span> {{ $t('chat.KnowledgeSource.consumeTime') }}: {{ data?.run_time?.toFixed(2) }} s</span>
|
||||||
</div>
|
</div>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="isWorkFlow(props.type)"
|
v-if="isWorkFlow(props.type)"
|
||||||
@ -53,7 +53,7 @@
|
|||||||
@click="openExecutionDetail(data.execution_details)"
|
@click="openExecutionDetail(data.execution_details)"
|
||||||
>
|
>
|
||||||
<el-icon class="mr-4"><Document /></el-icon>
|
<el-icon class="mr-4"><Document /></el-icon>
|
||||||
{{ $t('components.chat.executionDetails.title') }}</el-button
|
{{ $t('chat.executionDetails.title') }}</el-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<!-- 知识库引用 dialog -->
|
<!-- 知识库引用 dialog -->
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
class="paragraph-source"
|
class="paragraph-source"
|
||||||
title="知识库引用"
|
:title="$t('chat.paragraphSource.title')"
|
||||||
v-model="dialogVisible"
|
v-model="dialogVisible"
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
append-to-body
|
append-to-body
|
||||||
@ -13,13 +13,13 @@
|
|||||||
<el-scrollbar>
|
<el-scrollbar>
|
||||||
<div class="paragraph-source-height p-16 pb-0">
|
<div class="paragraph-source-height p-16 pb-0">
|
||||||
<el-form label-position="top">
|
<el-form label-position="top">
|
||||||
<el-form-item label="用户问题">
|
<el-form-item :label="$t('chat.paragraphSource.question')">
|
||||||
<el-input v-model="detail.problem_text" disabled />
|
<el-input v-model="detail.problem_text" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="优化后问题">
|
<el-form-item :label="$t('chat.paragraphSource.optimizationQuestion')">
|
||||||
<el-input v-model="detail.padding_problem_text" disabled />
|
<el-input v-model="detail.padding_problem_text" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('components.chat.KnowledgeSource.referenceParagraph')">
|
<el-form-item :label="$t('chat.KnowledgeSource.referenceParagraph')">
|
||||||
<div v-if="detail.paragraph_list.length > 0" class="w-full">
|
<div v-if="detail.paragraph_list.length > 0" class="w-full">
|
||||||
<template v-for="(item, index) in detail.paragraph_list" :key="index">
|
<template v-for="(item, index) in detail.paragraph_list" :key="index">
|
||||||
<ParagraphCard :data="item" :index="index" />
|
<ParagraphCard :data="item" :index="index" />
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
(chatRecord.write_ed === undefined || chatRecord.write_ed === true) &&
|
(chatRecord.write_ed === undefined || chatRecord.write_ed === true) &&
|
||||||
!answer_text.content
|
!answer_text.content
|
||||||
"
|
"
|
||||||
source=" 抱歉,没有查找到相关内容,请重新描述您的问题或提供更多信息。"
|
:source="$t('chat.tip.answerMessage')"
|
||||||
></MdRenderer>
|
></MdRenderer>
|
||||||
<MdRenderer
|
<MdRenderer
|
||||||
:chat_record_id="answer_text.chat_record_id"
|
:chat_record_id="answer_text.chat_record_id"
|
||||||
@ -24,10 +24,10 @@
|
|||||||
:send-message="chatMessage"
|
:send-message="chatMessage"
|
||||||
></MdRenderer>
|
></MdRenderer>
|
||||||
<span v-else-if="chatRecord.is_stop" shadow="always" class="dialog-card">
|
<span v-else-if="chatRecord.is_stop" shadow="always" class="dialog-card">
|
||||||
已停止回答
|
{{ $t('chat.tip.stopAnswer') }}
|
||||||
</span>
|
</span>
|
||||||
<span v-else shadow="always" class="dialog-card">
|
<span v-else shadow="always" class="dialog-card">
|
||||||
回答中 <span class="dotting"></span>
|
{{ $t('chat.tip.answerLoading') }} <span class="dotting"></span>
|
||||||
</span>
|
</span>
|
||||||
<!-- 知识来源 -->
|
<!-- 知识来源 -->
|
||||||
<div v-if="showSource(chatRecord) && index === chatRecord.answer_text_list.length - 1">
|
<div v-if="showSource(chatRecord) && index === chatRecord.answer_text_list.length - 1">
|
||||||
|
|||||||
@ -95,10 +95,10 @@
|
|||||||
v-model="inputValue"
|
v-model="inputValue"
|
||||||
:placeholder="
|
:placeholder="
|
||||||
startRecorderTime
|
startRecorderTime
|
||||||
? '说话中...'
|
? `${$t('chat.inputPlaceholder.speaking')}...`
|
||||||
: recorderLoading
|
: recorderLoading
|
||||||
? '转文字中...'
|
? `${$t('chat.inputPlaceholder.recorderLoading')}...`
|
||||||
: '请输入问题,Ctrl+Enter 换行,Enter发送'
|
: $t('chat.inputPlaceholder.default')
|
||||||
"
|
"
|
||||||
:autosize="{ minRows: 1, maxRows: isMobile ? 4 : 10 }"
|
:autosize="{ minRows: 1, maxRows: isMobile ? 4 : 10 }"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
@ -119,12 +119,13 @@
|
|||||||
<el-tooltip effect="dark" placement="top" popper-class="upload-tooltip-width">
|
<el-tooltip effect="dark" placement="top" popper-class="upload-tooltip-width">
|
||||||
<template #content>
|
<template #content>
|
||||||
<div class="break-all pre-wrap">
|
<div class="break-all pre-wrap">
|
||||||
上传文件:最多{{
|
{{ $t('chat.uploadFile.label') }}:{{
|
||||||
props.applicationDetails.file_upload_setting.maxFiles
|
$t('chat.uploadFile.most')
|
||||||
}}个,每个文件限制
|
}}{{ props.applicationDetails.file_upload_setting.maxFiles
|
||||||
{{ props.applicationDetails.file_upload_setting.fileLimit }}MB<br />文件类型:{{
|
}}{{ $t('chat.uploadFile.limit') }}
|
||||||
getAcceptList().replace(/\./g, '').replace(/,/g, '、').toUpperCase()
|
{{ props.applicationDetails.file_upload_setting.fileLimit }}MB<br />{{
|
||||||
}}
|
$t('chat.uploadFile.fileType')
|
||||||
|
}}:{{ getAcceptList().replace(/\./g, '').replace(/,/g, '、').toUpperCase() }}
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-button text :disabled="checkMaxFilesLimit()" class="mt-4">
|
<el-button text :disabled="checkMaxFilesLimit()" class="mt-4">
|
||||||
@ -186,14 +187,11 @@ import bus from '@/bus'
|
|||||||
import 'recorder-core/src/engine/mp3'
|
import 'recorder-core/src/engine/mp3'
|
||||||
import 'recorder-core/src/engine/mp3-engine'
|
import 'recorder-core/src/engine/mp3-engine'
|
||||||
import { MsgWarning } from '@/utils/message'
|
import { MsgWarning } from '@/utils/message'
|
||||||
import useStore from '@/stores'
|
|
||||||
import { t } from '@/locales'
|
import { t } from '@/locales'
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const { application } = useStore()
|
|
||||||
const {
|
const {
|
||||||
query: { mode, question },
|
query: { mode, question },
|
||||||
params: { accessToken }
|
|
||||||
} = route as any
|
} = route as any
|
||||||
const quickInputRef = ref()
|
const quickInputRef = ref()
|
||||||
const props = withDefaults(
|
const props = withDefaults(
|
||||||
@ -257,7 +255,7 @@ const getAcceptList = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (accepts.length === 0) {
|
if (accepts.length === 0) {
|
||||||
return '.请在文件上传配置中选择文件类型'
|
return `.${t('chat.uploadFile.tipMessage')}`
|
||||||
}
|
}
|
||||||
return accepts.map((ext: any) => '.' + ext).join(',')
|
return accepts.map((ext: any) => '.' + ext).join(',')
|
||||||
}
|
}
|
||||||
@ -281,13 +279,13 @@ const uploadFile = async (file: any, fileList: any) => {
|
|||||||
uploadAudioList.value.length +
|
uploadAudioList.value.length +
|
||||||
uploadVideoList.value.length
|
uploadVideoList.value.length
|
||||||
if (file_limit_once >= maxFiles) {
|
if (file_limit_once >= maxFiles) {
|
||||||
MsgWarning('最多上传' + maxFiles + '个文件')
|
MsgWarning(t('chat.uploadFile.limitMessage1') + maxFiles + t('chat.uploadFile.limitMessage2'))
|
||||||
fileList.splice(0, fileList.length)
|
fileList.splice(0, fileList.length)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (fileList.filter((f: any) => f.size > fileLimit * 1024 * 1024).length > 0) {
|
if (fileList.filter((f: any) => f.size > fileLimit * 1024 * 1024).length > 0) {
|
||||||
// MB
|
// MB
|
||||||
MsgWarning('单个文件大小不能超过' + fileLimit + 'MB')
|
MsgWarning(t('chat.uploadFile.sizeLimit') + fileLimit + 'MB')
|
||||||
fileList.splice(0, fileList.length)
|
fileList.splice(0, fileList.length)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -356,7 +354,7 @@ const uploadFile = async (file: any, fileList: any) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
if (!inputValue.value && uploadImageList.value.length > 0) {
|
if (!inputValue.value && uploadImageList.value.length > 0) {
|
||||||
inputValue.value = '请解析图片内容'
|
inputValue.value = t('chat.uploadFile.imageMessage')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -397,14 +395,10 @@ const startRecording = async () => {
|
|||||||
(err: any) => {
|
(err: any) => {
|
||||||
MsgAlert(
|
MsgAlert(
|
||||||
t('common.tip'),
|
t('common.tip'),
|
||||||
`<p>该功能需要使用麦克风,浏览器禁止不安全页面录音,解决方案如下:<br/>
|
`${t('chat.tip.recorderTip')}
|
||||||
1、可开启 https 解决;<br/>
|
|
||||||
2、若无 https 配置则需要修改浏览器安全配置,Chrome 设置如下:<br/>
|
|
||||||
(1) 地址栏输入chrome://flags/#unsafely-treat-insecure-origin-as-secure;<br/>
|
|
||||||
(2) 将 http 站点配置在文本框中,例如: http://127.0.0.1:8080。</p>
|
|
||||||
<img src="${new URL(`@/assets/tipIMG.jpg`, import.meta.url).href}" style="width: 100%;" />`,
|
<img src="${new URL(`@/assets/tipIMG.jpg`, import.meta.url).href}" style="width: 100%;" />`,
|
||||||
{
|
{
|
||||||
confirmButtonText: '我知道了',
|
confirmButtonText: t('chat.tip.confirm'),
|
||||||
dangerouslyUseHTMLString: true,
|
dangerouslyUseHTMLString: true,
|
||||||
customClass: 'record-tip-confirm'
|
customClass: 'record-tip-confirm'
|
||||||
}
|
}
|
||||||
@ -414,14 +408,10 @@ const startRecording = async () => {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
MsgAlert(
|
MsgAlert(
|
||||||
t('common.tip'),
|
t('common.tip'),
|
||||||
`<p>该功能需要使用麦克风,浏览器禁止不安全页面录音,解决方案如下:<br/>
|
`${t('chat.tip.recorderTip')}
|
||||||
1、可开启 https 解决;<br/>
|
|
||||||
2、若无 https 配置则需要修改浏览器安全配置,Chrome 设置如下:<br/>
|
|
||||||
(1) 地址栏输入chrome://flags/#unsafely-treat-insecure-origin-as-secure;<br/>
|
|
||||||
(2) 将 http 站点配置在文本框中,例如: http://127.0.0.1:8080。</p>
|
|
||||||
<img src="${new URL(`@/assets/tipIMG.jpg`, import.meta.url).href}" style="width: 100%;" />`,
|
<img src="${new URL(`@/assets/tipIMG.jpg`, import.meta.url).href}" style="width: 100%;" />`,
|
||||||
{
|
{
|
||||||
confirmButtonText: '我知道了',
|
confirmButtonText: t('chat.tip.confirm'),
|
||||||
dangerouslyUseHTMLString: true,
|
dangerouslyUseHTMLString: true,
|
||||||
customClass: 'record-tip-confirm'
|
customClass: 'record-tip-confirm'
|
||||||
}
|
}
|
||||||
@ -445,7 +435,7 @@ const stopRecording = () => {
|
|||||||
uploadRecording(blob) // 上传录音文件
|
uploadRecording(blob) // 上传录音文件
|
||||||
},
|
},
|
||||||
(err: any) => {
|
(err: any) => {
|
||||||
console.error('录音失败:', err)
|
console.error(`${t('chat.tip.recorderError')}:`, err)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -472,7 +462,7 @@ const uploadRecording = async (audioBlob: Blob) => {
|
|||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
recorderLoading.value = false
|
recorderLoading.value = false
|
||||||
console.error('上传失败:', error)
|
console.error(`${t('chat.uploadFile.errorMessage')}:`, error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const handleTimeChange = () => {
|
const handleTimeChange = () => {
|
||||||
|
|||||||
@ -56,7 +56,7 @@ const menus = ref([
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '引用',
|
label: t('chat.quote'),
|
||||||
icon: 'app-quote',
|
icon: 'app-quote',
|
||||||
click: () => {
|
click: () => {
|
||||||
bus.emit('chat-input', getSelection())
|
bus.emit('chat-input', getSelection())
|
||||||
|
|||||||
@ -7,12 +7,12 @@
|
|||||||
<div>
|
<div>
|
||||||
<!-- 语音播放 -->
|
<!-- 语音播放 -->
|
||||||
<span v-if="tts">
|
<span v-if="tts">
|
||||||
<el-tooltip effect="dark" content="点击播放" placement="top" v-if="!audioPlayerStatus">
|
<el-tooltip effect="dark" :content="$t('chat.operation.play')" placement="top" v-if="!audioPlayerStatus">
|
||||||
<el-button text :disabled="!data?.write_ed" @click="playAnswerText(data?.answer_text)">
|
<el-button text :disabled="!data?.write_ed" @click="playAnswerText(data?.answer_text)">
|
||||||
<AppIcon iconName="app-video-play"></AppIcon>
|
<AppIcon iconName="app-video-play"></AppIcon>
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-tooltip v-else effect="dark" content="停止" placement="top">
|
<el-tooltip v-else effect="dark" :content="$t('chat.operation.pause')" placement="top">
|
||||||
<el-button type="primary" text :disabled="!data?.write_ed" @click="pausePlayAnswerText()">
|
<el-button type="primary" text :disabled="!data?.write_ed" @click="pausePlayAnswerText()">
|
||||||
<AppIcon iconName="app-video-pause"></AppIcon>
|
<AppIcon iconName="app-video-pause"></AppIcon>
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -20,13 +20,13 @@
|
|||||||
<el-divider direction="vertical" />
|
<el-divider direction="vertical" />
|
||||||
</span>
|
</span>
|
||||||
<span v-if="type == 'ai-chat' || type == 'log'">
|
<span v-if="type == 'ai-chat' || type == 'log'">
|
||||||
<el-tooltip effect="dark" content="换个答案" placement="top">
|
<el-tooltip effect="dark" :content="$t('chat.operation.regeneration')" placement="top">
|
||||||
<el-button :disabled="chat_loading" text @click="regeneration">
|
<el-button :disabled="chat_loading" text @click="regeneration">
|
||||||
<el-icon><RefreshRight /></el-icon>
|
<el-icon><RefreshRight /></el-icon>
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-divider direction="vertical" />
|
<el-divider direction="vertical" />
|
||||||
<el-tooltip effect="dark" content="复制" placement="top">
|
<el-tooltip effect="dark" :content="$t('common.copy')" placement="top">
|
||||||
<el-button text @click="copyClick(data?.answer_text)">
|
<el-button text @click="copyClick(data?.answer_text)">
|
||||||
<AppIcon iconName="app-copy"></AppIcon>
|
<AppIcon iconName="app-copy"></AppIcon>
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -34,7 +34,7 @@
|
|||||||
<el-divider direction="vertical" />
|
<el-divider direction="vertical" />
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
effect="dark"
|
effect="dark"
|
||||||
content="赞同"
|
:content="$t('chat.operation.like')"
|
||||||
placement="top"
|
placement="top"
|
||||||
v-if="buttonData?.vote_status === '-1'"
|
v-if="buttonData?.vote_status === '-1'"
|
||||||
>
|
>
|
||||||
@ -44,7 +44,7 @@
|
|||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
effect="dark"
|
effect="dark"
|
||||||
content="取消赞同"
|
:content="$t('chat.operation.cancelLike')"
|
||||||
placement="top"
|
placement="top"
|
||||||
v-if="buttonData?.vote_status === '0'"
|
v-if="buttonData?.vote_status === '0'"
|
||||||
>
|
>
|
||||||
@ -55,7 +55,7 @@
|
|||||||
<el-divider direction="vertical" v-if="buttonData?.vote_status === '-1'" />
|
<el-divider direction="vertical" v-if="buttonData?.vote_status === '-1'" />
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
effect="dark"
|
effect="dark"
|
||||||
content="反对"
|
:content="$t('chat.operation.oppose')"
|
||||||
placement="top"
|
placement="top"
|
||||||
v-if="buttonData?.vote_status === '-1'"
|
v-if="buttonData?.vote_status === '-1'"
|
||||||
>
|
>
|
||||||
@ -65,7 +65,7 @@
|
|||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
effect="dark"
|
effect="dark"
|
||||||
content="取消反对"
|
:content="$t('chat.operation.cancelOppose')"
|
||||||
placement="top"
|
placement="top"
|
||||||
v-if="buttonData?.vote_status === '1'"
|
v-if="buttonData?.vote_status === '1'"
|
||||||
>
|
>
|
||||||
@ -85,7 +85,7 @@ import { copyClick } from '@/utils/clipboard'
|
|||||||
import applicationApi from '@/api/application'
|
import applicationApi from '@/api/application'
|
||||||
import { datetimeFormat } from '@/utils/time'
|
import { datetimeFormat } from '@/utils/time'
|
||||||
import { MsgError } from '@/utils/message'
|
import { MsgError } from '@/utils/message'
|
||||||
|
import { t } from '@/locales'
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const {
|
const {
|
||||||
params: { id }
|
params: { id }
|
||||||
@ -164,7 +164,7 @@ function removeFormRander(text: string) {
|
|||||||
|
|
||||||
const playAnswerText = (text: string) => {
|
const playAnswerText = (text: string) => {
|
||||||
if (!text) {
|
if (!text) {
|
||||||
text = '抱歉,没有查找到相关内容,请重新描述您的问题或提供更多信息。'
|
text = t('chat.tip.answerMessage')
|
||||||
}
|
}
|
||||||
// 移除表单渲染器
|
// 移除表单渲染器
|
||||||
text = removeFormRander(text)
|
text = removeFormRander(text)
|
||||||
|
|||||||
@ -8,19 +8,19 @@
|
|||||||
<div>
|
<div>
|
||||||
<!-- 语音播放 -->
|
<!-- 语音播放 -->
|
||||||
<span v-if="tts">
|
<span v-if="tts">
|
||||||
<el-tooltip effect="dark" content="点击播放" placement="top" v-if="!audioPlayerStatus">
|
<el-tooltip effect="dark" :content="$t('chat.operation.play')" placement="top" v-if="!audioPlayerStatus">
|
||||||
<el-button text @click="playAnswerText(data?.answer_text)">
|
<el-button text @click="playAnswerText(data?.answer_text)">
|
||||||
<AppIcon iconName="app-video-play"></AppIcon>
|
<AppIcon iconName="app-video-play"></AppIcon>
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-tooltip v-else effect="dark" content="停止" placement="top">
|
<el-tooltip v-else effect="dark" :content="$t('chat.operation.pause')" placement="top">
|
||||||
<el-button type="primary" text @click="pausePlayAnswerText()">
|
<el-button type="primary" text @click="pausePlayAnswerText()">
|
||||||
<AppIcon iconName="app-video-pause"></AppIcon>
|
<AppIcon iconName="app-video-pause"></AppIcon>
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-divider direction="vertical" />
|
<el-divider direction="vertical" />
|
||||||
</span>
|
</span>
|
||||||
<el-tooltip effect="dark" content="复制" placement="top">
|
<el-tooltip effect="dark" :content="$t('common.copy')" placement="top">
|
||||||
<el-button text @click="copyClick(data?.answer_text)">
|
<el-button text @click="copyClick(data?.answer_text)">
|
||||||
<AppIcon iconName="app-copy"></AppIcon>
|
<AppIcon iconName="app-copy"></AppIcon>
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -29,7 +29,7 @@
|
|||||||
<el-tooltip
|
<el-tooltip
|
||||||
v-if="buttonData.improve_paragraph_id_list.length === 0"
|
v-if="buttonData.improve_paragraph_id_list.length === 0"
|
||||||
effect="dark"
|
effect="dark"
|
||||||
content="修改内容"
|
:content="$t('views.log.editContent')"
|
||||||
placement="top"
|
placement="top"
|
||||||
>
|
>
|
||||||
<el-button text @click="editContent(data)">
|
<el-button text @click="editContent(data)">
|
||||||
@ -37,7 +37,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
|
|
||||||
<el-tooltip v-else effect="dark" content="修改标注" placement="top">
|
<el-tooltip v-else effect="dark" :content="$t('views.log.editMark')" placement="top">
|
||||||
<el-button text @click="editMark(data)">
|
<el-button text @click="editMark(data)">
|
||||||
<AppIcon iconName="app-document-active" class="primary"></AppIcon>
|
<AppIcon iconName="app-document-active" class="primary"></AppIcon>
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -67,7 +67,7 @@ import { datetimeFormat } from '@/utils/time'
|
|||||||
import applicationApi from '@/api/application'
|
import applicationApi from '@/api/application'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { MsgError } from '@/utils/message'
|
import { MsgError } from '@/utils/message'
|
||||||
|
import { t } from '@/locales'
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const {
|
const {
|
||||||
params: { id }
|
params: { id }
|
||||||
@ -143,7 +143,7 @@ function removeFormRander(text: string) {
|
|||||||
|
|
||||||
const playAnswerText = (text: string) => {
|
const playAnswerText = (text: string) => {
|
||||||
if (!text) {
|
if (!text) {
|
||||||
text = '抱歉,没有查找到相关内容,请重新描述您的问题或提供更多信息。'
|
text = t('chat.tip.answerMessage')
|
||||||
}
|
}
|
||||||
// 移除表单渲染器
|
// 移除表单渲染器
|
||||||
text = removeFormRander(text)
|
text = removeFormRander(text)
|
||||||
|
|||||||
@ -17,14 +17,14 @@
|
|||||||
v-if="chatRecord.is_stop && !chatRecord.write_ed"
|
v-if="chatRecord.is_stop && !chatRecord.write_ed"
|
||||||
@click="startChat(chatRecord)"
|
@click="startChat(chatRecord)"
|
||||||
link
|
link
|
||||||
>继续
|
>{{ $t('chat.operation.continue') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
v-else-if="!chatRecord.write_ed"
|
v-else-if="!chatRecord.write_ed"
|
||||||
@click="stopChat(chatRecord)"
|
@click="stopChat(chatRecord)"
|
||||||
link
|
link
|
||||||
>停止回答
|
>{{ $t('chat.operation.stopChat') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -16,6 +16,7 @@
|
|||||||
import { type chatType } from '@/api/type/application'
|
import { type chatType } from '@/api/type/application'
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import MdRenderer from '@/components/markdown/MdRenderer.vue'
|
import MdRenderer from '@/components/markdown/MdRenderer.vue'
|
||||||
|
import { t } from '@/locales'
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
application: any
|
application: any
|
||||||
available: boolean
|
available: boolean
|
||||||
@ -28,7 +29,7 @@ const toQuickQuestion = (match: string, offset: number, input: string) => {
|
|||||||
const prologue = computed(() => {
|
const prologue = computed(() => {
|
||||||
const temp = props.available
|
const temp = props.available
|
||||||
? props.application?.prologue
|
? props.application?.prologue
|
||||||
: '抱歉,当前正在维护,无法提供服务,请稍后再试!'
|
: t('chat.tip.prologueMessage')
|
||||||
return temp?.replace(/-\s.+/g, toQuickQuestion)
|
return temp?.replace(/-\s.+/g, toQuickQuestion)
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
<el-icon class="mr-4">
|
<el-icon class="mr-4">
|
||||||
<Download />
|
<Download />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
点击下载文件
|
{{ $t('chat.download') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="show flex align-center">
|
<div class="show flex align-center">
|
||||||
<img :src="getImgUrl(item && item?.name)" alt="" width="24" />
|
<img :src="getImgUrl(item && item?.name)" alt="" width="24" />
|
||||||
|
|||||||
@ -8,15 +8,19 @@
|
|||||||
style="padding: 0 24px"
|
style="padding: 0 24px"
|
||||||
>
|
>
|
||||||
<el-card shadow="always" class="dialog-card" style="--el-card-padding: 16px 8px">
|
<el-card shadow="always" class="dialog-card" style="--el-card-padding: 16px 8px">
|
||||||
<div class="flex align-center cursor w-full" style="padding: 0 8px;" @click="showUserInput = !showUserInput">
|
<div
|
||||||
|
class="flex align-center cursor w-full"
|
||||||
|
style="padding: 0 8px"
|
||||||
|
@click="showUserInput = !showUserInput"
|
||||||
|
>
|
||||||
<el-icon class="mr-8 arrow-icon" :class="showUserInput ? 'rotate-90' : ''"
|
<el-icon class="mr-8 arrow-icon" :class="showUserInput ? 'rotate-90' : ''"
|
||||||
><CaretRight
|
><CaretRight
|
||||||
/></el-icon>
|
/></el-icon>
|
||||||
用户输入
|
{{ $t('chat.userInput') }}
|
||||||
</div>
|
</div>
|
||||||
<el-scrollbar max-height="160">
|
<el-scrollbar max-height="160">
|
||||||
<el-collapse-transition>
|
<el-collapse-transition>
|
||||||
<div v-show="showUserInput" class="mt-16" style="padding: 0 8px;">
|
<div v-show="showUserInput" class="mt-16" style="padding: 0 8px">
|
||||||
<DynamicsForm
|
<DynamicsForm
|
||||||
:key="dynamicsFormRefresh"
|
:key="dynamicsFormRefresh"
|
||||||
v-model="form_data_context"
|
v-model="form_data_context"
|
||||||
@ -47,6 +51,7 @@ import DynamicsForm from '@/components/dynamics-form/index.vue'
|
|||||||
import type { FormField } from '@/components/dynamics-form/type'
|
import type { FormField } from '@/components/dynamics-form/type'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { MsgWarning } from '@/utils/message'
|
import { MsgWarning } from '@/utils/message'
|
||||||
|
import { t } from '@/locales'
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
application: any
|
application: any
|
||||||
@ -267,7 +272,7 @@ const checkInputParam = () => {
|
|||||||
inputFieldList.value[i].required &&
|
inputFieldList.value[i].required &&
|
||||||
!form_data_context.value[inputFieldList.value[i].field]
|
!form_data_context.value[inputFieldList.value[i].field]
|
||||||
) {
|
) {
|
||||||
MsgWarning('请填写所有必填字段')
|
MsgWarning(t('chat.tip.requiredMessage'))
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -282,7 +287,7 @@ const checkInputParam = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (msg.length > 0) {
|
if (msg.length > 0) {
|
||||||
MsgWarning(`请在URL中填写参数 ${msg.join('、')}的值`)
|
MsgWarning(`${t('chat.tip.inputParamMessage1')} ${msg.join('、')}${t('chat.tip.inputParamMessage2')}`)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
|||||||
@ -271,7 +271,7 @@ const getWrite = (chat: any, reader: any, stream: boolean) => {
|
|||||||
const errorWrite = (chat: any, message?: string) => {
|
const errorWrite = (chat: any, message?: string) => {
|
||||||
ChatManagement.addChatRecord(chat, 50, loading)
|
ChatManagement.addChatRecord(chat, 50, loading)
|
||||||
ChatManagement.write(chat.id)
|
ChatManagement.write(chat.id)
|
||||||
ChatManagement.append(chat.id, message || t('components.chat.tip.error500Message'))
|
ChatManagement.append(chat.id, message || t('chat.tip.error500Message'))
|
||||||
ChatManagement.updateStatus(chat.id, 500)
|
ChatManagement.updateStatus(chat.id, 500)
|
||||||
ChatManagement.close(chat.id)
|
ChatManagement.close(chat.id)
|
||||||
}
|
}
|
||||||
@ -344,9 +344,9 @@ function chatMessage(chat?: any, problem?: string, re_chat?: boolean, other_para
|
|||||||
errorWrite(chat)
|
errorWrite(chat)
|
||||||
})
|
})
|
||||||
} else if (response.status === 460) {
|
} else if (response.status === 460) {
|
||||||
return Promise.reject(t('components.chat.tip.errorIdentifyMessage'))
|
return Promise.reject(t('chat.tip.errorIdentifyMessage'))
|
||||||
} else if (response.status === 461) {
|
} else if (response.status === 461) {
|
||||||
return Promise.reject('components.chat.tip.errorLimitMessage')
|
return Promise.reject('chat.tip.errorLimitMessage')
|
||||||
} else {
|
} else {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
// 将滚动条滚动到最下面
|
// 将滚动条滚动到最下面
|
||||||
|
|||||||
@ -103,7 +103,7 @@ function submitHandle() {
|
|||||||
loading.value = false
|
loading.value = false
|
||||||
}, 200)
|
}, 200)
|
||||||
} else {
|
} else {
|
||||||
MsgError(`${props.quickCreateName}${t('components.dynamicsForm.tip.requiredMessage')}`)
|
MsgError(`${props.quickCreateName}${t('dynamicsForm.tip.requiredMessage')}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -105,8 +105,8 @@ const errMsg = computed(() => {
|
|||||||
return props_info.value.err_msg
|
return props_info.value.err_msg
|
||||||
? props_info.value.err_msg
|
? props_info.value.err_msg
|
||||||
: isString(props.formfield.label)
|
: isString(props.formfield.label)
|
||||||
? props.formfield.label + t('components.dynamicsForm.tip.requiredMessage')
|
? props.formfield.label + t('dynamicsForm.tip.requiredMessage')
|
||||||
: props.formfield.label.label + t('components.dynamicsForm.tip.requiredMessage')
|
: props.formfield.label.label + t('dynamicsForm.tip.requiredMessage')
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
* 反序列化
|
* 反序列化
|
||||||
|
|||||||
@ -1,39 +1,39 @@
|
|||||||
import { t } from '@/locales'
|
import { t } from '@/locales'
|
||||||
const input_type_list = [
|
const input_type_list = [
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.input_type_list.TextInput'),
|
label: t('dynamicsForm.input_type_list.TextInput'),
|
||||||
value: 'TextInput'
|
value: 'TextInput'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.input_type_list.Slider'),
|
label: t('dynamicsForm.input_type_list.Slider'),
|
||||||
value: 'Slider'
|
value: 'Slider'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.input_type_list.SwitchInput'),
|
label: t('dynamicsForm.input_type_list.SwitchInput'),
|
||||||
value: 'SwitchInput'
|
value: 'SwitchInput'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.input_type_list.SingleSelect'),
|
label: t('dynamicsForm.input_type_list.SingleSelect'),
|
||||||
value: 'SingleSelect'
|
value: 'SingleSelect'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.input_type_list.MultiSelect'),
|
label: t('dynamicsForm.input_type_list.MultiSelect'),
|
||||||
value: 'MultiSelect'
|
value: 'MultiSelect'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.input_type_list.DatePicker'),
|
label: t('dynamicsForm.input_type_list.DatePicker'),
|
||||||
value: 'DatePicker'
|
value: 'DatePicker'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.input_type_list.JsonInput'),
|
label: t('dynamicsForm.input_type_list.JsonInput'),
|
||||||
value: 'JsonInput'
|
value: 'JsonInput'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.input_type_list.RadioCard'),
|
label: t('dynamicsForm.input_type_list.RadioCard'),
|
||||||
value: 'RadioCard'
|
value: 'RadioCard'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.input_type_list.RadioRow'),
|
label: t('dynamicsForm.input_type_list.RadioRow'),
|
||||||
value: 'RadioRow'
|
value: 'RadioRow'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -7,35 +7,35 @@
|
|||||||
:model="form_data"
|
:model="form_data"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
>
|
>
|
||||||
<el-form-item :label="$t('components.dynamicsForm.paramForm.field.label')" :required="true" prop="field" :rules="rules.field">
|
<el-form-item :label="$t('dynamicsForm.paramForm.field.label')" :required="true" prop="field" :rules="rules.field">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="form_data.field"
|
v-model="form_data.field"
|
||||||
:maxlength="64"
|
:maxlength="64"
|
||||||
:placeholder="$t('components.dynamicsForm.paramForm.field.placeholder')"
|
:placeholder="$t('dynamicsForm.paramForm.field.placeholder')"
|
||||||
show-word-limit
|
show-word-limit
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('components.dynamicsForm.paramForm.name.label')" :required="true" prop="label" :rules="rules.label">
|
<el-form-item :label="$t('dynamicsForm.paramForm.name.label')" :required="true" prop="label" :rules="rules.label">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="form_data.label"
|
v-model="form_data.label"
|
||||||
:maxlength="64"
|
:maxlength="64"
|
||||||
show-word-limit
|
show-word-limit
|
||||||
:placeholder="$t('components.dynamicsForm.paramForm.name.placeholder')"
|
:placeholder="$t('dynamicsForm.paramForm.name.placeholder')"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('components.dynamicsForm.paramForm.tooltip.label')">
|
<el-form-item :label="$t('dynamicsForm.paramForm.tooltip.label')">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="form_data.tooltip"
|
v-model="form_data.tooltip"
|
||||||
:maxlength="128"
|
:maxlength="128"
|
||||||
show-word-limit
|
show-word-limit
|
||||||
:placeholder="$t('components.dynamicsForm.paramForm.tooltip.placeholder')"
|
:placeholder="$t('dynamicsForm.paramForm.tooltip.placeholder')"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('components.dynamicsForm.paramForm.required.label')" :required="true" prop="required" :rules="rules.required">
|
<el-form-item :label="$t('dynamicsForm.paramForm.required.label')" :required="true" prop="required" :rules="rules.required">
|
||||||
<el-switch v-model="form_data.required" :active-value="true" :inactive-value="false" />
|
<el-switch v-model="form_data.required" :active-value="true" :inactive-value="false" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('components.dynamicsForm.paramForm.input_type.label')" :required="true" prop="input_type" :rules="rules.input_type">
|
<el-form-item :label="$t('dynamicsForm.paramForm.input_type.label')" :required="true" prop="input_type" :rules="rules.input_type">
|
||||||
<el-select v-model="form_data.input_type" :placeholder="$t('components.dynamicsForm.paramForm.input_type.placeholder')">
|
<el-select v-model="form_data.input_type" :placeholder="$t('dynamicsForm.paramForm.input_type.placeholder')">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="input_type in input_type_list"
|
v-for="input_type in input_type_list"
|
||||||
:key="input_type.value"
|
:key="input_type.value"
|
||||||
@ -81,10 +81,10 @@ const form_data = ref<any>({
|
|||||||
input_type: ''
|
input_type: ''
|
||||||
})
|
})
|
||||||
const rules = {
|
const rules = {
|
||||||
label: [{ required: true, message: t('components.dynamicsForm.paramForm.name.requiredMessage') }],
|
label: [{ required: true, message: t('dynamicsForm.paramForm.name.requiredMessage') }],
|
||||||
field: [{ required: true, message: t('components.dynamicsForm.paramForm.field.requiredMessage') }],
|
field: [{ required: true, message: t('dynamicsForm.paramForm.field.requiredMessage') }],
|
||||||
required: [{ required: true, message: t('components.dynamicsForm.paramForm.required.requiredMessage') }],
|
required: [{ required: true, message: t('dynamicsForm.paramForm.required.requiredMessage') }],
|
||||||
input_type: [{ required: true, message: t('components.dynamicsForm.paramForm.input_type.requiredMessage') }]
|
input_type: [{ required: true, message: t('dynamicsForm.paramForm.input_type.requiredMessage') }]
|
||||||
}
|
}
|
||||||
const getData = () => {
|
const getData = () => {
|
||||||
let label: string | any = form_data.value.label
|
let label: string | any = form_data.value.label
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-form-item :label="$t('components.dynamicsForm.DatePicker.dataType.label')" required>
|
<el-form-item :label="$t('dynamicsForm.DatePicker.dataType.label')" required>
|
||||||
<el-select
|
<el-select
|
||||||
@change="type_change"
|
@change="type_change"
|
||||||
v-model="formValue.type"
|
v-model="formValue.type"
|
||||||
:placeholder="$t('components.dynamicsForm.DatePicker.dataType.placeholder')"
|
:placeholder="$t('dynamicsForm.DatePicker.dataType.placeholder')"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="input_type in type_list"
|
v-for="input_type in type_list"
|
||||||
@ -13,13 +13,13 @@
|
|||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('components.dynamicsForm.DatePicker.format.label')" required>
|
<el-form-item :label="$t('dynamicsForm.DatePicker.format.label')" required>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="formValue.format"
|
v-model="formValue.format"
|
||||||
filterable
|
filterable
|
||||||
default-first-option
|
default-first-option
|
||||||
allow-create
|
allow-create
|
||||||
:placeholder="$t('components.dynamicsForm.DatePicker.format.placeholder')"
|
:placeholder="$t('dynamicsForm.DatePicker.format.placeholder')"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="input_type in type_dict[formValue.type]"
|
v-for="input_type in type_dict[formValue.type]"
|
||||||
@ -33,23 +33,23 @@
|
|||||||
class="defaultValueItem"
|
class="defaultValueItem"
|
||||||
:required="formValue.required"
|
:required="formValue.required"
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
:rules="
|
:rules="
|
||||||
formValue.required
|
formValue.required
|
||||||
? [{ required: true, message: `${$t('components.dynamicsForm.default.label')}${$t('components.dynamicsForm.default.requiredMessage')}` }]
|
? [{ required: true, message: `${$t('dynamicsForm.default.label')}${$t('dynamicsForm.default.requiredMessage')}` }]
|
||||||
: []
|
: []
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="defaultValueCheckbox">
|
<div class="defaultValueCheckbox">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-model="formValue.show_default_value"
|
v-model="formValue.show_default_value"
|
||||||
:label="$t('components.dynamicsForm.default.show')"
|
:label="$t('dynamicsForm.default.show')"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formValue.default_value"
|
v-model="formValue.default_value"
|
||||||
:type="formValue.type"
|
:type="formValue.type"
|
||||||
:placeholder="$t('components.dynamicsForm.DatePicker.placeholder')"
|
:placeholder="$t('dynamicsForm.DatePicker.placeholder')"
|
||||||
:format="formValue.format"
|
:format="formValue.format"
|
||||||
:value-format="formValue.format"
|
:value-format="formValue.format"
|
||||||
/>
|
/>
|
||||||
@ -60,19 +60,19 @@ import { computed, onBeforeMount } from 'vue'
|
|||||||
import { t } from '@/locales'
|
import { t } from '@/locales'
|
||||||
const type_list = [
|
const type_list = [
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.DatePicker.year'),
|
label: t('dynamicsForm.DatePicker.year'),
|
||||||
value: 'year'
|
value: 'year'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.DatePicker.month'),
|
label: t('dynamicsForm.DatePicker.month'),
|
||||||
value: 'month'
|
value: 'month'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.DatePicker.date'),
|
label: t('dynamicsForm.DatePicker.date'),
|
||||||
value: 'date'
|
value: 'date'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('components.dynamicsForm.DatePicker.datetime'),
|
label: t('dynamicsForm.DatePicker.datetime'),
|
||||||
value: 'datetime'
|
value: 'datetime'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
class="defaultValueItem"
|
class="defaultValueItem"
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
:required="formValue.required"
|
:required="formValue.required"
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:rules="[default_value_rule]"
|
:rules="[default_value_rule]"
|
||||||
@ -9,7 +9,7 @@
|
|||||||
<div class="defaultValueCheckbox">
|
<div class="defaultValueCheckbox">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-model="formValue.show_default_value"
|
v-model="formValue.show_default_value"
|
||||||
:label="$t('components.dynamicsForm.default.show')"
|
:label="$t('dynamicsForm.default.show')"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<JsonInput ref="jsonInputRef" v-model="formValue.default_value"> </JsonInput>
|
<JsonInput ref="jsonInputRef" v-model="formValue.default_value"> </JsonInput>
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<el-form-item>
|
<el-form-item>
|
||||||
<template #label>
|
<template #label>
|
||||||
<div class="flex-between">
|
<div class="flex-between">
|
||||||
{{ $t('components.dynamicsForm.Select.label') }}
|
{{ $t('dynamicsForm.Select.label') }}
|
||||||
<el-button link type="primary" @click.stop="addOption()">
|
<el-button link type="primary" @click.stop="addOption()">
|
||||||
<el-icon class="mr-4">
|
<el-icon class="mr-4">
|
||||||
<Plus />
|
<Plus />
|
||||||
@ -14,11 +14,11 @@
|
|||||||
<el-row style="width: 100%" :gutter="10">
|
<el-row style="width: 100%" :gutter="10">
|
||||||
<el-col :span="10">
|
<el-col :span="10">
|
||||||
<div class="grid-content ep-bg-purple" />
|
<div class="grid-content ep-bg-purple" />
|
||||||
{{ $t('components.dynamicsForm.tag.label') }}
|
{{ $t('dynamicsForm.tag.label') }}
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12"
|
<el-col :span="12"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
{{ $t('components.dynamicsForm.Select.label') }}</el-col
|
{{ $t('dynamicsForm.Select.label') }}</el-col
|
||||||
>
|
>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row
|
<el-row
|
||||||
@ -30,13 +30,13 @@
|
|||||||
>
|
>
|
||||||
<el-col :span="10"
|
<el-col :span="10"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
<el-input v-model="formValue.option_list[$index].label" :placeholder="$t('components.dynamicsForm.tag.placeholder')"
|
<el-input v-model="formValue.option_list[$index].label" :placeholder="$t('dynamicsForm.tag.placeholder')"
|
||||||
/></el-col>
|
/></el-col>
|
||||||
<el-col :span="12"
|
<el-col :span="12"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
<el-input
|
<el-input
|
||||||
v-model="formValue.option_list[$index].value"
|
v-model="formValue.option_list[$index].value"
|
||||||
:placeholder="$t('components.dynamicsForm.Select.label')"
|
:placeholder="$t('dynamicsForm.Select.label')"
|
||||||
/></el-col>
|
/></el-col>
|
||||||
<el-col :span="1"
|
<el-col :span="1"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
@ -49,19 +49,19 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
class="defaultValueItem"
|
class="defaultValueItem"
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
:required="formValue.required"
|
:required="formValue.required"
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:rules="
|
:rules="
|
||||||
formValue.required
|
formValue.required
|
||||||
? [{ required: true, message: `${$t('components.dynamicsForm.default.label')}${$t('components.dynamicsForm.default.requiredMessage')}` }]
|
? [{ required: true, message: `${$t('dynamicsForm.default.label')}${$t('dynamicsForm.default.requiredMessage')}` }]
|
||||||
: []
|
: []
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="defaultValueCheckbox">
|
<div class="defaultValueCheckbox">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-model="formValue.show_default_value"
|
v-model="formValue.show_default_value"
|
||||||
:label="$t('components.dynamicsForm.default.show')"
|
:label="$t('dynamicsForm.default.show')"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<el-select
|
<el-select
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<el-form-item>
|
<el-form-item>
|
||||||
<template #label>
|
<template #label>
|
||||||
<div class="flex-between">
|
<div class="flex-between">
|
||||||
{{ $t('components.dynamicsForm.Select.label') }}
|
{{ $t('dynamicsForm.Select.label') }}
|
||||||
<el-button link type="primary" @click.stop="addOption()">
|
<el-button link type="primary" @click.stop="addOption()">
|
||||||
<el-icon class="mr-4">
|
<el-icon class="mr-4">
|
||||||
<Plus />
|
<Plus />
|
||||||
@ -15,11 +15,11 @@
|
|||||||
<el-row style="width: 100%" :gutter="10">
|
<el-row style="width: 100%" :gutter="10">
|
||||||
<el-col :span="10">
|
<el-col :span="10">
|
||||||
<div class="grid-content ep-bg-purple" />
|
<div class="grid-content ep-bg-purple" />
|
||||||
{{ $t('components.dynamicsForm.tag.label') }}
|
{{ $t('dynamicsForm.tag.label') }}
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12"
|
<el-col :span="12"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
{{ $t('components.dynamicsForm.Select.label') }}</el-col
|
{{ $t('dynamicsForm.Select.label') }}</el-col
|
||||||
>
|
>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row
|
<el-row
|
||||||
@ -31,13 +31,13 @@
|
|||||||
>
|
>
|
||||||
<el-col :span="10"
|
<el-col :span="10"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
<el-input v-model="formValue.option_list[$index].label" :placeholder="$t('components.dynamicsForm.tag.placeholder')"
|
<el-input v-model="formValue.option_list[$index].label" :placeholder="$t('dynamicsForm.tag.placeholder')"
|
||||||
/></el-col>
|
/></el-col>
|
||||||
<el-col :span="12"
|
<el-col :span="12"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
<el-input
|
<el-input
|
||||||
v-model="formValue.option_list[$index].value"
|
v-model="formValue.option_list[$index].value"
|
||||||
:placeholder="$t('components.dynamicsForm.Select.label')"
|
:placeholder="$t('dynamicsForm.Select.label')"
|
||||||
/></el-col>
|
/></el-col>
|
||||||
<el-col :span="1"
|
<el-col :span="1"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
@ -50,19 +50,19 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
class="defaultValueItem"
|
class="defaultValueItem"
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
:required="formValue.required"
|
:required="formValue.required"
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:rules="
|
:rules="
|
||||||
formValue.required
|
formValue.required
|
||||||
? [{ required: true, message: `${$t('components.dynamicsForm.default.label')}${$t('components.dynamicsForm.default.requiredMessage')}` }]
|
? [{ required: true, message: `${$t('dynamicsForm.default.label')}${$t('dynamicsForm.default.requiredMessage')}` }]
|
||||||
: []
|
: []
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="defaultValueCheckbox">
|
<div class="defaultValueCheckbox">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-model="formValue.show_default_value"
|
v-model="formValue.show_default_value"
|
||||||
:label="$t('components.dynamicsForm.default.show')"
|
:label="$t('dynamicsForm.default.show')"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<RadioCard
|
<RadioCard
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<el-form-item>
|
<el-form-item>
|
||||||
<template #label>
|
<template #label>
|
||||||
<div class="flex-between">
|
<div class="flex-between">
|
||||||
{{ $t('components.dynamicsForm.Select.label') }}
|
{{ $t('dynamicsForm.Select.label') }}
|
||||||
<el-button link type="primary" @click.stop="addOption()">
|
<el-button link type="primary" @click.stop="addOption()">
|
||||||
<el-icon class="mr-4">
|
<el-icon class="mr-4">
|
||||||
<Plus />
|
<Plus />
|
||||||
@ -15,11 +15,11 @@
|
|||||||
<el-row style="width: 100%" :gutter="10">
|
<el-row style="width: 100%" :gutter="10">
|
||||||
<el-col :span="10">
|
<el-col :span="10">
|
||||||
<div class="grid-content ep-bg-purple" />
|
<div class="grid-content ep-bg-purple" />
|
||||||
{{ $t('components.dynamicsForm.tag.label') }}
|
{{ $t('dynamicsForm.tag.label') }}
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<div class="grid-content ep-bg-purple" />
|
<div class="grid-content ep-bg-purple" />
|
||||||
{{ $t('components.dynamicsForm.Select.label') }}
|
{{ $t('dynamicsForm.Select.label') }}
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row
|
<el-row
|
||||||
@ -33,13 +33,13 @@
|
|||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
<el-input
|
<el-input
|
||||||
v-model="formValue.option_list[$index].label"
|
v-model="formValue.option_list[$index].label"
|
||||||
:placeholder="$t('components.dynamicsForm.tag.placeholder')"
|
:placeholder="$t('dynamicsForm.tag.placeholder')"
|
||||||
/></el-col>
|
/></el-col>
|
||||||
<el-col :span="12"
|
<el-col :span="12"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
<el-input
|
<el-input
|
||||||
v-model="formValue.option_list[$index].value"
|
v-model="formValue.option_list[$index].value"
|
||||||
:placeholder="$t('components.dynamicsForm.Select.label')"
|
:placeholder="$t('dynamicsForm.Select.label')"
|
||||||
/></el-col>
|
/></el-col>
|
||||||
<el-col :span="1"
|
<el-col :span="1"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
@ -52,19 +52,19 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
class="defaultValueItem"
|
class="defaultValueItem"
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
:required="formValue.required"
|
:required="formValue.required"
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:rules="
|
:rules="
|
||||||
formValue.required
|
formValue.required
|
||||||
? [{ required: true, message:`${$t('components.dynamicsForm.default.label')}${$t('components.dynamicsForm.default.requiredMessage')}` }]
|
? [{ required: true, message:`${$t('dynamicsForm.default.label')}${$t('dynamicsForm.default.requiredMessage')}` }]
|
||||||
: []
|
: []
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="defaultValueCheckbox">
|
<div class="defaultValueCheckbox">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-model="formValue.show_default_value"
|
v-model="formValue.show_default_value"
|
||||||
:label="$t('components.dynamicsForm.default.show')"
|
:label="$t('dynamicsForm.default.show')"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<RadioRow
|
<RadioRow
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<el-form-item>
|
<el-form-item>
|
||||||
<template #label>
|
<template #label>
|
||||||
<div class="flex-between">
|
<div class="flex-between">
|
||||||
{{ $t('components.dynamicsForm.Select.label') }}
|
{{ $t('dynamicsForm.Select.label') }}
|
||||||
<el-button link type="primary" @click.stop="addOption()">
|
<el-button link type="primary" @click.stop="addOption()">
|
||||||
<el-icon class="mr-4">
|
<el-icon class="mr-4">
|
||||||
<Plus />
|
<Plus />
|
||||||
@ -15,11 +15,11 @@
|
|||||||
<el-row style="width: 100%" :gutter="10">
|
<el-row style="width: 100%" :gutter="10">
|
||||||
<el-col :span="10"
|
<el-col :span="10"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
{{ $t('components.dynamicsForm.tag.label') }}</el-col
|
{{ $t('dynamicsForm.tag.label') }}</el-col
|
||||||
>
|
>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<div class="grid-content ep-bg-purple" />
|
<div class="grid-content ep-bg-purple" />
|
||||||
{{ $t('components.dynamicsForm.Select.label') }}
|
{{ $t('dynamicsForm.Select.label') }}
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row
|
<el-row
|
||||||
@ -31,13 +31,13 @@
|
|||||||
>
|
>
|
||||||
<el-col :span="10"
|
<el-col :span="10"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
<el-input v-model="formValue.option_list[$index].label" :placeholder="$t('components.dynamicsForm.tag.placeholder')"
|
<el-input v-model="formValue.option_list[$index].label" :placeholder="$t('dynamicsForm.tag.placeholder')"
|
||||||
/></el-col>
|
/></el-col>
|
||||||
<el-col :span="12"
|
<el-col :span="12"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
<el-input
|
<el-input
|
||||||
v-model="formValue.option_list[$index].value"
|
v-model="formValue.option_list[$index].value"
|
||||||
:placeholder="$t('components.dynamicsForm.Select.label')"
|
:placeholder="$t('dynamicsForm.Select.label')"
|
||||||
/></el-col>
|
/></el-col>
|
||||||
<el-col :span="1"
|
<el-col :span="1"
|
||||||
><div class="grid-content ep-bg-purple" />
|
><div class="grid-content ep-bg-purple" />
|
||||||
@ -52,17 +52,17 @@
|
|||||||
class="defaultValueItem"
|
class="defaultValueItem"
|
||||||
:required="formValue.required"
|
:required="formValue.required"
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
:rules="
|
:rules="
|
||||||
formValue.required
|
formValue.required
|
||||||
? [{ required: true, message: `${$t('components.dynamicsForm.default.label')}${$t('components.dynamicsForm.default.requiredMessage')}` }]
|
? [{ required: true, message: `${$t('dynamicsForm.default.label')}${$t('dynamicsForm.default.requiredMessage')}` }]
|
||||||
: []
|
: []
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="defaultValueCheckbox">
|
<div class="defaultValueCheckbox">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-model="formValue.show_default_value"
|
v-model="formValue.show_default_value"
|
||||||
:label="$t('components.dynamicsForm.default.show')"
|
:label="$t('dynamicsForm.default.show')"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -1,14 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-form-item :label="$t('components.dynamicsForm.Slider.showInput.label')" required prop="showInput">
|
<el-form-item :label="$t('dynamicsForm.Slider.showInput.label')" required prop="showInput">
|
||||||
<el-switch v-model="formValue.showInput" />
|
<el-switch v-model="formValue.showInput" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('components.dynamicsForm.Slider.valueRange.label')" required>
|
<el-form-item :label="$t('dynamicsForm.Slider.valueRange.label')" required>
|
||||||
<el-col :span="11" style="padding-left: 0">
|
<el-col :span="11" style="padding-left: 0">
|
||||||
<el-form-item
|
<el-form-item
|
||||||
:rules="[
|
:rules="[
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: $t('components.dynamicsForm.Slider.valueRange.minRequired'),
|
message: $t('dynamicsForm.Slider.valueRange.minRequired'),
|
||||||
trigger: 'change'
|
trigger: 'change'
|
||||||
}
|
}
|
||||||
]"
|
]"
|
||||||
@ -25,7 +25,7 @@
|
|||||||
:rules="[
|
:rules="[
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: $t('components.dynamicsForm.Slider.valueRange.maxRequired'),
|
message: $t('dynamicsForm.Slider.valueRange.maxRequired'),
|
||||||
trigger: 'change'
|
trigger: 'change'
|
||||||
}
|
}
|
||||||
]"
|
]"
|
||||||
@ -40,7 +40,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-col :span="11" style="padding-left: 0">
|
<el-col :span="11" style="padding-left: 0">
|
||||||
<el-form-item :label="$t('components.dynamicsForm.Slider.step.label')" required prop="step" :rules="step_rules">
|
<el-form-item :label="$t('dynamicsForm.Slider.step.label')" required prop="step" :rules="step_rules">
|
||||||
<el-input-number
|
<el-input-number
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
v-model="formValue.step"
|
v-model="formValue.step"
|
||||||
@ -51,12 +51,12 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-form-item
|
<el-form-item
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
:required="formValue.required"
|
:required="formValue.required"
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:rules="
|
:rules="
|
||||||
formValue.required
|
formValue.required
|
||||||
? [{ required: true, message: $t('components.dynamicsForm.default.requiredMessage') }]
|
? [{ required: true, message: $t('dynamicsForm.default.requiredMessage') }]
|
||||||
: []
|
: []
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
@ -101,7 +101,7 @@ const getData = () => {
|
|||||||
props_info: {
|
props_info: {
|
||||||
rules: [
|
rules: [
|
||||||
{
|
{
|
||||||
message: formValue.value.label + t('components.dynamicsForm.tip.requiredMessage'),
|
message: formValue.value.label + t('dynamicsForm.tip.requiredMessage'),
|
||||||
trigger: 'blur',
|
trigger: 'blur',
|
||||||
required: formValue.value.required
|
required: formValue.value.required
|
||||||
}
|
}
|
||||||
@ -133,11 +133,11 @@ const step_rules = [
|
|||||||
required: true,
|
required: true,
|
||||||
validator: (rule: any, value: any, callback: any) => {
|
validator: (rule: any, value: any, callback: any) => {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
callback(new Error(t('components.dynamicsForm.Slider.step.requiredMessage1')))
|
callback(new Error(t('dynamicsForm.Slider.step.requiredMessage1')))
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if (value === 0) {
|
if (value === 0) {
|
||||||
callback(new Error(t('components.dynamicsForm.Slider.step.requiredMessage2')))
|
callback(new Error(t('dynamicsForm.Slider.step.requiredMessage2')))
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
:required="formValue.required"
|
:required="formValue.required"
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:rules="
|
:rules="
|
||||||
formValue.required
|
formValue.required
|
||||||
? [{ required: true, message: `${$t('components.dynamicsForm.default.label')}${$t('components.dynamicsForm.default.requiredMessage')}` }]
|
? [{ required: true, message: `${$t('dynamicsForm.default.label')}${$t('dynamicsForm.default.requiredMessage')}` }]
|
||||||
: []
|
: []
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-form-item :label="$t('components.dynamicsForm.TextInput.length.label')" required>
|
<el-form-item :label="$t('dynamicsForm.TextInput.length.label')" required>
|
||||||
<el-row class="w-full">
|
<el-row class="w-full">
|
||||||
<el-col :span="11">
|
<el-col :span="11">
|
||||||
<el-form-item
|
<el-form-item
|
||||||
:rules="[
|
:rules="[
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: $t('components.dynamicsForm.TextInput.length.minRequired'),
|
message: $t('dynamicsForm.TextInput.length.minRequired'),
|
||||||
trigger: 'change'
|
trigger: 'change'
|
||||||
}
|
}
|
||||||
]"
|
]"
|
||||||
@ -30,7 +30,7 @@
|
|||||||
:rules="[
|
:rules="[
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: $t('components.dynamicsForm.TextInput.length.maxRequired'),
|
message: $t('dynamicsForm.TextInput.length.maxRequired'),
|
||||||
trigger: 'change'
|
trigger: 'change'
|
||||||
}
|
}
|
||||||
]"
|
]"
|
||||||
@ -52,15 +52,15 @@
|
|||||||
class="defaultValueItem"
|
class="defaultValueItem"
|
||||||
:required="formValue.required"
|
:required="formValue.required"
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
:rules="
|
:rules="
|
||||||
formValue.required ? [{ required: true, message: `${$t('components.dynamicsForm.default.label')}${$t('components.dynamicsForm.default.requiredMessage')}` }, ...rules] : rules
|
formValue.required ? [{ required: true, message: `${$t('dynamicsForm.default.label')}${$t('dynamicsForm.default.requiredMessage')}` }, ...rules] : rules
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="defaultValueCheckbox">
|
<div class="defaultValueCheckbox">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-model="formValue.show_default_value"
|
v-model="formValue.show_default_value"
|
||||||
:label="$t('components.dynamicsForm.default.show')"
|
:label="$t('dynamicsForm.default.show')"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -68,7 +68,7 @@
|
|||||||
v-model="formValue.default_value"
|
v-model="formValue.default_value"
|
||||||
:maxlength="formValue.maxlength"
|
:maxlength="formValue.maxlength"
|
||||||
:minlength="formValue.minlength"
|
:minlength="formValue.minlength"
|
||||||
:placeholder="$t('components.dynamicsForm.paramForm.default.placeholder')"
|
:placeholder="$t('dynamicsForm.paramForm.default.placeholder')"
|
||||||
show-word-limit
|
show-word-limit
|
||||||
type="text"
|
type="text"
|
||||||
/>
|
/>
|
||||||
@ -110,11 +110,11 @@ const getData = () => {
|
|||||||
props_info: {
|
props_info: {
|
||||||
rules: formValue.value.required
|
rules: formValue.value.required
|
||||||
? [
|
? [
|
||||||
{ required: true, message: `${formValue.value.label} ${t('components.dynamicsForm.default.requiredMessage')}` },
|
{ required: true, message: `${formValue.value.label} ${t('dynamicsForm.default.requiredMessage')}` },
|
||||||
{
|
{
|
||||||
min: formValue.value.minlength,
|
min: formValue.value.minlength,
|
||||||
max: formValue.value.maxlength,
|
max: formValue.value.maxlength,
|
||||||
message: `${formValue.value.label}${t('components.dynamicsForm.TextInput.length.requiredMessage1')} ${formValue.value.minlength} ${t('components.dynamicsForm.TextInput.length.requiredMessage2')} ${formValue.value.maxlength} ${t('components.dynamicsForm.TextInput.length.requiredMessage3')}`,
|
message: `${formValue.value.label}${t('dynamicsForm.TextInput.length.requiredMessage1')} ${formValue.value.minlength} ${t('dynamicsForm.TextInput.length.requiredMessage2')} ${formValue.value.maxlength} ${t('dynamicsForm.TextInput.length.requiredMessage3')}`,
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -122,7 +122,7 @@ const getData = () => {
|
|||||||
{
|
{
|
||||||
min: formValue.value.minlength,
|
min: formValue.value.minlength,
|
||||||
max: formValue.value.maxlength,
|
max: formValue.value.maxlength,
|
||||||
message: `${formValue.value.label}${t('components.dynamicsForm.TextInput.length.requiredMessage1')} ${formValue.value.minlength} ${t('components.dynamicsForm.TextInput.length.requiredMessage2')} ${formValue.value.maxlength} ${t('components.dynamicsForm.TextInput.length.requiredMessage3')}`,
|
message: `${formValue.value.label}${t('dynamicsForm.TextInput.length.requiredMessage1')} ${formValue.value.minlength} ${t('dynamicsForm.TextInput.length.requiredMessage2')} ${formValue.value.maxlength} ${t('dynamicsForm.TextInput.length.requiredMessage3')}`,
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -141,21 +141,21 @@ const rangeRules = [
|
|||||||
required: true,
|
required: true,
|
||||||
validator: (rule: any, value: any, callback: any) => {
|
validator: (rule: any, value: any, callback: any) => {
|
||||||
if (!formValue.value.minlength) {
|
if (!formValue.value.minlength) {
|
||||||
callback(new Error(t('components.dynamicsForm.TextInput.length.requiredMessage4')))
|
callback(new Error(t('dynamicsForm.TextInput.length.requiredMessage4')))
|
||||||
}
|
}
|
||||||
if (!formValue.value.maxlength) {
|
if (!formValue.value.maxlength) {
|
||||||
callback(new Error(t('components.dynamicsForm.TextInput.length.requiredMessage4')))
|
callback(new Error(t('dynamicsForm.TextInput.length.requiredMessage4')))
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
message: `${formValue.value.label} ${t('components.dynamicsForm.default.requiredMessage')}`
|
message: `${formValue.value.label} ${t('dynamicsForm.default.requiredMessage')}`
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
const rules = computed(() => [
|
const rules = computed(() => [
|
||||||
{
|
{
|
||||||
min: formValue.value.minlength,
|
min: formValue.value.minlength,
|
||||||
max: formValue.value.maxlength,
|
max: formValue.value.maxlength,
|
||||||
message: `${t('components.dynamicsForm.TextInput.length.requiredMessage1')} ${formValue.value.minlength} ${t('components.dynamicsForm.TextInput.length.requiredMessage2')} ${formValue.value.maxlength} ${t('components.dynamicsForm.TextInput.length.requiredMessage3')}`,
|
message: `${t('dynamicsForm.TextInput.length.requiredMessage1')} ${formValue.value.minlength} ${t('dynamicsForm.TextInput.length.requiredMessage2')} ${formValue.value.maxlength} ${t('dynamicsForm.TextInput.length.requiredMessage3')}`,
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|||||||
@ -117,7 +117,7 @@ const validate_rules = (rule: any, value: any, callback: any) => {
|
|||||||
try {
|
try {
|
||||||
JSON.parse(model_value.value)
|
JSON.parse(model_value.value)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
callback(new Error(t('components.dynamicsForm.tip.requiredMessage')))
|
callback(new Error(t('dynamicsForm.tip.requiredMessage')))
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<el-input
|
<el-input
|
||||||
v-model="filterText"
|
v-model="filterText"
|
||||||
:validate-event="false"
|
:validate-event="false"
|
||||||
:placeholder="$t('components.dynamicsForm.searchBar.placeholder')"
|
:placeholder="$t('dynamicsForm.searchBar.placeholder')"
|
||||||
class="input-with-select"
|
class="input-with-select"
|
||||||
style="--el-color-danger: #c0c4cc"
|
style="--el-color-danger: #c0c4cc"
|
||||||
clearable
|
clearable
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<el-input
|
<el-input
|
||||||
v-model="filterText"
|
v-model="filterText"
|
||||||
:validate-event="false"
|
:validate-event="false"
|
||||||
:placeholder="$t('components.dynamicsForm.searchBar.placeholder')"
|
:placeholder="$t('dynamicsForm.searchBar.placeholder')"
|
||||||
class="input-with-select"
|
class="input-with-select"
|
||||||
style="--el-color-danger: #c0c4cc"
|
style="--el-color-danger: #c0c4cc"
|
||||||
clearable
|
clearable
|
||||||
|
|||||||
@ -66,7 +66,7 @@ const querySearchAsync = (queryString: string, cb: (arg: any) => void) => {
|
|||||||
UserApi.getUserList(queryString).then((res) => {
|
UserApi.getUserList(queryString).then((res) => {
|
||||||
if (res.data.length === 0) {
|
if (res.data.length === 0) {
|
||||||
noData.value = true
|
noData.value = true
|
||||||
matchResults = [{ default: t('components.noData') }]
|
matchResults = [{ default: t('common.noData') }]
|
||||||
} else {
|
} else {
|
||||||
noData.value = false
|
noData.value = false
|
||||||
matchResults = res.data
|
matchResults = res.data
|
||||||
|
|||||||
@ -11,13 +11,13 @@
|
|||||||
:model="resetPasswordForm"
|
:model="resetPasswordForm"
|
||||||
:rules="rules1"
|
:rules="rules1"
|
||||||
>
|
>
|
||||||
<p class="mb-8 lighter">{{ $t('layout.avatar.dialog.newPassword') }}</p>
|
<p class="mb-8 lighter">{{ $t('views.login.newPassword') }}</p>
|
||||||
<el-form-item prop="password" style="margin-bottom: 8px">
|
<el-form-item prop="password" style="margin-bottom: 8px">
|
||||||
<el-input
|
<el-input
|
||||||
type="password"
|
type="password"
|
||||||
class="input-item"
|
class="input-item"
|
||||||
v-model="resetPasswordForm.password"
|
v-model="resetPasswordForm.password"
|
||||||
:placeholder="$t('layout.avatar.dialog.enterPassword')"
|
:placeholder="$t('views.login.enterPassword')"
|
||||||
show-password
|
show-password
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
@ -27,7 +27,7 @@
|
|||||||
type="password"
|
type="password"
|
||||||
class="input-item"
|
class="input-item"
|
||||||
v-model="resetPasswordForm.re_password"
|
v-model="resetPasswordForm.re_password"
|
||||||
:placeholder="$t('layout.avatar.dialog.confirmPassword')"
|
:placeholder="$t('views.user.userForm.form.re_password.label')"
|
||||||
show-password
|
show-password
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
@ -39,13 +39,13 @@
|
|||||||
:model="resetPasswordForm"
|
:model="resetPasswordForm"
|
||||||
:rules="rules2"
|
:rules="rules2"
|
||||||
>
|
>
|
||||||
<p class="mb-8 lighter">{{ $t('layout.avatar.dialog.useEmail') }}</p>
|
<p class="mb-8 lighter">{{ $t('views.login.useEmail') }}</p>
|
||||||
<el-form-item style="margin-bottom: 8px">
|
<el-form-item style="margin-bottom: 8px">
|
||||||
<el-input
|
<el-input
|
||||||
class="input-item"
|
class="input-item"
|
||||||
:disabled="true"
|
:disabled="true"
|
||||||
v-bind:modelValue="user.userInfo?.email"
|
v-bind:modelValue="user.userInfo?.email"
|
||||||
:placeholder="$t('layout.avatar.dialog.enterEmail')"
|
:placeholder="t('views.user.userForm.form.email.placeholder')"
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -54,7 +54,7 @@
|
|||||||
<el-input
|
<el-input
|
||||||
class="code-input"
|
class="code-input"
|
||||||
v-model="resetPasswordForm.code"
|
v-model="resetPasswordForm.code"
|
||||||
:placeholder="$t('layout.avatar.dialog.enterVerificationCode')"
|
:placeholder="$t('views.login.verificationCode.placeholder')"
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
<el-button
|
<el-button
|
||||||
@ -65,8 +65,8 @@
|
|||||||
>
|
>
|
||||||
{{
|
{{
|
||||||
isDisabled
|
isDisabled
|
||||||
? $t('layout.avatar.dialog.resend', { time })
|
? `${$t('views.login.verificationCode.resend')}(${time}s)`
|
||||||
: $t('layout.avatar.dialog.getVerificationCode')
|
: $t('views.login.verificationCode.getVerificationCode')
|
||||||
}}
|
}}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
@ -74,9 +74,7 @@
|
|||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
<el-button @click="resetPasswordDialog = false">{{
|
<el-button @click="resetPasswordDialog = false">{{ $t('common.cancel') }}</el-button>
|
||||||
$t('common.cancel')
|
|
||||||
}}</el-button>
|
|
||||||
<el-button type="primary" @click="resetPassword">
|
<el-button type="primary" @click="resetPassword">
|
||||||
{{ $t('common.save') }}
|
{{ $t('common.save') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -115,32 +113,32 @@ const rules1 = ref<FormRules<ResetCurrentUserPasswordRequest>>({
|
|||||||
password: [
|
password: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: t('layout.avatar.dialog.enterPassword'),
|
message: t('views.login.enterPassword'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
min: 6,
|
min: 6,
|
||||||
max: 20,
|
max: 20,
|
||||||
message: t('layout.avatar.dialog.passwordLength'),
|
message: t('views.user.userForm.form.password.lengthMessage'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
re_password: [
|
re_password: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: t('layout.avatar.dialog.confirmPassword'),
|
message: t('views.user.userForm.form.re_password.requiredMessage'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
min: 6,
|
min: 6,
|
||||||
max: 20,
|
max: 20,
|
||||||
message: t('layout.avatar.dialog.passwordLength'),
|
message: t('views.user.userForm.form.password.lengthMessage'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
validator: (rule, value, callback) => {
|
validator: (rule, value, callback) => {
|
||||||
if (resetPasswordForm.value.password != resetPasswordForm.value.re_password) {
|
if (resetPasswordForm.value.password != resetPasswordForm.value.re_password) {
|
||||||
callback(new Error(t('layout.avatar.dialog.passwordMismatch')))
|
callback(new Error(t('views.user.userForm.form.password.validatorMessage')))
|
||||||
} else {
|
} else {
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
@ -154,7 +152,7 @@ const rules2 = ref<FormRules<ResetCurrentUserPasswordRequest>>({
|
|||||||
code: [
|
code: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: t('layout.avatar.dialog.enterVerificationCode'),
|
message: t('views.login.verificationCode.placeholder'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -165,7 +163,7 @@ const rules2 = ref<FormRules<ResetCurrentUserPasswordRequest>>({
|
|||||||
const sendEmail = () => {
|
const sendEmail = () => {
|
||||||
resetPasswordFormRef1.value?.validate().then(() => {
|
resetPasswordFormRef1.value?.validate().then(() => {
|
||||||
UserApi.sendEmailToCurrent(loading).then(() => {
|
UserApi.sendEmailToCurrent(loading).then(() => {
|
||||||
MsgSuccess(t('layout.avatar.dialog.verificationCodeSentSuccess'))
|
MsgSuccess(t('views.login.verificationCode.successMessage'))
|
||||||
isDisabled.value = true
|
isDisabled.value = true
|
||||||
handleTimeChange()
|
handleTimeChange()
|
||||||
})
|
})
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<el-dropdown-item class="border-t p-8" @click="openResetPassword">
|
<el-dropdown-item class="border-t p-8" @click="openResetPassword">
|
||||||
{{ $t('layout.avatar.resetPassword') }}
|
{{ $t('views.login.resetPassword') }}
|
||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
<div v-hasPermission="new ComplexPermission([], ['x-pack'], 'OR')">
|
<div v-hasPermission="new ComplexPermission([], ['x-pack'], 'OR')">
|
||||||
<el-dropdown-item class="border-t p-8" @click="openAPIKeyDialog">
|
<el-dropdown-item class="border-t p-8" @click="openAPIKeyDialog">
|
||||||
|
|||||||
5
ui/src/locales/lang/en-US/components.ts
Normal file
5
ui/src/locales/lang/en-US/components.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
quickCreatePlaceholder: 'Quickly create blank documents',
|
||||||
|
quickCreateName: 'Document name',
|
||||||
|
noData: 'No Data'
|
||||||
|
}
|
||||||
@ -1,78 +0,0 @@
|
|||||||
export default {
|
|
||||||
input_type_list: {
|
|
||||||
TextInput: 'Text Input',
|
|
||||||
Slider: 'Slider',
|
|
||||||
SwitchInput: 'Switch',
|
|
||||||
SingleSelect: 'Single Select',
|
|
||||||
MultiSelect: 'Multi Select',
|
|
||||||
DatePicker: 'Date Picker',
|
|
||||||
JsonInput: 'JSON Text Input',
|
|
||||||
RadioCard: 'Radio Card',
|
|
||||||
RadioRow: 'Radio Row'
|
|
||||||
},
|
|
||||||
default: {
|
|
||||||
label: 'Default Value',
|
|
||||||
placeholder: 'Please enter a default value',
|
|
||||||
requiredMessage: ' is a required property',
|
|
||||||
show: 'Show Default Value'
|
|
||||||
},
|
|
||||||
tip: {
|
|
||||||
requiredMessage: 'Cannot be empty',
|
|
||||||
jsonMessage: 'Incorrect JSON format'
|
|
||||||
},
|
|
||||||
searchBar: {
|
|
||||||
placeholder: 'Please enter keywords to search'
|
|
||||||
},
|
|
||||||
paramForm: {
|
|
||||||
field: {
|
|
||||||
label: 'Parameter',
|
|
||||||
placeholder: 'Please enter a parameter',
|
|
||||||
requiredMessage: 'Parameter is a required property',
|
|
||||||
requiredMessage2: 'Only letters, numbers, and underscores are allowed'
|
|
||||||
},
|
|
||||||
name: {
|
|
||||||
label: 'Display Name',
|
|
||||||
placeholder: 'Please enter a display name',
|
|
||||||
requiredMessage: 'Display Name is a required property'
|
|
||||||
},
|
|
||||||
tooltip: {
|
|
||||||
label: 'Parameter Tooltip',
|
|
||||||
placeholder: 'Please enter a parameter tooltip'
|
|
||||||
},
|
|
||||||
required: {
|
|
||||||
label: 'Is Required',
|
|
||||||
requiredMessage: 'Is Required is a required property'
|
|
||||||
},
|
|
||||||
input_type: {
|
|
||||||
label: 'Component Type',
|
|
||||||
placeholder: 'Please select a component type',
|
|
||||||
requiredMessage: 'Component Type is a required property'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
DatePicker: {
|
|
||||||
placeholder: 'Select Date',
|
|
||||||
year: 'Year',
|
|
||||||
month: 'Month',
|
|
||||||
date: 'Date',
|
|
||||||
datetime: 'Date Time',
|
|
||||||
dataType: {
|
|
||||||
label: 'Date Type',
|
|
||||||
placeholder: 'Please select a date type'
|
|
||||||
},
|
|
||||||
format: {
|
|
||||||
label: 'Format',
|
|
||||||
placeholder: 'Please select a format'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Select: {
|
|
||||||
label: 'Option Value',
|
|
||||||
placeholder: 'Please enter an option value'
|
|
||||||
},
|
|
||||||
tag: {
|
|
||||||
label: 'Tag',
|
|
||||||
placeholder: 'Please enter an option label'
|
|
||||||
},
|
|
||||||
Slider: {
|
|
||||||
showInput: ''
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
import dynamicsForm from './dynamics-form'
|
|
||||||
import chat from './ai-chat'
|
|
||||||
export default {
|
|
||||||
dynamicsForm,
|
|
||||||
chat,
|
|
||||||
noData: 'No Data'
|
|
||||||
}
|
|
||||||
101
ui/src/locales/lang/en-US/dynamics-form.ts
Normal file
101
ui/src/locales/lang/en-US/dynamics-form.ts
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
export default {
|
||||||
|
input_type_list: {
|
||||||
|
TextInput: 'Text Input',
|
||||||
|
Slider: 'Slider',
|
||||||
|
SwitchInput: 'Switch',
|
||||||
|
SingleSelect: 'Single Select',
|
||||||
|
MultiSelect: 'Multi Select',
|
||||||
|
DatePicker: 'Date Picker',
|
||||||
|
JsonInput: 'JSON Text Input',
|
||||||
|
RadioCard: 'Radio Card',
|
||||||
|
RadioRow: 'Radio Row'
|
||||||
|
},
|
||||||
|
default: {
|
||||||
|
label: 'Default Value',
|
||||||
|
placeholder: 'Please enter a default value',
|
||||||
|
requiredMessage: ' is a required property',
|
||||||
|
show: 'Show Default Value'
|
||||||
|
},
|
||||||
|
tip: {
|
||||||
|
requiredMessage: 'Cannot be empty',
|
||||||
|
jsonMessage: 'Incorrect JSON format'
|
||||||
|
},
|
||||||
|
searchBar: {
|
||||||
|
placeholder: 'Please enter keywords to search'
|
||||||
|
},
|
||||||
|
paramForm: {
|
||||||
|
field: {
|
||||||
|
label: 'Parameter',
|
||||||
|
placeholder: 'Please enter a parameter',
|
||||||
|
requiredMessage: 'Parameter is a required property',
|
||||||
|
requiredMessage2: 'Only letters, numbers, and underscores are allowed'
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
label: 'Display Name',
|
||||||
|
placeholder: 'Please enter a display name',
|
||||||
|
requiredMessage: 'Display Name is a required property'
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
label: 'Parameter Tooltip',
|
||||||
|
placeholder: 'Please enter a parameter tooltip'
|
||||||
|
},
|
||||||
|
required: {
|
||||||
|
label: 'Is Required',
|
||||||
|
requiredMessage: 'Is Required is a required property'
|
||||||
|
},
|
||||||
|
input_type: {
|
||||||
|
label: 'Component Type',
|
||||||
|
placeholder: 'Please select a component type',
|
||||||
|
requiredMessage: 'Component Type is a required property'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
DatePicker: {
|
||||||
|
placeholder: 'Select Date',
|
||||||
|
year: 'Year',
|
||||||
|
month: 'Month',
|
||||||
|
date: 'Date',
|
||||||
|
datetime: 'Date Time',
|
||||||
|
dataType: {
|
||||||
|
label: 'Date Type',
|
||||||
|
placeholder: 'Please select a date type'
|
||||||
|
},
|
||||||
|
format: {
|
||||||
|
label: 'Format',
|
||||||
|
placeholder: 'Please select a format'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Select: {
|
||||||
|
label: 'Option Value',
|
||||||
|
placeholder: 'Please enter an option value'
|
||||||
|
},
|
||||||
|
tag: {
|
||||||
|
label: 'Tag',
|
||||||
|
placeholder: 'Please enter an option label'
|
||||||
|
},
|
||||||
|
Slider: {
|
||||||
|
showInput: {
|
||||||
|
label: '是否带输入框'
|
||||||
|
},
|
||||||
|
valueRange: {
|
||||||
|
label: '取值范围',
|
||||||
|
minRequired: '最小值必填',
|
||||||
|
maxRequired: '最大值必填'
|
||||||
|
},
|
||||||
|
step: {
|
||||||
|
label: '步长值',
|
||||||
|
requiredMessage1: '步长值必填',
|
||||||
|
requiredMessage2: '步长不能为0'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
TextInput: {
|
||||||
|
length: {
|
||||||
|
label: '文本长度',
|
||||||
|
minRequired: '最小长度必填',
|
||||||
|
maxRequired: '最大长度必填',
|
||||||
|
requiredMessage1: '长度在',
|
||||||
|
requiredMessage2: '到',
|
||||||
|
requiredMessage3: '个字符',
|
||||||
|
requiredMessage4: '文本长度为必填参数'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,11 +3,15 @@ import components from './components'
|
|||||||
import layout from './layout'
|
import layout from './layout'
|
||||||
import views from './views'
|
import views from './views'
|
||||||
import common from './common'
|
import common from './common'
|
||||||
|
import dynamicsForm from './dynamics-form'
|
||||||
|
import chat from './ai-chat'
|
||||||
export default {
|
export default {
|
||||||
lang: 'English',
|
lang: 'English',
|
||||||
layout,
|
layout,
|
||||||
views,
|
views,
|
||||||
components,
|
components,
|
||||||
en,
|
en,
|
||||||
common
|
common,
|
||||||
|
dynamicsForm,
|
||||||
|
chat
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,25 +9,11 @@ export default {
|
|||||||
function_lib: 'function library'
|
function_lib: 'function library'
|
||||||
},
|
},
|
||||||
avatar: {
|
avatar: {
|
||||||
resetPassword: 'Change password',
|
|
||||||
about: 'About',
|
about: 'About',
|
||||||
logout: 'Logout',
|
logout: 'Logout',
|
||||||
version: 'Version',
|
version: 'Version',
|
||||||
apiKey: 'API Key',
|
apiKey: 'API Key',
|
||||||
apiServiceAddress: 'API Service Address',
|
apiServiceAddress: 'API Service Address',
|
||||||
dialog: {
|
|
||||||
newPassword: 'New password',
|
|
||||||
enterPassword: 'Please enter new password',
|
|
||||||
confirmPassword: 'Confirm password',
|
|
||||||
passwordLength: 'Password length should be between 6 and 20 characters',
|
|
||||||
passwordMismatch: 'Passwords do not match',
|
|
||||||
useEmail: 'Use email',
|
|
||||||
enterEmail: 'Please enter email',
|
|
||||||
enterVerificationCode: 'Please enter verification code',
|
|
||||||
getVerificationCode: 'Get verification code',
|
|
||||||
verificationCodeSentSuccess: 'Verification code sent successfully',
|
|
||||||
resend: 'Resend'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
language: 'Language'
|
language: 'Language'
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,6 @@ export default {
|
|||||||
bindDN: 'Bind DN',
|
bindDN: 'Bind DN',
|
||||||
bindDNPlaceholder: 'Please enter Bind DN',
|
bindDNPlaceholder: 'Please enter Bind DN',
|
||||||
password: 'Password',
|
password: 'Password',
|
||||||
passwordPlaceholder: 'Please enter password',
|
|
||||||
ou: 'User OU',
|
ou: 'User OU',
|
||||||
ouPlaceholder: 'Please enter User OU',
|
ouPlaceholder: 'Please enter User OU',
|
||||||
ldap_filter: 'User Filter',
|
ldap_filter: 'User Filter',
|
||||||
|
|||||||
97
ui/src/locales/lang/zh-CN/ai-chat.ts
Normal file
97
ui/src/locales/lang/zh-CN/ai-chat.ts
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
export default {
|
||||||
|
noHistory: '暂无历史记录',
|
||||||
|
createChat: '新建对话',
|
||||||
|
history: '历史记录',
|
||||||
|
only20history: '仅显示最近 20 条对话',
|
||||||
|
question_count: '条提问',
|
||||||
|
exportRecords: '导出聊天记录',
|
||||||
|
chatId: '对话id',
|
||||||
|
userInput: '用户输入',
|
||||||
|
quote: '引用',
|
||||||
|
download: '点击下载文件',
|
||||||
|
passwordValidator: {
|
||||||
|
title: '请输入密码打开链接',
|
||||||
|
errorMessage1: '密码不能为空',
|
||||||
|
errorMessage2: '密码错误'
|
||||||
|
},
|
||||||
|
operation: {
|
||||||
|
play: '点击播放',
|
||||||
|
pause: '停止',
|
||||||
|
regeneration: '换个答案',
|
||||||
|
like: '赞同',
|
||||||
|
cancelLike: '取消赞同',
|
||||||
|
oppose: '反对',
|
||||||
|
cancelOppose: '取消反对',
|
||||||
|
continue: '继续',
|
||||||
|
stopChat: '停止回答'
|
||||||
|
},
|
||||||
|
|
||||||
|
tip: {
|
||||||
|
error500Message: '抱歉,当前正在维护,无法提供服务,请稍后再试!',
|
||||||
|
errorIdentifyMessage: '无法识别用户身份',
|
||||||
|
errorLimitMessage: '抱歉,您的提问已达到最大限制,请明天再来吧!',
|
||||||
|
answerMessage: '抱歉,没有查找到相关内容,请重新描述您的问题或提供更多信息。',
|
||||||
|
stopAnswer: '已停止回答',
|
||||||
|
answerLoading: '回答中',
|
||||||
|
recorderTip: `<p>该功能需要使用麦克风,浏览器禁止不安全页面录音,解决方案如下:<br/>
|
||||||
|
1、可开启 https 解决;<br/>
|
||||||
|
2、若无 https 配置则需要修改浏览器安全配置,Chrome 设置如下:<br/>
|
||||||
|
(1) 地址栏输入chrome://flags/#unsafely-treat-insecure-origin-as-secure;<br/>
|
||||||
|
(2) 将 http 站点配置在文本框中,例如: http://127.0.0.1:8080。</p>`,
|
||||||
|
recorderError: '录音失败',
|
||||||
|
confirm: '我知道了',
|
||||||
|
requiredMessage: '请填写所有必填字段',
|
||||||
|
inputParamMessage1: '请在URL中填写参数',
|
||||||
|
inputParamMessage2: '的值',
|
||||||
|
prologueMessage: '抱歉,当前正在维护,无法提供服务,请稍后再试!'
|
||||||
|
},
|
||||||
|
inputPlaceholder: {
|
||||||
|
speaking: '说话中',
|
||||||
|
recorderLoading: '转文字中',
|
||||||
|
default: '请输入问题,Ctrl+Enter 换行,Enter发送'
|
||||||
|
},
|
||||||
|
uploadFile: {
|
||||||
|
label: '上传文件',
|
||||||
|
most: '最多',
|
||||||
|
limit: '个,每个文件限制',
|
||||||
|
fileType: '文件类型',
|
||||||
|
tipMessage: '请在文件上传配置中选择文件类型',
|
||||||
|
limitMessage1: '最多上传',
|
||||||
|
limitMessage2: '个文件',
|
||||||
|
sizeLimit: '单个文件大小不能超过',
|
||||||
|
imageMessage: '请解析图片内容',
|
||||||
|
errorMessage: '上传失败'
|
||||||
|
},
|
||||||
|
executionDetails: {
|
||||||
|
title: '执行详情',
|
||||||
|
paramInput: '参数输入',
|
||||||
|
paramOutput: '参数输出',
|
||||||
|
paramOutputTooltip: '每个文档仅支持预览500字',
|
||||||
|
audioFile: '语音文件',
|
||||||
|
searchContent: '检索内容',
|
||||||
|
searchResult: '检索结果',
|
||||||
|
conditionResult: '判断结果',
|
||||||
|
currentChat: '本次对话',
|
||||||
|
answer: 'AI 回答',
|
||||||
|
replyContent: '回复内容',
|
||||||
|
textContent: '文本内容',
|
||||||
|
input: '输入',
|
||||||
|
output: '输出',
|
||||||
|
rerankerContent: '重排内容',
|
||||||
|
rerankerResult: '重排结果',
|
||||||
|
paragraph: '分段',
|
||||||
|
noSubmit: '用户未提交',
|
||||||
|
errMessage: '错误日志'
|
||||||
|
},
|
||||||
|
KnowledgeSource: {
|
||||||
|
title: '知识来源',
|
||||||
|
referenceParagraph: '引用分段',
|
||||||
|
consume: '消耗',
|
||||||
|
consumeTime: '耗时'
|
||||||
|
},
|
||||||
|
paragraphSource: {
|
||||||
|
title: '知识库引用',
|
||||||
|
question: '用户问题',
|
||||||
|
optimizationQuestion: '优化后问题'
|
||||||
|
}
|
||||||
|
}
|
||||||
5
ui/src/locales/lang/zh-CN/components.ts
Normal file
5
ui/src/locales/lang/zh-CN/components.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
quickCreatePlaceholder: '快速创建空白文档',
|
||||||
|
quickCreateName: '文档名称',
|
||||||
|
noData: '无匹配数据'
|
||||||
|
}
|
||||||
@ -1,31 +0,0 @@
|
|||||||
export default {
|
|
||||||
noHistory: '暂无历史记录',
|
|
||||||
createChat: '新建对话',
|
|
||||||
history: '历史记录',
|
|
||||||
only20history: '仅显示最近 20 条对话',
|
|
||||||
question_count: '条提问',
|
|
||||||
exportRecords: '导出聊天记录',
|
|
||||||
chatId: '对话id',
|
|
||||||
userInput: '用户输入',
|
|
||||||
passwordValidator: {
|
|
||||||
title: '请输入密码打开链接',
|
|
||||||
errorMessage1: '密码不能为空',
|
|
||||||
errorMessage2: '密码错误'
|
|
||||||
},
|
|
||||||
tip: {
|
|
||||||
error500Message: '抱歉,当前正在维护,无法提供服务,请稍后再试!',
|
|
||||||
errorIdentifyMessage: '无法识别用户身份',
|
|
||||||
errorLimitMessage: '抱歉,您的提问已达到最大限制,请明天再来吧!'
|
|
||||||
},
|
|
||||||
executionDetails: {
|
|
||||||
title: '执行详情',
|
|
||||||
paramInput: '参数输入',
|
|
||||||
paramOutput: '参数输出'
|
|
||||||
},
|
|
||||||
KnowledgeSource: {
|
|
||||||
title: '知识来源',
|
|
||||||
referenceParagraph: '引用分段',
|
|
||||||
consume: '消耗',
|
|
||||||
consumeTime: '耗时'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
import dynamicsForm from './dynamics-form'
|
|
||||||
import chat from './ai-chat'
|
|
||||||
export default {
|
|
||||||
dynamicsForm,
|
|
||||||
chat,
|
|
||||||
noData: '无匹配数据'
|
|
||||||
}
|
|
||||||
@ -3,11 +3,15 @@ import components from './components'
|
|||||||
import layout from './layout'
|
import layout from './layout'
|
||||||
import views from './views'
|
import views from './views'
|
||||||
import common from './common'
|
import common from './common'
|
||||||
|
import dynamicsForm from './dynamics-form'
|
||||||
|
import chat from './ai-chat'
|
||||||
export default {
|
export default {
|
||||||
lang: '简体中文',
|
lang: '简体中文',
|
||||||
layout,
|
layout,
|
||||||
views,
|
views,
|
||||||
components,
|
components,
|
||||||
zhCn,
|
zhCn,
|
||||||
common
|
common,
|
||||||
|
dynamicsForm,
|
||||||
|
chat
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,25 +9,11 @@ export default {
|
|||||||
function_lib: '函数库'
|
function_lib: '函数库'
|
||||||
},
|
},
|
||||||
avatar: {
|
avatar: {
|
||||||
resetPassword: '修改密码',
|
|
||||||
about: '关于',
|
about: '关于',
|
||||||
logout: '退出',
|
logout: '退出',
|
||||||
version: '版本号',
|
version: '版本号',
|
||||||
apiKey: 'API Key 管理',
|
apiKey: 'API Key 管理',
|
||||||
apiServiceAddress: 'API 服务地址',
|
apiServiceAddress: 'API 服务地址',
|
||||||
dialog: {
|
|
||||||
newPassword: '新密码',
|
|
||||||
enterPassword: '请输入修改密码',
|
|
||||||
confirmPassword: '确认密码',
|
|
||||||
passwordLength: '密码长度在 6 到 20 个字符',
|
|
||||||
passwordMismatch: '两次密码输入不一致',
|
|
||||||
useEmail: '使用邮箱',
|
|
||||||
enterEmail: '请输入邮箱',
|
|
||||||
enterVerificationCode: '请输入验证码',
|
|
||||||
getVerificationCode: '获取验证码',
|
|
||||||
verificationCodeSentSuccess: '验证码发送成功',
|
|
||||||
resend: '重新发送'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
language: '语言'
|
language: '语言'
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,24 @@
|
|||||||
export default {
|
export default {
|
||||||
|
title: '普通登录',
|
||||||
jump_tip: '即将跳转至认证源页面进行认证',
|
jump_tip: '即将跳转至认证源页面进行认证',
|
||||||
jump: '跳转'
|
jump: '跳转',
|
||||||
|
resetPassword: '修改密码',
|
||||||
|
forgotPassword: '忘记密码',
|
||||||
|
userRegister: '用户注册',
|
||||||
|
buttons: {
|
||||||
|
login: '登录',
|
||||||
|
register: '注册',
|
||||||
|
backLogin: '返回登录',
|
||||||
|
checkCode: '立即验证'
|
||||||
|
},
|
||||||
|
newPassword: '新密码',
|
||||||
|
enterPassword: '请输入修改密码',
|
||||||
|
useEmail: '使用邮箱',
|
||||||
|
moreMethod: '更多登录方式',
|
||||||
|
verificationCode: {
|
||||||
|
placeholder: '请输入验证码',
|
||||||
|
getVerificationCode: '获取验证码',
|
||||||
|
successMessage: '验证码发送成功',
|
||||||
|
resend: '重新发送'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,6 @@ export default {
|
|||||||
bindDN: '绑定DN',
|
bindDN: '绑定DN',
|
||||||
bindDNPlaceholder: '请输入绑定 DN',
|
bindDNPlaceholder: '请输入绑定 DN',
|
||||||
password: '密码',
|
password: '密码',
|
||||||
passwordPlaceholder: '请输入密码',
|
|
||||||
ou: '用户OU',
|
ou: '用户OU',
|
||||||
ouPlaceholder: '请输入用户 OU',
|
ouPlaceholder: '请输入用户 OU',
|
||||||
ldap_filter: '用户过滤器',
|
ldap_filter: '用户过滤器',
|
||||||
|
|||||||
@ -32,7 +32,8 @@ export default {
|
|||||||
email: {
|
email: {
|
||||||
label: '邮箱',
|
label: '邮箱',
|
||||||
placeholder: '请输入邮箱',
|
placeholder: '请输入邮箱',
|
||||||
requiredMessage: '请输入邮箱'
|
requiredMessage: '请输入邮箱',
|
||||||
|
validatorEmail: '请输入有效邮箱格式!',
|
||||||
},
|
},
|
||||||
phone: {
|
phone: {
|
||||||
label: '手机号',
|
label: '手机号',
|
||||||
|
|||||||
5
ui/src/locales/lang/zh-Hant/components.ts
Normal file
5
ui/src/locales/lang/zh-Hant/components.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
quickCreatePlaceholder: '快速創建空白文檔',
|
||||||
|
quickCreateName: '文檔名稱',
|
||||||
|
noData: '無匹配数据'
|
||||||
|
}
|
||||||
@ -1,7 +0,0 @@
|
|||||||
import dynamicsForm from './dynamics-form'
|
|
||||||
import chat from './ai-chat'
|
|
||||||
export default {
|
|
||||||
dynamicsForm,
|
|
||||||
chat,
|
|
||||||
noData: '無匹配資料'
|
|
||||||
}
|
|
||||||
@ -3,12 +3,15 @@ import components from './components'
|
|||||||
import layout from './layout'
|
import layout from './layout'
|
||||||
import views from './views'
|
import views from './views'
|
||||||
import common from './common'
|
import common from './common'
|
||||||
|
import dynamicsForm from './dynamics-form'
|
||||||
|
import chat from './ai-chat'
|
||||||
export default {
|
export default {
|
||||||
lang: '繁體中文',
|
lang: '繁體中文',
|
||||||
layout,
|
layout,
|
||||||
common,
|
common,
|
||||||
views,
|
views,
|
||||||
components,
|
components,
|
||||||
zhTw
|
zhTw,
|
||||||
|
dynamicsForm,
|
||||||
|
chat
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,25 +9,11 @@ export default {
|
|||||||
function_lib: '函數庫'
|
function_lib: '函數庫'
|
||||||
},
|
},
|
||||||
avatar: {
|
avatar: {
|
||||||
resetPassword: '修改密碼',
|
|
||||||
about: '關於',
|
about: '關於',
|
||||||
logout: '退出',
|
logout: '退出',
|
||||||
version: '版本號',
|
version: '版本號',
|
||||||
apiKey: 'API Key 管理',
|
apiKey: 'API Key 管理',
|
||||||
apiServiceAddress: 'API 服務地址',
|
apiServiceAddress: 'API 服務地址',
|
||||||
dialog: {
|
|
||||||
newPassword: '新密碼',
|
|
||||||
enterPassword: '請輸入修改密碼',
|
|
||||||
confirmPassword: '確認密碼',
|
|
||||||
passwordLength: '密碼長度在 6 到 20 個字元',
|
|
||||||
passwordMismatch: '兩次密碼輸入不一致',
|
|
||||||
useEmail: '使用郵箱',
|
|
||||||
enterEmail: '請輸入郵箱',
|
|
||||||
enterVerificationCode: '請輸入驗證碼',
|
|
||||||
getVerificationCode: '獲取驗證碼',
|
|
||||||
verificationCodeSentSuccess: '驗證碼發送成功',
|
|
||||||
resend: '重新發送'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
language: '語言'
|
language: '語言'
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,6 @@ export default {
|
|||||||
bindDN: '綁定DN',
|
bindDN: '綁定DN',
|
||||||
bindDNPlaceholder: '請輸入綁定 DN',
|
bindDNPlaceholder: '請輸入綁定 DN',
|
||||||
password: '密碼',
|
password: '密碼',
|
||||||
passwordPlaceholder: '請輸入密碼',
|
|
||||||
ou: '使用者OU',
|
ou: '使用者OU',
|
||||||
ouPlaceholder: '請輸入使用者 OU',
|
ouPlaceholder: '請輸入使用者 OU',
|
||||||
ldap_filter: '使用者過濾器',
|
ldap_filter: '使用者過濾器',
|
||||||
|
|||||||
@ -41,11 +41,6 @@ export const routes: Array<RouteRecordRaw> = [
|
|||||||
name: 'forgot_password',
|
name: 'forgot_password',
|
||||||
component: () => import('@/views/login/forgot-password/index.vue')
|
component: () => import('@/views/login/forgot-password/index.vue')
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/reset_password/:code/:email',
|
|
||||||
name: 'reset_password',
|
|
||||||
component: () => import('@/views/login/reset-password/index.vue')
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/:pathMatch(.*)',
|
path: '/:pathMatch(.*)',
|
||||||
name: '404',
|
name: '404',
|
||||||
|
|||||||
@ -59,7 +59,7 @@
|
|||||||
|
|
||||||
<template #empty>
|
<template #empty>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<el-text type="info"> {{ $t('components.chat.noHistory') }}</el-text>
|
<el-text type="info"> {{ $t('chat.noHistory') }}</el-text>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</common-list>
|
</common-list>
|
||||||
|
|||||||
@ -33,7 +33,7 @@
|
|||||||
>
|
>
|
||||||
<el-input
|
<el-input
|
||||||
v-model="form.config_data.password"
|
v-model="form.config_data.password"
|
||||||
:placeholder="$t('views.system.authentication.ldap.passwordPlaceholder')"
|
:placeholder="$t('views.user.userForm.form.password.placeholder')"
|
||||||
show-password
|
show-password
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -123,7 +123,7 @@ const rules = reactive<FormRules<any>>({
|
|||||||
'config_data.password': [
|
'config_data.password': [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: t('views.system.authentication.ldap.passwordPlaceholder'),
|
message: t('views.user.userForm.form.password.requiredMessage'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
:modelValue="show"
|
:modelValue="show"
|
||||||
modal-class="positioned-mask"
|
modal-class="positioned-mask"
|
||||||
width="300"
|
width="300"
|
||||||
:title="$t('components.chat.passwordValidator.title')"
|
:title="$t('chat.passwordValidator.title')"
|
||||||
custom-class="no-close-button"
|
custom-class="no-close-button"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
:close-on-press-escape="false"
|
:close-on-press-escape="false"
|
||||||
@ -52,10 +52,10 @@ const auth = () => {
|
|||||||
}
|
}
|
||||||
const validator_auth = (rule: any, value: string, callback: any) => {
|
const validator_auth = (rule: any, value: string, callback: any) => {
|
||||||
if (value === '') {
|
if (value === '') {
|
||||||
callback(new Error(t('components.chat.passwordValidator.errorMessage1')))
|
callback(new Error(t('chat.passwordValidator.errorMessage1')))
|
||||||
} else {
|
} else {
|
||||||
auth().catch(() => {
|
auth().catch(() => {
|
||||||
callback(new Error(t('components.chat.passwordValidator.errorMessage2')))
|
callback(new Error(t('chat.passwordValidator.errorMessage2')))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,7 +48,7 @@
|
|||||||
<div class="chat-width">
|
<div class="chat-width">
|
||||||
<el-button type="primary" link class="new-chat-button mb-8" @click="newChat">
|
<el-button type="primary" link class="new-chat-button mb-8" @click="newChat">
|
||||||
<el-icon><Plus /></el-icon
|
<el-icon><Plus /></el-icon
|
||||||
><span class="ml-4">{{ $t('components.chat.createChat') }}</span>
|
><span class="ml-4">{{ $t('chat.createChat') }}</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -72,7 +72,7 @@
|
|||||||
<el-collapse-transition>
|
<el-collapse-transition>
|
||||||
<div v-show="show" class="chat-popover w-full" v-click-outside="clickoutside">
|
<div v-show="show" class="chat-popover w-full" v-click-outside="clickoutside">
|
||||||
<div class="border-b p-16-24">
|
<div class="border-b p-16-24">
|
||||||
<span>{{ $t('components.chat.history') }}</span>
|
<span>{{ $t('chat.history') }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-scrollbar max-height="300">
|
<el-scrollbar max-height="300">
|
||||||
@ -100,13 +100,13 @@
|
|||||||
</template>
|
</template>
|
||||||
<template #empty>
|
<template #empty>
|
||||||
<div class="text-center mt-24">
|
<div class="text-center mt-24">
|
||||||
<el-text type="info">{{ $t('components.chat.noHistory') }}</el-text>
|
<el-text type="info">{{ $t('chat.noHistory') }}</el-text>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</common-list>
|
</common-list>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="chatLogData.length" class="gradient-divider lighter mt-8">
|
<div v-if="chatLogData.length" class="gradient-divider lighter mt-8">
|
||||||
<span>{{ $t('components.chat.only20history') }}</span>
|
<span>{{ $t('chat.only20history') }}</span>
|
||||||
</div>
|
</div>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -38,9 +38,9 @@
|
|||||||
<el-icon>
|
<el-icon>
|
||||||
<Plus />
|
<Plus />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
<span class="ml-4">{{ $t('components.chat.createChat') }}</span>
|
<span class="ml-4">{{ $t('chat.createChat') }}</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
<p class="mt-20 mb-8">{{ $t('components.chat.history') }}</p>
|
<p class="mt-20 mb-8">{{ $t('chat.history') }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="left-height pt-0">
|
<div class="left-height pt-0">
|
||||||
<el-scrollbar>
|
<el-scrollbar>
|
||||||
@ -76,13 +76,13 @@
|
|||||||
|
|
||||||
<template #empty>
|
<template #empty>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<el-text type="info">{{ $t('components.chat.noHistory') }}</el-text>
|
<el-text type="info">{{ $t('chat.noHistory') }}</el-text>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</common-list>
|
</common-list>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="chatLogData?.length" class="gradient-divider lighter mt-8">
|
<div v-if="chatLogData?.length" class="gradient-divider lighter mt-8">
|
||||||
<span>{{ $t('components.chat.only20history') }}</span>
|
<span>{{ $t('chat.only20history') }}</span>
|
||||||
</div>
|
</div>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
@ -101,13 +101,13 @@
|
|||||||
style="font-size: 16px"
|
style="font-size: 16px"
|
||||||
></AppIcon>
|
></AppIcon>
|
||||||
<span v-if="paginationConfig.total" class="lighter">
|
<span v-if="paginationConfig.total" class="lighter">
|
||||||
{{ paginationConfig.total }} {{ $t('components.chat.question_count') }}
|
{{ paginationConfig.total }} {{ $t('chat.question_count') }}
|
||||||
</span>
|
</span>
|
||||||
<el-dropdown class="ml-8">
|
<el-dropdown class="ml-8">
|
||||||
<AppIcon
|
<AppIcon
|
||||||
iconName="app-export"
|
iconName="app-export"
|
||||||
class="cursor"
|
class="cursor"
|
||||||
:title="$t('components.chat.exportRecords')"
|
:title="$t('chat.exportRecords')"
|
||||||
></AppIcon>
|
></AppIcon>
|
||||||
<template #dropdown>
|
<template #dropdown>
|
||||||
<el-dropdown-menu>
|
<el-dropdown-menu>
|
||||||
@ -183,7 +183,7 @@ const classObj = computed(() => {
|
|||||||
|
|
||||||
const newObj = {
|
const newObj = {
|
||||||
id: 'new',
|
id: 'new',
|
||||||
abstract: t('components.chat.createChat')
|
abstract: t('chat.createChat')
|
||||||
}
|
}
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
application_profile: any
|
application_profile: any
|
||||||
@ -210,7 +210,7 @@ const paginationConfig = ref({
|
|||||||
|
|
||||||
const currentRecordList = ref<any>([])
|
const currentRecordList = ref<any>([])
|
||||||
const currentChatId = ref('new') // 当前历史记录Id 默认为'new'
|
const currentChatId = ref('new') // 当前历史记录Id 默认为'new'
|
||||||
const currentChatName = ref(t('components.chat.createChat'))
|
const currentChatName = ref(t('chat.createChat'))
|
||||||
const mouseId = ref('')
|
const mouseId = ref('')
|
||||||
|
|
||||||
function mouseenter(row: any) {
|
function mouseenter(row: any) {
|
||||||
@ -220,7 +220,7 @@ function deleteLog(row: any) {
|
|||||||
log.asyncDelChatClientLog(applicationDetail.value.id, row.id, left_loading).then(() => {
|
log.asyncDelChatClientLog(applicationDetail.value.id, row.id, left_loading).then(() => {
|
||||||
if (currentChatId.value === row.id) {
|
if (currentChatId.value === row.id) {
|
||||||
currentChatId.value = 'new'
|
currentChatId.value = 'new'
|
||||||
currentChatName.value = t('components.chat.createChat')
|
currentChatName.value = t('chat.createChat')
|
||||||
paginationConfig.value.current_page = 1
|
paginationConfig.value.current_page = 1
|
||||||
paginationConfig.value.total = 0
|
paginationConfig.value.total = 0
|
||||||
currentRecordList.value = []
|
currentRecordList.value = []
|
||||||
@ -255,7 +255,7 @@ function newChat() {
|
|||||||
currentRecordList.value = []
|
currentRecordList.value = []
|
||||||
}
|
}
|
||||||
currentChatId.value = 'new'
|
currentChatId.value = 'new'
|
||||||
currentChatName.value = t('components.chat.createChat')
|
currentChatName.value = t('chat.createChat')
|
||||||
if (common.isMobile()) {
|
if (common.isMobile()) {
|
||||||
isCollapse.value = false
|
isCollapse.value = false
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<login-layout>
|
<login-layout>
|
||||||
<LoginContainer subTitle="欢迎使用 MaxKB 智能知识库问答系统">
|
<LoginContainer :subTitle="$t('views.system.theme.defaultSlogan')">
|
||||||
<h2 class="mb-24">忘记密码</h2>
|
<h2 class="mb-24">{{ $t('views.login.forgotPassword') }}</h2>
|
||||||
<el-form
|
<el-form
|
||||||
class="register-form"
|
class="register-form"
|
||||||
ref="resetPasswordFormRef"
|
ref="resetPasswordFormRef"
|
||||||
@ -14,7 +14,7 @@
|
|||||||
size="large"
|
size="large"
|
||||||
class="input-item"
|
class="input-item"
|
||||||
v-model="CheckEmailForm.email"
|
v-model="CheckEmailForm.email"
|
||||||
placeholder="请输入邮箱"
|
:placeholder="$t('views.user.userForm.form.email.placeholder')"
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -26,7 +26,7 @@
|
|||||||
size="large"
|
size="large"
|
||||||
class="code-input"
|
class="code-input"
|
||||||
v-model="CheckEmailForm.code"
|
v-model="CheckEmailForm.code"
|
||||||
placeholder="请输入验证码"
|
:placeholder="$t('views.login.verificationCode.placeholder')"
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
|
|
||||||
@ -37,13 +37,19 @@
|
|||||||
@click="sendEmail"
|
@click="sendEmail"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
>
|
>
|
||||||
{{ isDisabled ? `重新发送(${time}s)` : '获取验证码' }}</el-button
|
{{
|
||||||
|
isDisabled
|
||||||
|
? `${$t('views.login.verificationCode.resend')}(${time}s)`
|
||||||
|
: $t('views.login.verificationCode.getVerificationCode')
|
||||||
|
}}</el-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-button size="large" type="primary" class="w-full" @click="checkCode">立即验证</el-button>
|
<el-button size="large" type="primary" class="w-full" @click="checkCode">{{
|
||||||
|
$t('views.login.buttons.checkCode')
|
||||||
|
}}</el-button>
|
||||||
<div class="operate-container mt-12">
|
<div class="operate-container mt-12">
|
||||||
<el-button
|
<el-button
|
||||||
class="register"
|
class="register"
|
||||||
@ -52,7 +58,7 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
icon="ArrowLeft"
|
icon="ArrowLeft"
|
||||||
>
|
>
|
||||||
返回登录
|
{{ $t('views.login.buttons.backLogin') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
</LoginContainer>
|
</LoginContainer>
|
||||||
@ -65,7 +71,7 @@ import { useRouter } from 'vue-router'
|
|||||||
import type { FormInstance, FormRules } from 'element-plus'
|
import type { FormInstance, FormRules } from 'element-plus'
|
||||||
import UserApi from '@/api/user'
|
import UserApi from '@/api/user'
|
||||||
import { MsgSuccess } from '@/utils/message'
|
import { MsgSuccess } from '@/utils/message'
|
||||||
|
import { t } from '@/locales'
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const CheckEmailForm = ref<CheckCodeRequest>({
|
const CheckEmailForm = ref<CheckCodeRequest>({
|
||||||
email: '',
|
email: '',
|
||||||
@ -76,12 +82,16 @@ const CheckEmailForm = ref<CheckCodeRequest>({
|
|||||||
const resetPasswordFormRef = ref<FormInstance>()
|
const resetPasswordFormRef = ref<FormInstance>()
|
||||||
const rules = ref<FormRules<CheckCodeRequest>>({
|
const rules = ref<FormRules<CheckCodeRequest>>({
|
||||||
email: [
|
email: [
|
||||||
{ required: true, message: '请输入邮箱', trigger: 'blur' },
|
{
|
||||||
|
required: true,
|
||||||
|
message: t('views.user.userForm.form.email.requiredMessage'),
|
||||||
|
trigger: 'blur'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
validator: (rule, value, callback) => {
|
validator: (rule, value, callback) => {
|
||||||
const emailRegExp = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/
|
const emailRegExp = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/
|
||||||
if (!emailRegExp.test(value) && value != '') {
|
if (!emailRegExp.test(value) && value != '') {
|
||||||
callback(new Error('请输入有效邮箱格式!'))
|
callback(new Error(t('views.user.userForm.form.email.validatorEmail')))
|
||||||
} else {
|
} else {
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
@ -89,7 +99,7 @@ const rules = ref<FormRules<CheckCodeRequest>>({
|
|||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
code: [{ required: true, message: '请输入验证码' }]
|
code: [{ required: true, message: t('views.login.verificationCode.placeholder') }]
|
||||||
})
|
})
|
||||||
const loading = ref<boolean>(false)
|
const loading = ref<boolean>(false)
|
||||||
const isDisabled = ref<boolean>(false)
|
const isDisabled = ref<boolean>(false)
|
||||||
@ -108,7 +118,7 @@ const sendEmail = () => {
|
|||||||
resetPasswordFormRef.value?.validateField('email', (v: boolean) => {
|
resetPasswordFormRef.value?.validateField('email', (v: boolean) => {
|
||||||
if (v) {
|
if (v) {
|
||||||
UserApi.sendEmit(CheckEmailForm.value.email, 'reset_password', loading).then(() => {
|
UserApi.sendEmit(CheckEmailForm.value.email, 'reset_password', loading).then(() => {
|
||||||
MsgSuccess('发送验证码成功')
|
MsgSuccess(t('views.login.verificationCode.successMessage'))
|
||||||
isDisabled.value = true
|
isDisabled.value = true
|
||||||
handleTimeChange()
|
handleTimeChange()
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<login-layout v-if="user.isEnterprise() ? user.themeInfo : true" v-loading="loading">
|
<login-layout v-if="user.isEnterprise() ? user.themeInfo : true" v-loading="loading">
|
||||||
<LoginContainer :subTitle="user.themeInfo?.slogan || '欢迎使用 MaxKB 智能知识库问答系统'">
|
<LoginContainer :subTitle="user.themeInfo?.slogan || $t('views.system.theme.defaultSlogan')">
|
||||||
<h2 class="mb-24" v-if="!showQrCodeTab">{{ loginMode || '普通登录' }}</h2>
|
<h2 class="mb-24" v-if="!showQrCodeTab">{{ loginMode || $t('views.login.title') }}</h2>
|
||||||
<div v-if="!showQrCodeTab">
|
<div v-if="!showQrCodeTab">
|
||||||
<el-form
|
<el-form
|
||||||
class="login-form"
|
class="login-form"
|
||||||
@ -16,7 +16,7 @@
|
|||||||
size="large"
|
size="large"
|
||||||
class="input-item"
|
class="input-item"
|
||||||
v-model="loginForm.username"
|
v-model="loginForm.username"
|
||||||
placeholder="请输入用户名"
|
:placeholder="$t('views.user.userForm.form.username.placeholder')"
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -28,7 +28,7 @@
|
|||||||
size="large"
|
size="large"
|
||||||
class="input-item"
|
class="input-item"
|
||||||
v-model="loginForm.password"
|
v-model="loginForm.password"
|
||||||
placeholder="请输入密码"
|
:placeholder="$t('views.user.userForm.form.password.placeholder')"
|
||||||
show-password
|
show-password
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
@ -36,7 +36,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<el-button size="large" type="primary" class="w-full" @click="login">登录</el-button>
|
<el-button size="large" type="primary" class="w-full" @click="login">{{
|
||||||
|
$t('views.login.buttons.login')
|
||||||
|
}}</el-button>
|
||||||
<div class="operate-container flex-between mt-12">
|
<div class="operate-container flex-between mt-12">
|
||||||
<!-- <el-button class="register" @click="router.push('/register')" link type="primary">
|
<!-- <el-button class="register" @click="router.push('/register')" link type="primary">
|
||||||
注册
|
注册
|
||||||
@ -47,7 +49,7 @@
|
|||||||
link
|
link
|
||||||
type="primary"
|
type="primary"
|
||||||
>
|
>
|
||||||
忘记密码?
|
{{ $t('views.login.forgotPassword') }}?
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -56,7 +58,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="login-gradient-divider lighter mt-24" v-if="modeList.length > 1">
|
<div class="login-gradient-divider lighter mt-24" v-if="modeList.length > 1">
|
||||||
<span>更多登录方式</span>
|
<span>{{ $t('views.login.moreMethod') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center mt-16">
|
<div class="text-center mt-16">
|
||||||
<template v-for="item in modeList">
|
<template v-for="item in modeList">
|
||||||
@ -123,14 +125,14 @@ const rules = ref<FormRules<LoginRequest>>({
|
|||||||
username: [
|
username: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请输入用户名',
|
message: t('views.user.userForm.form.username.requiredMessage'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
password: [
|
password: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请输入密码',
|
message: t('views.user.userForm.form.password.requiredMessage'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -154,7 +156,7 @@ function redirectAuth(authType: string) {
|
|||||||
if (!res.data) {
|
if (!res.data) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
MsgConfirm(`${t('login.jump_tip')}`, t(''), {
|
MsgConfirm(t('login.jump_tip'), '', {
|
||||||
confirmButtonText: t('login.jump'),
|
confirmButtonText: t('login.jump'),
|
||||||
cancelButtonText: t('common.cancel'),
|
cancelButtonText: t('common.cancel'),
|
||||||
confirmButtonClass: ''
|
confirmButtonClass: ''
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<login-layout>
|
<login-layout>
|
||||||
<LoginContainer subTitle="欢迎使用 MaxKB 智能知识库问答系统">
|
<LoginContainer :subTitle="$t('views.system.theme.defaultSlogan')">
|
||||||
<h2 class="mb-24">用户注册</h2>
|
<h2 class="mb-24">{{ $t('views.login.userRegister') }}</h2>
|
||||||
<el-form class="register-form" :model="registerForm" :rules="rules" ref="registerFormRef">
|
<el-form class="register-form" :model="registerForm" :rules="rules" ref="registerFormRef">
|
||||||
<div class="mb-24">
|
<div class="mb-24">
|
||||||
<el-form-item prop="username">
|
<el-form-item prop="username">
|
||||||
@ -9,7 +9,7 @@
|
|||||||
size="large"
|
size="large"
|
||||||
class="input-item"
|
class="input-item"
|
||||||
v-model="registerForm.username"
|
v-model="registerForm.username"
|
||||||
placeholder="请输入用户名"
|
:placeholder="$t('views.user.userForm.form.username.placeholder')"
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -21,7 +21,7 @@
|
|||||||
size="large"
|
size="large"
|
||||||
class="input-item"
|
class="input-item"
|
||||||
v-model="registerForm.password"
|
v-model="registerForm.password"
|
||||||
placeholder="请输入密码"
|
:placeholder="$t('views.user.userForm.form.password.placeholder')"
|
||||||
show-password
|
show-password
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
@ -34,7 +34,7 @@
|
|||||||
size="large"
|
size="large"
|
||||||
class="input-item"
|
class="input-item"
|
||||||
v-model="registerForm.re_password"
|
v-model="registerForm.re_password"
|
||||||
placeholder="请输入确认密码"
|
:placeholder="$t('views.user.userForm.form.re_password.placeholder')"
|
||||||
show-password
|
show-password
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
@ -46,7 +46,7 @@
|
|||||||
size="large"
|
size="large"
|
||||||
class="input-item"
|
class="input-item"
|
||||||
v-model="registerForm.email"
|
v-model="registerForm.email"
|
||||||
placeholder="请输入邮箱"
|
:placeholder="$t('views.user.userForm.form.email.placeholder')"
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -58,7 +58,7 @@
|
|||||||
size="large"
|
size="large"
|
||||||
class="code-input"
|
class="code-input"
|
||||||
v-model="registerForm.code"
|
v-model="registerForm.code"
|
||||||
placeholder="请输入验证码"
|
:placeholder="$t('views.login.verificationCode.placeholder')"
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
<el-button
|
<el-button
|
||||||
@ -68,13 +68,19 @@
|
|||||||
@click="sendEmail"
|
@click="sendEmail"
|
||||||
:loading="sendEmailLoading"
|
:loading="sendEmailLoading"
|
||||||
>
|
>
|
||||||
{{ isDisabled ? `重新发送(${time}s)` : '获取验证码' }}</el-button
|
{{
|
||||||
|
isDisabled
|
||||||
|
? `${$t('views.login.verificationCode.resend')}(${time}s)`
|
||||||
|
: $t('views.login.verificationCode.getVerificationCode')
|
||||||
|
}}</el-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-button size="large" type="primary" class="w-full" @click="register">注册</el-button>
|
<el-button size="large" type="primary" class="w-full" @click="register">{{
|
||||||
|
$t('views.login.buttons.register')
|
||||||
|
}}</el-button>
|
||||||
<div class="operate-container mt-12">
|
<div class="operate-container mt-12">
|
||||||
<el-button
|
<el-button
|
||||||
class="register"
|
class="register"
|
||||||
@ -83,7 +89,7 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
icon="ArrowLeft"
|
icon="ArrowLeft"
|
||||||
>
|
>
|
||||||
返回登录
|
{{ $t('views.login.buttons.backLogin') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
</LoginContainer>
|
</LoginContainer>
|
||||||
@ -96,7 +102,7 @@ import { useRouter } from 'vue-router'
|
|||||||
import UserApi from '@/api/user'
|
import UserApi from '@/api/user'
|
||||||
import { MsgSuccess } from '@/utils/message'
|
import { MsgSuccess } from '@/utils/message'
|
||||||
import type { FormInstance, FormRules } from 'element-plus'
|
import type { FormInstance, FormRules } from 'element-plus'
|
||||||
|
import { t } from '@/locales'
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const registerForm = ref<RegisterRequest>({
|
const registerForm = ref<RegisterRequest>({
|
||||||
username: '',
|
username: '',
|
||||||
@ -110,45 +116,45 @@ const rules = ref<FormRules<RegisterRequest>>({
|
|||||||
username: [
|
username: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请输入用户名',
|
message: t('views.user.userForm.form.username.placeholder'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
min: 6,
|
min: 6,
|
||||||
max: 20,
|
max: 20,
|
||||||
message: '长度在 6 到 20 个字符',
|
message: t('views.user.userForm.form.username.lengthMessage'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
password: [
|
password: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请输入密码',
|
message: t('views.user.userForm.form.password.requiredMessage'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
min: 6,
|
min: 6,
|
||||||
max: 20,
|
max: 20,
|
||||||
message: '长度在 6 到 20 个字符',
|
message: t('views.user.userForm.form.password.lengthMessage'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
re_password: [
|
re_password: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请输入确认密码',
|
message: t('views.user.userForm.form.re_password.requiredMessage'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
min: 6,
|
min: 6,
|
||||||
max: 20,
|
max: 20,
|
||||||
message: '长度在 6 到 20 个字符',
|
message: t('views.user.userForm.form.password.lengthMessage'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
validator: (rule, value, callback) => {
|
validator: (rule, value, callback) => {
|
||||||
if (registerForm.value.password != registerForm.value.re_password) {
|
if (registerForm.value.password != registerForm.value.re_password) {
|
||||||
callback(new Error('密码不一致'))
|
callback(new Error(t('views.user.userForm.form.password.validatorMessage')))
|
||||||
} else {
|
} else {
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
@ -157,12 +163,16 @@ const rules = ref<FormRules<RegisterRequest>>({
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
email: [
|
email: [
|
||||||
{ required: true, message: '请输入邮箱', trigger: 'blur' },
|
{
|
||||||
|
required: true,
|
||||||
|
message: t('views.user.userForm.form.email.requiredMessage'),
|
||||||
|
trigger: 'blur'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
validator: (rule, value, callback) => {
|
validator: (rule, value, callback) => {
|
||||||
const emailRegExp = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/
|
const emailRegExp = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/
|
||||||
if (!emailRegExp.test(value) && value != '') {
|
if (!emailRegExp.test(value) && value != '') {
|
||||||
callback(new Error('请输入有效邮箱格式!'))
|
callback(new Error(t('views.user.userForm.form.email.validatorEmail')))
|
||||||
} else {
|
} else {
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
@ -170,7 +180,7 @@ const rules = ref<FormRules<RegisterRequest>>({
|
|||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
code: [{ required: true, message: '请输入验证码' }]
|
code: [{ required: true, message: t('views.login.verificationCode.placeholder') }]
|
||||||
})
|
})
|
||||||
|
|
||||||
const registerFormRef = ref<FormInstance>()
|
const registerFormRef = ref<FormInstance>()
|
||||||
@ -194,7 +204,7 @@ const sendEmail = () => {
|
|||||||
registerFormRef.value?.validateField('email', (v: boolean) => {
|
registerFormRef.value?.validateField('email', (v: boolean) => {
|
||||||
if (v) {
|
if (v) {
|
||||||
UserApi.sendEmit(registerForm.value.email, 'register', sendEmailLoading).then(() => {
|
UserApi.sendEmit(registerForm.value.email, 'register', sendEmailLoading).then(() => {
|
||||||
MsgSuccess('发送验证码成功')
|
MsgSuccess(t('views.login.verificationCode.successMessage'))
|
||||||
isDisabled.value = true
|
isDisabled.value = true
|
||||||
handleTimeChange()
|
handleTimeChange()
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,134 +0,0 @@
|
|||||||
<template>
|
|
||||||
<login-layout>
|
|
||||||
<LoginContainer subTitle="欢迎使用 MaxKB 智能知识库问答系统">
|
|
||||||
<h2 class="mb-24">修改密码</h2>
|
|
||||||
<el-form
|
|
||||||
class="reset-password-form"
|
|
||||||
ref="resetPasswordFormRef"
|
|
||||||
:model="resetPasswordForm"
|
|
||||||
:rules="rules"
|
|
||||||
>
|
|
||||||
<div class="mb-24">
|
|
||||||
<el-form-item prop="password">
|
|
||||||
<el-input
|
|
||||||
type="password"
|
|
||||||
size="large"
|
|
||||||
class="input-item"
|
|
||||||
v-model="resetPasswordForm.password"
|
|
||||||
placeholder="请输入密码"
|
|
||||||
show-password
|
|
||||||
>
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
<div class="mb-24">
|
|
||||||
<el-form-item prop="re_password">
|
|
||||||
<el-input
|
|
||||||
type="password"
|
|
||||||
size="large"
|
|
||||||
class="input-item"
|
|
||||||
v-model="resetPasswordForm.re_password"
|
|
||||||
placeholder="请输入确认密码"
|
|
||||||
show-password
|
|
||||||
>
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
</el-form>
|
|
||||||
<el-button size="large" type="primary" class="w-full" @click="resetPassword"
|
|
||||||
>确认修改</el-button
|
|
||||||
>
|
|
||||||
<div class="operate-container mt-12">
|
|
||||||
<el-button
|
|
||||||
size="large"
|
|
||||||
class="register"
|
|
||||||
@click="router.push('/login')"
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
icon="ArrowLeft"
|
|
||||||
>
|
|
||||||
返回登录
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</LoginContainer>
|
|
||||||
</login-layout>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { ref, onMounted } from 'vue'
|
|
||||||
import type { ResetPasswordRequest } from '@/api/type/user'
|
|
||||||
import { useRouter, useRoute } from 'vue-router'
|
|
||||||
import { MsgSuccess } from '@/utils/message'
|
|
||||||
import type { FormInstance, FormRules } from 'element-plus'
|
|
||||||
import UserApi from '@/api/user'
|
|
||||||
const router = useRouter()
|
|
||||||
const route = useRoute()
|
|
||||||
const {
|
|
||||||
params: { code, email }
|
|
||||||
} = route
|
|
||||||
const resetPasswordForm = ref<ResetPasswordRequest>({
|
|
||||||
password: '',
|
|
||||||
re_password: '',
|
|
||||||
email: '',
|
|
||||||
code: ''
|
|
||||||
})
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
if (code && email) {
|
|
||||||
resetPasswordForm.value.code = code as string
|
|
||||||
resetPasswordForm.value.email = email as string
|
|
||||||
} else {
|
|
||||||
router.push('forgot_password')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const rules = ref<FormRules<ResetPasswordRequest>>({
|
|
||||||
password: [
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: '请输入密码',
|
|
||||||
trigger: 'blur'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
min: 6,
|
|
||||||
max: 20,
|
|
||||||
message: '长度在 6 到 20 个字符',
|
|
||||||
trigger: 'blur'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
re_password: [
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: '请输入确认密码',
|
|
||||||
trigger: 'blur'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
min: 6,
|
|
||||||
max: 20,
|
|
||||||
message: '长度在 6 到 20 个字符',
|
|
||||||
trigger: 'blur'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
validator: (rule, value, callback) => {
|
|
||||||
if (resetPasswordForm.value.password != resetPasswordForm.value.re_password) {
|
|
||||||
callback(new Error('密码不一致'))
|
|
||||||
} else {
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
trigger: 'blur'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
const resetPasswordFormRef = ref<FormInstance>()
|
|
||||||
const loading = ref<boolean>(false)
|
|
||||||
const resetPassword = () => {
|
|
||||||
resetPasswordFormRef.value
|
|
||||||
?.validate()
|
|
||||||
.then(() => UserApi.resetPassword(resetPasswordForm.value, loading))
|
|
||||||
.then(() => {
|
|
||||||
MsgSuccess('修改密码成功')
|
|
||||||
router.push({ name: 'login' })
|
|
||||||
})
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style lang="scss" scope></style>
|
|
||||||
@ -196,7 +196,7 @@
|
|||||||
>
|
>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="label"
|
prop="label"
|
||||||
:label="$t('components.dynamicsForm.paramForm.name.label')"
|
:label="$t('dynamicsForm.paramForm.name.label')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
>
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
@ -208,11 +208,11 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="field"
|
prop="field"
|
||||||
:label="$t('components.dynamicsForm.paramForm.field.label')"
|
:label="$t('dynamicsForm.paramForm.field.label')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
/>
|
/>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
:label="$t('components.dynamicsForm.paramForm.input_type.label')"
|
:label="$t('dynamicsForm.paramForm.input_type.label')"
|
||||||
width="110px"
|
width="110px"
|
||||||
>
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
@ -223,7 +223,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
/>
|
/>
|
||||||
<el-table-column :label="$t('common.required')">
|
<el-table-column :label="$t('common.required')">
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
{{ $t('views.template.templateForm.title.addParam') }}
|
{{ $t('views.template.templateForm.title.addParam') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-table :data="modelParamsForm" class="mb-16">
|
<el-table :data="modelParamsForm" class="mb-16">
|
||||||
<el-table-column prop="label" :label="$t('components.dynamicsForm.paramForm.name.label')" show-overflow-tooltip>
|
<el-table-column prop="label" :label="$t('dynamicsForm.paramForm.name.label')" show-overflow-tooltip>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<span v-if="row.label && row.label.input_type === 'TooltipLabel'">{{
|
<span v-if="row.label && row.label.input_type === 'TooltipLabel'">{{
|
||||||
row.label.label
|
row.label.label
|
||||||
@ -20,8 +20,8 @@
|
|||||||
<span v-else>{{ row.label }}</span>
|
<span v-else>{{ row.label }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="field" :label="$t('components.dynamicsForm.paramForm.field.label')" show-overflow-tooltip />
|
<el-table-column prop="field" :label="$t('dynamicsForm.paramForm.field.label')" show-overflow-tooltip />
|
||||||
<el-table-column :label="$t('components.dynamicsForm.paramForm.input_type.label')" width="110px">
|
<el-table-column :label="$t('dynamicsForm.paramForm.input_type.label')" width="110px">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-tag type="info" class="info-tag">{{
|
<el-tag type="info" class="info-tag">{{
|
||||||
input_type_list.find((item) => item.value === row.input_type)?.label
|
input_type_list.find((item) => item.value === row.input_type)?.label
|
||||||
@ -30,7 +30,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
/>
|
/>
|
||||||
<el-table-column :label="$t('common.required')">
|
<el-table-column :label="$t('common.required')">
|
||||||
|
|||||||
@ -17,7 +17,7 @@
|
|||||||
<el-form class="login-form">
|
<el-form class="login-form">
|
||||||
<div class="mb-24">
|
<div class="mb-24">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input size="large" class="input-item" placeholder="请输入用户名"> </el-input>
|
<el-input size="large" class="input-item" :placeholder="$t('views.user.userForm.form.username.placeholder')"> </el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-24">
|
<div class="mb-24">
|
||||||
@ -26,16 +26,20 @@
|
|||||||
type="password"
|
type="password"
|
||||||
size="large"
|
size="large"
|
||||||
class="input-item"
|
class="input-item"
|
||||||
placeholder="请输入密码"
|
:placeholder="$t('views.user.userForm.form.password.placeholder')"
|
||||||
show-password
|
show-password
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-button size="large" type="primary" class="w-full">登录</el-button>
|
<el-button size="large" type="primary" class="w-full">{{
|
||||||
|
$t('views.login.buttons.login')
|
||||||
|
}}</el-button>
|
||||||
<div class="operate-container flex-between mt-12">
|
<div class="operate-container flex-between mt-12">
|
||||||
<el-button class="forgot-password" link type="primary"> 忘记密码? </el-button>
|
<el-button class="forgot-password" link type="primary">
|
||||||
|
{{ $t('views.login.forgotPassword') }}?
|
||||||
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
</LoginContainer>
|
</LoginContainer>
|
||||||
</login-layout>
|
</login-layout>
|
||||||
|
|||||||
@ -98,7 +98,7 @@
|
|||||||
<slot></slot>
|
<slot></slot>
|
||||||
<template v-if="nodeFields.length > 0">
|
<template v-if="nodeFields.length > 0">
|
||||||
<h5 class="title-decoration-1 mb-8 mt-8">
|
<h5 class="title-decoration-1 mb-8 mt-8">
|
||||||
{{ $t('components.chat.executionDetails.paramOutput') }}
|
{{ $t('chat.executionDetails.paramOutput') }}
|
||||||
</h5>
|
</h5>
|
||||||
<template v-for="(item, index) in nodeFields" :key="index">
|
<template v-for="(item, index) in nodeFields" :key="index">
|
||||||
<div
|
<div
|
||||||
|
|||||||
@ -19,31 +19,31 @@
|
|||||||
:model="form"
|
:model="form"
|
||||||
require-asterisk-position="right"
|
require-asterisk-position="right"
|
||||||
>
|
>
|
||||||
<el-form-item :label="$t('components.dynamicsForm.paramForm.field.label')" prop="variable">
|
<el-form-item :label="$t('dynamicsForm.paramForm.field.label')" prop="variable">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="form.variable"
|
v-model="form.variable"
|
||||||
:placeholder="$t('components.dynamicsForm.paramForm.field.placeholder')"
|
:placeholder="$t('dynamicsForm.paramForm.field.placeholder')"
|
||||||
maxlength="64"
|
maxlength="64"
|
||||||
show-word-limit
|
show-word-limit
|
||||||
@blur="form.variable = form.variable.trim()"
|
@blur="form.variable = form.variable.trim()"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item :label="$t('components.dynamicsForm.paramForm.required.label')" @click.prevent>
|
<el-form-item :label="$t('dynamicsForm.paramForm.required.label')" @click.prevent>
|
||||||
<el-switch size="small" v-model="form.is_required"></el-switch>
|
<el-switch size="small" v-model="form.is_required"></el-switch>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:rules="{
|
:rules="{
|
||||||
required: form.is_required,
|
required: form.is_required,
|
||||||
message: $t('components.dynamicsForm.paramForm.default.placeholder'),
|
message: $t('dynamicsForm.paramForm.default.placeholder'),
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<el-input
|
<el-input
|
||||||
v-model="form.default_value"
|
v-model="form.default_value"
|
||||||
:placeholder="$t('components.dynamicsForm.paramForm.default.placeholder')"
|
:placeholder="$t('dynamicsForm.paramForm.default.placeholder')"
|
||||||
@blur="form.name = form.name.trim()"
|
@blur="form.name = form.name.trim()"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -80,10 +80,10 @@ const form = ref<any>({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
name: [{ required: true, message: t('components.dynamicsForm.paramForm.name.requiredMessage'), trigger: 'blur' }],
|
name: [{ required: true, message: t('dynamicsForm.paramForm.name.requiredMessage'), trigger: 'blur' }],
|
||||||
variable: [
|
variable: [
|
||||||
{ required: true, message: t('components.dynamicsForm.paramForm.field.requiredMessage'), trigger: 'blur' },
|
{ required: true, message: t('dynamicsForm.paramForm.field.requiredMessage'), trigger: 'blur' },
|
||||||
{ pattern: /^[a-zA-Z0-9_]+$/, message: t('components.dynamicsForm.paramForm.field.requiredMessage2'), trigger: 'blur' }
|
{ pattern: /^[a-zA-Z0-9_]+$/, message: t('dynamicsForm.paramForm.field.requiredMessage2'), trigger: 'blur' }
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@ -13,8 +13,8 @@
|
|||||||
:data="props.nodeModel.properties.api_input_field_list"
|
:data="props.nodeModel.properties.api_input_field_list"
|
||||||
class="mb-16"
|
class="mb-16"
|
||||||
>
|
>
|
||||||
<el-table-column prop="variable" :label="$t('components.dynamicsForm.paramForm.field.label')" />
|
<el-table-column prop="variable" :label="$t('dynamicsForm.paramForm.field.label')" />
|
||||||
<el-table-column prop="default_value" :label="$t('components.dynamicsForm.default.label')" />
|
<el-table-column prop="default_value" :label="$t('dynamicsForm.default.label')" />
|
||||||
<el-table-column :label="$t('common.required')">
|
<el-table-column :label="$t('common.required')">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<div @click.stop>
|
<div @click.stop>
|
||||||
|
|||||||
@ -122,11 +122,11 @@ const currentRow = computed(() => {
|
|||||||
})
|
})
|
||||||
const currentIndex = ref(null)
|
const currentIndex = ref(null)
|
||||||
const inputTypeList = ref([
|
const inputTypeList = ref([
|
||||||
{ label: t('components.dynamicsForm.input_type_list.TextInput'), value: 'TextInputConstructor' },
|
{ label: t('dynamicsForm.input_type_list.TextInput'), value: 'TextInputConstructor' },
|
||||||
{ label: t('components.dynamicsForm.input_type_list.SingleSelect'), value: 'SingleSelectConstructor' },
|
{ label: t('dynamicsForm.input_type_list.SingleSelect'), value: 'SingleSelectConstructor' },
|
||||||
{ label: t('components.dynamicsForm.input_type_list.MultiSelect'), value: 'MultiSelectConstructor' },
|
{ label: t('dynamicsForm.input_type_list.MultiSelect'), value: 'MultiSelectConstructor' },
|
||||||
{ label: t('components.dynamicsForm.input_type_list.RadioCard'), value: 'RadioCardConstructor' },
|
{ label: t('dynamicsForm.input_type_list.RadioCard'), value: 'RadioCardConstructor' },
|
||||||
{ label: t('components.dynamicsForm.input_type_list.DatePicker'), value: 'DatePickerConstructor' }
|
{ label: t('dynamicsForm.input_type_list.DatePicker'), value: 'DatePickerConstructor' }
|
||||||
])
|
])
|
||||||
|
|
||||||
const dialogVisible = ref<boolean>(false)
|
const dialogVisible = ref<boolean>(false)
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex-between mb-16">
|
<div class="flex-between mb-16">
|
||||||
<h5 class="lighter">{{ $t('components.chat.userInput') }}</h5>
|
<h5 class="lighter">{{ $t('chat.userInput') }}</h5>
|
||||||
<el-button link type="primary" @click="openAddDialog()">
|
<el-button link type="primary" @click="openAddDialog()">
|
||||||
<el-icon class="mr-4">
|
<el-icon class="mr-4">
|
||||||
<Plus />
|
<Plus />
|
||||||
@ -13,13 +13,13 @@
|
|||||||
:data="props.nodeModel.properties.user_input_field_list"
|
:data="props.nodeModel.properties.user_input_field_list"
|
||||||
class="mb-16"
|
class="mb-16"
|
||||||
>
|
>
|
||||||
<el-table-column prop="field" :label="$t('components.dynamicsForm.paramForm.field.label')">
|
<el-table-column prop="field" :label="$t('dynamicsForm.paramForm.field.label')">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<span :title="row.field" class="ellipsis-1">{{ row.field }}</span>
|
<span :title="row.field" class="ellipsis-1">{{ row.field }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column prop="label" :label="$t('components.dynamicsForm.paramForm.name.label')">
|
<el-table-column prop="label" :label="$t('dynamicsForm.paramForm.name.label')">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<span v-if="row.label && row.label.input_type === 'TooltipLabel'">
|
<span v-if="row.label && row.label.input_type === 'TooltipLabel'">
|
||||||
<span :title="row.label.label" class="ellipsis-1">
|
<span :title="row.label.label" class="ellipsis-1">
|
||||||
@ -33,33 +33,33 @@
|
|||||||
>
|
>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column :label="$t('components.dynamicsForm.paramForm.input_type.label')">
|
<el-table-column :label="$t('dynamicsForm.paramForm.input_type.label')">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-tag type="info" class="info-tag" v-if="row.input_type === 'TextInput'">{{
|
<el-tag type="info" class="info-tag" v-if="row.input_type === 'TextInput'">{{
|
||||||
$t('components.dynamicsForm.input_type_list.TextInput')
|
$t('dynamicsForm.input_type_list.TextInput')
|
||||||
}}</el-tag>
|
}}</el-tag>
|
||||||
<el-tag type="info" class="info-tag" v-if="row.input_type === 'Slider'">{{
|
<el-tag type="info" class="info-tag" v-if="row.input_type === 'Slider'">{{
|
||||||
$t('components.dynamicsForm.input_type_list.Slider')
|
$t('dynamicsForm.input_type_list.Slider')
|
||||||
}}</el-tag>
|
}}</el-tag>
|
||||||
<el-tag type="info" class="info-tag" v-if="row.input_type === 'SwitchInput'">{{
|
<el-tag type="info" class="info-tag" v-if="row.input_type === 'SwitchInput'">{{
|
||||||
$t('components.dynamicsForm.input_type_list.SwitchInput')
|
$t('dynamicsForm.input_type_list.SwitchInput')
|
||||||
}}</el-tag>
|
}}</el-tag>
|
||||||
<el-tag type="info" class="info-tag" v-if="row.input_type === 'SingleSelect'">{{
|
<el-tag type="info" class="info-tag" v-if="row.input_type === 'SingleSelect'">{{
|
||||||
$t('components.dynamicsForm.input_type_list.SingleSelect')
|
$t('dynamicsForm.input_type_list.SingleSelect')
|
||||||
}}</el-tag>
|
}}</el-tag>
|
||||||
<el-tag type="info" class="info-tag" v-if="row.input_type === 'MultiSelect'">{{
|
<el-tag type="info" class="info-tag" v-if="row.input_type === 'MultiSelect'">{{
|
||||||
$t('components.dynamicsForm.input_type_list.MultiSelect')
|
$t('dynamicsForm.input_type_list.MultiSelect')
|
||||||
}}</el-tag>
|
}}</el-tag>
|
||||||
<el-tag type="info" class="info-tag" v-if="row.input_type === 'RadioCard'">{{
|
<el-tag type="info" class="info-tag" v-if="row.input_type === 'RadioCard'">{{
|
||||||
$t('components.dynamicsForm.input_type_list.RadioCard')
|
$t('dynamicsForm.input_type_list.RadioCard')
|
||||||
}}</el-tag>
|
}}</el-tag>
|
||||||
<el-tag type="info" class="info-tag" v-if="row.input_type === 'DatePicker'">{{
|
<el-tag type="info" class="info-tag" v-if="row.input_type === 'DatePicker'">{{
|
||||||
$t('components.dynamicsForm.input_type_list.DatePicker')
|
$t('dynamicsForm.input_type_list.DatePicker')
|
||||||
}}</el-tag>
|
}}</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column prop="default_value" :label="$t('components.dynamicsForm.default.label')">
|
<el-table-column prop="default_value" :label="$t('dynamicsForm.default.label')">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<span :title="row.default_value" class="ellipsis-1">{{ getDefaultValue(row) }}</span>
|
<span :title="row.default_value" class="ellipsis-1">{{ getDefaultValue(row) }}</span>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -72,7 +72,7 @@
|
|||||||
>
|
>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="field"
|
prop="field"
|
||||||
:label="$t('components.dynamicsForm.paramForm.field.label')"
|
:label="$t('dynamicsForm.paramForm.field.label')"
|
||||||
>
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<span :title="row.field" class="ellipsis-1">{{ row.field }}</span>
|
<span :title="row.field" class="ellipsis-1">{{ row.field }}</span>
|
||||||
@ -80,7 +80,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="label"
|
prop="label"
|
||||||
:label="$t('components.dynamicsForm.paramForm.name.label')"
|
:label="$t('dynamicsForm.paramForm.name.label')"
|
||||||
>
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<span v-if="row.label && row.label.input_type === 'TooltipLabel'">
|
<span v-if="row.label && row.label.input_type === 'TooltipLabel'">
|
||||||
@ -97,7 +97,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column
|
<el-table-column
|
||||||
:label="$t('components.dynamicsForm.paramForm.input_type.label')"
|
:label="$t('dynamicsForm.paramForm.input_type.label')"
|
||||||
width="110px"
|
width="110px"
|
||||||
>
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
@ -109,7 +109,7 @@
|
|||||||
|
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="default_value"
|
prop="default_value"
|
||||||
:label="$t('components.dynamicsForm.default.label')"
|
:label="$t('dynamicsForm.default.label')"
|
||||||
>
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<span :title="row.default_value" class="ellipsis-1">{{
|
<span :title="row.default_value" class="ellipsis-1">{{
|
||||||
|
|||||||
@ -88,7 +88,7 @@
|
|||||||
{{ form_data.reranker_setting.similarity?.toFixed(3) }}</el-col
|
{{ form_data.reranker_setting.similarity?.toFixed(3) }}</el-col
|
||||||
>
|
>
|
||||||
<el-col :span="12" class="color-secondary lighter">
|
<el-col :span="12" class="color-secondary lighter">
|
||||||
{{ $t('components.chat.KnowledgeSource.referenceParagraph') }} Top</el-col
|
{{ $t('chat.KnowledgeSource.referenceParagraph') }} Top</el-col
|
||||||
>
|
>
|
||||||
<el-col :span="12" class="lighter"> {{ form_data.reranker_setting.top_n }}</el-col>
|
<el-col :span="12" class="lighter"> {{ form_data.reranker_setting.top_n }}</el-col>
|
||||||
<el-col :span="12" class="color-secondary lighter">
|
<el-col :span="12" class="color-secondary lighter">
|
||||||
|
|||||||
@ -38,7 +38,7 @@ const showicon = ref(false)
|
|||||||
const globalFields = [
|
const globalFields = [
|
||||||
{ label: t('views.applicationWorkflow.nodes.startNode.currentTime'), value: 'time' },
|
{ label: t('views.applicationWorkflow.nodes.startNode.currentTime'), value: 'time' },
|
||||||
{ label: t('views.application.applicationForm.form.historyRecord.label'), value: 'history_context' },
|
{ label: t('views.application.applicationForm.form.historyRecord.label'), value: 'history_context' },
|
||||||
{ label: t('components.chat.chatId'), value: 'chat_id' }
|
{ label: t('chat.chatId'), value: 'chat_id' }
|
||||||
]
|
]
|
||||||
|
|
||||||
const getRefreshFieldList = () => {
|
const getRefreshFieldList = () => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user