From 6c497f71f5441633099fc7a7896da8e8c7835f05 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 09 三月 2026 15:46:37 +0800
Subject: [PATCH] 公司app 1.商机管理添加字段

---
 src/pages/index.vue |  433 +++++++++++++++--------------------------------------
 1 files changed, 124 insertions(+), 309 deletions(-)

diff --git a/src/pages/index.vue b/src/pages/index.vue
index b6f9f4f..63b3ecb 100644
--- a/src/pages/index.vue
+++ b/src/pages/index.vue
@@ -1,9 +1,9 @@
 <template>
-  <view class="content">
+	<view class="content">
 		<view class="header-section">
 			<view class="currentFactory">
 				<up-text type="primary" :text="userStore.currentFactoryName" @click="show = true" size="18"
-							 class="factoryName" suffixIcon="arrow-right" :iconStyle="iconStyle"></up-text>
+								 class="factoryName" suffixIcon="arrow-right" :iconStyle="iconStyle"></up-text>
 			</view>
 			<up-picker :show="show" :columns="factoryList" @confirm="changeFactory" @cancel="show = false"></up-picker>
 		</view>
@@ -11,148 +11,42 @@
 		<view class="hero-section">
 			<view class="bg-img">
 				<view class="hero-content">
-					<text class="hero-title">浜у搧搴撳瓨绠$悊绯荤粺</text>
-					<text class="hero-subtitle">楂樻晥銆佷究鎹风殑涓氬姟绠$悊鍏ュ彛</text>
+					<text class="hero-title"></text>
 				</view>
 				<view class="hero-wave"></view>
 			</view>
 		</view>
 		
-		<view class="notice-section">
-			<view class="notice">
-				<view class="notice-content">
-					<view class="notice-left">
-						<text class="notice-status">閫氱煡</text>
-					</view>
-					<view class="notice-separator"></view>
-					<view class="notice-right">
-						<text class="notice-label">{{currentStatus}}</text>
-						<text class="notice-text">褰撴棩閿�鍞澶囨暟:<text class="notice-number">{{number}}<text class="notice-unit">涓�</text></text></text>
-					</view>
+		<!--		<view class="notice-section">-->
+		<!--			<view class="notice">-->
+		<!--				<view class="notice-content">-->
+		<!--					<view class="notice-left">-->
+		<!--						<text class="notice-status">閫氱煡</text>-->
+		<!--					</view>-->
+		<!--					<view class="notice-separator"></view>-->
+		<!--					<view class="notice-right">-->
+		<!--						<text class="notice-label">{{currentStatus}}</text>-->
+		<!--						<text class="notice-text">褰撴棩閿�鍞澶囨暟:<text class="notice-number">{{number}}<text class="notice-unit">涓�</text></text></text>-->
+		<!--					</view>-->
+		<!--				</view>-->
+		<!--			</view>-->
+		<!--		</view>-->
+		
+		<!-- 鍟嗘満绠$悊鍏ュ彛锛堝皬鎸夐挳锛� -->
+		<view class="opportunity-entry">
+			<view class="opportunity-item" @click="goOpportunity">
+				<view class="opportunity-icon-wrap">
+					<image
+						class="opportunity-icon"
+						src="/static/images/icon/xiaoshoutaizhang@2x.png"
+						mode="aspectFit"
+					/>
 				</view>
+				<text class="opportunity-text small-title">鍟嗘満绠$悊</text>
 			</view>
 		</view>
 		
-		<!-- 钀ラ攢绠$悊妯″潡 -->
-		<view class="common-module marketing-module">
-			<view class="module-header">
-				<view class="module-title-container">
-					<text class="module-title">钀ラ攢绠$悊</text>
-				</view>
-			</view>
-			<view class="module-content">
-				<up-grid
-					:border="false"
-					col="4"
-				>
-					<up-grid-item
-						v-for="(item, index) in marketingItems"
-						:key="index"
-						@click="handleCommonItemClick(item)"
-					>
-						<view class="icon-container" :style="{ background: item.bgColor }">
-							<up-icon
-								:name="item.icon"
-								:size="26"
-								color="#ffffff"
-							></up-icon>
-						</view>
-						<text class="item-label">{{item.label}}</text>
-					</up-grid-item>
-				</up-grid>
-			</view>
-		</view>
-		
-		<!-- 閲囪喘绠$悊妯″潡 -->
-		<view class="common-module purchase-module">
-			<view class="module-header">
-				<view class="module-title-container">
-					<text class="module-title">閲囪喘绠$悊</text>
-				</view>
-			</view>
-			<view class="module-content">
-				<up-grid
-					:border="false"
-					col="4"
-				>
-					<up-grid-item
-						v-for="(item, index) in purchaseItems"
-						:key="index"
-						@click="handleCommonItemClick(item)"
-					>
-						<view class="icon-container" :style="{ background: item.bgColor }">
-							<up-icon
-								:name="item.icon"
-								:size="26"
-								color="#ffffff"
-							></up-icon>
-						</view>
-						<text class="item-label">{{item.label}}</text>
-					</up-grid-item>
-				</up-grid>
-			</view>
-		</view>
-		
-		<!-- 鍗忓悓鍔炲叕妯″潡 -->
-		<view class="common-module collaboration-module">
-			<view class="module-header">
-				<view class="module-title-container">
-					<text class="module-title">鍗忓悓鍔炲叕</text>
-				</view>
-			</view>
-			<view class="module-content">
-				<up-grid
-					:border="false"
-					col="4"
-				>
-					<up-grid-item
-						v-for="(item, index) in collaborationItems"
-						:key="index"
-						@click="handleCommonItemClick(item)"
-					>
-						<view class="icon-container" :style="{ background: item.bgColor }">
-							<up-icon
-								:name="item.icon"
-								:size="26"
-								color="#ffffff"
-							></up-icon>
-						</view>
-						<text class="item-label">{{item.label}}</text>
-					</up-grid-item>
-				</up-grid>
-			</view>
-		</view>
-		
-		<!-- 璁惧绠$悊妯″潡 -->
-		<view class="common-module equipment-module">
-			<view class="module-header">
-				<view class="module-title-container">
-					<text class="module-title">璁惧绠$悊</text>
-				</view>
-			</view>
-			<view class="module-content">
-				<up-grid
-					:border="false"
-					col="4"
-				>
-					<up-grid-item
-						v-for="(item, index) in equipmentItems"
-						:key="index"
-						@click="handleCommonItemClick(item)"
-					>
-						<view class="icon-container" :style="{ background: item.bgColor }">
-							<up-icon
-								:name="item.icon"
-								:size="26"
-								color="#ffffff"
-							></up-icon>
-						</view>
-						<text class="item-label">{{item.label}}</text>
-					</up-grid-item>
-				</up-grid>
-			</view>
-		</view>
-  </view>
+	</view>
 </template>
 
 <script setup>
@@ -184,169 +78,6 @@
 		currentStatus.value = statusList[statusIndex]
 	}, 3000)
 }
-
-// 钀ラ攢绠$悊鍔熻兘鏁版嵁
-const marketingItems = reactive([
-	{
-		icon: 'account',
-		label: '閿�鍞彴璐�',
-		bgColor: '#2979ff'
-	},
-	{
-		icon: 'home',
-		label: '寮�绁ㄧ櫥璁�',
-		bgColor: '#1976d2'
-	},
-	{
-		icon: 'file-text',
-		label: '寮�绁ㄥ彴璐�',
-		bgColor: '#42a5f5'
-	},
-	{
-		icon: 'shopping-cart',
-		label: '鍥炴鐧昏',
-		bgColor: '#64b5f6'
-	},
-	{
-		icon: 'chat',
-		label: '鍥炴娴佹按',
-		bgColor: '#90caf9'
-	},
-	{
-		icon: 'chat',
-		label: '瀹㈡埛寰�鏉�',
-		bgColor: '#90caf9'
-	}
-]);
-
-// 閲囪喘绠$悊鍔熻兘鏁版嵁
-const purchaseItems = reactive([
-	{
-		icon: 'order',
-		label: '閲囪喘鍙拌处',
-		bgColor: '#bbdefb'
-	},
-	{
-		icon: 'truck',
-		label: '鏉ョエ鐧昏',
-		bgColor: '#e3f2fd'
-	},
-	{
-		icon: 'box',
-		label: '鏉ョエ鍙拌处',
-		bgColor: '#f3e5f5'
-	},
-	{
-		icon: 'chart-line',
-		label: '浠樻鐧昏',
-		bgColor: '#e8eaf6'
-	},
-	{
-		icon: 'settings',
-		label: '浠樻娴佹按',
-		bgColor: '#f1f8e9'
-	},
-	{
-		icon: 'settings',
-		label: '渚涘簲鍟嗗線鏉�',
-		bgColor: '#f1f8e9'
-	},
-]);
-
-// 鍗忓悓鍔炲叕鍔熻兘鏁版嵁
-const collaborationItems = reactive([
-	{
-		icon: 'checkmark-circle',
-		label: '鍗忓悓瀹℃壒',
-		bgColor: '#4caf50'
-	},
-	{
-		icon: 'map-pin',
-		label: '瀹㈡埛鎷滆',
-		bgColor: '#ff9800'
-	}
-]);
-
-// 璁惧绠$悊鍔熻兘鏁版嵁
-const equipmentItems = reactive([
-	{
-		icon: 'list',
-		label: '璁惧鍙拌处',
-		bgColor: '#9c27b0'
-	},
-	{
-		icon: 'wrench',
-		label: '璁惧鎶ヤ慨',
-		bgColor: '#f44336'
-	},
-	{
-		icon: 'shield-check',
-		label: '璁惧淇濆吇',
-		bgColor: '#00bcd4'
-	}
-]);
-
-// 澶勭悊甯哥敤鍔熻兘鐐瑰嚮
-const handleCommonItemClick = (item) => {
-	// 鏍规嵁涓嶅悓鐨勫姛鑳介」杩涜璺宠浆
-	switch (item.label) {
-		case '閿�鍞彴璐�':
-			uni.navigateTo({
-				url: '/pages/sales/salesAccount/index'
-			});
-			break;
-		case '寮�绁ㄧ櫥璁�':
-			uni.navigateTo({
-				url: '/pages/sales/invoicingRegistration/index'
-			});
-			break;
-		case '寮�绁ㄥ彴璐�':
-			uni.navigateTo({
-				url: '/pages/sales/invoiceLedger/index'
-			});
-			break;
-		case '鍥炴鐧昏':
-			uni.navigateTo({
-				url: '/pages/sales/receiptPayment/index'
-			});
-			break;
-		case '鍥炴娴佹按':
-			uni.navigateTo({
-				url: '/pages/sales/receiptPaymentHistory/index'
-			});
-			break;
-		case '瀹㈡埛寰�鏉�':
-			uni.navigateTo({
-				url: '/pages/sales/receiptPaymentLedger/index'
-			});
-			break;
-		case '閲囪喘鍙拌处':
-			uni.navigateTo({
-				url: '/pages/procurementManagement/procurementLedger/index'
-			});
-			break;
-		case '鏉ョエ鐧昏':
-			uni.navigateTo({
-				url: '/pages/procurementManagement/invoiceEntry/index'
-			});
-			break;
-		case '鍗忓悓瀹℃壒':
-			uni.navigateTo({
-				url: '/pages/cooperativeOffice/collaborativeApproval/index'
-			});
-			break;
-					case '瀹㈡埛鎷滆':
-			uni.navigateTo({
-				url: '/pages/cooperativeOffice/clientVisit/index'
-			});
-			break;
-		default:
-			uni.showToast({
-				title: `鐐瑰嚮浜�${item.label}`,
-				icon: 'none'
-			});
-	}
-};
 
 // 鍒涘缓瀵瑰瓙缁勪欢鐨勫紩鐢�
 const uToastRef = ref(null);
@@ -401,6 +132,13 @@
 	}
 };
 
+// 璺宠浆鍒板晢鏈虹鐞�
+const goOpportunity = () => {
+	uni.navigateTo({
+		url: '/pages/opportunityManagement/index'
+	});
+};
+
 onMounted(() => {
 	// 璁剧疆鐢ㄦ埛淇℃伅
 	userStore.getInfo()
@@ -415,8 +153,22 @@
 	background: linear-gradient(135deg, #f8f9fa 0%, #e3f2fd 100%);
 	min-height: 100vh;
 	padding: 1.25rem;
-	padding-top: env(safe-area-inset-top);
+	/* 涓烘墍鏈夎澶囪缃熀纭�padding-top */
+	padding-top: 40px;
 	position: relative;
+	
+	/* iOS璁惧浣跨敤env()鍑芥暟澶勭悊瀹夊叏鍖哄煙 */
+	padding-top: env(safe-area-inset-top);
+	
+	/* 涓哄畨鍗撹澶囪缃洿澶х殑椤堕儴鍐呰竟璺� */
+	/* #ifdef APP-PLUS && !MP && !H5 */
+	padding-top: 45px;
+	/* #endif */
+	
+	/* H5鍜屽皬绋嬪簭骞冲彴鐨勯�氱敤鏍峰紡 */
+	/* #ifdef H5 || MP */
+	padding-top: 30px;
+	/* #endif */
 	
 	&::before {
 		content: '';
@@ -438,17 +190,19 @@
 		right: 0;
 		bottom: 0;
 		background: radial-gradient(circle at 20% 80%, rgba(41, 121, 255, 0.02) 0%, transparent 50%),
-					radial-gradient(circle at 80% 20%, rgba(156, 39, 176, 0.02) 0%, transparent 50%);
+		radial-gradient(circle at 80% 20%, rgba(156, 39, 176, 0.02) 0%, transparent 50%);
 		pointer-events: none;
 		z-index: -1;
 	}
 }
 
-/* 鏈〉涓嶅啀瀹氫箟 .safe-area-top锛屽凡绉昏嚦鍏ㄥ眬鏍峰紡 */
-
 .header-section {
 	margin-bottom: 1rem;
 	animation: fadeInDown 0.6s ease-out;
+	/* 涓哄畨鍗撹澶囬澶栬皟鏁村ご閮ㄤ綅缃� */
+	/* #ifdef APP-PLUS && !MP && !H5 */
+	margin-top: 10px;
+	/* #endif */
 }
 
 .currentFactory {
@@ -474,7 +228,8 @@
 .bg-img {
 	width: 100%;
 	height: 8.75rem;
-	background: linear-gradient(135deg, #2979ff 0%, #1565c0 100%);
+	background-image: url("../static/images/banner/backview.png");
+	background-size: cover;
 	border-radius: 0.75rem;
 	position: relative;
 	overflow: hidden;
@@ -507,12 +262,12 @@
 .hero-content {
 	position: relative;
 	z-index: 1;
-	padding: 1.25rem;
+	padding: 1.25rem 1.25rem 1.6rem 1.25rem;
 	height: 100%;
 	display: flex;
 	flex-direction: column;
 	align-items: flex-start;
-	justify-content: center;
+	justify-content: flex-start;
 }
 
 .hero-title {
@@ -520,6 +275,7 @@
 	font-size: 1.625rem;
 	font-weight: 700;
 	letter-spacing: 0.03125rem;
+	text-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.5);
 }
 .hero-subtitle { font-size: 0.8125rem; margin-top: 0.375rem; }
 .hero-wave { height: 2.75rem; }
@@ -529,6 +285,7 @@
 	font-size: 0.8125rem;
 	margin-top: 0.375rem;
 	font-weight: 400;
+	text-shadow: 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.5);
 }
 
 .hero-wave {
@@ -589,11 +346,11 @@
 
 
 @keyframes shine {
-	0% { 
-		transform: translateX(-100%) translateY(-100%) rotate(45deg); 
+	0% {
+		transform: translateX(-100%) translateY(-100%) rotate(45deg);
 	}
-	100% { 
-		transform: translateX(100%) translateY(100%) rotate(45deg); 
+	100% {
+		transform: translateX(100%) translateY(100%) rotate(45deg);
 	}
 }
 
@@ -719,6 +476,10 @@
 	--module-color: #4caf50;
 }
 
+.production-module {
+	--module-color: #FF9800;
+}
+
 .equipment-module {
 	--module-color: #9c27b0;
 }
@@ -830,6 +591,52 @@
 	/* #endif */
 }
 
+.opportunity-icon {
+	width: 2.4rem;
+	height: 2.4rem;
+}
+
+/* 鍟嗘満绠$悊灏忔寜閽牱寮� */
+.opportunity-entry {
+	margin-top: 0.5rem;
+	display: flex;
+	justify-content: flex-start;
+}
+
+.opportunity-item {
+	flex-direction: row;
+	align-items: center;
+	justify-content: flex-start;
+	background: #ffffff;
+	border-radius: 999px;
+	padding: 0.4rem 0.9rem 0.4rem 0.5rem;
+	box-shadow: 0 0.125rem 0.75rem rgba(15, 23, 42, 0.12);
+	display: inline-flex;
+}
+
+.opportunity-icon-wrap {
+	width: 2.4rem;
+	height: 2.4rem;
+	border-radius: 999px;
+	background: #e3f2ff;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	margin-right: 0.4rem;
+}
+
+.opportunity-text {
+	font-size: 0.9rem;
+	color: #1f2933;
+	font-weight: 500;
+}
+
+.small-title {
+	font-size: 0.78rem;
+	font-weight: 400;
+	color: #4b5563;
+}
+
 /* 鏆楄壊妯″紡閫傞厤 */
 @media (prefers-color-scheme: dark) {
 	.content {
@@ -925,6 +732,10 @@
 	--module-color: #4caf50;
 }
 
+.production-module {
+	--module-color: #FF9800;
+}
+
 .equipment-module {
 	--module-color: #9c27b0;
 }
@@ -988,6 +799,10 @@
 
 .item-label { font-size: 0.8125rem; margin-top: 0.25rem; margin-bottom: 0.625rem; }
 .grid-text { font-size: 0.875rem; }
+.opportunity-icon {
+	width: 2.4rem;
+	height: 2.4rem;
+}
 
 @media (prefers-color-scheme: dark) {
 	.common-module { box-shadow: 0 0.375rem 1.5rem rgba(0,0,0,0.35); }

--
Gitblit v1.9.3