From 11d7990309ddace2fa600cbeae58e3ab5ac368f9 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期日, 20 九月 2026 19:25:45 +0800
Subject: [PATCH] 新疆-融邦 1. 委外管理:新增合作商档案、委外订单、往来台账三个页面及接口;合作商附件弹框支持直接上传/删除并即时保存。 2. 信托基金与代储台账:客户档案加「信托基金 / 代储金额」并对超限标红提示;销售台账拆「卖油 / 代储」页签,代储走油库+储罐+合同金额,卖油保留产品明细;台账列表加审批状态与超限红字;审批中心显示销售合同号并能下钻台账明细。 3. 储罐号带入库存:储罐信息表单加「是否启用 / 用途 / 租客信息」联动与校验;库存管理、批号明细、入库/出库表单与列表补齐储罐号、油品、物流、过磅等字段展示。 4. 出库即发货与往来备件:出库台账区分「发货单 / 油品出库」两类来源并分别处理详情;新增备件出入库流水页面。 5. 车辆管理与残油联动:新增车辆管理页面;油品出入库表单物流信息顺序调整,车牌/车挂牌号联动只读。 6. 油品出库联动发货台账:发货台账加「发货单号 / 销售合同号」筛选,修复油品出库行批号列取错字段。 7. 采购申请模块:新增采购申请页面及接口。 8. 付款流水组件:抽出公共「付款流水」弹框组件,采购付款分栏、收付款台账与委外往来台账复用。 9. 列调整:收付款台账删除「付款金额 / 退货金额」;委外往来台账删除「回款金额」,并去掉金额列右对齐。
---
src/views/salesManagement/deliveryLedger/index.vue | 233 +++++++++++++++++++++++-----------------------------------
1 files changed, 92 insertions(+), 141 deletions(-)
diff --git a/src/views/salesManagement/deliveryLedger/index.vue b/src/views/salesManagement/deliveryLedger/index.vue
index 33fa45f..e8eaeae 100644
--- a/src/views/salesManagement/deliveryLedger/index.vue
+++ b/src/views/salesManagement/deliveryLedger/index.vue
@@ -2,7 +2,17 @@
<div class="app-container">
<div class="search_form">
<el-form :model="searchForm" :inline="true">
- <el-form-item label="閿�鍞鍗曞彿锛�">
+ <el-form-item label="鍙戣揣鍗曞彿锛�">
+ <el-input
+ v-model="searchForm.shippingNo"
+ placeholder="璇疯緭鍏�"
+ clearable
+ prefix-icon="Search"
+ style="width: 200px"
+ @change="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="閿�鍞悎鍚屽彿锛�">
<el-input
v-model="searchForm.salesContractNo"
placeholder="璇疯緭鍏�"
@@ -15,16 +25,6 @@
<el-form-item label="杞︾墝鍙凤細">
<el-input
v-model="searchForm.shippingCarNumber"
- placeholder="璇疯緭鍏�"
- clearable
- prefix-icon="Search"
- style="width: 200px"
- @change="handleQuery"
- />
- </el-form-item>
- <el-form-item label="蹇�掑崟鍙凤細">
- <el-input
- v-model="searchForm.expressNumber"
placeholder="璇疯緭鍏�"
clearable
prefix-icon="Search"
@@ -50,17 +50,27 @@
border
v-loading="tableLoading"
@selection-change="handleSelectionChange"
- :row-key="(row) => row.id"
+ :row-key="(row) => `${row.source || 'shipping'}-${row.stockOutRecordId ?? row.id}`"
style="width: 100%"
height="calc(100vh - 21.5em)"
>
- <el-table-column align="center" type="selection" width="55" />
- <el-table-column align="center" label="搴忓彿" type="index" width="60" />
<el-table-column
- label="閿�鍞鍗�"
- prop="salesContractNo"
- show-overflow-tooltip
+ align="center"
+ type="selection"
+ :selectable="isRowSelectable"
+ width="55"
/>
+ <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+ <el-table-column label="鏉ユ簮" prop="source" align="center" width="100">
+ <template #default="scope">
+ <el-tag
+ :type="isOilOutRow(scope.row) ? 'success' : 'info'"
+ size="small"
+ >
+ {{ isOilOutRow(scope.row) ? "娌瑰搧鍑哄簱" : "鍙戣揣鍗�" }}
+ </el-tag>
+ </template>
+ </el-table-column>
<el-table-column
label="鍙戣揣璁㈠崟鍙�"
prop="shippingNo"
@@ -72,6 +82,16 @@
show-overflow-tooltip
/>
<el-table-column
+ label="瀹㈡埛瀵规帴浜�"
+ prop="contactPerson"
+ show-overflow-tooltip
+ />
+ <el-table-column
+ label="瀵规帴浜虹數璇�"
+ prop="contactPhone"
+ show-overflow-tooltip
+ />
+ <el-table-column
label="浜у搧鍚嶇О"
prop="productName"
show-overflow-tooltip
@@ -79,6 +99,27 @@
<el-table-column
label="瑙勬牸鍨嬪彿"
prop="specificationModel"
+ show-overflow-tooltip
+ />
+ <el-table-column label="鎵瑰彿" show-overflow-tooltip>
+ <!-- 娌瑰搧鍑哄簱琛岀殑鎵瑰彿鏄� outBatchNo锛坆atch_no锛夛紝鍙戣揣鍗曡娌℃湁璇ュ瓧娈� -->
+ <template #default="scope">
+ {{
+ isOilOutRow(scope.row)
+ ? scope.row.outBatchNo || "--"
+ : scope.row.batchNo || "--"
+ }}
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鍑哄簱绫诲埆"
+ prop="outCategory"
+ show-overflow-tooltip
+ />
+ <el-table-column label="鍌ㄧ綈鍙�" prop="tankNo" show-overflow-tooltip />
+ <el-table-column
+ label="娌瑰簱"
+ prop="oilDepotName"
show-overflow-tooltip
/>
<el-table-column
@@ -97,13 +138,8 @@
show-overflow-tooltip
/>
<el-table-column
- label="蹇�掑叕鍙�"
- prop="expressCompany"
- show-overflow-tooltip
- />
- <el-table-column
- label="蹇�掑崟鍙�"
- prop="expressNumber"
+ label="鍙告満濮撳悕"
+ prop="driverName"
show-overflow-tooltip
/>
<el-table-column
@@ -173,21 +209,6 @@
>
<el-row :gutter="30">
<el-col :span="24">
- <el-form-item label="鍙戣揣绫诲瀷锛�" prop="type">
- <el-select
- v-model="form.type"
- placeholder="璇烽�夋嫨鍙戣揣绫诲瀷"
- style="width: 100%"
- @change="handleShippingTypeChange"
- >
- <el-option label="璐ц溅" value="璐ц溅" />
- <el-option label="蹇��" value="蹇��" />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="24">
<el-form-item label="鍙戣揣鏃ユ湡锛�" prop="shippingDate">
<el-date-picker
style="width: 100%"
@@ -202,31 +223,11 @@
</el-col>
</el-row>
<el-row :gutter="30">
- <el-col :span="24" v-if="form.type === '璐ц溅'">
+ <el-col :span="24">
<el-form-item label="鍙戣揣杞︾墝鍙凤細" prop="shippingCarNumber">
<el-input
v-model="form.shippingCarNumber"
placeholder="璇疯緭鍏ュ彂璐ц溅鐗屽彿"
- clearable
- />
- </el-form-item>
- </el-col>
- <el-col :span="24" v-else>
- <el-form-item label="蹇�掑叕鍙革細" prop="expressCompany">
- <el-input
- v-model="form.expressCompany"
- placeholder="璇疯緭鍏ュ揩閫掑叕鍙�"
- clearable
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30" v-if="form.type === '蹇��'">
- <el-col :span="24">
- <el-form-item label="蹇�掑崟鍙凤細" prop="expressNumber">
- <el-input
- v-model="form.expressNumber"
- placeholder="璇疯緭鍏ュ揩閫掑崟鍙�"
clearable
/>
</el-form-item>
@@ -257,14 +258,17 @@
>
<div v-if="detailRow" class="detail-wrapper">
<el-descriptions :column="2" border>
- <el-descriptions-item label="閿�鍞鍗�">{{
- detailRow.salesContractNo || "--"
- }}</el-descriptions-item>
<el-descriptions-item label="鍙戣揣璁㈠崟鍙�">{{
detailRow.shippingNo || "--"
}}</el-descriptions-item>
<el-descriptions-item label="瀹㈡埛鍚嶇О">{{
detailRow.customerName || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="瀹㈡埛瀵规帴浜�">{{
+ detailRow.contactPerson || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="瀵规帴浜虹數璇�">{{
+ detailRow.contactPhone || "--"
}}</el-descriptions-item>
<el-descriptions-item label="浜у搧鍚嶇О">{{
detailRow.productName || "--"
@@ -272,8 +276,14 @@
<el-descriptions-item label="瑙勬牸鍨嬪彿">{{
detailRow.specificationModel || "--"
}}</el-descriptions-item>
- <el-descriptions-item label="鍙戣揣绫诲瀷">{{
- detailRow.type || "--"
+ <el-descriptions-item label="鍑哄簱绫诲埆">{{
+ detailRow.outCategory || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍌ㄧ綈鍙�">{{
+ detailRow.tankNo || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="娌瑰簱">{{
+ detailRow.oilDepotName || "--"
}}</el-descriptions-item>
<el-descriptions-item label="鍙戣揣鏃ユ湡">{{
detailRow.shippingDate || "--"
@@ -284,11 +294,8 @@
<el-descriptions-item label="鍙戣揣杞︾墝鍙�">{{
detailRow.shippingCarNumber || "--"
}}</el-descriptions-item>
- <el-descriptions-item label="蹇�掑叕鍙�">{{
- detailRow.expressCompany || "--"
- }}</el-descriptions-item>
- <el-descriptions-item label="蹇�掑崟鍙�" :span="2">{{
- detailRow.expressNumber || "--"
+ <el-descriptions-item label="鍙告満濮撳悕">{{
+ detailRow.driverName || "--"
}}</el-descriptions-item>
<el-descriptions-item label="鍑哄簱鍗曞彿" :span="2">{{
detailRow.outboundBatches || "--"
@@ -321,7 +328,7 @@
/>
<el-table-column
label="鍙戣揣鏁伴噺"
- prop="deliveryQuantity"
+ prop="totalQuantity"
min-width="120"
align="center"
/>
@@ -356,7 +363,6 @@
const tableData = ref([]);
const selectedRows = ref([]);
const tableLoading = ref(false);
-const salesOrderOptions = ref([]);
const page = reactive({
current: 1,
size: 100,
@@ -373,46 +379,27 @@
const dialogFormVisible = ref(false);
const data = reactive({
searchForm: {
- salesContractNo: "", // 閿�鍞鍗曞彿
+ shippingNo: "", // 鍙戣揣鍗曞彿锛堜袱绫绘潵婧愰兘鍖归厤锛�
+ salesContractNo: "", // 閿�鍞悎鍚屽彿锛堝彧鍖归厤鍙戣揣鍗曡锛�
shippingCarNumber: "", // 杞︾墝鍙�
- expressNumber: "", // 蹇�掑崟鍙�
},
form: {
id: null,
- salesContractNo: "",
customerName: "",
specificationModel: "",
productName: "",
- type: "璐ц溅", // 璐ц溅, 蹇��
shippingDate: "",
shippingCarNumber: "",
- expressCompany: "",
- expressNumber: "", // 蹇�掑崟鍙�
},
rules: {
- salesContractNo: [
- { required: true, message: "璇烽�夋嫨閿�鍞鍗�", trigger: "change" },
- ],
customerName: [
{ required: true, message: "璇疯緭鍏ュ鎴峰悕绉�", trigger: "blur" },
],
- type: [{ required: true, message: "璇烽�夋嫨鍙戣揣绫诲瀷", trigger: "change" }],
shippingDate: [
{ required: true, message: "璇烽�夋嫨鍙戣揣鏃堕棿", trigger: "change" },
],
shippingCarNumber: [
- {
- validator: (_, value, callback) =>
- validateShippingCarNumber(value, callback),
- trigger: "blur",
- },
- ],
- expressCompany: [
- {
- validator: (_, value, callback) =>
- validateExpressCompany(value, callback),
- trigger: "blur",
- },
+ { required: true, message: "璇疯緭鍏ュ彂璐ц溅鐗屽彿", trigger: "blur" },
],
},
});
@@ -444,19 +431,14 @@
});
};
-// 閿�鍞鍗曞彉鍖栨椂鑷姩濉厖瀹㈡埛鍚嶇О
-const handleSalesOrderChange = (value) => {
- const selectedOrder = salesOrderOptions.value.find(
- (item) => item.salesContractNo === value
- );
- if (selectedOrder) {
- form.value.customerName = selectedOrder.customerName;
- }
-};
+// 娌瑰搧鍑哄簱琛屾潵鑷� stock_out_record锛宨d 涓� shipping_info 浼氭挒鍙凤紝
+// 鍙戣揣/鍒犻櫎/璇︽儏绛夋帴鍙h儗鍚庨兘鏄� shipping_info锛屼笉鑳界敤浜庤繖绫昏
+const isOilOutRow = (row) => row?.source === "oilOut";
+const isRowSelectable = (row) => !isOilOutRow(row);
// 琛ㄦ牸閫夋嫨鏁版嵁
const handleSelectionChange = (selection) => {
- selectedRows.value = selection;
+ selectedRows.value = selection.filter((item) => !isOilOutRow(item));
};
// 鎵撳紑寮规
@@ -472,13 +454,9 @@
if (type === "edit" && row) {
form.value = {
id: row.id ?? null,
- salesContractNo: row.salesContractNo ?? "",
customerName: row.customerName ?? "",
- type: row.type || "璐ц溅",
shippingDate: row.shippingDate || getCurrentDate(),
shippingCarNumber: row.shippingCarNumber ?? "",
- expressCompany: row.expressCompany ?? "",
- expressNumber: row.expressNumber ?? "",
};
deliveryFileList.value = row.storageBlobVOs || [];
}
@@ -491,7 +469,8 @@
detailRow.value = row || null;
detailProductList.value = [];
detailDialogVisible.value = true;
- if (!row?.id) return;
+ // 娌瑰搧鍑哄簱琛屼笉璧板彂璐у崟璇︽儏鎺ュ彛锛坕d 浼氭挒鍙凤級锛岀洿鎺ョ敤鍒楄〃琛屾暟鎹睍绀�
+ if (!row?.id || isOilOutRow(row)) return;
try {
const res = await getDeliveryDetail(row.id);
const detailData = res?.data;
@@ -554,7 +533,9 @@
productName: item.productName ?? row.productName ?? "--",
specificationModel:
item.specificationModel ?? item.model ?? row.specificationModel ?? "--",
- deliveryQuantity:
+ totalQuantity:
+ item.totalQuantity ??
+ row.totalQuantity ??
item.deliveryQuantity ??
item.quantity ??
item.shippingQuantity ??
@@ -582,14 +563,8 @@
if (valid) {
const payload = {
id: form.value.id,
- type: form.value.type,
shippingDate: form.value.shippingDate,
- shippingCarNumber:
- form.value.type === "璐ц溅" ? form.value.shippingCarNumber : "",
- expressCompany:
- form.value.type === "蹇��" ? form.value.expressCompany : "",
- expressNumber:
- form.value.type === "蹇��" ? form.value.expressNumber : "",
+ shippingCarNumber: form.value.shippingCarNumber,
storageBlobDTOs: deliveryFileList.value || [],
};
deductStock(payload).then((res) => {
@@ -680,20 +655,6 @@
});
};
-// 鍙戣揣绫诲瀷鏍¢獙锛氳揣杞︽椂瑕佹眰杞︾墝锛屽揩閫掓椂瑕佹眰蹇�掑叕鍙�
-const validateShippingCarNumber = (value, callback) => {
- if (form.value.type === "璐ц溅") {
- if (!value) return callback(new Error("璇疯緭鍏ュ彂璐ц溅鐗屽彿"));
- }
- callback();
-};
-const validateExpressCompany = (value, callback) => {
- if (form.value.type === "蹇��") {
- if (!value) return callback(new Error("璇疯緭鍏ュ揩閫掑叕鍙�"));
- }
- callback();
-};
-
// 鍙戣揣鍥剧墖涓婁紶鍓嶆牎妫�
function handleDeliveryBeforeUpload(file) {
// 鏍℃鏂囦欢绫诲瀷
@@ -764,16 +725,6 @@
}
}
}
-
-// 鍙戣揣绫诲瀷鍒囨崲鏃舵竻绌哄搴斿瓧娈�
-const handleShippingTypeChange = (val) => {
- if (val === "璐ц溅") {
- form.value.expressCompany = "";
- form.value.expressNumber = "";
- } else {
- form.value.shippingCarNumber = "";
- }
-};
// 鑾峰彇瀹℃牳鐘舵�佹枃鏈�
const getApprovalStatusText = (status) => {
--
Gitblit v1.9.3