From e449a5408265e4bd1f6c66f5be28a42efac444ee Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期日, 20 九月 2026 15:22:46 +0800
Subject: [PATCH] 天津豹鸣app 1.需求修改

---
 src/pages/equipmentManagement/ledger/detail.vue |  272 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 248 insertions(+), 24 deletions(-)

diff --git a/src/pages/equipmentManagement/ledger/detail.vue b/src/pages/equipmentManagement/ledger/detail.vue
index 1b4ca9f..8a2925d 100644
--- a/src/pages/equipmentManagement/ledger/detail.vue
+++ b/src/pages/equipmentManagement/ledger/detail.vue
@@ -7,6 +7,21 @@
 		<u-form @submit="sendForm" ref="formRef" :model="form" :rules="formRules" label-width="110">
 			<!-- 鍩烘湰淇℃伅 -->
 			<u-cell-group title="鍩烘湰淇℃伅">
+				<u-form-item label="璁惧缂栧彿" prop="uniqueCode" border-bottom>
+					<u-input
+						v-model="form.uniqueCode"
+						:disabled="form.autoGenerateUniqueCode || operationType === 'edit'"
+						:placeholder="form.autoGenerateUniqueCode ? '淇濆瓨鍚庤嚜鍔ㄧ敓鎴�' : '璇疯緭鍏ヨ澶囩紪鍙�'"
+						clearable
+					/>
+				</u-form-item>
+				<u-form-item v-if="operationType !== 'edit'" label="鑷姩鐢熸垚缂栧彿" prop="autoGenerateUniqueCode" border-bottom>
+					<u-switch
+						v-model="form.autoGenerateUniqueCode"
+						:activeValue="true"
+						:inactiveValue="false"
+					/>
+				</u-form-item>
 				<u-form-item label="璁惧鍚嶇О" prop="deviceName" required border-bottom>
 					<u-input
 						v-model="form.deviceName"
@@ -22,13 +37,29 @@
 						clearable
 					/>
 				</u-form-item>
-				<!-- <u-form-item label="璁惧鍝佺墝" prop="deviceBrand" required border-bottom>
+				<u-form-item label="璁惧鍝佺墝" prop="deviceBrand" border-bottom>
 					<u-input
 						v-model="form.deviceBrand"
 						placeholder="璇疯緭鍏ヨ澶囧搧鐗�"
 						clearable
 					/>
-				</u-form-item> -->
+				</u-form-item>
+				<u-form-item label="璁惧绫诲瀷" prop="type" required border-bottom>
+					<FormPicker
+						v-model="form.type"
+						type="select"
+						title="閫夋嫨璁惧绫诲瀷"
+						:options="deviceTypeOptions"
+						placeholder="璇烽�夋嫨璁惧绫诲瀷"
+					/>
+				</u-form-item>
+				<u-form-item label="鍑哄巶缂栧彿" prop="factoryNumber" border-bottom>
+					<u-input
+						v-model="form.factoryNumber"
+						placeholder="璇疯緭鍏ュ嚭鍘傜紪鍙�"
+						clearable
+					/>
+				</u-form-item>
 				<u-form-item label="渚涘簲鍟�" prop="supplierName" required border-bottom>
 					<u-input
 						v-model="form.supplierName"
@@ -36,13 +67,27 @@
 						clearable
 					/>
 				</u-form-item>
-				<!-- <u-form-item label="瀛樻斁浣嶇疆" prop="storageLocation" required border-bottom>
+				<u-form-item label="瀛樻斁浣嶇疆" prop="storageLocation" border-bottom>
 					<u-input
 						v-model="form.storageLocation"
 						placeholder="璇疯緭鍏ュ瓨鏀句綅缃�"
 						clearable
 					/>
-				</u-form-item> -->
+				</u-form-item>
+				<u-form-item label="璐d换浜�" prop="responsiblePerson" border-bottom>
+					<u-input
+						v-model="form.responsiblePerson"
+						placeholder="璇疯緭鍏ヨ矗浠讳汉"
+						clearable
+					/>
+				</u-form-item>
+				<u-form-item label="寤烘。鏃ユ湡" prop="filingDate" border-bottom>
+					<FormPicker
+						v-model="form.filingDate"
+						type="date"
+						placeholder="璇烽�夋嫨寤烘。鏃ユ湡"
+					/>
+				</u-form-item>
 				<u-form-item label="鍗曚綅" prop="unit" required border-bottom>
 					<u-input
 						v-model="form.unit"
@@ -50,13 +95,6 @@
 						clearable
 					/>
 				</u-form-item>
-				<!-- <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 label="鏁伴噺" prop="number" required border-bottom>
 					<u-input
 						v-model="form.number"
@@ -122,7 +160,99 @@
 					</template>
 				</u-form-item>
 			</u-cell-group>
-		
+
+			<u-cell-group title="閲囪喘淇℃伅">
+				<u-form-item label="鍒堕�犲巶鍟�" prop="manufacturer" border-bottom>
+					<u-input
+						v-model="form.manufacturer"
+						placeholder="璇疯緭鍏ュ埗閫犲巶鍟�"
+						clearable
+					/>
+				</u-form-item>
+				<u-form-item label="璐疆鏃ユ湡" prop="purchaseDate" border-bottom>
+					<FormPicker
+						v-model="form.purchaseDate"
+						type="date"
+						placeholder="璇烽�夋嫨璐疆鏃ユ湡"
+					/>
+				</u-form-item>
+				<u-form-item label="璧勪骇鍘熷��" prop="originalAssetValue" border-bottom>
+					<u-input
+						v-model="form.originalAssetValue"
+						type="number"
+						placeholder="璇疯緭鍏ヨ祫浜у師鍊�"
+						clearable
+					/>
+				</u-form-item>
+			</u-cell-group>
+			<u-cell-group title="鎶�鏈弬鏁�">
+				<u-form-item label="涓昏鎶�鏈弬鏁�" prop="technicalParameters" border-bottom>
+					<up-textarea
+						v-model="form.technicalParameters"
+						placeholder="璇疯緭鍏ヤ富瑕佹妧鏈弬鏁�"
+						:maxlength="500"
+						count
+						auto-height
+					/>
+				</u-form-item>
+				<u-form-item label="涓昏鐢ㄩ��" prop="mainPurpose" border-bottom>
+					<up-textarea
+						v-model="form.mainPurpose"
+						placeholder="璇疯緭鍏ヤ富瑕佺敤閫�"
+						:maxlength="500"
+						count
+						auto-height
+					/>
+				</u-form-item>
+			</u-cell-group>
+			<u-cell-group title="杩愯绠$悊">
+				<u-form-item label="璁惧鐘舵��" prop="status" required border-bottom>
+					<FormPicker
+						v-model="form.status"
+						type="select"
+						title="閫夋嫨璁惧鐘舵��"
+						:options="statusOptions"
+						placeholder="璇烽�夋嫨璁惧鐘舵��"
+					/>
+				</u-form-item>
+				<u-form-item label="鍚敤鏃ユ湡" prop="activationDate" border-bottom>
+					<FormPicker
+						v-model="form.activationDate"
+						type="date"
+						placeholder="璇烽�夋嫨鍚敤鏃ユ湡"
+					/>
+				</u-form-item>
+				<u-form-item label="棰勮杩愯鏃堕棿" prop="planRuntimeTime" border-bottom>
+					<FormPicker
+						v-model="form.planRuntimeTime"
+						type="date"
+						placeholder="璇烽�夋嫨棰勮杩愯鏃堕棿"
+					/>
+				</u-form-item>
+				<u-form-item label="鍚敤鎶樻棫" prop="isDepr" border-bottom>
+					<u-switch
+						v-model="form.isDepr"
+						:activeValue="1"
+						:inactiveValue="2"
+					/>
+				</u-form-item>
+				<u-form-item v-if="form.isDepr === 1" label="姣忓勾鎶樻棫閲戦" prop="annualDepreciationAmount" border-bottom>
+					<u-input
+						v-model="form.annualDepreciationAmount"
+						type="number"
+						placeholder="璇疯緭鍏ユ瘡骞存姌鏃ч噾棰�"
+						clearable
+					/>
+				</u-form-item>
+				<u-form-item label="璁惧鍥剧墖" border-bottom>
+					<CommonUpload
+						v-model="imageFiles"
+						:maxCount="20"
+						accept="image"
+					/>
+				</u-form-item>
+			</u-cell-group>
+
 		<!-- 鎻愪氦鎸夐挳 -->
 		<view class="footer-btns">
 			<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
@@ -148,7 +278,10 @@
 import { ref, computed, onMounted } from 'vue';
 import { onShow } from '@dcloudio/uni-app';
 import PageHeader from '@/components/PageHeader.vue';
+import FormPicker from '@/components/FormPicker.vue';
+import CommonUpload from '@/components/CommonUpload.vue';
 import { getLedgerById, addLedger, editLedger } from '@/api/equipmentManagement/ledger';
+import { toFileList } from '@/utils/file';
 import dayjs from "dayjs";
 import {
 	calculateTaxIncludeTotalPrice,
@@ -182,9 +315,8 @@
 const formRules = {
 	deviceName: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
 	deviceModel: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
-	deviceBrand: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
+	type: [{ required: true, trigger: "change", message: "璇烽�夋嫨璁惧绫诲瀷" }],
 	supplierName: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
-	storageLocation: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
 	unit: [{ required: true, trigger: "blur", message: "璇疯緭鍏�" }],
 	// 鏁板瓧绫诲瀷瀛楁闇�瑕佺壒娈婂鐞嗭紝纭繚鏈夋暟鍊兼椂涓嶄細瑙﹀彂蹇呭~鏍¢獙
 	number: [{
@@ -227,23 +359,68 @@
 		}
 	}],
 	createTime: [{ required: true, trigger: "change", message: "璇烽�夋嫨" }],
+	status: [{ required: true, trigger: "change", message: "璇烽�夋嫨璁惧鐘舵��" }],
+	planRuntimeTime: [{ required: true, trigger: "change", message: "璇烽�夋嫨棰勮杩愯鏃堕棿" }],
 };
+
+// 璁惧绫诲瀷鍥哄畾閫夐」锛堜笌绠$悊绔竴鑷达紝鏃犳硶鍛戒腑鐨勫�间細鐢� FormPicker 鐨勯�夐」灞曠ず鍏滃簳锛�
+const deviceTypeOptions = ref([
+	{ name: '鐢熶骇璁惧', value: '鐢熶骇璁惧' },
+	{ name: '鍔炲叕璁惧', value: '鍔炲叕璁惧' },
+	{ name: '妫�娴嬭澶�', value: '妫�娴嬭澶�' },
+	{ name: '杩愯緭璁惧', value: '杩愯緭璁惧' },
+	{ name: '鍏朵粬璁惧', value: '鍏朵粬璁惧' },
+]);
+const statusOptions = ref([
+	{ name: '鍋滅敤', value: 0 },
+	{ name: '鍚敤', value: 1 },
+]);
 
 // 浣跨敤 ref 澹版槑琛ㄥ崟鏁版嵁
 const form = ref({
+	// 鍩烘湰淇℃伅
+	autoGenerateUniqueCode: true, // 鑷姩鐢熸垚缂栧彿
+	uniqueCode: undefined, // 璁惧缂栧彿
 	deviceName: undefined, // 璁惧鍚嶇О
 	deviceModel: undefined, // 瑙勬牸鍨嬪彿
 	deviceBrand: undefined, // 璁惧鍝佺墝
-	supplierName: undefined, // 渚涘簲鍟�
+	type: undefined, // 璁惧绫诲瀷
+	factoryNumber: undefined, // 鍑哄巶缂栧彿
 	storageLocation: undefined, // 瀛樻斁浣嶇疆
+	responsiblePerson: undefined, // 璐d换浜�
+	filingDate: dayjs().format("YYYY-MM-DD"), // 寤烘。鏃ユ湡
+	// 閲囪喘淇℃伅
+	supplierName: undefined, // 渚涘簲鍟�
+	manufacturer: undefined, // 鍒堕�犲巶鍟�
+	purchaseDate: undefined, // 璐疆鏃ユ湡
+	originalAssetValue: undefined, // 璧勪骇鍘熷��
 	unit: undefined, // 鍗曚綅
-	enableDepreciation: false, // 鍚敤鎶樻棫
-	number: undefined, // 鏁伴噺
+	number: 1, // 鏁伴噺
 	taxIncludingPriceUnit: undefined, // 鍚◣鍗曚环
 	taxIncludingPriceTotal: undefined, // 鍚◣鎬讳环
 	taxRate: undefined, // 绋庣巼
 	unTaxIncludingPriceTotal: undefined, // 涓嶅惈绋庢�讳环
+	// 鎶�鏈弬鏁�
+	technicalParameters: undefined, // 涓昏鎶�鏈弬鏁�
+	mainPurpose: undefined, // 涓昏鐢ㄩ��
+	// 杩愯绠$悊
+	status: 1, // 璁惧鐘舵�� 0鍋滅敤 1鍚敤
+	activationDate: undefined, // 鍚敤鏃ユ湡
+	planRuntimeTime: dayjs().format("YYYY-MM-DD"), // 棰勮杩愯鏃堕棿
+	isDepr: 2, // 鏄惁鍚敤鎶樻棫 1鏄� 2鍚�
+	annualDepreciationAmount: undefined, // 姣忓勾鎶樻棫閲戦
+	storageBlobDTOs: undefined, // 璁惧鍥剧墖锛堟彁浜わ級
+	storageBlobVOs: undefined, // 璁惧鍥剧墖锛堝洖鏄撅級
 	createTime: dayjs().format("YYYY-MM-DD"), // 褰曞叆鏃ユ湡
+});
+
+// 璁惧鍥剧墖锛欳ommonUpload 缁� modelValue锛屾敼鍔ㄦ椂鍚屾椂鍐欏洖鎻愪氦/鍥炴樉涓や釜瀛楁
+const imageFiles = computed({
+	get: () => form.value.storageBlobVOs || [],
+	set: val => {
+		form.value.storageBlobDTOs = val;
+		form.value.storageBlobVOs = val;
+	},
 });
 
 
@@ -258,20 +435,53 @@
 		console.log(data);
 		
 		if (code == 200) {
+			// 鍩烘湰淇℃伅
+			form.value.autoGenerateUniqueCode = false;
+			form.value.uniqueCode = data.uniqueCode;
 			form.value.deviceName = data.deviceName;
 			form.value.deviceModel = data.deviceModel;
 			form.value.deviceBrand = data.deviceBrand || '';
-			form.value.supplierName = data.supplierName;
+			form.value.type = data.type;
+			form.value.factoryNumber = data.factoryNumber;
 			form.value.storageLocation = data.storageLocation || '';
+			form.value.responsiblePerson = data.responsiblePerson;
+			form.value.filingDate = data.filingDate
+				? dayjs(data.filingDate).format("YYYY-MM-DD")
+				: undefined;
+
+			// 閲囪喘淇℃伅
+			form.value.supplierName = data.supplierName;
+			form.value.manufacturer = data.manufacturer;
+			form.value.purchaseDate = data.purchaseDate
+				? dayjs(data.purchaseDate).format("YYYY-MM-DD")
+				: undefined;
+			form.value.originalAssetValue = data.originalAssetValue;
 			form.value.unit = data.unit;
-			form.value.enableDepreciation = !!data.enableDepreciation;
 			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.technicalParameters = data.technicalParameters;
+			form.value.mainPurpose = data.mainPurpose;
+
+			// 杩愯绠$悊
+			form.value.status = data.status != null ? data.status : 1;
+			form.value.activationDate = data.activationDate
+				? dayjs(data.activationDate).format("YYYY-MM-DD")
+				: undefined;
+			form.value.planRuntimeTime = data.planRuntimeTime
+				? dayjs(data.planRuntimeTime).format("YYYY-MM-DD")
+				: undefined;
+			form.value.isDepr = data.isDepr != null ? data.isDepr : 2;
+			form.value.annualDepreciationAmount = data.annualDepreciationAmount;
+			form.value.storageBlobVOs = toFileList(data.storageBlobVOs);
+			form.value.storageBlobDTOs = form.value.storageBlobVOs;
+
 			form.value.createTime = data.createTime;
-			
+
 			// 鏁版嵁鍔犺浇瀹屾垚鍚庯紝閲嶇疆琛ㄥ崟楠岃瘉鐘舵��
 			setTimeout(() => {
 				clearValidate();
@@ -284,12 +494,11 @@
 
 // 鏁板璁$畻
 const mathNum = () => {
-	// 鍙湁鍦ㄦ柊澧炴ā寮忔垨鑰呭瓧娈电‘瀹炰负绌烘椂鎵嶆樉绀烘彁绀�
-	if (operationType.value !== 'edit' || (form.value.taxIncludingPriceUnit === undefined || form.value.taxIncludingPriceUnit === '')) {
+	if (!form.value.taxIncludingPriceUnit) {
 		showToast("璇疯緭鍏ュ崟浠�");
 		return;
 	}
-	if (operationType.value !== 'edit' || (form.value.number === undefined || form.value.number === '')) {
+	if (!form.value.number) {
 		showToast("璇疯緭鍏ユ暟閲�");
 		return;
 	}
@@ -318,18 +527,33 @@
 		let errorMessage = '';
 		
 		// 妫�鏌ユ枃鏈被鍨嬪繀濉瓧娈�
-		if (!form.value.deviceName) {
+		if (!form.value.autoGenerateUniqueCode && !form.value.uniqueCode) {
+			isValid = false;
+			errorMessage = '璇疯緭鍏ヨ澶囩紪鍙�';
+		} else if (!form.value.deviceName) {
 			isValid = false;
 			errorMessage = '璇疯緭鍏ヨ澶囧悕绉�';
 		} else if (!form.value.deviceModel) {
 			isValid = false;
 			errorMessage = '璇疯緭鍏ヨ鏍煎瀷鍙�';
+		} else if (!form.value.type) {
+			isValid = false;
+			errorMessage = '璇烽�夋嫨璁惧绫诲瀷';
 		} else if (!form.value.supplierName) {
 			isValid = false;
 			errorMessage = '璇疯緭鍏ヤ緵搴斿晢';
 		} else if (!form.value.unit) {
 			isValid = false;
 			errorMessage = '璇疯緭鍏ュ崟浣�';
+		} else if (form.value.status === undefined || form.value.status === null || form.value.status === '') {
+			isValid = false;
+			errorMessage = '璇烽�夋嫨璁惧鐘舵��';
+		} else if (form.value.isDepr === 1 && !form.value.annualDepreciationAmount) {
+			isValid = false;
+			errorMessage = '璇疯緭鍏ユ瘡骞存姌鏃ч噾棰�';
+		} else if (!form.value.planRuntimeTime) {
+			isValid = false;
+			errorMessage = '璇烽�夋嫨棰勮杩愯鏃堕棿';
 		}
 		
 		// 妫�鏌ユ暟瀛楃被鍨嬪繀濉瓧娈�

--
Gitblit v1.9.3