fix: 修复匿名化处理问题
Showing
2 changed files
with
137 additions
and
106 deletions
| ... | @@ -437,40 +437,49 @@ const parseFileData = (fileRaw) => { | ... | @@ -437,40 +437,49 @@ const parseFileData = (fileRaw) => { |
| 437 | sampleTableFields.value = []; | 437 | sampleTableFields.value = []; |
| 438 | sampleTableData.value = []; | 438 | sampleTableData.value = []; |
| 439 | } else { | 439 | } else { |
| 440 | const res = await chTransformEn(json[0]); | 440 | try { |
| 441 | let fields = res.data || []; | 441 | const res: any = await chTransformEn(json[0]); |
| 442 | sampleTableFields.value = fields?.map((j, index) => { | 442 | if (res?.code != proxy.$passCode) { |
| 443 | return { | 443 | sampleTableDataLoading.value = false; |
| 444 | index: index, | 444 | proxy.$ElMessage.error(res.msg); |
| 445 | enName: j.enName + '', | 445 | return; |
| 446 | chName: j.chName + '', | ||
| 447 | dataType: 'varchar' | ||
| 448 | } | 446 | } |
| 449 | }) || []; | 447 | let fields = res.data || []; |
| 450 | parseFileDataSum.value = json; | 448 | sampleTableFields.value = fields?.map((j, index) => { |
| 451 | /** 粗略算出字段类型 */ | 449 | return { |
| 452 | json.slice(1, 10).forEach((info, row) => { | 450 | index: index, |
| 453 | json[0].forEach((name, col) => { | 451 | enName: j.enName + '', |
| 454 | if (info[col] === "" || info[col] == null || sampleTableFields.value[col].dataType != 'varchar') { | 452 | chName: j.chName + '', |
| 455 | return; | 453 | dataType: 'varchar' |
| 456 | } else { | 454 | } |
| 457 | var cellRef = XLSX.utils.encode_cell({ r: row + 1, c: col }); | 455 | }) || []; |
| 458 | var cell = sheet[cellRef]; | 456 | parseFileDataSum.value = json; |
| 459 | let v = cell.w || info[col]; | 457 | /** 粗略算出字段类型 */ |
| 460 | let isNum = cell.t == 'n'; | 458 | json.slice(1, 10).forEach((info, row) => { |
| 461 | if (isNum) { | 459 | json[0].forEach((name, col) => { |
| 462 | if (v.includes('.') && sampleTableFields.value[col].dataType != 'decimal') { | 460 | if (info[col] === "" || info[col] == null || sampleTableFields.value[col].dataType != 'varchar') { |
| 463 | sampleTableFields.value[col].dataType = 'decimal'; | 461 | return; |
| 464 | } else { | 462 | } else { |
| 465 | sampleTableFields.value[col].dataType = 'int'; | 463 | var cellRef = XLSX.utils.encode_cell({ r: row + 1, c: col }); |
| 464 | var cell = sheet[cellRef]; | ||
| 465 | let v = cell.w || info[col]; | ||
| 466 | let isNum = cell.t == 'n'; | ||
| 467 | if (isNum) { | ||
| 468 | if (v.includes('.') && sampleTableFields.value[col].dataType != 'decimal') { | ||
| 469 | sampleTableFields.value[col].dataType = 'decimal'; | ||
| 470 | } else { | ||
| 471 | sampleTableFields.value[col].dataType = 'int'; | ||
| 472 | } | ||
| 466 | } | 473 | } |
| 467 | } | 474 | } |
| 468 | } | 475 | }); |
| 469 | }); | 476 | }) |
| 470 | }) | 477 | transferSampleData(); |
| 471 | transferSampleData(); | 478 | sampleTableDataLoading.value = false; |
| 479 | } catch (error) { | ||
| 480 | sampleTableDataLoading.value = false; | ||
| 481 | } | ||
| 472 | } | 482 | } |
| 473 | sampleTableDataLoading.value = false; | ||
| 474 | }); | 483 | }); |
| 475 | } | 484 | } |
| 476 | 485 | ||
| ... | @@ -745,82 +754,85 @@ onBeforeMount(() => { | ... | @@ -745,82 +754,85 @@ onBeforeMount(() => { |
| 745 | dataSelectInfoItems.value[4].visible = dataSource == 1; | 754 | dataSelectInfoItems.value[4].visible = dataSource == 1; |
| 746 | dataSelectInfoItems.value[5].visible = dataSource == 1; | 755 | dataSelectInfoItems.value[5].visible = dataSource == 1; |
| 747 | dataSelectInfoItems.value[6].visible = dataSource == 2; | 756 | dataSelectInfoItems.value[6].visible = dataSource == 2; |
| 748 | //文件解析 | 757 | try { |
| 749 | if (dataSource == 2) { | 758 | //文件解析 |
| 750 | let url = detailInfo.value.filePath?.url; | 759 | if (dataSource == 2) { |
| 751 | sampleTableDataLoading.value = true; | 760 | let url = detailInfo.value.filePath?.url; |
| 752 | const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(url).fileName); | 761 | sampleTableDataLoading.value = true; |
| 753 | if (!refSignInfo?.data) { | 762 | const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(url).fileName); |
| 754 | fullscreenLoading.value = false; | 763 | if (!refSignInfo?.data) { |
| 755 | refSignInfo?.msg && ElMessage.error(refSignInfo?.msg); | 764 | fullscreenLoading.value = false; |
| 756 | return; | 765 | refSignInfo?.msg && ElMessage.error(refSignInfo?.msg); |
| 757 | } | 766 | return; |
| 758 | obsDownloadRequest(refSignInfo?.data).then((res: any) => { | 767 | } |
| 768 | const fileRes: any = await obsDownloadRequest(refSignInfo?.data); | ||
| 759 | sampleTableDataLoading.value = false; | 769 | sampleTableDataLoading.value = false; |
| 760 | if (res && !res.msg) { | 770 | if (fileRes && !fileRes.msg) { |
| 761 | parseFileData(res); | 771 | parseFileData(fileRes); |
| 762 | } else { | 772 | } else { |
| 763 | res?.msg && ElMessage.error(res?.msg); | 773 | fileRes?.msg && ElMessage.error(fileRes?.msg); |
| 774 | } | ||
| 775 | // 会出现从文件切换到数据库时没有数据库列表的问题。 | ||
| 776 | const res: any = await getDatabase({ connectStatus: 1 }); | ||
| 777 | if (res?.code == proxy.$passCode) { | ||
| 778 | dataSourceList.value = res.data || []; | ||
| 779 | let item = dataSelectInfoItems.value.find(item => item.field == 'dataSourceGuid'); | ||
| 780 | item && (item.options = dataSourceList.value); | ||
| 781 | } else { | ||
| 782 | proxy.$ElMessage.error(res.msg); | ||
| 764 | } | 783 | } |
| 765 | }) | ||
| 766 | // 会出现从文件切换到数据库时没有数据库列表的问题。 | ||
| 767 | const res: any = await getDatabase({ connectStatus: 1 }); | ||
| 768 | if (res?.code == proxy.$passCode) { | ||
| 769 | dataSourceList.value = res.data || []; | ||
| 770 | let item = dataSelectInfoItems.value.find(item => item.field == 'dataSourceGuid'); | ||
| 771 | item && (item.options = dataSourceList.value); | ||
| 772 | } else { | ||
| 773 | proxy.$ElMessage.error(res.msg); | ||
| 774 | } | ||
| 775 | } else { | ||
| 776 | const res: any = await getDatabase({ connectStatus: 1 }); | ||
| 777 | if (res?.code == proxy.$passCode) { | ||
| 778 | dataSourceList.value = res.data || []; | ||
| 779 | let item = dataSelectInfoItems.value.find(item => item.field == 'dataSourceGuid'); | ||
| 780 | item && (item.options = dataSourceList.value); | ||
| 781 | } else { | ||
| 782 | proxy.$ElMessage.error(res.msg); | ||
| 783 | } | ||
| 784 | currDatasourceSelect.value = dataSourceList.value.find(d => d.guid == detailInfo.value.dataSourceGuid); | ||
| 785 | const tableRes: any = await getDsTableByDs({ | ||
| 786 | pageSize: -1, | ||
| 787 | pageIndex: 1, | ||
| 788 | dataSourceGuid: detailInfo.value.dataSourceGuid, | ||
| 789 | database: currDatasourceSelect.value.databaseNameEn, | ||
| 790 | databaseType: currDatasourceSelect.value.databaseType, | ||
| 791 | tableName: '', | ||
| 792 | hadFlag: false | ||
| 793 | }); | ||
| 794 | if (tableRes?.code == proxy.$passCode) { | ||
| 795 | dsTableList.value = tableRes.data?.records || []; | ||
| 796 | let item = dataSelectInfoItems.value.find(item => item.field == 'tableName'); | ||
| 797 | item && (item.options = dsTableList.value); | ||
| 798 | } else { | 784 | } else { |
| 799 | proxy.$ElMessage.error(tableRes.msg); | 785 | const res: any = await getDatabase({ connectStatus: 1 }); |
| 800 | } | 786 | if (res?.code == proxy.$passCode) { |
| 801 | getDsTableFieldColumn({ | 787 | dataSourceList.value = res.data || []; |
| 802 | pageSize: 50, | 788 | let item = dataSelectInfoItems.value.find(item => item.field == 'dataSourceGuid'); |
| 803 | pageIndex: 1, | 789 | item && (item.options = dataSourceList.value); |
| 804 | dataSourceGuid: currDatasourceSelect.value.guid, | ||
| 805 | database: currDatasourceSelect.value.databaseNameEn, | ||
| 806 | databaseType: currDatasourceSelect.value.databaseType, | ||
| 807 | tableName: detailInfo.value.tableName, | ||
| 808 | }).then((res: any) => { | ||
| 809 | if (res.code == proxy.$passCode) { | ||
| 810 | sampleTableFields.value = res.data?.map(d => { | ||
| 811 | d.fieldDataType = d.dataType; | ||
| 812 | d.enName = d.columnName; | ||
| 813 | d.chName = d.columnZhName; | ||
| 814 | return d; | ||
| 815 | }) || []; | ||
| 816 | /** 判断有抽样数据,需要查询接口 */ | ||
| 817 | getSampleDataByDsTable(); | ||
| 818 | } else { | 790 | } else { |
| 819 | ElMessage.error(res.msg); | 791 | proxy.$ElMessage.error(res.msg); |
| 820 | } | 792 | } |
| 821 | }); | 793 | currDatasourceSelect.value = dataSourceList.value.find(d => d.guid == detailInfo.value.dataSourceGuid); |
| 794 | const tableRes: any = await getDsTableByDs({ | ||
| 795 | pageSize: -1, | ||
| 796 | pageIndex: 1, | ||
| 797 | dataSourceGuid: detailInfo.value.dataSourceGuid, | ||
| 798 | database: currDatasourceSelect.value.databaseNameEn, | ||
| 799 | databaseType: currDatasourceSelect.value.databaseType, | ||
| 800 | tableName: '', | ||
| 801 | hadFlag: false | ||
| 802 | }); | ||
| 803 | if (tableRes?.code == proxy.$passCode) { | ||
| 804 | dsTableList.value = tableRes.data?.records || []; | ||
| 805 | let item = dataSelectInfoItems.value.find(item => item.field == 'tableName'); | ||
| 806 | item && (item.options = dsTableList.value); | ||
| 807 | } else { | ||
| 808 | proxy.$ElMessage.error(tableRes.msg); | ||
| 809 | } | ||
| 810 | getDsTableFieldColumn({ | ||
| 811 | pageSize: 50, | ||
| 812 | pageIndex: 1, | ||
| 813 | dataSourceGuid: currDatasourceSelect.value.guid, | ||
| 814 | database: currDatasourceSelect.value.databaseNameEn, | ||
| 815 | databaseType: currDatasourceSelect.value.databaseType, | ||
| 816 | tableName: detailInfo.value.tableName, | ||
| 817 | }).then((res: any) => { | ||
| 818 | if (res.code == proxy.$passCode) { | ||
| 819 | sampleTableFields.value = res.data?.map(d => { | ||
| 820 | d.fieldDataType = d.dataType; | ||
| 821 | d.enName = d.columnName; | ||
| 822 | d.chName = d.columnZhName; | ||
| 823 | return d; | ||
| 824 | }) || []; | ||
| 825 | /** 判断有抽样数据,需要查询接口 */ | ||
| 826 | getSampleDataByDsTable(); | ||
| 827 | } else { | ||
| 828 | ElMessage.error(res.msg); | ||
| 829 | } | ||
| 830 | }); | ||
| 831 | } | ||
| 832 | fullscreenLoading.value = false; | ||
| 833 | } catch (error) { | ||
| 834 | fullscreenLoading.value = false; | ||
| 822 | } | 835 | } |
| 823 | fullscreenLoading.value = false; | ||
| 824 | } else { | 836 | } else { |
| 825 | fullscreenLoading.value = false; | 837 | fullscreenLoading.value = false; |
| 826 | proxy.$ElMessage.error(res.msg); | 838 | proxy.$ElMessage.error(res.msg); | ... | ... |
| ... | @@ -139,6 +139,8 @@ const ruleModelTableInfo = ref({ | ... | @@ -139,6 +139,8 @@ const ruleModelTableInfo = ref({ |
| 139 | return rd; | 139 | return rd; |
| 140 | }) || []; | 140 | }) || []; |
| 141 | } | 141 | } |
| 142 | fieldRulesEndFormInfo.value.formInfo.items[0].default = ''; | ||
| 143 | fieldRulesEndFormInfo.value.formInfo.items[1].default = ''; | ||
| 142 | if (!row.desensitiveRuleCode) { | 144 | if (!row.desensitiveRuleCode) { |
| 143 | drawerInfo.value.container.contents = [fieldRulesFormInfo.value]; | 145 | drawerInfo.value.container.contents = [fieldRulesFormInfo.value]; |
| 144 | } else { | 146 | } else { |
| ... | @@ -450,6 +452,8 @@ const addRowRules = () => { | ... | @@ -450,6 +452,8 @@ const addRowRules = () => { |
| 450 | fieldChName: '', | 452 | fieldChName: '', |
| 451 | upperOperator: '≤' | 453 | upperOperator: '≤' |
| 452 | }]; | 454 | }]; |
| 455 | fieldRulesEndFormInfo.value.formInfo.items[0].default = ''; | ||
| 456 | fieldRulesEndFormInfo.value.formInfo.items[1].default = ''; | ||
| 453 | drawerInfo.value.container.contents = [fieldRulesFormInfo.value, fieldRulesEndFormInfo.value]; | 457 | drawerInfo.value.container.contents = [fieldRulesFormInfo.value, fieldRulesEndFormInfo.value]; |
| 454 | } | 458 | } |
| 455 | 459 | ||
| ... | @@ -475,13 +479,19 @@ const drawerBtnClick = async (btn, info) => { | ... | @@ -475,13 +479,19 @@ const drawerBtnClick = async (btn, info) => { |
| 475 | let desensitiveRuleDetailInfo = getDesensitiveRuleDetailInfo(info); | 479 | let desensitiveRuleDetailInfo = getDesensitiveRuleDetailInfo(info); |
| 476 | // 脱敏规则为掩盖,字符,区间替换存在时需要调用接口检验 | 480 | // 脱敏规则为掩盖,字符,区间替换存在时需要调用接口检验 |
| 477 | if (info.desensitiveRuleCode == 'DISSEMBLE' || info.desensitiveRuleCode == 'CHARREPLACE' || info.desensitiveRuleCode == 'RANGEREPLACE') { | 481 | if (info.desensitiveRuleCode == 'DISSEMBLE' || info.desensitiveRuleCode == 'CHARREPLACE' || info.desensitiveRuleCode == 'RANGEREPLACE') { |
| 478 | let res: any = await validateAnonRule({ | 482 | try { |
| 479 | desensitiveRuleCode: info.desensitiveRuleCode, | 483 | let res: any = await validateAnonRule({ |
| 480 | value: '', | 484 | desensitiveRuleCode: info.desensitiveRuleCode, |
| 481 | desensitiveRuleDetail: desensitiveRuleDetailInfo | 485 | value: '', |
| 482 | }) | 486 | desensitiveRuleDetail: desensitiveRuleDetailInfo |
| 483 | if (res?.code != proxy.$passCode) { | 487 | }) |
| 484 | proxy.$ElMessage.error(res.msg); | 488 | if (res?.code != proxy.$passCode) { |
| 489 | proxy.$ElMessage.error(res.msg); | ||
| 490 | drawerInfo.value.footer.btns[1].loading = false; | ||
| 491 | return; | ||
| 492 | } | ||
| 493 | } catch (error) { | ||
| 494 | drawerInfo.value.footer.btns[1].loading = false; | ||
| 485 | } | 495 | } |
| 486 | } | 496 | } |
| 487 | drawerInfo.value.footer.btns[1].loading = false; | 497 | drawerInfo.value.footer.btns[1].loading = false; |
| ... | @@ -553,6 +563,15 @@ const drawerSelectChange = (val, row, info) => { | ... | @@ -553,6 +563,15 @@ const drawerSelectChange = (val, row, info) => { |
| 553 | } | 563 | } |
| 554 | } | 564 | } |
| 555 | }); | 565 | }); |
| 566 | if (val == 'RANGEREPLACE') { | ||
| 567 | let fieldName = info.fieldName; | ||
| 568 | let fieldChName = fieldName && props.fieldNameList.find(f => f.enName == fieldName)?.chName; | ||
| 569 | rangeReplaceRuleDetails.value.forEach(r => { | ||
| 570 | if (fieldChName && r.fieldChName != fieldChName) { | ||
| 571 | r.fieldChName = fieldChName; | ||
| 572 | } | ||
| 573 | }); | ||
| 574 | } | ||
| 556 | if (!val) { | 575 | if (!val) { |
| 557 | drawerInfo.value.container.contents = [fieldRulesFormInfo.value]; | 576 | drawerInfo.value.container.contents = [fieldRulesFormInfo.value]; |
| 558 | } else { | 577 | } else { | ... | ... |
-
Please register or sign in to post a comment