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