From 3fd8dcf10cb28c248d693750f3f52a66f5f980a4 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 08 一月 2026 13:57:03 +0800
Subject: [PATCH] 军泰伟业 1.仓储物流只留成品和原料
---
/dev/null | 154 -------------------
src/views/inventoryManagement/receiptManagement/index.vue | 76 ---------
src/views/inventoryManagement/issueManagement/index.vue | 67 +-------
src/views/inventoryManagement/stockManagement/index.vue | 99 -----------
src/views/inventoryManagement/dispatchLog/index.vue | 78 ---------
5 files changed, 22 insertions(+), 452 deletions(-)
diff --git a/src/views/inventoryManagement/dispatchLog/index.vue b/src/views/inventoryManagement/dispatchLog/index.vue
index 5f73d91..427d505 100644
--- a/src/views/inventoryManagement/dispatchLog/index.vue
+++ b/src/views/inventoryManagement/dispatchLog/index.vue
@@ -128,71 +128,6 @@
/>
</div>
</el-tab-pane>
-
- <el-tab-pane label="鏉愭枡鍑哄簱" name="manual">
- <div class="search_form">
- <div>
- <span class="search_title ml10">鍑哄簱鏃ユ湡锛�</span>
- <el-date-picker
- v-model="searchForm.timeStr"
- type="date"
- placeholder="璇烽�夋嫨鏃ユ湡"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- clearable
- @change="handleQuery"
- />
- <span class="search_title ml10">浜у搧澶х被锛�</span>
- <el-input
- v-model="searchForm.productCategory"
- style="width: 240px"
- placeholder="璇疯緭鍏�"
- clearable
- />
- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
- </div>
- <div>
- <el-button @click="handleOut">瀵煎嚭</el-button>
- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
- <el-button type="primary" plain @click="handlePrint">鎵撳嵃</el-button>
- </div>
- </div>
- <div class="table_list">
- <el-table
- :data="tableData"
- border
- v-loading="tableLoading"
- @selection-change="handleSelectionChange"
- :expand-row-keys="expandedRowKeys"
- :row-key="(row) => row.id"
- show-summary
- style="width: 100%"
- :summary-method="summarizeMainTable"
- height="calc(100vh - 18.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="createTime" show-overflow-tooltip width="130"/>
- <el-table-column label="鎵规鍙�" prop="code" width="130" show-overflow-tooltip />
- <el-table-column label="浜у搧澶х被" prop="productCategory" show-overflow-tooltip />
- <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" show-overflow-tooltip />
- <el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
- <el-table-column label="鐗╁搧绫诲瀷" prop="itemType" show-overflow-tooltip />
- <el-table-column label="鍑哄簱鏁伴噺" prop="inboundNum" show-overflow-tooltip />
- <el-table-column label="鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" width="150"></el-table-column>
- <el-table-column label="鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" width="150"></el-table-column>
- <el-table-column label="鍑哄簱浜�" prop="createBy" show-overflow-tooltip />
- </el-table>
- <pagination
- v-show="total > 0"
- :total="total"
- layout="total, sizes, prev, pager, next, jumper"
- :page="page.current"
- :limit="page.size"
- @pagination="paginationChange"
- />
- </div>
- </el-tab-pane>
</el-tabs>
<!-- 鎵撳嵃棰勮寮圭獥 -->
@@ -218,7 +153,7 @@
<div v-for="(item, index) in printData" :key="index" class="print-page">
<div class="delivery-note">
<div class="header">
- <div class="company-name">娴峰窛寮�蹇冮鍝佹湁闄愬叕鍙�</div>
+ <div class="company-name">鍐涙嘲浼熶笟锛堝ぉ娲ワ級鏈夐檺鍏徃</div>
<div class="document-title">闆跺敭鍙戣揣鍗�</div>
</div>
@@ -322,7 +257,6 @@
} from "@/api/inventoryManagement/stockOut.js";
import {
getStockInPageByProduct,
- getStockInPageByCustom,
} from "@/api/inventoryManagement/stockIn.js";
const userStore = useUserStore();
@@ -347,7 +281,7 @@
supplierName: "",
customerName: "",
productCategory:'',
- timeStr: getCurrentDate(),
+ timeStr: '',
},
form: {
supplierId: null,
@@ -397,8 +331,6 @@
// 鏍规嵁涓嶅悓鐨� tab 绫诲瀷璋冪敤涓嶅悓鐨勬帴鍙�
const apiCall = activeTab.value === 'production'
? getStockInPageByProduct(params)
- : activeTab.value === 'manual'
- ? getStockInPageByCustom(params)
: getStockOutPage(params)
apiCall
@@ -414,7 +346,7 @@
const unitPrice = Number(item.unitPrice) || 0;
item.totalPrice = (unitPrice * inboundNum).toFixed(2);
} else {
- // 鍘熸枡鍜屾潗鏂欏嚭搴擄細鎬讳环 = taxInclusiveUnitPrice 脳 inboundNum
+ // 鍘熸枡鍑哄簱锛氭�讳环 = taxInclusiveUnitPrice 脳 inboundNum
const taxInclusiveUnitPrice = Number(item.taxInclusiveUnitPrice) || 0;
item.taxInclusiveTotalPrice = (taxInclusiveUnitPrice * inboundNum).toFixed(2);
}
@@ -465,8 +397,6 @@
let exportUrl = "/stockmanagement/export"
if (activeTab.value === 'production') {
exportUrl = "/stockmanagement/exportone"
- } else if (activeTab.value === 'manual') {
- exportUrl = "/stockmanagement/exportTwo"
}
proxy.download(exportUrl, {}, "鍑哄簱鍙拌处.xlsx");
})
@@ -661,7 +591,7 @@
<div class="print-page">
<div class="delivery-note">
<div class="header">
- <div class="company-name">娴峰窛寮�蹇冮鍝佹湁闄愬叕鍙�</div>
+ <div class="company-name">鍐涙嘲浼熶笟锛堝ぉ娲ワ級鏈夐檺鍏徃</div>
<div class="document-title">闆跺敭鍙戣揣鍗�</div>
</div>
diff --git a/src/views/inventoryManagement/issueManagement/index.vue b/src/views/inventoryManagement/issueManagement/index.vue
index 57ac9be..3df20a8 100644
--- a/src/views/inventoryManagement/issueManagement/index.vue
+++ b/src/views/inventoryManagement/issueManagement/index.vue
@@ -77,45 +77,6 @@
:page="page.current" :limit="page.size" @pagination="paginationChange" />
</div>
</el-tab-pane>
-
- <el-tab-pane label="鏉愭枡鍑哄簱" name="manual">
- <div class="search_form">
- <div>
- <span class="search_title ml10">浜у搧澶х被锛�</span>
- <el-input
- v-model="searchForm.productCategory"
- style="width: 240px"
- placeholder="璇疯緭鍏�"
- clearable
- />
- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
- </div>
- <div>
- <el-button @click="handleOut">瀵煎嚭</el-button>
- </div>
- </div>
- <div class="table_list">
- <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
- :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%"
- :summary-method="summarizeMainTable" height="calc(100vh - 18.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="code" width="130" show-overflow-tooltip />
- <el-table-column label="浜у搧澶х被" prop="productCategory" show-overflow-tooltip />
- <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" show-overflow-tooltip />
- <el-table-column label="鍗曚綅" prop="unit" width="70" show-overflow-tooltip />
- <el-table-column label="鐗╁搧绫诲瀷" prop="itemType" show-overflow-tooltip />
- <el-table-column label="鍓╀綑搴撳瓨" prop="inboundNum0" width="90" show-overflow-tooltip />
- <el-table-column fixed="right" label="鎿嶄綔" width="100" align="center">
- <template #default="scope">
- <el-button link type="primary" size="small" @click="openForm(scope.row);">棰嗙敤</el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
- :page="page.current" :limit="page.size" @pagination="paginationChange" />
- </div>
- </el-tab-pane>
</el-tabs>
<el-dialog v-model="dialogFormVisible" :title="getDialogTitle()" width="40%" @close="closeDia">
<el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
@@ -154,7 +115,6 @@
import {
getStockInPage,
getStockInPageByProduction,
- getStockInPageByCustom, getInPageByCustom
} from "@/api/inventoryManagement/stockIn.js";
import {
getStockManagePage,
@@ -187,7 +147,7 @@
nickName: '',
userId: '',
productCategory:'',
- timeStr: getCurrentDate(),
+ timeStr: '',
},
form: {
productrecordId: '',
@@ -225,8 +185,6 @@
let apiCall
if (activeTab.value === 'production') {
apiCall = getStockInPageByProduction(params)
- } else if (activeTab.value === 'manual') {
- apiCall = getInPageByCustom(params)
} else {
apiCall = getStockInPage(params)
}
@@ -312,14 +270,14 @@
}
proxy.$refs["formRef"].validate(valid => {
if (valid && currentRowId.value) {
- const typeMap = { production: 2, purchase: 1, manual: 3 }
+ const typeMap = { production: 2, purchase: 1 }
const outData = {
id: currentRowId.value, // 鍘熷璁板綍ID
- salesLedgerProductId: activeTab.value === 'manual' ? 0 : salesLedgerProductId.value,
+ salesLedgerProductId: salesLedgerProductId.value,
quantity: form.value.inboundQuantity, // 鍑哄簱鏁伴噺
time: form.value.inboundTime, // 鍑哄簱鏃堕棿
userId: form.value.nickName, // 鎿嶄綔浜�
- type: typeMap[activeTab.value] // 鍑哄簱绫诲瀷锛氶噰璐�1锛岀敓浜�2锛岃嚜瀹氫箟3
+ type: typeMap[activeTab.value] // 鍑哄簱绫诲瀷锛氶噰璐�1锛岀敓浜�2
}
console.log(outData)
@@ -353,8 +311,6 @@
let exportUrl = "/stockin/export"
if (activeTab.value === 'production') {
exportUrl = "/stockin/exportOne"
- } else if (activeTab.value === 'manual') {
- exportUrl = "/stockin/exportTwo"
}
proxy.download(exportUrl, {}, '鍏ュ簱鍙拌处.xlsx')
}).catch(() => {
@@ -399,8 +355,7 @@
const getDialogTitle = () => {
const titleMap = {
production: '鏂板鍙戣揣',
- purchase: '鏂板棰嗙敤',
- manual: '鏂板棰嗙敤'
+ purchase: '鏂板棰嗙敤'
};
return titleMap[activeTab.value] || '鏂板鍑哄簱';
};
@@ -409,8 +364,7 @@
const getAvailableQuantityText = () => {
const textMap = {
production: '鍙彂璐ф暟閲�',
- purchase: '鍙鐢ㄦ暟閲�',
- manual: '鍙鐢ㄦ暟閲�'
+ purchase: '鍙鐢ㄦ暟閲�'
};
return textMap[activeTab.value] || '鍙嚭搴撴暟閲�';
};
@@ -419,8 +373,7 @@
const getQuantityLabel = () => {
const labelMap = {
production: '鍙戣揣鏁伴噺锛�',
- purchase: '棰嗙敤鏁伴噺锛�',
- manual: '棰嗙敤鏁伴噺锛�'
+ purchase: '棰嗙敤鏁伴噺锛�'
};
return labelMap[activeTab.value] || '鍑哄簱鏁伴噺锛�';
};
@@ -429,8 +382,7 @@
const getDateLabel = () => {
const labelMap = {
production: '鍙戣揣鏃ユ湡锛�',
- purchase: '棰嗙敤鏃ユ湡锛�',
- manual: '棰嗙敤鏃ユ湡锛�'
+ purchase: '棰嗙敤鏃ユ湡锛�'
};
return labelMap[activeTab.value] || '鍑哄簱鏃ユ湡锛�';
};
@@ -439,8 +391,7 @@
const getPersonLabel = () => {
const labelMap = {
production: '鍙戣揣浜猴細',
- purchase: '棰嗙敤浜猴細',
- manual: '棰嗙敤浜猴細'
+ purchase: '棰嗙敤浜猴細'
};
return labelMap[activeTab.value] || '鍑哄簱浜猴細';
};
diff --git a/src/views/inventoryManagement/receiptManagement/components/formDiaManual.vue b/src/views/inventoryManagement/receiptManagement/components/formDiaManual.vue
deleted file mode 100644
index abaaeb8..0000000
--- a/src/views/inventoryManagement/receiptManagement/components/formDiaManual.vue
+++ /dev/null
@@ -1,332 +0,0 @@
-<template>
- <el-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? '鏂板鑷畾涔夊叆搴�' : '缂栬緫鑷畾涔夊叆搴�'" width="70%"
- @close="closeDia">
- <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
- <div style="margin-bottom: 10px;" v-if="operationType === 'add'">
- <el-button type="primary" @click="addProductRow">鏂板</el-button>
- </div>
- <el-table
- :data="productList"
- border
- v-loading="loadingProducts"
- >
- <el-table-column
- align="center"
- label="搴忓彿"
- type="index"
- width="60"
- />
- <el-table-column label="浜у搧澶х被" prop="productCategory" width="200">
- <template #default="scope">
- <el-input v-model="scope.row.productCategory" placeholder="璇疯緭鍏ヤ骇鍝佸ぇ绫�" />
- </template>
- </el-table-column>
- <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" width="200">
- <template #default="scope">
- <el-input v-model="scope.row.specificationModel" placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�" />
- </template>
- </el-table-column>
- <el-table-column label="鍗曚綅" prop="unit" width="100">
- <template #default="scope">
- <el-input v-model="scope.row.unit" placeholder="璇疯緭鍏ュ崟浣�" />
- </template>
- </el-table-column>
- <el-table-column label="渚涘簲鍟�" prop="supplierName" width="200">
- <template #default="scope">
- <el-input v-model="scope.row.supplierName" placeholder="璇疯緭鍏ヤ緵搴斿晢" />
- </template>
- </el-table-column>
- <el-table-column label="鐗╁搧绫诲瀷" prop="itemType" width="150">
- <template #default="scope">
- <el-select v-model="scope.row.itemType" filterable allow-create placeholder="璇烽�夋嫨鐗╁搧绫诲瀷" style="width: 100%">
- <el-option
- v-for="item in itemTypeOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </template>
- </el-table-column>
- <el-table-column label="鍏ュ簱鏁伴噺" prop="inboundNum" width="150">
- <template #default="scope">
- <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="scope.row.inboundNum" @change="() => calculateTotalPrice(scope.row)" />
- </template>
- </el-table-column>
- <el-table-column label="鍏ュ簱鏃ユ湡" prop="inboundDate" width="180">
- <template #default="scope">
- <el-date-picker
- v-model="scope.row.inboundDate"
- type="date"
- placeholder="璇烽�夋嫨鍏ュ簱鏃ユ湡"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- style="width: 100%"
- />
- </template>
- </el-table-column>
- <el-table-column label="鏁伴噺" prop="quantityStock" width="150">
- <template #default="scope">
- <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="scope.row.quantityStock" @change="() => calculateTotalPrice(scope.row)" />
- </template>
- </el-table-column>
- <el-table-column label="鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" width="150">
- <template #default="scope">
- <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="scope.row.taxInclusiveUnitPrice" @change="() => calculateTotalPrice(scope.row)" />
- </template>
- </el-table-column>
- <el-table-column
- label="鎬讳环(鍏�)"
- prop="taxInclusiveTotalPrice"
- width="150"
- >
- </el-table-column>
- <el-table-column label="鎿嶄綔" width="80" v-if="operationType === 'add'">
- <template #default="scope">
- <el-button type="danger" size="small" @click="removeProductRow(scope.$index)">鍒犻櫎</el-button>
- </template>
- </el-table-column>
- </el-table>
- </el-form>
- <template #footer>
- <div class="dialog-footer">
- <el-button type="primary" @click="submitForm">纭</el-button>
- <el-button @click="closeDia">鍙栨秷</el-button>
- </div>
- </template>
- </el-dialog>
-</template>
-
-<script setup>
-import { ref, reactive, toRefs, getCurrentInstance } from 'vue'
-import useUserStore from '@/store/modules/user'
-import {
- addStockInCustom,
- updateStockInCustom,
-} from "@/api/inventoryManagement/stockIn.js";
-
-const userStore = useUserStore()
-const { proxy } = getCurrentInstance()
-const emit = defineEmits(['close', 'success'])
-
-const operationType = ref('')// 鎿嶄綔绫诲瀷: 'add' 鎴� 'edit'
-const dialogFormVisible = ref(false)// 寮规鏄剧ず鐘舵��
-const productList = ref([]);// 浜у搧鍒楄〃鏁版嵁
-const loadingProducts = ref(false);// 浜у搧鍔犺浇鐘舵��
-const loading = ref(false);
-
-function formatDateTime(date = new Date(), includeTime = true) {
- const d = new Date(date);
- const year = d.getFullYear();
- const month = String(d.getMonth() + 1).padStart(2, '0');
- const day = String(d.getDate()).padStart(2, '0');
-
- if (!includeTime) {
- return `${year}-${month}-${day}`;
- }
-
- const hours = String(d.getHours()).padStart(2, '0');
- const minutes = String(d.getMinutes()).padStart(2, '0');
- const seconds = String(d.getSeconds()).padStart(2, '0');
-
- return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
-}
-
-function getCurrentDate() {
- return formatDateTime(new Date(), false);
-}
-
-const itemTypeOptions = [
- { label: '鐗╂枡', value: '鐗╂枡' },
- { label: '鍘熸枡', value: '鍘熸枡' },
- { label: '鎴愬搧', value: '鎴愬搧' },
- { label: '鍏朵粬', value: '鍏朵粬' },
-]
-
-const taxRateOptions = [
- { label: '1', value: 1 },
- { label: '6', value: 6 },
- { label: '13', value: 13 },
-]
-
-const data = reactive({
- form: {
- id: null,
- supplierId: null, // 渚涘簲鍟咺D
- supplierName: '', // 渚涘簲鍟嗗悕绉�
- recorderId: userStore.userId, // 褰曞叆浜篒D
- recorderName: userStore.name, // 褰曞叆浜哄鍚�
- entryDate: getCurrentDate(), // 褰曞叆鏃ユ湡
- remark: '', // 澶囨敞
- },
- rules: {
- supplierName: [{ required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" }]
- }
-})
-const { form, rules } = toRefs(data)
-
-// 鏂板浜у搧琛�
-const addProductRow = () => {
- productList.value.push({
- id: null,
- productCategory: '',
- specificationModel: '',
- unit: '',
- supplierName: form.value.supplierName || '',
- itemType: '',
- inboundNum: 0,
- inboundDate: '',
- quantityStock: 0,
- taxInclusiveUnitPrice: 0,
- taxInclusiveTotalPrice: 0,
- taxRate: null,
- taxExclusiveTotalPrice: 0,
- });
-};
-
-// 鍒犻櫎浜у搧琛�
-const removeProductRow = (index) => {
- productList.value.splice(index, 1);
-};
-
-// 璁$畻鎬讳环锛堟牴鎹暟閲忋�佸崟浠峰拰鍚◣鍗曚环锛�
-const calculateTotalPrice = (row) => {
- // 璁$畻鏅�氭�讳环锛歲uantityStock * taxInclusiveUnitPrice
- const quantity = Number(row.quantityStock || 0);
- const taxInclusiveUnitPrice = Number(row.taxInclusiveUnitPrice || 0);
- row.taxInclusiveTotalPrice = quantity * taxInclusiveUnitPrice;
- calculateExclusivePrice(row);
-};
-
-// 璁$畻涓嶅惈绋庢�讳环锛堟牴鎹惈绋庢�讳环鍜岀◣鐜囷級
-const calculateExclusivePrice = (row) => {
- const taxInclusiveTotalPrice = Number(row.taxInclusiveTotalPrice || 0);
- const taxRate = Number(row.taxRate || 0);
- row.taxExclusiveTotalPrice = taxInclusiveTotalPrice / (1 + taxRate / 100);
-};
-
-const submitForm = async () => {
- try {
- await proxy.$refs.formRef.validate()
-
- if (!productList.value.length) {
- proxy.$modal.msgError('璇疯嚦灏戞坊鍔犱竴鏉′骇鍝佹暟鎹�')
- return
- }
-
- // 楠岃瘉鑷畾涔夋坊鍔犵殑鏁版嵁蹇呭~瀛楁
- for (let i = 0; i < productList.value.length; i++) {
- const product = productList.value[i];
- if (!product.productCategory || !product.specificationModel || !product.unit) {
- proxy.$modal.msgError(`绗�${i + 1}琛屼骇鍝佹暟鎹湭濉啓瀹屾暣锛堜骇鍝佸ぇ绫汇�佽鏍煎瀷鍙枫�佸崟浣嶄负蹇呭~锛塦)
- return
- }
- if (!product.itemType) {
- proxy.$modal.msgError(`绗�${i + 1}琛岃閫夋嫨鐗╁搧绫诲瀷`)
- return
- }
- if (!product.inboundDate) {
- proxy.$modal.msgError(`绗�${i + 1}琛岃閫夋嫨鍏ュ簱鏃ユ湡`)
- return
- }
- const stock = Number(product?.inboundNum ?? 0);
- if (!Number.isFinite(stock) || stock <= 0) {
- proxy.$modal.msgError(`绗�${i + 1}琛屾湰娆″叆搴撴暟閲忛渶澶т簬0`)
- return
- }
- }
-
- const payloadList = productList.value.map(product => ({
- id: product.id ?? null,
- inboundNum: Number(product.inboundNum),
- productCategory: product.productCategory,
- specificationModel: product.specificationModel,
- unit: product.unit,
- supplierName: product.supplierName || form.value.supplierName,
- itemType: product.itemType,
- inboundDate: formatDateTime(product.inboundDate, false),
- taxRate: Number(product.taxRate || 0),
- taxExclusiveTotalPrice: Number(product.taxExclusiveTotalPrice || 0),
- taxInclusiveUnitPrice: Number(product.taxInclusiveUnitPrice || 0),
- taxInclusiveTotalPrice: Number(product.taxInclusiveTotalPrice || 0),
- }));
- loading.value = true
- if (operationType.value === 'edit') {
- const editPayload = payloadList[0]
- await updateStockInCustom(editPayload)
- } else {
- await addStockInCustom(payloadList)
- }
-
- proxy.$modal.msgSuccess(operationType.value === 'edit' ? '缂栬緫鑷畾涔夊叆搴撴垚鍔�' : '鏂板鑷畾涔夊叆搴撴垚鍔�')
- closeDia()
- emit('success')
-
- } catch (error) {
- console.error('鎻愪氦澶辫触:', error)
- if (!error.errors) {
- proxy.$modal.msgError('鎿嶄綔澶辫触锛岃閲嶈瘯')
- }
- } finally {
- loading.value = false
- }
-}
-
-const closeDia = () => {
- proxy.$refs.formRef.resetFields()
- dialogFormVisible.value = false
- productList.value = []
- emit('close')
-}
-
-const openDialog = async (type, row) => {
- operationType.value = type
- dialogFormVisible.value = true
-
- if (type === 'add') {
- form.value = {
- id: null,
- supplierId: null,
- supplierName: '',
- recorderId: userStore.userId,
- recorderName: userStore.name,
- entryDate: getCurrentDate(),
- remark: ''
- }
- productList.value = []
- } else {
- // 缂栬緫妯″紡锛氬皢琛屾暟鎹~鍏呭埌琛ㄦ牸涓互鏀寔淇敼
- form.value = {
- id: row?.id ?? null,
- supplierId: row?.supplierId ?? null,
- supplierName: row?.supplierName ?? '',
- recorderId: userStore.userId,
- recorderName: userStore.name,
- entryDate: getCurrentDate(),
- remark: row?.remark ?? ''
- }
- productList.value = [{
- id: row?.id ?? null,
- productCategory: row?.productCategory ?? '',
- specificationModel: row?.specificationModel ?? '',
- unit: row?.unit ?? '',
- supplierName: row?.supplierName ?? '',
- itemType: row?.itemType ?? '',
- inboundNum: Number(row?.inboundNum ?? row?.inboundQuantity ?? 0),
- inboundDate: row?.inboundDate ?? row?.createTime ?? '',
- quantityStock: Number(row?.quantityStock ?? 0),
- taxRate: Number(row?.taxRate ?? 0),
- taxInclusiveUnitPrice: Number(row?.taxInclusiveUnitPrice ?? 0),
- taxInclusiveTotalPrice: Number(row?.taxInclusiveTotalPrice ?? 0),
- taxExclusiveTotalPrice: Number(row?.taxExclusiveTotalPrice ?? 0),
- }]
- }
-}
-
-defineExpose({
- openDialog,
-})
-</script>
-
-<style scoped lang="scss"></style>
-
diff --git a/src/views/inventoryManagement/receiptManagement/index.vue b/src/views/inventoryManagement/receiptManagement/index.vue
index 68b1b77..a0f6e2b 100644
--- a/src/views/inventoryManagement/receiptManagement/index.vue
+++ b/src/views/inventoryManagement/receiptManagement/index.vue
@@ -107,66 +107,9 @@
:page="page.current" :limit="page.size" @pagination="paginationChange" />
</div>
</el-tab-pane>
-
- <el-tab-pane label="鏉愭枡鍏ュ簱" name="manual">
- <div class="search_form">
- <div>
- <span class="search_title ml10">鍏ュ簱鏃ユ湡锛�</span>
- <el-date-picker
- v-model="searchForm.timeStr"
- type="date"
- placeholder="璇烽�夋嫨鏃ユ湡"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- clearable
- @change="handleQuery"
- />
- <span class="search_title ml10">浜у搧澶х被锛�</span>
- <el-input
- v-model="searchForm.productCategory"
- style="width: 240px"
- placeholder="璇疯緭鍏�"
- clearable
- />
- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
- </div>
- <div>
- <el-button type="primary" @click="openForm('add', 'manual')">鏂板鍏ュ簱</el-button>
- <el-button @click="handleOut">瀵煎嚭</el-button>
- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
- </div>
- </div>
- <div class="table_list">
- <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
- :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%"
- :summary-method="summarizeMainTable" height="calc(100vh - 18.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="inboundDate" width="100" show-overflow-tooltip />
- <el-table-column label="鎵规鍙�" prop="code" width="130" show-overflow-tooltip />
- <el-table-column label="浜у搧澶х被" prop="productCategory" show-overflow-tooltip />
- <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" show-overflow-tooltip />
- <el-table-column label="鍗曚綅" prop="unit" width="70" show-overflow-tooltip />
- <el-table-column label="鐗╁搧绫诲瀷" prop="itemType" show-overflow-tooltip />
- <el-table-column label="鍏ュ簱鏁伴噺" prop="inboundNum" width="100" show-overflow-tooltip />
- <el-table-column label="鍓╀綑搴撳瓨" prop="inboundNum0" show-overflow-tooltip />
- <el-table-column label="鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" width="150"></el-table-column>
- <el-table-column label="鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" width="150"></el-table-column>
- <el-table-column label="鍏ュ簱浜�" prop="createBy" width="80" show-overflow-tooltip />
- <el-table-column fixed="right" label="鎿嶄綔" width="100" align="center">
- <template #default="scope">
- <el-button link type="primary" size="small" @click="openForm('edit', scope.row, 'manual');">缂栬緫</el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
- :page="page.current" :limit="page.size" @pagination="paginationChange" />
- </div>
- </el-tab-pane>
</el-tabs>
<form-dia ref="formDia" @close="handleQuery" @success="handleQuery"></form-dia>
- <form-dia-manual ref="formDiaManual" @close="handleQuery" @success="handleQuery"></form-dia-manual>
<form-dia-product ref="formDiaProduct" @close="handleQuery" @success="handleQuery"></form-dia-product>
</div>
</template>
@@ -181,10 +124,8 @@
getStockInPage,
getStockInPageByProduction,
delStockIn,
- delStockInCustom, getInPageByCustom,
} from "@/api/inventoryManagement/stockIn.js";
import FormDia from './components/formDia.vue'
-import FormDiaManual from './components/formDiaManual.vue'
import FormDiaProduct from './components/formDiaProduct.vue'
// 鑾峰彇褰撳墠鏃ユ湡
@@ -198,7 +139,6 @@
const selectedRows = ref([])
const tableLoading = ref(false)
const formDia = ref()
-const formDiaManual = ref()
const formDiaProduct = ref()
const activeTab = ref('production') // 褰撳墠婵�娲荤殑 tab
@@ -213,7 +153,7 @@
supplierName: '',
customerName: '',
productCategory:'',
- timeStr: getCurrentDate(),
+ timeStr: '',
},
})
const { searchForm } = toRefs(data)
@@ -245,8 +185,6 @@
// 鏍规嵁涓嶅悓鐨� tab 绫诲瀷璋冪敤涓嶅悓鐨勬帴鍙�
const apiCall = activeTab.value === 'production'
? getStockInPageByProduction(params)
- : activeTab.value === 'manual'
- ? getInPageByCustom(params)
: getStockInPage(params)
apiCall.then(res => {
@@ -293,9 +231,7 @@
const openForm = async (type, row, tabType) => {
const currentTab = tabType || activeTab.value
await nextTick(() => {
- if (currentTab === 'manual') {
- formDiaManual.value?.openDialog(type, row)
- } else if (currentTab === 'production') {
+ if (currentTab === 'production') {
formDiaProduct.value?.openDialog(type, row)
}else {
formDia.value?.openDialog(type, row)
@@ -326,8 +262,6 @@
let exportUrl = "/stockin/export"
if (activeTab.value === 'production') {
exportUrl = "/stockin/exportOne"
- } else if (activeTab.value === 'manual') {
- exportUrl = "/stockin/exportTwo"
}
proxy.download(exportUrl, {}, '鍏ュ簱鍙拌处.xlsx')
}).catch(() => {
@@ -355,14 +289,10 @@
// 鎴愬搧鍒犻櫎锛宼ype浼�2
deleteApi = delStockIn
deleteParams = { ids, type: 2 }
- } else if (activeTab.value === 'purchase') {
+ } else {
// 鍘熸枡鍒犻櫎锛宼ype浼�1
deleteApi = delStockIn
deleteParams = { ids, type: 1 }
- } else {
- // 鏉愭枡鍏ュ簱
- deleteApi = delStockInCustom
- deleteParams = { ids }
}
deleteApi(deleteParams).then(() => {
diff --git a/src/views/inventoryManagement/stockManagement/components/FormDiaManual.vue b/src/views/inventoryManagement/stockManagement/components/FormDiaManual.vue
deleted file mode 100644
index d66b0e6..0000000
--- a/src/views/inventoryManagement/stockManagement/components/FormDiaManual.vue
+++ /dev/null
@@ -1,154 +0,0 @@
-<template>
- <el-dialog :model-value="dialogFormVisible" :title="operationType === 'add' ? '鏂板鏉愭枡搴撳瓨' : '缂栬緫鏉愭枡搴撳瓨'" width="70%"
- @update:model-value="$emit('update:dialogFormVisible', $event)" @close="closeDia">
- <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="浜у搧澶х被锛�" prop="productCategory">
- <el-input disabled v-model="form.productCategory" placeholder="璇疯緭鍏�" clearable />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="specificationModel">
- <el-input disabled v-model="form.specificationModel" placeholder="璇疯緭鍏�" clearable />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="鍗曚綅锛�" prop="unit">
- <el-input disabled v-model="form.unit" placeholder="璇疯緭鍏�" clearable />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鐗╁搧绫诲瀷锛�" prop="itemType">
- <el-input disabled v-model="form.itemType" placeholder="璇疯緭鍏�" clearable />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="鍏ュ簱鏃堕棿锛�" prop="createTime">
- <el-date-picker style="width: 100%" v-model="form.createTime" value-format="YYYY-MM-DD" format="YYYY-MM-DD"
- type="date" placeholder="璇烽�夋嫨" clearable />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="搴撳瓨鏁伴噺锛�" prop="inboundNum">
- <el-input v-model="form.inboundNum" placeholder="璇疯緭鍏�" clearable @input="calculateTotalPrice" />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="宸插嚭搴撴暟閲忥細" prop="totalInboundNum">
- <el-input disabled v-model="form.totalInboundNum" placeholder="璇疯緭鍏�" clearable />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="寰呭嚭搴撴暟閲忥細" prop="inboundNum0">
- <el-input disabled v-model="form.inboundNum0" placeholder="璇疯緭鍏�" clearable />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="鍗曚环(鍏�)锛�" prop="taxInclusiveUnitPrice">
- <el-input v-model="form.taxInclusiveUnitPrice" placeholder="璇疯緭鍏�" clearable @input="calculateTotalPrice" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鎬讳环(鍏�)锛�" prop="taxInclusiveTotalPrice">
- <el-input disabled v-model="form.taxInclusiveTotalPrice" placeholder="鑷姩璁$畻" clearable />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
- <div class="dialog-footer">
- <el-button type="primary" @click="submitForm">纭</el-button>
- <el-button @click="closeDia">鍙栨秷</el-button>
- </div>
- </template>
- </el-dialog>
-</template>
-
-<script setup>
-import { ref, reactive, toRefs, watch } from 'vue'
-
-const props = defineProps({
- dialogFormVisible: Boolean,
- operationType: String,
- formData: Object
-})
-
-const emit = defineEmits(['update:dialogFormVisible', 'submit', 'close'])
-
-const formRef = ref()
-
-const data = reactive({
- form: {
- productCategory: '',
- specificationModel: '',
- unit: '',
- itemType: '',
- createTime: '',
- inboundNum: '',
- totalInboundNum: '',
- inboundNum0: '',
- taxInclusiveUnitPrice: '',
- taxInclusiveTotalPrice: ''
- },
- rules: {
- productCategory: [{ required: true, message: '璇疯緭鍏ヤ骇鍝佸ぇ绫�', trigger: 'blur' }],
- specificationModel: [{ required: true, message: '璇疯緭鍏ヨ鏍煎瀷鍙�', trigger: 'blur' }],
- unit: [{ required: true, message: '璇疯緭鍏ュ崟浣�', trigger: 'blur' }],
- itemType: [{ required: true, message: '璇疯緭鍏ョ墿鍝佺被鍨�', trigger: 'blur' }],
- createTime: [{ required: true, message: '璇烽�夋嫨鍏ュ簱鏃堕棿', trigger: 'change' }],
- inboundNum: [{ required: true, message: '璇疯緭鍏ュ簱瀛樻暟閲�', trigger: 'blur' }],
- taxInclusiveUnitPrice: [{ required: true, message: '璇疯緭鍏ュ崟浠�', trigger: 'blur' }]
- }
-})
-
-const { form, rules } = toRefs(data)
-
-// 璁$畻鎬讳环锛氭�讳环 = 鍗曚环 脳 鍓╀綑搴撳瓨
-const calculateTotalPrice = () => {
- const unitPrice = parseFloat(form.value.taxInclusiveUnitPrice) || 0
- const stockQuantity = parseFloat(form.value.inboundNum) || 0 // 搴撳瓨鏁伴噺
- const outboundQuantity = parseFloat(form.value.totalInboundNum) || 0 // 宸插嚭搴撴暟閲�
- const remainingStock = stockQuantity - outboundQuantity // 鍓╀綑搴撳瓨
- form.value.taxInclusiveTotalPrice = (unitPrice * remainingStock).toFixed(2)
-}
-
-// 鐩戝惉formData鍙樺寲
-watch(() => props.formData, (newVal) => {
- if (newVal) {
- form.value = { ...newVal }
- // 鏁版嵁鍙樺寲鍚庨噸鏂拌绠楁�讳环
- calculateTotalPrice()
- }
-}, { immediate: true })
-
-// 鎻愪氦琛ㄥ崟
-const submitForm = () => {
- formRef.value.validate(valid => {
- if (valid) {
- emit('submit', form.value)
- }
- })
-}
-
-// 鍏抽棴寮规
-const closeDia = () => {
- emit('close')
- emit('update:dialogFormVisible', false)
-}
-
-</script>
-
-<style scoped lang="scss">
-.dialog-footer {
- text-align: center;
-}
-</style>
\ No newline at end of file
diff --git a/src/views/inventoryManagement/stockManagement/index.vue b/src/views/inventoryManagement/stockManagement/index.vue
index 00c037c..88d1292 100644
--- a/src/views/inventoryManagement/stockManagement/index.vue
+++ b/src/views/inventoryManagement/stockManagement/index.vue
@@ -102,61 +102,6 @@
<pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
:page="page.current" :limit="page.size" @pagination="paginationChange" />
</div>
- </el-tab-pane>
-
- <el-tab-pane label="鏉愭枡搴撳瓨" name="manual">
- <div class="search_form">
- <div>
- <span class="search_title ml10">鍏ュ簱鏃ユ湡锛�</span>
- <el-date-picker
- v-model="searchForm.timeStr"
- type="date"
- placeholder="璇烽�夋嫨鏃ユ湡"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- clearable
- @change="handleQuery"
- />
- <span class="search_title ml10">浜у搧澶х被锛�</span>
- <el-input
- v-model="searchForm.productCategory"
- style="width: 240px"
- placeholder="璇疯緭鍏�"
- clearable
- />
- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
- </div>
- <div>
- <el-button @click="handleOut">瀵煎嚭</el-button>
-<!-- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>-->
- </div>
- </div>
- <div class="table_list">
- <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
- :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%"
- :row-class-name="tableRowClassName"
- :summary-method="summarizeMainTable" height="calc(100vh - 18.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="inboundDate" width="100" show-overflow-tooltip />
- <el-table-column label="鎵规鍙�" prop="code" width="130" show-overflow-tooltip />
- <el-table-column label="浜у搧澶х被" prop="productCategory" show-overflow-tooltip />
- <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" show-overflow-tooltip />
- <el-table-column label="鍗曚綅" prop="unit" width="80" show-overflow-tooltip />
- <el-table-column label="鐗╁搧绫诲瀷" prop="itemType" width="120" show-overflow-tooltip />
- <el-table-column label="宸插嚭搴撴暟閲�" prop="totalInboundNum" width="100" show-overflow-tooltip />
- <el-table-column label="鍓╀綑搴撳瓨" prop="inboundNum0" width="100" show-overflow-tooltip />
- <el-table-column label="鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" width="150"></el-table-column>
- <el-table-column label="鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" width="150"></el-table-column>
- <el-table-column fixed="right" label="鎿嶄綔" width="100" align="center">
- <template #default="scope">
- <el-button link type="primary" size="small" @click="openForm('edit', scope.row);">缂栬緫</el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
- :page="page.current" :limit="page.size" @pagination="paginationChange" />
- </div>
</el-tab-pane>
</el-tabs>
@@ -177,15 +122,6 @@
@submit="submitForm"
@close="closeDia"
/>
-
- <!-- 鏉愭枡搴撳瓨寮规 -->
- <FormDiaManual
- v-model:dialogFormVisible="manualDialogVisible"
- :operationType="operationType"
- :formData="form"
- @submit="submitForm"
- @close="closeDia"
- />
</div>
</template>
@@ -199,17 +135,15 @@
import {
getStockManagePage,
getStockManagePageByProduction,
- getStockManagePageByCustom,
delStockManage,
} from "@/api/inventoryManagement/stockManage.js";
import {
updateManagement, updateManagementByCustom, updateStockIn
} from "@/api/inventoryManagement/stockIn.js";
-// 瀵煎叆涓変釜鐙珛鐨勫脊妗嗙粍浠�
+// 瀵煎叆涓や釜鐙珛鐨勫脊妗嗙粍浠�
import FormDiaProduction from './components/FormDiaProduction.vue'
import FormDiaPurchase from './components/FormDiaPurchase.vue'
-import FormDiaManual from './components/FormDiaManual.vue'
const userStore = useUserStore()
const { proxy } = getCurrentInstance()
@@ -232,17 +166,16 @@
const operationType = ref('')
const activeTab = ref('production')
-// 涓変釜鐙珛鐨勫脊妗嗘樉绀虹姸鎬�
+// 寮规鏄剧ず鐘舵��
const productionDialogVisible = ref(false)
const purchaseDialogVisible = ref(false)
-const manualDialogVisible = ref(false)
const data = reactive({
searchForm: {
// supplierName: '',
productCategory:'',
customerName: '',
- timeStr: getCurrentDate(),
+ timeStr: '',
},
form: {
supplierId: null,
@@ -314,14 +247,9 @@
const getList = () => {
tableLoading.value = true
const params = buildQueryParams()
- let apiCall
- if (activeTab.value === 'production') {
- apiCall = getStockManagePageByProduction(params)
- } else if (activeTab.value === 'manual') {
- apiCall = getStockManagePageByCustom(params)
- } else {
- apiCall = getStockManagePage(params)
- }
+ const apiCall = activeTab.value === 'production'
+ ? getStockManagePageByProduction(params)
+ : getStockManagePage(params)
apiCall.then(res => {
tableLoading.value = false
tableData.value = res.data.records
@@ -340,10 +268,6 @@
item.totalPrice = (unitPrice * remainingStock).toFixed(2)
} else if (activeTab.value === 'purchase') {
// 鍘熸枡搴撳瓨锛氬惈绋庢�讳环 = 鍚◣鍗曚环 脳 鍓╀綑搴撳瓨
- const taxInclusiveUnitPrice = parseFloat(item.taxInclusiveUnitPrice) || 0
- item.taxInclusiveTotalPrice = (taxInclusiveUnitPrice * remainingStock).toFixed(2)
- } else if (activeTab.value === 'manual') {
- // 鏉愭枡搴撳瓨锛氬惈绋庢�讳环 = 鍚◣鍗曚环 脳 鍓╀綑搴撳瓨
const taxInclusiveUnitPrice = parseFloat(item.taxInclusiveUnitPrice) || 0
item.taxInclusiveTotalPrice = (taxInclusiveUnitPrice * remainingStock).toFixed(2)
}
@@ -421,8 +345,6 @@
productionDialogVisible.value = true
} else if (activeTab.value === 'purchase') {
purchaseDialogVisible.value = true
- } else if (activeTab.value === 'manual') {
- manualDialogVisible.value = true
}
}
@@ -440,9 +362,6 @@
} else if (activeTab.value === 'purchase') {
// 鍘熸枡搴撳瓨锛氱Щ闄ゅ惈绋庢�讳环瀛楁
delete submitData.taxInclusiveTotalPrice
- } else if (activeTab.value === 'manual') {
- // 鏉愭枡搴撳瓨锛氱Щ闄ゅ惈绋庢�讳环瀛楁
- delete submitData.taxInclusiveTotalPrice
}
// 绉婚櫎鍏朵粬鍙兘鐨勬�讳环瀛楁
@@ -455,9 +374,6 @@
if (activeTab.value === 'production') {
// 鎴愬搧搴撳瓨浣跨敤 updateManagement 鎺ュ彛
apiCall = updateManagement(submitData)
- } else if (activeTab.value === 'manual') {
- // 鏉愭枡搴撳瓨浣跨敤 updateManagementByCustom 鎺ュ彛
- apiCall = updateManagementByCustom(submitData)
} else {
// 鍘熸枡搴撳瓨浣跨敤 updateManagementByCustom 鎺ュ彛
apiCall = updateManagementByCustom(submitData)
@@ -501,7 +417,6 @@
proxy.resetForm("formRef")
productionDialogVisible.value = false
purchaseDialogVisible.value = false
- manualDialogVisible.value = false
}
// 瀵煎嚭
@@ -519,8 +434,6 @@
let exportUrl = "/stockin/exportCopy"
if (activeTab.value === 'production') {
exportUrl = "/stockin/exportCopyOne"
- } else if (activeTab.value === 'manual') {
- exportUrl = "/stockin/exportCopyTwo"
}
proxy.download(exportUrl, exportParams, '搴撳瓨淇℃伅.xlsx')
}).catch(() => {
--
Gitblit v1.9.3