Commit 91e55e5c by zhaochengxiang

模型效验

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