65ae1614 by lihua

匿名化报告添加不符合文件规则的清单

1 parent 8308acdc
...@@ -392,4 +392,9 @@ export const downDicomPath = (taskExecGuid) => request({ ...@@ -392,4 +392,9 @@ export const downDicomPath = (taskExecGuid) => request({
392 url: `${import.meta.env.VITE_APP_DIGITAL_CONTRACT_URL}/anon-task/down-dicom-path?taskExecGuid=${taskExecGuid}`, 392 url: `${import.meta.env.VITE_APP_DIGITAL_CONTRACT_URL}/anon-task/down-dicom-path?taskExecGuid=${taskExecGuid}`,
393 method: 'get', 393 method: 'get',
394 responseType: 'blob' 394 responseType: 'blob'
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'
395 }) 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-匿名要求(设定k10),从而使得该数据集适用于受控环境下进行跨机构流通。` }}</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-匿名要求(设定k10),从而使得该数据集适用于受控环境下进行跨机构流通。` }}</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();
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!