From dc63a926bd3fff4fda282b88b203072a8874962a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 12 八月 2025 17:45:05 +0800
Subject: [PATCH] 1.销售台账列表开发联调 2.新增、编辑销售台账页面开发联调

---
 src/pages/index.vue |  707 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 657 insertions(+), 50 deletions(-)

diff --git a/src/pages/index.vue b/src/pages/index.vue
index 3cad7a1..64f9896 100644
--- a/src/pages/index.vue
+++ b/src/pages/index.vue
@@ -1,43 +1,155 @@
 <template>
   <view class="content">
-		<view>
+		<view class="header-section">
 			<view class="currentFactory">
-				<up-text type="primary" :text="userStore.currentFactoryName" @click="show = true"
+				<up-text type="primary" :text="userStore.currentFactoryName" @click="show = true" size="18"
 								 class="factoryName" suffixIcon="arrow-right" :iconStyle="iconStyle"></up-text>
 			</view>
 			<up-picker :show="show" :columns="factoryList" @confirm="changeFactory"></up-picker>
-			<view>
-				<view class="bg-img"></view>
-			</view>
+		</view>
+		
+		<view class="hero-section">
 			<view class="bg-img">
+				<view class="hero-content">
+					<text class="hero-title">浜у搧搴撳瓨绠$悊绯荤粺</text>
+				</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>
+			</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="(listItem,listIndex) in list"
-						:key="listIndex"
+						v-for="(item, index) in marketingItems"
+						:key="index"
+						@click="handleCommonItemClick(item)"
 					>
-						<up-icon
-							:customStyle="{paddingTop:20+'rpx'}"
-							:name="listItem.name"
-							:size="22"
-						></up-icon>
-						<text class="grid-text">{{listItem.title}}</text>
+						<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="select-container">-->
-<!--			<up-picker-data-->
-<!--				class="picker"-->
-<!--				v-model="currentFatoryId"-->
-<!--				title="璇烽�夋嫨鍏徃"-->
-<!--				:options="factoryList"-->
-<!--				valueKey="id"-->
-<!--				labelKey="name">-->
-<!--			</up-picker-data>-->
-<!--		</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>
 </template>
 
@@ -53,36 +165,142 @@
 const factoryList = ref([]);
 const factoryListTem = ref([]);
 const iconStyle = {
-	fontSize: '14px',
-	color: '#165DFF'
+	fontSize: '18px',
+	color: '#2979ff'
 }
-// 鍒涘缓鍝嶅簲寮忔暟鎹�
-const list = reactive([
+
+// 閫氱煡鐘舵�佸垏鎹�
+const statusList = ['閿�鍞�', '閲囪喘']
+let statusIndex = 0
+const currentStatus = ref(statusList[0])
+const number = ref(7643)
+
+// 瀹氭椂鍣ㄥ垏鎹㈤�氱煡鐘舵��
+const startStatusTimer = () => {
+	setInterval(() => {
+		statusIndex = (statusIndex + 1) % statusList.length
+		currentStatus.value = statusList[statusIndex]
+	}, 3000)
+}
+
+// 钀ラ攢绠$悊鍔熻兘鏁版嵁
+const marketingItems = reactive([
 	{
-		name: 'photo',
-		title: '鍥剧墖'
+		icon: 'account',
+		label: '閿�鍞彴璐�',
+		bgColor: '#2979ff'
 	},
 	{
-		name: 'lock',
-		title: '閿佸ご'
+		icon: 'home',
+		label: '寮�绁ㄧ櫥璁�',
+		bgColor: '#1976d2'
 	},
 	{
-		name: 'star',
-		title: '鏄熸槦'
+		icon: 'file-text',
+		label: '寮�绁ㄥ彴璐�',
+		bgColor: '#42a5f5'
 	},
 	{
-		name: 'hourglass',
-		title: '娌欐紡'
+		icon: 'shopping-cart',
+		label: '鍥炴鐧昏',
+		bgColor: '#64b5f6'
 	},
 	{
-		name: 'home',
-		title: '棣栭〉'
+		icon: 'chat',
+		label: '鍥炴娴佹按',
+		bgColor: '#90caf9'
 	},
 	{
-		name: 'volume', // 娉ㄦ剰锛氳繖閲屼慨鏀逛簡 name 浠� 'star' 鏀逛负 'volume'锛屼互閬垮厤鍒楄〃涓袱涓厓绱犲叿鏈夌浉鍚岀殑 name
-		title: '闊抽噺'
+		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;
+		default:
+			uni.showToast({
+				title: `鐐瑰嚮浜�${item.label}`,
+				icon: 'none'
+			});
+	}
+};
+
 // 鍒涘缓瀵瑰瓙缁勪欢鐨勫紩鐢�
 const uToastRef = ref(null);
 
@@ -140,34 +358,421 @@
 	// 璁剧疆鐢ㄦ埛淇℃伅
 	userStore.getInfo()
 	getUserLoginFacotryList()
+	// 鍚姩閫氱煡鐘舵�佸畾鏃跺櫒
+	startStatusTimer()
 });
 </script>
 
 <style scoped lang="scss">
 .content {
-	background-color: transparent !important;
-	padding: 14px;
+	background: linear-gradient(135deg, #f8f9fa 0%, #e3f2fd 100%);
+	min-height: 100vh;
+	padding: 20px;
+	padding-top: env(safe-area-inset-top);
+	position: relative;
+	
+	&::before {
+		content: '';
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="dots" width="20" height="20" patternUnits="userSpaceOnUse"><circle cx="10" cy="10" r="1" fill="rgba(41, 121, 255, 0.03)"/></pattern></defs><rect width="100" height="100" fill="url(%23dots)"/></svg>');
+		pointer-events: none;
+		z-index: -1;
+	}
+	
+	&::after {
+		content: '';
+		position: fixed;
+		top: 0;
+		left: 0;
+		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%);
+		pointer-events: none;
+		z-index: -1;
+	}
 }
+
+/* 鏈〉涓嶅啀瀹氫箟 .safe-area-top锛屽凡绉昏嚦鍏ㄥ眬鏍峰紡 */
+
+.header-section {
+	margin-bottom: 16px;
+	animation: fadeInDown 0.6s ease-out;
+}
+
 .currentFactory {
-	margin-top: 12px;
-	margin-left: 6px;
-	font-weight: 400;
-	font-size: 14px;
+	margin-top: 8px;
+	margin-left: 4px;
+	font-weight: 500;
 	display: flex;
 }
+
 .factoryName {
 	width: auto;
 }
+
 :deep(.u-text) {
-	align-items: flex-end;
+	align-items: center;
 }
+
+.hero-section {
+	margin-bottom: 16px;
+	animation: fadeInUp 0.6s ease-out 0.1s both;
+}
+
 .bg-img {
-	margin-top: 12px;
 	width: 100%;
-	height: 145px;
-	background-color: #ffffff;
-	border-radius: 10px 10px 10px 10px;
+	height: 120px;
+	background: linear-gradient(135deg, #2979ff 0%, #1565c0 100%);
+	border-radius: 12px;
+	position: relative;
+	overflow: hidden;
+	box-shadow: 0 4px 20px rgba(41, 121, 255, 0.15);
+	
+	&::before {
+		content: '';
+		position: absolute;
+		top: -50%;
+		left: -50%;
+		width: 200%;
+		height: 200%;
+		background: conic-gradient(from 0deg, transparent, rgba(255,255,255,0.1), transparent, rgba(255,255,255,0.05), transparent);
+		animation: rotate 20s linear infinite;
+	}
+	
+	&::after {
+		content: '';
+		position: absolute;
+		top: 0;
+		right: 0;
+		width: 120px;
+		height: 120px;
+		background: radial-gradient(circle, rgba(255,255,255,0.15) 0%, transparent 70%);
+		border-radius: 50%;
+		transform: translate(40px, -40px);
+	}
 }
+
+.hero-content {
+	position: relative;
+	z-index: 1;
+	padding: 20px;
+	height: 100%;
+	display: flex;
+	align-items: center;
+}
+
+.hero-title {
+	color: #ffffff;
+	font-size: 24px;
+	font-weight: 600;
+}
+
+
+
+.notice-section {
+	margin-bottom: 16px;
+	animation: fadeInUp 0.6s ease-out 0.2s both;
+}
+
+.notice {
+	width: 100%;
+	background: linear-gradient(135deg, #EAF2FF 0%, #BBDEFB 100%);
+	border: 1px solid #e3f2fd;
+	border-radius: 12px;
+	padding: 16px;
+	box-shadow: 0 4px 20px rgba(41, 121, 255, 0.08);
+	position: relative;
+	overflow: hidden;
+	
+	&::before {
+		content: '';
+		position: absolute;
+		top: -50%;
+		left: -50%;
+		width: 200%;
+		height: 200%;
+		background: linear-gradient(45deg, transparent, rgba(255,255,255,0.6), transparent);
+		animation: shine 4s infinite;
+	}
+	
+	&::after {
+		content: '';
+		position: absolute;
+		top: 0;
+		right: 0;
+		width: 80px;
+		height: 80px;
+		background: radial-gradient(circle, rgba(255,255,255,0.2) 0%, transparent 70%);
+		border-radius: 50%;
+		transform: translate(30px, -30px);
+	}
+}
+
+
+
+@keyframes shine {
+	0% { 
+		transform: translateX(-100%) translateY(-100%) rotate(45deg); 
+	}
+	100% { 
+		transform: translateX(100%) translateY(100%) rotate(45deg); 
+	}
+}
+
+@keyframes fadeInDown {
+	from {
+		opacity: 0;
+		transform: translateY(-20px);
+	}
+	to {
+		opacity: 1;
+		transform: translateY(0);
+	}
+}
+
+@keyframes fadeInUp {
+	from {
+		opacity: 0;
+		transform: translateY(20px);
+	}
+	to {
+		opacity: 1;
+		transform: translateY(0);
+	}
+}
+
+@keyframes rotate {
+	from {
+		transform: rotate(0deg);
+	}
+	to {
+		transform: rotate(360deg);
+	}
+}
+
+.notice-content {
+	display: flex;
+	align-items: center;
+	height: 100%;
+	position: relative;
+	z-index: 1;
+}
+
+.notice-left {
+	margin-right: 16px;
+}
+
+.notice-status {
+	font-weight: 600;
+	font-size: 16px;
+	color: #1976d2;
+}
+
+.notice-separator {
+	width: 1px;
+	height: 24px;
+	background: #e0e0e0;
+	margin-right: 16px;
+}
+
+.notice-right {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	flex: 1;
+}
+
+.notice-label {
+	color: #333;
+	font-size: 14px;
+	font-weight: 500;
+	margin-right: 12px;
+}
+
+.notice-text {
+	font-weight: 400;
+	font-size: 14px;
+	color: #666666;
+}
+
+.notice-number {
+	font-weight: 600;
+	font-size: 16px;
+	color: #1976d2;
+	margin-left: 4px;
+}
+
+.notice-unit {
+	color: #666666;
+	font-size: 14px;
+	margin-left: 2px;
+}
+
+/* 鍔熻兘妯″潡鏍峰紡 */
+.common-module {
+	margin-bottom: 24px;
+	background: linear-gradient(135deg, #ffffff 0%, #fafbfc 100%);
+	border-radius: 16px;
+	padding: 16px;
+	box-shadow: 0 4px 20px rgba(0, 0, 0, 0.06);
+	border: none;
+	position: relative;
+	overflow: hidden;
+	transition: all 0.3s ease;
+	
+	&::after {
+		content: '';
+		position: absolute;
+		top: 0;
+		right: 0;
+		width: 60px;
+		height: 60px;
+		background: radial-gradient(circle, rgba(0,0,0,0.02) 0%, transparent 70%);
+		border-radius: 50%;
+		transform: translate(30px, -30px);
+	}
+	
+	&:hover {
+		transform: translateY(-2px);
+		box-shadow: 0 8px 30px rgba(0, 0, 0, 0.1);
+		
+		&::after {
+			background: radial-gradient(circle, rgba(0,0,0,0.04) 0%, transparent 70%);
+		}
+	}
+}
+
+.marketing-module {
+	--module-color: #2979ff;
+}
+
+.purchase-module {
+	--module-color: #1976d2;
+}
+
+.collaboration-module {
+	--module-color: #4caf50;
+}
+
+.equipment-module {
+	--module-color: #9c27b0;
+}
+
+.module-header {
+	margin-bottom: 24px;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+
+.module-title-container {
+	display: flex;
+	align-items: center;
+}
+
+.module-title {
+	color: #333333;
+	font-size: 18px;
+	font-weight: 600;
+	position: relative;
+	
+	&::after {
+		content: '';
+		position: absolute;
+		bottom: -4px;
+		left: 0;
+		width: 100%;
+		height: 2px;
+		background: linear-gradient(90deg, var(--module-color), rgba(255,255,255,0.9));
+		border-radius: 1px;
+		transition: all 0.3s ease;
+		box-shadow: 0 0 8px rgba(0,0,0,0.1);
+	}
+	
+	&:hover::after {
+		width: 30px;
+		box-shadow: 0 0 12px rgba(0,0,0,0.15);
+	}
+}
+
+.module-subtitle {
+	color: #666666;
+	font-size: 12px;
+	font-weight: 400;
+	margin-left: 8px;
+}
+
+.module-content {
+	width: 100%;
+	display: grid;
+	gap: 16px;
+}
+
+.icon-container {
+	width: 52px;
+	height: 52px;
+	border-radius: 12px;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	margin-bottom: 6px;
+	box-shadow: 0 3px 12px rgba(0, 0, 0, 0.12);
+	transition: all 0.3s ease;
+	position: relative;
+	overflow: hidden;
+	
+	&::before {
+		content: '';
+		position: absolute;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		background: linear-gradient(135deg, rgba(255,255,255,0.1) 0%, transparent 50%, rgba(255,255,255,0.05) 100%);
+		opacity: 0;
+		transition: opacity 0.3s ease;
+	}
+	
+	&::after {
+		content: '';
+		position: absolute;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		border-radius: 12px;
+		background: linear-gradient(45deg, transparent, rgba(255,255,255,0.2), transparent);
+		opacity: 0;
+		transition: opacity 0.3s ease;
+	}
+	
+	&:hover {
+		transform: translateY(-3px) scale(1.02);
+		box-shadow: 0 8px 25px rgba(0, 0, 0, 0.18);
+		
+		&::before,
+		&::after {
+			opacity: 1;
+		}
+	}
+}
+
+.item-label {
+	font-size: 13px;
+	color: #555555;
+	text-align: center;
+	display: block;
+	line-height: 1.4;
+	font-weight: 500;
+	margin-top: 4px;
+	margin-bottom: 10px;
+}
+
 .grid-text {
 	font-size: 14px;
 	color: #909399;
@@ -176,4 +781,6 @@
 	box-sizing: border-box;
 	/* #endif */
 }
+
+
 </style>

--
Gitblit v1.9.3