From 49ab96a40dd2e95cde3e455b07f990e49bbc9cee Mon Sep 17 00:00:00 2001
From: tanghaolin <1723298894@qq.com>
Date: 星期二, 22 四月 2025 17:36:46 +0800
Subject: [PATCH] 修改申报流程界面

---
 src/views/ProductDetail.vue |  166 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 144 insertions(+), 22 deletions(-)

diff --git a/src/views/ProductDetail.vue b/src/views/ProductDetail.vue
index 83e41af..c2b209f 100644
--- a/src/views/ProductDetail.vue
+++ b/src/views/ProductDetail.vue
@@ -4,7 +4,8 @@
 		<div class="mb-6 text-gray-500">
 			<el-breadcrumb separator="/">
 				<el-breadcrumb-item :to="{ path: '/' }">棣栭〉</el-breadcrumb-item>
-				<el-breadcrumb-item :to="{ path: '/certified-products' }">鑳芥晥浜у搧</el-breadcrumb-item>
+				<!-- 鎴戦渶瑕佽烦杞埌涓婁竴椤� -->
+				<el-breadcrumb-item @click="handleBack">{{product.modelType  }}</el-breadcrumb-item>
 				<el-breadcrumb-item>浜у搧璇︽儏</el-breadcrumb-item>
 			</el-breadcrumb>
 		</div>
@@ -25,7 +26,7 @@
 					<div class="flex items-center gap-2">
 						<span class="text-gray-500">鑳芥晥绛夌骇锛�</span>
 						<div class="flex items-center relative">
-							<img :src="EecLevelEnum[productDataRef.EnergyEfficiencyClass]?.icon" class="h-8" />
+							<img :src="EecLevelEnum[productDataRef.eec]?.icon" class="h-8" />
 							<!-- <span class="text-white relative right-[42px] top-[-1px]">1</span> -->
 							<!-- <span class="text-white absolute left-[16px] bottom-[10px] text-small">{{ EecLevelEnum[productDataRef.EnergyEfficiencyClass]?.name }}</span> -->
 						</div>
@@ -36,7 +37,7 @@
 				<div class="mb-6">
 					<div class="flex items-baseline gap-2">
 						<span class="text-gray-500">浠锋牸锛�</span>
-						<span class="text-2xl font-bold text-red-500">楼{{ product.price }}</span>
+						<span class="text-2xl font-bold text-red-500">闈㈣</span>
 					</div>
 				</div>
 
@@ -60,12 +61,22 @@
 
 				<!-- 璐拱鎸夐挳 -->
 				<div class="flex gap-4">
+					<div class="flex items-center mb-4">
+						<el-input-number class="!w-[100px]" v-model="product.quantity" :min="1" :max="99" size="large" controls-position="right">
+							<template #decrease-icon>
+								<el-icon>
+									<Minus />
+								</el-icon>
+							</template>
+							<template #increase-icon>
+								<el-icon>
+									<Plus />
+								</el-icon>
+							</template>
+						</el-input-number>
+					</div>
+					<el-button size="large" @click="handleAddToCart">鍔犲叆璐墿杞�</el-button>
 					<el-button type="primary" size="large" @click="handleBuyNow">绔嬪嵆璐拱</el-button>
-					<!-- <el-button size="large" @click="handleAddToCart">鍔犲叆璐墿杞�</el-button> -->
-					<!-- <el-button type="info" plain size="large" class="flex items-center" @click="handleViewCurve">
-						<el-icon class="mr-1" style="font-size: 18px"><TrendCharts /></el-icon>
-						鎬ц兘鏇茬嚎
-					</el-button> -->
 				</div>
 			</div>
 		</div>
@@ -117,7 +128,7 @@
 					<el-empty description="鏆傛棤鍙橀�熸洸绾夸俊鎭�" v-show="!isPumpDetail" />
 				</el-tab-pane>
 				<el-tab-pane label="閫夊瀷鎶ュ憡" name="SelectReport">
-					<img width="1200" height="auto" :src="product.SelectReport" v-if="isFan" />
+					<img width="1200" height="auto" :src="product.SelectReport" v-if="isFan || isPumpDetail" />
 					<el-empty description="鏆傛棤鎶ュ憡" v-show="!isPumpDetail && !isFan" />
 				</el-tab-pane>
 				<el-tab-pane label="娴嬭瘯鎶ュ憡" name="certificate">
@@ -180,8 +191,9 @@
 </template>
 
 <script setup lang="ts">
-import EecLevel1 from '@/assets/icons/energy1.png';
-import EecLevel2 from '@/assets/icons/energy2.png';
+import EecLevel1 from '@/assets/icons/ecc1.svg';
+import EecLevel2 from '@/assets/icons/ecc2.svg';
+import EecLevel3 from '@/assets/icons/ecc3.svg';
 import { SERVE_URL } from '@/constants';
 import { Check, TrendCharts } from '@element-plus/icons-vue';
 import { ElMessage } from 'element-plus';
@@ -189,10 +201,12 @@
 import { useRoute, useRouter } from 'vue-router';
 import axios from 'axios';
 import pumpDetailInfo from './mock/DetailsInfo';
-import pumpDetailInfo_WQ from "./mock/DetailsInfo_WQ"
+import pumpDetailInfo_WQ from './mock/DetailsInfo_WQ';
 import LXBChart from '@/components/Chart/LXBChart.vue';
 import MultiSpeedChart from '@/components/Chart/MultiSpeedChart.vue';
 import prop from './components/prop.vue';
+import { useCartStore } from '@/stores/useCartStore';
+
 const route = useRoute();
 const router = useRouter();
 
@@ -215,6 +229,7 @@
 	id: '',
 	name: '',
 	applicationCode: '',
+	quantity: 1,
 	price: '',
 	image: '',
 	brand: '',
@@ -239,17 +254,113 @@
 });
 
 const handleBuyNow = () => {
-	// showBuyDialog.value = true;
+	// 鍒涘缓璁㈠崟鍟嗗搧淇℃伅
+	const orderItem = {
+		addID: product.value.id,
+		addTime: new Date().toLocaleString(),
+		name: product.value.name,
+		price: Number(product.value.price),
+		quantity: product.value.quantity,
+		image: product.value.image,
+		selected: true  // 榛樿閫変腑
+	};
+
+	// 灏嗗晢鍝佹坊鍔犲埌璐墿杞﹀苟璁剧疆涓洪�変腑鐘舵��
+	const cartStore = useCartStore();
+	
+	// 娓呴櫎璐墿杞︿腑鍏朵粬鍟嗗搧鐨勯�変腑鐘舵��
+	cartStore.items.forEach(item => {
+		cartStore.updateItemSelected(item.addID, false);
+	});
+	
+	// 娣诲姞褰撳墠鍟嗗搧鍒拌喘鐗╄溅骞堕�変腑
+	cartStore.addToCart(orderItem);
+	cartStore.updateItemSelected(orderItem.addID, true);
+
+	// 璺宠浆鍒拌鍗曢〉闈�
 	router.push('/order-info');
 };
 
+// 鍒涘缓椋炲叆鍔ㄧ敾鍏冪礌
+const createFlyingElement = (productImg, cart) => {
+  const imgClone = productImg.cloneNode(true) as HTMLElement;
+  const startRect = productImg.getBoundingClientRect();
+  const endRect = cart.getBoundingClientRect();
+
+  // 璁剧疆鍒濆鏍峰紡
+  Object.assign(imgClone.style, {
+    position: 'fixed',
+    width: `${startRect.width}px`, 
+    height: `${startRect.height}px`,
+    left: `${startRect.left}px`,
+    top: `${startRect.top}px`,
+    zIndex: '1000',
+    transition: 'all 0.5s cubic-bezier(0.4, 0, 0.2, 1)',
+    borderRadius: '50%',
+    opacity: '0.8'
+  });
+
+  return {imgClone, endRect};
+};
+
+// 鎵ц椋炲叆鍔ㄧ敾
+const animateToCart = (imgClone, endRect) => {
+  Object.assign(imgClone.style, {
+    width: '30px',
+    height: '30px', 
+    left: `${endRect.left + endRect.width / 2 - 15}px`,
+    top: `${endRect.top + endRect.height / 2 - 15}px`,
+    opacity: '0'
+  });
+};
+
+// 娣诲姞鍟嗗搧鍒拌喘鐗╄溅
+const addItemToCart = () => {
+  const cartStore = useCartStore();
+  const newCartItem = {
+    addID: product.value.id,
+    addTime: new Date().toLocaleString(),
+    name: product.value.name,
+    price: Number(product.value.price),
+    quantity: product.value.quantity,
+    image: product.value.image,
+    selected: false,
+	companyName: product.value.brand,
+	model: product.value.model,
+  };
+
+  cartStore.addToCart(newCartItem);
+  ElMessage.success('宸叉坊鍔犲埌璐墿杞�');
+};
+
 const handleAddToCart = () => {
-	ElMessage.success('宸叉坊鍔犲埌璐墿杞�');
+  const productImg = document.querySelector('.el-image__inner');
+  const cart = document.querySelector('.cart-badge');
+  
+  if (!productImg || !cart) return;
+
+  const {imgClone, endRect} = createFlyingElement(productImg as HTMLElement, cart);
+  document.body.appendChild(imgClone);
+
+  // 瑙﹀彂鍔ㄧ敾
+  setTimeout(() => {
+    animateToCart(imgClone, endRect);
+
+    // 鍔ㄧ敾缁撴潫鍚庡鐞�
+    setTimeout(() => {
+      document.body.removeChild(imgClone);
+      addItemToCart();
+    }, 500);
+  }, 0);
 };
 
 const handleViewCurve = () => {
 	window.open('http://www.xpump.net/V4/#/CN/Target/DOOCH/Pump/Index/C69S4/8978', '_blank');
 };
+
+const handleBack = ()=>{
+	router.go(-1);
+}
 
 const confirmOrder = () => {
 	if (!orderForm.value.name || !orderForm.value.phone || !orderForm.value.address) {
@@ -274,6 +385,7 @@
 const EecLevelEnum = {
 	1: { name: '涓�绾ц兘鏁�', icon: EecLevel1 },
 	2: { name: '浜岀骇鑳芥晥', icon: EecLevel2 },
+	3: { name: '浜岀骇鑳芥晥', icon: EecLevel3 },
 };
 
 const productDataRef = ref({});
@@ -294,7 +406,9 @@
 			image: `${SERVE_URL}${productData.PhysicalPicturePath}`,
 			certificatePath: `${SERVE_URL}${productData.CertificatePath}`,
 			brand: productData.CompanyName,
-			model: productData.Model,
+			model: productData.model,
+			modelType: productData.ModelType,
+			
 			power: '璇﹁鍘傚',
 			voltage: '璇﹁鍘傚',
 			speed: '璇﹁鍘傚',
@@ -308,8 +422,15 @@
 				鑳芥晥绛夌骇: `${productData.EnergyEfficiencyClass}绾,
 			},
 		};
-		isPumpDetail.value = productData.Id.includes('Pupm') ? true : false;
-		isFan.value = productData.Id.includes('FJ') ? true : false;
+		isPumpDetail.value = productData.type == 1 ? true : false;
+		if (product.value.model.includes('DSWQ') && isPumpDetail.value) {
+			product.value.SelectReport = 'static/EecProductData/image/1/DSWQ_SelectReport.png';
+		}
+		if (product.value.model.substring(0, 3).includes('DRL') && isPumpDetail.value) {
+			product.value.SelectReport = 'static/EecProductData/image/1/DRL_SelectReport.png';
+		}
+
+		isFan.value = productData.Type== 7 ? true : false;
 		if (isFan.value) {
 			product.value.Chart = 'static/EecProductData/image/3/fan_chart.png';
 			product.value.SelectReport = 'static/EecProductData/image/3/SelectReport.png';
@@ -323,7 +444,7 @@
 		isAdjustCoordUnitByUserSetting: false,
 	};
 	let pumpInfoData = pumpDetailInfo;
-	if(product.value.model.includes('DSWQ')) {
+	if (product.value.model.includes('DSWQ')) {
 		pumpInfoData = pumpDetailInfo_WQ;
 	}
 	let pumpBaseInfo = {
@@ -333,10 +454,11 @@
 		SubID: 0,
 		ChartType: 3,
 		PumpStyle: 0,
-		PumpName4File: 'DRL1-18S',
-		CorpName: '涓煩鏉滅',
-		PumpName: 'DRL1-18S',
-		SeriesName: 'DRL',
+		PumpName4File: product.value.model,
+		CorpName: product.value.CompanyName,
+		PumpName: product.value.model,
+
+		SeriesName: product.value.ModelType,
 		CatalogName: '绔嬪紡澶氱骇娉�',
 		EecStauts: 0,
 		EecGrade: 0,

--
Gitblit v1.9.3