feat: 统一使用tableActionCard做为列表操作栏统一控件

develop
zhoux 2 years ago
parent 60228f360b
commit 7ec6df5540

@ -1,3 +1,11 @@
/*
* @Author: zhoux zhouxia@supervision.ltd
* @Date: 2023-11-13 14:19:57
* @LastEditors: zhoux zhouxia@supervision.ltd
* @LastEditTime: 2023-11-14 14:46:05
* @FilePath: \general-ai-platform-web\config\defaultForm.ts
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE2
*/
// 通用表单配置
@ -7,7 +15,8 @@ export const proFormCommonOptions: Record<string,any> = {
// normal 804
export const proFormModelWidth: number = 804;
export const proFormItemStyleProps: Record<string, any> = {
width: proFormModelWidth - 30,
width: proFormModelWidth - 30, // 一列
column2Width: (proFormModelWidth - 62)/2 , // 两列
};
// max 968

@ -1,21 +1,35 @@
/*
* @Author: zhoux zhouxia@supervision.ltd
* @Date: 2023-11-13 11:32:26
* @LastEditors: zhoux zhouxia@supervision.ltd
* @LastEditTime: 2023-11-14 16:20:49
* @FilePath: \general-ai-platform-web\config\defaultTable.ts
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { ProColumns } from "@ant-design/pro-components";
// 通用列表配置
export const proTableCommonOptions: Record<string,any> = {
scrollX: 'max-content', // 保证左右侧列的固定,并能保证没列标题不换行
scrollY: 500, // 保证列表高度固定
commscrollX: 1300,
commscrollY: 500, // 保证列表高度固定
searchLabelWidth: 'auto', // 整体对齐label根据实际字数自适应
}
// 默认索引列配置
export const proTableIndexColumnOptions : ProColumns = {
title: '序号',
dataIndex: 'index',
valueType: 'indexBorder', // 增加该属性以添加边框
fixed: 'left', // 将该列固定在左侧
width: 70,
align:'center'
// 操作栏位配置
export const proTableActionColumnOptions: Record<string,any> = {
dataIndex: 'option',
valueType: 'option',
align: 'center',
fixed: 'right',
}
// 默认索引列配置
// export const proTableIndexColumnOptions : ProColumns = {
// title: '序号',
// dataIndex: 'index',
// valueType: 'index', // 增加该属性以添加边框
// fixed: 'left', // 将该列固定在左侧
// width: 70,
// align:'center'
// }

@ -0,0 +1,56 @@
/*
* @Author: zhoux zhouxia@supervision.ltd
* @Date: 2023-11-14 15:49:36
* @LastEditors: zhoux zhouxia@supervision.ltd
* @LastEditTime: 2023-11-14 16:07:11
* @FilePath: \general-ai-platform-web\src\components\TableActionCard\index.tsx
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { DownOutlined } from '@ant-design/icons';
import { Dropdown } from 'antd';
import React from 'react';
//TODO 表单的操作按钮集合
type TableActionItemProps = {
renderActions: any[];
};
const TableActionCard: React.FC<TableActionItemProps> = (props) => {
const { renderActions } = props;
const maxActionCount = 3;
if (renderActions.length <= maxActionCount) {
return renderActions.map((item) => {
return <>{item}</>;
});
}
const prevActions: any[] = [];
const moreActions: { key: string; label: any }[] = [];
// eslint-disable-next-line array-callback-return
renderActions.map((item, index) => {
if (index < maxActionCount - 1) {
prevActions.push(item);
} else {
moreActions.push({
key: index + '',
label: item,
});
}
// eslint-disable-next-line react/jsx-key
});
return (
<>
{prevActions.map((item, index) => {
return <div key={index}>{item}</div>;
})}
<Dropdown menu={{ items: moreActions }}>
<a>
<DownOutlined />
</a>
</Dropdown>
</>
);
};
export default TableActionCard

@ -115,3 +115,28 @@ ol {
.ant-btn-link.ant-btn-dangerous {
color: #E80D0D;
}
.ant-menu-light .ant-menu-item-selected,
.ant-menu-light > .ant-menu .ant-menu-item-selected {
background-color: rgba(21, 91, 212, 0.1);
}
/* 表单 */
.ant-form-item {
margin-bottom: 16px;
}
.ant-steps .ant-steps-item-finish .ant-steps-item-icon {
background-color: rgba(21, 91, 212, 0.1);
border-color: #155BD4;
}
.flex-cc {
display: flex;
align-items: center;
justify-content: center;
}
.flex-ac {
display: flex;
align-items: center;
justify-content: space-around;
}
.w100 {
width: 100%;
}

@ -84,6 +84,7 @@ ol {
.ant-table-cell .ant-btn.ant-btn-sm{
padding: 0;
}
// 更多
.ant-pro-table-search .ant-form-item .ant-form-item-label{
text-align: left
}
@ -139,3 +140,36 @@ ol {
color: #E80D0D;
}
.ant-menu-light .ant-menu-item-selected, .ant-menu-light>.ant-menu .ant-menu-item-selected {
// color: red;
background-color: rgba(#155BD4, 0.1);
}
/* 表单 */
.ant-form-item {
margin-bottom: 16px;
}
// 分步表单步骤条
.ant-steps .ant-steps-item-finish .ant-steps-item-icon{
background-color: rgba(#155BD4, 0.1);
border-color: #155BD4;
}
// .gn .ant-steps-item-finish .ant-steps-item-icon
.flex-cc{
display: flex;
align-items: center;
justify-content: center;
}
.flex-ac{
display: flex;
align-items: center;
justify-content: space-around;
}
.w100{
width: 100%;
}

@ -2,7 +2,7 @@
* @Author: zhoux zhouxia@supervision.ltd
* @Date: 2023-11-01 13:56:33
* @LastEditors: zhoux zhouxia@supervision.ltd
* @LastEditTime: 2023-11-13 13:43:47
* @LastEditTime: 2023-11-14 14:59:00
* @FilePath: \general-ai-platform-web\src\locales\zh-CN\resource.ts
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@ -16,6 +16,8 @@ export const algorithm_model: { [key: string]: string } = {
'resource.algorithm_model.table.list.updateTime': '更新时间',
'resource.algorithm_model.table.rule.required.name': '模型名称为必填项',
'resource.algorithm_model.table.rule.required.categoryFkId': '模型类别为必填项',
'resource.algorithm_model.table.list.add': '新建模型',
'resource.algorithm_model.table.list.update': '更新模型',
};
export const business_image: { [key: string]: string } = {
'resource.business_image.table.list.id': 'ID',
@ -32,6 +34,8 @@ export const business_image: { [key: string]: string } = {
'resource.business_image.table.rule.required.name': '镜像名称为必填项',
'resource.business_image.table.rule.required.version': '镜像版本为必填项',
'resource.business_image.table.rule.required.projectFkId': '项目为必填项',
'resource.business_image.table.list.add': '新建业务镜像',
'resource.business_image.table.list.update': '更新业务镜像',
};
export const model_category: { [key: string]: string } = {
'resource.model_category.table.list.id': 'ID',
@ -44,8 +48,6 @@ export const model_category: { [key: string]: string } = {
'resource.model_category.table.rule.required.code': '类别代码为必填项',
'resource.model_category.table.list.add': '新建模型类别',
'resource.model_category.table.list.update': '更新模型类别',
};
export const model_image: { [key: string]: string } = {
'resource.model_image.table.list.id': 'ID',
@ -72,4 +74,6 @@ export const model_version: { [key: string]: string } = {
'resource.model_version.table.list.updateTime': '更新时间',
'resource.model_version.table.rule.required.modelFkId': '模型为必填项',
'resource.model_version.table.rule.required.path': '模型地址为必填项',
'resource.model_version.table.list.add': '新建模型版本',
'resource.model_version.table.list.update': '更新模型版本',
};

@ -60,8 +60,6 @@ const waitTime = (time: number = 100) => {
/**styles 配置 */
const MyCreateForm: React.FC<CreateFormProps> = (props) => {
const [treeData, setTreeData] = React.useState<DataNode[]>([]);
const [modalData, setModalData] = useState<RecordType[]>([]);
@ -146,376 +144,391 @@ const MyCreateForm: React.FC<CreateFormProps> = (props) => {
});
};
return (
<StepsForm<{
name: string;
}>
stepsProps={{
labelPlacement: 'vertical',
}}
current={current}
onCurrentChange={setCurrent}
onFinish={async () => {
setFileList([]);
let formData = formRef.current?.getFieldsValue();
if (formData?.name) {
formData.inferConfig = { models: targetKeys, params: configData?.params || [] };
formData.groupIds = selectKeys;
formData.projectFilePath = filePath;
postProjectCreateProject(formData)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.handleModal();
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
return false;
});
}
return true;
}}
formProps={{
validateMessages: {
required: '此项为必填项',
},
}}
stepsFormRender={(dom, submitter) => {
return (
<Modal
title="分步表单"
width={803}
onCancel={() => {
setCurrent(0);
setFileList([]);
formRef.current?.resetFields();
formRef3.current?.resetFields();
props.handleModal();
}}
open={props.createModalOpen}
footer={submitter}
destroyOnClose
>
{dom}
</Modal>
);
}}
>
{/* 创建项目数据 */}
<StepsForm.StepForm<{
<div className="gn">
<StepsForm<{
name: string;
}>
name="base"
formRef={formRef}
title="创建项目数据"
stepProps={{
description: '这里填入项目基本信息',
}}
onFinish={async () => {
// setFormData(formRef.current?.getFieldsValue());
await waitTime(500);
return true;
}}
>
<ProForm.Group>
<ProFormText
{...proFormItemStyleProps}
name="name"
label={<FormattedMessage id="project.project.table.list.name" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'project.project.table.list.name',
defaultMessage: '$$$',
})}`}
required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="project.project.table.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
/>
<ProFormText
width={680}
name="code"
label={<FormattedMessage id="project.project.table.list.code" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'project.project.table.list.code',
defaultMessage: '$$$',
})}`}
required={!isAuto}
initialValue=""
disabled={isAuto}
rules={
isAuto
? []
: [
{
required: true,
message: (
<FormattedMessage
id="project.project.table.rule.required.code"
defaultMessage="code is required"
/>
),
},
]
}
addonAfter={
<Switch
checked={isAuto}
checkedChildren={<FormattedMessage id="common.auto" defaultMessage="$$$" />}
unCheckedChildren={<FormattedMessage id="common.edit" defaultMessage="$$$" />}
onChange={setIsAuto}
/>
}
/>
<ProFormText
{...proFormItemStyleProps}
name="info"
label={<FormattedMessage id="project.project.table.list.info" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'project.project.table.list.info',
defaultMessage: '$$$',
})}`}
required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="project.project.table.rule.required.info"
defaultMessage="info is required"
/>
),
},
]}
/>
<ProFormText
{...proFormItemStyleProps}
name="remark"
label={<FormattedMessage id="project.project.table.list.remark" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'project.project.table.list.remark',
defaultMessage: '$$$',
})}`}
required={false}
/>
</ProForm.Group>
<ProForm.Group>
<ProFormSwitch
width="lg"
name="isEnable"
label={
<FormattedMessage id="project.project.table.list.isEnable" defaultMessage="$$$" />
}
initialValue={true}
/>
</ProForm.Group>
</StepsForm.StepForm>
{/* 关联算法模型 */}
<StepsForm.StepForm<{
model: string;
}>
name="model"
title="关联算法模型"
stepProps={{
description: '选择算法模型',
stepsProps={{
labelPlacement: 'vertical',
}}
current={current}
onCurrentChange={setCurrent}
onFinish={async () => {
return true;
}}
>
<Transfer
dataSource={modalData}
showSearch
titles={['未选模型', '已选模型']}
locale={{ itemUnit: '项', itemsUnit: '项', searchPlaceholder: '请输入搜索内容' }}
targetKeys={targetKeys}
onChange={handleChange}
onSearch={handleSearch}
style={{ marginBottom: '20px' }}
listStyle={{ width: 289, height: 300 }}
operationStyle={{ width: 100, alignItems: 'center' }}
render={(item) => item.title}
/>
</StepsForm.StepForm>
{/* 上传业务代码 */}
<StepsForm.StepForm<{
project_file: string;
}>
name="project_file"
title="上传业务代码"
style={{ width: proFormItemStyleProps.width }}
stepProps={{
description: '上传业务代码格式为(.zip,.tar.gz)',
}}
onFinish={async (values: any) => {
if ('projectFilePath' in values && values['projectFilePath'].length > 0) {
let projectFilePath = values['projectFilePath'][0]?.response?.data?.path || '';
setFilePath(projectFilePath);
setFileList([]);
let formData = formRef.current?.getFieldsValue();
if (formData?.name) {
formData.inferConfig = { models: targetKeys, params: configData?.params || [] };
formData.groupIds = selectKeys;
formData.projectFilePath = filePath;
postProjectCreateProject(formData)
.then(() => {
message.success(
intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }),
);
props.handleModal();
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
return false;
});
}
return true;
}}
>
<ProFormUploadDragger
label="上传文件"
name="projectFilePath"
action="/api/v1/file/uploadFile"
max={1}
fieldProps={{
name: 'file',
beforeUpload: beforeUploadFile,
data: { path: 'project/files' },
headers: {
'X-CSRFToken': cookie.load('csrftoken'),
Authorization: `Bearer ${localStorage.getItem('access') || ''}`,
},
}}
/>
</StepsForm.StepForm>
{/* 业务参数配置 */}
<StepsForm.StepForm<{
config: string;
}>
name="config"
title="业务参数配置"
stepProps={{
description: '业务参数配置',
formProps={{
validateMessages: {
required: '此项为必填项',
},
}}
onFinish={async (values: any) => {
setConfigData(values);
return true;
stepsFormRender={(dom, submitter) => {
return (
<Modal
title="分步表单"
width={803}
onCancel={() => {
setCurrent(0);
setFileList([]);
formRef.current?.resetFields();
formRef3.current?.resetFields();
props.handleModal();
}}
open={props.createModalOpen}
footer={submitter}
destroyOnClose
>
{dom}
</Modal>
);
}}
>
{/* <Icon type="delete" /> */}
{/* TODO 图标需要替换 */}
<ProFormUploadDragger
max={1}
label="配置文件上传"
value={fileList}
name="dragger"
fieldProps={{
onChange: handleFileChange,
onRemove: () => {
let index_ids = actionFormListRef.current?.getList()?.map((v, i) => {
return i;
});
actionFormListRef.current?.remove(index_ids || []);
},
beforeUpload: (file, fileList) => {
if (
!file.name.endsWith('.yaml') &&
!file.name.endsWith('.yml') &&
!file.name.endsWith('.json')
) {
message.error('请上传yaml或json文件').then(() => {});
return false;
} else {
let parsedData = {};
file
.text()
.then((text) => {
if (file.name.endsWith('.yaml') || file.name.endsWith('.yml')) {
parsedData = yaml.load(text) as Record<string, unknown>;
}
if (file.name.endsWith('.json')) {
parsedData = JSON.parse(text) as Record<string, unknown>;
}
if (Object.keys(parsedData).length > 0) {
dataFormListRef.current = Object.entries(parsedData).map(([key, value]) => ({
name: key,
default: value,
}));
dataFormListRef.current.forEach((v: any, i: number) => {
actionFormListRef.current?.add(v, i);
});
}
return true;
})
.catch(() => {
return false;
});
{/* 创建项目数据 */}
<StepsForm.StepForm<{
name: string;
}>
name="base"
formRef={formRef}
title="创建项目数据"
stepProps={{
description: '这里填入项目基本信息',
}}
onFinish={async () => {
// setFormData(formRef.current?.getFieldsValue());
await waitTime(500);
return true;
}}
>
<ProForm.Group>
<ProFormText
{...proFormItemStyleProps}
name="name"
label={<FormattedMessage id="project.project.table.list.name" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'project.project.table.list.name',
defaultMessage: '$$$',
})}`}
required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="project.project.table.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
/>
<ProFormText
width={680}
name="code"
label={<FormattedMessage id="project.project.table.list.code" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'project.project.table.list.code',
defaultMessage: '$$$',
})}`}
required={!isAuto}
initialValue=""
disabled={isAuto}
rules={
isAuto
? []
: [
{
required: true,
message: (
<FormattedMessage
id="project.project.table.rule.required.code"
defaultMessage="code is required"
/>
),
},
]
}
addonAfter={
<Switch
checked={isAuto}
checkedChildren={<FormattedMessage id="common.auto" defaultMessage="$$$" />}
unCheckedChildren={<FormattedMessage id="common.edit" defaultMessage="$$$" />}
onChange={setIsAuto}
/>
}
/>
<ProFormText
{...proFormItemStyleProps}
name="info"
label={<FormattedMessage id="project.project.table.list.info" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'project.project.table.list.info',
defaultMessage: '$$$',
})}`}
required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="project.project.table.rule.required.info"
defaultMessage="info is required"
/>
),
},
]}
/>
<ProFormText
{...proFormItemStyleProps}
name="remark"
label={
<FormattedMessage id="project.project.table.list.remark" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'project.project.table.list.remark',
defaultMessage: '$$$',
})}`}
required={false}
/>
</ProForm.Group>
<ProForm.Group>
<ProFormSwitch
width="lg"
name="isEnable"
label={
<FormattedMessage id="project.project.table.list.isEnable" defaultMessage="$$$" />
}
},
initialValue={true}
/>
</ProForm.Group>
</StepsForm.StepForm>
{/* 关联算法模型 */}
<StepsForm.StepForm<{
model: string;
}>
name="model"
title="关联算法模型"
stepProps={{
description: '选择算法模型',
}}
/>
<ProFormList
onFinish={async () => {
return true;
}}
>
<Transfer
dataSource={modalData}
showSearch
titles={['未选模型', '已选模型']}
locale={{ itemUnit: '项', itemsUnit: '项', searchPlaceholder: '请输入搜索内容' }}
targetKeys={targetKeys}
onChange={handleChange}
onSearch={handleSearch}
style={{ marginBottom: '20px' }}
listStyle={{ width: 289, height: 300 }}
operationStyle={{ width: 100, alignItems: 'center' }}
render={(item) => item.title}
/>
</StepsForm.StepForm>
{/* 上传业务代码 */}
<StepsForm.StepForm<{
project_file: string;
}>
name="project_file"
title="上传业务代码"
style={{ width: proFormItemStyleProps.width }}
actionRef={actionFormListRef}
copyIconProps={{
Icon: SnippetsOutlined,
stepProps={{
description: '上传业务代码格式为(.zip,.tar.gz)',
}}
deleteIconProps={{
Icon: CloseOutlined,
onFinish={async (values: any) => {
if ('projectFilePath' in values && values['projectFilePath'].length > 0) {
let projectFilePath = values['projectFilePath'][0]?.response?.data?.path || '';
setFilePath(projectFilePath);
}
return true;
}}
name="params"
label="模型参数"
>
{(f, index, action) => {
return (
<ProCard style={{padding: 0, margin: 0}} bodyStyle={{padding: 0, margin: 0 }}>
<ProCard style={{padding: 0, margin: 0}} bodyStyle={{padding: 0, marginRight: 10}}>
<ProFormText key="name" name="name" label="键名" />
</ProCard>
<ProCard style={{padding: 0, margin: 0}} bodyStyle={{padding: 0, marginRight: 10}}>
<ProFormText key="default" name="default" label="默认值" />
<ProFormUploadDragger
label="上传文件"
name="projectFilePath"
action="/api/v1/file/uploadFile"
max={1}
fieldProps={{
name: 'file',
beforeUpload: beforeUploadFile,
data: { path: 'project/files' },
headers: {
'X-CSRFToken': cookie.load('csrftoken'),
Authorization: `Bearer ${localStorage.getItem('access') || ''}`,
},
}}
/>
</StepsForm.StepForm>
{/* 业务参数配置 */}
<StepsForm.StepForm<{
config: string;
}>
name="config"
title="业务参数配置"
stepProps={{
description: '业务参数配置',
}}
onFinish={async (values: any) => {
setConfigData(values);
return true;
}}
>
{/* <Icon type="delete" /> */}
{/* TODO 图标需要替换 */}
<ProFormUploadDragger
max={1}
label="配置文件上传"
value={fileList}
name="dragger"
fieldProps={{
onChange: handleFileChange,
onRemove: () => {
let index_ids = actionFormListRef.current?.getList()?.map((v, i) => {
return i;
});
actionFormListRef.current?.remove(index_ids || []);
},
beforeUpload: (file, fileList) => {
if (
!file.name.endsWith('.yaml') &&
!file.name.endsWith('.yml') &&
!file.name.endsWith('.json')
) {
message.error('请上传yaml或json文件').then(() => {});
return false;
} else {
let parsedData = {};
file
.text()
.then((text) => {
if (file.name.endsWith('.yaml') || file.name.endsWith('.yml')) {
parsedData = yaml.load(text) as Record<string, unknown>;
}
if (file.name.endsWith('.json')) {
parsedData = JSON.parse(text) as Record<string, unknown>;
}
if (Object.keys(parsedData).length > 0) {
dataFormListRef.current = Object.entries(parsedData).map(
([key, value]) => ({
name: key,
default: value,
}),
);
dataFormListRef.current.forEach((v: any, i: number) => {
actionFormListRef.current?.add(v, i);
});
}
return true;
})
.catch(() => {
return false;
});
}
},
}}
/>
<ProFormList
style={{ width: proFormItemStyleProps.width }}
actionRef={actionFormListRef}
copyIconProps={{
Icon: SnippetsOutlined,
}}
deleteIconProps={{
Icon: CloseOutlined,
}}
name="params"
label="模型参数"
>
{(f, index, action) => {
return (
<ProCard style={{ padding: 0, margin: 0 }} bodyStyle={{ padding: 0, margin: 0 }}>
<ProCard
style={{ padding: 0, margin: 0 }}
bodyStyle={{ padding: 0, marginRight: 10 }}
>
<ProFormText key="name" name="name" label="键名" />
</ProCard>
<ProCard
style={{ padding: 0, margin: 0 }}
bodyStyle={{ padding: 0, marginRight: 10 }}
>
<ProFormText key="default" name="default" label="默认值" />
</ProCard>
</ProCard>
</ProCard>
);
);
}}
</ProFormList>
</StepsForm.StepForm>
{/* 关联网点 */}
<StepsForm.StepForm<{
group: string;
}>
name="group"
title="关联网点"
stepProps={{
description: '选择网点',
}}
</ProFormList>
</StepsForm.StepForm>
{/* 关联网点 */}
<StepsForm.StepForm<{
group: string;
}>
name="group"
title="关联网点"
stepProps={{
description: '选择网点',
}}
onFinish={async () => {
return true;
}}
style={{ width: proFormItemStyleProps.width }}
formRef={formRef3}
>
<div style={{ paddingBottom: 10 }}>{'选择网点'}</div>
<Tree
checkable
defaultExpandAll={true}
defaultCheckedKeys={[]}
autoExpandParent={true}
onCheck={(checkedKeys: any) => {
// form.setFieldsValue({menuIds: checkedKeys})
setSelectKeys(checkedKeys);
// formRef3.current?.setFieldValue('groupIds', checkedKeys)
onFinish={async () => {
return true;
}}
treeData={treeData}
// loadData={({treeNode}) => {
// return treeData
// }}
/>
</StepsForm.StepForm>
</StepsForm>
style={{ width: proFormItemStyleProps.width }}
formRef={formRef3}
>
<div style={{ paddingBottom: 10, fontWeight: 700 }}>{'选择网点'}</div>
<Tree
checkable
defaultExpandAll={true}
defaultCheckedKeys={[]}
autoExpandParent={true}
onCheck={(checkedKeys: any) => {
// form.setFieldsValue({menuIds: checkedKeys})
setSelectKeys(checkedKeys);
// formRef3.current?.setFieldValue('groupIds', checkedKeys)
}}
treeData={treeData}
// loadData={({treeNode}) => {
// return treeData
// }}
/>
</StepsForm.StepForm>
</StepsForm>
</div>
);
};
export default MyCreateForm;

@ -2,7 +2,7 @@
* @Author: zhoux zhouxia@supervision.ltd
* @Date: 2023-11-01 13:56:33
* @LastEditors: zhoux zhouxia@supervision.ltd
* @LastEditTime: 2023-11-02 14:01:29
* @LastEditTime: 2023-11-14 14:57:12
* @FilePath: \general-ai-platform-web\src\pages\Resource\AlgorithmModelList\components\CreateForm.tsx
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@ -12,6 +12,7 @@ import { ModalForm, ProForm, ProFormSelect, ProFormText } from '@ant-design/pro-
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import React from 'react';
import { proFormItemStyleProps, proFormModelWidth } from '../../../../../config/defaultForm';
export type FormValueType = {
target?: string;
template?: string;
@ -32,8 +33,9 @@ const CreateForm: React.FC<CreateFormProps> = (props) => {
return (
<ModalForm<API.AlgorithmModel>
width={proFormModelWidth}
title={intl.formatMessage({
id: 'common.modal.table.create.title',
id: 'resource.algorithm_model.table.list.add',
defaultMessage: '$$$',
})}
open={props.createModalOpen}
@ -59,7 +61,7 @@ const CreateForm: React.FC<CreateFormProps> = (props) => {
>
<ProForm.Group>
<ProFormText
width="lg"
width={proFormItemStyleProps.width}
name="name"
label={
<FormattedMessage id="resource.algorithm_model.table.list.name" defaultMessage="$$$" />
@ -85,7 +87,7 @@ const CreateForm: React.FC<CreateFormProps> = (props) => {
]}
/>
<ProFormSelect
width="lg"
width={proFormItemStyleProps.width}
name="categoryFkId"
label={
<FormattedMessage
@ -116,7 +118,7 @@ const CreateForm: React.FC<CreateFormProps> = (props) => {
}}
/>
<ProFormText
width="lg"
width={proFormItemStyleProps.width}
name="remark"
label={
<FormattedMessage

@ -1,32 +1,37 @@
import {ModalForm,ProForm} from '@ant-design/pro-components';import {ProFormText} from '@ant-design/pro-components';import {ProFormSelect} from '@ant-design/pro-components';import {ProFormDateTimePicker} from '@ant-design/pro-components';
import {FormattedMessage, useIntl} from '@umijs/max';
import {postModelCategoryGetModelCategoryFkSelect} from "@/services/resource/ModelCategory";
import {putAlgorithmModelUpdateAlgorithmModel} from "@/services/resource/AlgorithmModel";
import React, {useState} from 'react';
import {Button, Form, message} from 'antd';
import { putAlgorithmModelUpdateAlgorithmModel } from '@/services/resource/AlgorithmModel';
import { postModelCategoryGetModelCategoryFkSelect } from '@/services/resource/ModelCategory';
import {
ModalForm,
ProForm,
ProFormDateTimePicker,
ProFormSelect,
ProFormText,
} from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import React from 'react';
export type FormValueType = {
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.AlgorithmModel>;
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.AlgorithmModel>;
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.AlgorithmModel>;
reload: any;
};
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.AlgorithmModel>;
reload: any;
};
const UpdateForm: React.FC<UpdateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.AlgorithmModel>();
return (
<ModalForm<API.AlgorithmModel>
title={intl.formatMessage({
id: 'common.modal.table.update.title',
id: 'resource.algorithm_model.table.list.update',
defaultMessage: '$$$',
})}
open={props.updateModalOpen}
@ -38,46 +43,149 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
}}
submitTimeout={2000}
onFinish={async (values) => {
putAlgorithmModelUpdateAlgorithmModel(values).then(()=>{
message.success(intl.formatMessage({id: 'common.success', defaultMessage: '$$$'}))
props.reload()
}).catch(()=>{
message.error(intl.formatMessage({id: 'common.failure', defaultMessage: '$$$'}))
})
putAlgorithmModelUpdateAlgorithmModel(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
props.handleModal();
return true;
}}
>
<ProForm.Group>
<ProFormText width="md" name="id" label="id" disabled={true} initialValue={props.values.id}/>
<ProFormText width="md" name="name" label={<FormattedMessage id="resource.algorithm_model.table.list.name" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.algorithm_model.table.list.name', defaultMessage: '$$$'})}`} required={true} initialValue={props.values.name} disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.algorithm_model.table.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
<ProForm.Group>
<ProFormText
width="md"
name="id"
label="id"
disabled={true}
initialValue={props.values.id}
/>
<ProFormText
width="md"
name="name"
label={
<FormattedMessage id="resource.algorithm_model.table.list.name" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.algorithm_model.table.list.name',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.name}
disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.algorithm_model.table.rule.required.name"
defaultMessage="name is required"
/>
<ProFormSelect width="md" name="categoryFkId" label={<FormattedMessage id="resource.algorithm_model.table.list.categoryFkId" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.algorithm_model.table.list.categoryFkId', defaultMessage: '$$$'})}`} required={true} initialValue={props.values.categoryFkId} showSearch debounceTime={1000} request={async (keyWord)=>{
const resp = await postModelCategoryGetModelCategoryFkSelect({keyword: keyWord?.keyWords || ''})
return resp.data.list.map((v: any)=>{
return {
label: v.name,
value: v.id
}
})
}
}/>
<ProFormText width="md" name="remark" label={<FormattedMessage id="resource.algorithm_model.table.list.remark" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.algorithm_model.table.list.remark', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.remark} disabled={false}/>
<ProFormDateTimePicker width="md" name="createTime" label={<FormattedMessage id="resource.algorithm_model.table.list.createTime" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.algorithm_model.table.list.createTime', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.createTime} disabled={true}/>
<ProFormDateTimePicker width="md" name="updateTime" label={<FormattedMessage id="resource.algorithm_model.table.list.updateTime" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.algorithm_model.table.list.updateTime', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.updateTime} disabled={true}/>
</ProForm.Group>
</ModalForm>)}
),
},
]}
/>
<ProFormSelect
width="md"
name="categoryFkId"
label={
<FormattedMessage
id="resource.algorithm_model.table.list.categoryFkId"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.algorithm_model.table.list.categoryFkId',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.categoryFkId}
showSearch
debounceTime={1000}
request={async (keyWord) => {
const resp = await postModelCategoryGetModelCategoryFkSelect({
keyword: keyWord?.keyWords || '',
});
return resp.data.list.map((v: any) => {
return {
label: v.name,
value: v.id,
};
});
}}
/>
<ProFormText
width="md"
name="remark"
label={
<FormattedMessage
id="resource.algorithm_model.table.list.remark"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.algorithm_model.table.list.remark',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.remark}
disabled={false}
/>
<ProFormDateTimePicker
width="md"
name="createTime"
label={
<FormattedMessage
id="resource.algorithm_model.table.list.createTime"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.algorithm_model.table.list.createTime',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.createTime}
disabled={true}
/>
<ProFormDateTimePicker
width="md"
name="updateTime"
label={
<FormattedMessage
id="resource.algorithm_model.table.list.updateTime"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.algorithm_model.table.list.updateTime',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.updateTime}
disabled={true}
/>
</ProForm.Group>
</ModalForm>
);
};
export default UpdateForm;

@ -1,3 +1,4 @@
import TableActionCard from '@/components/TableActionCard';
import { ColumnDrawer as ModelCategoryColumnDrawer } from '@/pages/Resource/ModelCategoryList/components/ColumnDrawer';
import { ModelCategoryColumns } from '@/pages/Resource/ModelCategoryList/components/Columns';
import {
@ -12,13 +13,16 @@ import {
} from '@/services/resource/ModelCategory';
import { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons';
import type { ActionType, ProColumns } from '@ant-design/pro-components';
import { PageContainer, ProFormSelect, ProFormText, ProTable } from '@ant-design/pro-components';
import { PageContainer, ProFormSelect, ProTable } from '@ant-design/pro-components';
import { Access, FormattedMessage, history, useAccess, useIntl } from '@umijs/max';
import { Button, Modal, Popconfirm, message } from 'antd';
import React, { useRef, useState } from 'react';
import { proTableCommonOptions, proTableIndexColumnOptions } from '../../../../config/defaultTable';
import { proTableCommonOptions } from '../../../../config/defaultTable';
import CreateForm from './components/CreateForm';
import UpdateForm from './components/UpdateForm';
// import TablePaginationCard, { TablePaginationCardProps } from '@/components/TablePaginationCard';
const AlgorithmModelList: React.FC = () => {
/**
@ -117,7 +121,13 @@ const AlgorithmModelList: React.FC = () => {
const columns: ProColumns<API.AlgorithmModel>[] = [
{
...proTableIndexColumnOptions,
title: (
<FormattedMessage id="resource.algorithm_model.table.list.name" defaultMessage="$$$" />
),
dataIndex: 'name',
hideInSearch: true,
key: 'fixedName',
fixed: 'left',
},
{
title: <FormattedMessage id="resource.algorithm_model.table.list.id" defaultMessage="id" />,
@ -136,17 +146,7 @@ const AlgorithmModelList: React.FC = () => {
</a>
);
},
//update 默认使用renderFormItem update1101
},
{
title: (
<FormattedMessage id="resource.algorithm_model.table.list.name" defaultMessage="$$$" />
),
dataIndex: 'name',
hideInSearch: true,
},
{
title: (
<FormattedMessage
@ -185,7 +185,7 @@ const AlgorithmModelList: React.FC = () => {
<ProFormSelect
labelAlign="left"
wrapperCol={{ flex: 1 }}
placeholder={`111${intl.formatMessage({
placeholder={`${intl.formatMessage({
id: 'common.please_select',
defaultMessage: '$$$',
})}`}
@ -257,53 +257,59 @@ const AlgorithmModelList: React.FC = () => {
dataIndex: 'option',
valueType: 'option',
fixed: 'right',
// width: 140,
render: (_, record) => [
<Access
accessible={access.canUpdate(history.location.pathname)}
key={`${history.location.pathname}-add`}
>
<Button
key="detail"
type="link"
size="small"
onClick={() => {
setCurrentRow(record);
doToDetail(record);
// setShowDetail(true);
}}
>
</Button>
<Button
key="update"
type="link"
size="small"
onClick={() => {
setUpdateModalOpen(true);
setCurrentRow(record);
}}
>
<FormattedMessage id="pages.searchTable.update" defaultMessage="Update" />
</Button>
{/* update1101 */}
<Popconfirm
placement="topLeft"
title={intl.formatMessage({ id: 'common.tip.title', defaultMessage: '$$$' })}
description={intl.formatMessage({
id: 'common.modal.table.delete.content',
defaultMessage: '$$$',
})}
okText={intl.formatMessage({ id: 'common.yes', defaultMessage: '$$$' })}
cancelText={intl.formatMessage({ id: 'common.no', defaultMessage: '$$$' })}
onConfirm={() => {
handleDestroy(record).then(() => {});
}}
>
<Button key="destroy" type="link" size="small" danger>
<FormattedMessage id="pages.searchTable.destroy" defaultMessage="Destroy" />
</Button>
</Popconfirm>
</Access>,
// <Access
// accessible={access.canUpdate(history.location.pathname)}
// key={`${history.location.pathname}-add`}
// >
// eslint-disable-next-line react/jsx-key
<TableActionCard
renderActions={[
<Button
key="detail"
type="link"
size="small"
onClick={() => {
setCurrentRow(record);
doToDetail(record);
// setShowDetail(true);
}}
>
</Button>,
<Button
key="update"
type="link"
size="small"
onClick={() => {
setUpdateModalOpen(true);
setCurrentRow(record);
}}
>
<FormattedMessage id="pages.searchTable.update" defaultMessage="Update" />
</Button>,
<Popconfirm
key="destroy"
placement="topLeft"
title={intl.formatMessage({ id: 'common.tip.title', defaultMessage: '$$$' })}
description={intl.formatMessage({
id: 'common.modal.table.delete.content',
defaultMessage: '$$$',
})}
okText={intl.formatMessage({ id: 'common.yes', defaultMessage: '$$$' })}
cancelText={intl.formatMessage({ id: 'common.no', defaultMessage: '$$$' })}
onConfirm={() => {
handleDestroy(record).then(() => {});
}}
>
<Button type="link" size="small" danger>
<FormattedMessage id="pages.searchTable.destroy" defaultMessage="Destroy" />
</Button>
</Popconfirm>,
]}
></TableActionCard>,
// </Access>,
],
},
];
@ -314,7 +320,7 @@ const AlgorithmModelList: React.FC = () => {
id: 'pages.searchTable.title',
defaultMessage: '$$$',
})}
scroll={{ y: proTableCommonOptions.scrollY, x: proTableCommonOptions.commscrollX }}
scroll={{ y: proTableCommonOptions.commscrollY, x: proTableCommonOptions.commscrollX }}
options={{ fullScreen: true, setting: true, density: true, reload: true }}
actionRef={actionRef}
rowKey="key"
@ -329,9 +335,17 @@ const AlgorithmModelList: React.FC = () => {
}}
pagination={{
showSizeChanger: true,
// showQuickJumper: true,
pageSize: currentPageSize,
onChange: (page, pageSize) => setCurrentPageSize(pageSize),
showTotal: (total) => `${total}`,
// pageSize: 10,
// showSizeChanger: true,
// pageSizeOptions: ['10', '20', '30', '40'],
}}
// components={{
// pagination: TablePaginationCard as React.FC<TablePaginationCardProps>,
// }}
columnsState={{
persistenceKey: 'algorithm_model_list',
persistenceType: 'localStorage',

@ -1,95 +1,209 @@
import {ModalForm,ProForm} from '@ant-design/pro-components';import {ProFormText} from '@ant-design/pro-components';import {ProFormSelect} from '@ant-design/pro-components';
import {FormattedMessage, useIntl} from '@umijs/max';
import {postProjectGetProjectFkSelect} from "@/services/project/Project";
import {postBusinessImageCreateBusinessImage} from "@/services/resource/BusinessImage";
import React, {useState} from 'react';
import {Button, Form, message} from 'antd';
import { postProjectGetProjectFkSelect } from '@/services/project/Project';
import { postBusinessImageCreateBusinessImage } from '@/services/resource/BusinessImage';
import { ModalForm, ProForm, ProFormSelect, ProFormText } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import { proFormItemStyleProps, proFormModelWidth } from '../../../../../config/defaultForm';
import React from 'react';
export type FormValueType = {
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.BusinessImage>;
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.BusinessImage>;
export type CreateFormProps = {
createModalOpen: boolean;
handleModal: ()=>void;
values: Partial<API.BusinessImage>;
reload: any;
};
export type CreateFormProps = {
createModalOpen: boolean;
handleModal: () => void;
values: Partial<API.BusinessImage>;
reload: any;
};
const CreateForm: React.FC<CreateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.BusinessImage>();
const intl = useIntl();
const [form] = Form.useForm<API.BusinessImage>();
return (
<ModalForm<API.BusinessImage>
title={intl.formatMessage({
id: 'common.modal.table.create.title',
defaultMessage: '$$$',
})}
open={props.createModalOpen}
form={form}
autoFocusFirstInput
modalProps={{
destroyOnClose: true,
onCancel: () => props.handleModal(),
}}
submitTimeout={2000}
onFinish={async (values) => {
postBusinessImageCreateBusinessImage(values).then(()=>{
message.success(intl.formatMessage({id: 'common.success', defaultMessage: '$$$'}))
props.reload()
}).catch(()=>{
message.error(intl.formatMessage({id: 'common.failure', defaultMessage: '$$$'}))
})
return (
<ModalForm<API.BusinessImage>
width={proFormModelWidth}
title={intl.formatMessage({
id: 'resource.business_image.table.list.add',
defaultMessage: '$$$',
})}
open={props.createModalOpen}
form={form}
autoFocusFirstInput
modalProps={{
destroyOnClose: true,
onCancel: () => props.handleModal(),
}}
submitTimeout={2000}
onFinish={async (values) => {
postBusinessImageCreateBusinessImage(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
props.handleModal();
return true;
}}
>
<ProForm.Group>
<ProFormText width="md" name="name" label={<FormattedMessage id="resource.business_image.table.list.name" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.name', defaultMessage: '$$$'})}`} required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.business_image.table.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
/>
<ProFormText width="md" name="version" label={<FormattedMessage id="resource.business_image.table.list.version" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.version', defaultMessage: '$$$'})}`} required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.business_image.table.rule.required.version"
defaultMessage="version is required"
/>
),
},
]}
/>
<ProFormSelect width="md" name="projectFkId" label={<FormattedMessage id="resource.business_image.table.list.projectFkId" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.projectFkId', defaultMessage: '$$$'})}`} required={true} showSearch debounceTime={1000} request={async (keyWord)=>{
const resp = await postProjectGetProjectFkSelect({keyword: keyWord?.keyWords || ''})
return resp.data.list.map((v: any)=>{
return {
label: v.name,
value: v.id
}
})
}
}/>
<ProFormText width="md" name="path" label={<FormattedMessage id="resource.business_image.table.list.path" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.path', defaultMessage: '$$$'})}`} required={false}/>
<ProFormText width="md" name="startCode" label={<FormattedMessage id="resource.business_image.table.list.startCode" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.startCode', defaultMessage: '$$$'})}`} required={false}/>
<ProFormText width="md" name="configHash" label={<FormattedMessage id="resource.business_image.table.list.configHash" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.configHash', defaultMessage: '$$$'})}`} required={false}/>
<ProFormText width="md" name="remark" label={<FormattedMessage id="resource.business_image.table.list.remark" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.remark', defaultMessage: '$$$'})}`} required={false}/>
</ProForm.Group>
</ModalForm>)}
>
<ProForm.Group>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="name"
label={
<FormattedMessage id="resource.business_image.table.list.name" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.name',
defaultMessage: '$$$',
})}`}
required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.business_image.table.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="version"
label={
<FormattedMessage
id="resource.business_image.table.list.version"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.version',
defaultMessage: '$$$',
})}`}
required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.business_image.table.rule.required.version"
defaultMessage="version is required"
/>
),
},
]}
/>
<ProFormSelect
width={proFormItemStyleProps.column2Width}
name="projectFkId"
label={
<FormattedMessage
id="resource.business_image.table.list.projectFkId"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.projectFkId',
defaultMessage: '$$$',
})}`}
required={true}
showSearch
debounceTime={1000}
request={async (keyWord) => {
const resp = await postProjectGetProjectFkSelect({ keyword: keyWord?.keyWords || '' });
return resp.data.list.map((v: any) => {
return {
label: v.name,
value: v.id,
};
});
}}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="path"
label={
<FormattedMessage id="resource.business_image.table.list.path" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.path',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="startCode"
label={
<FormattedMessage
id="resource.business_image.table.list.startCode"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.startCode',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="configHash"
label={
<FormattedMessage
id="resource.business_image.table.list.configHash"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.configHash',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="remark"
label={
<FormattedMessage id="resource.business_image.table.list.remark" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.remark',
defaultMessage: '$$$',
})}`}
required={false}
/>
</ProForm.Group>
</ModalForm>
);
};
export default CreateForm;

@ -1,32 +1,47 @@
import {ModalForm,ProForm} from '@ant-design/pro-components';import {ProFormText} from '@ant-design/pro-components';import {ProFormSelect} from '@ant-design/pro-components';import {ProFormDateTimePicker} from '@ant-design/pro-components';
import {FormattedMessage, useIntl} from '@umijs/max';
import {postProjectGetProjectFkSelect} from "@/services/project/Project";
import {putBusinessImageUpdateBusinessImage} from "@/services/resource/BusinessImage";
import React, {useState} from 'react';
import {Button, Form, message} from 'antd';
/*
* @Author: zhoux zhouxia@supervision.ltd
* @Date: 2023-11-01 13:56:33
* @LastEditors: zhoux zhouxia@supervision.ltd
* @LastEditTime: 2023-11-14 14:50:08
* @FilePath: \general-ai-platform-web\src\pages\Resource\BusinessImageList\components\UpdateForm.tsx
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { postProjectGetProjectFkSelect } from '@/services/project/Project';
import { putBusinessImageUpdateBusinessImage } from '@/services/resource/BusinessImage';
import {
ModalForm,
ProForm,
ProFormDateTimePicker,
ProFormSelect,
ProFormText,
} from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import React from 'react';
import { proFormItemStyleProps, proFormModelWidth } from '../../../../../config/defaultForm';
export type FormValueType = {
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.BusinessImage>;
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.BusinessImage>;
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.BusinessImage>;
reload: any;
};
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.BusinessImage>;
reload: any;
};
const UpdateForm: React.FC<UpdateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.BusinessImage>();
return (
<ModalForm<API.BusinessImage>
width={proFormModelWidth}
title={intl.formatMessage({
id: 'common.modal.table.update.title',
id: 'resource.business_image.table.list.update',
defaultMessage: '$$$',
})}
open={props.updateModalOpen}
@ -38,62 +53,232 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
}}
submitTimeout={2000}
onFinish={async (values) => {
putBusinessImageUpdateBusinessImage(values).then(()=>{
message.success(intl.formatMessage({id: 'common.success', defaultMessage: '$$$'}))
props.reload()
}).catch(()=>{
message.error(intl.formatMessage({id: 'common.failure', defaultMessage: '$$$'}))
})
putBusinessImageUpdateBusinessImage(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
props.handleModal();
return true;
}}
>
<ProForm.Group>
<ProFormText width="md" name="id" label="id" disabled={true} initialValue={props.values.id}/>
<ProFormText width="md" name="name" label={<FormattedMessage id="resource.business_image.table.list.name" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.name', defaultMessage: '$$$'})}`} required={true} initialValue={props.values.name} disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.business_image.table.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
<ProForm.Group>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="id"
label="id"
disabled={true}
initialValue={props.values.id}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="name"
label={
<FormattedMessage id="resource.business_image.table.list.name" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.name',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.name}
disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.business_image.table.rule.required.name"
defaultMessage="name is required"
/>
<ProFormText width="md" name="version" label={<FormattedMessage id="resource.business_image.table.list.version" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.version', defaultMessage: '$$$'})}`} required={true} initialValue={props.values.version} disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.business_image.table.rule.required.version"
defaultMessage="version is required"
/>
),
},
]}
),
},
]}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="version"
label={
<FormattedMessage
id="resource.business_image.table.list.version"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.version',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.version}
disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.business_image.table.rule.required.version"
defaultMessage="version is required"
/>
<ProFormSelect width="md" name="projectFkId" label={<FormattedMessage id="resource.business_image.table.list.projectFkId" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.projectFkId', defaultMessage: '$$$'})}`} required={true} initialValue={props.values.projectFkId} showSearch debounceTime={1000} request={async (keyWord)=>{
const resp = await postProjectGetProjectFkSelect({keyword: keyWord?.keyWords || ''})
return resp.data.list.map((v: any)=>{
return {
label: v.name,
value: v.id
}
})
}
}/>
<ProFormText width="md" name="path" label={<FormattedMessage id="resource.business_image.table.list.path" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.path', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.path} disabled={false}/>
<ProFormText width="md" name="startCode" label={<FormattedMessage id="resource.business_image.table.list.startCode" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.startCode', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.startCode} disabled={false}/>
<ProFormText width="md" name="configHash" label={<FormattedMessage id="resource.business_image.table.list.configHash" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.configHash', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.configHash} disabled={false}/>
<ProFormText width="md" name="remark" label={<FormattedMessage id="resource.business_image.table.list.remark" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.remark', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.remark} disabled={false}/>
<ProFormDateTimePicker width="md" name="createTime" label={<FormattedMessage id="resource.business_image.table.list.createTime" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.createTime', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.createTime} disabled={true}/>
<ProFormDateTimePicker width="md" name="updateTime" label={<FormattedMessage id="resource.business_image.table.list.updateTime" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.business_image.table.list.updateTime', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.updateTime} disabled={true}/>
</ProForm.Group>
</ModalForm>)}
),
},
]}
/>
<ProFormSelect
width={proFormItemStyleProps.column2Width}
name="projectFkId"
label={
<FormattedMessage
id="resource.business_image.table.list.projectFkId"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.projectFkId',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.projectFkId}
showSearch
debounceTime={1000}
request={async (keyWord) => {
const resp = await postProjectGetProjectFkSelect({ keyword: keyWord?.keyWords || '' });
return resp.data.list.map((v: any) => {
return {
label: v.name,
value: v.id,
};
});
}}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="path"
label={
<FormattedMessage id="resource.business_image.table.list.path" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.path',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.path}
disabled={false}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="startCode"
label={
<FormattedMessage
id="resource.business_image.table.list.startCode"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.startCode',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.startCode}
disabled={false}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="configHash"
label={
<FormattedMessage
id="resource.business_image.table.list.configHash"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.configHash',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.configHash}
disabled={false}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="remark"
label={
<FormattedMessage id="resource.business_image.table.list.remark" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.remark',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.remark}
disabled={false}
/>
<ProFormDateTimePicker
width={proFormItemStyleProps.column2Width}
name="createTime"
label={
<FormattedMessage
id="resource.business_image.table.list.createTime"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.createTime',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.createTime}
disabled={true}
/>
<ProFormDateTimePicker
width={proFormItemStyleProps.column2Width}
name="updateTime"
label={
<FormattedMessage
id="resource.business_image.table.list.updateTime"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.business_image.table.list.updateTime',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.updateTime}
disabled={true}
/>
</ProForm.Group>
</ModalForm>
);
};
export default UpdateForm;

@ -19,7 +19,7 @@ import React, { useRef, useState } from 'react';
import { ColumnDrawer } from './components/ColumnDrawer';
import CreateForm from './components/CreateForm';
import UpdateForm from './components/UpdateForm';
import { proTableCommonOptions, proTableIndexColumnOptions } from '../../../../config/defaultTable';
import { proTableCommonOptions } from '../../../../config/defaultTable';
const BusinessImageList: React.FC = () => {
/**
* @en-US Pop-up window of new window
@ -111,7 +111,11 @@ const BusinessImageList: React.FC = () => {
const columns: ProColumns<API.BusinessImage>[] = [
{
...proTableIndexColumnOptions
title: <FormattedMessage id="resource.business_image.table.list.name" defaultMessage="$$$" />,
dataIndex: 'name',
hideInSearch: true,
key: 'fixedName',
fixed: 'left',
},
{
title: <FormattedMessage id="resource.business_image.table.list.id" defaultMessage="id" />,
@ -131,13 +135,6 @@ const BusinessImageList: React.FC = () => {
);
},
},
{
title: <FormattedMessage id="resource.business_image.table.list.name" defaultMessage="$$$" />,
dataIndex: 'name',
hideInSearch: true,
},
{
title: (
<FormattedMessage id="resource.business_image.table.list.version" defaultMessage="$$$" />

@ -12,6 +12,7 @@ import React, { useRef, useState } from 'react';
import { ColumnDrawer } from './components/ColumnDrawer';
import CreateForm from './components/CreateForm';
import UpdateForm from './components/UpdateForm';
import { proTableCommonOptions } from '../../../../config/defaultTable';
const ModelCategoryList: React.FC = () => {
/**
* @en-US Pop-up window of new window
@ -181,9 +182,9 @@ const ModelCategoryList: React.FC = () => {
actionRef={actionRef}
rowKey="key"
search={{
labelWidth: 120,
labelWidth: proTableCommonOptions.searchLabelWidth,
}}
onDataSourceChange={(data) => {}}
onDataSourceChange={() => {}}
pagination={{
showSizeChanger: true,
pageSize: 10,

@ -1,81 +1,159 @@
import {ModalForm,ProForm} from '@ant-design/pro-components';import {ProFormText} from '@ant-design/pro-components';import {ProFormSelect} from '@ant-design/pro-components';
import {FormattedMessage, useIntl} from '@umijs/max';
import {postModelVersionGetModelVersionFkSelect} from "@/services/resource/ModelVersion";
import {postModelImageCreateModelImage} from "@/services/resource/ModelImage";
import React, {useState} from 'react';
import {Button, Form, message} from 'antd';
import { postModelImageCreateModelImage } from '@/services/resource/ModelImage';
import { postModelVersionGetModelVersionFkSelect } from '@/services/resource/ModelVersion';
import { ModalForm, ProForm, ProFormSelect, ProFormText } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import React from 'react';
export type FormValueType = {
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.ModelImage>;
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.ModelImage>;
export type CreateFormProps = {
createModalOpen: boolean;
handleModal: ()=>void;
values: Partial<API.ModelImage>;
reload: any;
};
export type CreateFormProps = {
createModalOpen: boolean;
handleModal: () => void;
values: Partial<API.ModelImage>;
reload: any;
};
const CreateForm: React.FC<CreateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.ModelImage>();
const intl = useIntl();
const [form] = Form.useForm<API.ModelImage>();
return (
<ModalForm<API.ModelImage>
title={intl.formatMessage({
id: 'common.modal.table.create.title',
defaultMessage: '$$$',
})}
open={props.createModalOpen}
form={form}
autoFocusFirstInput
modalProps={{
destroyOnClose: true,
onCancel: () => props.handleModal(),
}}
submitTimeout={2000}
onFinish={async (values) => {
postModelImageCreateModelImage(values).then(()=>{
message.success(intl.formatMessage({id: 'common.success', defaultMessage: '$$$'}))
props.reload()
}).catch(()=>{
message.error(intl.formatMessage({id: 'common.failure', defaultMessage: '$$$'}))
})
return (
<ModalForm<API.ModelImage>
title={intl.formatMessage({
id: 'common.modal.table.create.title',
defaultMessage: '$$$',
})}
open={props.createModalOpen}
form={form}
autoFocusFirstInput
modalProps={{
destroyOnClose: true,
onCancel: () => props.handleModal(),
}}
submitTimeout={2000}
onFinish={async (values) => {
postModelImageCreateModelImage(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
props.handleModal();
return true;
}}
>
<ProForm.Group>
<ProFormText width="md" name="name" label={<FormattedMessage id="resource.model_image.table.list.name" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.name', defaultMessage: '$$$'})}`} required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.model_image.table.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
/>
<ProFormSelect width="md" name="modelVersionFkId" label={<FormattedMessage id="resource.model_image.table.list.modelVersionFkId" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.modelVersionFkId', defaultMessage: '$$$'})}`} required={true} showSearch debounceTime={1000} request={async (keyWord)=>{
const resp = await postModelVersionGetModelVersionFkSelect({keyword: keyWord?.keyWords || ''})
return resp.data.list.map((v: any)=>{
return {
label: v.name,
value: v.id
}
})
}
}/>
<ProFormText width="md" name="path" label={<FormattedMessage id="resource.model_image.table.list.path" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.path', defaultMessage: '$$$'})}`} required={false}/>
<ProFormText width="md" name="startCode" label={<FormattedMessage id="resource.model_image.table.list.startCode" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.startCode', defaultMessage: '$$$'})}`} required={false}/>
<ProFormText width="md" name="remark" label={<FormattedMessage id="resource.model_image.table.list.remark" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.remark', defaultMessage: '$$$'})}`} required={false}/>
</ProForm.Group>
</ModalForm>)}
>
<ProForm.Group>
<ProFormText
width="md"
name="name"
label={
<FormattedMessage id="resource.model_image.table.list.name" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.name',
defaultMessage: '$$$',
})}`}
required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.model_image.table.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
/>
<ProFormSelect
width="md"
name="modelVersionFkId"
label={
<FormattedMessage
id="resource.model_image.table.list.modelVersionFkId"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.modelVersionFkId',
defaultMessage: '$$$',
})}`}
required={true}
showSearch
debounceTime={1000}
request={async (keyWord) => {
const resp = await postModelVersionGetModelVersionFkSelect({
keyword: keyWord?.keyWords || '',
});
return resp.data.list.map((v: any) => {
return {
label: v.name,
value: v.id,
};
});
}}
/>
<ProFormText
width="md"
name="path"
label={
<FormattedMessage id="resource.model_image.table.list.path" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.path',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormText
width="md"
name="startCode"
label={
<FormattedMessage id="resource.model_image.table.list.startCode" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.startCode',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormText
width="md"
name="remark"
label={
<FormattedMessage id="resource.model_image.table.list.remark" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.remark',
defaultMessage: '$$$',
})}`}
required={false}
/>
</ProForm.Group>
</ModalForm>
);
};
export default CreateForm;

@ -1,25 +1,30 @@
import {ModalForm,ProForm} from '@ant-design/pro-components';import {ProFormText} from '@ant-design/pro-components';import {ProFormSelect} from '@ant-design/pro-components';import {ProFormDateTimePicker} from '@ant-design/pro-components';
import {FormattedMessage, useIntl} from '@umijs/max';
import {postModelVersionGetModelVersionFkSelect} from "@/services/resource/ModelVersion";
import {putModelImageUpdateModelImage} from "@/services/resource/ModelImage";
import React, {useState} from 'react';
import {Button, Form, message} from 'antd';
import { putModelImageUpdateModelImage } from '@/services/resource/ModelImage';
import { postModelVersionGetModelVersionFkSelect } from '@/services/resource/ModelVersion';
import {
ModalForm,
ProForm,
ProFormDateTimePicker,
ProFormSelect,
ProFormText,
} from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import React from 'react';
export type FormValueType = {
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.ModelImage>;
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.ModelImage>;
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.ModelImage>;
reload: any;
};
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.ModelImage>;
reload: any;
};
const UpdateForm: React.FC<UpdateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.ModelImage>();
@ -38,48 +43,180 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
}}
submitTimeout={2000}
onFinish={async (values) => {
putModelImageUpdateModelImage(values).then(()=>{
message.success(intl.formatMessage({id: 'common.success', defaultMessage: '$$$'}))
props.reload()
}).catch(()=>{
message.error(intl.formatMessage({id: 'common.failure', defaultMessage: '$$$'}))
})
putModelImageUpdateModelImage(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
props.handleModal();
return true;
}}
>
<ProForm.Group>
<ProFormText width="md" name="id" label="id" disabled={true} initialValue={props.values.id}/>
<ProFormText width="md" name="name" label={<FormattedMessage id="resource.model_image.table.list.name" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.name', defaultMessage: '$$$'})}`} required={true} initialValue={props.values.name} disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.model_image.table.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
<ProForm.Group>
<ProFormText
width="md"
name="id"
label="id"
disabled={true}
initialValue={props.values.id}
/>
<ProFormText
width="md"
name="name"
label={
<FormattedMessage id="resource.model_image.table.list.name" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.name',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.name}
disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.model_image.table.rule.required.name"
defaultMessage="name is required"
/>
<ProFormSelect width="md" name="modelVersionFkId" label={<FormattedMessage id="resource.model_image.table.list.modelVersionFkId" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.modelVersionFkId', defaultMessage: '$$$'})}`} required={true} initialValue={props.values.modelVersionFkId} showSearch debounceTime={1000} request={async (keyWord)=>{
const resp = await postModelVersionGetModelVersionFkSelect({keyword: keyWord?.keyWords || ''})
return resp.data.list.map((v: any)=>{
return {
label: v.name,
value: v.id
}
})
}
}/>
<ProFormText width="md" name="path" label={<FormattedMessage id="resource.model_image.table.list.path" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.path', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.path} disabled={false}/>
<ProFormText width="md" name="startCode" label={<FormattedMessage id="resource.model_image.table.list.startCode" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.startCode', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.startCode} disabled={false}/>
<ProFormText width="md" name="remark" label={<FormattedMessage id="resource.model_image.table.list.remark" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.remark', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.remark} disabled={false}/>
<ProFormDateTimePicker width="md" name="createTime" label={<FormattedMessage id="resource.model_image.table.list.createTime" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.createTime', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.createTime} disabled={true}/>
<ProFormDateTimePicker width="md" name="updateTime" label={<FormattedMessage id="resource.model_image.table.list.updateTime" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_image.table.list.updateTime', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.updateTime} disabled={true}/>
</ProForm.Group>
</ModalForm>)}
),
},
]}
/>
<ProFormSelect
width="md"
name="modelVersionFkId"
label={
<FormattedMessage
id="resource.model_image.table.list.modelVersionFkId"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.modelVersionFkId',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.modelVersionFkId}
showSearch
debounceTime={1000}
request={async (keyWord) => {
const resp = await postModelVersionGetModelVersionFkSelect({
keyword: keyWord?.keyWords || '',
});
return resp.data.list.map((v: any) => {
return {
label: v.name,
value: v.id,
};
});
}}
/>
<ProFormText
width="md"
name="path"
label={
<FormattedMessage id="resource.model_image.table.list.path" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.path',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.path}
disabled={false}
/>
<ProFormText
width="md"
name="startCode"
label={
<FormattedMessage id="resource.model_image.table.list.startCode" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.startCode',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.startCode}
disabled={false}
/>
<ProFormText
width="md"
name="remark"
label={
<FormattedMessage id="resource.model_image.table.list.remark" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.remark',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.remark}
disabled={false}
/>
<ProFormDateTimePicker
width="md"
name="createTime"
label={
<FormattedMessage
id="resource.model_image.table.list.createTime"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.createTime',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.createTime}
disabled={true}
/>
<ProFormDateTimePicker
width="md"
name="updateTime"
label={
<FormattedMessage
id="resource.model_image.table.list.updateTime"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_image.table.list.updateTime',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.updateTime}
disabled={true}
/>
</ProForm.Group>
</ModalForm>
);
};
export default UpdateForm;

@ -19,6 +19,7 @@ import React, { useRef, useState } from 'react';
import { ColumnDrawer } from './components/ColumnDrawer';
import CreateForm from './components/CreateForm';
import UpdateForm from './components/UpdateForm';
import { proTableCommonOptions } from '../../../../config/defaultTable';
const ModelImageList: React.FC = () => {
/**
@ -285,11 +286,9 @@ const ModelImageList: React.FC = () => {
options={{ fullScreen: true, setting: true, density: true, reload: true }}
actionRef={actionRef}
rowKey="key"
scroll={{
x: 1300,
}}
scroll={{ y: proTableCommonOptions.commscrollY, x: proTableCommonOptions.commscrollX }}
search={{
labelWidth: 120,
labelWidth: proTableCommonOptions.searchLabelWidth,
}}
onDataSourceChange={(data) => {
let ModelVersionFkIdIds: any = data.map((v) => {

@ -1,82 +1,187 @@
import {ModalForm,ProForm} from '@ant-design/pro-components';import {ProFormSelect} from '@ant-design/pro-components';import {ProFormText} from '@ant-design/pro-components';import {ProFormSwitch} from '@ant-design/pro-components';
import {FormattedMessage, useIntl} from '@umijs/max';
import {postAlgorithmModelGetAlgorithmModelFkSelect} from "@/services/resource/AlgorithmModel";
import {postModelVersionCreateModelVersion} from "@/services/resource/ModelVersion";
import React, {useState} from 'react';
import {Button, Form, message} from 'antd';
/*
* @Author: zhoux zhouxia@supervision.ltd
* @Date: 2023-11-01 13:56:33
* @LastEditors: zhoux zhouxia@supervision.ltd
* @LastEditTime: 2023-11-14 15:29:30
* @FilePath: \general-ai-platform-web\src\pages\Resource\ModelVersionList\components\CreateForm.tsx
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { postAlgorithmModelGetAlgorithmModelFkSelect } from '@/services/resource/AlgorithmModel';
import { postModelVersionCreateModelVersion } from '@/services/resource/ModelVersion';
import {
ModalForm,
ProForm,
ProFormSelect,
ProFormSwitch,
ProFormText,
} from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import React from 'react';
export type FormValueType = {
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.ModelVersion>;
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.ModelVersion>;
export type CreateFormProps = {
createModalOpen: boolean;
handleModal: ()=>void;
values: Partial<API.ModelVersion>;
reload: any;
};
export type CreateFormProps = {
createModalOpen: boolean;
handleModal: () => void;
values: Partial<API.ModelVersion>;
reload: any;
};
const CreateForm: React.FC<CreateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.ModelVersion>();
const intl = useIntl();
const [form] = Form.useForm<API.ModelVersion>();
return (
<ModalForm<API.ModelVersion>
title={intl.formatMessage({
id: 'common.modal.table.create.title',
defaultMessage: '$$$',
})}
open={props.createModalOpen}
form={form}
autoFocusFirstInput
modalProps={{
destroyOnClose: true,
onCancel: () => props.handleModal(),
}}
submitTimeout={2000}
onFinish={async (values) => {
postModelVersionCreateModelVersion(values).then(()=>{
message.success(intl.formatMessage({id: 'common.success', defaultMessage: '$$$'}))
props.reload()
}).catch(()=>{
message.error(intl.formatMessage({id: 'common.failure', defaultMessage: '$$$'}))
})
return (
<ModalForm<API.ModelVersion>
title={intl.formatMessage({
id: 'resource.model_version.table.list.add',
defaultMessage: '$$$',
})}
open={props.createModalOpen}
form={form}
autoFocusFirstInput
modalProps={{
destroyOnClose: true,
onCancel: () => props.handleModal(),
}}
submitTimeout={2000}
onFinish={async (values) => {
postModelVersionCreateModelVersion(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
props.handleModal();
return true;
}}
>
<ProForm.Group>
<ProFormSelect width="md" name="modelFkId" label={<FormattedMessage id="resource.model_version.table.list.modelFkId" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.modelFkId', defaultMessage: '$$$'})}`} required={true} showSearch debounceTime={1000} request={async (keyWord)=>{
const resp = await postAlgorithmModelGetAlgorithmModelFkSelect({keyword: keyWord?.keyWords || ''})
return resp.data.list.map((v: any)=>{
return {
label: v.name,
value: v.id
}
})
}
}/>
<ProFormText width="md" name="version" label={<FormattedMessage id="resource.model_version.table.list.version" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.version', defaultMessage: '$$$'})}`} required={false}/>
<ProFormText width="md" name="path" label={<FormattedMessage id="resource.model_version.table.list.path" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.path', defaultMessage: '$$$'})}`} required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.model_version.table.rule.required.path"
defaultMessage="path is required"
/>
),
},
]}
/>
<ProFormText width="md" name="startCode" label={<FormattedMessage id="resource.model_version.table.list.startCode" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.startCode', defaultMessage: '$$$'})}`} required={false}/>
<ProFormSwitch width="md" name="isEnable" label={<FormattedMessage id="resource.model_version.table.list.isEnable" defaultMessage="$$$"/>} initialValue={true}/>
<ProFormText width="md" name="remark" label={<FormattedMessage id="resource.model_version.table.list.remark" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.remark', defaultMessage: '$$$'})}`} required={false}/>
</ProForm.Group>
</ModalForm>)}
>
<ProForm.Group>
<ProFormSelect
width="md"
name="modelFkId"
label={
<FormattedMessage
id="resource.model_version.table.list.modelFkId"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.modelFkId',
defaultMessage: '$$$',
})}`}
required={true}
showSearch
debounceTime={1000}
request={async (keyWord) => {
const resp = await postAlgorithmModelGetAlgorithmModelFkSelect({
keyword: keyWord?.keyWords || '',
});
return resp.data.list.map((v: any) => {
return {
label: v.name,
value: v.id,
};
});
}}
/>
<ProFormText
width="md"
name="version"
label={
<FormattedMessage id="resource.model_version.table.list.version" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.version',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormText
width="md"
name="path"
label={
<FormattedMessage id="resource.model_version.table.list.path" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.path',
defaultMessage: '$$$',
})}`}
required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.model_version.table.rule.required.path"
defaultMessage="path is required"
/>
),
},
]}
/>
<ProFormText
width="md"
name="startCode"
label={
<FormattedMessage
id="resource.model_version.table.list.startCode"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.startCode',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormSwitch
width="md"
name="isEnable"
label={
<FormattedMessage
id="resource.model_version.table.list.isEnable"
defaultMessage="$$$"
/>
}
initialValue={true}
/>
<ProFormText
width="md"
name="remark"
label={
<FormattedMessage id="resource.model_version.table.list.remark" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.remark',
defaultMessage: '$$$',
})}`}
required={false}
/>
</ProForm.Group>
</ModalForm>
);
};
export default CreateForm;

@ -1,3 +1,13 @@
/*
* @Author: zhoux zhouxia@supervision.ltd
* @Date: 2023-11-01 13:56:33
* @LastEditors: zhoux zhouxia@supervision.ltd
* @LastEditTime: 2023-11-14 15:29:42
* @FilePath: \general-ai-platform-web\src\pages\Resource\ModelVersionList\components\MyCreateForm.tsx
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { postAlgorithmModelGetAlgorithmModelFkSelect } from '@/services/resource/AlgorithmModel';
import { postModelVersionCreateModelVersion } from '@/services/resource/ModelVersion';
import {
ProForm,
ProFormInstance,
@ -6,40 +16,37 @@ import {
ProFormSwitch,
ProFormText,
ProFormUploadDragger,
StepsForm
StepsForm,
} from '@ant-design/pro-components';
import {FormattedMessage, useIntl} from '@umijs/max';
import {postAlgorithmModelGetAlgorithmModelFkSelect} from "@/services/resource/AlgorithmModel";
import {postModelVersionCreateModelVersion} from "@/services/resource/ModelVersion";
import React, {useRef, useState} from 'react';
import {Form, message, Modal, UploadFile} from 'antd';
import { FormListActionType } from '@ant-design/pro-form/lib';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, Modal, UploadFile, message } from 'antd';
import yaml from 'js-yaml';
import {FormListActionType} from "@ant-design/pro-form/lib";
import React, { useRef, useState } from 'react';
export type FormValueType = {
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.ModelVersion>;
export type MyCreateFormProps = {
createModalOpen: boolean;
handleModal: ()=>void;
values: Partial<API.ModelVersion>;
reload: any;
createModalOpen: boolean;
handleModal: () => void;
values: Partial<API.ModelVersion>;
reload: any;
};
const waitTime = (time: number = 100) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve(true);
}, time);
});
return new Promise((resolve) => {
setTimeout(() => {
resolve(true);
}, time);
});
};
interface ProjectConfig {
params: Array<object>;
params: Array<object>;
}
const MyCreateForm: React.FC<MyCreateFormProps> = (props) => {
const actionFormListRef = useRef<
@ -63,213 +70,318 @@ const MyCreateForm: React.FC<MyCreateFormProps> = (props) => {
}
setFileList([...curFile]);
}
};
const intl = useIntl();
const [dataFormList, setDataFormList] = useState<any>([]);
const dataFormListRef = useRef(dataFormList)
const dataFormListRef = useRef(dataFormList);
const [fileList, setFileList] = useState<UploadFile<any>[]>([]);
const [form] = Form.useForm<API.ModelVersion>();
const [current, setCurrent] = useState(0);
const formRef = useRef<ProFormInstance>();
const [configData, setConfigData] = useState<ProjectConfig>({params: []});
return (
<StepsForm<{
name: string;
}>
stepsProps={{}}
current={current}
onCurrentChange={setCurrent}
formProps={{
validateMessages: {
required: '此项为必填项',
},
const [current, setCurrent] = useState(0);
const formRef = useRef<ProFormInstance>();
const [configData, setConfigData] = useState<ProjectConfig>({ params: [] });
return (
<StepsForm<{
name: string;
}>
stepsProps={{}}
current={current}
onCurrentChange={setCurrent}
formProps={{
validateMessages: {
required: '此项为必填项',
},
}}
stepsFormRender={(dom, submitter) => {
return (
<Modal
title="分步表单"
width={1000}
onCancel={() => {
setCurrent(0);
formRef.current?.resetFields();
setFileList([]);
props.handleModal();
}}
stepsFormRender={(dom, submitter) => {
return (
<Modal
title="分步表单"
width={1000}
onCancel={()=>{
setCurrent(0)
formRef.current?.resetFields()
setFileList([])
props.handleModal();
}}
open={props.createModalOpen}
footer={submitter}
destroyOnClose
>
{dom}
</Modal>
);
open={props.createModalOpen}
footer={submitter}
destroyOnClose
>
{dom}
</Modal>
);
}}
>
<StepsForm.StepForm<{
name: string;
}>
name="base"
formRef={formRef}
title="创建模型版本数据"
stepProps={{
description: '填入模型版本基本信息',
}}
onFinish={async () => {
// setFormData(formRef.current?.getFieldsValue());
await waitTime(500);
return true;
}}
>
<ProForm.Group>
<ProFormSelect
width="md"
name="modelFkId"
label={
<FormattedMessage
id="resource.model_version.table.list.modelFkId"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.modelFkId',
defaultMessage: '$$$',
})}`}
required={true}
showSearch
debounceTime={1000}
request={async (keyWord) => {
const resp = await postAlgorithmModelGetAlgorithmModelFkSelect({
keyword: keyWord?.keyWords || '',
});
return resp.data.list.map((v: any) => {
return {
label: v.name,
value: v.id,
};
});
}}
>
<StepsForm.StepForm<{
name: string;
}>
name="base"
formRef={formRef}
title="创建模型版本数据"
stepProps={{
description: '填入模型版本基本信息',
}}
onFinish={async () => {
// setFormData(formRef.current?.getFieldsValue());
await waitTime(500);
return true;
}}
>
<ProForm.Group>
<ProFormSelect width="md" name="modelFkId" label={<FormattedMessage id="resource.model_version.table.list.modelFkId" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.modelFkId', defaultMessage: '$$$'})}`} required={true} showSearch debounceTime={1000} request={async (keyWord)=>{
const resp = await postAlgorithmModelGetAlgorithmModelFkSelect({keyword: keyWord?.keyWords || ''})
return resp.data.list.map((v: any)=>{
return {
label: v.name,
value: v.id
}
})
/>
<ProFormText
width="md"
name="version"
label={
<FormattedMessage
id="resource.model_version.table.list.version"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.version',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormText
width="md"
name="path"
label={
<FormattedMessage id="resource.model_version.table.list.path" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.path',
defaultMessage: '$$$',
})}`}
required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.model_version.table.rule.required.path"
defaultMessage="path is required"
/>
),
},
]}
/>
<ProFormText
width="md"
name="startCode"
label={
<FormattedMessage
id="resource.model_version.table.list.startCode"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.startCode',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormSwitch
width="md"
name="isEnable"
label={
<FormattedMessage
id="resource.model_version.table.list.isEnable"
defaultMessage="$$$"
/>
}
initialValue={true}
/>
<ProFormText
width="md"
name="remark"
label={
<FormattedMessage
id="resource.model_version.table.list.remark"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.remark',
defaultMessage: '$$$',
})}`}
required={false}
/>
</ProForm.Group>
</StepsForm.StepForm>
<StepsForm.StepForm<{
config: string;
}>
name="config"
title="业务参数配置"
stepProps={{
description: '业务参数配置',
}}
onFinish={async (values: any) => {
setFileList([]);
let formData = formRef.current?.getFieldsValue();
if (formData?.modelFkId) {
await waitTime(500);
formData.modelConfig = { params: values?.params || [] };
postModelVersionCreateModelVersion(formData)
.then(() => {
message.success(
intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }),
);
props.handleModal();
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
return false;
});
}
return true;
}}
>
<ProFormUploadDragger
max={1}
label="配置文件上传"
value={fileList}
name="dragger"
fieldProps={{
onChange: handleFileChange,
onRemove: () => {
let index_ids = actionFormListRef.current?.getList()?.map((v, i) => {
return i;
});
actionFormListRef.current?.remove(index_ids || []);
},
beforeUpload: (file, fileList) => {
if (
!file.name.endsWith('.yaml') &&
!file.name.endsWith('.yml') &&
!file.name.endsWith('.json')
) {
message.error('请上传yaml或json文件').then(() => {});
return false;
} else {
let parsedData = {};
file
.text()
.then((text) => {
if (file.name.endsWith('.yaml') || file.name.endsWith('.yml')) {
parsedData = yaml.load(text) as Record<string, unknown>;
}
}/>
<ProFormText width="md" name="version" label={<FormattedMessage id="resource.model_version.table.list.version" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.version', defaultMessage: '$$$'})}`} required={false}/>
<ProFormText width="md" name="path" label={<FormattedMessage id="resource.model_version.table.list.path" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.path', defaultMessage: '$$$'})}`} required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.model_version.table.rule.required.path"
defaultMessage="path is required"
/>
),
},
]}
/>
<ProFormText width="md" name="startCode" label={<FormattedMessage id="resource.model_version.table.list.startCode" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.startCode', defaultMessage: '$$$'})}`} required={false}/>
<ProFormSwitch width="md" name="isEnable" label={<FormattedMessage id="resource.model_version.table.list.isEnable" defaultMessage="$$$"/>} initialValue={true}/>
<ProFormText width="md" name="remark" label={<FormattedMessage id="resource.model_version.table.list.remark" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.remark', defaultMessage: '$$$'})}`} required={false}/>
</ProForm.Group>
</StepsForm.StepForm>
<StepsForm.StepForm<{
config: string;
}>
name="config"
title="业务参数配置"
stepProps={{
description: '业务参数配置',
}}
onFinish={async (values: any) => {
setFileList([])
let formData = formRef.current?.getFieldsValue();
if (formData?.modelFkId) {
await waitTime(500)
formData.modelConfig = {params: values?.params || []};
postModelVersionCreateModelVersion(formData).then(()=>{
message.success(intl.formatMessage({id: 'common.success', defaultMessage: '$$$'}))
props.handleModal();
props.reload()
}).catch(()=>{
message.error(intl.formatMessage({id: 'common.failure', defaultMessage: '$$$'}))
return false
})
}
return true;
}}
>
<ProFormUploadDragger max={1}
label="配置文件上传"
value={fileList}
name="dragger"
fieldProps={{
onChange: handleFileChange,
onRemove: ()=>{
let index_ids = actionFormListRef.current?.getList()?.map((v, i)=>{
return i
})
actionFormListRef.current?.remove(index_ids || [])
},
beforeUpload: (file, fileList)=>{
if ( !file.name.endsWith('.yaml') && !file.name.endsWith('.yml') && !file.name.endsWith('.json')) {
message.error('请上传yaml或json文件').then(()=>{})
return false
} else {
let parsedData = {}
file.text().then((text)=>{
if (file.name.endsWith('.yaml') || file.name.endsWith('.yml')) {
parsedData = yaml.load(text) as Record<string, unknown>;
}
if (file.name.endsWith('.json')) {
parsedData = JSON.parse(text) as Record<string, unknown>;
}
if (Object.keys(parsedData).length > 0) {
dataFormListRef.current = Object.entries(parsedData).map(([key, value]) => ({
name: key,
default: value
}))
if (file.name.endsWith('.json')) {
parsedData = JSON.parse(text) as Record<string, unknown>;
}
if (Object.keys(parsedData).length > 0) {
dataFormListRef.current = Object.entries(parsedData).map(([key, value]) => ({
name: key,
default: value,
}));
dataFormListRef.current.forEach((v:any, i:number)=>{
actionFormListRef.current?.add(v, i)
})
}
return true
}).catch(()=>{
return false
})
}
},
}}
/>
<ProFormList
name="params"
label="模型参数"
actionRef={actionFormListRef}
itemContainerRender={(doms) => {
return <ProForm.Group>{doms}</ProForm.Group>;
}}
alwaysShowItemLabel
>
{(f, index, action) => {
return (
<>
<ProFormText key="name" name="name" label="键名" />
<ProFormText key="default" name="default" label="默认值" />
</>
);
}}
</ProFormList>
</StepsForm.StepForm>
</StepsForm>
// <ModalForm<API.ModelVersion>
// title={intl.formatMessage({
// id: 'common.modal.table.create.title',
// defaultMessage: '$$$',
// })}
// open={props.publishModalOpen}
// form={form}
// autoFocusFirstInput
// modalProps={{
// destroyOnClose: true,
// onCancel: () => props.handleModal(),
// }}
// submitTimeout={2000}
// onFinish={async (values) => {
// console.log(2222, values)
// // postModelVersionCreateModelVersion(values).then(()=>{
// // message.success(intl.formatMessage({id: 'common.success', defaultMessage: '$$$'}))
// // props.reload()
// // }).catch(()=>{
// // message.error(intl.formatMessage({id: 'common.failure', defaultMessage: '$$$'}))
// // })
// // props.handleModal();
// return true;
// }}
// >
//
//
//
// </ModalForm>
)}
dataFormListRef.current.forEach((v: any, i: number) => {
actionFormListRef.current?.add(v, i);
});
}
return true;
})
.catch(() => {
return false;
});
}
},
}}
/>
<ProFormList
name="params"
label="模型参数"
actionRef={actionFormListRef}
itemContainerRender={(doms) => {
return <ProForm.Group>{doms}</ProForm.Group>;
}}
alwaysShowItemLabel
>
{(f, index, action) => {
return (
<>
<ProFormText key="name" name="name" label="键名" />
<ProFormText key="default" name="default" label="默认值" />
</>
);
}}
</ProFormList>
</StepsForm.StepForm>
</StepsForm>
// <ModalForm<API.ModelVersion>
// title={intl.formatMessage({
// id: 'common.modal.table.create.title',
// defaultMessage: '$$$',
// })}
// open={props.publishModalOpen}
// form={form}
// autoFocusFirstInput
// modalProps={{
// destroyOnClose: true,
// onCancel: () => props.handleModal(),
// }}
// submitTimeout={2000}
// onFinish={async (values) => {
// console.log(2222, values)
// // postModelVersionCreateModelVersion(values).then(()=>{
// // message.success(intl.formatMessage({id: 'common.success', defaultMessage: '$$$'}))
// // props.reload()
// // }).catch(()=>{
// // message.error(intl.formatMessage({id: 'common.failure', defaultMessage: '$$$'}))
// // })
// // props.handleModal();
// return true;
// }}
// >
//
//
//
// </ModalForm>
);
};
export default MyCreateForm;

@ -1,32 +1,38 @@
import {ModalForm,ProForm} from '@ant-design/pro-components';import {ProFormSelect} from '@ant-design/pro-components';import {ProFormText} from '@ant-design/pro-components';import {ProFormSwitch} from '@ant-design/pro-components';import {ProFormDateTimePicker} from '@ant-design/pro-components';
import {FormattedMessage, useIntl} from '@umijs/max';
import {postAlgorithmModelGetAlgorithmModelFkSelect} from "@/services/resource/AlgorithmModel";
import {putModelVersionUpdateModelVersion} from "@/services/resource/ModelVersion";
import React, {useState} from 'react';
import {Button, Form, message} from 'antd';
import { postAlgorithmModelGetAlgorithmModelFkSelect } from '@/services/resource/AlgorithmModel';
import { putModelVersionUpdateModelVersion } from '@/services/resource/ModelVersion';
import {
ModalForm,
ProForm,
ProFormDateTimePicker,
ProFormSelect,
ProFormSwitch,
ProFormText,
} from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import React from 'react';
export type FormValueType = {
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.ModelVersion>;
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.ModelVersion>;
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.ModelVersion>;
reload: any;
};
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.ModelVersion>;
reload: any;
};
const UpdateForm: React.FC<UpdateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.ModelVersion>();
return (
<ModalForm<API.ModelVersion>
title={intl.formatMessage({
id: 'common.modal.table.update.title',
id: 'resource.model_version.table.list.update',
defaultMessage: '$$$',
})}
open={props.updateModalOpen}
@ -38,49 +44,195 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
}}
submitTimeout={2000}
onFinish={async (values) => {
putModelVersionUpdateModelVersion(values).then(()=>{
message.success(intl.formatMessage({id: 'common.success', defaultMessage: '$$$'}))
props.reload()
}).catch(()=>{
message.error(intl.formatMessage({id: 'common.failure', defaultMessage: '$$$'}))
})
putModelVersionUpdateModelVersion(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
props.handleModal();
return true;
}}
>
<ProForm.Group>
<ProFormText width="md" name="id" label="id" disabled={true} initialValue={props.values.id}/>
<ProFormSelect width="md" name="modelFkId" label={<FormattedMessage id="resource.model_version.table.list.modelFkId" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.modelFkId', defaultMessage: '$$$'})}`} required={true} initialValue={props.values.modelFkId} showSearch debounceTime={1000} request={async (keyWord)=>{
const resp = await postAlgorithmModelGetAlgorithmModelFkSelect({keyword: keyWord?.keyWords || ''})
return resp.data.list.map((v: any)=>{
return {
label: v.name,
value: v.id
}
})
}
}/>
<ProFormText width="md" name="version" label={<FormattedMessage id="resource.model_version.table.list.version" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.version', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.version} disabled={false}/>
<ProFormText width="md" name="path" label={<FormattedMessage id="resource.model_version.table.list.path" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.path', defaultMessage: '$$$'})}`} required={true} initialValue={props.values.path} disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.model_version.table.rule.required.path"
defaultMessage="path is required"
/>
),
},
]}
<ProForm.Group>
<ProFormText
width="md"
name="id"
label="id"
disabled={true}
initialValue={props.values.id}
/>
<ProFormSelect
width="md"
name="modelFkId"
label={
<FormattedMessage
id="resource.model_version.table.list.modelFkId"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.modelFkId',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.modelFkId}
showSearch
debounceTime={1000}
request={async (keyWord) => {
const resp = await postAlgorithmModelGetAlgorithmModelFkSelect({
keyword: keyWord?.keyWords || '',
});
return resp.data.list.map((v: any) => {
return {
label: v.name,
value: v.id,
};
});
}}
/>
<ProFormText
width="md"
name="version"
label={
<FormattedMessage id="resource.model_version.table.list.version" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.version',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.version}
disabled={false}
/>
<ProFormText
width="md"
name="path"
label={
<FormattedMessage id="resource.model_version.table.list.path" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.path',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.path}
disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.model_version.table.rule.required.path"
defaultMessage="path is required"
/>
<ProFormText width="md" name="startCode" label={<FormattedMessage id="resource.model_version.table.list.startCode" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.startCode', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.startCode} disabled={false}/>
<ProFormSwitch width="md" name="isEnable" label={<FormattedMessage id="resource.model_version.table.list.isEnable" defaultMessage="$$$"/>} initialValue={props.values.isEnable} disabled={false}/>
<ProFormText width="md" name="remark" label={<FormattedMessage id="resource.model_version.table.list.remark" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.remark', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.remark} disabled={false}/>
<ProFormDateTimePicker width="md" name="createTime" label={<FormattedMessage id="resource.model_version.table.list.createTime" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.createTime', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.createTime} disabled={true}/>
<ProFormDateTimePicker width="md" name="updateTime" label={<FormattedMessage id="resource.model_version.table.list.updateTime" defaultMessage="$$$"/>} placeholder={`${intl.formatMessage({id: 'common.please_input', defaultMessage: '$$$'})}${intl.formatMessage({id: 'resource.model_version.table.list.updateTime', defaultMessage: '$$$'})}`} required={false} initialValue={props.values.updateTime} disabled={true}/>
</ProForm.Group>
</ModalForm>)}
),
},
]}
/>
<ProFormText
width="md"
name="startCode"
label={
<FormattedMessage
id="resource.model_version.table.list.startCode"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.startCode',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.startCode}
disabled={false}
/>
<ProFormSwitch
width="md"
name="isEnable"
label={
<FormattedMessage
id="resource.model_version.table.list.isEnable"
defaultMessage="$$$"
/>
}
initialValue={props.values.isEnable}
disabled={false}
/>
<ProFormText
width="md"
name="remark"
label={
<FormattedMessage id="resource.model_version.table.list.remark" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.remark',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.remark}
disabled={false}
/>
<ProFormDateTimePicker
width="md"
name="createTime"
label={
<FormattedMessage
id="resource.model_version.table.list.createTime"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.createTime',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.createTime}
disabled={true}
/>
<ProFormDateTimePicker
width="md"
name="updateTime"
label={
<FormattedMessage
id="resource.model_version.table.list.updateTime"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.model_version.table.list.updateTime',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.updateTime}
disabled={true}
/>
</ProForm.Group>
</ModalForm>
);
};
export default UpdateForm;

@ -11,22 +11,25 @@ import {
deleteModelVersionDeleteModelVersionByIds,
postModelVersionGetModelVersionList,
} from '@/services/resource/ModelVersion';
import { DownOutlined, PlusOutlined } from '@ant-design/icons';
import { PlusOutlined } from '@ant-design/icons';
import type { ActionType, ProColumns } from '@ant-design/pro-components';
import { FooterToolbar, PageContainer, ProFormSelect, ProTable } from '@ant-design/pro-components';
import { Access, FormattedMessage, history, useAccess, useIntl } from '@umijs/max';
import { Button, Dropdown, Popconfirm, message } from 'antd';
import { Button, Popconfirm, message } from 'antd';
// import { MenuProps } from 'rc-menu';
import TableActionCard from '@/components/TableActionCard';
import React, { useRef, useState } from 'react';
import { proTableCommonOptions } from '../../../../config/defaultTable';
import { ColumnDrawer } from './components/ColumnDrawer';
import MyCreateForm from './components/MyCreateForm';
import UpdateForm from './components/UpdateForm';
const ModelVersionList: React.FC = () => {
/**
* @en-US Pop-up window of new window
* @zh-CN
* */
const [publishModalOpen, setPublishModalOpen] = useState<boolean>(false);
// const [publishModalOpen, setPublishModalOpen] = useState<boolean>(false);
const [createModalOpen, setCreateModalOpen] = useState<boolean>(false);
/**
@ -85,14 +88,14 @@ const ModelVersionList: React.FC = () => {
setUpdateModalOpen(true);
}
};
const handlePublishModal = () => {
if (publishModalOpen) {
setPublishModalOpen(false);
setCurrentRow(undefined);
} else {
setPublishModalOpen(true);
}
};
// const handlePublishModal = () => {
// if (publishModalOpen) {
// setPublishModalOpen(false);
// setCurrentRow(undefined);
// } else {
// setPublishModalOpen(true);
// }
// };
const handleCreateModal = () => {
if (createModalOpen) {
setCreateModalOpen(false);
@ -119,74 +122,15 @@ const ModelVersionList: React.FC = () => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
};
//TODO 表单的操作按钮集合
type TableActionItemProps = {
renderActions: any[];
};
const TableActionCard: React.FC<TableActionItemProps> = (props) => {
const { renderActions } = props;
const maxActionCount = 3;
if (renderActions.length <= maxActionCount) {
return renderActions.map((item) => {
return <>{item}</>;
});
}
const prevActions: any[] = [];
const moreActions: { key: string; label: any }[] = [];
renderActions.map((item, index) => {
if (index < maxActionCount - 1) {
prevActions.push(item);
} else {
moreActions.push({
key: index + '',
label: item,
});
}
// eslint-disable-next-line react/jsx-key
});
return (
<>
{prevActions.map((item, index) => {
return <div key={index}>{item}</div>;
})}
<Dropdown menu={{ items: moreActions }}>
<a>
<DownOutlined />
</a>
</Dropdown>
</>
);
};
const columns: ProColumns<API.ModelVersion>[] = [
{
title: <FormattedMessage id="resource.model_version.table.list.id" defaultMessage="id" />,
dataIndex: 'id',
sorter: true,
width: 100,
fixed: 'left',
render: (dom, entity) => {
return (
<a
onClick={() => {
setCurrentRow(entity);
setShowDetail(true);
}}
>
{dom}
</a>
);
},
},
{
title: (
<FormattedMessage id="resource.model_version.table.list.modelFkId" defaultMessage="$$$" />
),
dataIndex: 'modelFkId',
key: 'fixedModelFkId',
fixed: 'left',
hideInSearch: false,
render: (text, record) => {
if (model_fk_id_column_open) {
@ -237,6 +181,24 @@ const ModelVersionList: React.FC = () => {
);
},
},
{
title: <FormattedMessage id="resource.model_version.table.list.id" defaultMessage="id" />,
dataIndex: 'id',
sorter: true,
width: 100,
render: (dom, entity) => {
return (
<a
onClick={() => {
setCurrentRow(entity);
setShowDetail(true);
}}
>
{dom}
</a>
);
},
},
{
title: (
@ -379,7 +341,7 @@ const ModelVersionList: React.FC = () => {
type="link"
size="small"
onClick={() => {
setPublishModalOpen(true);
// setPublishModalOpen(true);
setCurrentRow(record);
}}
>
@ -406,69 +368,6 @@ const ModelVersionList: React.FC = () => {
</Popconfirm>,
]}
></TableActionCard>
{/* <a
key="update"
onClick={() => {
setUpdateModalOpen(true);
setCurrentRow(record);
}}
>
<FormattedMessage id="pages.searchTable.update" defaultMessage="Update" />
</a>
<a
key="destroy"
onClick={() => {
handleDestroy(record).then(() => {});
}}
>
<FormattedMessage id="pages.searchTable.destroy" defaultMessage="Destroy" />
</a> */}
{/* <Popconfirm
title="发布模型"
description="确认发布模型吗?"
onConfirm={()=>{}}
onCancel={()=>{}}
okText="Yes"
cancelText="No"
>
<a
key="confirm_publish"
onClick={() => {
setPublishModalOpen(true);
setCurrentRow(record);
}}>
<FormattedMessage
id="common.confirm_publish"
defaultMessage="confirm_publish"
/>
</a>
</Popconfirm>
<Popconfirm
title="设置为默认版本"
description="确认设置为默认版本吗?"
onConfirm={()=>{
putAlgorithmModelUpdateAlgorithmModel({id: record.modelFkId, defaultVersionFkId: record.id}).then(()=>{
message.success(intl.formatMessage({id: 'common.success', defaultMessage: '$$$'}))
}).catch(()=>{
message.error(intl.formatMessage({id: 'common.failure', defaultMessage: '$$$'}))
})
}}
onCancel={()=>{}}
okText="Yes"
cancelText="No"
>
<a
key="set_default"
onClick={() => {
}}>
<FormattedMessage
id="common.set_default"
defaultMessage="$$$"
/>
</a>
</Popconfirm> */}
</Access>,
],
},
@ -480,13 +379,12 @@ const ModelVersionList: React.FC = () => {
id: 'pages.searchTable.title',
defaultMessage: '$$$',
})}
fixedHeader={true}
options={{ fullScreen: true, setting: true, density: true, reload: true }}
actionRef={actionRef}
rowKey="key"
scroll={{ x: 1300 }}
scroll={{ x: proTableCommonOptions.commscrollX, y: proTableCommonOptions.commscrollY }}
search={{
labelWidth: 120,
labelWidth: proTableCommonOptions.searchLabelWidth,
}}
onDataSourceChange={(data) => {
let ModelFkIdIds: any = data.map((v) => {

@ -70,11 +70,11 @@ const AlgorithmSetting: React.FC = () => {
];
const columns = [
{
title: <FormattedMessage id="device.device_group.table.list.id" defaultMessage="id" />,
dataIndex: 'id',
sorter: true,
},
// {
// title: <FormattedMessage id="device.device_group.table.list.id" defaultMessage="id" />,
// dataIndex: 'id',
// sorter: true,
// },
{
title: <FormattedMessage id="device.device_group.table.list.name" defaultMessage="$$$" />,
@ -82,54 +82,6 @@ const AlgorithmSetting: React.FC = () => {
hideInSearch: true,
},
{
title: <FormattedMessage id="device.device_group.table.list.code" defaultMessage="$$$" />,
dataIndex: 'code',
hideInSearch: true,
},
{
title: <FormattedMessage id="device.device_group.table.list.address" defaultMessage="$$$" />,
dataIndex: 'address',
hideInSearch: true,
},
{
title: (
<FormattedMessage id="device.device_group.table.list.telephone" defaultMessage="$$$" />
),
dataIndex: 'telephone',
hideInSearch: true,
},
{
title: <FormattedMessage id="device.device_group.table.list.lon" defaultMessage="$$$" />,
dataIndex: 'lon',
hideInSearch: true,
},
{
title: <FormattedMessage id="device.device_group.table.list.lat" defaultMessage="$$$" />,
dataIndex: 'lat',
hideInSearch: true,
},
{
title: (
<FormattedMessage id="device.device_group.table.list.managerName" defaultMessage="$$$" />
),
dataIndex: 'managerName',
hideInSearch: true,
},
{
title: (
<FormattedMessage id="device.device_group.table.list.managerPhone" defaultMessage="$$$" />
),
dataIndex: 'managerPhone',
hideInSearch: true,
},
{
title: <FormattedMessage id="device.device_group.table.list.isEnable" defaultMessage="$$$" />,
dataIndex: 'isEnable',
@ -139,12 +91,6 @@ const AlgorithmSetting: React.FC = () => {
valueType: 'switch',
},
{
title: <FormattedMessage id="device.device_group.table.list.remark" defaultMessage="$$$" />,
dataIndex: 'remark',
hideInSearch: true,
},
{
title: (
<FormattedMessage id="device.device_group.table.list.createTime" defaultMessage="$$$" />
@ -164,9 +110,64 @@ const AlgorithmSetting: React.FC = () => {
hideInSearch: true,
valueType: 'dateTime',
},
{
title: <FormattedMessage id="device.device_group.table.list.code" defaultMessage="$$$" />,
dataIndex: 'code',
hideInSearch: true,
},
{
title: <FormattedMessage id="device.device_group.table.list.address" defaultMessage="$$$" />,
dataIndex: 'address',
hideInSearch: true,
},
// {
// title: (
// <FormattedMessage id="device.device_group.table.list.telephone" defaultMessage="$$$" />
// ),
// dataIndex: 'telephone',
// hideInSearch: true,
// },
// {
// title: <FormattedMessage id="device.device_group.table.list.lon" defaultMessage="$$$" />,
// dataIndex: 'lon',
// hideInSearch: true,
// },
// {
// title: <FormattedMessage id="device.device_group.table.list.lat" defaultMessage="$$$" />,
// dataIndex: 'lat',
// hideInSearch: true,
// },
// {
// title: (
// <FormattedMessage id="device.device_group.table.list.managerName" defaultMessage="$$$" />
// ),
// dataIndex: 'managerName',
// hideInSearch: true,
// },
// {
// title: (
// <FormattedMessage id="device.device_group.table.list.managerPhone" defaultMessage="$$$" />
// ),
// dataIndex: 'managerPhone',
// hideInSearch: true,
// },
// {
// title: <FormattedMessage id="device.device_group.table.list.remark" defaultMessage="$$$" />,
// dataIndex: 'remark',
// hideInSearch: true,
// },
];
// TODO 操作左侧网点数据节点, 项目列表数据变更
// TODO 左侧图标目前写死,需替换
// 操作左侧网点数据节点, 项目列表数据变更
function fetchProjectByGroupId(record: Record<string, any>) {
// console.log('clickTreeNode', projectCardListRef.current)
postProjectGetProjectByGroupId({ id: record.id }).then((resp) => {
@ -174,9 +175,17 @@ const AlgorithmSetting: React.FC = () => {
console.log(resp.data.list);
let model_data = ([...v?.models] || []).map((item: any) => ({
content: (
<ProCard bodyStyle={{ margin: 0, padding: 0 }}>
<ProCard
style={{ backgroundColor: 'transparent' }}
bodyStyle={{ margin: 0, padding: 0 }}
>
<div
style={{ display: 'flex', alignItems: 'center', padding: 15, justifyContent: 'space-between' }}
style={{
display: 'flex',
alignItems: 'center',
padding: 15,
justifyContent: 'space-between',
}}
>
<div>
<div>{JSON.stringify(item.configId)}</div>
@ -184,15 +193,15 @@ const AlgorithmSetting: React.FC = () => {
</div>
<Button
type="link"
size='small'
size="small"
key={item.configId}
style={{padding: 0}}
style={{ padding: 0 }}
onClick={() => {
setProjectConfigId(item.configId);
handleUpdateModal();
}}
>
</Button>
</div>
<ProjectCard info={item}></ProjectCard>
@ -206,11 +215,11 @@ const AlgorithmSetting: React.FC = () => {
key: v.id,
children: (
<ProList<any>
className='gn'
className="gn"
ghost={true}
itemCardProps={{
ghost: true,
bodyStyle: { padding: 0, margin: 0 },
bodyStyle: { padding: 0, margin: 0 },
}}
pagination={{
defaultPageSize: 6,
@ -238,37 +247,45 @@ const AlgorithmSetting: React.FC = () => {
});
}
// TODO 操作项目列表数据类别切换, 项目列表数据变更
// TODO 需联调
// 操作项目列表数据类别切换, 项目列表数据变更
function changeProjectTab(key: React.SetStateAction<string>) {
let model_ids = projectData[key]?.inferConfig?.models || [];
postModelVersionGetModelVersionListByIds({ ids: model_ids }).then((resp) => {
let version_model_data = (resp?.data?.list || []).map((item: Record<string, any>) => {
return {
subTitle: <Tag color="#5BD8A6"></Tag>,
subTitle: <Tag color="#5BD8A6"></Tag>,
avatar: 'https://gw.alipayobjects.com/zos/antfincdn/UCSiy1j6jx/xingzhuang.svg',
content: <ProCard bodyStyle={{ margin: 0, padding: 0 }}>
<div
style={{ display: 'flex', alignItems: 'center', padding: 15, justifyContent: 'space-between' }}
>
<div>
<div>{JSON.stringify(item.configId)}</div>
<img src="/images/model.png" alt="" style={{ width: '50px' }} />
</div>
<Button
type="link"
size='small'
key={item.configId}
style={{padding: 0}}
onClick={() => {
setProjectConfigId(item.configId);
handleUpdateModal();
}}
>
</Button>
</div>
<ProjectCard info={item}></ProjectCard>
</ProCard>,
content: (
<ProCard bodyStyle={{ margin: 0, padding: 0 }}>
<div
style={{
display: 'flex',
alignItems: 'center',
padding: 15,
justifyContent: 'space-between',
}}
>
<div>
<div>{JSON.stringify(item.configId)}</div>
<img src="/images/model.png" alt="" style={{ width: '50px' }} />
</div>
<Button
type="link"
size="small"
key={item.configId}
style={{ padding: 0 }}
onClick={() => {
setProjectConfigId(item.configId);
handleUpdateModal();
}}
>
</Button>
</div>
<ProjectCard info={item}></ProjectCard>
</ProCard>
),
};
});
setModelVersionData(version_model_data);
@ -294,7 +311,7 @@ const AlgorithmSetting: React.FC = () => {
<ProCard
title="网点选择"
colSpan="24%"
bodyStyle={{padding: 0, margin: 0}}
bodyStyle={{ padding: 0, margin: 0 }}
extra={
<Button
icon={<RedoOutlined />}
@ -369,16 +386,16 @@ const AlgorithmSetting: React.FC = () => {
}}
columns={columns1}
rowSelection={{
onChange: (_, selectedRows) => {
// setSelectedRows(selectedRows);
},
// onChange: (_, selectedRows) => {
// // setSelectedRows(selectedRows);
// },
}}
/>
</ProCard>
<ProCard title="" headerBordered split={'horizontal'}>
<ProCard colSpan="80%">
<ProDescriptions
column={2}
column={4}
dataSource={currentRow}
title="网点详细信息"
tooltip="包含了从服务器请求columns等功能"

Loading…
Cancel
Save