Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
szse
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhaochengxiang
szse
Commits
e1f1eec9
Commit
e1f1eec9
authored
Nov 21, 2023
by
zhaochengxiang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
模型配置
parent
0f2b50ba
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
598 additions
and
2 deletions
+598
-2
datamodel.js
src/model/datamodel.js
+41
-0
datamodeler.js
src/service/datamodeler.js
+42
-1
rule-template.jsx
src/view/Manage/ModelConfig/Component/rule-template.jsx
+190
-0
update-rule-template.jsx
...iew/Manage/ModelConfig/Component/update-rule-template.jsx
+320
-0
index.jsx
src/view/Manage/ModelConfig/index.jsx
+5
-1
No files found.
src/model/datamodel.js
View file @
e1f1eec9
...
@@ -336,4 +336,44 @@ export function* getDesignPrivilege() {
...
@@ -336,4 +336,44 @@ export function* getDesignPrivilege() {
export
function
*
getPrivilegeAdmin
()
{
export
function
*
getPrivilegeAdmin
()
{
return
yield
call
(
datamodelerService
.
getPrivilegeAdmin
);
return
yield
call
(
datamodelerService
.
getPrivilegeAdmin
);
}
export
function
*
getRuleTemplateList
()
{
return
yield
call
(
datamodelerService
.
getRuleTemplateList
);
}
export
function
*
addRuleTemplate
(
payload
)
{
return
yield
call
(
datamodelerService
.
addRuleTemplate
,
payload
);
}
export
function
*
updateRuleTemplate
(
payload
)
{
return
yield
call
(
datamodelerService
.
updateRuleTemplate
,
payload
);
}
export
function
*
deletesRuleTemplate
(
payload
)
{
return
yield
call
(
datamodelerService
.
deletesRuleTemplate
,
payload
);
}
export
function
*
deleteRuleTemplate
(
payload
)
{
return
yield
call
(
datamodelerService
.
deleteRuleTemplate
,
payload
);
}
export
function
*
getRuleTemplateDetail
(
payload
)
{
return
yield
call
(
datamodelerService
.
getRuleTemplateDetail
,
payload
);
}
export
function
*
getRuleTemplateCheckTypes
()
{
return
yield
call
(
datamodelerService
.
getRuleTemplateCheckTypes
);
}
export
function
*
getRuleTemplateAllCheckPropertyTypes
()
{
return
yield
call
(
datamodelerService
.
getRuleTemplateAllCheckPropertyTypes
);
}
export
function
*
getRuleTemplateAllVerifyExpressionTypes
()
{
return
yield
call
(
datamodelerService
.
getRuleTemplateAllVerifyExpressionTypes
);
}
export
function
*
getRuleTemplateAllVertifyExpressions
()
{
return
yield
call
(
datamodelerService
.
getRuleTemplateAllVertifyExpressions
);
}
}
\ No newline at end of file
src/service/datamodeler.js
View file @
e1f1eec9
import
{
PostFile
,
GetJSON
,
PostJSON
,
Post
,
Get
}
from
"../util/axios"
import
{
PostFile
,
GetJSON
,
PostJSON
,
Post
,
Get
,
Delete
}
from
"../util/axios"
export
function
loadDataModelCatalog
()
{
export
function
loadDataModelCatalog
()
{
return
GetJSON
(
"/datamodeler/easyDataModelerCURD/loadDataModelCatalog"
);
return
GetJSON
(
"/datamodeler/easyDataModelerCURD/loadDataModelCatalog"
);
...
@@ -287,4 +287,44 @@ export function getDesignPrivilege() {
...
@@ -287,4 +287,44 @@ export function getDesignPrivilege() {
export
function
getPrivilegeAdmin
()
{
export
function
getPrivilegeAdmin
()
{
return
Get
(
"/datamodeler/easyDataModelerPrivilegeProvider/getAdmin"
);
return
Get
(
"/datamodeler/easyDataModelerPrivilegeProvider/getAdmin"
);
}
export
function
getRuleTemplateList
()
{
return
GetJSON
(
"/shandatamodeler/easyDataModelerRuleTemplate/list"
);
}
export
function
addRuleTemplate
(
payload
)
{
return
PostJSON
(
"/shandatamodeler/easyDataModelerRuleTemplate/add"
,
payload
);
}
export
function
updateRuleTemplate
(
payload
)
{
return
PostJSON
(
"/shandatamodeler/easyDataModelerRuleTemplate/update"
,
payload
);
}
export
function
deletesRuleTemplate
(
payload
)
{
return
Delete
(
"/shandatamodeler/easyDataModelerRuleTemplate/dels"
,
payload
);
}
export
function
deleteRuleTemplate
(
payload
)
{
return
Delete
(
"/shandatamodeler/easyDataModelerRuleTemplate/del"
,
payload
);
}
export
function
getRuleTemplateDetail
(
payload
)
{
return
GetJSON
(
"/shandatamodeler/easyDataModelerRuleTemplate/getById"
,
payload
);
}
export
function
getRuleTemplateCheckTypes
()
{
return
GetJSON
(
"/shandatamodeler/easyDataModelerRuleTemplate/getCheckTypes"
);
}
export
function
getRuleTemplateAllCheckPropertyTypes
()
{
return
GetJSON
(
"/shandatamodeler/easyDataModelerRuleTemplate/getAllCheckPropertyTypes"
);
}
export
function
getRuleTemplateAllVerifyExpressionTypes
()
{
return
GetJSON
(
"/shandatamodeler/easyDataModelerRuleTemplate/getAllVerifyExpressionTypes"
)
}
export
function
getRuleTemplateAllVertifyExpressions
()
{
return
GetJSON
(
"/shandatamodeler/easyDataModelerRuleTemplate/getAllVerifyExpressions"
)
}
}
\ No newline at end of file
src/view/Manage/ModelConfig/Component/rule-template.jsx
0 → 100644
View file @
e1f1eec9
import
React
from
'react'
import
{
Input
,
Space
,
Modal
}
from
'antd'
import
{
dispatch
}
from
'../../../../model'
import
PermissionButton
from
'../../../../util/Component/PermissionButton'
import
Table
from
'../../../../util/Component/Table'
import
{
showMessage
}
from
'../../../../util'
import
Update
from
'./update-rule-template'
const
FC
=
(
props
)
=>
{
const
[
keyword
,
setKeyword
]
=
React
.
useState
()
const
[
loading
,
setLoading
]
=
React
.
useState
(
false
)
const
[
data
,
setData
]
=
React
.
useState
()
const
[
selectedRows
,
setSelectedRows
]
=
React
.
useState
()
const
[
updateParams
,
setUpdateParams
]
=
React
.
useState
({
visible
:
false
,
type
:
undefined
,
item
:
undefined
})
const
[
modal
,
contextHolder
]
=
Modal
.
useModal
()
React
.
useEffect
(()
=>
{
getTemplates
()
},
[])
const
cols
=
React
.
useMemo
(()
=>
{
return
([
{
title
:
'序号'
,
dataIndex
:
'index'
,
width
:
60
,
render
:
(
_
,
__
,
index
)
=>
`
${
index
+
1
}
`
},
{
title
:
'规则编号'
,
dataIndex
:
'number'
,
},
{
title
:
'规则中文名称'
,
dataIndex
:
'name'
,
},
{
title
:
'规则描述'
,
dataIndex
:
'remark'
,
},
{
title
:
'检查类型'
,
dataIndex
:
'checkTypeName'
,
},
{
title
:
'引用次数'
,
dataIndex
:
'referenceCount'
,
},
])
},
[])
const
_data
=
React
.
useMemo
(()
=>
{
const
_keyword
=
(
keyword
??
''
).
trim
()
return
(
data
??[]).
filter
(
item
=>
!
_keyword
||
(
item
.
name
??
''
).
indexOf
(
_keyword
)
!==
-
1
||
(
item
.
remark
??
''
).
indexOf
(
_keyword
)
!==
-
1
)
},
[
data
,
keyword
])
const
getTemplates
=
()
=>
{
setLoading
(
true
)
dispatch
({
type
:
'datamodel.getRuleTemplateList'
,
callback
:
data
=>
{
setLoading
(
false
)
setData
(
data
)
},
error
:
()
=>
{
setLoading
(
false
)
}
})
}
const
onAddClick
=
()
=>
{
setUpdateParams
({
visible
:
true
,
type
:
'add'
,
item
:
undefined
})
}
const
onBatchDeteteClick
=
()
=>
{
modal
.
confirm
({
title
:
'提示'
,
content
:
'删除规则,引用的规范将同步删除该规则,确定删除吗?'
,
onOk
:
()
=>
{
dispatch
({
type
:
'datamodel.deletesRuleTemplate'
,
payload
:
{
templateIds
:
(
selectedRows
??[]).
map
(
item
=>
item
.
id
).
toString
()
},
callback
:
data
=>
{
showMessage
(
'success'
,
'删除成功'
)
getTemplates
()
}
})
}
})
}
const
onDeteteClick
=
(
record
)
=>
{
modal
.
confirm
({
title
:
'提示'
,
content
:
'删除规则,引用的规范将同步删除该规则,确定删除吗?'
,
onOk
:
()
=>
{
dispatch
({
type
:
'datamodel.deleteRuleTemplate'
,
payload
:
{
templateId
:
record
?.
id
},
callback
:
data
=>
{
showMessage
(
'success'
,
'删除成功'
)
getTemplates
()
}
})
}
})
}
return
(
<
div
>
<
div
className=
'd-flex mb-3'
style=
{
{
justifyContent
:
'space-between'
,
alignItems
:
'center'
}
}
>
<
Space
>
<
PermissionButton
onClick=
{
onAddClick
}
// permissionKey='新增'
defaultPermission=
{
true
}
>
新建
</
PermissionButton
>
<
PermissionButton
onClick=
{
onBatchDeteteClick
}
// permissionKey='删除'
defaultPermission=
{
true
}
disabled=
{
(
selectedRows
??[]).
length
===
0
}
tip=
{
(
selectedRows
??[]).
length
===
0
?
'请先选择规则'
:
''
}
>
删除
</
PermissionButton
>
</
Space
>
<
Input
size=
"middle"
placeholder=
"规则名称/描述搜索"
value=
{
keyword
}
bordered=
{
true
}
allowClear
onChange=
{
(
e
)
=>
{
const
keyword
=
e
.
target
.
value
setKeyword
(
keyword
)
// $keyword.next((keyword??'').trim())
}
}
style=
{
{
width
:
270
}
}
/>
</
div
>
<
Table
loading=
{
loading
}
columns=
{
cols
??[]
}
dataSource=
{
_data
}
pagination=
{
false
}
rowSelection=
{
{
selectedRowKeys
:
(
selectedRows
??[]).
map
(
item
=>
item
.
id
),
onChange
:
(
selectedRowKeys
,
selectedRows
)
=>
{
setSelectedRows
(
selectedRows
)
},
}
}
/>
<
Update
{
...
updateParams
}
onCancel=
{
(
refresh
)
=>
{
setUpdateParams
({
visible
:
false
,
type
:
undefined
,
item
:
undefined
})
refresh
&&
getTemplates
()
}
}
/>
{
contextHolder
}
</
div
>
)
}
export
default
FC
\ No newline at end of file
src/view/Manage/ModelConfig/Component/update-rule-template.jsx
0 → 100644
View file @
e1f1eec9
import
React
from
"react"
import
{
Modal
,
Button
,
Spin
,
Form
,
Input
,
Select
,
Space
,
InputNumber
}
from
"antd"
import
{
dispatch
}
from
'../../../../model'
const
FC
=
(
props
)
=>
{
const
{
visible
,
type
,
item
,
onCancel
}
=
props
const
[
waiting
,
setWaiting
]
=
React
.
useState
(
false
)
const
basicRef
=
React
.
useRef
()
const
title
=
React
.
useMemo
(()
=>
{
if
(
type
===
'add'
)
return
'新增检查规则'
if
(
type
===
'update'
)
return
'修改检查规则'
if
(
type
===
'detail'
)
return
'检查规则详情'
return
''
},
[
type
])
const
close
=
(
refresh
=
false
)
=>
{
setWaiting
(
false
)
onCancel
?.(
refresh
)
}
const
save
=
async
()
=>
{
try
{
const
rows
=
await
basicRef
.
current
?.
validate
()
setWaiting
(
true
)
if
(
type
===
'add'
)
{
dispatch
({
type
:
'datamodel.addRuleTemplate'
,
payload
:
{
data
:
rows
},
callback
:
data
=>
{
close
(
true
)
},
error
:
()
=>
{
setWaiting
(
false
)
}
})
}
else
{
dispatch
({
type
:
'datamodel.updateRuleTemplate'
,
payload
:
{
data
:
{...
item
,
rows
}
},
callback
:
data
=>
{
close
(
true
)
},
error
:
()
=>
{
setWaiting
(
false
)
}
})
}
}
catch
(
e
)
{
}
}
const
footer
=
React
.
useMemo
(()
=>
{
return
[
<
Button
key=
'cancel'
onClick=
{
()
=>
close
()
}
>
取消
</
Button
>,
<
Button
key=
'save'
type=
'primary'
onClick=
{
()
=>
save
()
}
>
确定
</
Button
>
]
},
[
close
,
save
])
return
(
<
Modal
visible=
{
visible
}
footer=
{
footer
}
width=
'80%'
bodyStyle=
{
{
padding
:
'15px'
,
overflowX
:
'auto'
,
maxHeight
:
'80vh'
}
}
title=
{
title
}
centered
destroyOnClose
onCancel=
{
()
=>
{
close
()
}
}
>
<
Spin
spinning=
{
waiting
}
>
<
Basic
ref=
{
basicRef
}
item=
{
item
}
/>
</
Spin
>
</
Modal
>
)
}
export
default
FC
export
const
Basic
=
React
.
forwardRef
(
function
({
item
},
ref
)
{
const
[
loadingCheckTypes
,
setLoadingCheckTypes
]
=
React
.
useState
(
false
)
const
[
checkTypes
,
setCheckTypes
]
=
React
.
useState
()
const
[
loadingCheckPropertyTypes
,
setLoadingCheckPrpertyTypes
]
=
React
.
useState
(
false
)
const
[
checkPropertyTypes
,
setCheckPropertyTypes
]
=
React
.
useState
()
const
[
loadingExpressionTypes
,
setLoadingExpressionTypes
]
=
React
.
useState
(
false
)
const
[
expressionTypes
,
setExpressionTypes
]
=
React
.
useState
()
const
[
loadingExpressions
,
setLoadingExpressions
]
=
React
.
useState
(
false
)
const
[
expressions
,
setExpressions
]
=
React
.
useState
()
const
[
form
]
=
Form
.
useForm
()
React
.
useImperativeHandle
(
ref
,
()
=>
({
validate
:
async
()
=>
{
return
await
form
.
validateFields
()
},
}),
[
form
])
React
.
useEffect
(()
=>
{
getCheckTypes
()
},
[])
const
getCheckTypes
=
()
=>
{
setLoadingCheckTypes
(
true
)
dispatch
({
type
:
'datamodel.getRuleTemplateCheckTypes'
,
callback
:
(
data
)
=>
{
setLoadingCheckTypes
(
false
)
setCheckTypes
(
data
)
},
error
:
()
=>
{
setLoadingCheckTypes
(
false
)
}
})
}
const
onValuesChange
=
(
changedValues
,
allValues
)
=>
{
console
.
log
(
'all values'
,
allValues
)
}
return
(
<
Form
form=
{
form
}
labelCol=
{
{
span
:
3
}
}
wrapperCol=
{
{
span
:
21
}
}
autoComplete=
"off"
onValuesChange=
{
onValuesChange
}
>
<
Form
.
Item
name=
'name'
label=
'规则中文名称'
rules=
{
[{
required
:
true
,
message
:
'请输入规则中文名称!'
}]
}
>
<
Input
placeholder=
'请输入规则中文名称'
allowClear
/>
</
Form
.
Item
>
<
Form
.
Item
name=
'remark'
label=
'规则描述'
>
<
Input
placeholder=
'请输入规则描述'
allowClear
/>
</
Form
.
Item
>
<
Form
.
Item
name=
'alertContent'
label=
'规则提示'
rules=
{
[{
required
:
true
,
message
:
'请输入规则提示!'
}]
}
>
<
Input
placeholder=
'请输入规则提示'
allowClear
/>
</
Form
.
Item
>
<
Form
.
Item
name=
'checkType'
label=
'检查类型'
rules=
{
[{
required
:
true
,
message
:
'请选择检查类型!'
}]
}
>
<
Select
allowClear
loading=
{
loadingCheckTypes
}
placeholder=
'请选择检查类型'
>
{
(
checkTypes
??[]).
map
((
item
,
index
)
=>
(
<
Select
.
Option
key=
{
item
.
type
}
value=
{
item
.
type
}
>
{
item
.
name
}
</
Select
.
Option
>
))
}
</
Select
>
</
Form
.
Item
>
<
Form
.
Item
name=
'checkProperty'
label=
'检查规则'
rules=
{
[{
required
:
true
,
message
:
'请选择检查类型!'
}]
}
>
<
CheckItem
/>
</
Form
.
Item
>
</
Form
>
)
})
const
CheckItem
=
({
value
,
onChange
})
=>
{
const
[
loadingCheckPropertyTypes
,
setLoadingCheckPrpertyTypes
]
=
React
.
useState
(
false
)
const
[
checkPropertyTypes
,
setCheckPropertyTypes
]
=
React
.
useState
()
const
[
loadingExpressionTypes
,
setLoadingExpressionTypes
]
=
React
.
useState
(
false
)
const
[
expressionTypes
,
setExpressionTypes
]
=
React
.
useState
()
const
[
loadingExpressionMapping
,
setLoadingExpressionMapping
]
=
React
.
useState
(
false
)
const
[
expressionMapping
,
setExpressionMapping
]
=
React
.
useState
()
const
[
currentCheckPropertyType
,
setCurrentCheckPropertyType
]
=
React
.
useState
()
const
[
currentExpressionType
,
setCurrentExpressionType
]
=
React
.
useState
()
const
[
currentExpression
,
setCurrentExpression
]
=
React
.
useState
()
React
.
useEffect
(()
=>
{
getCheckPropertyTypes
()
getExpressionTypes
()
getExpressions
()
},
[])
React
.
useEffect
(()
=>
{
onChange
?.({...
currentCheckPropertyType
||
{},
...
currentExpressionType
||
{},
verifyExpression
:
currentExpression
})
},
[
currentCheckPropertyType
,
currentExpressionType
,
currentExpression
])
const
visibleExpressions
=
React
.
useMemo
(()
=>
{
if
(
currentExpressionType
?.
expressionTypeEnName
)
{
return
expressionMapping
?.[
currentExpressionType
?.
expressionTypeEnName
]
}
return
[]
},
[
expressionMapping
,
currentExpressionType
])
const
getCheckPropertyTypes
=
()
=>
{
setLoadingCheckPrpertyTypes
(
true
)
dispatch
({
type
:
'datamodel.getRuleTemplateAllCheckPropertyTypes'
,
callback
:
(
data
)
=>
{
setLoadingCheckPrpertyTypes
(
false
)
setCheckPropertyTypes
(
data
)
},
error
:
()
=>
{
setLoadingCheckPrpertyTypes
(
false
)
}
})
}
const
getExpressionTypes
=
()
=>
{
setLoadingExpressionTypes
(
true
)
dispatch
({
type
:
'datamodel.getRuleTemplateAllVerifyExpressionTypes'
,
callback
:
(
data
)
=>
{
setLoadingExpressionTypes
(
false
)
setExpressionTypes
(
data
)
},
error
:
()
=>
{
setLoadingExpressionTypes
(
false
)
}
})
}
const
getExpressions
=
()
=>
{
setLoadingExpressionMapping
(
true
)
dispatch
({
type
:
'datamodel.getRuleTemplateAllVertifyExpressions'
,
callback
:
(
data
)
=>
{
setLoadingExpressionMapping
(
false
)
setExpressionMapping
(
data
)
},
error
:
()
=>
{
setLoadingExpressionMapping
(
false
)
}
})
}
return
(
<
Space
>
<
Select
allowClear
loading=
{
loadingCheckPropertyTypes
}
value=
{
currentCheckPropertyType
?.
propertyEnName
}
onChange=
{
(
val
)
=>
{
if
(
val
)
{
const
index
=
(
checkPropertyTypes
??[]).
findIndex
(
item
=>
item
.
propertyEnName
===
val
)
if
(
index
!==
-
1
)
{
setCurrentCheckPropertyType
(
checkPropertyTypes
[
index
])
}
}
else
{
setCurrentCheckPropertyType
()
}
}
}
placeholder=
'请选择检查对象'
>
{
(
checkPropertyTypes
??[]).
map
((
item
,
index
)
=>
(
<
Select
.
Option
key=
{
item
.
propertyEnName
}
value=
{
item
.
propertyEnName
}
>
{
item
.
propertyCnName
}
</
Select
.
Option
>
))
}
</
Select
>
<
Select
allowClear
loading=
{
loadingExpressionTypes
}
value=
{
currentExpressionType
?.
expressionTypeEnName
}
onChange=
{
(
val
)
=>
{
if
(
val
)
{
const
index
=
(
expressionTypes
??[]).
findIndex
(
item
=>
item
.
expressionTypeEnName
===
val
)
if
(
index
!==
-
1
)
{
setCurrentExpressionType
(
expressionTypes
[
index
])
}
}
else
{
setCurrentExpressionType
()
}
setCurrentExpression
()
}
}
placeholder=
'请选择检查属性'
>
{
(
expressionTypes
??[]).
map
((
item
,
index
)
=>
(
<
Select
.
Option
key=
{
item
.
expressionTypeEnName
}
value=
{
item
.
expressionTypeEnName
}
>
{
item
.
expressionTypeCnName
}
</
Select
.
Option
>
))
}
</
Select
>
<
Select
allowClear
loading=
{
loadingExpressionMapping
}
value=
{
currentExpression
?.
enName
}
onChange=
{
(
val
)
=>
{
if
(
val
)
{
const
index
=
(
visibleExpressions
??[]).
findIndex
(
item
=>
item
.
enName
===
val
)
if
(
index
!==
-
1
)
{
setCurrentExpression
(
visibleExpressions
[
index
])
}
}
else
{
setCurrentExpression
()
}
}
}
placeholder=
'请选择表达式'
>
{
(
visibleExpressions
??[]).
map
((
item
,
index
)
=>
(
<
Select
.
Option
key=
{
item
.
enName
}
value=
{
item
.
enName
}
>
{
item
.
cnName
}
</
Select
.
Option
>
))
}
</
Select
>
{
(
currentExpression
?.
valueType
===
'string'
)
&&
<
Input
onChange=
{
(
e
)
=>
{
setCurrentExpression
({
...
currentExpression
,
value
:
e
.
target
.
value
})
}
}
/>
}
{
(
currentExpression
?.
valueType
===
'int'
)
&&
<
InputNumber
onChange=
{
(
e
)
=>
{
setCurrentExpression
({
...
currentExpression
,
value
:
e
.
target
.
value
})
}
}
/>
}
{
(
currentExpression
?.
valueType
===
'List<String>'
)
&&
<
Input
/>
}
</
Space
>
)
}
\ No newline at end of file
src/view/Manage/ModelConfig/index.jsx
View file @
e1f1eec9
...
@@ -5,6 +5,7 @@ import { dispatch } from '../../../model';
...
@@ -5,6 +5,7 @@ import { dispatch } from '../../../model';
import
WordTemplate
from
'./Component/WordTemplate'
;
import
WordTemplate
from
'./Component/WordTemplate'
;
import
TemplateCURD
from
'./Component/TemplateCURD'
;
import
TemplateCURD
from
'./Component/TemplateCURD'
;
import
ConstraintDetail
from
'./Component/ConstraintDetail'
;
import
ConstraintDetail
from
'./Component/ConstraintDetail'
;
import
RuleTemplateCURD
from
'./Component/rule-template'
;
import
PartitionCURD
from
'./Component/PartitionCURD'
;
import
PartitionCURD
from
'./Component/PartitionCURD'
;
import
'./index.less'
;
import
'./index.less'
;
...
@@ -58,7 +59,10 @@ const ModelConfig = () => {
...
@@ -58,7 +59,10 @@ const ModelConfig = () => {
<
TabPane
tab=
'规范配置'
key=
'3'
>
<
TabPane
tab=
'规范配置'
key=
'3'
>
<
ConstraintDetail
/>
<
ConstraintDetail
/>
</
TabPane
>
</
TabPane
>
<
TabPane
tab=
'分区配置'
key=
'4'
>
<
TabPane
tab=
'规则库管理'
key=
'4'
>
<
RuleTemplateCURD
/>
</
TabPane
>
<
TabPane
tab=
'分区配置'
key=
'5'
>
<
PartitionCURD
/>
<
PartitionCURD
/>
</
TabPane
>
</
TabPane
>
</
Tabs
>
</
Tabs
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment