mirror of
https://github.com/tencentmusic/cube-studio.git
synced 2024-11-21 01:16:33 +08:00
修复前端部分bug
This commit is contained in:
parent
354d58806b
commit
bcaf169c8e
@ -106,8 +106,8 @@ cd myapp/vision && yarn && yarn build
|
||||
##### 环境准备
|
||||
|
||||
- https://nodejs.org/en/download/ 进入nodejs官网,选择下载LTS长期支持版本
|
||||
- 然后在官网下载安装好LTS版本之后,输入`npm install -g n`安装node版本管理器( https://www.npmjs.com/package/n ),最后输入`n 14.15.0`将node版本切换至14.x
|
||||
- https://github.com/nodejs/Release 这里可以找到14.x等往期版本
|
||||
- 然后在官网下载安装好LTS版本之后,输入`npm install -g n`安装node版本管理器( https://www.npmjs.com/package/n ),最后输入`n 16.15.0`将node版本切换至16.x
|
||||
- https://github.com/nodejs/Release 这里可以找到16.x等往期版本
|
||||
|
||||
|
||||
以主要前端项目`myapp/frontend`为例,到这里前端开发环境已经准备好了
|
||||
|
@ -355,6 +355,7 @@ const AppWrapper = (props: IProps) => {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="d-f ac plr16 h100">
|
||||
{
|
||||
headerConfig.map(config => {
|
||||
if (config.icon) {
|
||||
|
@ -8,6 +8,7 @@ import InputSearch from '../InputSearch/InputSearch';
|
||||
import 'moment/locale/zh-cn';
|
||||
import locale from 'antd/es/date-picker/locale/zh_CN';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import FileUploadPlus from '../FileUploadPlus/FileUploadPlus';
|
||||
|
||||
interface IProps {
|
||||
primaryKey?: string
|
||||
@ -51,7 +52,7 @@ export interface IDynamicFormConfigItem {
|
||||
data: Record<string, any>
|
||||
}
|
||||
|
||||
export type TDynamicFormType = 'input' | 'textArea' | 'select' | 'datePicker' | 'rangePicker' | 'radio' | 'checkout' | 'match-input' | 'input-select'
|
||||
export type TDynamicFormType = 'input' | 'textArea' | 'select' | 'datePicker' | 'rangePicker' | 'radio' | 'checkout' | 'match-input' | 'input-select' | 'fileUpload'
|
||||
|
||||
export function calculateId(strList: string[]): number {
|
||||
const str2Num = (str: string) => {
|
||||
@ -167,6 +168,20 @@ export default function DynamicForm(props: IProps) {
|
||||
setCurrent(current - 1);
|
||||
};
|
||||
|
||||
const renderFileUpload = (config: IDynamicFormConfigItem, itemProps: Record<string, any>) => {
|
||||
return <Form.Item
|
||||
key={`dynamicForm_${config.name}`}
|
||||
label={config.label}
|
||||
name={config.name}
|
||||
rules={config.rules}
|
||||
initialValue={config.defaultValue}
|
||||
extra={config.description ? <span dangerouslySetInnerHTML={{ __html: config.description }}></span> : null}
|
||||
{...itemProps}
|
||||
>
|
||||
<FileUploadPlus />
|
||||
</Form.Item>
|
||||
}
|
||||
|
||||
const renderInput = (config: IDynamicFormConfigItem, itemProps: Record<string, any>) => {
|
||||
// const rules: Rule[] = [
|
||||
// { required: config.required, message: `请输入${config.label}` },
|
||||
@ -424,6 +439,8 @@ export default function DynamicForm(props: IProps) {
|
||||
return renderRangePicker(item, itemProps)
|
||||
case 'radio':
|
||||
return renderRadio(item, itemProps)
|
||||
case 'fileUpload':
|
||||
return renderFileUpload(item, itemProps)
|
||||
default:
|
||||
return null
|
||||
}
|
||||
@ -550,10 +567,10 @@ export default function DynamicForm(props: IProps) {
|
||||
</div>
|
||||
</div>
|
||||
</> : <div style={{ width: 680 }}>
|
||||
{
|
||||
renderFormItem(currentConfig || [])
|
||||
}
|
||||
</div>
|
||||
{
|
||||
renderFormItem(currentConfig || [])
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</>
|
||||
)
|
||||
|
@ -0,0 +1,19 @@
|
||||
|
||||
.image-card{
|
||||
position: relative;
|
||||
width: 103px;
|
||||
height: 103px;
|
||||
border: 1px dashed #cdcdcd;
|
||||
.image-close{
|
||||
position: absolute;
|
||||
padding: 0 4px;
|
||||
right: 0;
|
||||
top: 0;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.file-uploader{
|
||||
width: auto;
|
||||
}
|
192
myapp/frontend/src/components/FileUploadPlus/FileUploadPlus.tsx
Normal file
192
myapp/frontend/src/components/FileUploadPlus/FileUploadPlus.tsx
Normal file
@ -0,0 +1,192 @@
|
||||
import { AudioOutlined, CloseOutlined, DeleteColumnOutlined, DeleteFilled, DeleteOutlined, InboxOutlined, LoadingOutlined, PlusOutlined, VideoCameraAddOutlined } from '@ant-design/icons';
|
||||
import { message } from 'antd';
|
||||
import Upload, { RcFile, UploadChangeParam } from 'antd/lib/upload';
|
||||
import { UploadFile } from 'antd/lib/upload/interface';
|
||||
import React, { useEffect, useState } from 'react'
|
||||
import './FileUploadPlus.less';
|
||||
|
||||
interface Iprops {
|
||||
type?: TFileType
|
||||
onChange?: (value: any) => void
|
||||
value?: string[]
|
||||
maxCount?: number
|
||||
maxSize?: number
|
||||
format?: string[]
|
||||
}
|
||||
|
||||
type TFileType = 'file' | 'video' | 'audio'
|
||||
|
||||
export default function FileUploadPlus(props: Iprops) {
|
||||
const [visableChangePhone, setVisableChangePhone] = useState(false);
|
||||
const [fileLoading, setFileLoading] = useState(false);
|
||||
const [imgUrl, setImgUrl] = useState('');
|
||||
const [imageList, setImageList] = useState<string[]>([])
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [fileList, setFileList] = useState<UploadFile[]>([])
|
||||
|
||||
// useEffect(() => {
|
||||
// setFileList(props.value || [])
|
||||
// }, [props.value])
|
||||
|
||||
function getBase64(img: any, callback: any) {
|
||||
const reader = new FileReader();
|
||||
reader.addEventListener('load', () => callback(reader.result));
|
||||
reader.readAsDataURL(img);
|
||||
}
|
||||
|
||||
function beforeUpload(file: RcFile) {
|
||||
console.log('file', file);
|
||||
|
||||
const maxCount = props.maxCount || 1
|
||||
if (fileList.length >= maxCount) {
|
||||
message.error('超出文件数量限制');
|
||||
return false
|
||||
}
|
||||
// 'image/jpeg' || 'video/mp4' || 'audio/mpeg'
|
||||
const isFormatOk = props.format?.includes(file.type);
|
||||
if (!isFormatOk) {
|
||||
message.error('文件格式错误');
|
||||
}
|
||||
const isLt2M = file.size < (props.maxSize || 2 * 1024 * 1024);
|
||||
if (!isLt2M) {
|
||||
message.error('文件大小限制');
|
||||
}
|
||||
return isFormatOk && isLt2M;
|
||||
}
|
||||
|
||||
const handleChange = (info: UploadChangeParam) => {
|
||||
console.log(info);
|
||||
|
||||
if (info.file.status === 'uploading') {
|
||||
setFileLoading(true);
|
||||
return;
|
||||
}
|
||||
if (info.file.status === 'done') {
|
||||
setFileLoading(false);
|
||||
setFileList(info.fileList)
|
||||
props.onChange && props.onChange(info.fileList)
|
||||
}
|
||||
if (info.file.status === "removed") {
|
||||
setFileList(info.fileList)
|
||||
props.onChange && props.onChange(info.fileList)
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
const file2Bin = (file?: RcFile) => {
|
||||
console.log('file2Bin', file);
|
||||
return new Promise((resolve, reject) => {
|
||||
if (file) {
|
||||
let name = file.name.replace(/.+\./, '');
|
||||
let filename = file.name;
|
||||
let reader = new FileReader();
|
||||
reader.readAsDataURL(file);
|
||||
reader.onload = () => {
|
||||
resolve(reader.result)
|
||||
}
|
||||
} else {
|
||||
reject(undefined)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
//建立一个可存取到该file的url
|
||||
function getObjectURL(file: any) {
|
||||
var url = null;
|
||||
if ((window as any).createObjectURL != undefined) { // basic
|
||||
url = (window as any).createObjectURL(file);
|
||||
} else if (window.URL != undefined) { // mozilla(firefox)
|
||||
url = window.URL.createObjectURL(file);
|
||||
} else if (window.webkitURL != undefined) { // webkit or chrome
|
||||
url = window.webkitURL.createObjectURL(file);
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
const createMediaPreview = (file: UploadFile<any>, fileIndex: number, type: TFileType) => {
|
||||
const url = getObjectURL(file)
|
||||
const key = Math.random().toString(36).substring(2);
|
||||
if (type === 'video') {
|
||||
return <div className="p-r" key={key}>
|
||||
<span
|
||||
onClick={() => {
|
||||
const currentFileList = [...fileList]
|
||||
currentFileList.splice(fileIndex, 1)
|
||||
setFileList(currentFileList)
|
||||
props.onChange && props.onChange(currentFileList)
|
||||
}}
|
||||
className="d-il p-a plr8 ptb2 bg-fail"
|
||||
style={{ top: 0, right: 0, borderBottomLeftRadius: 6, zIndex: 9 }}>
|
||||
<DeleteOutlined style={{ color: '#fff' }} />
|
||||
</span>
|
||||
<video className="w100 mb8" src={url} controls></video>
|
||||
</div>
|
||||
} else if (type === 'audio') {
|
||||
return <div className="d-f ac mb8" key={key}>
|
||||
<audio className="w100 flex1" src={url} controls></audio>
|
||||
<span
|
||||
onClick={() => {
|
||||
const currentFileList = [...fileList]
|
||||
currentFileList.splice(fileIndex, 1)
|
||||
setFileList(currentFileList)
|
||||
props.onChange && props.onChange(currentFileList)
|
||||
}}
|
||||
className="d-il plr8 ptb2 bg-fail"
|
||||
style={{ borderRadius: 6 }}>
|
||||
<DeleteOutlined style={{ color: '#fff' }} />
|
||||
</span>
|
||||
</div>
|
||||
}
|
||||
return file
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<div>
|
||||
{
|
||||
fileList.map((file, fileIndex) => {
|
||||
return createMediaPreview(file, fileIndex, props.type || 'file')
|
||||
})
|
||||
}
|
||||
</div>
|
||||
<Upload.Dragger
|
||||
// name="file"
|
||||
fileList={fileList}
|
||||
showUploadList={false}
|
||||
customRequest={(options) => {
|
||||
console.log(options.file);
|
||||
const tarList = [...fileList, options.file as RcFile]
|
||||
setFileList(tarList)
|
||||
|
||||
Promise.all(tarList.map((item: any) => file2Bin(item))).then(res => {
|
||||
console.log(res)
|
||||
props.onChange && props.onChange(res)
|
||||
})
|
||||
|
||||
// getBase64(options.file, (imageUrl: string) => {
|
||||
// // setImgUrl(imageUrl);
|
||||
// const tarList = [...imageList, imageUrl]
|
||||
// setImageList(tarList)
|
||||
// setFileLoading(false);
|
||||
// props.onChange && props.onChange(tarList)
|
||||
// });
|
||||
}}
|
||||
beforeUpload={beforeUpload}
|
||||
onChange={handleChange}
|
||||
>
|
||||
<p className="ant-upload-drag-icon">
|
||||
{
|
||||
(props.type === 'file' || !props.type) ? <InboxOutlined /> : null
|
||||
}
|
||||
{
|
||||
props.type === 'video' ? <VideoCameraAddOutlined /> : null
|
||||
}
|
||||
{
|
||||
props.type === 'audio' ? <AudioOutlined /> : null
|
||||
}
|
||||
</p>
|
||||
<p className="ant-upload-text">点击或拖拽文件上传</p>
|
||||
</Upload.Dragger>
|
||||
</>
|
||||
)
|
||||
}
|
219
myapp/frontend/src/locales/main.en.ts
Normal file
219
myapp/frontend/src/locales/main.en.ts
Normal file
@ -0,0 +1,219 @@
|
||||
const translation = {
|
||||
"节点标签": "node tag",
|
||||
"请选择key": "please select key",
|
||||
"请填写key": "please fill in key",
|
||||
"请填写value": "please fill in value",
|
||||
"请选择": "select ",
|
||||
"收起": "collapse",
|
||||
"展开": "expand",
|
||||
"查询": "query",
|
||||
"添加": "add ",
|
||||
"批量操作": "batch action",
|
||||
"操作": "action",
|
||||
"更多": "more",
|
||||
"详情": "detail",
|
||||
"修改": "edit",
|
||||
"删除": "delete",
|
||||
"批量": "batch ",
|
||||
"共": "total ",
|
||||
"条": " rows",
|
||||
"条/页": " rows/page",
|
||||
"批量导入数据": "import data",
|
||||
"批量导出": "export data",
|
||||
"注意:csv逗号分隔": "Note: csv comma-separated",
|
||||
"第一行为列的英文名": "the first line is the column’s English name",
|
||||
"下载导入模板": "download template",
|
||||
"暂无数据": "no data",
|
||||
"新查询": "new query",
|
||||
"运行": "run",
|
||||
"复制": "copy",
|
||||
"结果": "result",
|
||||
"子任务": "subtask",
|
||||
"重试": "retry",
|
||||
"准备开始": "begin",
|
||||
"解析": "analysis",
|
||||
"执行": "run",
|
||||
"输出结果": "output",
|
||||
"开始时间": "begin time",
|
||||
"运行时长": "runtime duration",
|
||||
"状态": "status",
|
||||
"下载": "download",
|
||||
"任务详情": "task detail",
|
||||
"子任务内容": "sub task sql",
|
||||
"任务信息": "task info",
|
||||
"关闭": "close",
|
||||
"下载结果": "download",
|
||||
"选择分隔符": "select delimiter",
|
||||
"正常模式": "normal",
|
||||
"智能模式": "AI",
|
||||
"AI智能生成": "AI Generation",
|
||||
"帮助链接": "help",
|
||||
"展开/关闭菜单": "collapse/expand",
|
||||
"保存": "save",
|
||||
"已保存": "saved",
|
||||
"未保存": "unsaved",
|
||||
"取消": "cancel",
|
||||
"确定": "confirm",
|
||||
"别名": "label",
|
||||
"节点别名": "node label",
|
||||
"描述": "describe",
|
||||
"创建人": "creator",
|
||||
"上次修改时间": "Last modified time",
|
||||
"调度实例": "workflow",
|
||||
"日志": "log",
|
||||
"容器": "pod",
|
||||
"定时记录": "cronjob",
|
||||
"删除节点": "delete",
|
||||
"监控": "monitor",
|
||||
"任务模板": "template",
|
||||
"模板描述": "describe",
|
||||
"名称": "name",
|
||||
"标签": "label",
|
||||
"内存申请": "memory req",
|
||||
"内存的资源使用限制,示例1G,10G, 最大100G,如需更多联系管理员": "Memory resource usage limit, example 1G, 10G, maximum 100G, contact administrator for more.",
|
||||
"CPU申请": "CPU req",
|
||||
"CPU的资源使用限制(单位核),示例 0.4,10,最大50核,如需更多联系管理员": "CPU resource usage limit (in units of cores), example 0.4, 10, maximum 50 cores, contact administrator for more.",
|
||||
"GPU申请": "GPU req",
|
||||
"gpu的资源使用限制(单位卡),示例:1,2,训练任务每个容器独占整卡。申请具体的卡型号,可以类似 1(V100),目前支持T4/V100/A100/VGPU": "GPU resource usage limit (in units of cards), example: 1, 2, training tasks occupy the entire card per container. To apply for specific card models, you can use something like 1(V100). Currently supports T4/V100/A100/VGPU.",
|
||||
"RDMA申请": "RDMA req",
|
||||
"RDMA的资源使用限制,示例 0,1,10,填写方式咨询管理员": "RDMA resource usage limit, example 0, 1, 10, consult administrator for filling method.",
|
||||
"超时中断": "timeout",
|
||||
"task运行时长限制,为0表示不限制(单位s)": "Task runtime limit, 0 means no limit (in seconds)",
|
||||
"重试次数": "retry",
|
||||
"task重试次数": "Task retry max count",
|
||||
"是否跳过": "skip",
|
||||
"是": "yes",
|
||||
"否": "no",
|
||||
"参数": "args ",
|
||||
"用户中心": "user info",
|
||||
"退出登录": "logout",
|
||||
"安全设置": "security",
|
||||
"用户列表": "user list",
|
||||
"角色列表": "role list",
|
||||
"用户统计": "user statistics",
|
||||
"权限列表": "permissions list",
|
||||
"视图列表": "view list",
|
||||
"权限视图关系": "permissionsOnView",
|
||||
"日志列表": "log list",
|
||||
"数据查询": "sqllab",
|
||||
"通用关系图": "pipeline",
|
||||
"数据展示": "showdata",
|
||||
"外链": "link",
|
||||
"登录": "login",
|
||||
"平台主要功能": "Main functions",
|
||||
"新建流水线": "create pipeline",
|
||||
"新手视频": "Beginner’s video",
|
||||
"新人制作一个pipeline": "Create a pipeline for new users.",
|
||||
"流水线": "pipeline",
|
||||
"我的": "mine",
|
||||
"协作": "collaboration",
|
||||
"任务流": "pipeline",
|
||||
"修改时间": "modified",
|
||||
"项目组": "project",
|
||||
"选择页数": "select page",
|
||||
"上一页": "previous",
|
||||
"下一页": "next",
|
||||
"创建会话场景": "create chat",
|
||||
"创建会话": "create chat",
|
||||
"对话模型": "chat model",
|
||||
"知识库": "knowledge",
|
||||
"确认创建": "confirm",
|
||||
"点击或者拖动文件到该区域上传数据集创建私有知识库": "click or drag the files to the area to upload the dataset to create a private knowledge base.",
|
||||
"支持 txt/markdown/pdf/csv 格式文件,请不要上传敏感数据": "supporting txt/markdown/pdf/csv formats, please do not upload sensitive data.",
|
||||
"清空当前会话场景": "clear the current conversation scene",
|
||||
"设置当前场景,如模型,知识库等": "set the current scene, such as a model or knowledge base.",
|
||||
"输入 / 调出提示(Shift + Enter = 换行)": "input / Prompt (Shift + Enter = New line)",
|
||||
"发送": "send",
|
||||
"登录超时,需要重新登录": "login timeout, need to log in again",
|
||||
"请输入": "please enter",
|
||||
"请按正确的规则输入": "please enter according to the correct rules",
|
||||
"请输入正确的长度": "please enter the correct length",
|
||||
"点击前往": "click to go",
|
||||
"请勿外传": "do not spread",
|
||||
"秒": "second",
|
||||
"分钟": "minute",
|
||||
"小时": "hour",
|
||||
"收藏": "favorite",
|
||||
"确定收藏?": "confirm favorite?",
|
||||
"确认收藏": "confirm favorite",
|
||||
"取消收藏": "cancel favorite",
|
||||
"确定取消收藏?": "confirm cancel favorite?",
|
||||
"确认取消收藏": "confirm cancel favorite",
|
||||
"操作成功": "operation successful",
|
||||
"操作失败": "operation failed",
|
||||
"用户没有修改权限": "user does not have modification permission",
|
||||
"确定删除": "confirm deletion",
|
||||
"确认删除": "confirm deletion",
|
||||
"确认": "confirm",
|
||||
"删除成功": "delete successful",
|
||||
"删除失败": "delete failed",
|
||||
"字段切换错误": "field switching error",
|
||||
"filter解析异常": "filter parsing exception",
|
||||
"请先选择": "please select first",
|
||||
"导入成功": "import successful",
|
||||
"导入失败": "import failed",
|
||||
"成功": "success",
|
||||
"失败": "failure",
|
||||
"更新": "update",
|
||||
"返回": "return",
|
||||
"确认导出数据": "confirm export data",
|
||||
"导出成功": "export successful",
|
||||
"等等": "etc.",
|
||||
"终止任务": "terminate task",
|
||||
"终止成功": "termination successful",
|
||||
"终止失败": "termination failed",
|
||||
"结果查看": "view results",
|
||||
"输入关键字(表名)搜索": "enter keyword (table name) to search",
|
||||
"已成功复制到粘贴板": "successfully copied to clipboard",
|
||||
"修改生命周期": "modify lifecycle",
|
||||
"聚合节点": "aggregation node",
|
||||
"剩余": "remaining",
|
||||
"个节点(双击展开) + ": "nodes (double-click to expand) +",
|
||||
"查询结果失败,尝试重新运行": "query result failed, try to run again",
|
||||
"标签数目达到限制": "tag limit reached",
|
||||
"点击确定完成提交": "click OK to complete the submission",
|
||||
"增加一项": "add an item",
|
||||
"上一步": "previous step",
|
||||
"下一步": "next step",
|
||||
"删除该项": "delete this item",
|
||||
"请选择时间范围": "please select a time range",
|
||||
"请选择时间": "please select a time",
|
||||
"刷新列表": "refresh list",
|
||||
"选择需要导出的列": "select the columns to export",
|
||||
"全选": "select all",
|
||||
"反选": "invert selection",
|
||||
"获取列表失败": "failed to get list",
|
||||
"获取流水线信息失败": "failed to get pipeline information",
|
||||
"格式错误": "format error",
|
||||
"流水线设置": "pipeline settings",
|
||||
"英文名(字母、数字、- 组成),最长50个字符": "english name (letters, numbers, -), up to 50 characters",
|
||||
"每个用户使用英文逗号分隔": "each user separated by an English comma",
|
||||
"报警人": "alarm person",
|
||||
"监控状态": "monitoring status",
|
||||
"周期任务的时间设定 * * * * * 表示为 minute hour day month week": "crontab task * * * * * represents minute hour day month week",
|
||||
"调度周期": "scheduling cycle",
|
||||
"调度类型": "scheduling type",
|
||||
"新建": "new",
|
||||
"任务": "task",
|
||||
"补录起点": "make up the starting point",
|
||||
"过往依赖": "past dependencies",
|
||||
"当前pipeline可同时运行的任务流实例数目": "the number of task flow instances that the current pipeline can run simultaneously",
|
||||
"最大激活运行数": "maximum active run count",
|
||||
"任务并行数": "task parallelism",
|
||||
"pipeline中可同时运行的task数目": "number of tasks that can run simultaneously in the pipeline",
|
||||
"流向图": "flow chart",
|
||||
"全局环境变量": "global environment variables",
|
||||
"为每个task都添加的公共参数": "common parameters added to each task",
|
||||
"折叠": "collapse",
|
||||
"暂无匹配": "No matches for now",
|
||||
"搜索模板名称或描述": "search template name or description",
|
||||
"配置文档": "configuration document",
|
||||
"镜像":"images",
|
||||
"版本": "version",
|
||||
"项目设置": "setting",
|
||||
"智能推荐下游节点":"Intelligent recommendation of downstream nodes",
|
||||
"请先选择推荐节点":"Please select the recommended node first.",
|
||||
"导出数据": "Export data"
|
||||
}
|
||||
|
||||
export default translation
|
219
myapp/frontend/src/locales/main.zh.ts
Normal file
219
myapp/frontend/src/locales/main.zh.ts
Normal file
@ -0,0 +1,219 @@
|
||||
const translation = {
|
||||
"节点标签": "节点标签",
|
||||
"请选择key": "请选择key",
|
||||
"请填写key": "请填写key",
|
||||
"请填写value": "请填写value",
|
||||
"请选择": "请选择",
|
||||
"收起": "收起",
|
||||
"展开": "展开",
|
||||
"查询": "查询",
|
||||
"添加": "添加",
|
||||
"批量操作": "批量操作",
|
||||
"操作": "操作",
|
||||
"更多": "更多",
|
||||
"详情": "详情",
|
||||
"修改": "修改",
|
||||
"删除": "删除",
|
||||
"批量": "批量",
|
||||
"共": "共",
|
||||
"条": "条",
|
||||
"条/页": "条/页",
|
||||
"批量导入数据": "批量导入数据",
|
||||
"批量导出": "批量导出",
|
||||
"注意:csv逗号分隔": "注意:csv逗号分隔",
|
||||
"第一行为列的英文名": "第一行为列的英文名",
|
||||
"下载导入模板": "下载导入模板",
|
||||
"暂无数据": "暂无数据",
|
||||
"新查询": "新查询",
|
||||
"运行": "运行",
|
||||
"复制": "复制",
|
||||
"结果": "结果",
|
||||
"子任务": "子任务",
|
||||
"重试": "重试",
|
||||
"准备开始": "准备开始",
|
||||
"解析": "解析",
|
||||
"执行": "执行",
|
||||
"输出结果": "输出结果",
|
||||
"开始时间": "开始时间",
|
||||
"运行时长": "运行时长",
|
||||
"状态": "状态",
|
||||
"下载": "下载",
|
||||
"任务详情": "任务详情",
|
||||
"子任务内容": "子任务内容",
|
||||
"任务信息": "任务信息",
|
||||
"关闭": "关闭",
|
||||
"下载结果": "下载结果",
|
||||
"选择分隔符": "选择分隔符",
|
||||
"正常模式": "正常模式",
|
||||
"智能模式": "智能模式",
|
||||
"AI智能生成": "AI智能生成",
|
||||
"帮助链接": "帮助链接",
|
||||
"展开/关闭菜单": "展开/关闭菜单",
|
||||
"保存": "保存",
|
||||
"已保存": "已保存",
|
||||
"未保存": "未保存",
|
||||
"取消": "取消",
|
||||
"确定": "确定",
|
||||
"别名": "别名",
|
||||
"节点别名": "节点别名",
|
||||
"描述": "描述",
|
||||
"创建人": "创建人",
|
||||
"上次修改时间": "上次修改时间",
|
||||
"调度实例": "调度实例",
|
||||
"日志": "日志",
|
||||
"容器": "容器",
|
||||
"定时记录": "定时记录",
|
||||
"删除节点": "删除节点",
|
||||
"监控": "监控",
|
||||
"任务模板": "任务模板",
|
||||
"模板描述": "模板描述",
|
||||
"名称": "名称",
|
||||
"标签": "标签",
|
||||
"内存申请": "内存申请",
|
||||
"内存的资源使用限制,示例1G,10G, 最大100G,如需更多联系管理员": "内存的资源使用限制,示例1G,10G, 最大100G,如需更多联系管理员",
|
||||
"CPU申请": "CPU申请",
|
||||
"CPU的资源使用限制(单位核),示例 0.4,10,最大50核,如需更多联系管理员": "CPU的资源使用限制(单位核),示例 0.4,10,最大50核,如需更多联系管理员",
|
||||
"GPU申请": "GPU申请",
|
||||
"gpu的资源使用限制(单位卡),示例:1,2,训练任务每个容器独占整卡。申请具体的卡型号,可以类似 1(V100),目前支持T4/V100/A100/VGPU": "gpu的资源使用限制(单位卡),示例:1,2,训练任务每个容器独占整卡。申请具体的卡型号,可以类似 1(V100),目前支持T4/V100/A100/VGPU",
|
||||
"RDMA申请": "RDMA申请",
|
||||
"RDMA的资源使用限制,示例 0,1,10,填写方式咨询管理员": "RDMA的资源使用限制,示例 0,1,10,填写方式咨询管理员",
|
||||
"超时中断": "超时中断",
|
||||
"task运行时长限制,为0表示不限制(单位s)": "task运行时长限制,为0表示不限制(单位s)",
|
||||
"重试次数": "重试次数",
|
||||
"task重试次数": "task重试次数",
|
||||
"是否跳过": "是否跳过",
|
||||
"是": "是",
|
||||
"否": "否",
|
||||
"参数": "参数",
|
||||
"用户中心": "用户中心",
|
||||
"退出登录": "退出登录",
|
||||
"安全设置": "安全设置",
|
||||
"用户列表": "用户列表",
|
||||
"角色列表": "角色列表",
|
||||
"用户统计": "用户统计",
|
||||
"权限列表": "权限列表",
|
||||
"视图列表": "视图列表",
|
||||
"权限视图关系": "权限视图关系",
|
||||
"日志列表": "日志列表",
|
||||
"数据查询": "数据查询",
|
||||
"通用关系图": "通用关系图",
|
||||
"数据展示": "数据展示",
|
||||
"外链": "外链",
|
||||
"登录": "登录",
|
||||
"平台主要功能": "平台主要功能",
|
||||
"新建流水线": "新建流水线",
|
||||
"新手视频": "新手视频",
|
||||
"新人制作一个pipeline": "新人制作一个pipeline",
|
||||
"流水线": "流水线",
|
||||
"我的": "我的",
|
||||
"协作": "协作",
|
||||
"任务流": "任务流",
|
||||
"修改时间": "修改时间",
|
||||
"项目组": "项目组",
|
||||
"选择页数": "选择页数",
|
||||
"上一页": "上一页",
|
||||
"下一页": "下一页",
|
||||
"创建会话场景": "创建会话场景",
|
||||
"创建会话": "创建会话",
|
||||
"对话模型": "对话模型",
|
||||
"知识库": "知识库",
|
||||
"确认创建": "确认创建",
|
||||
"点击或者拖动文件到该区域上传数据集创建私有知识库": "点击或者拖动文件到该区域上传数据集创建私有知识库",
|
||||
"支持 txt/markdown/pdf/csv 格式文件,请不要上传敏感数据": "支持 txt/markdown/pdf/csv 格式文件,请不要上传敏感数据",
|
||||
"清空当前会话场景": "清空当前会话场景",
|
||||
"设置当前场景,如模型,知识库等": "设置当前场景,如模型,知识库等",
|
||||
"输入 / 调出提示(Shift + Enter = 换行)": "输入 / 调出提示(Shift + Enter = 换行)",
|
||||
"发送": "发送",
|
||||
"登录超时,需要重新登录": "登录超时,需要重新登录",
|
||||
"请输入": "请输入",
|
||||
"请按正确的规则输入": "请按正确的规则输入",
|
||||
"请输入正确的长度": "请输入正确的长度",
|
||||
"点击前往": "点击前往",
|
||||
"请勿外传": "请勿外传",
|
||||
"秒": "秒",
|
||||
"分钟": "分钟",
|
||||
"小时": "小时",
|
||||
"收藏": "收藏",
|
||||
"确定收藏?": "确定收藏?",
|
||||
"确认收藏": "确认收藏",
|
||||
"取消收藏": "取消收藏",
|
||||
"确定取消收藏?": "确定取消收藏?",
|
||||
"确认取消收藏": "确认取消收藏",
|
||||
"操作成功": "操作成功",
|
||||
"操作失败": "操作失败",
|
||||
"用户没有修改权限": "用户没有修改权限",
|
||||
"确定删除": "确定删除",
|
||||
"确认删除": "确认删除",
|
||||
"确认": "确认",
|
||||
"删除成功": "删除成功",
|
||||
"删除失败": "删除失败",
|
||||
"字段切换错误": "字段切换错误",
|
||||
"filter解析异常": "filter解析异常",
|
||||
"请先选择": "请先选择",
|
||||
"导入成功": "导入成功",
|
||||
"导入失败": "导入失败",
|
||||
"成功": "成功",
|
||||
"失败": "失败",
|
||||
"更新": "更新",
|
||||
"返回": "返回",
|
||||
"确认导出数据": "确认导出数据",
|
||||
"导出成功": "导出成功",
|
||||
"等等": "等等",
|
||||
"终止任务": "终止任务",
|
||||
"终止成功": "终止成功",
|
||||
"终止失败": "终止失败",
|
||||
"结果查看": "结果查看",
|
||||
"输入关键字(表名)搜索": "输入关键字(表名)搜索",
|
||||
"已成功复制到粘贴板": "已成功复制到粘贴板",
|
||||
"修改生命周期": "修改生命周期",
|
||||
"聚合节点": "聚合节点",
|
||||
"剩余": "剩余",
|
||||
"个节点(双击展开) + ": "个节点(双击展开) + ",
|
||||
"查询结果失败,尝试重新运行": "查询结果失败,尝试重新运行",
|
||||
"标签数目达到限制": "标签数目达到限制",
|
||||
"点击确定完成提交": "点击确定完成提交",
|
||||
"增加一项": "增加一项",
|
||||
"上一步": "上一步",
|
||||
"下一步": "下一步",
|
||||
"删除该项": "删除该项",
|
||||
"请选择时间范围": "请选择时间范围",
|
||||
"请选择时间": "请选择时间",
|
||||
"刷新列表": "刷新列表",
|
||||
"选择需要导出的列": "选择需要导出的列",
|
||||
"全选": "全选",
|
||||
"反选": "反选",
|
||||
"获取列表失败": "获取列表失败",
|
||||
"获取流水线信息失败": "获取流水线信息失败",
|
||||
"格式错误": "格式错误",
|
||||
"流水线设置": "流水线设置",
|
||||
"英文名(字母、数字、- 组成),最长50个字符": "英文名(字母、数字、- 组成),最长50个字符",
|
||||
"每个用户使用英文逗号分隔": "每个用户使用英文逗号分隔",
|
||||
"报警人": "报警人",
|
||||
"监控状态": "监控状态",
|
||||
"周期任务的时间设定 * * * * * 表示为 minute hour day month week": "周期任务的时间设定 * * * * * 表示为 minute hour day month week",
|
||||
"调度周期": "调度周期",
|
||||
"调度类型": "调度类型",
|
||||
"新建": "新建",
|
||||
"任务": "任务",
|
||||
"补录起点": "补录起点",
|
||||
"过往依赖": "过往依赖",
|
||||
"当前pipeline可同时运行的任务流实例数目": "当前pipeline可同时运行的任务流实例数目",
|
||||
"最大激活运行数": "最大激活运行数",
|
||||
"任务并行数": "任务并行数",
|
||||
"pipeline中可同时运行的task数目": "pipeline中可同时运行的task数目",
|
||||
"流向图": "流向图",
|
||||
"全局环境变量": "全局环境变量",
|
||||
"为每个task都添加的公共参数": "为每个task都添加的公共参数",
|
||||
"折叠": "折叠",
|
||||
"暂无匹配": "暂无匹配",
|
||||
"搜索模板名称或描述": "搜索模板名称或描述",
|
||||
"配置文档": "配置文档",
|
||||
"镜像":"镜像",
|
||||
"版本": "版本",
|
||||
"项目设置": "项目设置",
|
||||
"智能推荐下游节点":"智能推荐下游节点",
|
||||
"请先选择推荐节点":"请先选择推荐节点",
|
||||
"导出数据": "导出数据"
|
||||
}
|
||||
|
||||
export default translation
|
@ -158,6 +158,9 @@ export default function TaskListManager(props?: IAppMenuItem) {
|
||||
if (type === 'select2') {
|
||||
type = 'select'
|
||||
}
|
||||
if (type === 'file') {
|
||||
type = 'fileUpload'
|
||||
}
|
||||
const label = item.label || label_columns[item.name]
|
||||
|
||||
// 校验规则
|
||||
@ -1142,7 +1145,7 @@ export default function TaskListManager(props?: IAppMenuItem) {
|
||||
},
|
||||
onCancel() { },
|
||||
});
|
||||
}}>批量导出 <ExportOutlined /></Button> : null
|
||||
}}>{t('批量导出')} <ExportOutlined /></Button> : null
|
||||
}
|
||||
|
||||
</div>}
|
||||
|
@ -37,7 +37,6 @@ export interface ILayoutConfig {
|
||||
"run-rtx": string,
|
||||
"save-time": string,
|
||||
"schedule_type": string,
|
||||
"upload-rtx": string,
|
||||
"workflow-name": string,
|
||||
"workflows.argoproj.io/completed": string,
|
||||
"workflows.argoproj.io/phase": string,
|
||||
|
Loading…
Reference in New Issue
Block a user