Commit 91e55e5c by zhaochengxiang

模型效验

parent c957e96b
...@@ -113,3 +113,7 @@ export function* exportDDLString(payload) { ...@@ -113,3 +113,7 @@ export function* exportDDLString(payload) {
export function* exportERWinString(payload) { export function* exportERWinString(payload) {
return yield call(datamodelerService.exportERWinString, payload); return yield call(datamodelerService.exportERWinString, payload);
} }
export function* validateDataModel(payload) {
return yield call(datamodelerService.validateDataModel, payload);
}
...@@ -52,7 +52,7 @@ export function suggest(payload) { ...@@ -52,7 +52,7 @@ export function suggest(payload) {
//保存模型 //保存模型
export function saveDataModel(payload) { export function saveDataModel(payload) {
return Post("/datamodeler/easyDataModelerCURD/saveDataModel", payload); return PostJSON("/datamodeler/easyDataModelerCURD/saveDataModel", payload);
} }
export function deleteDataModel(payload) { export function deleteDataModel(payload) {
...@@ -74,3 +74,7 @@ export function exportDDLString(payload) { ...@@ -74,3 +74,7 @@ export function exportDDLString(payload) {
export function exportERWinString(payload) { export function exportERWinString(payload) {
return GetJSON("/datamodeler/easyDataModelerExport/erWinPluginString", payload); return GetJSON("/datamodeler/easyDataModelerExport/erWinPluginString", payload);
} }
export function validateDataModel(payload) {
return PostJSON("/datamodeler/easyDataModelerConstraint/validateDataModel", payload);
}
...@@ -18,6 +18,7 @@ const ImportAction = (props) => { ...@@ -18,6 +18,7 @@ const ImportAction = (props) => {
const [ template, setTemplate ] = useState({}); const [ template, setTemplate ] = useState({});
const [ modelerData, setModelerData ] = useState(null); const [ modelerData, setModelerData ] = useState(null);
const [ supportedDatatypes, setSupportedDatatypes ] = useState([]); const [ supportedDatatypes, setSupportedDatatypes ] = useState([]);
const [ validateReports, setValidateReports ] = useState([]);
const mountRef = useRef(); const mountRef = useRef();
mountRef.current = true; mountRef.current = true;
...@@ -38,7 +39,7 @@ const ImportAction = (props) => { ...@@ -38,7 +39,7 @@ const ImportAction = (props) => {
if (action === 'detail') { if (action === 'detail') {
getCurrentDataModel(); getCurrentDataModel();
} else { } else {
dispatchLatest({ dispatch({
type: 'datamodel.getAllConstraintsAndTemplates', type: 'datamodel.getAllConstraintsAndTemplates',
callback: data => { callback: data => {
setConstraints(data.constraints||[]); setConstraints(data.constraints||[]);
...@@ -57,7 +58,7 @@ const ImportAction = (props) => { ...@@ -57,7 +58,7 @@ const ImportAction = (props) => {
}, [action, hints, modelerId ]); }, [action, hints, modelerId ]);
const getDraft = (_constraint, _template, _hints) => { const getDraft = (_constraint, _template, _hints) => {
dispatchLatest({ dispatch({
type: 'datamodel.getDraft', type: 'datamodel.getDraft',
payload: { payload: {
data: { data: {
...@@ -87,8 +88,11 @@ const ImportAction = (props) => { ...@@ -87,8 +88,11 @@ const ImportAction = (props) => {
}, },
callback: data => { callback: data => {
setModelerData(data||{}); setModelerData(data||{});
setConstraint(data.easyDataModelerModelingConstraint||{});
setTemplate(data.easyDataModelerModelingTemplate||{});
onChange && onChange(data||{}); onChange && onChange(data||{});
getSupportedDatatypes(); getSupportedDatatypes();
validateDataModel(data||{});
if (action === 'edit') { if (action === 'edit') {
form.setFieldsValue({ form.setFieldsValue({
...@@ -110,6 +114,10 @@ const ImportAction = (props) => { ...@@ -110,6 +114,10 @@ const ImportAction = (props) => {
} }
}); });
const newModelerData = {...modelerData, easyDataModelerModelingConstraint: currentConstraint };
setModelerData(newModelerData)
onChange && onChange(newModelerData);
(modelerData.easyDataModelerDataModelAttributes||[]).forEach((_attribute, index) => { (modelerData.easyDataModelerDataModelAttributes||[]).forEach((_attribute, index) => {
if (_attribute.name && _attribute.name!=='') { if (_attribute.name && _attribute.name!=='') {
_hints.push(_attribute.cnName); _hints.push(_attribute.cnName);
...@@ -129,6 +137,10 @@ const ImportAction = (props) => { ...@@ -129,6 +137,10 @@ const ImportAction = (props) => {
} }
}); });
const newModelerData = {...modelerData, easyDataModelerModelingTemplate: currentTemplate };
setModelerData(newModelerData)
onChange && onChange(newModelerData);
(modelerData.easyDataModelerDataModelAttributes||[]).forEach((_attribute, index) => { (modelerData.easyDataModelerDataModelAttributes||[]).forEach((_attribute, index) => {
if (_attribute.name && _attribute.name!=='') { if (_attribute.name && _attribute.name!=='') {
_hints.push(_attribute.cnName); _hints.push(_attribute.cnName);
...@@ -148,32 +160,49 @@ const ImportAction = (props) => { ...@@ -148,32 +160,49 @@ const ImportAction = (props) => {
}); });
} }
const onTableChange = (data) => { //validate 是否需要对字段进行校验
const onTableChange = (data, validate=false) => {
const newMedelerData = {...modelerData, easyDataModelerDataModelAttributes: data}; const newModelerData = {...modelerData, easyDataModelerDataModelAttributes: data};
setModelerData(newMedelerData); setModelerData(newModelerData);
onChange && onChange(newMedelerData); onChange && onChange(newModelerData);
if (validate) {
validateDataModel(newModelerData);
}
}
const validateDataModel = (data) => {
dispatch({
type: 'datamodel.validateDataModel',
payload: {
data: data,
},
callback: _data => {
setValidateReports(_data||[]);
}
})
} }
return ( return (
<> <>
{ {
action!=='detail' && <div className='d-flex mb-3'> action!=='detail' && <div className='d-flex mb-3'>
<Select value={constraint.id?constraint.id:null} placeholder='请选择规则' style={{ marginLeft: 'auto', minWidth: 100 }} onChange={onConstraintChange}> <Select value={constraint.name?constraint.name:null} placeholder='请选择规则' style={{ marginLeft: 'auto', minWidth: 100 }} onChange={onConstraintChange}>
{ {
(constraints||[]).map((constraint, index) => { (constraints||[]).map((constraint, index) => {
return ( return (
<Option key={index} value={constraint.id}>{ constraint.cnName||'' }</Option> <Option key={index} value={constraint.name}>{ constraint.cnName||'' }</Option>
) )
}) })
} }
</Select> </Select>
<Select className='ml-3' value={template.id?template.id:null} placeholder='请选择模版' style={{ minWidth: 100 }} onChange={onTemplateChange}> <Select className='ml-3' value={template.name?template.name:null} placeholder='请选择模版' style={{ minWidth: 100 }} onChange={onTemplateChange}>
{ {
(templates||[]).map((template, index) => { (templates||[]).map((template, index) => {
return ( return (
<Option key={index} value={template.id}>{ template.cnName||'' }</Option> <Option key={index} value={template.name}>{ template.cnName||'' }</Option>
) )
}) })
} }
...@@ -197,6 +226,7 @@ const ImportAction = (props) => { ...@@ -197,6 +226,7 @@ const ImportAction = (props) => {
modelerData={modelerData||{}} modelerData={modelerData||{}}
constraint={constraint} constraint={constraint}
template={template} template={template}
validateReports={validateReports}
supportedDatatypes={supportedDatatypes} supportedDatatypes={supportedDatatypes}
onChange={onTableChange} onChange={onTableChange}
editable={action!=='detail'} /> editable={action!=='detail'} />
......
...@@ -214,12 +214,11 @@ const DragableBodyRow = ({ index, moveRow, className, style, ...restProps }) => ...@@ -214,12 +214,11 @@ const DragableBodyRow = ({ index, moveRow, className, style, ...restProps }) =>
}; };
const ImportActionTable = (props) => { const ImportActionTable = (props) => {
const { modelerData, onChange, editable, supportedDatatypes, constraint, template } = props; const { modelerData, onChange, editable, supportedDatatypes, constraint, template, validateReports } = props;
const data = modelerData.easyDataModelerDataModelAttributes||[]; const data = modelerData.easyDataModelerDataModelAttributes||[];
const [form] = Form.useForm(); const [form] = Form.useForm();
const [editingKey, setEditingKey] = useState(''); const [editingKey, setEditingKey] = useState('');
const [suggests, setSuggests] = useState([]); const [suggests, setSuggests] = useState([]);
const [standards, setStandards] = useState([]);
//规则改变的时候 数据表为可编辑状态 //规则改变的时候 数据表为可编辑状态
useEffect(() => { useEffect(() => {
...@@ -278,6 +277,7 @@ const ImportActionTable = (props) => { ...@@ -278,6 +277,7 @@ const ImportActionTable = (props) => {
row.datatype.parameterValues[index] = 0; row.datatype.parameterValues[index] = 0;
} }
}) })
// console.log('row', row); // console.log('row', row);
const newData = [...data]; const newData = [...data];
...@@ -286,12 +286,7 @@ const ImportActionTable = (props) => { ...@@ -286,12 +286,7 @@ const ImportActionTable = (props) => {
const item = newData[index]; const item = newData[index];
newData.splice(index, 1, { ...item, ...row }); newData.splice(index, 1, { ...item, ...row });
onChange && onChange(newData); onChange && onChange(newData, true);
// setStandards([{
// iid: editingKey,
// contents: ['不符合唯一主键命名规范', '不符合唯一主键命名规范2']
// }]);
setEditingKey(''); setEditingKey('');
setSuggests([]); setSuggests([]);
...@@ -414,15 +409,19 @@ const ImportActionTable = (props) => { ...@@ -414,15 +409,19 @@ const ImportActionTable = (props) => {
}, },
] ]
const standardColumn = { const validateColumn = {
title: '规范', title: '规范',
dataIndex: 'standard', dataIndex: 'validate',
width: 120, width: 120,
render: (text, record, index) => { render: (text, record, index) => {
let _contents = []; let shortCauses = [];
(standards||[]).forEach((standard,index) => { let causes = [];
if (standard.iid === record.iid) { (validateReports||[]).forEach((report) => {
_contents = standard.contents||[] if (report.iid === record.iid) {
(report.reportItems||[]).forEach((item) => {
shortCauses.push(item.shortCause||'');
causes.push(item.cause||'');
})
} }
}); });
...@@ -430,20 +429,28 @@ const ImportActionTable = (props) => { ...@@ -430,20 +429,28 @@ const ImportActionTable = (props) => {
<div className='d-flex' key={index} style={{ alignItems: 'center' }}> <div className='d-flex' key={index} style={{ alignItems: 'center' }}>
<div> <div>
{ {
_contents && _contents.map((_content, index) => { shortCauses && shortCauses.map((shortCause, index) => {
return ( return (
<div key={index}> <div key={index}>
<span style={{ color: '#f5222d' }}>{_content||''}</span> <span style={{ color: '#f5222d' }}>{shortCause||''}</span>
</div> </div>
); );
}) })
} }
</div> </div>
{ {
(_contents||[]).length>0 && <Popover (causes||[]).length>0 && <Popover
content={ content={
<div style={{ maxWidth: 200, maxHeight: 200, wordWrap: 'break-word', overflow: 'auto' }}> <div style={{ maxWidth: 200, maxHeight: 200, wordWrap: 'break-word', overflow: 'auto' }}>
详情 {
causes && causes.map((cause, index) => {
return (
<Typography.Paragraph key={index} >
{cause||''}
</Typography.Paragraph>
)
})
}
</div> </div>
} }
title="规则详情" title="规则详情"
...@@ -457,20 +464,20 @@ const ImportActionTable = (props) => { ...@@ -457,20 +464,20 @@ const ImportActionTable = (props) => {
} }
}; };
const includeStandardColumn = [ const includeValidateColumn = [
...columns, ...columns,
standardColumn validateColumn
] ]
const includeStandardEditableColumn = [ const includeValidateEditableColumn = [
...editableColumn, ...editableColumn,
standardColumn validateColumn
] ]
const mergedColumns = () => { const mergedColumns = () => {
if (editable) { if (editable) {
let _columns = (standards||[]).length>0 ? includeStandardEditableColumn: editableColumn; let _columns = (validateReports||[]).length>0 ? includeValidateEditableColumn: editableColumn;
return _columns.map((col) => { return _columns.map((col) => {
if (!col.editable) { if (!col.editable) {
...@@ -491,7 +498,7 @@ const ImportActionTable = (props) => { ...@@ -491,7 +498,7 @@ const ImportActionTable = (props) => {
}); });
} }
return (standards||[]).length>0 ? includeStandardColumn : columns; return (validateReports||[]).length>0 ? includeValidateColumn : columns;
} }
const moveRow = useCallback( const moveRow = useCallback(
......
...@@ -125,13 +125,13 @@ const ImportModal = (props) => { ...@@ -125,13 +125,13 @@ const ImportModal = (props) => {
payload: { payload: {
data: newModelerData data: newModelerData
}, },
callback: mid => { callback: data => {
dispatchLatest({ dispatchLatest({
type: 'datamodel.bindCatalogDataModel', type: 'datamodel.bindCatalogDataModel',
payload: { payload: {
params: { params: {
easyDataModelCatalogId: catalogId, easyDataModelCatalogId: catalogId,
easyDataModelerDataModelIds: mid easyDataModelerDataModelIds: data.id||''
} }
}, },
callback: () => { callback: () => {
......
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