| | |
| | | <div> |
| | | <el-dialog |
| | | v-model="dialogFormVisible" |
| | | :title="operationType === 'approval' ? '审批' : '详情'" |
| | | :title="operationType === 'add' ? '新增审批流程' : '编辑审批流程'" |
| | | width="700px" |
| | | @close="closeDia" |
| | | > |
| | |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="申请部门:"> |
| | | <el-form-item label="申请部门:" prop="approveDeptId"> |
| | | <el-select |
| | | disabled |
| | | v-model="form.approveDeptId" |
| | |
| | | :value="user.deptId" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <!-- 审批标题(仅自由协同审批显示) --> |
| | | <el-row v-if="isFreeApproval"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="审批标题:" prop="approveTitle"> |
| | | <el-input v-model="form.approveTitle" placeholder="请输入" clearable disabled/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | </el-skeleton> |
| | | </div> |
| | | |
| | | <!-- 销售审批:展示销售详情 --> |
| | | <div v-if="isSalesApproval" style="margin: 10px 0 18px;"> |
| | | <el-divider content-position="left">销售详情</el-divider> |
| | | <el-skeleton :loading="salesLoading" animated> |
| | | <template #template> |
| | | <el-skeleton-item variant="h3" style="width: 30%" /> |
| | | <el-skeleton-item variant="text" style="width: 100%" /> |
| | | <el-skeleton-item variant="text" style="width: 100%" /> |
| | | </template> |
| | | <template #default> |
| | | <el-empty v-if="!currentSales || !currentSales.salesContractNo" description="未查询到对应销售详情" /> |
| | | <template v-else> |
| | | <el-descriptions :column="2" border> |
| | | <el-descriptions-item label="销售合同号">{{ currentSales.salesContractNo }}</el-descriptions-item> |
| | | <el-descriptions-item label="客户名称">{{ currentSales.customerName }}</el-descriptions-item> |
| | | <el-descriptions-item label="业务员">{{ currentSales.salesman }}</el-descriptions-item> |
| | | <el-descriptions-item label="录入人">{{ currentSales.entryPersonName }}</el-descriptions-item> |
| | | <el-descriptions-item label="签订日期">{{ currentSales.executionDate }}</el-descriptions-item> |
| | | <el-descriptions-item label="录入日期">{{ currentSales.entryDate }}</el-descriptions-item> |
| | | <el-descriptions-item label="付款方式">{{ currentSales.paymentMethod }}</el-descriptions-item> |
| | | <el-descriptions-item label="合同金额" :span="2"> |
| | | <span style="font-size: 18px; color: #e6a23c; font-weight: bold;"> |
| | | ¥{{ calculateSalesTotalAmount() }} |
| | | </span> |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | |
| | | <div style="margin-top: 20px;"> |
| | | <h4>产品明细</h4> |
| | | <el-table :data="currentSales.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> |
| | | </template> |
| | | </template> |
| | | </el-skeleton> |
| | | </div> |
| | | |
| | | <el-form :model="{ activities }" ref="formRef" label-position="top"> |
| | | <el-steps :active="getActiveStep()" finish-status="success" process-status="process" align-center direction="vertical"> |
| | | <el-step |
| | |
| | | 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 { getPurchaseByCode } from "@/api/procurementManagement/procurementLedger.js"; |
| | | import { getPurchaseByCode, getSalesByCode } from "@/api/procurementManagement/procurementLedger.js"; |
| | | const emit = defineEmits(['close']) |
| | | const { proxy } = getCurrentInstance() |
| | | |
| | |
| | | const currentQuotation = ref({}) |
| | | const purchaseLoading = ref(false) |
| | | const currentPurchase = ref({}) |
| | | const salesLoading = ref(false) |
| | | const currentSales = ref({}) |
| | | const isQuotationApproval = computed(() => Number(props.approveType) === 6) |
| | | const isPurchaseApproval = computed(() => Number(props.approveType) === 5) |
| | | const isSalesApproval = computed(() => Number(props.approveType) === 9) |
| | | const isFreeApproval = computed(() => Number(props.approveType) === 10) |
| | | |
| | | const data = reactive({ |
| | | form: { |
| | |
| | | getProductOptions().then(() => { |
| | | // 确保值类型匹配(如果选项已加载) |
| | | if (productOptions.value.length > 0 && form.value.approveDeptId) { |
| | | const matchedOption = productOptions.value.find(opt => |
| | | opt.deptId == form.value.approveDeptId || |
| | | const matchedOption = productOptions.value.find(opt => |
| | | opt.deptId == form.value.approveDeptId || |
| | | String(opt.deptId) === String(form.value.approveDeptId) |
| | | ); |
| | | if (matchedOption) { |
| | |
| | | proxy.$modal.msgError('查询采购详情失败') |
| | | }).finally(() => { |
| | | purchaseLoading.value = false |
| | | }) |
| | | } |
| | | } |
| | | |
| | | // 销售审批:用审批事由字段承载的"销售合同号"去查销售详情 |
| | | if (isSalesApproval.value) { |
| | | const salesContractNo = row?.approveReason; |
| | | if (salesContractNo) { |
| | | salesLoading.value = true |
| | | getSalesByCode({ salesContractNo }).then((res) => { |
| | | currentSales.value = res |
| | | }).catch((err) => { |
| | | console.error('查询销售详情失败:', err) |
| | | proxy.$modal.msgError('查询销售详情失败') |
| | | }).finally(() => { |
| | | salesLoading.value = false |
| | | }) |
| | | } |
| | | } |
| | |
| | | currentQuotation.value = {} |
| | | purchaseLoading.value = false |
| | | currentPurchase.value = {} |
| | | salesLoading.value = false |
| | | currentSales.value = {} |
| | | emit('close') |
| | | }; |
| | | |
| | | // 计算销售合同金额(产品明细含税总价之和) |
| | | const calculateSalesTotalAmount = () => { |
| | | const products = currentSales.value?.productData || [] |
| | | const total = products.reduce((sum, item) => { |
| | | return sum + Number(item.taxInclusiveTotalPrice || 0) |
| | | }, 0) |
| | | return total.toFixed(2) |
| | | } |
| | | |
| | | defineExpose({ |
| | | openDialog, |
| | | }); |