| | |
| | | placeholder="请选择" |
| | | clearable |
| | | style="width: 100%"> |
| | | <el-option label="未发货" :value="1" /> |
| | | <el-option label="未出库" :value="1" /> |
| | | <el-option label="审批中" :value="2" /> |
| | | <el-option label="审批不通过" :value="3" /> |
| | | <el-option label="审批通过" :value="4" /> |
| | | <el-option label="已发货" :value="5" /> |
| | | <el-option label="已出库" :value="5" /> |
| | | <el-option label="部分发货" :value="6" /> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | align="center"> |
| | | <template #default="scope"> |
| | | <el-tag v-if="Number(scope.row.deliveryStatus) === 1" |
| | | type="info">未发货</el-tag> |
| | | type="info">未出库</el-tag> |
| | | <el-tag v-else-if="Number(scope.row.deliveryStatus) === 2" |
| | | type="warning">审批中</el-tag> |
| | | <el-tag v-else-if="Number(scope.row.deliveryStatus) === 3" |
| | |
| | | <el-tag v-else-if="Number(scope.row.deliveryStatus) === 4" |
| | | type="primary">审批通过</el-tag> |
| | | <el-tag v-else-if="Number(scope.row.deliveryStatus) === 5" |
| | | type="success">已发货</el-tag> |
| | | type="success">已出库</el-tag> |
| | | <el-tag v-else-if="Number(scope.row.deliveryStatus) === 6" |
| | | type="warning">部分发货</el-tag> |
| | | <el-tag v-else |
| | |
| | | entryDate: null, // 录入日期 |
| | | entryDateStart: undefined, |
| | | entryDateEnd: undefined, |
| | | deliveryStatus: undefined, // 发货状态:1未发货 2审批中 3审批不通过 4审批通过 5已发货 6部分发货 |
| | | deliveryStatus: undefined, // 发货状态:1未出库 2审批中 3审批不通过 4审批通过 5已出库 6部分发货 |
| | | stockStatus: undefined, // 入库状态:0未入库 1部分入库 2已入库 |
| | | reviewStatus: undefined, // 审核状态:0待审核 1已审核 2已反审 |
| | | }, |
| | |
| | | if (operationType.value === "view") return; |
| | | if (!row) return; |
| | | if (isProductShipped(row)) { |
| | | proxy.$modal.msgWarning("已发货或审核通过的产品不能复制"); |
| | | proxy.$modal.msgWarning("已出库或审核通过的产品不能复制"); |
| | | return; |
| | | } |
| | | const hasBlockingEditingRow = (productData.value || []).some( |
| | |
| | | if (operationType.value === "view") return; |
| | | if (!row) return; |
| | | if (isProductShipped(row)) { |
| | | proxy.$modal.msgWarning("已发货或审核通过的产品不能编辑"); |
| | | proxy.$modal.msgWarning("已出库或审核通过的产品不能编辑"); |
| | | return; |
| | | } |
| | | if (!discardPlaceholderRowIfPristine()) return; |
| | |
| | | if (operationType.value === "view") return; |
| | | if (!row) return; |
| | | if (isProductShipped(row)) { |
| | | proxy.$modal.msgWarning("已发货或审核通过的产品不能编辑"); |
| | | proxy.$modal.msgWarning("已出库或审核通过的产品不能编辑"); |
| | | return; |
| | | } |
| | | // 确保 productForm 指向当前行,以复用计算逻辑 |
| | |
| | | if (!row) return; |
| | | if (operationType.value === "view") return; |
| | | if (isProductShipped(row)) { |
| | | proxy.$modal.msgWarning("已发货或审核通过的产品不能编辑"); |
| | | proxy.$modal.msgWarning("已出库或审核通过的产品不能编辑"); |
| | | return; |
| | | } |
| | | ensureProductRowDefaults(row); |
| | |
| | | if (!row) return; |
| | | if (operationType.value === "view") return; |
| | | if (isProductShipped(row)) { |
| | | proxy.$modal.msgWarning("已发货或审核通过的产品不能编辑"); |
| | | proxy.$modal.msgWarning("已出库或审核通过的产品不能编辑"); |
| | | return; |
| | | } |
| | | ensureProductRowDefaults(row); |
| | |
| | | shipped: "/sales/ledger/salesHistory/shippingImportTemplate", |
| | | }; |
| | | const HISTORY_IMPORT_TEMPLATE_FILE_NAME_MAP = { |
| | | notShipped: "销售发货历史数据导入模板-未发货.xlsx", |
| | | shipped: "销售发货历史数据导入模板-已发货.xlsx", |
| | | notShipped: "销售发货历史数据导入模板-未出库.xlsx", |
| | | shipped: "销售发货历史数据导入模板-已出库.xlsx", |
| | | }; |
| | | const currentImportCommand = ref("default"); |
| | | const activeStatusTab = ref("all"); |
| | |
| | | { key: "reviewed", label: "已审核" }, |
| | | { key: "reverseReviewed", label: "反审核" }, |
| | | { key: "stocked", label: "已入库" }, |
| | | { key: "delivered", label: "已发货" }, |
| | | { key: "delivered", label: "已出库" }, |
| | | ]; |
| | | |
| | | const resetStatusFilters = () => { |
| | |
| | | const productIndex = ref(0); |
| | | // 打开产品弹框 |
| | | const openProductForm = async (type, row, index) => { |
| | | // 编辑时检查产品是否已发货或审核通过 |
| | | // 编辑时检查产品是否已出库或审核通过 |
| | | if (type === "edit" && isProductShipped(row)) { |
| | | proxy.$modal.msgWarning("已发货或审核通过的产品不能编辑"); |
| | | proxy.$modal.msgWarning("已出库或审核通过的产品不能编辑"); |
| | | return; |
| | | } |
| | | |
| | |
| | | return; |
| | | } |
| | | |
| | | // 检查是否有已发货或审核通过的产品 |
| | | // 检查是否有已出库或审核通过的产品 |
| | | const shippedProducts = productSelectedRows.value.filter(row => |
| | | isProductShipped(row) |
| | | ); |
| | | if (shippedProducts.length > 0) { |
| | | proxy.$modal.msgWarning("已发货或审核通过的产品不能删除"); |
| | | proxy.$modal.msgWarning("已出库或审核通过的产品不能删除"); |
| | | return; |
| | | } |
| | | |
| | |
| | | ); |
| | | exportProcessRouteDialogVisible.value = false; |
| | | }; |
| | | /** 判断单个产品是否已发货(根据shippingStatus判断,已发货或审核通过不可编辑和删除) */ |
| | | /** 判断单个产品是否已出库(根据shippingStatus判断,已出库或审核通过不可编辑和删除) */ |
| | | const isProductShipped = product => { |
| | | if (!product) return false; |
| | | const status = String(product.shippingStatus || "").trim(); |
| | | // 如果发货状态是"已发货"或"审核通过",则不可编辑和删除 |
| | | return status === "已发货" || status === "审核通过"; |
| | | // 如果发货状态是"已出库"或"审核通过",则不可编辑和删除 |
| | | return status === "已出库" || status === "审核通过"; |
| | | }; |
| | | |
| | | /** 判断销售订单下是否存在已发货/发货完成的产品(不可删除) */ |
| | | /** 判断销售订单下是否存在已出库/发货完成的产品(不可删除) */ |
| | | const hasShippedProducts = products => { |
| | | if (!products || !products.length) return false; |
| | | return products.some(p => { |
| | | const status = String(p.shippingStatus || "").trim(); |
| | | // 有发货日期或车牌号视为已发货 |
| | | // 有发货日期或车牌号视为已出库 |
| | | if (p.shippingDate || p.shippingCarNumber) return true; |
| | | // 已进行发货、发货完成、已发货 均不可删除 |
| | | // 已进行发货、发货完成、已出库 均不可删除 |
| | | return ( |
| | | status === "已进行发货" || status === "发货完成" || status === "已发货" |
| | | status === "已进行发货" || status === "发货完成" || status === "已出库" |
| | | ); |
| | | }); |
| | | }; |
| | |
| | | * @param row 行数据 |
| | | */ |
| | | const getShippingStatusText = row => { |
| | | // 如果已发货(有发货日期或车牌号),显示"已发货" |
| | | // 如果已出库(有发货日期或车牌号),显示"已出库" |
| | | if (row.shippingDate || row.shippingCarNumber) { |
| | | return "已发货"; |
| | | return "已出库"; |
| | | } |
| | | |
| | | // 获取发货状态字段 |
| | |
| | | 审核中: "审核中", |
| | | 审核拒绝: "审核拒绝", |
| | | 审核通过: "审核通过", |
| | | 已发货: "已发货", |
| | | 已出库: "已出库", |
| | | }; |
| | | return statusTextMap[statusStr] || "待发货"; |
| | | }; |
| | |
| | | * @param row 行数据 |
| | | */ |
| | | const getShippingStatusType = row => { |
| | | // 如果已发货(有发货日期或车牌号),显示绿色 |
| | | // 如果已出库(有发货日期或车牌号),显示绿色 |
| | | if (row.shippingDate || row.shippingCarNumber) { |
| | | return "success"; |
| | | } |
| | |
| | | 审核中: "warning", |
| | | 审核拒绝: "danger", |
| | | 审核通过: "success", |
| | | 已发货: "success", |
| | | 已出库: "success", |
| | | }; |
| | | return typeTextMap[statusStr] || "info"; |
| | | }; |
| | |
| | | return false; |
| | | } |
| | | |
| | | // 台账级发货状态(deliveryStatus):2审批中、5已发货 时不可再发起本行发货;6部分发货仍可按明细继续发 |
| | | // 台账级发货状态(deliveryStatus):2审批中、5已出库 时不可再发起本行发货;6部分发货仍可按明细继续发 |
| | | const deliveryStatus = row.deliveryStatus; |
| | | if ( |
| | | deliveryStatus !== null && |
| | |
| | | // 获取发货状态 |
| | | const shippingStatus = row.shippingStatus; |
| | | |
| | | // 如果已发货(有发货日期或车牌号),不能再次发货 |
| | | // 如果已出库(有发货日期或车牌号),不能再次发货 |
| | | if (row.shippingDate || row.shippingCarNumber) { |
| | | return false; |
| | | } |
| | |
| | | return; |
| | | } |
| | | |
| | | // 允许:1未发货、3审批不通过、4审批通过、6部分发货;不允许:2审批中、5已发货 |
| | | // 允许:1未出库、3审批不通过、4审批通过、6部分发货;不允许:2审批中、5已出库 |
| | | const statusItem = selectedRows.value[0].deliveryStatus; |
| | | const ledgerAllowsDelivery = s => [1, 3, 4, 6].includes(Number(s)); |
| | | let isTrue = true; |
| | | selectedRows.value.forEach(row => { |
| | | if (!ledgerAllowsDelivery(row.deliveryStatus)) { |
| | | proxy.$modal.msgWarning( |
| | | "仅未发货、审批不通过、审批通过或部分发货的台账可以发货" |
| | | "仅未出库、审批不通过、审批通过或部分发货的台账可以发货" |
| | | ); |
| | | isTrue = false; |
| | | return; |
| | |
| | | ); |
| | | if (shippedLedgers.length === selectedRows.value.length) { |
| | | try { |
| | | await ElMessageBox.alert("所选销售台账均已发货,不能再次发货。", "提示", { |
| | | await ElMessageBox.alert("所选销售台账均已出库,不能再次发货。", "提示", { |
| | | type: "warning", |
| | | confirmButtonText: "知道了", |
| | | }); |
| | |
| | | if (shippedLedgers.length > 0) { |
| | | try { |
| | | await ElMessageBox.alert( |
| | | "选中的销售台账中包含已发货记录,已发货的不能再次发货,系统将仅为未发货台账处理。", |
| | | "选中的销售台账中包含已出库记录,已出库的不能再次发货,系统将仅为未出库台账处理。", |
| | | "提示", |
| | | { |
| | | type: "warning", |
| | |
| | | const status = Number(row.deliveryStatus); |
| | | if (![1, 3, 4, 6].includes(status)) { |
| | | proxy.$modal.msgWarning( |
| | | "只有发货状态为未发货、审批不通过、审批通过或部分发货的记录才可以发货" |
| | | "只有发货状态为未出库、审批不通过、审批通过或部分发货的记录才可以发货" |
| | | ); |
| | | return; |
| | | } |