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
9ca12c6e
authored
2025-09-08 11:20:52 +0800
by
lihua
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
fix: 修复匿名化处理问题
1 parent
2aa32e0f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
137 additions
and
106 deletions
src/views/data_anonymization/anonTaskCreate.vue
src/views/data_anonymization/anonTaskStepTwo.vue
src/views/data_anonymization/anonTaskCreate.vue
View file @
9ca12c6
...
...
@@ -437,40 +437,49 @@ const parseFileData = (fileRaw) => {
sampleTableFields
.
value
=
[];
sampleTableData
.
value
=
[];
}
else
{
const
res
=
await
chTransformEn
(
json
[
0
]);
let
fields
=
res
.
data
||
[];
sampleTableFields
.
value
=
fields
?.
map
((
j
,
index
)
=>
{
return
{
index
:
index
,
enName
:
j
.
enName
+
''
,
chName
:
j
.
chName
+
''
,
dataType
:
'varchar'
try
{
const
res
:
any
=
await
chTransformEn
(
json
[
0
]);
if
(
res
?.
code
!=
proxy
.
$passCode
)
{
sampleTableDataLoading
.
value
=
false
;
proxy
.
$ElMessage
.
error
(
res
.
msg
);
return
;
}
})
||
[];
parseFileDataSum
.
value
=
json
;
/** 粗略算出字段类型 */
json
.
slice
(
1
,
10
).
forEach
((
info
,
row
)
=>
{
json
[
0
].
forEach
((
name
,
col
)
=>
{
if
(
info
[
col
]
===
""
||
info
[
col
]
==
null
||
sampleTableFields
.
value
[
col
].
dataType
!=
'varchar'
)
{
return
;
}
else
{
var
cellRef
=
XLSX
.
utils
.
encode_cell
({
r
:
row
+
1
,
c
:
col
});
var
cell
=
sheet
[
cellRef
];
let
v
=
cell
.
w
||
info
[
col
];
let
isNum
=
cell
.
t
==
'n'
;
if
(
isNum
)
{
if
(
v
.
includes
(
'.'
)
&&
sampleTableFields
.
value
[
col
].
dataType
!=
'decimal'
)
{
sampleTableFields
.
value
[
col
].
dataType
=
'decimal'
;
}
else
{
sampleTableFields
.
value
[
col
].
dataType
=
'int'
;
let
fields
=
res
.
data
||
[];
sampleTableFields
.
value
=
fields
?.
map
((
j
,
index
)
=>
{
return
{
index
:
index
,
enName
:
j
.
enName
+
''
,
chName
:
j
.
chName
+
''
,
dataType
:
'varchar'
}
})
||
[];
parseFileDataSum
.
value
=
json
;
/** 粗略算出字段类型 */
json
.
slice
(
1
,
10
).
forEach
((
info
,
row
)
=>
{
json
[
0
].
forEach
((
name
,
col
)
=>
{
if
(
info
[
col
]
===
""
||
info
[
col
]
==
null
||
sampleTableFields
.
value
[
col
].
dataType
!=
'varchar'
)
{
return
;
}
else
{
var
cellRef
=
XLSX
.
utils
.
encode_cell
({
r
:
row
+
1
,
c
:
col
});
var
cell
=
sheet
[
cellRef
];
let
v
=
cell
.
w
||
info
[
col
];
let
isNum
=
cell
.
t
==
'n'
;
if
(
isNum
)
{
if
(
v
.
includes
(
'.'
)
&&
sampleTableFields
.
value
[
col
].
dataType
!=
'decimal'
)
{
sampleTableFields
.
value
[
col
].
dataType
=
'decimal'
;
}
else
{
sampleTableFields
.
value
[
col
].
dataType
=
'int'
;
}
}
}
}
});
})
transferSampleData
();
});
})
transferSampleData
();
sampleTableDataLoading
.
value
=
false
;
}
catch
(
error
)
{
sampleTableDataLoading
.
value
=
false
;
}
}
sampleTableDataLoading
.
value
=
false
;
});
}
...
...
@@ -745,82 +754,85 @@ onBeforeMount(() => {
dataSelectInfoItems
.
value
[
4
].
visible
=
dataSource
==
1
;
dataSelectInfoItems
.
value
[
5
].
visible
=
dataSource
==
1
;
dataSelectInfoItems
.
value
[
6
].
visible
=
dataSource
==
2
;
//文件解析
if
(
dataSource
==
2
)
{
let
url
=
detailInfo
.
value
.
filePath
?.
url
;
sampleTableDataLoading
.
value
=
true
;
const
refSignInfo
:
any
=
await
getDownFileSignByUrl
(
parseAndDecodeUrl
(
url
).
fileName
);
if
(
!
refSignInfo
?.
data
)
{
fullscreenLoading
.
value
=
false
;
refSignInfo
?.
msg
&&
ElMessage
.
error
(
refSignInfo
?.
msg
);
return
;
}
obsDownloadRequest
(
refSignInfo
?.
data
).
then
((
res
:
any
)
=>
{
try
{
//文件解析
if
(
dataSource
==
2
)
{
let
url
=
detailInfo
.
value
.
filePath
?.
url
;
sampleTableDataLoading
.
value
=
true
;
const
refSignInfo
:
any
=
await
getDownFileSignByUrl
(
parseAndDecodeUrl
(
url
).
fileName
);
if
(
!
refSignInfo
?.
data
)
{
fullscreenLoading
.
value
=
false
;
refSignInfo
?.
msg
&&
ElMessage
.
error
(
refSignInfo
?.
msg
);
return
;
}
const
fileRes
:
any
=
await
obsDownloadRequest
(
refSignInfo
?.
data
);
sampleTableDataLoading
.
value
=
false
;
if
(
res
&&
!
r
es
.
msg
)
{
parseFileData
(
r
es
);
if
(
fileRes
&&
!
fileR
es
.
msg
)
{
parseFileData
(
fileR
es
);
}
else
{
res
?.
msg
&&
ElMessage
.
error
(
res
?.
msg
);
fileRes
?.
msg
&&
ElMessage
.
error
(
fileRes
?.
msg
);
}
// 会出现从文件切换到数据库时没有数据库列表的问题。
const
res
:
any
=
await
getDatabase
({
connectStatus
:
1
});
if
(
res
?.
code
==
proxy
.
$passCode
)
{
dataSourceList
.
value
=
res
.
data
||
[];
let
item
=
dataSelectInfoItems
.
value
.
find
(
item
=>
item
.
field
==
'dataSourceGuid'
);
item
&&
(
item
.
options
=
dataSourceList
.
value
);
}
else
{
proxy
.
$ElMessage
.
error
(
res
.
msg
);
}
})
// 会出现从文件切换到数据库时没有数据库列表的问题。
const
res
:
any
=
await
getDatabase
({
connectStatus
:
1
});
if
(
res
?.
code
==
proxy
.
$passCode
)
{
dataSourceList
.
value
=
res
.
data
||
[];
let
item
=
dataSelectInfoItems
.
value
.
find
(
item
=>
item
.
field
==
'dataSourceGuid'
);
item
&&
(
item
.
options
=
dataSourceList
.
value
);
}
else
{
proxy
.
$ElMessage
.
error
(
res
.
msg
);
}
}
else
{
const
res
:
any
=
await
getDatabase
({
connectStatus
:
1
});
if
(
res
?.
code
==
proxy
.
$passCode
)
{
dataSourceList
.
value
=
res
.
data
||
[];
let
item
=
dataSelectInfoItems
.
value
.
find
(
item
=>
item
.
field
==
'dataSourceGuid'
);
item
&&
(
item
.
options
=
dataSourceList
.
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
();
const
res
:
any
=
await
getDatabase
({
connectStatus
:
1
});
if
(
res
?.
code
==
proxy
.
$passCode
)
{
dataSourceList
.
value
=
res
.
data
||
[];
let
item
=
dataSelectInfoItems
.
value
.
find
(
item
=>
item
.
field
==
'dataSourceGuid'
);
item
&&
(
item
.
options
=
dataSourceList
.
value
);
}
else
{
ElMessage
.
error
(
res
.
msg
);
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
();
}
else
{
ElMessage
.
error
(
res
.
msg
);
}
});
}
fullscreenLoading
.
value
=
false
;
}
catch
(
error
)
{
fullscreenLoading
.
value
=
false
;
}
fullscreenLoading
.
value
=
false
;
}
else
{
fullscreenLoading
.
value
=
false
;
proxy
.
$ElMessage
.
error
(
res
.
msg
);
...
...
src/views/data_anonymization/anonTaskStepTwo.vue
View file @
9ca12c6
...
...
@@ -139,6 +139,8 @@ const ruleModelTableInfo = ref({
return
rd
;
})
||
[];
}
fieldRulesEndFormInfo
.
value
.
formInfo
.
items
[
0
].
default
=
''
;
fieldRulesEndFormInfo
.
value
.
formInfo
.
items
[
1
].
default
=
''
;
if
(
!
row
.
desensitiveRuleCode
)
{
drawerInfo
.
value
.
container
.
contents
=
[
fieldRulesFormInfo
.
value
];
}
else
{
...
...
@@ -450,6 +452,8 @@ const addRowRules = () => {
fieldChName
:
''
,
upperOperator
:
'≤'
}];
fieldRulesEndFormInfo
.
value
.
formInfo
.
items
[
0
].
default
=
''
;
fieldRulesEndFormInfo
.
value
.
formInfo
.
items
[
1
].
default
=
''
;
drawerInfo
.
value
.
container
.
contents
=
[
fieldRulesFormInfo
.
value
,
fieldRulesEndFormInfo
.
value
];
}
...
...
@@ -475,13 +479,19 @@ const drawerBtnClick = async (btn, info) => {
let
desensitiveRuleDetailInfo
=
getDesensitiveRuleDetailInfo
(
info
);
// 脱敏规则为掩盖,字符,区间替换存在时需要调用接口检验
if
(
info
.
desensitiveRuleCode
==
'DISSEMBLE'
||
info
.
desensitiveRuleCode
==
'CHARREPLACE'
||
info
.
desensitiveRuleCode
==
'RANGEREPLACE'
)
{
let
res
:
any
=
await
validateAnonRule
({
desensitiveRuleCode
:
info
.
desensitiveRuleCode
,
value
:
''
,
desensitiveRuleDetail
:
desensitiveRuleDetailInfo
})
if
(
res
?.
code
!=
proxy
.
$passCode
)
{
proxy
.
$ElMessage
.
error
(
res
.
msg
);
try
{
let
res
:
any
=
await
validateAnonRule
({
desensitiveRuleCode
:
info
.
desensitiveRuleCode
,
value
:
''
,
desensitiveRuleDetail
:
desensitiveRuleDetailInfo
})
if
(
res
?.
code
!=
proxy
.
$passCode
)
{
proxy
.
$ElMessage
.
error
(
res
.
msg
);
drawerInfo
.
value
.
footer
.
btns
[
1
].
loading
=
false
;
return
;
}
}
catch
(
error
)
{
drawerInfo
.
value
.
footer
.
btns
[
1
].
loading
=
false
;
}
}
drawerInfo
.
value
.
footer
.
btns
[
1
].
loading
=
false
;
...
...
@@ -553,6 +563,15 @@ const drawerSelectChange = (val, row, info) => {
}
}
});
if
(
val
==
'RANGEREPLACE'
)
{
let
fieldName
=
info
.
fieldName
;
let
fieldChName
=
fieldName
&&
props
.
fieldNameList
.
find
(
f
=>
f
.
enName
==
fieldName
)?.
chName
;
rangeReplaceRuleDetails
.
value
.
forEach
(
r
=>
{
if
(
fieldChName
&&
r
.
fieldChName
!=
fieldChName
)
{
r
.
fieldChName
=
fieldChName
;
}
});
}
if
(
!
val
)
{
drawerInfo
.
value
.
container
.
contents
=
[
fieldRulesFormInfo
.
value
];
}
else
{
...
...
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