From 401952cc1bf9208667cdac24e2878d4d0e7e6ea9 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期六, 09 五月 2026 17:34:30 +0800
Subject: [PATCH] feat(expiryAfterSales): 添加处理功能并优化表单字段控制

---
 src/views/customerService/expiryAfterSales/index.vue              |    6 +-
 src/views/customerService/expiryAfterSales/components/formDia.vue |   92 ++++++++++++++++++++++++++++-----------------
 2 files changed, 60 insertions(+), 38 deletions(-)

diff --git a/src/views/customerService/expiryAfterSales/components/formDia.vue b/src/views/customerService/expiryAfterSales/components/formDia.vue
index 2fe603b..d899b8d 100644
--- a/src/views/customerService/expiryAfterSales/components/formDia.vue
+++ b/src/views/customerService/expiryAfterSales/components/formDia.vue
@@ -20,7 +20,7 @@
 								v-model="form.productName"
 								placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"
 								clearable
-								:disabled="operationType === 'view'"
+								:disabled="isFieldDisabled('productName')"
 							/>
 						</el-form-item>
 					</el-col>
@@ -30,7 +30,7 @@
 								v-model="form.batchNumber"
 								placeholder="璇疯緭鍏ヤ骇鍝佹壒鍙�"
 								clearable
-								:disabled="operationType === 'view'"
+								:disabled="isFieldDisabled('batchNumber')"
 							/>
 						</el-form-item>
 					</el-col>
@@ -46,7 +46,7 @@
 								type="date"
 								placeholder="璇烽�夋嫨涓存湡鏃ユ湡"
 								clearable
-								:disabled="operationType === 'view'"
+								:disabled="isFieldDisabled('expiryDate')"
 							/>
 						</el-form-item>
 					</el-col>
@@ -57,7 +57,7 @@
 								:min="0"
 								placeholder="璇疯緭鍏ュ簱瀛樻暟閲�"
 								style="width: 100%"
-								:disabled="operationType === 'view'"
+								:disabled="isFieldDisabled('stockQuantity')"
 							/>
 						</el-form-item>
 					</el-col>
@@ -69,7 +69,7 @@
 								v-model="form.customerName"
 								placeholder="璇疯緭鍏ュ鎴峰悕绉�"
 								clearable
-								:disabled="operationType === 'view'"
+								:disabled="isFieldDisabled('customerName')"
 							/>
 						</el-form-item>
 					</el-col>
@@ -79,7 +79,7 @@
 								v-model="form.contactPhone"
 								placeholder="璇疯緭鍏ヨ仈绯荤數璇�"
 								clearable
-								:disabled="operationType === 'view'"
+								:disabled="isFieldDisabled('contactPhone')"
 							/>
 						</el-form-item>
 					</el-col>
@@ -91,7 +91,7 @@
 								v-model="form.problemDesc"
 								placeholder="璇疯緭鍏ラ棶棰樻弿杩�"
 								clearable
-								:disabled="operationType === 'view'"
+								:disabled="isFieldDisabled('problemDesc')"
 								type="textarea"
 								:rows="3"
 							/>
@@ -105,7 +105,7 @@
 								v-model="form.handlerId"
 								placeholder="璇烽�夋嫨澶勭悊浜�"
 								clearable
-								:disabled="operationType === 'view'"
+								:disabled="isFieldDisabled('handlerId')"
 								style="width: 100%"
 							>
 								<el-option
@@ -127,7 +127,7 @@
 								type="date"
 								placeholder="璇烽�夋嫨澶勭悊鏃ユ湡"
 								clearable
-								:disabled="operationType === 'view'"
+								:disabled="isFieldDisabled('handleDate')"
 							/>
 						</el-form-item>
 					</el-col>
@@ -139,7 +139,7 @@
 								v-model="form.handleResult"
 								placeholder="璇疯緭鍏ュ鐞嗙粨鏋�"
 								clearable
-								:disabled="operationType === 'view'"
+								:disabled="isFieldDisabled('handleResult')"
 								type="textarea"
 								:rows="3"
 							/>
@@ -175,6 +175,8 @@
 			return '鏂板涓存湡鍞悗';
 		case 'edit':
 			return '缂栬緫涓存湡鍞悗';
+		case 'handle':
+			return '澶勭悊涓存湡鍞悗';
 		case 'view':
 			return '鏌ョ湅涓存湡鍞悗';
 		default:
@@ -212,6 +214,13 @@
 })
 const { form, rules } = toRefs(data);
 const userList = ref([])
+const handleEditableFields = ["handlerId", "handleDate", "handleResult"];
+
+const isFieldDisabled = (field) => {
+	if (operationType.value === "view") return true;
+	if (operationType.value === "handle") return !handleEditableFields.includes(field);
+	return false;
+};
 
 // 鎵撳紑寮规
 const openDialog = (type, row) => {
@@ -242,7 +251,7 @@
 	} else {
 		// 缂栬緫鎴栨煡鐪嬫椂濉厖鏁版嵁
 		form.value = { ...row };
-		if (type === 'edit' && !form.value.handlerId) {
+		if (type === 'handle' && !form.value.handlerId) {
 			form.value.handlerId = userStore.id;
 			form.value.handleDate = getCurrentDate();
 		}
@@ -250,36 +259,49 @@
 }
 
 const submitForm = () => {
+	if (operationType.value === "handle") {
+		if (!form.value.handlerId || !form.value.handleDate || !form.value.handleResult) {
+			proxy.$modal.msgWarning("璇峰~鍐欏鐞嗕汉銆佸鐞嗘棩鏈熷拰澶勭悊缁撴灉");
+			return;
+		}
+		handleSubmit();
+		return;
+	}
 	proxy.$refs["formRef"].validate(valid => {
 		if (valid) {
-			const submitData = {
-				id: form.value.id,
-				productName: form.value.productName,
-				batchNumber: form.value.batchNumber,
-				expireDate: form.value.expiryDate,
-				stockQuantity: form.value.stockQuantity,
-				customerName: form.value.customerName,
-				contactPhone: form.value.contactPhone,
-				disRes: form.value.problemDesc,
-				status: form.value.status,
-				disposeUserId: form.value.handlerId,
-				disposeNickName: userList.value.find(item => item.userId === form.value.handlerId)?.nickName,
-				disposeResult: form.value.handleResult,
-				disDate: form.value.handleDate
-			};
-			
-			const apiCall = operationType.value === 'add' ? expiryAfterSalesAdd : expiryAfterSalesUpdate;
-			apiCall(submitData).then(() => {
-				proxy.$modal.msgSuccess(operationType.value === 'add' ? "鏂板鎴愬姛" : "鏇存柊鎴愬姛");
-				closeDia();
-			}).catch(error => {
-				console.error('鎻愪氦鏁版嵁澶辫触:', error);
-				proxy.$modal.msgError('鎻愪氦鏁版嵁澶辫触锛岃绋嶅悗閲嶈瘯');
-			});
+			handleSubmit();
 		}
 	});
 }
 
+const handleSubmit = () => {
+	const submitData = {
+		id: form.value.id,
+		productName: form.value.productName,
+		batchNumber: form.value.batchNumber,
+		expireDate: form.value.expiryDate,
+		stockQuantity: form.value.stockQuantity,
+		customerName: form.value.customerName,
+		contactPhone: form.value.contactPhone,
+		disRes: form.value.problemDesc,
+		status: operationType.value === "handle" ? 2 : form.value.status,
+		disposeUserId: form.value.handlerId,
+		disposeNickName: userList.value.find(item => item.userId === form.value.handlerId)?.nickName,
+		disposeResult: form.value.handleResult,
+		disDate: form.value.handleDate
+	};
+
+	const apiCall = operationType.value === 'add' ? expiryAfterSalesAdd : expiryAfterSalesUpdate;
+	apiCall(submitData).then(() => {
+		const successText = operationType.value === "add" ? "鏂板鎴愬姛" : operationType.value === "handle" ? "澶勭悊鎴愬姛" : "鏇存柊鎴愬姛";
+		proxy.$modal.msgSuccess(successText);
+		closeDia();
+	}).catch(error => {
+		console.error('鎻愪氦鏁版嵁澶辫触:', error);
+		proxy.$modal.msgError('鎻愪氦鏁版嵁澶辫触锛岃绋嶅悗閲嶈瘯');
+	});
+}
+
 // 鍏抽棴寮规
 const closeDia = () => {
 	proxy.resetForm("formRef");
diff --git a/src/views/customerService/expiryAfterSales/index.vue b/src/views/customerService/expiryAfterSales/index.vue
index c94e3dd..9966785 100644
--- a/src/views/customerService/expiryAfterSales/index.vue
+++ b/src/views/customerService/expiryAfterSales/index.vue
@@ -39,7 +39,7 @@
 				<el-button type="danger" @click="handleDelete">鍒犻櫎</el-button>
 			</div>
 		</div>
-		
+
 		<div class="table_list">
 			<PIMTable
 				rowKey="id"
@@ -60,7 +60,7 @@
 
 				<template #operation="{ row }">
 					<el-button type="primary" link @click="openForm('view', row)">鏌ョ湅</el-button>
-					<el-button type="primary" link @click="openForm('edit', row)" v-if="row.status === 1">缂栬緫</el-button>
+					<el-button type="primary" link @click="openForm('handle', row)" v-if="row.status === 1">澶勭悊</el-button>
 				</template>
 			</PIMTable>
 		</div>
@@ -201,7 +201,7 @@
 		current: page.value.current,
 		size: page.value.size
 	};
-	
+
 	expiryAfterSalesListPage(queryParams).then(res => {
 		// 鏄犲皠鍚庣杩斿洖鏁版嵁鍒板墠绔〃鏍�
 		tableData.value = res.data.records.map(item => ({

--
Gitblit v1.9.3