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
65ae1614
authored
2026-07-03 15:19:13 +0800
by
lihua
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
匿名化报告添加不符合文件规则的清单
1 parent
8308acdc
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
55 additions
and
3 deletions
src/api/modules/dataAnonymization.ts
src/views/data_anonymization/anonResultReportView.vue
src/views/data_anonymization/anonTaskCreate.vue
src/views/data_anonymization/components/anonResultAnalysis.vue
src/api/modules/dataAnonymization.ts
View file @
65ae161
...
...
@@ -393,3 +393,8 @@ export const downDicomPath = (taskExecGuid) => request({
method
:
'get'
,
responseType
:
'blob'
})
export
const
getNoComplianceList
=
(
taskGuid
)
=>
request
({
url
:
`
${
import
.
meta
.
env
.
VITE_APP_DIGITAL_CONTRACT_URL
}
/anon-task/get-no-compliance?taskGuid=
${
taskGuid
}
`
,
method
:
'get'
})
\ No newline at end of file
...
...
src/views/data_anonymization/anonResultReportView.vue
View file @
65ae161
...
...
@@ -10,6 +10,7 @@ import {
getAnonTaskDetail
,
htmlToWord
,
sendAnonReport
,
getNoComplianceList
,
}
from
'@/api/modules/dataAnonymization'
;
import
{
changeNum
,
download
}
from
'@/utils/common'
;
import
{
ElMessage
}
from
'element-plus'
;
...
...
@@ -42,6 +43,7 @@ const taskExecGuid = ref(route.query.execGuid);
const
oldAnonTaskValueInfo
:
any
=
ref
({});
/** 执行结果信息 */
const
analysisResultInfo
:
any
=
ref
({});
const
noComplianceList
:
any
=
ref
([]);
const
containerRef
=
ref
();
...
...
@@ -273,6 +275,15 @@ onBeforeMount(() => {
analysisResultTableFields
.
value
=
res
.
data
?.
column
||
[];
pageInfo
.
value
.
curr
=
1
;
getAnalysisResultPageData
(
true
);
if
(
taskGuid
.
value
)
{
getNoComplianceList
(
taskGuid
.
value
).
then
((
res
:
any
)
=>
{
if
(
res
?.
code
==
proxy
.
$passCode
)
{
noComplianceList
.
value
=
res
.
data
||
[];
}
else
{
res
?.
msg
&&
proxy
.
$ElMessage
.
error
(
res
.
msg
);
}
});
}
}
else
{
res
?.
msg
&&
proxy
.
$ElMessage
.
error
(
res
.
msg
);
}
...
...
@@ -310,7 +321,8 @@ onBeforeMount(() => {
} : null"
:analysis-result-loading=
"analysisResultLoading"
:analysis-result-table-fields=
"analysisResultTableFields"
:old-anon-task-value-info=
"oldAnonTaskValueInfo"
:container-width=
"containerWidth"
:origin-result-table-field-column=
"originResultTableFieldColumn"
:page-info=
"pageInfo"
:result-data=
"resultData"
:fullResultData=
"fullResultData"
@
page-change=
"pageChange"
>
:page-info=
"pageInfo"
:result-data=
"resultData"
:fullResultData=
"fullResultData"
:no-compliance-list=
"noComplianceList"
@
page-change=
"pageChange"
>
</anonResultAnalysis>
</div>
</template>
...
...
src/views/data_anonymization/anonTaskCreate.vue
View file @
65ae161
...
...
@@ -164,7 +164,8 @@
:element-loading-text=
"loadingText"
:analysis-result-loading=
"analysisResultLoading"
:analysis-result-table-fields=
"analysisResultTableFields"
:old-anon-task-value-info=
"oldAnonTaskValueInfo"
:container-width=
"containerWidth"
:origin-result-table-field-column=
"originResultTableFieldColumn"
:page-info=
"pageInfo"
:result-data=
"resultData"
:fullResultData=
"fullResultData"
@
page-change=
"pageChange"
>
:page-info=
"pageInfo"
:result-data=
"resultData"
:fullResultData=
"fullResultData"
:no-compliance-list=
"noComplianceList"
@
page-change=
"pageChange"
>
</anonResultAnalysis>
<!-- 连接器只能查看报告 -->
<
template
v-if=
"!isDataProvider"
#
header
>
...
...
@@ -238,7 +239,8 @@ import {
getDicomStatistics
,
retryDicom
,
downloadAnonReport
,
sendAnonReport
sendAnonReport
,
getNoComplianceList
}
from
'@/api/modules/dataAnonymization'
;
import
{
parseAndDecodeUrl
,
...
...
@@ -2015,6 +2017,7 @@ const refreshTimer = ref()
/** 执行结果信息 */
const
analysisResultInfo
:
any
=
ref
({});
const
noComplianceList
:
any
=
ref
([]);
const
getResultPromise
:
any
=
ref
(
null
);
...
...
@@ -2048,6 +2051,15 @@ const processStepThreeResultView = (isRefresh = false) => {
analysisResultTableFields
.
value
=
res
.
data
?.
column
||
[];
pageInfo
.
value
.
curr
=
1
;
getAnalysisResultPageData
(
true
);
if
(
taskGuid
.
value
)
{
getNoComplianceList
(
taskGuid
.
value
).
then
((
res
:
any
)
=>
{
if
(
res
?.
code
==
proxy
.
$passCode
)
{
noComplianceList
.
value
=
res
.
data
||
[];
}
else
{
res
?.
msg
&&
proxy
.
$ElMessage
.
error
(
res
.
msg
);
}
});
}
}
else
if
(
analysisResultInfo
.
value
.
status
==
'E'
)
{
isExecEnd
.
value
=
true
refreshTimer
.
value
&&
clearInterval
(
refreshTimer
.
value
);
...
...
src/views/data_anonymization/components/anonResultAnalysis.vue
View file @
65ae161
...
...
@@ -354,10 +354,29 @@
<h1 v-if="analysisResultInfo.rating <= 2" style="text-align: left;margin-top: 10px;margin-bottom: 10px;">六、建议与改进</h1>
<p v-if="analysisResultInfo.rating <= 2" style="margin: 0px;white-space: pre-wrap;text-indent: 2em;">{{ `
需要对准标识符
$
{
analysisResultInfo
.
qualifiedIdentifier
?.
map
(
f
=>
f
.
chName
)?.
join
(
'、'
)
}做有效的泛化和抑制,满足
k
-
匿名要求(设定
k
≥
10
),从而使得该数据集适用于受控环境下进行跨机构流通。
`
}}
</p>
<br clear="all" style="page-break-before:always;mso-break-type:section-break">
<!-- 附录:不符合规则的文件清单 -->
<h1 v-if="noComplianceList.length" style="text-align: left;margin-top: 10px;margin-bottom: 10px;">附录:不符合规则的文件清单</h1>
<table v-if="noComplianceList.length" border="0" cellspacing="0"
style="width:100%;word-break: break-all;margin: 0 auto;text-align: left;border-collapse: collapse;color: #212121">
<thead>
<tr>
<th style="border: 0.5px solid #d9d9d9;text-align: left;padding: 4px 8px;">文件路径</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in noComplianceList" :key="index">
<td style="border: 0.5px solid #d9d9d9;text-align: left;padding: 4px 8px;">
<span style="word-break: break-all;">{{ item.filePath || item.path || item
}}
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</template>
<script lang="ts" setup name="anonResultAnalysis">
import { ref, computed
}
from 'vue';
import { TableColumnWidth
}
from '@/utils/enum';
import { QuestionFilled, CircleCloseFilled
}
from "@element-plus/icons-vue";
import Moment from 'moment';
...
...
@@ -412,6 +431,10 @@ const props = defineProps({
type: Number,
default: 1200,
}
,
noComplianceList: {
type: Array,
default: () => [],
}
,
}
)
const report = ref();
...
...
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