匿名化报告添加不符合文件规则的清单
Showing
4 changed files
with
55 additions
and
3 deletions
| ... | @@ -393,3 +393,8 @@ export const downDicomPath = (taskExecGuid) => request({ | ... | @@ -393,3 +393,8 @@ export const downDicomPath = (taskExecGuid) => request({ |
| 393 | method: 'get', | 393 | method: 'get', |
| 394 | responseType: 'blob' | 394 | responseType: 'blob' |
| 395 | }) | 395 | }) |
| 396 | |||
| 397 | export const getNoComplianceList = (taskGuid) => request({ | ||
| 398 | url: `${import.meta.env.VITE_APP_DIGITAL_CONTRACT_URL}/anon-task/get-no-compliance?taskGuid=${taskGuid}`, | ||
| 399 | method: 'get' | ||
| 400 | }) | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -10,6 +10,7 @@ import { | ... | @@ -10,6 +10,7 @@ import { |
| 10 | getAnonTaskDetail, | 10 | getAnonTaskDetail, |
| 11 | htmlToWord, | 11 | htmlToWord, |
| 12 | sendAnonReport, | 12 | sendAnonReport, |
| 13 | getNoComplianceList, | ||
| 13 | } from '@/api/modules/dataAnonymization'; | 14 | } from '@/api/modules/dataAnonymization'; |
| 14 | import { changeNum, download } from '@/utils/common'; | 15 | import { changeNum, download } from '@/utils/common'; |
| 15 | import { ElMessage } from 'element-plus'; | 16 | import { ElMessage } from 'element-plus'; |
| ... | @@ -42,6 +43,7 @@ const taskExecGuid = ref(route.query.execGuid); | ... | @@ -42,6 +43,7 @@ const taskExecGuid = ref(route.query.execGuid); |
| 42 | const oldAnonTaskValueInfo: any = ref({}); | 43 | const oldAnonTaskValueInfo: any = ref({}); |
| 43 | /** 执行结果信息 */ | 44 | /** 执行结果信息 */ |
| 44 | const analysisResultInfo: any = ref({}); | 45 | const analysisResultInfo: any = ref({}); |
| 46 | const noComplianceList: any = ref([]); | ||
| 45 | 47 | ||
| 46 | const containerRef = ref(); | 48 | const containerRef = ref(); |
| 47 | 49 | ||
| ... | @@ -273,6 +275,15 @@ onBeforeMount(() => { | ... | @@ -273,6 +275,15 @@ onBeforeMount(() => { |
| 273 | analysisResultTableFields.value = res.data?.column || []; | 275 | analysisResultTableFields.value = res.data?.column || []; |
| 274 | pageInfo.value.curr = 1; | 276 | pageInfo.value.curr = 1; |
| 275 | getAnalysisResultPageData(true); | 277 | getAnalysisResultPageData(true); |
| 278 | if (taskGuid.value) { | ||
| 279 | getNoComplianceList(taskGuid.value).then((res: any) => { | ||
| 280 | if (res?.code == proxy.$passCode) { | ||
| 281 | noComplianceList.value = res.data || []; | ||
| 282 | } else { | ||
| 283 | res?.msg && proxy.$ElMessage.error(res.msg); | ||
| 284 | } | ||
| 285 | }); | ||
| 286 | } | ||
| 276 | } else { | 287 | } else { |
| 277 | res?.msg && proxy.$ElMessage.error(res.msg); | 288 | res?.msg && proxy.$ElMessage.error(res.msg); |
| 278 | } | 289 | } |
| ... | @@ -310,7 +321,8 @@ onBeforeMount(() => { | ... | @@ -310,7 +321,8 @@ onBeforeMount(() => { |
| 310 | } : null" :analysis-result-loading="analysisResultLoading" | 321 | } : null" :analysis-result-loading="analysisResultLoading" |
| 311 | :analysis-result-table-fields="analysisResultTableFields" :old-anon-task-value-info="oldAnonTaskValueInfo" | 322 | :analysis-result-table-fields="analysisResultTableFields" :old-anon-task-value-info="oldAnonTaskValueInfo" |
| 312 | :container-width="containerWidth" :origin-result-table-field-column="originResultTableFieldColumn" | 323 | :container-width="containerWidth" :origin-result-table-field-column="originResultTableFieldColumn" |
| 313 | :page-info="pageInfo" :result-data="resultData" :fullResultData="fullResultData" @page-change="pageChange"> | 324 | :page-info="pageInfo" :result-data="resultData" :fullResultData="fullResultData" |
| 325 | :no-compliance-list="noComplianceList" @page-change="pageChange"> | ||
| 314 | </anonResultAnalysis> | 326 | </anonResultAnalysis> |
| 315 | </div> | 327 | </div> |
| 316 | </template> | 328 | </template> | ... | ... |
| ... | @@ -164,7 +164,8 @@ | ... | @@ -164,7 +164,8 @@ |
| 164 | :element-loading-text="loadingText" :analysis-result-loading="analysisResultLoading" | 164 | :element-loading-text="loadingText" :analysis-result-loading="analysisResultLoading" |
| 165 | :analysis-result-table-fields="analysisResultTableFields" :old-anon-task-value-info="oldAnonTaskValueInfo" | 165 | :analysis-result-table-fields="analysisResultTableFields" :old-anon-task-value-info="oldAnonTaskValueInfo" |
| 166 | :container-width="containerWidth" :origin-result-table-field-column="originResultTableFieldColumn" | 166 | :container-width="containerWidth" :origin-result-table-field-column="originResultTableFieldColumn" |
| 167 | :page-info="pageInfo" :result-data="resultData" :fullResultData="fullResultData" @page-change="pageChange"> | 167 | :page-info="pageInfo" :result-data="resultData" :fullResultData="fullResultData" |
| 168 | :no-compliance-list="noComplianceList" @page-change="pageChange"> | ||
| 168 | </anonResultAnalysis> | 169 | </anonResultAnalysis> |
| 169 | <!-- 连接器只能查看报告 --> | 170 | <!-- 连接器只能查看报告 --> |
| 170 | <template v-if="!isDataProvider" #header> | 171 | <template v-if="!isDataProvider" #header> |
| ... | @@ -238,7 +239,8 @@ import { | ... | @@ -238,7 +239,8 @@ import { |
| 238 | getDicomStatistics, | 239 | getDicomStatistics, |
| 239 | retryDicom, | 240 | retryDicom, |
| 240 | downloadAnonReport, | 241 | downloadAnonReport, |
| 241 | sendAnonReport | 242 | sendAnonReport, |
| 243 | getNoComplianceList | ||
| 242 | } from '@/api/modules/dataAnonymization'; | 244 | } from '@/api/modules/dataAnonymization'; |
| 243 | import { | 245 | import { |
| 244 | parseAndDecodeUrl, | 246 | parseAndDecodeUrl, |
| ... | @@ -2015,6 +2017,7 @@ const refreshTimer = ref() | ... | @@ -2015,6 +2017,7 @@ const refreshTimer = ref() |
| 2015 | 2017 | ||
| 2016 | /** 执行结果信息 */ | 2018 | /** 执行结果信息 */ |
| 2017 | const analysisResultInfo: any = ref({}); | 2019 | const analysisResultInfo: any = ref({}); |
| 2020 | const noComplianceList: any = ref([]); | ||
| 2018 | 2021 | ||
| 2019 | const getResultPromise: any = ref(null); | 2022 | const getResultPromise: any = ref(null); |
| 2020 | 2023 | ||
| ... | @@ -2048,6 +2051,15 @@ const processStepThreeResultView = (isRefresh = false) => { | ... | @@ -2048,6 +2051,15 @@ const processStepThreeResultView = (isRefresh = false) => { |
| 2048 | analysisResultTableFields.value = res.data?.column || []; | 2051 | analysisResultTableFields.value = res.data?.column || []; |
| 2049 | pageInfo.value.curr = 1; | 2052 | pageInfo.value.curr = 1; |
| 2050 | getAnalysisResultPageData(true); | 2053 | getAnalysisResultPageData(true); |
| 2054 | if (taskGuid.value) { | ||
| 2055 | getNoComplianceList(taskGuid.value).then((res: any) => { | ||
| 2056 | if (res?.code == proxy.$passCode) { | ||
| 2057 | noComplianceList.value = res.data || []; | ||
| 2058 | } else { | ||
| 2059 | res?.msg && proxy.$ElMessage.error(res.msg); | ||
| 2060 | } | ||
| 2061 | }); | ||
| 2062 | } | ||
| 2051 | } else if (analysisResultInfo.value.status == 'E') { | 2063 | } else if (analysisResultInfo.value.status == 'E') { |
| 2052 | isExecEnd.value = true | 2064 | isExecEnd.value = true |
| 2053 | refreshTimer.value && clearInterval(refreshTimer.value); | 2065 | refreshTimer.value && clearInterval(refreshTimer.value); | ... | ... |
| ... | @@ -354,10 +354,29 @@ | ... | @@ -354,10 +354,29 @@ |
| 354 | <h1 v-if="analysisResultInfo.rating <= 2" style="text-align: left;margin-top: 10px;margin-bottom: 10px;">六、建议与改进</h1> | 354 | <h1 v-if="analysisResultInfo.rating <= 2" style="text-align: left;margin-top: 10px;margin-bottom: 10px;">六、建议与改进</h1> |
| 355 | <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> | 355 | <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> |
| 356 | <br clear="all" style="page-break-before:always;mso-break-type:section-break"> | 356 | <br clear="all" style="page-break-before:always;mso-break-type:section-break"> |
| 357 | |||
| 358 | <!-- 附录:不符合规则的文件清单 --> | ||
| 359 | <h1 v-if="noComplianceList.length" style="text-align: left;margin-top: 10px;margin-bottom: 10px;">附录:不符合规则的文件清单</h1> | ||
| 360 | <table v-if="noComplianceList.length" border="0" cellspacing="0" | ||
| 361 | style="width:100%;word-break: break-all;margin: 0 auto;text-align: left;border-collapse: collapse;color: #212121"> | ||
| 362 | <thead> | ||
| 363 | <tr> | ||
| 364 | <th style="border: 0.5px solid #d9d9d9;text-align: left;padding: 4px 8px;">文件路径</th> | ||
| 365 | </tr> | ||
| 366 | </thead> | ||
| 367 | <tbody> | ||
| 368 | <tr v-for="(item, index) in noComplianceList" :key="index"> | ||
| 369 | <td style="border: 0.5px solid #d9d9d9;text-align: left;padding: 4px 8px;"> | ||
| 370 | <span style="word-break: break-all;">{{ item.filePath || item.path || item }}</span> | ||
| 371 | </td> | ||
| 372 | </tr> | ||
| 373 | </tbody> | ||
| 374 | </table> | ||
| 357 | </div> | 375 | </div> |
| 358 | </div> | 376 | </div> |
| 359 | </template> | 377 | </template> |
| 360 | <script lang="ts" setup name="anonResultAnalysis"> | 378 | <script lang="ts" setup name="anonResultAnalysis"> |
| 379 | import { ref, computed } from 'vue'; | ||
| 361 | import { TableColumnWidth } from '@/utils/enum'; | 380 | import { TableColumnWidth } from '@/utils/enum'; |
| 362 | import { QuestionFilled, CircleCloseFilled } from "@element-plus/icons-vue"; | 381 | import { QuestionFilled, CircleCloseFilled } from "@element-plus/icons-vue"; |
| 363 | import Moment from 'moment'; | 382 | import Moment from 'moment'; |
| ... | @@ -412,6 +431,10 @@ const props = defineProps({ | ... | @@ -412,6 +431,10 @@ const props = defineProps({ |
| 412 | type: Number, | 431 | type: Number, |
| 413 | default: 1200, | 432 | default: 1200, |
| 414 | }, | 433 | }, |
| 434 | noComplianceList: { | ||
| 435 | type: Array, | ||
| 436 | default: () => [], | ||
| 437 | }, | ||
| 415 | }) | 438 | }) |
| 416 | 439 | ||
| 417 | const report = ref(); | 440 | const report = ref(); | ... | ... |
-
Please register or sign in to post a comment