| | |
| | | <h4>备注</h4> |
| | | <p>{{ currentQuotation.remark }}</p> |
| | | </div> |
| | | |
| | | <div v-if="quotationAttachments.length > 0" style="margin-top: 20px;"> |
| | | <h4>附件</h4> |
| | | <el-table :data="quotationAttachments" border style="width: 100%"> |
| | | <el-table-column prop="name" label="附件名称" min-width="360" show-overflow-tooltip /> |
| | | <el-table-column label="操作" width="160" align="center"> |
| | | <template #default="{ row }"> |
| | | <el-button link type="primary" size="small" @click="downloadAttachment(row)">下载</el-button> |
| | | <el-button link type="primary" size="small" @click="previewAttachment(row)">预览</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </template> |
| | | </template> |
| | | </el-skeleton> |
| | |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <filePreview ref="filePreviewRef" /> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import useUserStore from "@/store/modules/user.js"; |
| | | import {userListNoPageByTenantId} from "@/api/system/user.js"; |
| | | import { WarningFilled, Edit, Check, MoreFilled } from '@element-plus/icons-vue' |
| | | import { getQuotationList } from "@/api/salesManagement/salesQuotation.js"; |
| | | import { getQuotationDetail, getQuotationList } from "@/api/salesManagement/salesQuotation.js"; |
| | | import { getPurchaseByCode } from "@/api/procurementManagement/procurementLedger.js"; |
| | | import filePreview from "@/components/filePreview/index.vue"; |
| | | const emit = defineEmits(['close']) |
| | | const { proxy } = getCurrentInstance() |
| | | |
| | |
| | | const currentQuotation = ref({}) |
| | | const purchaseLoading = ref(false) |
| | | const currentPurchase = ref({}) |
| | | const filePreviewRef = ref() |
| | | const isQuotationApproval = computed(() => Number(props.approveType) === 6) |
| | | const isPurchaseApproval = computed(() => Number(props.approveType) === 5) |
| | | |
| | | const normalizeQuotationFiles = (raw) => { |
| | | const list = |
| | | (raw && Array.isArray(raw.salesLedgerFiles) && raw.salesLedgerFiles) || |
| | | (raw && Array.isArray(raw.quotationFiles) && raw.quotationFiles) || |
| | | (raw && Array.isArray(raw.fileList) && raw.fileList) || |
| | | (raw && Array.isArray(raw.files) && raw.files) || |
| | | [] |
| | | return list |
| | | .map((item) => ({ |
| | | id: item?.id, |
| | | name: item?.fileName || item?.name || item?.originalName || item?.filename || "附件", |
| | | url: item?.fileUrl || item?.url || item?.path || item?.tempPath, |
| | | })) |
| | | .filter((i) => i.url) |
| | | } |
| | | |
| | | const quotationAttachments = computed(() => normalizeQuotationFiles(currentQuotation.value)) |
| | | |
| | | const downloadAttachment = (row) => { |
| | | proxy.$download.name(row.url) |
| | | } |
| | | const previewAttachment = (row) => { |
| | | filePreviewRef.value?.open?.(row.url) |
| | | } |
| | | |
| | | const data = reactive({ |
| | | form: { |
| | |
| | | const quotationNo = row?.approveReason; |
| | | if (quotationNo) { |
| | | quotationLoading.value = true |
| | | getQuotationList({ quotationNo }).then((res) => { |
| | | getQuotationList({ quotationNo }).then(async (res) => { |
| | | const records = res?.data?.records || [] |
| | | currentQuotation.value = records[0] || {} |
| | | const first = records[0] || {} |
| | | currentQuotation.value = first |
| | | if (first?.id && normalizeQuotationFiles(first).length === 0) { |
| | | try { |
| | | const detailRes = await getQuotationDetail({ id: first.id }) |
| | | const detail = detailRes?.data || detailRes || {} |
| | | currentQuotation.value = { ...first, ...detail } |
| | | } catch (e) { |
| | | } |
| | | } |
| | | }).finally(() => { |
| | | quotationLoading.value = false |
| | | }) |
| | |
| | | width: 200px; |
| | | height: 60px; |
| | | } |
| | | </style> |
| | | </style> |