From 41c7dd199f1919a01dfc5e04f62359ca8bc3cb2c Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期六, 12 九月 2026 12:43:32 +0800
Subject: [PATCH] feat: 库存管理三表单与详情页签分组、采购台账分栏、油品联动与电话校验、冻结解冻修复
---
src/views/procurementManagement/procurementLedger/index.vue | 297 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 284 insertions(+), 13 deletions(-)
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 7e1576b..087f716 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -161,6 +161,42 @@
prop="projectName"
width="320"
show-overflow-tooltip />
+ <el-table-column label="閲囪喘绫诲埆"
+ prop="purchaseCategory"
+ width="100"
+ show-overflow-tooltip />
+ <el-table-column label="鎻愯揣鏂瑰紡"
+ prop="pickupMethod"
+ width="100"
+ show-overflow-tooltip />
+ <el-table-column label="閲囪喘娌瑰搧"
+ prop="purchaseOilProduct"
+ width="100"
+ show-overflow-tooltip />
+ <el-table-column label="鐗╂祦鏂瑰紡"
+ prop="logisticsMethod"
+ width="100"
+ show-overflow-tooltip />
+ <el-table-column label="閲囪喘娌瑰簱"
+ prop="oilDepotName"
+ width="150"
+ show-overflow-tooltip />
+ <el-table-column label="瀹㈡埛鍚嶇О"
+ prop="customerName"
+ width="150"
+ show-overflow-tooltip />
+ <el-table-column label="鏈�浣冲埌绔欐棩鏈�"
+ prop="bestArrivalDate"
+ width="120"
+ show-overflow-tooltip />
+ <el-table-column label="閲囪喘鏁伴噺锛堝惃锛�"
+ prop="purchaseQuantity"
+ width="120"
+ align="center" />
+ <el-table-column label="閲囪喘鐢宠璁㈠崟鐘舵��"
+ prop="purchaseOrderStatus"
+ width="140"
+ show-overflow-tooltip />
<el-table-column label="瀹℃壒鐘舵��"
prop="approvalStatus"
width="100"
@@ -300,17 +336,10 @@
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="浠樻鏂瑰紡">
- <el-input v-model="form.paymentMethod"
- placeholder="璇疯緭鍏�"
- clearable />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="绛捐鏃ユ湡锛�"
- prop="executionDate">
+ <el-form-item label="鏈�浣冲埌绔欐棩鏈燂細"
+ prop="bestArrivalDate">
<el-date-picker style="width: 100%"
- v-model="form.executionDate"
+ v-model="form.bestArrivalDate"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
type="date"
@@ -318,9 +347,16 @@
clearable />
</el-form-item>
</el-col>
+ <el-col :span="12">
+ <el-form-item label="浠樻鏂瑰紡">
+ <el-input v-model="form.paymentMethod"
+ placeholder="璇疯緭鍏�"
+ clearable />
+ </el-form-item>
+ </el-col>
</el-row>
<el-row :gutter="30">
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="褰曞叆浜猴細"
prop="recorderId">
<el-select v-model="form.recorderId"
@@ -334,7 +370,19 @@
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="8">
+ <el-form-item label="绛捐鏃ユ湡锛�"
+ prop="executionDate">
+ <el-date-picker style="width: 100%"
+ v-model="form.executionDate"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ type="date"
+ placeholder="璇烽�夋嫨"
+ clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
<el-form-item label="褰曞叆鏃ユ湡锛�"
prop="entryDate">
<el-date-picker style="width: 100%"
@@ -344,6 +392,144 @@
type="date"
placeholder="璇烽�夋嫨"
clearable />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <div class="form-section-title">閲囪喘鍏ュ簱鎻愪氦</div>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="鐢宠鎻愪氦鏃堕棿锛�"
+ prop="applicationSubmitTime">
+ <el-date-picker style="width: 100%"
+ v-model="form.applicationSubmitTime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ type="datetime"
+ placeholder="璇烽�夋嫨"
+ clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閲囪喘绫诲埆锛�"
+ prop="purchaseCategory">
+ <el-radio-group v-model="form.purchaseCategory"
+ @change="purchaseCategoryChange">
+ <el-radio value="瀹㈠瓨">瀹㈠瓨</el-radio>
+ <el-radio value="浠e偍">浠e偍</el-radio>
+ <el-radio value="閲囪喘鍏ュ簱">閲囪喘鍏ュ簱</el-radio>
+ <el-radio value="閲囪喘鐩撮攢">閲囪喘鐩撮攢</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="閲囪喘娌瑰搧锛�"
+ prop="purchaseOilProduct">
+ <el-select v-model="form.purchaseOilProduct"
+ placeholder="璇烽�夋嫨"
+ clearable
+ style="width: 100%">
+ <el-option label="姹�#92"
+ value="姹�#92" />
+ <el-option label="姹�#95"
+ value="姹�#95" />
+ <el-option label="鏌�#0"
+ value="鏌�#0" />
+ <el-option label="鏌�#-35"
+ value="鏌�#-35" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐗╂祦鏂瑰紡锛�"
+ prop="logisticsMethod">
+ <el-select v-model="form.logisticsMethod"
+ placeholder="璇烽�夋嫨"
+ clearable
+ style="width: 100%">
+ <el-option label="鍘傚閰嶉��"
+ value="鍘傚閰嶉��" />
+ <el-option label="濮斿鐗╂祦"
+ value="濮斿鐗╂祦" />
+ <el-option label="瀹㈡埛鑷彁"
+ value="瀹㈡埛鑷彁" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="鎻愯揣鏂瑰紡锛�"
+ prop="pickupMethod">
+ <el-radio-group v-model="form.pickupMethod">
+ <el-radio value="鏆備笉鎻愯揣">鏆備笉鎻愯揣</el-radio>
+ <el-radio value="鎻愯揣">鎻愯揣</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閲囪喘娌瑰簱锛�"
+ prop="oilDepotId">
+ <el-select v-model="form.oilDepotId"
+ placeholder="璇烽�夋嫨"
+ clearable
+ popper-class="oil-depot-select-popper"
+ style="width: 100%">
+ <el-option v-for="item in oilDepotList"
+ :key="item.id"
+ :label="item.depotName"
+ :value="item.id">
+ <div class="oil-depot-option">
+ <div class="oil-depot-option-title">{{ item.depotName }}</div>
+ <div class="oil-depot-option-line">璐熻矗浜猴細{{ item.chargePerson }}</div>
+ <div class="oil-depot-option-line">鑱旂郴鐢佃瘽锛歿{ item.phone }}</div>
+ <div class="oil-depot-option-line">鎵�灞炲叕鍙革細{{ item.company }}</div>
+ <div class="oil-depot-option-line">鍚敤鏃ユ湡锛歿{ item.enableDate }}</div>
+ </div>
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="瀹㈡埛鍚嶇О锛�"
+ prop="customerName">
+ <el-input v-model="form.customerName"
+ placeholder="浠呴噰璐被鍒负浠e偍/閲囪喘鐩撮攢鏃跺彲濉啓"
+ clearable
+ :disabled="!['浠e偍', '閲囪喘鐩撮攢'].includes(form.purchaseCategory)" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閲囪喘鏁伴噺锛堝惃锛夛細"
+ prop="purchaseQuantity">
+ <el-input-number v-model="form.purchaseQuantity"
+ :precision="0"
+ :step="1"
+ :min="0"
+ placeholder="璇疯緭鍏�"
+ style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <div class="form-section-title">绯荤粺淇℃伅</div>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="閲囪喘鐢宠璁㈠崟鐘舵�侊細"
+ prop="purchaseOrderStatus">
+ <el-select v-model="form.purchaseOrderStatus"
+ placeholder="璇烽�夋嫨"
+ clearable
+ style="width: 100%">
+ <el-option label="宸茬敵璇凤紝鏈杞�"
+ value="宸茬敵璇凤紝鏈杞�" />
+ <el-option label="浠ュ嚭鍘傦紝鏈叆搴�"
+ value="浠ュ嚭鍘傦紝鏈叆搴�" />
+ <el-option label="宸插叆搴�"
+ value="宸插叆搴�" />
+ </el-select>
</el-form-item>
</el-col>
</el-row>
@@ -733,6 +919,7 @@
delPurchaseTemplate,
batchGeneratePurchaseInboundSteps,
} from "@/api/procurementManagement/procurementLedger.js";
+ import { allOilDepot } from "@/api/basicData/oilDepot.js";
import useFormData from "@/hooks/useFormData.js";
const FileList = defineAsyncComponent(() =>
import("@/components/Dialog/FileList.vue")
@@ -749,6 +936,7 @@
const productOptions = ref([]);
const salesContractList = ref([]);
const supplierList = ref([]);
+ const oilDepotList = ref([]);
const tableLoading = ref(false);
const recordId = ref();
const fileListDialogVisible = ref(false);
@@ -931,6 +1119,16 @@
paymentMethod: "",
executionDate: "",
isChecked: false,
+ purchaseCategory: "",
+ purchaseOilProduct: "",
+ logisticsMethod: "",
+ pickupMethod: "",
+ oilDepotId: "",
+ customerName: "",
+ bestArrivalDate: "",
+ purchaseQuantity: "",
+ purchaseOrderStatus: "",
+ applicationSubmitTime: "",
},
rules: {
purchaseContractNumber: [
@@ -942,6 +1140,18 @@
supplierId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
entryDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
executionDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+ purchaseCategory: [
+ { required: true, message: "璇烽�夋嫨閲囪喘绫诲埆", trigger: "change" },
+ ],
+ purchaseOilProduct: [
+ { required: true, message: "璇烽�夋嫨閲囪喘娌瑰搧", trigger: "change" },
+ ],
+ oilDepotId: [
+ { required: true, message: "璇烽�夋嫨閲囪喘娌瑰簱", trigger: "change" },
+ ],
+ purchaseQuantity: [
+ { required: true, message: "璇疯緭鍏ラ噰璐暟閲�", trigger: "change" },
+ ],
},
});
const { form, rules } = toRefs(data);
@@ -1311,9 +1521,10 @@
isTemplateNameDuplicate.value = false;
try {
// 骞惰鍔犺浇鍩虹鏁版嵁
- const [salesRes, supplierRes] = await Promise.all([
+ const [salesRes, supplierRes, oilDepotRes] = await Promise.all([
getSalesNo(),
getOptions(),
+ allOilDepot(),
]);
salesContractList.value = salesRes || [];
@@ -1321,6 +1532,7 @@
supplierList.value = (supplierRes.data || []).filter(
item => item.isWhite === 0
);
+ oilDepotList.value = oilDepotRes?.data || [];
form.value.entryDate = getCurrentDate();
@@ -1896,6 +2108,13 @@
}
}
};
+ // 閲囪喘绫诲埆鏀瑰彉锛氫粎浠e偍/閲囪喘鐩撮攢鏃跺鎴峰悕绉板彲鐢紝鍒囨崲鍚庢竻绌�
+ const purchaseCategoryChange = val => {
+ if (!["浠e偍", "閲囪喘鐩撮攢"].includes(val)) {
+ form.value.customerName = "";
+ }
+ };
+
// 閿�鍞悎鍚岄�夋嫨鏀瑰彉鏂规硶
const salesLedgerChange = async row => {
console.log("row", row);
@@ -1984,6 +2203,18 @@
</script>
<style scoped lang="scss">
+ // 琛ㄥ崟鍒嗘爮鏍囬锛氳摑鑹茬珫鏉� + 娴呰摑搴曡壊锛岀獊鍑哄垎鍖�
+ .form-section-title {
+ margin: 18px 0 14px;
+ padding: 8px 14px;
+ font-size: 15px;
+ font-weight: 600;
+ color: #1d6fd8;
+ background: linear-gradient(90deg, rgba(64, 158, 255, 0.14), rgba(64, 158, 255, 0.02));
+ border-left: 4px solid #409eff;
+ border-radius: 3px;
+ }
+
.invalid-row {
opacity: 0.6;
background-color: #f5f7fa;
@@ -2001,6 +2232,24 @@
.select-button-group {
display: flex;
align-items: center;
+ }
+
+ // 閲囪喘娌瑰簱涓嬫媺閫夐」锛氬皬鍗$墖鏍峰紡
+ .oil-depot-option {
+ padding: 8px 10px;
+
+ .oil-depot-option-title {
+ font-size: 14px;
+ font-weight: 600;
+ color: #303133;
+ margin-bottom: 4px;
+ }
+
+ .oil-depot-option-line {
+ font-size: 12px;
+ color: #909399;
+ line-height: 1.8;
+ }
}
// 瀹℃壒浜鸿妭鐐瑰鍣ㄦ牱寮�
@@ -2064,3 +2313,25 @@
}
}
</style>
+
+<style lang="scss">
+ // 涓嬫媺闈㈡澘娓叉煋鍦� body 涓嬶紝闇�鍏ㄥ眬鏍峰紡
+ .oil-depot-select-popper {
+ .el-select-dropdown__item {
+ height: auto;
+ line-height: normal;
+ padding: 4px 0;
+ }
+
+ .oil-depot-option {
+ border: 1px solid #e4e7ed;
+ border-radius: 6px;
+ background-color: #fafbfc;
+
+ &:hover {
+ border-color: #409eff;
+ background-color: #f0f7ff;
+ }
+ }
+ }
+</style>
--
Gitblit v1.9.3