From 6ff8faad4a183eaa35fac526e4e29a1c6176ff15 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 08 十月 2026 17:43:18 +0800
Subject: [PATCH] 采购管理系统模块优化

---
 src/views/basicData/supplierManage/index.vue                      |   80 +++++++++++++++++++++++++-
 src/views/procurementManagement/supplierArchive/index.vue         |    9 +++
 src/api/basicData/supplierManageFile.js                           |   15 +++++
 src/views/procurementManagement/invoiceEntry/components/Modal.vue |   17 +++++
 4 files changed, 116 insertions(+), 5 deletions(-)

diff --git a/src/api/basicData/supplierManageFile.js b/src/api/basicData/supplierManageFile.js
index 3b1ab97..b26f806 100644
--- a/src/api/basicData/supplierManageFile.js
+++ b/src/api/basicData/supplierManageFile.js
@@ -50,3 +50,18 @@
     })
 }
 
+// 鏌ヨ渚涘簲鍟嗗畬鏁存。妗堬紙鍩虹淇℃伅銆佽祫璐ㄣ�佷骇鍝併�佸悎浣滆褰曪級
+export function getSupplierArchive(id) {
+    return request({ url: '/system/supplier/' + id + '/archive', method: 'get' })
+}
+
+// 淇濆瓨渚涘簲鍟嗗畬鏁存。妗�
+export function saveSupplierArchive(data) {
+    return request({ url: '/system/supplier/archive/save', method: 'post', data })
+}
+
+// 鏂板鍚堜綔璇勪环璁板綍
+export function addSupplierCooperation(id, data) {
+    return request({ url: '/system/supplier/' + id + '/cooperation', method: 'post', data })
+}
+
diff --git a/src/views/basicData/supplierManage/index.vue b/src/views/basicData/supplierManage/index.vue
index 68c51d3..e7233a0 100644
--- a/src/views/basicData/supplierManage/index.vue
+++ b/src/views/basicData/supplierManage/index.vue
@@ -11,6 +11,8 @@
           clearable
           :prefix-icon="Search"
         />
+        <el-input v-model="searchForm.supplierCode" style="width: 180px; margin-left: 10px" placeholder="渚涘簲鍟嗙紪鐮�" clearable />
+        <el-input v-model="searchForm.productKeyword" style="width: 180px; margin-left: 10px" placeholder="渚涘簲浜у搧" clearable />
         <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
           >鎼滅储</el-button
         >
@@ -53,6 +55,20 @@
       >
         <el-row :gutter="30">
           <el-col :span="12">
+            <el-form-item label="渚涘簲鍟嗙紪鐮侊細" prop="supplierCode">
+              <el-input v-model="form.supplierCode" placeholder="鐣欑┖鑷姩鐢熸垚" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="渚涘簲鍟嗙畝绉帮細"><el-input v-model="form.supplierShortName" clearable /></el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12"><el-form-item label="渚涘簲鍟嗗垎绫伙細"><el-input v-model="form.supplierCategory" /></el-form-item></el-col>
+          <el-col :span="12"><el-form-item label="渚涘簲鍟嗙瓑绾э細"><el-select v-model="form.supplierLevel" clearable style="width:100%"><el-option v-for="v in ['A','B','C','D']" :key="v" :label="v" :value="v" /></el-select></el-form-item></el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
             <el-form-item label="渚涘簲鍟嗗悕绉帮細" prop="supplierName">
               <el-input
                 v-model="form.supplierName"
@@ -74,6 +90,17 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12"><el-form-item label="鍚堜綔鐘舵�侊細"><el-select v-model="form.cooperationStatus" style="width:100%"><el-option label="鍚堜綔涓�" :value="1"/><el-option label="鏆傚仠鍚堜綔" :value="2"/><el-option label="鍋滅敤" :value="0"/></el-select></el-form-item></el-col>
+          <el-col :span="12"><el-form-item label="棣栨鍚堜綔鏃ユ湡锛�"><el-date-picker v-model="form.cooperationStartDate" value-format="YYYY-MM-DD" style="width:100%" /></el-form-item></el-col>
+        </el-row>
+        <el-form-item label="渚涘簲浜у搧锛�"><el-input v-model="form.suppliedProductsSummary" type="textarea" :rows="2" placeholder="澶氫釜浜у搧鍙敤椤垮彿鍒嗛殧" /></el-form-item>
+        <el-row :gutter="30">
+          <el-col :span="12"><el-form-item label="璧勮川鐘舵�侊細"><el-select v-model="form.qualificationStatus" style="width:100%"><el-option label="寰呭畬鍠�" :value="0"/><el-option label="鏈夋晥" :value="1"/><el-option label="鍗冲皢鍒版湡" :value="2"/><el-option label="宸茶繃鏈�" :value="3"/></el-select></el-form-item></el-col>
+          <el-col :span="12"><el-form-item label="璧勮川鍒版湡鏃ワ細"><el-date-picker v-model="form.qualificationExpiryDate" value-format="YYYY-MM-DD" style="width:100%" /></el-form-item></el-col>
+        </el-row>
+        <el-form-item label="鍚堜綔鍘嗗彶锛�"><el-input v-model="form.cooperationHistorySummary" type="textarea" :rows="2" placeholder="濉啓鍘嗗彶鍚堜綔涓庤瘎浠锋憳瑕�" /></el-form-item>
+        <el-form-item label="澶囨敞锛�"><el-input v-model="form.remark" type="textarea" :rows="2" /></el-form-item>
         <el-row :gutter="30">
           <el-col :span="12">
             <el-form-item label="鍏徃鍦板潃锛�" prop="companyAddress">
@@ -167,6 +194,25 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-divider content-position="left">璧勮川璇佹槑</el-divider>
+        <el-button type="primary" plain @click="form.qualifications.push({ status: 1, longTermValid: 0 })">鏂板璧勮川</el-button>
+        <el-table :data="form.qualifications" border style="margin:10px 0 20px">
+          <el-table-column label="璧勮川鍚嶇О"><template #default="{row}"><el-input v-model="row.qualificationName" /></template></el-table-column>
+          <el-table-column label="绫诲瀷"><template #default="{row}"><el-input v-model="row.qualificationType" /></template></el-table-column>
+          <el-table-column label="璇佷功缂栧彿"><template #default="{row}"><el-input v-model="row.certificateNo" /></template></el-table-column>
+          <el-table-column label="鍒版湡鏃ユ湡" width="180"><template #default="{row}"><el-date-picker v-model="row.expiryDate" value-format="YYYY-MM-DD" style="width:100%" /></template></el-table-column>
+          <el-table-column label="鎿嶄綔" width="80"><template #default="{$index}"><el-button type="danger" link @click="form.qualifications.splice($index,1)">鍒犻櫎</el-button></template></el-table-column>
+        </el-table>
+        <el-divider content-position="left">渚涘簲浜у搧</el-divider>
+        <el-button type="primary" plain @click="form.products.push({ status: 1, currency: 'CNY' })">鏂板浜у搧</el-button>
+        <el-table :data="form.products" border style="margin:10px 0 20px">
+          <el-table-column label="浜у搧鍚嶇О"><template #default="{row}"><el-input v-model="row.productName" /></template></el-table-column>
+          <el-table-column label="鍒嗙被"><template #default="{row}"><el-input v-model="row.productCategory" /></template></el-table-column>
+          <el-table-column label="瑙勬牸鍨嬪彿"><template #default="{row}"><el-input v-model="row.specificationModel" /></template></el-table-column>
+          <el-table-column label="渚涜揣鍛ㄦ湡(澶�)" width="140"><template #default="{row}"><el-input-number v-model="row.leadTimeDays" :min="0" /></template></el-table-column>
+          <el-table-column label="鍙傝�冨崟浠�" width="140"><template #default="{row}"><el-input-number v-model="row.referencePrice" :min="0" :precision="2" /></template></el-table-column>
+          <el-table-column label="鎿嶄綔" width="80"><template #default="{$index}"><el-button type="danger" link @click="form.products.splice($index,1)">鍒犻櫎</el-button></template></el-table-column>
+        </el-table>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
@@ -231,6 +277,8 @@
   getSupplier,
   listSupplier,
   updateSupplier,
+  getSupplierArchive,
+  saveSupplierArchive,
 } from "@/api/basicData/supplierManageFile.js";
 import useUserStore from "@/store/modules/user";
 import { getToken } from "@/utils/auth.js";
@@ -238,6 +286,7 @@
 const userStore = useUserStore();
 
 const tableColumn = ref([
+  { label: "渚涘簲鍟嗙紪鐮�", prop: "supplierCode", width: 140 },
   {
     label: "渚涘簲鍟嗗悕绉�",
     prop: "supplierName",
@@ -277,6 +326,10 @@
     prop: "contactUserPhone",
     width: 150,
   },
+  { label: "渚涘簲浜у搧", prop: "suppliedProductsSummary", width: 220 },
+  { label: "绛夌骇", prop: "supplierLevel", width: 80 },
+  { label: "璧勮川鐘舵��", prop: "qualificationStatus", width: 100, formatData: v => ({0:'寰呭畬鍠�',1:'鏈夋晥',2:'鍗冲皢鍒版湡',3:'宸茶繃鏈�'}[v] || '寰呭畬鍠�') },
+  { label: "鍚堜綔鐘舵��", prop: "cooperationStatus", width: 100, formatData: v => ({0:'鍋滅敤',1:'鍚堜綔涓�',2:'鏆傚仠'}[v] || '鍚堜綔涓�') },
   {
     label: "缁存姢浜�",
     prop: "maintainUserName",
@@ -322,8 +375,23 @@
 const data = reactive({
   searchForm: {
     supplierName: "",
+    supplierCode: "",
+    productKeyword: "",
   },
   form: {
+    supplierCode: "",
+    supplierShortName: "",
+    supplierCategory: "",
+    supplierLevel: "",
+    cooperationStatus: 1,
+    cooperationStartDate: "",
+    qualificationStatus: 0,
+    qualificationExpiryDate: "",
+    suppliedProductsSummary: "",
+    cooperationHistorySummary: "",
+    remark: "",
+    qualifications: [],
+    products: [],
     supplierName: "",
     taxpayerIdentificationNum: "",
     companyAddress: "",
@@ -418,12 +486,14 @@
   form.value = {};
   form.value.maintainUserId = userStore.id;
   form.value.maintainTime = getCurrentDate();
+  form.value.qualifications = [];
+  form.value.products = [];
   userListNoPage().then((res) => {
     userList.value = res.data;
   });
   if (type === "edit") {
-    getSupplier(row.id).then((res) => {
-      form.value = { ...res.data };
+    getSupplierArchive(row.id).then((res) => {
+      form.value = { ...res.data.supplier, qualifications: res.data.qualifications || [], products: res.data.products || [] };
     });
   }
   dialogFormVisible.value = true;
@@ -442,7 +512,8 @@
 };
 // 鎻愪氦鏂板
 const submitAdd = () => {
-  addSupplier(form.value).then((res) => {
+  const { qualifications, products, ...supplier } = form.value;
+  saveSupplierArchive({ supplier, qualifications, products }).then((res) => {
     proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
     closeDia();
     getList();
@@ -450,7 +521,8 @@
 };
 // 鎻愪氦淇敼
 const submitEdit = () => {
-  updateSupplier(form.value).then((res) => {
+  const { qualifications, products, ...supplier } = form.value;
+  saveSupplierArchive({ supplier, qualifications, products }).then((res) => {
     proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
     closeDia();
     getList();
diff --git a/src/views/procurementManagement/invoiceEntry/components/Modal.vue b/src/views/procurementManagement/invoiceEntry/components/Modal.vue
index f29b78a..5c1da4e 100644
--- a/src/views/procurementManagement/invoiceEntry/components/Modal.vue
+++ b/src/views/procurementManagement/invoiceEntry/components/Modal.vue
@@ -62,6 +62,10 @@
             />
           </el-form-item>
         </el-col>
+        <el-col :span="12"><el-form-item label="鍙戠エ浠g爜锛�"><el-input v-model="form.invoiceCode" clearable /></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="鍙戠エ绫诲瀷锛�"><el-select v-model="form.invoiceType" style="width:100%"><el-option v-for="v in ['澧炲�肩◣涓撶敤鍙戠エ','澧炲�肩◣鏅�氬彂绁�','鐢靛瓙涓撶エ','鐢靛瓙鏅エ','鍏朵粬']" :key="v" :label="v" :value="v" /></el-select></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="绋庣巼锛�"><el-input-number v-model="form.taxRate" :min="0" :max="100" :precision="2" style="width:100%" /></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="绋庨锛�"><el-input-number v-model="form.taxAmount" :min="0" :precision="2" style="width:100%" placeholder="鐣欑┖鑷姩璁$畻" /></el-form-item></el-col>
         <el-col :span="12">
           <el-form-item label="褰曞叆浜猴細" prop="issUer">
             <el-input
@@ -113,6 +117,7 @@
           </el-form-item>
         </el-col>
       </el-row>
+      <el-form-item label="澶囨敞锛�"><el-input v-model="form.remark" type="textarea" :rows="2" /></el-form-item>
       <el-form-item label="浜у搧淇℃伅锛�"> </el-form-item>
       <PIMTable
         rowKey="id"
@@ -187,6 +192,11 @@
   supplierName: undefined, // 渚涘簲鍟嗗悕绉�
   projectName: undefined, // 椤圭洰鍚嶇О
   invoiceNumber: undefined, // 鍙戠エ鍙�
+  invoiceCode: undefined,
+  invoiceType: "澧炲�肩◣涓撶敤鍙戠エ",
+  taxRate: 13,
+  taxAmount: undefined,
+  remark: undefined,
   invoiceAmount: undefined, // 鍙戠エ閲戦(鍏�)
   issUerId: userStore.id, // 褰曞叆浜�
   issUer: userStore.nickName, // 褰曞叆浜�
@@ -419,12 +429,17 @@
 const submitForm = () => {
   formRef.value.validate(async (valid, fields) => {
     if (valid) {
-      // modalLoading.value = true;
+      modalLoading.value = true;
       const { code } = await addOrUpdateRegistration({
         purchaseLedgerId: id.value,
         purchaseContractNumber: form.purchaseLedgerNo,
         invoiceNumber: form.invoiceNumber,
         invoiceAmount: form.invoiceAmount,
+        invoiceCode: form.invoiceCode,
+        invoiceType: form.invoiceType,
+        taxRate: form.taxRate,
+        taxAmount: form.taxAmount,
+        remark: form.remark,
         salesContractNo: form.salesContractNo,
         projectName: form.projectName,
         productData: form.productData,
diff --git a/src/views/procurementManagement/supplierArchive/index.vue b/src/views/procurementManagement/supplierArchive/index.vue
new file mode 100644
index 0000000..56a1589
--- /dev/null
+++ b/src/views/procurementManagement/supplierArchive/index.vue
@@ -0,0 +1,9 @@
+<template>
+  <SupplierArchive />
+</template>
+
+<script setup>
+import SupplierArchive from '@/views/basicData/supplierManage/index.vue'
+
+defineOptions({ name: 'SupplierArchive' })
+</script>

--
Gitblit v1.9.3