feat(web): update text

This commit is contained in:
zhaoying
2026-03-02 17:51:30 +08:00
parent 81353538e5
commit 37ddcb91ac
4 changed files with 47 additions and 19 deletions

View File

@@ -1340,7 +1340,9 @@ export const en = {
dynamicMatchSkill: 'Dynamic Match Skill', dynamicMatchSkill: 'Dynamic Match Skill',
executeTask: 'Execute Task', executeTask: 'Execute Task',
importWorkflow: 'Import Workflow', import: 'Import Application',
importWorkflow: 'Third-Party Workflow',
importThirdParty: 'Import Workflow',
platform: 'Source Platform', platform: 'Source Platform',
upload: 'Upload & Parse', upload: 'Upload & Parse',
complex: 'Compatibility Analysis', complex: 'Compatibility Analysis',
@@ -1354,6 +1356,7 @@ export const en = {
gotoList: 'Return to Application List', gotoList: 'Return to Application List',
gotoDetail: 'View Details', gotoDetail: 'View Details',
dify: 'Dify', dify: 'Dify',
pleaseUploadFile: 'Please upload workflow file',
}, },
userMemory: { userMemory: {
userMemory: 'User Memory', userMemory: 'User Memory',

View File

@@ -736,7 +736,9 @@ export const zh = {
dynamicMatchSkill: '动态匹配技能', dynamicMatchSkill: '动态匹配技能',
executeTask: '执行任务', executeTask: '执行任务',
importWorkflow: '导入工作流', import: '导入应用',
importWorkflow: '第三方工作流',
importThirdParty: '导入工作流',
platform: '来源平台', platform: '来源平台',
upload: '上传与解析', upload: '上传与解析',
complex: '兼容性分析', complex: '兼容性分析',
@@ -751,6 +753,7 @@ export const zh = {
gotoList: '返回应用列表', gotoList: '返回应用列表',
gotoDetail: '查看详情', gotoDetail: '查看详情',
dify: 'Dify', dify: 'Dify',
pleaseUploadFile: '请上传工作流文件',
}, },
table: { table: {
totalRecords: '共 {{total}} 条记录' totalRecords: '共 {{total}} 条记录'

View File

@@ -2,7 +2,7 @@
* @Author: ZhaoYing * @Author: ZhaoYing
* @Date: 2026-02-28 14:08:14 * @Date: 2026-02-28 14:08:14
* @Last Modified by: ZhaoYing * @Last Modified by: ZhaoYing
* @Last Modified time: 2026-02-28 16:20:40 * @Last Modified time: 2026-03-02 17:39:49
*/ */
/** /**
* UploadWorkflowModal Component * UploadWorkflowModal Component
@@ -14,7 +14,7 @@
* 4. Completed - Show success message and options * 4. Completed - Show success message and options
*/ */
import { forwardRef, useImperativeHandle, useState, useMemo } from 'react'; import { forwardRef, useImperativeHandle, useState, useMemo } from 'react';
import { Form, Select, Steps, Flex, Alert, Input, Button, Result } from 'antd'; import { Form, Select, Steps, Flex, Alert, Input, Button, Result, message } from 'antd';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import type { UploadWorkflowModalData, UploadData, UploadWorkflowModalRef } from '../types' import type { UploadWorkflowModalData, UploadData, UploadWorkflowModalRef } from '../types'
@@ -92,18 +92,22 @@ const UploadWorkflowModal = forwardRef<UploadWorkflowModalRef, UploadWorkflowMod
switch(current) { switch(current) {
case 0: // Step 1: Upload file case 0: // Step 1: Upload file
if (!values.file || values.file.length === 0) {
message.warning(t('application.pleaseUploadFile'));
return;
}
const formData = new FormData(); const formData = new FormData();
setFirstFormData(values); setFirstFormData(values);
formData.append('platform', values.platform); formData.append('platform', values.platform);
formData.append('file', values.file[0]); formData.append('file', values.file[0]);
// Call import workflow API // Call import workflow API
importWorkflow(formData) importWorkflow(formData)
.then(res => { .then(res => {
const response = res as UploadData; const response = res as UploadData;
const { errors, warnings } = response; const { errors, warnings } = response;
setData(response); setData(response);
// Navigate to error/warning step if any, otherwise go to confirmation // Navigate to error/warning step if any, otherwise go to confirmation
if (errors.length || warnings.length) { if (errors.length || warnings.length) {
setCurrent(1); setCurrent(1);
@@ -203,7 +207,7 @@ const UploadWorkflowModal = forwardRef<UploadWorkflowModalRef, UploadWorkflowMod
{t('common.cancel')} {t('common.cancel')}
</Button>, </Button>,
<Button <Button
key="submit" key="nextStep"
type="primary" type="primary"
loading={loading} loading={loading}
onClick={handleSave} onClick={handleSave}
@@ -215,7 +219,7 @@ const UploadWorkflowModal = forwardRef<UploadWorkflowModalRef, UploadWorkflowMod
return null; return null;
default: // Steps 1-2 default: // Steps 1-2
return [ return [
<Button onClick={handleClose}> <Button key="cancel" onClick={handleClose}>
{t('common.cancel')} {t('common.cancel')}
</Button>, </Button>,
<Button key="back" onClick={handleLastStep}> <Button key="back" onClick={handleLastStep}>
@@ -235,7 +239,7 @@ const UploadWorkflowModal = forwardRef<UploadWorkflowModalRef, UploadWorkflowMod
return ( return (
<RbModal <RbModal
title={t('application.importWorkflow')} title={t('application.importThirdParty')}
open={visible} open={visible}
onCancel={handleClose} onCancel={handleClose}
okText={t('application.nextStep')} okText={t('application.nextStep')}
@@ -262,7 +266,10 @@ const UploadWorkflowModal = forwardRef<UploadWorkflowModalRef, UploadWorkflowMod
platform: 'dify' platform: 'dify'
}} }}
> >
<Form.Item name="platform" label={t('application.platform')}> <Form.Item
name="platform" label={t('application.platform')}
rules={[{ required: true, message: t('common.pleaseSelect') }]}
>
<Select <Select
placeholder={t('common.pleaseSelect')} placeholder={t('common.pleaseSelect')}
options={['dify'].map(value => ({ options={['dify'].map(value => ({
@@ -270,16 +277,17 @@ const UploadWorkflowModal = forwardRef<UploadWorkflowModalRef, UploadWorkflowMod
}))} }))}
/> />
</Form.Item> </Form.Item>
<Form.Item name="file" valuePropName="fileList" noStyle> <Form.Item
name="file"
valuePropName="fileList"
noStyle
>
<UploadFiles <UploadFiles
isAutoUpload={false} isAutoUpload={false}
isCanDrag={true} isCanDrag={true}
fileSize={100} fileSize={100}
maxCount={1} maxCount={1}
fileType={['yml', 'yaml', 'zip', 'json']} fileType={['yml', 'yaml', 'zip', 'json']}
onChange={(fileList) => {
console.log('文件列表变化:', fileList);
}}
/> />
</Form.Item> </Form.Item>
</Form> </Form>

View File

@@ -2,7 +2,7 @@
* @Author: ZhaoYing * @Author: ZhaoYing
* @Date: 2026-02-03 16:34:12 * @Date: 2026-02-03 16:34:12
* @Last Modified by: ZhaoYing * @Last Modified by: ZhaoYing
* @Last Modified time: 2026-02-09 13:52:22 * @Last Modified time: 2026-03-02 17:48:51
*/ */
/** /**
* Application Management Page * Application Management Page
@@ -12,7 +12,7 @@
import React, { useState, useRef, useEffect } from 'react'; import React, { useState, useRef, useEffect } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Button, Row, Col, App, Select, Space } from 'antd'; import { Button, Row, Col, App, Select, Space, Dropdown } from 'antd';
import clsx from 'clsx'; import clsx from 'clsx';
import { DeleteOutlined } from '@ant-design/icons'; import { DeleteOutlined } from '@ant-design/icons';
import { useSearchParams } from 'react-router-dom' import { useSearchParams } from 'react-router-dom'
@@ -86,6 +86,13 @@ const ApplicationManagement: React.FC = () => {
const handleImport = () => { const handleImport = () => {
uploadWorkflowModalRef.current?.handleOpen() uploadWorkflowModalRef.current?.handleOpen()
} }
const handleClick = ({ key }: { key: string } ) => {
switch (key) {
case 'thirdParty':
handleImport()
break;
}
}
return ( return (
<> <>
<Row gutter={16} className="rb:mb-4"> <Row gutter={16} className="rb:mb-4">
@@ -111,9 +118,16 @@ const ApplicationManagement: React.FC = () => {
</Col> </Col>
<Col span={12} className="rb:text-right"> <Col span={12} className="rb:text-right">
<Space size={12}> <Space size={12}>
<Button onClick={handleImport}> <Dropdown
{t('application.importWorkflow')} menu={{ items: [
</Button> { key: 'thirdParty', label: t('application.importWorkflow') },
], onClick: handleClick }}
placement="bottomRight"
>
<Button>
{t('application.import')}
</Button>
</Dropdown>
<Button type="primary" onClick={handleCreate}> <Button type="primary" onClick={handleCreate}>
{t('application.createApplication')} {t('application.createApplication')}
</Button> </Button>