blob: 2db5de46b0651a9beb85562403e8eb36386264bf [file] [log] [blame]
import React, { Fragment, useEffect, useRef, useState } from 'react';
import type { GenCodeType } from '../data';
import { Button, Checkbox, Col, Row, Tag } from 'antd';
import type { FormInstance } from 'antd';
import { history } from '@umijs/max';
import styles from '../style.less';
import { EditableProTable, ProColumns } from '@ant-design/pro-components';
export type ColumnInfoProps = {
parentType?: string;
data?: any[];
dictData?: any[];
onStepSubmit?: any;
};
const booleanEnum = [
{
label: 'true',
value: '1',
},
{
label: 'false',
value: '0',
},
];
const ColumnInfo: React.FC<ColumnInfoProps> = (props) => {
const formRef = useRef<FormInstance>();
const [dataSource, setDataSource] = useState<any[]>();
const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
const { data, dictData, onStepSubmit } = props;
const columns: ProColumns<GenCodeType>[] = [
{
title: '编号',
dataIndex: 'columnId',
editable: false,
width: 80,
},
{
title: '字段名',
dataIndex: 'columnName',
editable: false,
},
{
title: '字段描述',
dataIndex: 'columnComment',
hideInForm: true,
hideInSearch: true,
width: 200,
},
{
title: '字段类型',
dataIndex: 'columnType',
editable: false,
},
{
title: 'Java类型',
dataIndex: 'javaType',
valueType: 'select',
valueEnum: {
Long: {
text: 'Long',
},
String: {
text: 'String',
},
Integer: {
text: 'Integer',
},
Double: {
text: 'Double',
},
BigDecimal: {
text: 'BigDecimal',
},
Date: {
text: 'Date',
},
},
},
{
title: 'Java属性',
dataIndex: 'javaField',
},
{
title: '插入',
dataIndex: 'isInsert',
valueType: 'select',
fieldProps: {
options: booleanEnum,
},
render: (_, record) => {
return <Checkbox checked={record.isInsert === '1'} />;
},
},
{
title: '编辑',
dataIndex: 'isEdit',
valueType: 'select',
fieldProps: {
options: booleanEnum,
},
render: (_, record) => {
return <Checkbox checked={record.isEdit === '1'} />;
},
},
{
title: '列表',
dataIndex: 'isList',
valueType: 'select',
fieldProps: {
options: booleanEnum,
},
render: (_, record) => {
return <Checkbox checked={record.isList === '1'} />;
},
},
{
title: '查询',
dataIndex: 'isQuery',
valueType: 'select',
fieldProps: {
options: booleanEnum,
},
render: (_, record) => {
return <Checkbox checked={record.isQuery === '1'} />;
},
},
{
title: '查询方式',
dataIndex: 'queryType',
valueType: 'select',
valueEnum: {
EQ: {
text: '=',
},
NE: {
text: '!=',
},
GT: {
text: '>',
},
GTE: {
text: '>=',
},
LT: {
text: '<',
},
LTE: {
text: '<=',
},
LIKE: {
text: 'LIKE',
},
BETWEEN: {
text: 'BETWEEN',
},
},
},
{
title: '必填',
dataIndex: 'isRequired',
valueType: 'select',
fieldProps: {
options: booleanEnum,
},
render: (_, record) => {
return <Checkbox checked={record.isRequired === '1'} />;
},
},
{
title: '显示类型',
dataIndex: 'htmlType',
hideInSearch: true,
valueType: 'select',
valueEnum: {
input: {
text: '文本框',
},
textarea: {
text: '文本域',
},
select: {
text: '下拉框',
},
radio: {
text: '单选框',
},
checkbox: {
text: '复选框',
},
datetime: {
text: '日期控件',
},
imageUpload: {
text: '图片上传',
},
fileUpload: {
text: '文件上传',
},
editor: {
text: '富文本控件',
},
},
},
{
title: '字典类型',
dataIndex: 'dictType',
hideInSearch: true,
valueType: 'select',
fieldProps: {
options: dictData,
},
render: (text) => {
return <Tag color="#108ee9">{text}</Tag>;
},
},
];
useEffect(() => {
setDataSource(data);
if (data) {
setEditableRowKeys(data.map((item) => item.columnId));
}
}, [data]);
const onSubmit = (direction: string) => {
if (onStepSubmit) {
onStepSubmit('column', dataSource, direction);
}
};
const onDataChange = (value: readonly GenCodeType[]) => {
setDataSource({ ...value } as []);
};
return (
<Fragment>
<Row>
<Col span={24}>
<EditableProTable<GenCodeType>
formRef={formRef}
rowKey="columnId"
search={false}
columns={columns}
value={dataSource}
editable={{
type: 'multiple',
editableKeys,
onChange: setEditableRowKeys,
actionRender: (row, config, defaultDoms) => {
return [defaultDoms.delete];
},
onValuesChange: (record, recordList) => {
setDataSource(recordList);
},
}}
onChange={onDataChange}
recordCreatorProps={false}
/>
</Col>
</Row>
<Row justify="center">
<Col span={4}>
<Button
type="primary"
onClick={() => {
history.back();
}}
>
返回
</Button>
</Col>
<Col span={4}>
<Button
type="primary"
className={styles.step_buttons}
onClick={() => {
onSubmit('prev');
}}
>
上一步
</Button>
</Col>
<Col span={4}>
<Button
type="primary"
onClick={() => {
onSubmit('next');
}}
>
下一步
</Button>
</Col>
</Row>
</Fragment>
);
};
export default ColumnInfo;