| | |
| | | {{ approvalTypeLabel(row.approvalType) }} |
| | | </span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="申请人编号">{{ row.applicantNo || "—" }}</el-descriptions-item> |
| | | <el-descriptions-item label="申请人名称">{{ row.applicantName || "—" }}</el-descriptions-item> |
| | | <el-descriptions-item label="申请摘要">{{ row.summary || "—" }}</el-descriptions-item> |
| | | <el-descriptions-item label="发起人编号">{{ row.applicantNo || "—" }}</el-descriptions-item> |
| | | <el-descriptions-item label="发起人名称">{{ row.applicantName || "—" }}</el-descriptions-item> |
| | | <el-descriptions-item label="摘要">{{ row.summary || "—" }}</el-descriptions-item> |
| | | <el-descriptions-item v-if="row.rejectReason" |
| | | label="驳回原因" |
| | | :span="2"> |
| | |
| | | <el-descriptions-item label="发货订单号">{{ detailData.shippingInfo.shippingNo || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="客户名称">{{ detailData.shippingInfo.customerName || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="发货类型">{{ detailData.shippingInfo.type || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="发货日期">{{ detailData.shippingInfo.shippingDateDate || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="发货日期">{{ detailData.shippingInfo.shippingDate || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="审核状态">{{ detailData.shippingInfo.status || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="发货车牌号">{{ detailData.shippingInfo.shippingCarNumber || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="快递公司">{{ detailData.shippingInfo.expressCompany || "--" }}</el-descriptions-item> |
| | |
| | | <el-descriptions-item label="签订日期">{{ detailData.executionDate || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="录入日期">{{ detailData.entryDate || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="付款方式">{{ detailData.paymentMethod || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="付款类别">{{ detailData.paymentCategory || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="合同金额" :span="2"> |
| | | <span style="font-size: 18px; color: #e6a23c; font-weight: bold;"> |
| | | ¥{{ Number(detailData.contractAmount ?? 0).toFixed(2) }} |
| | |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <!-- 销售台账审批详情(卖油 / 代储) --> |
| | | <template v-else-if="row.businessType === 19"> |
| | | <div v-if="detailData && Object.keys(detailData).length" class="sales-ledger-detail"> |
| | | <el-divider content-position="left">销售台账详情</el-divider> |
| | | <el-descriptions :column="2" border> |
| | | <el-descriptions-item label="销售合同号">{{ detailData.salesContractNo || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="销售类型">{{ detailData.ledgerType || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="客户名称">{{ detailData.customerName || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="业务员">{{ detailData.salesman || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="项目名称">{{ detailData.projectName || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="付款方式">{{ detailData.paymentMethod || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="付款类别">{{ detailData.paymentCategory || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item v-if="detailData.ledgerType === '代储'" |
| | | label="油库">{{ detailData.oilDepotName || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item v-if="detailData.ledgerType === '代储'" |
| | | label="储罐号">{{ detailData.tankNo || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="合同金额" :span="2"> |
| | | <span style="font-size: 18px; color: #e6a23c; font-weight: bold;"> |
| | | ¥{{ Number(detailData.contractAmount ?? 0).toFixed(2) }} |
| | | </span> |
| | | <span v-if="detailData.exceedsTrustFund" |
| | | class="reject-text" |
| | | style="margin-left: 12px;"> |
| | | 已超出该客户信托基金{{ detailData.trustFund != null ? `(信托基金:${detailData.trustFund})` : "" }} |
| | | </span> |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | <div v-if="detailData.productData && detailData.productData.length" |
| | | style="margin-top: 20px;"> |
| | | <h4>产品明细</h4> |
| | | <el-table :data="detailData.productData" |
| | | border |
| | | style="width: 100%"> |
| | | <el-table-column prop="productCategory" label="产品大类" /> |
| | | <el-table-column prop="specificationModel" label="规格型号" /> |
| | | <el-table-column prop="unit" label="单位" /> |
| | | <el-table-column prop="quantity" label="数量" /> |
| | | <el-table-column prop="taxInclusiveUnitPrice" label="含税单价"> |
| | | <template #default="scope">¥{{ Number(scope.row.taxInclusiveUnitPrice ?? 0).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column prop="taxInclusiveTotalPrice" label="含税总价"> |
| | | <template #default="scope">¥{{ Number(scope.row.taxInclusiveTotalPrice ?? 0).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | </div> |
| | | <div v-if="attachmentList.length" |
| | | <div v-for="group in attachmentGroups" |
| | | :key="group.title" |
| | | class="detail-block"> |
| | | <div class="detail-block-title">附件列表</div> |
| | | <div class="detail-block-title">{{ group.title }}</div> |
| | | <div class="attachment-list"> |
| | | <div v-for="file in attachmentList" |
| | | <div v-for="file in group.files" |
| | | :key="file.id" |
| | | class="attachment-item"> |
| | | <el-icon class="file-icon"> |
| | |
| | | <el-link v-if="file.previewURL || file.url" |
| | | type="primary" |
| | | :underline="false" |
| | | @click="openFile(file.previewURL || file.url)">预览</el-link> |
| | | @click="previewFile(file.previewURL || file.url)">预览</el-link> |
| | | <el-divider v-if="(file.previewURL || file.url) && file.downloadURL" |
| | | direction="vertical" /> |
| | | <el-link v-if="file.downloadURL" |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <filePreview ref="filePreviewRef" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { computed } from "vue"; |
| | | import { computed, ref } from "vue"; |
| | | import { Paperclip } from "@element-plus/icons-vue"; |
| | | import filePreview from "@/components/filePreview/index.vue"; |
| | | import { formatDisplayTime } from "../../approve-template/approveTemplateConstants.js"; |
| | | import { |
| | | approvalTypeLabel, |
| | |
| | | |
| | | const formResolved = computed(() => resolveInstanceFormFields(props.row)); |
| | | |
| | | const filePreviewRef = ref(); |
| | | |
| | | // 是否为特殊审批类型(采购、发货、报价) |
| | | |
| | | // 是否为特殊审批类型(采购、发货、报价、销售台账) |
| | | const isSpecialApprovalType = computed(() => { |
| | | return [5, 7, 6].includes(props.row.businessType); |
| | | return [5, 7, 6, 19].includes(props.row.businessType); |
| | | }); |
| | | |
| | | // 详情数据(直接使用传入的 detail-data 参数) |
| | |
| | | return Array.isArray(list) ? list : []; |
| | | }); |
| | | |
| | | // 台账自身附件:销售台账 listPage 返回 storageBlobVOs,采购台账 getPurchaseByCode 返回 storageBlobVOS |
| | | const businessAttachments = computed(() => { |
| | | if (![5, 19].includes(props.row.businessType)) return []; |
| | | const detail = props.detailData || {}; |
| | | const candidates = [detail.storageBlobVOs, detail.storageBlobVOS, detail.storageBlobVOList]; |
| | | return candidates.find(list => Array.isArray(list) && list.length) || []; |
| | | }); |
| | | |
| | | const attachmentGroups = computed(() => { |
| | | const groups = []; |
| | | if (businessAttachments.value.length) { |
| | | groups.push({ title: "台账附件", files: businessAttachments.value }); |
| | | } |
| | | if (attachmentList.value.length) { |
| | | groups.push({ title: "审批附件", files: attachmentList.value }); |
| | | } |
| | | return groups; |
| | | }); |
| | | |
| | | function previewFile(url) { |
| | | if (!url) return; |
| | | filePreviewRef.value?.open(url); |
| | | } |
| | | |
| | | function openFile(url) { |
| | | if (!url) return; |
| | | window.open(url, "_blank"); |