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
3a5b041c
authored
2026-04-15 13:46:06 +0800
by
lihua
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
提交数据源支持连接华为云obs类型
1 parent
9fbe3018
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
124 additions
and
62 deletions
src/views/data_anonymization/anonTaskCreate.vue
src/views/data_service/dataSource.vue
src/views/data_anonymization/anonTaskCreate.vue
View file @
3a5b041
...
...
@@ -18,7 +18,7 @@
@
uploadFileChange=
"uploadFileChange"
@
checkboxChange=
"handleDataSelectFormCheckboxChange"
/>
</ContentWrap>
<!-- 抽样预览的表单填写配置,及表格展示 -->
<ContentWrap
v-show=
"formRef?.formInline?.dataSource != 3"
id=
"id-previewData"
title=
"数据抽样预览"
description=
""
<ContentWrap
v-show=
"formRef?.formInline?.dataSource != 3
&& !(formRef?.formInline?.dataSourceGuid && currDatasourceSelect?.databaseType === 'obs')
"
id=
"id-previewData"
title=
"数据抽样预览"
description=
""
style=
"margin-top: 16px;"
>
<!-- 选择抽样预览的表单设置 -->
<Form
ref=
"dataSimpleFormRef"
:itemList=
"dataSimpleFormItems"
:rules=
"dataSimpleFormRules"
...
...
@@ -615,6 +615,13 @@ const dataSelectFormSelectChangeHandlers = {
return
;
}
let
dsInfo
=
currDatasourceSelect
.
value
=
dataSourceList
.
value
.
find
(
d
=>
d
.
guid
==
val
);
if
(
dsInfo
.
databaseType
==
'obs'
)
{
sampleTableFields
.
value
=
[];
parseFileDataSum
.
value
=
[];
sampleTableData
.
value
=
[];
setDataSelectFormItems
(
Object
.
assign
({},
formInfo
,
{
file
:
!
formInfo
[
'file'
]
?
[]
:
formInfo
[
'file'
],
tableName
:
''
,
qualifiedIdentifier
:
[]
}))
return
;
}
//清除数据表得值,重新获取下拉列表
const
res
:
any
=
await
getDsTableByDs
({
pageSize
:
-
1
,
...
...
@@ -666,6 +673,10 @@ const dataSelectFormSelectChangeHandlers = {
});
},
handleType
:
(
val
,
row
,
formInfo
)
=>
{
// 第一种匿名处理类型是不可以选择obs类型的。
if
(
val
==
'01'
&&
formInfo
.
dataSourceGuid
&&
currDatasourceSelect
.
value
.
databaseType
==
'obs'
)
{
formInfo
.
dataSourceGuid
=
''
;
}
setDataSelectFormItems
(
formInfo
);
}
}
...
...
@@ -704,10 +715,14 @@ const setDataSelectFormItems = (info, isDetail = false) => {
item
.
default
=
''
;
}
}
else
if
(
item
.
field
==
'qualifiedIdentifier'
)
{
item
.
visible
=
info
[
'handleType'
]
==
'02'
&&
info
[
'dataSource'
]
!=
3
;
item
.
visible
=
info
[
'handleType'
]
==
'02'
&&
info
[
'dataSource'
]
!=
3
&&
!
(
info
[
'dataSourceGuid'
]
&&
currDatasourceSelect
.
value
?.
databaseType
===
'obs'
)
;
if
(
info
[
'dataSource'
]
==
3
)
{
item
.
options
=
qualifiedIdentifierFloderList
.
value
;
}
}
else
if
(
item
.
field
==
'tableName'
)
{
item
.
visible
=
!
(
info
[
'dataSourceGuid'
]
&&
currDatasourceSelect
.
value
?.
databaseType
===
'obs'
);
//数据源类型为obs的没有数据表选择
}
else
if
(
item
.
field
==
'dataSourceGuid'
)
{
item
.
options
=
info
.
handleType
==
'02'
?
dataSourceList
.
value
:
dataSourceList
.
value
.
filter
(
d
=>
d
.
databaseType
!==
'obs'
)
}
});
stepsInfo
.
value
=
info
.
handleType
==
'02'
?
reportStepsInfo
.
value
:
originStepsInfo
.
value
;
...
...
@@ -1351,6 +1366,11 @@ const changeStepHandlers = {
let
val
=
2
;
formRef
.
value
?.
ruleFormRef
?.
validate
((
valid
)
=>
{
if
(
valid
)
{
let
formInline
=
formRef
.
value
?.
formInline
;
// if (formInline?.handleType == '01' && formInline?.dataSourceGuid && currDatasourceSelect.value?.databaseType === 'obs') {
// return;
// }
if
(
formRef
.
value
?.
formInline
?.
dataSource
==
2
&&
!
sampleTableFields
.
value
?.
length
)
{
proxy
.
$ElMessage
.
error
(
'上传文件的字段不能为空'
);
return
;
...
...
@@ -1482,17 +1502,21 @@ const changeStepHandlers = {
formRef
.
value
?.
ruleFormRef
?.
validate
((
valid
,
errorItem
)
=>
{
if
(
valid
)
{
let
dataSource
=
formRef
.
value
?.
formInline
?.
dataSource
;
if
(
dataSource
==
2
&&
!
sampleTableFields
.
value
?.
length
)
{
if
(
dataSource
==
2
&&
currDatasourceSelect
.
value
.
databaseType
!==
'obs'
&&
!
sampleTableFields
.
value
?.
length
)
{
proxy
.
$ElMessage
.
error
(
'上传文件的字段不能为空'
);
return
;
}
if
(
dataSource
!=
3
)
{
dataSimpleFormRef
.
value
?.
ruleFormRef
?.
validate
((
valid
)
=>
{
if
(
valid
)
{
// Object.assign(saveParams, { riskThreshold: '0.05' });
exec
(
saveParams
);
}
});
if
(
currDatasourceSelect
.
value
.
databaseType
===
'obs'
&&
saveParams
.
dataSourceGuid
)
{
exec
(
saveParams
);
}
else
{
dataSimpleFormRef
.
value
?.
ruleFormRef
?.
validate
((
valid
)
=>
{
if
(
valid
)
{
// Object.assign(saveParams, { riskThreshold: '0.05' });
exec
(
saveParams
);
}
});
}
}
else
{
if
(
!
selectCurrPath
.
value
)
{
proxy
.
$ElMessage
.
error
(
'请先上传文件'
);
...
...
@@ -1619,61 +1643,63 @@ onBeforeMount(() => {
fileRes
?.
msg
&&
ElMessage
.
error
(
fileRes
?.
msg
);
}
// 会出现从文件切换到数据库时没有数据库列表的问题。
const
res
:
any
=
await
getDatabase
({
connectStatus
:
1
});
const
res
:
any
=
await
getDatabase
({
connectStatus
:
1
,
isAllStorageType
:
'Y'
});
if
(
res
?.
code
==
proxy
.
$passCode
)
{
dataSourceList
.
value
=
res
.
data
||
[];
let
item
=
dataSelectInfoItems
.
value
.
find
(
item
=>
item
.
field
==
'dataSourceGuid'
);
item
&&
(
item
.
options
=
dataSourceList
.
value
);
item
&&
(
item
.
options
=
d
etailInfo
.
value
.
handleType
==
'01'
?
dataSourceList
.
value
.
filter
(
d
=>
d
.
databaseType
!==
'obs'
)
:
d
ataSourceList
.
value
);
}
else
{
proxy
.
$ElMessage
.
error
(
res
.
msg
);
}
}
else
if
(
dataSource
==
1
)
{
const
res
:
any
=
await
getDatabase
({
connectStatus
:
1
});
const
res
:
any
=
await
getDatabase
({
connectStatus
:
1
,
isAllStorageType
:
'Y'
});
if
(
res
?.
code
==
proxy
.
$passCode
)
{
dataSourceList
.
value
=
res
.
data
||
[];
let
item
=
dataSelectInfoItems
.
value
.
find
(
item
=>
item
.
field
==
'dataSourceGuid'
);
item
&&
(
item
.
options
=
dataSourceList
.
value
);
item
&&
(
item
.
options
=
d
etailInfo
.
value
.
handleType
==
'01'
?
dataSourceList
.
value
.
filter
(
d
=>
d
.
databaseType
!==
'obs'
)
:
d
ataSourceList
.
value
);
}
else
{
proxy
.
$ElMessage
.
error
(
res
.
msg
);
}
currDatasourceSelect
.
value
=
dataSourceList
.
value
.
find
(
d
=>
d
.
guid
==
detailInfo
.
value
.
dataSourceGuid
);
const
tableRes
:
any
=
await
getDsTableByDs
({
pageSize
:
-
1
,
pageIndex
:
1
,
dataSourceGuid
:
detailInfo
.
value
.
dataSourceGuid
,
database
:
currDatasourceSelect
.
value
.
databaseNameEn
,
databaseType
:
currDatasourceSelect
.
value
.
databaseType
,
tableName
:
''
,
hadFlag
:
false
});
if
(
tableRes
?.
code
==
proxy
.
$passCode
)
{
dsTableList
.
value
=
tableRes
.
data
?.
records
||
[];
let
item
=
dataSelectInfoItems
.
value
.
find
(
item
=>
item
.
field
==
'tableName'
);
item
&&
(
item
.
options
=
dsTableList
.
value
);
}
else
{
proxy
.
$ElMessage
.
error
(
tableRes
.
msg
);
}
getDsTableFieldColumn
({
pageSize
:
50
,
pageIndex
:
1
,
dataSourceGuid
:
currDatasourceSelect
.
value
.
guid
,
database
:
currDatasourceSelect
.
value
.
databaseNameEn
,
databaseType
:
currDatasourceSelect
.
value
.
databaseType
,
tableName
:
detailInfo
.
value
.
tableName
,
}).
then
((
res
:
any
)
=>
{
if
(
res
.
code
==
proxy
.
$passCode
)
{
sampleTableFields
.
value
=
res
.
data
?.
map
(
d
=>
{
d
.
fieldDataType
=
d
.
dataType
;
d
.
enName
=
d
.
columnName
;
d
.
chName
=
d
.
columnZhName
;
return
d
;
})
||
[];
/** 判断有抽样数据,需要查询接口 */
getSampleDataByDsTable
();
if
(
currDatasourceSelect
.
value
.
databaseType
!=
'obs'
)
{
const
tableRes
:
any
=
await
getDsTableByDs
({
pageSize
:
-
1
,
pageIndex
:
1
,
dataSourceGuid
:
detailInfo
.
value
.
dataSourceGuid
,
database
:
currDatasourceSelect
.
value
.
databaseNameEn
,
databaseType
:
currDatasourceSelect
.
value
.
databaseType
,
tableName
:
''
,
hadFlag
:
false
});
if
(
tableRes
?.
code
==
proxy
.
$passCode
)
{
dsTableList
.
value
=
tableRes
.
data
?.
records
||
[];
let
item
=
dataSelectInfoItems
.
value
.
find
(
item
=>
item
.
field
==
'tableName'
);
item
&&
(
item
.
options
=
dsTableList
.
value
);
}
else
{
ElMessage
.
error
(
r
es
.
msg
);
proxy
.
$ElMessage
.
error
(
tableR
es
.
msg
);
}
});
getDsTableFieldColumn
({
pageSize
:
50
,
pageIndex
:
1
,
dataSourceGuid
:
currDatasourceSelect
.
value
.
guid
,
database
:
currDatasourceSelect
.
value
.
databaseNameEn
,
databaseType
:
currDatasourceSelect
.
value
.
databaseType
,
tableName
:
detailInfo
.
value
.
tableName
,
}).
then
((
res
:
any
)
=>
{
if
(
res
.
code
==
proxy
.
$passCode
)
{
sampleTableFields
.
value
=
res
.
data
?.
map
(
d
=>
{
d
.
fieldDataType
=
d
.
dataType
;
d
.
enName
=
d
.
columnName
;
d
.
chName
=
d
.
columnZhName
;
return
d
;
})
||
[];
/** 判断有抽样数据,需要查询接口 */
getSampleDataByDsTable
();
}
else
{
ElMessage
.
error
(
res
.
msg
);
}
});
}
}
else
if
(
dataSource
==
3
)
{
processFolderRefresh
();
}
...
...
@@ -1687,7 +1713,8 @@ onBeforeMount(() => {
}
});
}
else
{
getDatabase
({
connectStatus
:
1
}).
then
((
res
:
any
)
=>
{
// TODO,传参是否查询全部,包括obs类型的数据源
getDatabase
({
connectStatus
:
1
,
isAllStorageType
:
'Y'
}).
then
((
res
:
any
)
=>
{
if
(
res
.
code
==
proxy
.
$passCode
)
{
dataSourceList
.
value
=
res
.
data
||
[];
let
item
=
dataSelectInfoItems
.
value
.
find
(
item
=>
item
.
field
==
'dataSourceGuid'
);
...
...
src/views/data_service/dataSource.vue
View file @
3a5b041
...
...
@@ -20,6 +20,14 @@ import {
const
{
proxy
}
=
getCurrentInstance
()
as
any
;
/** 数据库类型下拉列表 */
const
databaseTypesList
=
ref
([
{
label
:
"mysql"
,
value
:
"mysql"
},
{
label
:
"doris"
,
value
:
"doris"
},
{
label
:
"oracle"
,
value
:
"oracle"
},
{
label
:
"华为云obs"
,
value
:
"obs"
},
]);
const
searchItemList
=
ref
([
{
type
:
"select"
,
...
...
@@ -39,11 +47,7 @@ const searchItemList = ref([
field
:
"databaseType"
,
default
:
""
,
placeholder
:
"库类型"
,
options
:
[
{
label
:
"mysql"
,
value
:
"mysql"
},
{
label
:
"doris"
,
value
:
"doris"
},
{
label
:
"oracle"
,
value
:
"oracle"
},
],
options
:
databaseTypesList
.
value
,
clearable
:
true
,
},
{
...
...
@@ -103,7 +107,9 @@ const tableInfo = ref({
{
label
:
"序号"
,
type
:
"index"
,
width
:
56
,
align
:
"center"
},
{
label
:
"数据源名称"
,
field
:
"databaseNameZh"
,
width
:
120
},
{
label
:
"系统分层"
,
field
:
"systemLayer"
,
width
:
96
},
{
label
:
"库类型"
,
field
:
"databaseType"
,
width
:
96
},
{
label
:
"库类型"
,
field
:
"databaseType"
,
width
:
96
,
getName
:
(
scope
)
=>
{
return
scope
.
row
.
databaseType
&&
databaseTypesList
.
value
.
find
(
item
=>
item
.
value
===
scope
.
row
.
databaseType
)?.
label
||
'--'
;
}
},
{
label
:
"数据库名"
,
field
:
"databaseNameEn"
,
width
:
200
},
{
label
:
"连通状态"
,
...
...
@@ -206,11 +212,7 @@ const contents: any = ref({
placeholder
:
"请选择"
,
field
:
"databaseType"
,
default
:
""
,
options
:
[
{
label
:
"mysql"
,
value
:
"mysql"
},
{
label
:
"doris"
,
value
:
"doris"
},
{
label
:
"oracle"
,
value
:
"oracle"
},
],
options
:
databaseTypesList
.
value
,
clearable
:
true
,
required
:
true
,
},
...
...
@@ -329,6 +331,18 @@ const contents: any = ref({
required
:
true
,
},
{
type
:
'radio-group'
,
label
:
'是否https协议'
,
field
:
'isHttps'
,
default
:
''
,
required
:
true
,
visible
:
false
,
options
:
[
{
label
:
'是'
,
value
:
'Y'
},
{
label
:
'否'
,
value
:
'N'
},
],
},
{
label
:
"连接属性"
,
type
:
"textarea-tips"
,
placeholder
:
"请输入"
,
...
...
@@ -993,9 +1007,27 @@ const setFormItems = (name, info: any = null) => {
child
.
default
=
info
[
child
.
field
]
??
""
;
}
});
}
else
if
(
item
.
field
==
'isHttps'
)
{
item
.
visible
=
info
.
databaseType
==
"obs"
;
item
.
default
=
info
[
item
.
field
]
||
"N"
;
}
else
if
(
item
.
field
==
'bizSystem'
)
{
item
.
visible
=
info
.
systemLayer
==
'业务系统'
;
item
.
default
=
info
[
item
.
field
]
||
""
;
}
else
{
item
.
default
=
info
[
item
.
field
]
||
""
;
}
if
(
item
.
field
==
'host'
)
{
item
.
label
=
info
.
databaseType
==
"obs"
?
"地址"
:
"服务器"
;
contentFormInfo
.
rules
.
host
[
0
].
message
=
info
.
databaseType
==
"obs"
?
"请填写地址"
:
"请填写服务器IP地址"
;
}
else
if
(
item
.
field
==
'logonUser'
)
{
item
.
label
=
info
.
databaseType
==
"obs"
?
"凭证ID"
:
"用户名"
;
contentFormInfo
.
rules
.
logonUser
[
0
].
message
=
info
.
databaseType
==
"obs"
?
"请填写凭证ID"
:
"请填写用户名"
;
}
else
if
(
item
.
field
==
'password'
)
{
item
.
label
=
info
.
databaseType
==
"obs"
?
"凭证Key"
:
"密码"
;
contentFormInfo
.
rules
.
password
[
0
].
message
=
info
.
databaseType
==
"obs"
?
"请填写凭证Key"
:
"请填写密码"
;
}
else
if
(
item
.
field
==
'databaseNameEn'
)
{
item
.
label
=
info
.
databaseType
==
"obs"
?
"桶名称"
:
"数据库名"
;
contentFormInfo
.
rules
.
databaseNameEn
[
0
].
message
=
info
.
databaseType
==
"obs"
?
"请填写桶名称"
:
"请填写数据库名"
;
}
else
{
item
.
default
=
info
[
item
.
field
]
||
""
;
...
...
@@ -1224,7 +1256,8 @@ const dialogBtnClick = (btn, info) => {
password
:
info
.
password
,
feLoadUrl
:
info
.
feLoadUrl
,
beLoadUrl
:
info
.
beLoadUrl
,
dorisJdbcUrl
:
info
.
dorisJdbcUrl
dorisJdbcUrl
:
info
.
dorisJdbcUrl
,
isHttps
:
info
.
isHttps
,
};
addDataSource
(
params
)
.
then
((
res
:
any
)
=>
{
...
...
@@ -1258,7 +1291,8 @@ const dialogBtnClick = (btn, info) => {
:
info
.
password
,
feLoadUrl
:
info
.
feLoadUrl
,
beLoadUrl
:
info
.
beLoadUrl
,
dorisJdbcUrl
:
info
.
dorisJdbcUrl
dorisJdbcUrl
:
info
.
dorisJdbcUrl
,
isHttps
:
info
.
isHttps
,
};
params
.
guid
=
currTableData
.
value
.
guid
;
updateDataSource
(
params
)
...
...
@@ -1291,6 +1325,7 @@ const dialogBtnClick = (btn, info) => {
logonUser
:
info
.
logonUser
,
password
:
info
.
password
,
linkage
:
info
.
linkage
,
isHttps
:
info
.
isHttps
,
};
checkDataSourceConnectTest
(
params
).
then
((
res
:
any
)
=>
{
if
(
res
.
code
==
proxy
.
$passCode
)
{
...
...
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