销售退货新增页面基本信息加上发货类型下拉框,可选货车或者快递。货车 展示发货车牌号,选择快递则展示快递公司,快递单号。对应的列表也要加上相应的字段,采购退货也是一样加下
| | |
| | | { label: "退货单号", prop: "returnNo", minWidth: "150" }, |
| | | { label: "供应商", prop: "supplierName", minWidth: "180" }, |
| | | { label: "关联入库单号", prop: "inboundBatches", minWidth: "150" }, |
| | | { |
| | | label: "发货类型", |
| | | prop: "shippingType", |
| | | minWidth: "110", |
| | | formatData: (val) => ({ 1: "货车", 2: "快递" }[String(val)] || "--"), |
| | | }, |
| | | { |
| | | label: "发货车牌号", |
| | | prop: "truckPlateNo", |
| | | minWidth: "140", |
| | | formatData: (_val, row) => (String(row?.shippingType) === "1" ? row?.truckPlateNo || "--" : "--"), |
| | | }, |
| | | { |
| | | label: "快递公司", |
| | | prop: "expressCompany", |
| | | minWidth: "140", |
| | | formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressCompany || "--" : "--"), |
| | | }, |
| | | { |
| | | label: "快递单号", |
| | | prop: "expressNo", |
| | | minWidth: "150", |
| | | formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressNo || "--" : "--"), |
| | | }, |
| | | { label: "退货日期", prop: "preparedAt", minWidth: "170" }, |
| | | { |
| | | label: "退款总额", |
| | |
| | | { label: "退货单号", prop: "returnNo", minWidth: "150" }, |
| | | { label: "客户名称", prop: "customerName", minWidth: "180" }, |
| | | { label: "关联发货单号", prop: "shippingNo", minWidth: "150" }, |
| | | { |
| | | label: "发货类型", |
| | | prop: "shippingType", |
| | | minWidth: "110", |
| | | formatData: (val) => ({ 1: "货车", 2: "快递" }[String(val)] || "--"), |
| | | }, |
| | | { |
| | | label: "发货车牌号", |
| | | prop: "truckPlateNo", |
| | | minWidth: "140", |
| | | formatData: (_val, row) => (String(row?.shippingType) === "1" ? row?.truckPlateNo || "--" : "--"), |
| | | }, |
| | | { |
| | | label: "快递公司", |
| | | prop: "expressCompany", |
| | | minWidth: "140", |
| | | formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressCompany || "--" : "--"), |
| | | }, |
| | | { |
| | | label: "快递单号", |
| | | prop: "expressNo", |
| | | minWidth: "150", |
| | | formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressNo || "--" : "--"), |
| | | }, |
| | | { label: "退货日期", prop: "makeTime", minWidth: "170" }, |
| | | { |
| | | label: "退款总额", |
| | |
| | | </el-form-item> |
| | | |
| | | <el-form-item |
| | | label="发货类型" |
| | | prop="shippingType" |
| | | :rules="[ |
| | | { |
| | | required: true, |
| | | message: '请选择发货类型', |
| | | trigger: 'change', |
| | | } |
| | | ]" |
| | | > |
| | | <el-select |
| | | v-model="formState.shippingType" |
| | | placeholder="请选择发货类型" |
| | | style="width: 240px" |
| | | @change="handleShippingTypeChange" |
| | | > |
| | | <el-option label="货车" :value="1" /> |
| | | <el-option label="快递" :value="2" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item |
| | | v-if="formState.shippingType === 1" |
| | | label="发货车牌号" |
| | | prop="truckPlateNo" |
| | | > |
| | | <el-input |
| | | v-model="formState.truckPlateNo" |
| | | placeholder="请输入发货车牌号" |
| | | style="width: 240px" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <template v-else-if="formState.shippingType === 2"> |
| | | <el-form-item |
| | | label="快递公司" |
| | | prop="expressCompany" |
| | | > |
| | | <el-input |
| | | v-model="formState.expressCompany" |
| | | placeholder="请输入快递公司" |
| | | style="width: 240px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="快递单号" |
| | | prop="expressNo" |
| | | > |
| | | <el-input |
| | | v-model="formState.expressNo" |
| | | placeholder="请输入快递单号" |
| | | style="width: 240px" |
| | | /> |
| | | </el-form-item> |
| | | </template> |
| | | |
| | | <el-form-item |
| | | label="供应商名称" |
| | | prop="supplierId" |
| | | :rules="[ |
| | |
| | | no: '', |
| | | isDefaultNo: true, |
| | | returnType: 0, |
| | | shippingType: undefined, |
| | | truckPlateNo: '', |
| | | expressCompany: '', |
| | | expressNo: '', |
| | | incomeType: undefined, |
| | | remark: '', |
| | | supplierId: undefined, |
| | |
| | | const purchaseLedgerOptions = ref([]) |
| | | // 是否展示产品列表数据 |
| | | const isShowProductsModal = ref(false) |
| | | |
| | | const handleShippingTypeChange = (val) => { |
| | | if (val === 1) { |
| | | formState.value.expressCompany = ''; |
| | | formState.value.expressNo = ''; |
| | | } else if (val === 2) { |
| | | formState.value.truckPlateNo = ''; |
| | | } else { |
| | | formState.value.truckPlateNo = ''; |
| | | formState.value.expressCompany = ''; |
| | | formState.value.expressNo = ''; |
| | | } |
| | | }; |
| | | |
| | | const isShow = computed({ |
| | | get() { |
| | |
| | | } |
| | | |
| | | const closeModal = () => { |
| | | formState.value.shippingType = undefined; |
| | | formState.value.truckPlateNo = ''; |
| | | formState.value.expressCompany = ''; |
| | | formState.value.expressNo = ''; |
| | | isShow.value = false; |
| | | }; |
| | | |
| | |
| | | <el-descriptions-item label="退料人">{{ |
| | | detailData.returnUserName || "--" |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="发货类型">{{ |
| | | getShippingTypeLabel(detailData.shippingType) |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item v-if="String(detailData.shippingType) === '1'" label="发货车牌号">{{ |
| | | detailData.truckPlateNo || "--" |
| | | }}</el-descriptions-item> |
| | | <template v-else-if="String(detailData.shippingType) === '2'"> |
| | | <el-descriptions-item label="快递公司">{{ |
| | | detailData.expressCompany || "--" |
| | | }}</el-descriptions-item> |
| | | <el-descriptions-item label="快递单号">{{ |
| | | detailData.expressNo || "--" |
| | | }}</el-descriptions-item> |
| | | </template> |
| | | <el-descriptions-item label="整单折扣额">{{ |
| | | formatAmount(detailData.totalDiscountAmount) |
| | | }}</el-descriptions-item> |
| | |
| | | prop: "returnUserName", |
| | | width: 110, |
| | | }, |
| | | { |
| | | label: "发货类型", |
| | | prop: "shippingType", |
| | | width: 100, |
| | | formatData: (val) => getShippingTypeLabel(val), |
| | | }, |
| | | { label: "发货车牌号", prop: "truckPlateDisplay", width: 140 }, |
| | | { label: "快递公司", prop: "expressCompanyDisplay", width: 140 }, |
| | | { label: "快递单号", prop: "expressNoDisplay", width: 150 }, |
| | | |
| | | { |
| | | label: "整单折扣额", |
| | |
| | | findPurchaseReturnOrderListPage({ ...searchForm.value, ...page }) |
| | | .then((res) => { |
| | | tableLoading.value = false; |
| | | tableData.value = res.data.records; |
| | | tableData.value = (res.data.records || []).map((row) => ({ |
| | | ...row, |
| | | truckPlateDisplay: String(row?.shippingType) === "1" ? (row?.truckPlateNo || "--") : "--", |
| | | expressCompanyDisplay: String(row?.shippingType) === "2" ? (row?.expressCompany || "--") : "--", |
| | | expressNoDisplay: String(row?.shippingType) === "2" ? (row?.expressNo || "--") : "--", |
| | | })); |
| | | page.total = res.data.total; |
| | | }) |
| | | .catch(() => { |
| | |
| | | ); |
| | | }; |
| | | |
| | | const getShippingTypeLabel = (value) => { |
| | | const shippingTypeMap = { |
| | | 1: "货车", |
| | | 2: "快递", |
| | | }; |
| | | return shippingTypeMap[String(value)] || shippingTypeMap[value] || "--"; |
| | | }; |
| | | |
| | | const formatAmount = (value) => { |
| | | if (value === null || value === undefined || value === "") { |
| | | return "--"; |
| | |
| | | <el-descriptions-item label="销售单号">{{ detail.salesContractNo }}</el-descriptions-item> |
| | | <el-descriptions-item label="业务员">{{ detail.salesman }}</el-descriptions-item> |
| | | <el-descriptions-item label="关联发货单号">{{ detail.shippingNo }}</el-descriptions-item> |
| | | <el-descriptions-item label="发货类型">{{ getShippingTypeText(detail.shippingType) }}</el-descriptions-item> |
| | | <el-descriptions-item v-if="String(detail.shippingType) === '1'" label="发货车牌号">{{ detail.truckPlateNo || "--" }}</el-descriptions-item> |
| | | <template v-else-if="String(detail.shippingType) === '2'"> |
| | | <el-descriptions-item label="快递公司">{{ detail.expressCompany || "--" }}</el-descriptions-item> |
| | | <el-descriptions-item label="快递单号">{{ detail.expressNo || "--" }}</el-descriptions-item> |
| | | </template> |
| | | <!-- <el-descriptions-item label="项目名称">{{ detail.projectName }}</el-descriptions-item> --> |
| | | <el-descriptions-item label="制单人">{{ detail.maker }}</el-descriptions-item> |
| | | <el-descriptions-item label="制单时间">{{ detail.makeTime }}</el-descriptions-item> |
| | |
| | | const detail = ref({}); |
| | | const tableData = ref([]); |
| | | const availableProducts = ref([]); |
| | | const shippingTypeMap = { |
| | | 1: "货车", |
| | | 2: "快递", |
| | | }; |
| | | |
| | | const sameKey = (a, b) => a != null && b != null && String(a) === String(b); |
| | | |
| | |
| | | return Math.max(total - un, 0); |
| | | }; |
| | | |
| | | const getShippingTypeText = (value) => shippingTypeMap[String(value)] || shippingTypeMap[value] || "--"; |
| | | |
| | | /** 详情表用 productName / model;合并时勿让空串盖掉出库行字段 */ |
| | | const mergeDetailProductRow = (product, normalized) => { |
| | | const row = { ...product, ...normalized }; |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <el-form-item label="发货类型:" prop="shippingType"> |
| | | <el-select v-model="form.shippingType" placeholder="请选择发货类型" @change="handleShippingTypeChange"> |
| | | <el-option label="货车" :value="1" /> |
| | | <el-option label="快递" :value="2" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="4" v-if="form.shippingType === 1"> |
| | | <el-form-item label="发货车牌号:" prop="truckPlateNo"> |
| | | <el-input v-model="form.truckPlateNo" placeholder="请输入发货车牌号" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <template v-else-if="form.shippingType === 2"> |
| | | <el-col :span="4"> |
| | | <el-form-item label="快递公司:" prop="expressCompany"> |
| | | <el-input v-model="form.expressCompany" placeholder="请输入快递公司" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <el-form-item label="快递单号:" prop="expressNo"> |
| | | <el-input v-model="form.expressNo" placeholder="请输入快递单号" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </template> |
| | | <el-col :span="4"> |
| | | <el-form-item label="退款总额:" prop="refundAmount"> |
| | | <el-input v-model="form.refundAmount" disabled placeholder="自动计算" /> |
| | | </el-form-item> |
| | |
| | | returnNo: "", |
| | | customerId: "", |
| | | shippingId: "", |
| | | shippingType: "", |
| | | truckPlateNo: "", |
| | | expressCompany: "", |
| | | expressNo: "", |
| | | projectId: "", |
| | | maker: "", |
| | | makeTime: "", |
| | |
| | | }], |
| | | customerId: [{ required: true, message: "请选择客户", trigger: "change" }], |
| | | shippingId: [{ required: true, message: "请选择关联出库单号", trigger: "change" }], |
| | | shippingType: [{ required: true, message: "请选择发货类型", trigger: "change" }], |
| | | } |
| | | }); |
| | | const { form, rules } = toRefs(data); |
| | |
| | | returnNo: "", |
| | | customerId: "", |
| | | shippingId: "", |
| | | shippingType: "", |
| | | truckPlateNo: "", |
| | | expressCompany: "", |
| | | expressNo: "", |
| | | projectId: "", |
| | | maker: "", |
| | | makeTime: "", |
| | |
| | | const payload = { ...form.value, returnSaleProducts }; |
| | | delete payload.returnNoCheckbox; |
| | | if (operationType.value === "add" && form.value.returnNoCheckbox) delete payload.returnNo; |
| | | if (payload.shippingType !== 1) payload.truckPlateNo = ""; |
| | | if (payload.shippingType !== 2) { |
| | | payload.expressCompany = ""; |
| | | payload.expressNo = ""; |
| | | } |
| | | if (operationType.value === "add") { |
| | | returnManagementAdd(payload).then(() => { |
| | | proxy.$modal.msgSuccess("新增成功"); |
| | |
| | | returnNo: "", |
| | | customerId: "", |
| | | shippingId: "", |
| | | shippingType: "", |
| | | truckPlateNo: "", |
| | | expressCompany: "", |
| | | expressNo: "", |
| | | projectId: "", |
| | | maker: "", |
| | | makeTime: "", |
| | |
| | | formRef.value?.validateField('returnNo'); |
| | | }; |
| | | |
| | | const handleShippingTypeChange = (val) => { |
| | | if (val === 1) { |
| | | form.value.expressCompany = ""; |
| | | form.value.expressNo = ""; |
| | | } else if (val === 2) { |
| | | form.value.truckPlateNo = ""; |
| | | } else { |
| | | form.value.truckPlateNo = ""; |
| | | form.value.expressCompany = ""; |
| | | form.value.expressNo = ""; |
| | | } |
| | | }; |
| | | |
| | | const customerNameChange = async (val, clearDownstream = true) => { |
| | | // val is customerId now |
| | | if (clearDownstream) { |
| | |
| | | { label: "销售单号", prop: "salesContractNo", minWidth: 160 }, |
| | | { label: "业务员", prop: "salesman", minWidth: 120 }, |
| | | { label: "关联发货单号", prop: "shippingNo", minWidth: 170 }, |
| | | { |
| | | label: "发货类型", |
| | | prop: "shippingType", |
| | | minWidth: 100, |
| | | formatData: (val) => ({ 1: "货车", 2: "快递" }[String(val)] || "--"), |
| | | }, |
| | | { label: "发货车牌号", prop: "truckPlateDisplay", minWidth: 140 }, |
| | | { label: "快递公司", prop: "expressCompanyDisplay", minWidth: 140 }, |
| | | { label: "快递单号", prop: "expressNoDisplay", minWidth: 150 }, |
| | | { label: "项目名称", prop: "projectName", minWidth: 180 }, |
| | | { label: "制单人", prop: "maker", minWidth: 120 }, |
| | | { |
| | |
| | | tableLoading.value = true; |
| | | returnManagementList({ ...searchForm.value, ...page }).then(res => { |
| | | tableLoading.value = false; |
| | | tableData.value = res?.data?.records || []; |
| | | tableData.value = (res?.data?.records || []).map((row) => ({ |
| | | ...row, |
| | | truckPlateDisplay: String(row?.shippingType) === "1" ? (row?.truckPlateNo || "--") : "--", |
| | | expressCompanyDisplay: String(row?.shippingType) === "2" ? (row?.expressCompany || "--") : "--", |
| | | expressNoDisplay: String(row?.shippingType) === "2" ? (row?.expressNo || "--") : "--", |
| | | })); |
| | | page.total = res?.data?.total || 0; |
| | | }).finally(() => tableLoading.value = false); |
| | | }; |