From 2fb38b2d2d005c0ff524b619a529fee1ca151095 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期二, 21 四月 2026 16:49:05 +0800
Subject: [PATCH] 审批人

---
 src/pages/equipmentManagement/ledger/detail.vue |  250 ++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 184 insertions(+), 66 deletions(-)

diff --git a/src/pages/equipmentManagement/ledger/detail.vue b/src/pages/equipmentManagement/ledger/detail.vue
index 70db8b2..5cbff67 100644
--- a/src/pages/equipmentManagement/ledger/detail.vue
+++ b/src/pages/equipmentManagement/ledger/detail.vue
@@ -1,12 +1,30 @@
 <template>
-	<view class="equipment-detail">
+	<view class="account-detail">
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
 		<PageHeader title="璁惧鍙拌处璇︽儏" @back="goBack" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<u-form @submit="sendForm" ref="formRef" :rules="formRules" label-width="110">
+		<u-form @submit="sendForm" ref="formRef" :model="form" :rules="formRules" label-width="110">
 			<!-- 鍩烘湰淇℃伅 -->
 			<u-cell-group title="鍩烘湰淇℃伅">
+				<u-form-item label="宸ュ簭" prop="productProcessId" required border-bottom>
+					<u-input
+						v-model="form.productProcessName"
+						placeholder="璇烽�夋嫨宸ュ簭"
+						readonly
+						@click="showProcessPicker = true"
+					/>
+					<template #right>
+						<u-icon name="arrow-right" @click="showProcessPicker = true"></u-icon>
+					</template>
+					<up-action-sheet
+						:show="showProcessPicker"
+						:actions="processActionList"
+						title="閫夋嫨宸ュ簭"
+						@select="onProcessSelect"
+						@close="showProcessPicker = false"
+					/>
+				</u-form-item>
 				<u-form-item label="璁惧鍚嶇О" prop="deviceName" required border-bottom>
 					<u-input
 						v-model="form.deviceName"
@@ -22,13 +40,13 @@
 						clearable
 					/>
 				</u-form-item>
-				<u-form-item label="璁惧鍝佺墝" prop="deviceBrand" required border-bottom>
+				<!-- <u-form-item label="璁惧鍝佺墝" prop="deviceBrand" required border-bottom>
 					<u-input
 						v-model="form.deviceBrand"
 						placeholder="璇疯緭鍏ヨ澶囧搧鐗�"
 						clearable
 					/>
-				</u-form-item>
+				</u-form-item> -->
 				<u-form-item label="渚涘簲鍟�" prop="supplierName" required border-bottom>
 					<u-input
 						v-model="form.supplierName"
@@ -36,13 +54,13 @@
 						clearable
 					/>
 				</u-form-item>
-				<u-form-item label="瀛樻斁浣嶇疆" prop="storageLocation" required border-bottom>
+				<!-- <u-form-item label="瀛樻斁浣嶇疆" prop="storageLocation" required border-bottom>
 					<u-input
 						v-model="form.storageLocation"
 						placeholder="璇疯緭鍏ュ瓨鏀句綅缃�"
 						clearable
 					/>
-				</u-form-item>
+				</u-form-item> -->
 				<u-form-item label="鍗曚綅" prop="unit" required border-bottom>
 					<u-input
 						v-model="form.unit"
@@ -50,13 +68,13 @@
 						clearable
 					/>
 				</u-form-item>
-				<u-form-item label="鍚敤鎶樻棫" prop="enableDepreciation" required border-bottom>
+				<!-- <u-form-item label="鍚敤鎶樻棫" prop="enableDepreciation" required border-bottom>
 					<u-switch
 						v-model="form.enableDepreciation"
 						:active-value="true"
 						:inactive-value="false"
 					/>
-				</u-form-item>
+				</u-form-item> -->
 				<u-form-item label="鏁伴噺" prop="number" required border-bottom>
 					<u-input
 						v-model="form.number"
@@ -149,6 +167,7 @@
 import { onShow } from '@dcloudio/uni-app';
 import PageHeader from '@/components/PageHeader.vue';
 import { getLedgerById, addLedger, editLedger } from '@/api/equipmentManagement/ledger';
+import { list as getProductProcessList } from '@/api/qualityManagement/materialInspection.js';
 import dayjs from "dayjs";
 import {
 	calculateTaxIncludeTotalPrice,
@@ -172,11 +191,19 @@
 const showDate = ref(false);
 const pickerDateValue = ref(Date.now());
 const showTaxRatePicker = ref(false);
+const showProcessPicker = ref(false);
 const taxRateActionList = ref([
   { name: '1', value: 1 },
   { name: '6', value: 6 },
   { name: '13', value: 13 }
 ]);
+const processList = ref([]);
+const processActionList = computed(() =>
+  (processList.value || []).map((item) => ({
+    name: item.name,
+    value: item.id
+  }))
+);
 
 // 琛ㄥ崟楠岃瘉瑙勫垯
 const formRules = {
@@ -186,9 +213,47 @@
 	supplierName: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
 	storageLocation: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
 	unit: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
-	number: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
-	taxIncludingPriceUnit: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
-	taxRate: [{ required: true, trigger: "change", message: "璇疯緭鍏�" }],
+	productProcessId: [{ required: true, trigger: "change", message: "璇烽�夋嫨宸ュ簭" }],
+	// 鏁板瓧绫诲瀷瀛楁闇�瑕佺壒娈婂鐞嗭紝纭繚鏈夋暟鍊兼椂涓嶄細瑙﹀彂蹇呭~鏍¢獙
+	number: [{
+		required: true,
+		trigger: "blur",
+		message: "璇疯緭鍏�",
+		validator: (rule, value, callback) => {
+			// 瀵逛簬鏁板瓧绫诲瀷锛屾鏌ユ槸鍚︿负鏈夋晥鏁板瓧锛堝寘鎷�0锛�
+			if (value !== undefined && value !== null && value !== '' && !isNaN(value)) {
+				callback();
+			} else {
+				callback(new Error('璇疯緭鍏ユ暟閲�'));
+			}
+		}
+	}],
+	taxIncludingPriceUnit: [{
+		required: true,
+		trigger: "blur",
+		message: "璇疯緭鍏�",
+		validator: (rule, value, callback) => {
+			// 瀵逛簬鏁板瓧绫诲瀷锛屾鏌ユ槸鍚︿负鏈夋晥鏁板瓧锛堝寘鎷�0锛�
+			if (value !== undefined && value !== null && value !== '' && !isNaN(value)) {
+				callback();
+			} else {
+				callback(new Error('璇疯緭鍏ュ惈绋庡崟浠�'));
+			}
+		}
+	}],
+	taxRate: [{
+		required: true,
+		trigger: "change",
+		message: "璇烽�夋嫨",
+		validator: (rule, value, callback) => {
+			// 妫�鏌ョ◣鐜囨槸鍚︿负鏈夋晥鏁板瓧
+			if (value !== undefined && value !== null && value !== '' && !isNaN(value)) {
+				callback();
+			} else {
+				callback(new Error('璇烽�夋嫨绋庣巼'));
+			}
+		}
+	}],
 	createTime: [{ required: true, trigger: "change", message: "璇烽�夋嫨" }],
 };
 
@@ -201,6 +266,8 @@
 	storageLocation: undefined, // 瀛樻斁浣嶇疆
 	unit: undefined, // 鍗曚綅
 	enableDepreciation: false, // 鍚敤鎶樻棫
+	productProcessId: undefined, // 宸ュ簭ID
+	productProcessName: undefined, // 宸ュ簭鍚嶇О
 	number: undefined, // 鏁伴噺
 	taxIncludingPriceUnit: undefined, // 鍚◣鍗曚环
 	taxIncludingPriceTotal: undefined, // 鍚◣鎬讳环
@@ -218,6 +285,8 @@
 	}
 	try {
 		const { code, data } = await getLedgerById(id);
+		console.log(data);
+		
 		if (code == 200) {
 			form.value.deviceName = data.deviceName;
 			form.value.deviceModel = data.deviceModel;
@@ -226,12 +295,22 @@
 			form.value.storageLocation = data.storageLocation || '';
 			form.value.unit = data.unit;
 			form.value.enableDepreciation = !!data.enableDepreciation;
+			form.value.productProcessId = data.productProcessId;
+			form.value.productProcessName =
+				data.productProcessName ||
+				processList.value.find((item) => item.id == data.productProcessId)?.name ||
+				'';
 			form.value.number = data.number;
 			form.value.taxIncludingPriceUnit = data.taxIncludingPriceUnit;
 			form.value.taxIncludingPriceTotal = data.taxIncludingPriceTotal;
 			form.value.taxRate = data.taxRate;
 			form.value.unTaxIncludingPriceTotal = data.unTaxIncludingPriceTotal;
 			form.value.createTime = data.createTime;
+			
+			// 鏁版嵁鍔犺浇瀹屾垚鍚庯紝閲嶇疆琛ㄥ崟楠岃瘉鐘舵��
+			setTimeout(() => {
+				clearValidate();
+			}, 100);
 		}
 	} catch (e) {
 		showToast('鑾峰彇璇︽儏澶辫触');
@@ -240,11 +319,12 @@
 
 // 鏁板璁$畻
 const mathNum = () => {
-	if (!form.value.taxIncludingPriceUnit) {
+	// 鍙湁鍦ㄦ柊澧炴ā寮忔垨鑰呭瓧娈电‘瀹炰负绌烘椂鎵嶆樉绀烘彁绀�
+	if (operationType.value !== 'edit' || (form.value.taxIncludingPriceUnit === undefined || form.value.taxIncludingPriceUnit === '')) {
 		showToast("璇疯緭鍏ュ崟浠�");
 		return;
 	}
-	if (!form.value.number) {
+	if (operationType.value !== 'edit' || (form.value.number === undefined || form.value.number === '')) {
 		showToast("璇疯緭鍏ユ暟閲�");
 		return;
 	}
@@ -265,47 +345,62 @@
 	formRef.value?.clearValidate();
 };
 
-// 閲嶇疆琛ㄥ崟鏁版嵁鍜屾牎楠岀姸鎬�
-const resetForm = () => {
-	form.value = {
-		deviceName: undefined,
-		deviceModel: undefined,
-		deviceBrand: undefined,
-		supplierName: undefined,
-		storageLocation: undefined,
-		unit: undefined,
-		enableDepreciation: false,
-		number: undefined,
-		taxIncludingPriceUnit: undefined,
-		taxIncludingPriceTotal: undefined,
-		taxRate: undefined,
-		unTaxIncludingPriceTotal: undefined,
-		createTime: dayjs().format("YYYY-MM-DD"),
-	};
-};
-
-const resetFormAndValidate = () => {
-	resetForm();
-	clearValidate();
-};
-
 // 鎻愪氦琛ㄥ崟
 const sendForm = async () => {
 	try {
-		// 鎵嬪姩楠岃瘉琛ㄥ崟
-		await formRef.value?.validate();
+		// 妫�鏌ュ繀濉瓧娈�
+		let isValid = true;
+		let errorMessage = '';
+		
+		// 妫�鏌ユ枃鏈被鍨嬪繀濉瓧娈�
+		if (!form.value.deviceName) {
+			isValid = false;
+			errorMessage = '璇疯緭鍏ヨ澶囧悕绉�';
+		} else if (!form.value.deviceModel) {
+			isValid = false;
+			errorMessage = '璇疯緭鍏ヨ鏍煎瀷鍙�';
+		} else if (!form.value.supplierName) {
+			isValid = false;
+			errorMessage = '璇疯緭鍏ヤ緵搴斿晢';
+		} else if (!form.value.unit) {
+			isValid = false;
+			errorMessage = '璇疯緭鍏ュ崟浣�';
+		} else if (!form.value.productProcessId) {
+			isValid = false;
+			errorMessage = '璇烽�夋嫨宸ュ簭';
+		}
+		
+		// 妫�鏌ユ暟瀛楃被鍨嬪繀濉瓧娈�
+		else if (form.value.number === undefined || form.value.number === null || form.value.number === '' || isNaN(form.value.number)) {
+			isValid = false;
+			errorMessage = '璇疯緭鍏ユ暟閲�';
+		} else if (form.value.taxIncludingPriceUnit === undefined || form.value.taxIncludingPriceUnit === null || form.value.taxIncludingPriceUnit === '' || isNaN(form.value.taxIncludingPriceUnit)) {
+			isValid = false;
+			errorMessage = '璇疯緭鍏ュ惈绋庡崟浠�';
+		} else if (form.value.taxRate === undefined || form.value.taxRate === null || form.value.taxRate === '' || isNaN(form.value.taxRate)) {
+			isValid = false;
+			errorMessage = '璇烽�夋嫨绋庣巼';
+		} else if (!form.value.createTime || form.value.createTime.trim() === '') {
+			isValid = false;
+			errorMessage = '璇烽�夋嫨褰曞叆鏃ユ湡';
+		}
+		
+		// 濡傛灉楠岃瘉澶辫触锛屾樉绀洪敊璇彁绀�
+		if (!isValid) {
+			showToast(errorMessage);
+			return;
+		}
+		
+		// 楠岃瘉閫氳繃锛屾樉绀烘彁浜や腑鎻愮ず
+		showToast('姝e湪鎻愪氦琛ㄥ崟...');
 		
 		loading.value = true;
 		const id = getPageId();
 		
 		// 鍑嗗鎻愪氦鏁版嵁锛宑reateTime 鍔犱笂褰撳墠鏃跺垎绉�
 		const submitData = { ...form.value };
-		if (submitData.createTime && !submitData.createTime.includes(':')) {
-			// 濡傛灉 createTime 鍙寘鍚棩鏈燂紝娣诲姞褰撳墠鏃跺垎绉�
-			submitData.createTime = submitData.createTime + ' ' + dayjs().format('HH:mm:ss');
-		}
 		
-		const { code } = id
+		const { code, res } = id
 			? await editLedger({ id: id, ...submitData })
 			: await addLedger(submitData);
 		
@@ -316,47 +411,52 @@
 			}, 1500);
 		} else {
 			loading.value = false;
+			console.log(res);
 		}
 	} catch (e) {
 		loading.value = false;
-		showToast('琛ㄥ崟楠岃瘉澶辫触');
+		showToast('鎻愪氦澶辫触');
 	}
 };
 
 // 杩斿洖涓婁竴椤�
 const goBack = () => {
+	// 浣跨敤鍚庢竻闄torage涓殑ID锛岄伩鍏嶆暟鎹畫鐣�
+			uni.removeStorageSync('ledgerId');
 	uni.navigateBack();
 };
 
 // 鑾峰彇椤甸潰鍙傛暟
 const getPageParams = () => {
-	const pages = getCurrentPages();
-	const currentPage = pages[pages.length - 1];
-	const options = currentPage.options;
-	
-	if (options.id) {
-		// 缂栬緫妯″紡锛岃幏鍙栬鎯�
-		loadForm(options.id);
-	} else {
-		// 鏂板妯″紡
+	try {
+		// 浼樺厛浠巗torage涓幏鍙朓D
+		const ledgerId = uni.getStorageSync('ledgerId');
+		
+		if (ledgerId) {
+			// 缂栬緫妯″紡锛岃幏鍙栬鎯�
+			loadForm(ledgerId);
+		} else {
+			// 鏂板妯″紡
+			operationType.value = 'add';
+		}
+	} catch (e) {
 		operationType.value = 'add';
 	}
 };
 
 // 鑾峰彇椤甸潰ID
 const getPageId = () => {
-	const pages = getCurrentPages();
-	const currentPage = pages[pages.length - 1];
-	const options = currentPage.options;
-	return options.id;
-};
-
-
-
-// 纭绋庣巼閫夋嫨
-const onTaxRateConfirm = (e) => {
-	form.value.taxRate = e.value;
-	mathNum(); // 閲嶆柊璁$畻
+	try {
+		// 浼樺厛浠巗torage涓幏鍙朓D
+		const ledgerId = uni.getStorageSync('ledgerId');
+		
+		if (ledgerId) {
+			return ledgerId;
+		}
+	} catch (e) {
+		console.error('鑾峰彇椤甸潰ID鍑洪敊:', e);
+	}
+	return null;
 };
 
 // 閫夋嫨绋庣巼
@@ -364,6 +464,23 @@
 	form.value.taxRate = e.value;
 	showTaxRatePicker.value = false;
 	mathNum(); // 閲嶆柊璁$畻
+};
+
+// 鑾峰彇宸ュ簭鍒楄〃
+const getProcessList = async () => {
+	try {
+		const res = await getProductProcessList();
+		processList.value = res?.data || [];
+	} catch (e) {
+		processList.value = [];
+	}
+};
+
+// 閫夋嫨宸ュ簭
+const onProcessSelect = (e) => {
+	form.value.productProcessId = e.value;
+	form.value.productProcessName = e.name;
+	showProcessPicker.value = false;
 };
 
 // 鏄剧ず鏃ユ湡閫夋嫨鍣�
@@ -388,6 +505,7 @@
 
 onMounted(() => {
 	// 椤甸潰鍔犺浇鏃惰幏鍙栧弬鏁�
+	getProcessList();
 	getPageParams();
 });
 </script>

--
Gitblit v1.9.3