| | |
| | | :showTableColumnSetting="false" |
| | | > |
| | | <template #fileBusinessType="{ row }"> |
| | | {{ FourStreamsMaterialFileBusinessTypeEnumText[row.fileBusinessType] }} |
| | | {{ BusinessTypeEnumText[row.fileBusinessType] }} |
| | | </template> |
| | | <template #operationBtn-uploadBtn="{ data, row }"> |
| | | <BlFileUpload |
| | |
| | | </BlFileUpload> |
| | | </template> |
| | | </ProTableV2> |
| | | <FourStreamsBatchMaterialFileDialog |
| | | v-bind="dialogProps" |
| | | :name="''" |
| | | :zipName="`${BusinessTypeEnumText[currentFourStreamsMaterialFileTableItem.fileBusinessType as any]}`" |
| | | v-model:fileList="currentFourStreamsMaterialFileTableItem.fileList" |
| | | :showDeleteBtn="showDeleteBtn" |
| | | /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | <script setup lang="ts" generic="T"> |
| | | import { |
| | | FourStreamsMaterialFileTableProps, |
| | | FourStreamsMaterialFileTableItem, |
| | | BaseMaterialFileTableItem, |
| | | FourStreamsMaterialFileBusinessTypeEnumText, |
| | | } from './types'; |
| | | import { |
| | |
| | | defineOperationBtns, |
| | | BlFileUpload, |
| | | bolePreview, |
| | | useDialog, |
| | | } from '@bole-core/components'; |
| | | import { downloadFileByUrl } from '@/utils'; |
| | | import { Message, isFileCanPreview } from '@bole-core/core'; |
| | | import { Message, isFileCanPreview, downloadWithZip } from '@bole-core/core'; |
| | | import { useDefineColumns } from '@/hooks'; |
| | | import FourStreamsBatchMaterialFileDialog from './FourStreamsBatchMaterialFileDialog.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'FourStreamsMaterialFileTable', |
| | |
| | | showDownloadBtn: true, |
| | | showDeleteBtn: true, |
| | | downloadBtnText: '下载', |
| | | BusinessTypeEnumText: () => FourStreamsMaterialFileBusinessTypeEnumText, |
| | | }); |
| | | |
| | | const list = defineModel<FourStreamsMaterialFileTableItem[]>('list'); |
| | | const list = defineModel<BaseMaterialFileTableItem<T>[]>('list'); |
| | | |
| | | const columns = defineColumns([ |
| | | { |
| | |
| | | name: '上传', |
| | | }, |
| | | extraProps: { |
| | | hide: (row: FourStreamsMaterialFileTableItem) => { |
| | | hide: (row: BaseMaterialFileTableItem<T>) => { |
| | | if (!props.showUploadBtn) return true; |
| | | let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); |
| | | return fileList?.length > 0; |
| | |
| | | onClick: (row) => handlePreview(row), |
| | | }, |
| | | extraProps: { |
| | | hide: (row: FourStreamsMaterialFileTableItem) => { |
| | | hide: (row: BaseMaterialFileTableItem<T>) => { |
| | | if (!props.showCheckBtn) return true; |
| | | let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); |
| | | if (!fileList?.length) { |
| | |
| | | onClick: (row) => handleBatchDownload(row), |
| | | }, |
| | | extraProps: { |
| | | hide: (row: FourStreamsMaterialFileTableItem) => { |
| | | hide: (row: BaseMaterialFileTableItem<T>) => { |
| | | return ( |
| | | !props.showDownloadBtn || |
| | | !row?.fileList?.filter?.((item) => item.status === 'success')?.length |
| | |
| | | onClick: (row) => handleDelete(row), |
| | | }, |
| | | extraProps: { |
| | | hide: (row: FourStreamsMaterialFileTableItem) => { |
| | | hide: (row: BaseMaterialFileTableItem<T>) => { |
| | | if (!props.showDeleteBtn) return true; |
| | | let fileList = row?.fileList?.filter?.((item) => item.status === 'success'); |
| | | return !fileList?.length; |
| | |
| | | ], |
| | | }); |
| | | |
| | | async function handleDelete(row: FourStreamsMaterialFileTableItem) { |
| | | async function handleDelete(row: BaseMaterialFileTableItem<T>) { |
| | | try { |
| | | await Message.deleteMessage(); |
| | | row.fileList = []; |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function handlePreview(row: FourStreamsMaterialFileTableItem) { |
| | | const currentFourStreamsMaterialFileTableItem = ref<BaseMaterialFileTableItem<T>>({ |
| | | fileBusinessType: 0 as any, |
| | | fileList: [], |
| | | }); |
| | | const { dialogProps, dialogState } = useDialog(); |
| | | |
| | | async function handlePreview(row: BaseMaterialFileTableItem<T>) { |
| | | if (row.fileList.length > 1) { |
| | | // currentEnterpriseMaterialFileTableItem.value = row; |
| | | // await nextTick(); |
| | | // dialogState.dialogVisible = true; |
| | | currentFourStreamsMaterialFileTableItem.value = row; |
| | | await nextTick(); |
| | | dialogState.dialogVisible = true; |
| | | } else { |
| | | bolePreview({ |
| | | fileUrl: row.fileList[0].url, |
| | |
| | | } |
| | | } |
| | | |
| | | function handleBatchDownload(row: FourStreamsMaterialFileTableItem) { |
| | | async function handleBatchDownload(row: BaseMaterialFileTableItem<T>) { |
| | | const successFileList = row.fileList.filter((item) => item.status === 'success'); |
| | | if (successFileList.length === 0) { |
| | | Message.errorMessage('没有可下载的文件'); |
| | |
| | | } else { |
| | | // downloadWithZip( |
| | | // successFileList.map((item) => ({ data: item.url })), |
| | | // `${AllEnterpriseMaterialFileBusinessTypeEnumText[row.fileBusinessType]}材料文件` |
| | | // `${props.BusinessTypeEnumText[row.fileBusinessType as any]}` |
| | | // ); |
| | | currentFourStreamsMaterialFileTableItem.value = row; |
| | | await nextTick(); |
| | | dialogState.dialogVisible = true; |
| | | } |
| | | } |
| | | </script> |