| | |
| | | |
| | | import { getPdArchiveDetailByProduct } from '#/api/mes/pd/archive'; |
| | | import { FilePreviewModal, useFilePreview } from '#/components/file-preview'; |
| | | import { DICT_TYPE } from '#/packages/constants/src'; |
| | | import { getDictOptions } from '#/packages/effects/hooks/src'; |
| | | |
| | | import { getPdDocumentTypeOptions } from '../../project/data'; |
| | | |
| | | interface Props { |
| | | visible: boolean; |
| | |
| | | |
| | | const { openPreview, previewState } = useFilePreview(); |
| | | |
| | | /** 资料类型中文名:复用项目资料列表的同一份映射(getPdDocumentTypeOptions),避免两处维护 */ |
| | | function documentTypeText(value?: string) { |
| | | if (!value) return '-'; |
| | | return ( |
| | | getPdDocumentTypeOptions().find((item) => item.value === value)?.label ?? |
| | | String(value) |
| | | ); |
| | | } |
| | | |
| | | /** |
| | | * 资料文件地址:后端只回 attachmentList(附件中间表),业务表没有 fileUrl 字段, |
| | | * 这里取第一个附件的访问地址,没有附件就返回空串(模板里显示「-」)。 |
| | | */ |
| | | function documentFileUrl(record: MesPdArchiveApi.DocumentInfo) { |
| | | const blob = record.attachmentList?.[0]; |
| | | return blob?.url || blob?.downloadURL || ''; |
| | | } |
| | | |
| | | /** 归档状态中文名:字典 mes_pd_archive_status */ |
| | | function archiveStatusText(value?: number) { |
| | | if (value === undefined || value === null || value === '') return '-'; |
| | | return ( |
| | | getDictOptions(DICT_TYPE.MES_PD_ARCHIVE_STATUS, 'number').find( |
| | | (item) => Number(item.value) === Number(value), |
| | | )?.label ?? String(value) |
| | | ); |
| | | } |
| | | |
| | | const archiveColumns = [ |
| | | { title: '归档编号', dataIndex: 'archiveCode', key: 'archiveCode' }, |
| | | { title: '归档人', dataIndex: 'archiverNickname', key: 'archiverNickname' }, |
| | | { title: '归档状态', dataIndex: 'archiveStatus', key: 'archiveStatus' }, |
| | | { |
| | | title: '归档状态', |
| | | dataIndex: 'archiveStatus', |
| | | key: 'archiveStatus', |
| | | customRender: ({ text }: { text: number }) => archiveStatusText(text), |
| | | }, |
| | | { title: '归档时间', dataIndex: 'archiveTime', key: 'archiveTime' }, |
| | | { title: '备注', dataIndex: 'remark', key: 'remark', ellipsis: true }, |
| | | ]; |
| | | |
| | | const documentColumns = [ |
| | | { title: '资料名称', dataIndex: 'documentName', key: 'documentName' }, |
| | | { title: '资料类型', dataIndex: 'documentType', key: 'documentType' }, |
| | | { |
| | | title: '资料类型', |
| | | dataIndex: 'documentType', |
| | | key: 'documentType', |
| | | customRender: ({ text }: { text: string }) => documentTypeText(text), |
| | | }, |
| | | { title: '版本', dataIndex: 'documentVersion', key: 'documentVersion', width: 80 }, |
| | | { title: '文件名', dataIndex: 'fileName', key: 'fileName' }, |
| | | { title: '上传人', dataIndex: 'uploadUserNickname', key: 'uploadUserNickname' }, |
| | |
| | | > |
| | | <template #bodyCell="{ column, record }"> |
| | | <template v-if="column.key === 'action'"> |
| | | <template v-if="record.fileUrl"> |
| | | <a class="mr-2" @click="openPreview(record.fileUrl, record.fileName)">预览</a> |
| | | <a :href="record.fileUrl" target="_blank">下载</a> |
| | | <template v-if="documentFileUrl(record)"> |
| | | <a class="mr-2" @click="openPreview(documentFileUrl(record), record.fileName)">预览</a> |
| | | <a :href="documentFileUrl(record)" target="_blank">下载</a> |
| | | </template> |
| | | <span v-else class="text-gray-400">-</span> |
| | | </template> |