Commit 2ecb0e30 by zhaochengxiang

bug fix

parent 2a8d620e
import React from 'react' import React from 'react'
import { Button, Modal, Spin, Space, Divider, Form, Row, Col, Input, Select, Checkbox, Radio, Switch, TimePicker } from 'antd' import { Button, Modal, Spin, Space, Divider, Form, Row, Col, Input, Select, Checkbox, Radio, Switch, TimePicker, Tooltip } from 'antd'
import { useClickAway } from 'ahooks' import { useClickAway } from 'ahooks'
import moment from 'moment' import moment from 'moment'
import { dispatch } from '../../../model' import { dispatch } from '../../../model'
import Table from '../../../util/Component/Table' import Table from '../../../util/Component/Table'
import { saveColumns } from '../../../service/msd'
import { showMessage } from '../../../util'
const FC = (props) => { const FC = (props) => {
const { visible, type, item, onCancel} = props const { visible, type, item, onCancel} = props
...@@ -354,6 +356,7 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) { ...@@ -354,6 +356,7 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) {
const [selectedRows, setSelectedRows] = React.useState() const [selectedRows, setSelectedRows] = React.useState()
const [tableData, setTableData] = React.useState() const [tableData, setTableData] = React.useState()
const [editingKey, setEditingKey] = React.useState('') const [editingKey, setEditingKey] = React.useState('')
const [editingModelKey, setEditingModelKey] = React.useState('')
const [form] = Form.useForm() const [form] = Form.useForm()
const tableRef = React.useRef() const tableRef = React.useRef()
...@@ -365,16 +368,16 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) { ...@@ -365,16 +368,16 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) {
}, tableRef) }, tableRef)
React.useEffect(() => { React.useEffect(() => {
if (type === 'edit') { if (type !== 'detail') {
getPropertyTypes() getPropertyTypes()
} }
}, [type]) }, [type])
const selectablePropertyTypes = React.useMemo(() => { const selectablePropertyTypes = React.useMemo(() => {
return (propertyTypes??[]).filter(item => return (propertyTypes??[]).filter(item =>
(tableData??[]).map(_item => _item.modelType?.name).indexOf(item.modelType?.name) (tableData??[]).map(_item => _item.modelType?.name).indexOf(item.modelType?.name)===-1 || item.modelType?.name === editingKey
) )
}, [propertyTypes, tableData]) }, [propertyTypes, tableData, editingKey])
const getPropertyTypes = () => { const getPropertyTypes = () => {
setLoadingPropertyTypes(true) setLoadingPropertyTypes(true)
...@@ -391,15 +394,130 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) { ...@@ -391,15 +394,130 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) {
} }
const save = async () => { const save = async () => {
if (!editingKey) return
try { try {
await form.validateFields() const rows = await form.validateFields()
const index = (tableData??[]).findIndex(item => item.modelType?.name === editingKey)
const modelIndex = (propertyTypes??[]).findIndex(item => item.modelType?.name === rows.modelType)
if (modelIndex !== -1) {
const operatorIndex = (propertyTypes[modelIndex].supportedOperatorTypes??[]).findIndex(item => item.id === rows.operatorType)
const metadataIndex = (propertyTypes[modelIndex].supportedMetadataTypes??[]).findIndex(item => item.name === rows.metadataType)
if (operatorIndex !== -1 && metadataIndex !== -1) {
setTableData(prevTableData => {
let newTableData = [...prevTableData??[]];
(newTableData??[]).splice(index, 1, {
modelType: propertyTypes[modelIndex].modelType,
operatorType: propertyTypes[modelIndex].supportedOperatorTypes[operatorIndex],
metadataType: propertyTypes[modelIndex].supportedMetadataTypes[metadataIndex],
});
return newTableData;
})
}
}
setEditingKey()
} catch (e) { } catch (e) {
throw new Error()
}
}
const onAddClick = async (e) => {
e.stopPropagation()
try {
await save()
if (
(selectablePropertyTypes??[]).length>0
&& (selectablePropertyTypes[0].supportedOperatorTypes??[]).length>0
&& (selectablePropertyTypes[0].supportedMetadataTypes??[]).length>0
) {
setTableData(prevTableData => {
return [...prevTableData??[], {
modelType: selectablePropertyTypes[0].modelType,
operatorType: selectablePropertyTypes[0].supportedOperatorTypes[0],
metadataType: selectablePropertyTypes[0].supportedMetadataTypes[0],
}]
})
setEditingKey(selectablePropertyTypes[0].modelType?.name)
setEditingModelKey(selectablePropertyTypes[0].modelType?.name)
form?.setFieldsValue({
modelType: selectablePropertyTypes[0].modelType?.name,
operatorType: selectablePropertyTypes[0].supportedOperatorTypes[0].id,
metadataType: selectablePropertyTypes[0].supportedMetadataTypes[0].name,
})
} else {
showMessage('warn', '模型属性都设置了策略')
}
} catch(e) {
}
}
const onBatchDeleteClick = () => {
setTableData(prevTableData => {
let newTableData = [...prevTableData??[]];
newTableData = (newTableData??[]).filter(item => (selectedRows??[]).map(_item => _item.modelType?.name).indexOf(item?.modelType?.name)===-1);
return newTableData;
})
const index = (selectedRows??[]).findIndex(item => item.modelType?.type === editingKey)
if (index !== -1) {
setEditingKey()
} }
setSelectedRows()
}
// const onRightEditClick = async (record) => {
// try {
// await save()
// setEditingKey(record?.modelType?.name)
// setEditingModelKey(record?.modelType?.name)
// } catch(e) {
// }
// }
const onRightDeleteClick = (record) => {
if (isEditing(record)) {
setEditingKey()
}
setTableData(prevTableData => {
let newTableData = [...prevTableData??[]];
const index = (newTableData??[]).findIndex(item => item.modelType?.name === record?.modelType?.name);
(newTableData??[]).splice(index, 1);
return newTableData;
})
} }
const onRightMenuItemClick = (key, record) => { const onRightMenuItemClick = (key, record) => {
if (key === '删除') {
onRightDeleteClick(record)
}
}
const onValuesChange = (changedValues, allValues) => {
if (changedValues.hasOwnProperty('modelType')) {
setEditingModelKey(changedValues['modelType'])
const index = (selectablePropertyTypes??[]).findIndex(item => item.modelType?.name === changedValues['modelType'])
if (index !== -1
&& (selectablePropertyTypes[index].supportedOperatorTypes??[]).length>0
&& (selectablePropertyTypes[index].supportedMetadataTypes??[]).length>0
) {
form?.setFieldsValue({
operatorType: selectablePropertyTypes[index].supportedOperatorTypes[0].id,
metadataType: selectablePropertyTypes[index].supportedMetadataTypes[0].name,
})
}
}
} }
const columns = [ const columns = [
...@@ -408,13 +526,13 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) { ...@@ -408,13 +526,13 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) {
dataIndex: 'index', dataIndex: 'index',
width:60, width:60,
editable: false, editable: false,
// render:(_, __, index)=> ((args.page-1)*args.size+index+1) render:(_, __, index)=> (index+1)
}, },
{ {
title: '模型属性', title: '模型属性',
dataIndex: 'modelType', dataIndex: 'modelType',
editable: true, editable: true,
render: (_, record) => record.modelType?.name render: (_, record) => record.modelType?.cnName
}, },
{ {
title: '匹配规则', title: '匹配规则',
...@@ -426,7 +544,7 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) { ...@@ -426,7 +544,7 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) {
title: '元数据属性', title: '元数据属性',
dataIndex: 'metadataType', dataIndex: 'metadataType',
editable: true, editable: true,
render: (_, record) => record.metadataType?.name render: (_, record) => record.metadataType?.cnName
}, },
] ]
...@@ -438,10 +556,11 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) { ...@@ -438,10 +556,11 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) {
...col, ...col,
onCell: (record) => ({ onCell: (record) => ({
record, record,
inputType: 'select',
dataIndex: col.dataIndex, dataIndex: col.dataIndex,
title: col.title, title: col.title,
editing: isEditing(record), editing: isEditing(record),
editingModelKey,
propertyTypes: selectablePropertyTypes,
}), }),
} }
}) })
...@@ -449,19 +568,22 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) { ...@@ -449,19 +568,22 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) {
return ( return (
<Spin spinning={loadingPropertyTypes}> <Spin spinning={loadingPropertyTypes}>
<div> <div>
<Space> <Space className='mb-3'>
<Button>新建</Button> <Button onClick={onAddClick}>新建</Button>
<Button>删除</Button> <Tooltip title={(selectedRows??[]).length===0?'请先选择对比策略':''}>
<Button disabled={(selectedRows??[]).length===0} onClick={onBatchDeleteClick}>删除</Button>
</Tooltip>
</Space> </Space>
<div ref={tableRef}> <div ref={tableRef}>
<Form form={form} component={false}> <Form onValuesChange={onValuesChange} form={form} component={false}>
<Table <Table
rowKey={(record) => record?.modelType?.name}
extraColWidth={32} extraColWidth={32}
columns={mergedColumns??[]} columns={mergedColumns??[]}
dataSource={tableData??[]} dataSource={tableData??[]}
bodyCell={EditableCell} bodyCell={EditableCell}
rowSelection={{ rowSelection={{
selectedRowKeys: (selectedRows??[]).map(item => item.id), selectedRowKeys: (selectedRows??[]).map(item => item.modelType?.name),
onChange: (selectedRowKeys, selectedRows) => { onChange: (selectedRowKeys, selectedRows) => {
setSelectedRows(selectedRows) setSelectedRows(selectedRows)
}, },
...@@ -470,8 +592,8 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) { ...@@ -470,8 +592,8 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) {
shouldRowContextMenu={(record) => { shouldRowContextMenu={(record) => {
return true return true
}} }}
menuData={['执行', '编辑', '删除']} menuData={['删除']}
menuPermissions={['执行', '编辑', '删除']} menuPermissions={['删除']}
onMenuItemClick={onRightMenuItemClick} onMenuItemClick={onRightMenuItemClick}
/> />
</Form> </Form>
...@@ -483,17 +605,44 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) { ...@@ -483,17 +605,44 @@ const Strategy = React.forwardRef(function ({ type, task }, ref) {
const EditableCell = ({ const EditableCell = ({
editing, editing,
editingModelKey,
dataIndex, dataIndex,
title, title,
propertyTypes,
record, record,
index, index,
inputNode,
children, children,
...restProps ...restProps
}) => { }) => {
const data = React.useMemo(() => {
if (title === '模型属性') {
return (propertyTypes??[]).map(item => ({
id: item.modelType?.name,
name: item.modelType?.cnName,
}))
}
const index = (propertyTypes??[]).findIndex(item => item.modelType?.name === editingModelKey)
if (index !== -1) {
const currentPropertyType = propertyTypes[index]
if (title === '匹配规则') {
return currentPropertyType.supportedOperatorTypes
}
if (title === '元数据属性') {
return currentPropertyType.supportedMetadataTypes.map(item => ({
id: item.name,
name: item.cnName,
}))
}
}
return []
}, [title, propertyTypes, editingModelKey])
return ( return (
<td {...restProps}> <td {...restProps}>
{editing ? ( {editing ? (
<div onClick={e => { e.stopPropagation() }}>
<Form.Item <Form.Item
name={dataIndex} name={dataIndex}
style={{ style={{
...@@ -506,8 +655,11 @@ const EditableCell = ({ ...@@ -506,8 +655,11 @@ const EditableCell = ({
}, },
]} ]}
> >
{inputNode} <Select>
{(data??[]).map(item => <Select.Option key={item.id} value={item.id} >{item.name}</Select.Option>)}
</Select>
</Form.Item> </Form.Item>
</div>
) : ( ) : (
children children
)} )}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment