fix
Showing
8 changed files
with
226 additions
and
31 deletions
| ... | @@ -197,4 +197,20 @@ export const getSensitiveDataTaskExecLog = (params) => request({ | ... | @@ -197,4 +197,20 @@ export const getSensitiveDataTaskExecLog = (params) => request({ |
| 197 | url: `${import.meta.env.VITE_APP_ANONYMIZATION_BASEURL}/sensitive-data-task/get-exec-sensitive-exec-log`, | 197 | url: `${import.meta.env.VITE_APP_ANONYMIZATION_BASEURL}/sensitive-data-task/get-exec-sensitive-exec-log`, |
| 198 | method: 'post', | 198 | method: 'post', |
| 199 | data: params | 199 | data: params |
| 200 | }) | ||
| 201 | |||
| 202 | /** ---------- 匿名化处理 ------------------ */ | ||
| 203 | |||
| 204 | /** 获取匿名化任务列表 */ | ||
| 205 | export const getAnonTaskList = (params) => request({ | ||
| 206 | url: `${import.meta.env.VITE_APP_ANONYMIZATION_BASEURL}/anon-task/page-list`, | ||
| 207 | method: 'post', | ||
| 208 | data: params | ||
| 209 | }) | ||
| 210 | |||
| 211 | /** 删除匿名化任务 */ | ||
| 212 | export const deleteAnonTask = (data) => request({ | ||
| 213 | url: `${import.meta.env.VITE_APP_ANONYMIZATION_BASEURL}/anon-task/delete`, | ||
| 214 | method: 'delete', | ||
| 215 | data | ||
| 200 | }) | 216 | }) |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
src/assets/images/csv.png
0 → 100644
2.46 KB
| ... | @@ -1415,6 +1415,10 @@ const panelChange = (scope, row) => { | ... | @@ -1415,6 +1415,10 @@ const panelChange = (scope, row) => { |
| 1415 | <img class="file-img" src="../../assets/images/excel.png" /> | 1415 | <img class="file-img" src="../../assets/images/excel.png" /> |
| 1416 | </template> | 1416 | </template> |
| 1417 | <template | 1417 | <template |
| 1418 | v-if="file?.name?.substring(file.name.lastIndexOf('.') + 1).toLowerCase() === 'csv'"> | ||
| 1419 | <img class="file-img" src="../../assets/images/csv.png" /> | ||
| 1420 | </template> | ||
| 1421 | <template | ||
| 1418 | v-else-if="file?.name?.substring(file.name.lastIndexOf('.') + 1).toLowerCase() === 'doc' || file?.name?.substring(file.name.lastIndexOf('.') + 1).toLowerCase() === 'docx'"> | 1422 | v-else-if="file?.name?.substring(file.name.lastIndexOf('.') + 1).toLowerCase() === 'doc' || file?.name?.substring(file.name.lastIndexOf('.') + 1).toLowerCase() === 'docx'"> |
| 1419 | <img class="file-img" src="../../assets/images/word.png" /> | 1423 | <img class="file-img" src="../../assets/images/word.png" /> |
| 1420 | </template> | 1424 | </template> | ... | ... |
| ... | @@ -3,7 +3,165 @@ | ... | @@ -3,7 +3,165 @@ |
| 3 | </route> | 3 | </route> |
| 4 | 4 | ||
| 5 | <script lang="ts" setup name="resultProcess"> | 5 | <script lang="ts" setup name="resultProcess"> |
| 6 | import TableTools from "@/components/Tools/table_tools.vue"; | ||
| 7 | import { commonPageConfig } from '@/components/PageNav/index'; | ||
| 8 | import { TableColumnWidth } from "@/utils/enum"; | ||
| 9 | import { | ||
| 10 | dataSourceTypeList, | ||
| 11 | getAnonTaskList, | ||
| 12 | deleteAnonTask, | ||
| 13 | } from '@/api/modules/dataAnonymization'; | ||
| 14 | import { useValidator } from '@/hooks/useValidator'; | ||
| 6 | 15 | ||
| 16 | const router = useRouter() | ||
| 17 | const { proxy } = getCurrentInstance() as any; | ||
| 18 | const { required } = useValidator(); | ||
| 19 | |||
| 20 | const searchItemList = ref([{ | ||
| 21 | type: "input", | ||
| 22 | label: "", | ||
| 23 | field: "taskName", | ||
| 24 | default: "", | ||
| 25 | placeholder: "任务名称", | ||
| 26 | clearable: true, | ||
| 27 | }, { | ||
| 28 | type: "select", | ||
| 29 | label: "", | ||
| 30 | field: "dataSource", | ||
| 31 | default: null, | ||
| 32 | options: dataSourceTypeList, | ||
| 33 | placeholder: "数据来源", | ||
| 34 | clearable: true, | ||
| 35 | filterable: true, | ||
| 36 | }]) | ||
| 37 | |||
| 38 | /** 分页及搜索传参信息配置。 */ | ||
| 39 | const page = ref({ | ||
| 40 | ...commonPageConfig, | ||
| 41 | taskName: '', | ||
| 42 | dataSource: null | ||
| 43 | }); | ||
| 44 | |||
| 45 | const tableInfo = ref({ | ||
| 46 | id: 'data-file-table', | ||
| 47 | fields: [ | ||
| 48 | { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" }, | ||
| 49 | { label: "任务名称", field: "taskName", width: 160 }, | ||
| 50 | { | ||
| 51 | label: "数据来源", field: "dataSource", width: 100, getName: (scope) => { | ||
| 52 | return scope.row.dataSource && dataSourceTypeList.find(f => f.value == scope.row.dataSource)?.label || '--'; | ||
| 53 | } | ||
| 54 | }, | ||
| 55 | { label: "任务状态", field: "sensitiveIdentifyTaskStatus", width: TableColumnWidth.STATE, align: 'center', type: "tag" }, | ||
| 56 | { label: "导出时间", field: "exportTime", width: TableColumnWidth.DATETIME }, | ||
| 57 | { label: "修改人", field: "updateUserName", width: TableColumnWidth.USERNAME }, | ||
| 58 | { label: "修改时间", field: "updateTime", width: TableColumnWidth.DATETIME }, | ||
| 59 | ], | ||
| 60 | data: [], | ||
| 61 | page: { | ||
| 62 | type: "normal", | ||
| 63 | rows: 0, | ||
| 64 | ...page.value, | ||
| 65 | }, | ||
| 66 | loading: false, | ||
| 67 | actionInfo: { | ||
| 68 | label: "操作", | ||
| 69 | type: "btn", | ||
| 70 | width: 180, | ||
| 71 | fixed: 'right', | ||
| 72 | btns: (scope) => { | ||
| 73 | return [ { | ||
| 74 | label: "编辑", value: "edit", disabled: scope.row.status == 'R', click: (scope) => { | ||
| 75 | |||
| 76 | } | ||
| 77 | }, { | ||
| 78 | label: '查看数据', value: 'view', disabled: scope.row.status != 'Y', click: (scope) => { | ||
| 79 | // router.push({ | ||
| 80 | // name: 'sensitiveIdentifyConfig', | ||
| 81 | // query: { | ||
| 82 | // guid: scope.row.guid, | ||
| 83 | // execGuid: scope.row.execGuid, | ||
| 84 | // taskName: scope.row.taskName | ||
| 85 | // } | ||
| 86 | // }); | ||
| 87 | } | ||
| 88 | }, { | ||
| 89 | label: "删除", value: "delete", disabled: scope.row.status == 'R', click: (scope) => { | ||
| 90 | proxy.$openMessageBox("此操作将永久删除, 是否继续?", () => { | ||
| 91 | let guids = [scope.row.guid]; | ||
| 92 | deleteAnonTask(guids).then((res: any) => { | ||
| 93 | if (res?.code == proxy.$passCode) { | ||
| 94 | getTableData(); | ||
| 95 | proxy.$ElMessage({ | ||
| 96 | type: "success", | ||
| 97 | message: "删除成功", | ||
| 98 | }); | ||
| 99 | } else { | ||
| 100 | proxy.$ElMessage({ | ||
| 101 | type: "error", | ||
| 102 | message: res.msg, | ||
| 103 | }); | ||
| 104 | } | ||
| 105 | }); | ||
| 106 | }) | ||
| 107 | } | ||
| 108 | }] | ||
| 109 | } | ||
| 110 | } | ||
| 111 | }) | ||
| 112 | |||
| 113 | const toSearch = (val: any, clear: boolean = false) => { | ||
| 114 | if (clear) { | ||
| 115 | searchItemList.value.map((item) => (item.default = "")); | ||
| 116 | page.value.taskName = ''; | ||
| 117 | page.value.dataSource = null; | ||
| 118 | } else { | ||
| 119 | page.value.taskName = val.taskName; | ||
| 120 | page.value.dataSource = val.dataSource; | ||
| 121 | } | ||
| 122 | getTableData(); | ||
| 123 | }; | ||
| 124 | |||
| 125 | const getTableData = () => { | ||
| 126 | tableInfo.value.loading = true | ||
| 127 | getAnonTaskList({ | ||
| 128 | pageIndex: page.value.curr, | ||
| 129 | pageSize: page.value.limit, | ||
| 130 | taskName: page.value.taskName, | ||
| 131 | dataSource: page.value.dataSource | ||
| 132 | }).then((res: any) => { | ||
| 133 | if (res?.code == proxy.$passCode) { | ||
| 134 | const data = res.data || {}; | ||
| 135 | tableInfo.value.data = data.records?.map(d => { | ||
| 136 | d.sensitiveIdentifyTaskStatus = d.status; | ||
| 137 | return d; | ||
| 138 | }) || [] | ||
| 139 | tableInfo.value.page.limit = data.pageSize | ||
| 140 | tableInfo.value.page.curr = data.pageIndex | ||
| 141 | tableInfo.value.page.rows = data.totalRows | ||
| 142 | } else { | ||
| 143 | proxy.$ElMessage({ | ||
| 144 | type: 'error', | ||
| 145 | message: res.msg, | ||
| 146 | }) | ||
| 147 | } | ||
| 148 | tableInfo.value.loading = false | ||
| 149 | }) | ||
| 150 | }; | ||
| 151 | |||
| 152 | const tablePageChange = (info) => { | ||
| 153 | page.value.curr = Number(info.curr); | ||
| 154 | page.value.limit = Number(info.limit); | ||
| 155 | getTableData(); | ||
| 156 | }; | ||
| 157 | |||
| 158 | const handleCreate = () => { | ||
| 159 | |||
| 160 | } | ||
| 161 | |||
| 162 | onBeforeMount(() => { | ||
| 163 | toSearch({}); | ||
| 164 | }) | ||
| 7 | 165 | ||
| 8 | </script> | 166 | </script> |
| 9 | 167 | ... | ... |
| ... | @@ -52,17 +52,17 @@ const tableInfo = ref({ | ... | @@ -52,17 +52,17 @@ const tableInfo = ref({ |
| 52 | id: 'data-file-table', | 52 | id: 'data-file-table', |
| 53 | fields: [ | 53 | fields: [ |
| 54 | { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" }, | 54 | { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" }, |
| 55 | { label: "任务名称", field: "taskName", width: 160 }, | 55 | { label: "任务名称", field: "taskName", width: 170 }, |
| 56 | { | 56 | { |
| 57 | label: "数据来源", field: "dataSource", width: 120, getName: (scope) => { | 57 | label: "数据来源", field: "dataSource", width: 100, getName: (scope) => { |
| 58 | return scope.row.dataSource && dataSourceTypeList.find(f => f.value == scope.row.dataSource)?.label || '--'; | 58 | return scope.row.dataSource && dataSourceTypeList.find(f => f.value == scope.row.dataSource)?.label || '--'; |
| 59 | } | 59 | } |
| 60 | }, | 60 | }, |
| 61 | { label: "任务状态", field: "sensitiveIdentifyTaskStatus", width: TableColumnWidth.STATE, align: 'center', type: "tag" }, | 61 | { label: "任务状态", field: "sensitiveIdentifyTaskStatus", width: TableColumnWidth.STATE, align: 'center', type: "tag" }, |
| 62 | { label: "执行人", field: "execUserName", width: TableColumnWidth.USERNAME }, | 62 | { label: "执行人", field: "execUserName", width: 100 }, |
| 63 | { label: "执行时间", field: "execTime", width: TableColumnWidth.DATETIME }, | 63 | { label: "执行时间", field: "execTime", width: 170 }, |
| 64 | { label: "修改人", field: "updateUserName", width: TableColumnWidth.USERNAME }, | 64 | { label: "修改人", field: "updateUserName", width: 100 }, |
| 65 | { label: "修改时间", field: "updateTime", width: TableColumnWidth.DATETIME }, | 65 | { label: "修改时间", field: "updateTime", width: 170 }, |
| 66 | ], | 66 | ], |
| 67 | data: [], | 67 | data: [], |
| 68 | page: { | 68 | page: { | ... | ... |
| ... | @@ -66,6 +66,7 @@ const nodeClick = (data, node) => { | ... | @@ -66,6 +66,7 @@ const nodeClick = (data, node) => { |
| 66 | pageInfo.value.databaseName = data.databaseName; | 66 | pageInfo.value.databaseName = data.databaseName; |
| 67 | pageInfo.value.tableName = ''; | 67 | pageInfo.value.tableName = ''; |
| 68 | } | 68 | } |
| 69 | pageInfo.value.curr = 1; | ||
| 69 | getSensitiveTableFieldData(); | 70 | getSensitiveTableFieldData(); |
| 70 | getCntSumInfo(); | 71 | getCntSumInfo(); |
| 71 | getSensitiveFieldLabelData(); | 72 | getSensitiveFieldLabelData(); |
| ... | @@ -151,7 +152,7 @@ const getExecSensitiveTableData = () => { | ... | @@ -151,7 +152,7 @@ const getExecSensitiveTableData = () => { |
| 151 | d.value = `${d.databaseName}-ds`; //解决文件名称和文件的sheet名称一样的树形选中问题 | 152 | d.value = `${d.databaseName}-ds`; //解决文件名称和文件的sheet名称一样的树形选中问题 |
| 152 | d.label = d.databaseChName; | 153 | d.label = d.databaseChName; |
| 153 | d.tableList = d.tableList?.map(t => { | 154 | d.tableList = d.tableList?.map(t => { |
| 154 | t.value = t.tableName; | 155 | t.value = `${d.databaseName}-${t.tableName}`; |
| 155 | t.label = t.tableChName; | 156 | t.label = t.tableChName; |
| 156 | t.parent = d.databaseName; | 157 | t.parent = d.databaseName; |
| 157 | return t; | 158 | return t; |
| ... | @@ -546,16 +547,16 @@ const cntLabelMap = ref({ | ... | @@ -546,16 +547,16 @@ const cntLabelMap = ref({ |
| 546 | </div> | 547 | </div> |
| 547 | <div class="main_wrap" :style="{ height: isLook ? '100%' : 'calc(100% - 40px)' }"> | 548 | <div class="main_wrap" :style="{ height: isLook ? '100%' : 'calc(100% - 40px)' }"> |
| 548 | <div class="table_tool_wrap"> | 549 | <div class="table_tool_wrap"> |
| 550 | <div class="cnt-desc">{{'表总数:' + changeNum(cntSumInfo.tableNum || 0, 0) + | ||
| 551 | '张 字段总数:' | ||
| 552 | + changeNum(cntSumInfo.fieldNum || 0, 0) + '个 敏感表总数:' + | ||
| 553 | changeNum(cntSumInfo.sensitiveTableNum || 0, 0) + '张 敏感字段总数:' + changeNum(cntSumInfo.sensitiveFieldNum || 0, | ||
| 554 | 0) + | ||
| 555 | '个,其中' + labelTypeList?.map(l => `${l.label}${changeNum(cntSumInfo[cntLabelMap[l.value]] || 0, | ||
| 556 | 0)}个`).join(',') + ',非敏感' + changeNum(cntSumInfo['nonSensitiveNum'] || 0, 0) + '个' | ||
| 557 | }}</div> | ||
| 549 | <div class="tools_btns"> | 558 | <div class="tools_btns"> |
| 550 | <el-button v-if="!isLook" type="primary" @click="batchConfirm">批量确认</el-button> | 559 | <el-button v-if="!isLook" type="primary" @click="batchConfirm">批量确认</el-button> |
| 551 | <div v-show="!sensitiveTableDataLoading" class="cnt-desc">{{'表总数:' + changeNum(cntSumInfo.tableNum || 0, 0) + | ||
| 552 | '张 字段总数:' | ||
| 553 | + changeNum(cntSumInfo.fieldNum || 0, 0) + '个 敏感表总数:' + | ||
| 554 | changeNum(cntSumInfo.sensitiveTableNum || 0, 0) + '张 敏感字段总数:' + changeNum(cntSumInfo.sensitiveFieldNum || 0, | ||
| 555 | 0) + | ||
| 556 | '个,其中' + labelTypeList?.map(l => `${l.label}${changeNum(cntSumInfo[cntLabelMap[l.value]] || 0, | ||
| 557 | 0)}个`).join(',') + ',非敏感' + changeNum(cntSumInfo['nonSensitiveNum'] || 0, 0) + '个' | ||
| 558 | }}</div> | ||
| 559 | </div> | 560 | </div> |
| 560 | </div> | 561 | </div> |
| 561 | <div class="table_panel_wrap"> | 562 | <div class="table_panel_wrap"> |
| ... | @@ -570,6 +571,13 @@ const cntLabelMap = ref({ | ... | @@ -570,6 +571,13 @@ const cntLabelMap = ref({ |
| 570 | <el-table-column type="selection" v-if="!isLook" :selectable="sensitiveTableSelectable" :width="32" | 571 | <el-table-column type="selection" v-if="!isLook" :selectable="sensitiveTableSelectable" :width="32" |
| 571 | align="center" /> | 572 | align="center" /> |
| 572 | <el-table-column label="序号" type="index" width="56px" align="center" show-overflow-tooltip> | 573 | <el-table-column label="序号" type="index" width="56px" align="center" show-overflow-tooltip> |
| 574 | <template #default="scope"> | ||
| 575 | <span>{{ | ||
| 576 | pageInfo.curr !== undefined | ||
| 577 | ? (pageInfo.curr - 1) * pageInfo.limit + scope.$index + 1 | ||
| 578 | : scope.$index + 1 | ||
| 579 | }}</span> | ||
| 580 | </template> | ||
| 573 | </el-table-column> | 581 | </el-table-column> |
| 574 | <el-table-column label="字段中文名" prop="fieldChName" width="160" align="left" show-overflow-tooltip> | 582 | <el-table-column label="字段中文名" prop="fieldChName" width="160" align="left" show-overflow-tooltip> |
| 575 | <template #default="scope"> | 583 | <template #default="scope"> |
| ... | @@ -589,12 +597,12 @@ const cntLabelMap = ref({ | ... | @@ -589,12 +597,12 @@ const cntLabelMap = ref({ |
| 589 | @popverBtnClick="handleLabelPopoverClick" /> | 597 | @popverBtnClick="handleLabelPopoverClick" /> |
| 590 | </template> | 598 | </template> |
| 591 | <template #default="scope"> | 599 | <template #default="scope"> |
| 592 | <el-select-v2 v-if="scope.row['isEdit']" v-model="scope.row['labelGuid']" filterable popper-class="el-select-v2-popper" | 600 | <el-select-v2 v-if="scope.row['isEdit']" v-model="scope.row['labelGuid']" filterable |
| 593 | :options="allDataLabelList" placeholder="请选择" clearable :props="{ value: 'guid', label: 'labelName' }" | 601 | popper-class="el-select-v2-popper" :options="allDataLabelList" placeholder="请选择" clearable |
| 594 | @change="(val) => handleSelectChange(val, scope)"> | 602 | :props="{ value: 'guid', label: 'labelName' }" @change="(val) => handleSelectChange(val, scope)"> |
| 595 | <template #default="{ item }"> | 603 | <template #default="{ item }"> |
| 596 | <ellipsis-tooltip :content="item.labelName ?? ''" class-name="w100f" | 604 | <ellipsis-tooltip :content="item.labelName ?? ''" class-name="w100f" |
| 597 | :refName="'tooltipOver' + item.guid"></ellipsis-tooltip> | 605 | :refName="'tooltipOver' + item.guid"></ellipsis-tooltip> |
| 598 | </template> | 606 | </template> |
| 599 | </el-select-v2> | 607 | </el-select-v2> |
| 600 | <span v-else>{{ scope.row["labelName"] || '--' }}</span> | 608 | <span v-else>{{ scope.row["labelName"] || '--' }}</span> |
| ... | @@ -656,15 +664,21 @@ const cntLabelMap = ref({ | ... | @@ -656,15 +664,21 @@ const cntLabelMap = ref({ |
| 656 | 664 | ||
| 657 | .table_tool_wrap { | 665 | .table_tool_wrap { |
| 658 | display: flex; | 666 | display: flex; |
| 667 | flex-direction: column; | ||
| 659 | 668 | ||
| 660 | .cnt-desc { | 669 | .cnt-desc { |
| 661 | line-height: 21px; | 670 | line-height: 24px; |
| 662 | white-space: break-spaces; | 671 | white-space: break-spaces; |
| 672 | margin-top: 4px; | ||
| 663 | } | 673 | } |
| 664 | } | 674 | } |
| 665 | 675 | ||
| 676 | .tools_btns { | ||
| 677 | padding-top: 0px; | ||
| 678 | } | ||
| 679 | |||
| 666 | .table_panel_wrap { | 680 | .table_panel_wrap { |
| 667 | height: calc(100% - 70px); | 681 | height: calc(100% - 91px); |
| 668 | } | 682 | } |
| 669 | 683 | ||
| 670 | .bottom_tool_wrap { | 684 | .bottom_tool_wrap { |
| ... | @@ -700,15 +714,6 @@ const cntLabelMap = ref({ | ... | @@ -700,15 +714,6 @@ const cntLabelMap = ref({ |
| 700 | } | 714 | } |
| 701 | } | 715 | } |
| 702 | 716 | ||
| 703 | .tools_btns { | ||
| 704 | display: flex; | ||
| 705 | align-items: center; | ||
| 706 | |||
| 707 | .el-button { | ||
| 708 | margin-right: 8px; | ||
| 709 | } | ||
| 710 | } | ||
| 711 | |||
| 712 | :deep(.filter-cell) { | 717 | :deep(.filter-cell) { |
| 713 | .cell { | 718 | .cell { |
| 714 | position: relative; | 719 | position: relative; | ... | ... |
| ... | @@ -46,6 +46,10 @@ | ... | @@ -46,6 +46,10 @@ |
| 46 | v-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx'"> | 46 | v-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx'"> |
| 47 | <img class="file-img" src="../../../assets/images/excel.png" /> | 47 | <img class="file-img" src="../../../assets/images/excel.png" /> |
| 48 | </template> | 48 | </template> |
| 49 | <template | ||
| 50 | v-if="file?.name?.substring(file.name.lastIndexOf('.') + 1).toLowerCase() === 'csv'"> | ||
| 51 | <img class="file-img" src="../../assets/images/csv.png" /> | ||
| 52 | </template> | ||
| 49 | <template | 53 | <template |
| 50 | v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'docx'"> | 54 | v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'docx'"> |
| 51 | <img class="file-img" src="../../../assets/images/word.png" /> | 55 | <img class="file-img" src="../../../assets/images/word.png" /> | ... | ... |
| ... | @@ -2025,6 +2025,10 @@ const rejectDialogBtnClick = (btn, info) => { | ... | @@ -2025,6 +2025,10 @@ const rejectDialogBtnClick = (btn, info) => { |
| 2025 | v-if="flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx' || flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'csv'"> | 2025 | v-if="flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx' || flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'csv'"> |
| 2026 | <img class="file-img" src="../../assets/images/excel.png" /> | 2026 | <img class="file-img" src="../../assets/images/excel.png" /> |
| 2027 | </template> | 2027 | </template> |
| 2028 | <template | ||
| 2029 | v-if="flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() === 'csv'"> | ||
| 2030 | <img class="file-img" src="../../assets/images/csv.png" /> | ||
| 2031 | </template> | ||
| 2028 | <template | 2032 | <template |
| 2029 | v-else-if="flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'docx'"> | 2033 | v-else-if="flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'docx'"> |
| 2030 | <img class="file-img" src="../../assets/images/word.png" /> | 2034 | <img class="file-img" src="../../assets/images/word.png" /> |
| ... | @@ -2074,6 +2078,10 @@ const rejectDialogBtnClick = (btn, info) => { | ... | @@ -2074,6 +2078,10 @@ const rejectDialogBtnClick = (btn, info) => { |
| 2074 | v-if="flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx' || flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'csv'"> | 2078 | v-if="flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx' || flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'csv'"> |
| 2075 | <img class="file-img" src="../../assets/images/excel.png" /> | 2079 | <img class="file-img" src="../../assets/images/excel.png" /> |
| 2076 | </template> | 2080 | </template> |
| 2081 | <template | ||
| 2082 | v-if="flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() === 'csv'"> | ||
| 2083 | <img class="file-img" src="../../assets/images/csv.png" /> | ||
| 2084 | </template> | ||
| 2077 | <template | 2085 | <template |
| 2078 | v-else-if="flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'docx'"> | 2086 | v-else-if="flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'docx'"> |
| 2079 | <img class="file-img" src="../../assets/images/word.png" /> | 2087 | <img class="file-img" src="../../assets/images/word.png" /> | ... | ... |
-
Please register or sign in to post a comment