From 95eff8a806da343936ed85a9ae5cd75cf30962e7 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期四, 09 四月 2026 11:21:26 +0800
Subject: [PATCH] 销售管理: 增加产品删除时的最小保留条目限制
---
src/views/procurementManagement/procurementLedger/index.vue | 171 +++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 135 insertions(+), 36 deletions(-)
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index e40a68a..de64d53 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -26,13 +26,13 @@
prefix-icon="Search"
@change="handleQuery" />
</el-form-item>
- <el-form-item label="椤圭洰鍚嶇О锛�">
+ <!-- <el-form-item label="椤圭洰鍚嶇О锛�">
<el-input v-model="searchForm.projectName"
placeholder="璇疯緭鍏�"
clearable
prefix-icon="Search"
@change="handleQuery" />
- </el-form-item>
+ </el-form-item> -->
<el-form-item label="褰曞叆鏃ユ湡锛�">
<el-date-picker v-model="searchForm.entryDate"
value-format="YYYY-MM-DD"
@@ -53,6 +53,7 @@
<div style="display: flex;justify-content: flex-end;margin-bottom: 20px;">
<el-button type="primary"
@click="openForm('add')">鏂板鍙拌处</el-button>
+ <el-button type="primary" plain @click="handleImport">瀵煎叆</el-button>
<el-button @click="handleOut">瀵煎嚭</el-button>
<el-button type="danger"
plain
@@ -89,6 +90,11 @@
prop="unit" />
<el-table-column label="鏁伴噺"
prop="quantity" />
+ <el-table-column label="鍙敤鏁伴噺"
+ prop="availableQuality" />
+ <el-table-column label="閫�璐ф暟閲�"
+ prop="returnQuality" />
+
<el-table-column label="绋庣巼(%)"
prop="taxRate" />
<el-table-column label="鍚◣鍗曚环(鍏�)"
@@ -119,10 +125,10 @@
prop="supplierName"
width="160"
show-overflow-tooltip />
- <el-table-column label="椤圭洰鍚嶇О"
+ <!-- <el-table-column label="椤圭洰鍚嶇О"
prop="projectName"
width="320"
- show-overflow-tooltip />
+ show-overflow-tooltip /> -->
<el-table-column label="瀹℃壒鐘舵��"
prop="approvalStatus"
width="100"
@@ -156,6 +162,10 @@
prop="entryDate"
width="100"
show-overflow-tooltip />
+ <el-table-column label="澶囨敞"
+ prop="remarks"
+ width="200"
+ show-overflow-tooltip />
<el-table-column fixed="right"
label="鎿嶄綔"
width="120"
@@ -163,12 +173,10 @@
<template #default="scope">
<el-button link
type="primary"
- size="small"
@click="openForm('edit', scope.row)"
:disabled="scope.row.approvalStatus !== 1 && scope.row.approvalStatus !== 4">缂栬緫</el-button>
<el-button link
type="primary"
- size="small"
@click="downLoadFile(scope.row)">闄勪欢</el-button>
</template>
</el-table-column>
@@ -228,20 +236,18 @@
<el-option v-for="item in supplierList"
:key="item.id"
:label="item.supplierName"
- :value="item.id" />
+ :value="item.id" >{{item.supplierName + '---' + item.supplierType}}</el-option>
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12">
+ <!-- <el-col :span="12">
<el-form-item label="椤圭洰鍚嶇О"
prop="projectName">
<el-input v-model="form.projectName"
placeholder="璇疯緭鍏�"
clearable />
</el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
+ </el-col> -->
<el-col :span="12">
<el-form-item label="浠樻鏂瑰紡">
<el-input v-model="form.paymentMethod"
@@ -249,6 +255,8 @@
clearable />
</el-form-item>
</el-col>
+ </el-row>
+ <el-row :gutter="30">
<el-col :span="12">
<el-form-item label="绛捐鏃ユ湡锛�"
prop="executionDate">
@@ -261,8 +269,6 @@
clearable />
</el-form-item>
</el-col>
- </el-row>
- <el-row :gutter="30">
<el-col :span="12">
<el-form-item label="褰曞叆浜猴細"
prop="recorderId">
@@ -277,6 +283,8 @@
</el-select>
</el-form-item>
</el-col>
+ </el-row>
+ <el-row :gutter="30">
<el-col :span="12">
<el-form-item label="褰曞叆鏃ユ湡锛�"
prop="entryDate">
@@ -441,7 +449,6 @@
<template #default="scope">
<el-button link
type="primary"
- size="small"
@click="openProductForm('edit', scope.row, scope.$index)">缂栬緫</el-button>
</template>
</el-table-column>
@@ -449,8 +456,8 @@
<el-row :gutter="30">
<el-col :span="24">
<el-form-item label="澶囨敞路锛�"
- prop="remark">
- <el-input v-model="form.remark"
+ prop="remarks">
+ <el-input v-model="form.remarks"
placeholder="璇疯緭鍏�"
clearable
type="textarea"
@@ -461,7 +468,7 @@
<el-row :gutter="30">
<el-col :span="24">
<el-form-item label="闄勪欢鏉愭枡锛�"
- prop="remark">
+ prop="purchaseLedgerFiles">
<el-upload v-model:file-list="fileList"
:action="upload.url"
multiple
@@ -484,6 +491,41 @@
</el-col>
</el-row>
</el-form>
+ </FormDialog>
+ <!-- 瀵煎叆寮圭獥 -->
+ <FormDialog
+ v-model="importUpload.open"
+ :title="importUpload.title"
+ :width="'600px'"
+ @close="importUpload.open = false"
+ @confirm="submitImportFile"
+ @cancel="importUpload.open = false"
+ >
+ <el-upload
+ ref="importUploadRef"
+ :limit="1"
+ accept=".xlsx,.xls"
+ :action="importUpload.url"
+ :headers="importUpload.headers"
+ :before-upload="importUpload.beforeUpload"
+ :on-success="importUpload.onSuccess"
+ :on-error="importUpload.onError"
+ :on-progress="importUpload.onProgress"
+ :on-change="importUpload.onChange"
+ :auto-upload="false"
+ drag
+ >
+ <i class="el-icon-upload"></i>
+ <div class="el-upload__text">
+ 灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em>
+ </div>
+ <template #tip>
+ <div class="el-upload__tip">
+ 浠呮敮鎸� xls/xlsx锛屽ぇ灏忎笉瓒呰繃 10MB銆�
+ <el-button link type="primary" @click="downloadTemplate">涓嬭浇瀵煎叆妯℃澘</el-button>
+ </div>
+ </template>
+ </el-upload>
</FormDialog>
<FormDialog v-model="productFormVisible"
:title="productOperationType === 'add' ? '鏂板浜у搧' : '缂栬緫浜у搧'"
@@ -810,16 +852,16 @@
currentTemplateId.value = matchedTemplate.id;
// 閫変腑宸叉湁妯℃澘鏃讹紝涓嶅簲瑙嗕负鈥滄ā鏉垮悕绉伴噸澶嶅鑷翠笉鍙繚瀛樷��
isTemplateNameDuplicate.value = false;
- // 濡傛灉鎵惧埌妯℃澘锛屽彧璧嬪�间緵搴斿晢銆侀」鐩悕绉般�佷粯娆炬柟寮忓拰浜у搧淇℃伅
+ // 濡傛灉鎵惧埌妯℃澘锛屽彧璧嬪�间緵搴斿晢銆佷粯娆炬柟寮忓拰浜у搧淇℃伅
if (matchedTemplate.supplierId) {
form.value.supplierId = matchedTemplate.supplierId;
}
if (matchedTemplate.supplierName) {
form.value.supplierName = matchedTemplate.supplierName;
}
- if (matchedTemplate.projectName) {
- form.value.projectName = matchedTemplate.projectName;
- }
+ // if (matchedTemplate.projectName) {
+ // form.value.projectName = matchedTemplate.projectName;
+ // }
if (matchedTemplate.paymentMethod) {
form.value.paymentMethod = matchedTemplate.paymentMethod;
}
@@ -856,7 +898,7 @@
supplierName: "", // 渚涘簲鍟嗗悕绉�
purchaseContractNumber: "", // 閲囪喘鍚堝悓缂栧彿
salesContractNo: "", // 閿�鍞悎鍚岀紪鍙�
- projectName: "", // 椤圭洰鍚嶇О
+ // projectName: "", // 椤圭洰鍚嶇О
entryDate: null, // 褰曞叆鏃ユ湡
entryDateStart: undefined,
entryDateEnd: undefined,
@@ -864,7 +906,7 @@
form: {
purchaseContractNumber: "",
salesLedgerId: "",
- projectName: "",
+ // projectName: "",
recorderId: "",
entryDate: "",
productData: [],
@@ -881,9 +923,9 @@
approverId: [
{ required: true, message: "璇烽�夋嫨瀹℃壒浜�", trigger: "change" },
],
- projectName: [
- { required: true, message: "璇疯緭鍏ラ」鐩悕绉�", trigger: "blur" },
- ],
+ // projectName: [
+ // { required: true, message: "璇疯緭鍏ラ」鐩悕绉�", trigger: "blur" },
+ // ],
supplierId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
entryDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
executionDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
@@ -949,6 +991,71 @@
// 璁剧疆涓婁紶鐨勮姹傚ご閮�
headers: { Authorization: "Bearer " + getToken() },
});
+
+ // 瀵煎叆鐩稿叧
+ const importUploadRef = ref(null);
+ const importUpload = reactive({
+ title: "瀵煎叆閲囪喘鍙拌处",
+ open: false,
+ url: import.meta.env.VITE_APP_BASE_API + "/purchase/ledger/import",
+ headers: { Authorization: "Bearer " + getToken() },
+ isUploading: false,
+ beforeUpload: (file) => {
+ const isExcel = file.name.endsWith(".xlsx") || file.name.endsWith(".xls");
+ const isLt10M = file.size / 1024 / 1024 < 10;
+ if (!isExcel) {
+ proxy.$modal.msgError("涓婁紶鏂囦欢鍙兘鏄� xlsx/xls 鏍煎紡!");
+ return false;
+ }
+ if (!isLt10M) {
+ proxy.$modal.msgError("涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 10MB!");
+ return false;
+ }
+ return true;
+ },
+ onChange: (file, fileList) => {
+ // noop
+ },
+ onProgress: (event, file, fileList) => {
+ // noop
+ },
+ onSuccess: (response, file, fileList) => {
+ importUpload.isUploading = false;
+ if (response?.code === 200) {
+ proxy.$modal.msgSuccess("瀵煎叆鎴愬姛");
+ importUpload.open = false;
+ if (importUploadRef.value) {
+ importUploadRef.value.clearFiles?.();
+ }
+ getList();
+ } else {
+ proxy.$modal.msgError(response?.msg || "瀵煎叆澶辫触");
+ }
+ },
+ onError: () => {
+ importUpload.isUploading = false;
+ proxy.$modal.msgError("瀵煎叆澶辫触锛岃閲嶈瘯");
+ },
+ });
+
+ const handleImport = () => {
+ importUpload.title = "瀵煎叆閲囪喘鍙拌处";
+ importUpload.open = true;
+ importUpload.isUploading = false;
+ if (importUploadRef.value) {
+ importUploadRef.value.clearFiles?.();
+ }
+ };
+
+ // 涓嬭浇瀵煎叆妯℃澘锛堝鍚庣璺緞涓嶅悓锛屽彲鍦ㄦ澶勮皟鏁达級
+ const downloadTemplate = () => {
+ proxy.download("/purchase/ledger/exportTemplate", {}, "閲囪喘鍙拌处瀵煎叆妯℃澘.xlsx");
+ };
+
+ const submitImportFile = () => {
+ importUpload.isUploading = true;
+ proxy.$refs["importUploadRef"]?.submit?.();
+ };
const changeDaterange = value => {
if (value) {
@@ -1025,7 +1132,7 @@
supplierId: form.value.supplierId,
paymentMethod: form.value.paymentMethod,
recorderId: form.value.recorderId,
- projectName: form.value.projectName,
+ // projectName: form.value.projectName,
approveUserIds: approveUserIds,
templateName: templateName.value.trim(),
};
@@ -1543,7 +1650,7 @@
delProduct(ids).then(res => {
proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
closeProductDia();
- getSalesLedgerWithProducts({ id: currentId.value, type: 2 }).then(
+ getPurchaseById({ id: currentId.value, type: 2 }).then(
res => {
productData.value = res.productData;
}
@@ -1578,14 +1685,6 @@
const handleDelete = () => {
let ids = [];
if (selectedRows.value.length > 0) {
- // 妫�鏌ユ槸鍚︽湁浠栦汉缁存姢鐨勬暟鎹�
- const unauthorizedData = selectedRows.value.filter(
- item => item.recorderName !== userStore.nickName
- );
- if (unauthorizedData.length > 0) {
- proxy.$modal.msgWarning("涓嶅彲鍒犻櫎浠栦汉缁存姢鐨勬暟鎹�");
- return;
- }
ids = selectedRows.value.map(item => item.id);
} else {
proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
--
Gitblit v1.9.3