Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
csbr-daop
/
fe-data-trusted-space
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
4a419fac
authored
2024-12-05 11:41:22 +0800
by
lihua
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
提交元数据导入修改;新增引用完整性规则
1 parent
6181cbd2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
145 additions
and
33 deletions
.env.development
src/api/modules/dataQuality.ts
src/api/modules/queryService.ts
src/components/Upload/index.vue
src/router/modules/dataMeta.ts
src/views/data_meta/collectorTask.vue
src/views/data_quality/ruleForm.vue
src/views/data_quality/ruleModel.vue
src/views/data_quality/ruleModelEdit.vue
src/views/data_quality/ruleTemplate.vue
src/views/importFile.vue
.env.development
View file @
4a419fa
...
...
@@ -3,7 +3,7 @@ VITE_APP_TITLE = 数据资产管理系统
# 接口域名
# VITE_API_BASEURL = https://www.zgsjzc.com/api
# VITE_API_BASEURL = https://swzl-test.csbr.cn/api
VITE_API_BASEURL = http://10.4.82.
30:
8052/
VITE_API_BASEURL = http://10.4.82.
1:2
8052/
# 平台用户 接口请地址
VITE_APP_USER_API_BASEURL = gateway-server/user
# 系统管理 接口地址
...
...
src/api/modules/dataQuality.ts
View file @
4a419fa
...
...
@@ -150,6 +150,13 @@ export const getSmallCategoryList = () => request({
data
:
{
paramCode
:
"SMALL-CATEGORY"
}
})
// 获取规范性检验规则。
export
const
getCheckRulesList
=
()
=>
request
({
url
:
`
${
import
.
meta
.
env
.
VITE_APP_API_BASEURL
}
/data-dict/get-data-list`
,
method
:
'post'
,
data
:
{
paramCode
:
"REGULAR_RULE"
}
})
// 根据规则guid获取规则的详情信息。
export
const
getRuleConfDetail
=
(
param
)
=>
request
({
url
:
`
${
import
.
meta
.
env
.
VITE_APP_QUALITY_BASEURL
}
/quality-model/conf/detail?ruleConfGuid=
${
param
}
`
,
...
...
src/api/modules/queryService.ts
View file @
4a419fa
...
...
@@ -47,7 +47,7 @@ export const getImageUrl = (params) => request({
/** 查看图片 */
export
const
getImageContent
=
(
params
)
=>
request
({
url
:
`
${
import
.
meta
.
env
.
VITE_APP_API_BASEURL
}
/obs
/view-pic?filePath=
${
params
}
`
,
url
:
`
${
import
.
meta
.
env
.
VITE_APP_API_BASEURL
}
/obs`
,
method
:
'get'
,
responseType
:
'blob'
});
...
...
src/components/Upload/index.vue
View file @
4a419fa
...
...
@@ -146,11 +146,26 @@ defineExpose({
:max-collapse-tags=
"item.cascaderInfo.maxTags ?? 1"
:filterable=
"item.cascaderInfo.filterable ?? false"
@
change=
"cascaderChange"
/>
</div>
<div
class=
"form_item"
v-if=
"item.type == 'input'"
>
<div
class=
"form_item"
v-
else-
if=
"item.type == 'input'"
>
<span
class=
"item_label"
:class=
"
{ required_mark: item.selectInfo.required }">
{{
item
.
selectInfo
.
label
}}
:
</span>
<el-input
v-model=
"extraParams[item.selectInfo.field]"
:placeholder=
"item.selectInfo.placeholder"
:disabled=
"item.selectInfo.disabled"
:clearable=
"item.selectInfo.disabled"
>
</el-input>
:disabled=
"item.selectInfo.disabled"
:clearable=
"item.selectInfo.clearable"
>
</el-input>
</div>
<div
class=
"group-con"
v-else-if=
"item.type == 'group'"
>
<template
v-for=
"formItem in (item.formItems || [])"
>
<div
class=
"form_item"
v-if=
"formItem.type == 'input'"
style=
"margin-right: 15px;"
>
<span
class=
"item_label"
style=
"display: block;margin-bottom: 2px"
:class=
"
{ required_mark: formItem.required }">
{{
formItem
.
label
}}
:
</span>
<el-input
v-model=
"extraParams[formItem.field]"
:placeholder=
"formItem.placeholder"
:disabled=
"formItem.disabled"
:clearable=
"formItem.clearable"
>
</el-input>
</div>
<div
class=
"form_item"
v-else-if=
"formItem.type == 'switch'"
>
<span
class=
"item_label"
style=
"display: block;margin-bottom: 2px"
:class=
"
{ required_mark: formItem.required }">
{{
formItem
.
label
}}
:
</span>
<el-switch
inline-prompt
v-model=
"extraParams[formItem.field]"
:active-value=
"formItem.activeValue"
:inactive-value=
"formItem.inactiveValue"
:active-text=
"formItem.activeText"
:inactive-text=
"formItem.inactiveText"
:disabled=
"formItem.disabled"
/>
</div>
</
template
>
</div>
<div
class=
"item_btn"
v-else-if=
"item.type == 'btn_down'"
>
<el-button
plain
@
click=
"toolBtnClick({ value: 'exoprt_model' })"
v-preReClick
>
...
...
@@ -363,5 +378,11 @@ defineExpose({
}
}
}
.group-con
{
display
:
flex
;
flex-wrap
:
wrap
;
margin-bottom
:
-12px
;
}
}
</
style
>
...
...
src/router/modules/dataMeta.ts
View file @
4a419fa
...
...
@@ -44,16 +44,13 @@ const routes: RouteRecordRaw[] = [
name
:
'importFileMeta'
,
component
:
()
=>
import
(
'@/views/importFile.vue'
),
meta
:
{
title
:
'导入数据'
,
title
:
'导入数据
-采集任务
'
,
sidebar
:
false
,
breadcrumb
:
false
,
cache
:
true
,
reuse
:
true
},
beforeEnter
:
(
to
,
from
)
=>
{
if
(
to
.
query
.
bizGuid
)
{
to
.
meta
.
title
=
`导入数据-采集任务`
;
}
}
}
],
...
...
src/views/data_meta/collectorTask.vue
View file @
4a419fa
...
...
@@ -598,7 +598,7 @@ onBeforeMount(() => {
<TableTools
:searchItems=
"searchItemList"
:searchId=
"'data-source-search'"
@
search=
"toSearch"
:init=
"false"
/>
<div
class=
"tools_btns"
>
<el-button
type=
"primary"
@
click=
"loadDrawer"
>
新建
</el-button>
<el-button
type=
"primary"
@
click=
"importMeta"
>
导入
</el-button>
<el-button
@
click=
"importMeta"
>
导入
</el-button>
</div>
</div>
<div
class=
"table_panel_wrap"
>
...
...
src/views/data_quality/ruleForm.vue
View file @
4a419fa
This diff is collapsed.
Click to expand it.
src/views/data_quality/ruleModel.vue
View file @
4a419fa
...
...
@@ -332,6 +332,35 @@ const transformRulesInfo = (info: any) => {
})]
}));
}
}
else
if
(
info
.
ruleCode
==
'ref_integrality'
)
{
let
subjectTables
=
toSubjectTables
.
value
;
info
.
ruleFields
.
forEach
(
row
=>
{
let
tableInfo
=
subjectTables
.
find
(
t
=>
t
.
guid
===
row
.
mainTable
);
let
modelRule
=
modelRules
.
find
(
m
=>
m
.
subjectName
==
tableInfo
.
enName
);
if
(
modelRule
)
{
modelRule
.
modelRuleConfList
.
ruleField
.
push
({
enName
:
row
.
mainTableField
,
compareTableGuid
:
row
.
compareTableGuid
,
compareTableName
:
row
.
compareTableName
,
compareEnName
:
row
.
compareEnName
});
}
else
{
modelRules
.
push
(
Object
.
assign
({},
{
modelGroupGuid
:
modelGroupGuid
.
value
,
name
:
tableInfo
.
chName
,
subjectName
:
tableInfo
.
enName
,
subjectGuid
:
tableInfo
.
guid
,
dataSourceGuid
:
tableInfo
.
dataSourceGuid
,
databaseName
:
tableInfo
.
dataServerName
,
modelRuleConfList
:
[
Object
.
assign
({},
info
,
{
enName
:
row
.
mainTableField
,
compareTableGuid
:
row
.
compareTableGuid
,
compareTableName
:
row
.
compareTableName
,
compareEnName
:
row
.
compareEnName
})]
}));
}
})
}
return
modelRules
;
}
...
...
@@ -380,9 +409,10 @@ const save = () => {
:from-tree-data-loading=
"dsFromTreeDataLoading"
:lazy=
"true"
:checkOnClickNode=
"true"
:from_checked_all=
"false"
:from_data=
"dsFromTreeData"
:to_data=
"dsToTreeData"
node_key=
"guid"
:transferOpenNode=
"true"
width=
"70%"
:defaultProps=
"
{
label: 'name',
value: 'guid'
}" :lazyFn="handleSubjectTableLazyFn" @left-check-change="handleSubjectCheckedChange" height="calc(100% - 64px)">
label: 'name',
value: 'guid'
}" :lazyFn="handleSubjectTableLazyFn" @left-check-change="handleSubjectCheckedChange"
height="calc(100% - 64px)">
</TreeTransfer>
</div>
</div>
...
...
src/views/data_quality/ruleModelEdit.vue
View file @
4a419fa
...
...
@@ -140,6 +140,21 @@ const transformRulesInfo = (info: any) => {
}),
ruleFields
:
''
});
}
else
if
(
info
.
ruleCode
==
'ref_integrality'
)
{
return
Object
.
assign
({},
info
,
{
guid
:
ruleGuid
,
qualityModelGuid
:
detailInfo
.
value
.
qualityModelGuid
,
ruleCode
:
detailInfo
.
value
.
ruleCode
,
ruleField
:
info
.
ruleFields
.
map
(
row
=>
{
return
{
enName
:
row
.
mainTableField
,
compareTableGuid
:
row
.
compareTableGuid
,
compareTableName
:
row
.
compareTableName
,
compareEnName
:
row
.
compareEnName
}
}),
ruleFields
:
''
});
}
}
...
...
src/views/data_quality/ruleTemplate.vue
View file @
4a419fa
...
...
@@ -99,7 +99,7 @@ const transformRulesInfo = (info) => {
qualityModelGuid
:
modelGuid
,
ruleCode
:
info
.
ruleCode
,
customSql
:
info
.
customSqls
?.[
modelDetailInfo
.
value
.
subjectName
],
ruleField
:
info
.
ruleFields
?.[
modelDetailInfo
.
value
.
subjectName
]?.
map
(
f
=>
{
ruleField
:
info
.
ruleFields
?.[
modelDetailInfo
.
value
.
subjectName
]?.
map
(
f
=>
{
return
{
enName
:
f
}
...
...
@@ -116,22 +116,38 @@ const transformRulesInfo = (info) => {
differenceRange
:
info
.
rows
[
0
].
differenceRange
,
rows
:
''
});
}
else
if
(
info
.
ruleCode
===
'value_of_range'
)
{
}
else
if
(
info
.
ruleCode
===
'value_of_range'
)
{
let
subjectName
=
modelDetailInfo
.
value
.
subjectName
;
let
fields
=
info
.
ruleFields
[
subjectName
];
return
Object
.
assign
({},
info
,
{
qualityModelGuid
:
modelGuid
,
ruleCode
:
info
.
ruleCode
,
ruleField
:
fields
.
map
(
f
=>
{
return
{
guid
:
f
.
guid
,
enName
:
f
.
enName
,
chName
:
f
.
chName
,
dataType
:
f
.
dataType
,
startValue
:
f
.
startValue
,
endValue
:
f
.
endValue
,
dataRange
:
f
.
dataRange
}
return
{
guid
:
f
.
guid
,
enName
:
f
.
enName
,
chName
:
f
.
chName
,
dataType
:
f
.
dataType
,
startValue
:
f
.
startValue
,
endValue
:
f
.
endValue
,
dataRange
:
f
.
dataRange
}
}),
ruleFields
:
''
});
}
else
if
(
info
.
ruleCode
==
'ref_integrality'
)
{
return
Object
.
assign
({},
info
,
{
qualityModelGuid
:
modelGuid
,
ruleCode
:
info
.
ruleCode
,
ruleField
:
info
.
ruleFields
.
map
(
row
=>
{
return
{
// guid: row.mainTable,
enName
:
row
.
mainTableField
,
//chName: row.chName,
compareTableGuid
:
row
.
compareTableGuid
,
compareTableName
:
row
.
compareTableName
,
compareEnName
:
row
.
compareEnName
}
}),
ruleFields
:
''
});
...
...
src/views/importFile.vue
View file @
4a419fa
...
...
@@ -271,7 +271,7 @@ const batching = (type) => {
if
(
isfileImport
==
'2'
||
isfileImport
==
'4'
)
{
dialogInfo
.
value
.
header
.
title
=
'导入数据'
dialogInfo
.
value
.
type
=
'upload'
dialogInfo
.
value
.
size
=
500
dialogInfo
.
value
.
size
=
isfileImport
==
'4'
?
600
:
500
;
uploadFiles
.
value
=
[]
uploadInfo
.
value
.
uploadInfo
.
steps
=
uploadSteps
.
value
const
content
:
any
=
[
uploadInfo
.
value
]
...
...
@@ -374,17 +374,24 @@ const importData = (info) => {
});
paramUrl
=
`
${
import
.
meta
.
env
.
VITE_API_ASSET_BASEURL
}
/dam-catalog-table/excel-by-subject-guid?staffGuid=
${
userData
.
staffGuid
}
&subjectGuid=
${
route
.
query
.
bizGuid
}
`
}
else
if
(
isfileImport
==
'4'
)
{
if
(
!
info
.
collectTaskName
)
{
if
(
!
info
.
databaseNameZh
)
{
ElMessage
({
type
:
'error'
,
message
:
'请填写采集任务名称'
message
:
'请填写数据源名称'
})
return
;
}
if
(
!
info
.
databaseNameEn
)
{
ElMessage
({
type
:
'error'
,
message
:
'请填写数据库英文名'
})
return
;
}
uploadFiles
.
value
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
params
.
append
(
"uploadFile"
,
item
.
raw
);
});
paramUrl
=
`
${
import
.
meta
.
env
.
VITE_APP_PLAN_BASEURL
}
/meta-collect-task/meta-collect-import?staffGuid=
${
userData
.
staffGuid
}
&
collectTaskName=
${
info
.
collectTaskName
}
`
paramUrl
=
`
${
import
.
meta
.
env
.
VITE_APP_PLAN_BASEURL
}
/meta-collect-task/meta-collect-import?staffGuid=
${
userData
.
staffGuid
}
&
databaseNameZh=
${
info
.
databaseNameZh
}
&databaseNameEn=
${
info
.
databaseNameEn
}
&isCover=
${
info
.
isCover
}
`
}
else
{
uploadFiles
.
value
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
params
.
append
(
"file"
,
item
.
raw
);
...
...
@@ -562,17 +569,36 @@ const setUploadInfo = () => {
uploadSteps
.
value
=
[
{
title
:
'1、导入前请先录入以下内容'
,
type
:
'input'
,
selectInfo
:
{
label
:
'采集任务名称'
,
type
:
'group'
,
formItems
:
[{
type
:
'input'
,
label
:
'数据源名称'
,
placeholder
:
'请输入'
,
field
:
'
collectTaskName
'
,
field
:
'
databaseNameZh
'
,
default
:
''
,
clearable
:
true
,
maxlength
:
50
,
filterable
:
true
,
required
:
true
}
},
{
type
:
'input'
,
label
:
'数据库英文名'
,
placeholder
:
'请输入'
,
field
:
'databaseNameEn'
,
default
:
''
,
clearable
:
true
,
maxlength
:
50
,
filterable
:
true
,
required
:
true
},
{
label
:
'是否覆盖原有数据'
,
type
:
'switch'
,
field
:
'isCover'
,
activeValue
:
'Y'
,
block
:
true
,
required
:
true
,
inactiveValue
:
'N'
}]
},
{
title
:
'2、请下载最新的模板,并按照模板格式准备需要导入的数据'
,
...
...
@@ -591,7 +617,7 @@ const setUploadInfo = () => {
}
}
]
uploadInfo
.
value
.
uploadInfo
.
extraParams
=
{}
uploadInfo
.
value
.
uploadInfo
.
extraParams
=
{
isCover
:
'Y'
}
}
else
{
uploadSteps
.
value
=
[
{
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
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 post a comment