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