From 50b6007b336a65b7deb6c77c9fdc608865067608 Mon Sep 17 00:00:00 2001
From: 张诺 <2864490065@qq.com>
Date: 星期五, 25 七月 2025 16:31:57 +0800
Subject: [PATCH] 昭德改善销售数量
---
src/views/warehouseManagement/index.vue | 5
src/views/salesOutbound/index.vue | 12 +-
src/views/equipment/management/mould/equipmentRequisitionDialog.vue | 169 +++++++++++++++++++++++++++--------------
src/views/salesOutbound/components/formDia.vue | 2
4 files changed, 121 insertions(+), 67 deletions(-)
diff --git a/src/views/equipment/management/mould/equipmentRequisitionDialog.vue b/src/views/equipment/management/mould/equipmentRequisitionDialog.vue
index b0086e4..9abe870 100644
--- a/src/views/equipment/management/mould/equipmentRequisitionDialog.vue
+++ b/src/views/equipment/management/mould/equipmentRequisitionDialog.vue
@@ -1,7 +1,9 @@
<template>
<el-dialog
v-model="visible"
- :title="isReturnMode ? '璁惧褰掕繕' : (isEdit ? '缂栬緫璁惧棰嗙敤' : '鏂板璁惧棰嗙敤')"
+ :title="
+ isReturnMode ? '璁惧褰掕繕' : isEdit ? '缂栬緫璁惧棰嗙敤' : '鏂板璁惧棰嗙敤'
+ "
width="600px"
@close="handleClose"
>
@@ -35,7 +37,21 @@
/>
</el-select>
</el-form-item>
- <el-form-item label="璁惧搴撳瓨" prop="equipmentStock" v-if="!isReturnMode && formData.status !== 2">
+ <el-form-item label="鏄惁涓烘秷鑰楀搧" prop="isConsumables">
+ <el-select
+ :model-value="currentConsumables"
+ placeholder="璇烽�夋嫨鏄惁涓鸿�楁潗绫诲瀷"
+ :disabled="true"
+ >
+ <el-option label="鏄�" :value="true" />
+ <el-option label="鍚�" :value="false" />
+ </el-select>
+ </el-form-item>
+ <el-form-item
+ label="璁惧搴撳瓨"
+ prop="equipmentStock"
+ v-if="!isReturnMode && formData.status !== 2"
+ >
<el-input
:value="
equipmentList.find((item) => item.id == form.equipmentId)
@@ -52,14 +68,22 @@
style="width: 100%"
/>
</el-form-item>
- <el-form-item label="宸插綊杩樻暟閲�" prop="returnedQuantity" v-if="isReturnMode">
+ <el-form-item
+ label="宸插綊杩樻暟閲�"
+ prop="returnedQuantity"
+ v-if="isReturnMode"
+ >
<el-input
:value="formData.totalReturnNo || 0"
disabled
style="width: 100%"
/>
</el-form-item>
- <el-form-item label="棰嗙敤鏁伴噺" prop="usageQuantity" v-if="!isReturnMode && formData.status !== 2">
+ <el-form-item
+ label="棰嗙敤鏁伴噺"
+ prop="usageQuantity"
+ v-if="!isReturnMode && formData.status !== 2"
+ >
<el-input-number
v-model="form.usageQuantity"
:min="1"
@@ -73,7 +97,11 @@
>(鏈�澶歿{ maxQuantity }}鍙�)</span
>
</el-form-item>
- <el-form-item label="鏈褰掕繕鏁伴噺" prop="returnQuantity" v-if="isReturnMode">
+ <el-form-item
+ label="鏈褰掕繕鏁伴噺"
+ prop="returnQuantity"
+ v-if="isReturnMode"
+ >
<el-input-number
v-model="form.returnQuantity"
:min="1"
@@ -86,21 +114,26 @@
v-if="remainingReturnQuantity > 0"
>(鏈�澶歿{ remainingReturnQuantity }}鍙�)</span
>
- <span
- style="color: #67c23a; font-size: 12px; margin-left: 8px"
- v-else
+ <span style="color: #67c23a; font-size: 12px; margin-left: 8px" v-else
>(宸插叏閮ㄥ綊杩�)</span
>
<!-- 褰掕繕瀹屾垚鎻愮ず -->
- <div
- v-if="remainingReturnQuantity > 0 && form.returnQuantity === remainingReturnQuantity"
+ <div
+ v-if="
+ remainingReturnQuantity > 0 &&
+ form.returnQuantity === remainingReturnQuantity
+ "
style="color: #67c23a; font-size: 12px; margin-top: 4px"
>
馃挕 鎻愮ず锛氭湰娆″綊杩樺悗灏嗗畬鎴愬叏閮ㄥ綊杩�
</div>
</el-form-item>
<!-- 浣跨敤寮�濮嬫椂闂� - 鍙湪闈炲綊杩樻ā寮忔樉绀� -->
- <el-form-item label="浣跨敤寮�濮嬫椂闂�" prop="usageStartTime" v-if="!isReturnMode">
+ <el-form-item
+ label="浣跨敤寮�濮嬫椂闂�"
+ prop="usageStartTime"
+ v-if="!isReturnMode"
+ >
<el-date-picker
v-model="form.usageStartTime"
type="datetime"
@@ -111,7 +144,7 @@
:disabled="isViewMode"
/>
</el-form-item>
-
+
<!-- 褰掕繕缁撴潫鏃堕棿 - 鍙湪褰掕繕妯″紡鏄剧ず -->
<el-form-item label="褰掕繕鏃堕棿" prop="returnTime" v-if="isReturnMode">
<el-date-picker
@@ -166,7 +199,6 @@
ElMessage.error("鑾峰彇璁惧鍒楄〃澶辫触");
}
};
-
const props = defineProps({
modelValue: Boolean,
formData: {
@@ -177,6 +209,23 @@
type: String,
default: "add",
},
+});
+
+// 榛樿琛ㄥ崟鍒濆鍊�
+const defaultForm = {
+ userId: "",
+ equipmentId: "",
+ usageQuantity: 1,
+ usageStartTime: "",
+ returnQuantity: 1,
+ returnTime: "",
+ remarks: "",
+};
+const form = ref({ ...defaultForm });
+
+const currentConsumables = computed(() => {
+ const eq = equipmentList.value.find(item => item.id == form.value.equipmentId);
+ return eq ? !!eq.isConsumables : false;
});
const maxQuantity = computed(() => {
if (!form.value.equipmentId) return 0;
@@ -192,10 +241,18 @@
get: () => props.modelValue,
set: (v) => emit("update:modelValue", v),
});
+
+// 鐩戝惉璁惧閫夋嫨鍙樺寲
+watch(
+ () => form.value.equipmentId,
+ (newId) => {
+ if (newId) {
+ const eq = equipmentList.value.find(item => item.id == newId);
+ }
+ }
+);
const isViewMode = computed(
- () =>
- props.addOrEdit === "view" ||
- props.addOrEdit === "viewRow"
+ () => props.addOrEdit === "view" || props.addOrEdit === "viewRow"
);
// 鍒ゆ柇鏄惁涓哄綊杩樻ā寮�
@@ -204,35 +261,23 @@
// 璁$畻鍓╀綑鍙綊杩樻暟閲�
const remainingReturnQuantity = computed(() => {
if (!isReturnMode.value || !props.formData.usageQuantity) return 0;
-
+
const totalUsageQuantity = props.formData.usageQuantity || 0; // 鎬讳娇鐢ㄦ暟閲�
const alreadyReturnedQuantity = props.formData.totalReturnNo || 0; // 宸插綊杩樻暟閲�
const remaining = totalUsageQuantity - alreadyReturnedQuantity; // 鍓╀綑鍙綊杩樻暟閲�
-
+
return Math.max(0, remaining); // 纭繚涓嶄负璐熸暟
});
const isEdit = computed(() => !!props.formData?.id);
const formRef = ref();
-// 榛樿琛ㄥ崟鍒濆鍊�
-const defaultForm = {
- userId: "",
- equipmentId: "",
- usageQuantity: 1,
- usageStartTime: "",
- returnQuantity: 1,
- returnTime: "",
- remarks: "",
-};
-const form = ref({ ...defaultForm });
-
// 鑾峰彇褰撳墠鏃ユ湡锛圷YYY-MM-DD鏍煎紡锛�
const getCurrentDate = () => {
const now = new Date();
const year = now.getFullYear();
- const month = String(now.getMonth() + 1).padStart(2, '0');
- const day = String(now.getDate()).padStart(2, '0');
+ const month = String(now.getMonth() + 1).padStart(2, "0");
+ const day = String(now.getDate()).padStart(2, "0");
return `${year}-${month}-${day}`;
};
@@ -246,12 +291,13 @@
(val) => {
if (val && Object.keys(val).length > 0) {
form.value = { ...val };
-
+
// 褰掕繕妯″紡鍒濆鍖�
if (isReturnMode.value) {
form.value.returnTime = getCurrentDate();
const maxReturnQuantity = remainingReturnQuantity.value;
- form.value.returnQuantity = maxReturnQuantity > 0 ? Math.min(1, maxReturnQuantity) : 0;
+ form.value.returnQuantity =
+ maxReturnQuantity > 0 ? Math.min(1, maxReturnQuantity) : 0;
}
} else {
form.value = { ...defaultForm };
@@ -279,7 +325,9 @@
if (remaining <= 0) {
callback(new Error("宸插叏閮ㄥ綊杩橈紝鏃犳硶缁х画褰掕繕"));
} else if (value > remaining) {
- callback(new Error(`褰掕繕鏁伴噺涓嶈兘澶т簬鍓╀綑鍙綊杩樻暟閲�(${remaining}鍙�)`));
+ callback(
+ new Error(`褰掕繕鏁伴噺涓嶈兘澶т簬鍓╀綑鍙綊杩樻暟閲�(${remaining}鍙�)`)
+ );
} else {
callback();
}
@@ -335,60 +383,63 @@
// 闃叉姈鍚庣殑鎻愪氦鏂规硶
const debouncedSubmit = debounce(handleSubmit, 800);
-function handleSubmit () {
+function handleSubmit() {
formRef.value.validate(async (valid) => {
if (!valid) return;
-
+
let submitData = { ...form.value };
-
+
// 褰掕繕妯″紡澶勭悊
if (isReturnMode.value) {
const currentReturnQuantity = form.value.returnQuantity;
const totalUsageQuantity = props.formData.usageQuantity;
const alreadyReturnedQuantity = props.formData.totalReturnNo || 0;
- const newTotalReturnedQuantity = alreadyReturnedQuantity + currentReturnQuantity;
-
+ const newTotalReturnedQuantity =
+ alreadyReturnedQuantity + currentReturnQuantity;
+
// 鍒ゆ柇鏄惁鍏ㄩ儴褰掕繕瀹屾垚
let equipmentStatus = 2; // 榛樿涓洪儴鍒嗗綊杩�
let isFullyReturned = newTotalReturnedQuantity >= totalUsageQuantity;
-
+
if (isFullyReturned) {
equipmentStatus = 3; // 鍏ㄩ儴褰掕繕瀹屾垚
-
+
// 鍏ㄩ儴褰掕繕鏃剁殑纭鎻愮ず
try {
await ElMessageBox.confirm(
- `纭灏嗚澶�"${props.formData.equipmentName || '鏈煡璁惧'}"鍏ㄩ儴褰掕繕鍚楋紵褰掕繕鍚庤澶囩姸鎬佸皢鍙樹负"宸插綊杩�"銆俙,
- '纭鍏ㄩ儴褰掕繕',
+ `纭灏嗚澶�"${
+ props.formData.equipmentName || "鏈煡璁惧"
+ }"鍏ㄩ儴褰掕繕鍚楋紵褰掕繕鍚庤澶囩姸鎬佸皢鍙樹负"宸插綊杩�"銆俙,
+ "纭鍏ㄩ儴褰掕繕",
{
- confirmButtonText: '纭褰掕繕',
- cancelButtonText: '鍙栨秷',
- type: 'success',
+ confirmButtonText: "纭褰掕繕",
+ cancelButtonText: "鍙栨秷",
+ type: "success",
}
);
} catch (error) {
- if (error === 'cancel') {
- ElMessage.info('宸插彇娑堝綊杩樻搷浣�');
+ if (error === "cancel") {
+ ElMessage.info("宸插彇娑堝綊杩樻搷浣�");
return;
}
}
-
- console.log('璁惧褰掕繕瀹屾垚:', {
+
+ console.log("璁惧褰掕繕瀹屾垚:", {
璁惧鍚嶇О: props.formData.equipmentName,
鎬讳娇鐢ㄦ暟閲�: totalUsageQuantity,
鏂扮殑褰掕繕鎬绘暟: newTotalReturnedQuantity,
- 鐘舵��: '宸插叏閮ㄥ綊杩�'
+ 鐘舵��: "宸插叏閮ㄥ綊杩�",
});
} else {
- console.log('璁惧閮ㄥ垎褰掕繕:', {
+ console.log("璁惧閮ㄥ垎褰掕繕:", {
璁惧鍚嶇О: props.formData.equipmentName,
鎬讳娇鐢ㄦ暟閲�: totalUsageQuantity,
宸插綊杩樻暟閲�: newTotalReturnedQuantity,
鍓╀綑鏈綊杩�: totalUsageQuantity - newTotalReturnedQuantity,
- 鐘舵��: '閮ㄥ垎褰掕繕'
+ 鐘舵��: "閮ㄥ垎褰掕繕",
});
}
-
+
submitData = {
...props.formData,
totalReturnNo: newTotalReturnedQuantity,
@@ -396,22 +447,22 @@
returnTime: form.value.returnTime,
equipmentStatus: equipmentStatus,
remarks: form.value.remarks,
- usageQuantity: totalUsageQuantity
+ usageQuantity: totalUsageQuantity,
};
}
try {
- let {code,data} = await addOrEditUsageRecord(submitData);
+ let { code, data } = await addOrEditUsageRecord(submitData);
if (code !== 200) {
ElMessage.error(data.msg || "鎿嶄綔澶辫触");
return;
}
- if(code == 200 && data == 1){
+ if (code == 200 && data == 1) {
emit("submit", submitData);
}
handleClose();
} catch (error) {
- console.error('鎻愪氦澶辫触:', error);
+ console.error("鎻愪氦澶辫触:", error);
ElMessage.error("鎿嶄綔澶辫触锛岃绋嶅悗鍐嶈瘯");
}
});
diff --git a/src/views/salesOutbound/components/formDia.vue b/src/views/salesOutbound/components/formDia.vue
index 03418fb..48a9b44 100644
--- a/src/views/salesOutbound/components/formDia.vue
+++ b/src/views/salesOutbound/components/formDia.vue
@@ -53,7 +53,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="搴撳瓨鏁伴噺" prop="inventoryQuantity">
- <el-input v-model="form.inventoryQuantity" placeholder="璇疯緭鍏ラ攢鍞暟閲�" maxlength="30" type="number" :disabled="operationType === 'view'"/>
+ <el-input v-model="form.inventoryQuantity" placeholder="璇疯緭鍏ラ攢鍞暟閲�" maxlength="30" type="number" :disabled="true"/>
</el-form-item>
</el-col>
<el-col :span="12">
diff --git a/src/views/salesOutbound/index.vue b/src/views/salesOutbound/index.vue
index 8704650..fef7e86 100644
--- a/src/views/salesOutbound/index.vue
+++ b/src/views/salesOutbound/index.vue
@@ -72,6 +72,7 @@
import {ref, reactive, onMounted} from "vue";
const { proxy } = getCurrentInstance()
import {Delete, Download, Plus} from "@element-plus/icons-vue";
+import { ElMessage } from "element-plus";
import ETable from "@/components/Table/ETable.vue";
import Pagination from "@/components/Pagination/index.vue";
import FormDia from "@/views/salesOutbound/components/formDia.vue";
@@ -97,7 +98,8 @@
{ prop: "saleQuantity", label: "閿�鍞暟閲�", minWidth: 120 },
{ prop: "salePrice", label: "閿�鍞崟浠�(鍚◣)", minWidth: 150 },
{ prop: "totalAmount", label: "閿�鍞�讳环(鍚◣)", minWidth: 120 },
- { prop: "freight", label: "杩愯垂", minWidth: 90 },
+ { prop: "salesFreight", label: "閿�鍞繍璐�", minWidth: 90 },
+ { prop: "purchasingFreight", label: "閲囪喘杩愯垂", minWidth: 90 },
{ prop: "taxCoal", label: "璐攢鐓ょ◣鐜�(%)", minWidth: 120 },
{ prop: "taxTrans", label: "杩愯緭绋庣巼(%)", minWidth: 120 },
{ prop: "grossProfit", label: "姣涘埄娑�", minWidth: 90 },
@@ -179,12 +181,12 @@
"鏁版嵁锛�"
)
.then((res) => {
- if (res) {
- ElMessage.success("姝e湪瀵煎嚭鏁版嵁锛岃绋嶅��...");
+ if (!res) return;
exportData(config.api, config.name);
- }
})
- .catch(() => {});
+ .catch(() => {
+ ElMessage.error("瀵煎嚭澶辫触锛岃閲嶈瘯");
+ });
};
const exportData = (api, name) => {
proxy.download(
diff --git a/src/views/warehouseManagement/index.vue b/src/views/warehouseManagement/index.vue
index 02d226f..32946d7 100644
--- a/src/views/warehouseManagement/index.vue
+++ b/src/views/warehouseManagement/index.vue
@@ -724,6 +724,7 @@
"鏁版嵁锛�"
)
.then((res) => {
+ console.log(res);
if (res) {
ElMessage.success("姝e湪瀵煎嚭鏁版嵁锛岃绋嶅��...");
exportData(config.api, config.name);
@@ -742,9 +743,9 @@
const mergeRows = (type, row) => {
getDropdownData();
coalPlanListOptions();
- if (type === "edit") {
+ if (type === "edit" || type === "view") {
mergeVisible.value = true;
- }
+ }
operationType.value = type;
if (type !== "merge") {
mergeForm.value = { ...row };
--
Gitblit v1.9.3