Jelajahi Sumber

feat: 添加更多服务页面和开发中页面,优化导航返回逻辑

refactor: 重构首页功能入口和智慧助手模块

fix: 修复设备列表页面的pur_id处理逻辑

style: 调整天气警告显示条件和样式

chore: 更新pages.json配置,添加新页面路径
allen 3 hari lalu
induk
melakukan
5fe71dbf39

+ 18 - 2
pages.json

@@ -3,7 +3,7 @@
 		"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
 	},
 	"pages": [{
-			"path": "pages/index/index",
+			"path": "pages/index/index2",
 			"style": {
 				"enablePullDownRefresh": false,
 				"navigationBarTitleText": "首页",
@@ -12,6 +12,22 @@
 			}
 		},
 		{
+			"path": "pages/index/developing",
+			"style": {
+				"navigationBarTitleText": "开发中",
+				"navigationStyle": "custom",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/server/index",
+			"style": {
+				"navigationBarTitleText": "更多服务",
+				"navigationStyle": "custom",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
 			"path": "pages/distribution/index",
 			"style": {
 				"navigationBarTitleText": "设备分布",
@@ -1409,7 +1425,7 @@
 		"selectedColor": "#018B3F",
 		"borderStyle": "white",
 		"list": [{
-				"pagePath": "pages/index/index",
+				"pagePath": "pages/index/index2",
 				"iconPath": "static/images/tabBar/shouye.png",
 				"selectedIconPath": "static/images/tabBar/shouyesel.png",
 				"text": "首页"

+ 9 - 2
pages/afterSale/index.vue

@@ -56,6 +56,9 @@
 	export default {
 		data() {  
 			return {
+				data:{
+					search:''
+				},
 				BASE_URL: 'http://dev.hnyfwlw.com',
 				faultdata: [],
 				title:"",//弹框标题
@@ -142,8 +145,12 @@
 				})
 			},
 			clickLeft(){
-				uni.switchTab({
-					url:"../index/index"
+				// uni.switchTab({
+				// 	url:"../index/index"
+				// })
+				// 返回上一页面
+				uni.navigateBack({
+					delta: 1
 				})
 			},
 			examine(url) {

+ 17 - 5
pages/equipList2/index.vue

@@ -150,8 +150,15 @@
         const menulist = res || [];
         const menuItem = menulist.find(item => item.purview_name == '智慧物联')
         this.menuList = menuItem.children || [];
-        this.list = this.menuList[0].children || []
-        this.pur_id = this.menuList[0].pur_id || '';
+				if(!this.pur_id){
+					this.list = this.menuList[0].children || []
+					this.pur_id = this.menuList[0].pur_id || '';
+					this.current = 0;
+				}else{
+					this.list = this.menuList.find(item => item.pur_id == this.pur_id)?.children || []
+					this.pur_id = this.menuList.find(item => item.pur_id == this.pur_id)?.pur_id || '';
+					this.current = this.menuList.findIndex(item => item.pur_id == this.pur_id);
+				}
         if(this.list[0].purview_name != '全部'){
           this.list.unshift({
             device_type_id: '',
@@ -215,7 +222,6 @@
 			},
       initPage(){
         this.eqlistdata = [];
-        this.current = 0;
         this.currents = 0;
         this.page = 1;
         this.eqlist(true);
@@ -551,8 +557,14 @@
 			},
 			scroll() {},
 		},
-		onLoad() {
-			this.getUserlogin();
+		onShow() {
+			const that = this;
+			uni.$on('purId', (purId) => {
+				that.pur_id = purId;
+			});
+			setTimeout(() => {
+				this.getUserlogin();
+			}, 100);
 		},
 		onTabItemTap(e) {
 		},

+ 5 - 2
pages/equipMange/index/index.vue

@@ -93,8 +93,11 @@
 				})
 			},
 			clickLeft() {
-				uni.switchTab({
-					url: "../../index/index"
+				// uni.switchTab({
+				// 	url: "../../index/index"
+				// })
+				uni.navigateBack({
+					delta: 1
 				})
 			},
 			userOperation(item) { //跳转用户信息页面

+ 9 - 6
pages/expertDiagnosis/index.vue

@@ -6,7 +6,7 @@
 				<uni-nav-bar @clickLeft="clickLeft" left-icon="back" left-text="返回" title="专家诊断"></uni-nav-bar>
 			</view>
 			<image :src="$imageURL+'/bigdata_app'+'/image/expertDiagnosis/05571341dbb0771b23d0b271764ac2e.png'" class="expertimages"></image>
-			<view class="expert_details">
+			<!-- <view class="expert_details"> -->
 				<!-- <view class="details_item" @click="worm">
 					<image :src="$imageURL+'/bigdata_app'+'/image/expertDiagnosis/6612b1293fd1f45dd7ce6269a954999.png'"></image>
 					<p>虫情百科</p>
@@ -15,11 +15,11 @@
 					<image :src="$imageURL+'/bigdata_app'+'/image/expertDiagnosis/7f34f4eeba4d00819369cfa1b5ecce8.png'"></image>
 					<p>病害百科</p>
 				</view> -->
-				<view class="details_item" @click="exchange">
+				<!-- <view class="details_item" @click="exchange">
 					<image :src="$imageURL+'/bigdata_app'+'/image/expertDiagnosis/aa6a168b9fb72b62b687a2debc04a9f.png'"></image>
 					<p>交流圈</p>
-				</view>
-			</view>
+				</view> -->
+			<!-- </view> -->
 			<view class="cooperation">
 				<view class="cooperation_item">
 					<p class="cooperation_item_title">合作单位</p>
@@ -80,8 +80,11 @@
 				}
 			},
 			clickLeft() {
-				uni.switchTab({
-					url: "../index/index"
+				// uni.switchTab({
+				// 	url: "../index/index"
+				// })
+				uni.navigateBack({
+					delta: 1
 				})
 			},
 			worm() {

+ 38 - 5
pages/expertDiagnosis/wormcase.vue

@@ -6,6 +6,10 @@
 				<uni-nav-bar @clickLeft="clickLeft" left-icon="back" left-text="返回" :title="title"></uni-nav-bar>
 			</view>
 			<view class="bases_search">
+				<view class="tabs">
+					<view class="tab_item" :class="{'active':tabIndex == 0}" @click="changeTab(0)">虫情百科</view>
+					<view class="tab_item" :class="{'active':tabIndex == 1}" @click="changeTab(1)">病害百科</view>
+				</view>
 				<view class="bases_search_text">
 					<u-icon name="search" class="search" @click="search"></u-icon>
 					<input type="text" v-model="inputdata" :placeholder="placeholder" @input="searchinput" />
@@ -35,6 +39,7 @@
 		data() {
 			return {
 				title: '',
+				tabIndex: 0,
 				content: [],
 				data: {
 					code: null,
@@ -79,6 +84,15 @@
 					this.search()
 				}, 1000)()
 			},
+			changeTab(index) {
+				this.tabIndex = index
+				if(index == 0){
+					this.title = "虫情百科"
+				}else{
+					this.title = "病害百科"
+				}
+				this.search()
+			},
 			search() { //搜索按钮
 				this.content = []
 				if (this.title == "虫情百科") {
@@ -97,12 +111,14 @@
 		onLoad(option) {
 			this.title = option.name
 			if (option.name == "虫情百科") {
+				this.tabIndex = 0
 				this.data.code = 2
 				this.data.page = 1
 				this.data.name = this.inputdata
 				this.getCooperation(this.data)
 				this.placeholder = "请输入害虫名称"
 			} else {
+				this.tabIndex = 1
 				this.data.code = 1
 				this.data.page = 1
 				this.data.name = this.inputdata
@@ -130,8 +146,7 @@
 		top: 140rpx;
 		display: flex;
 		flex-wrap: wrap;
-
-		.particulars_item {
+			.particulars_item {
 			width: 50%;
 			padding: 20rpx;
 			box-sizing: border-box;
@@ -171,16 +186,34 @@
 		top: 80px;
 		z-index: 100;
 		background-color: #FFFFFF;
-	
+		.tabs {
+			width: 100%;
+			display: flex;
+			justify-content: space-around;
+			margin: 20rpx 0 30rpx;
+			.tab_item {
+				width: 45%;
+				height: 60rpx;
+				line-height: 60rpx;
+				text-align: center;
+				font-size: 28rpx;
+				border-radius: 30rpx;
+				background-color: #F8F8F8;
+			}
+			.tab_item.active {
+				background-color: #18B566;
+				color: #fff;
+			}
+		}
 		.bases_search_text {
-			width: 90%;
+			width: 95%;
 			margin: 0 auto;
 			background-color: #F8F8F8;
 			height: 60rpx;
 			border-radius: 30rpx;
 			display: flex;
 			line-height: 60rpx;
-	
+			margin-bottom: 20rpx;
 			.search {
 				padding: 0 20rpx;
 				font-size: 34rpx;

+ 5 - 2
pages/fourBase/index.vue

@@ -116,8 +116,11 @@
 				})
 			},
 			clickLeft() { //返回主页
-				uni.switchTab({
-					url: "../index/index"
+				// uni.switchTab({
+				// 	url: "../index/index"
+				// })
+				uni.navigateBack({
+					delta: 1
 				})
 			},
 			clickRight() { //添加基地

+ 164 - 0
pages/index/developing.vue

@@ -0,0 +1,164 @@
+<template>
+  <view class="developing-page">
+    <view class="back-btn" @click="goBack">
+      <text class="back-icon">←</text>
+      <text class="back-text">返回</text>
+    </view>
+    <view class="content-wrapper">
+      <view class="icon-wrapper">
+        <text class="icon">🚧</text>
+      </view>
+      <text class="title">正在开发中</text>
+      <text class="subtitle">功能即将上线,敬请期待</text>
+      <view class="progress-bar">
+        <view class="progress-inner"></view>
+      </view>
+      <text class="tip">我们正在努力为您打造更好的体验</text>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  },
+  onLoad() {},
+  methods: {
+    goBack() {
+      uni.navigateBack({
+        delta: 1,
+        fail: () => {
+          uni.switchTab({
+            url: '/pages/index/index'
+          });
+        }
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.developing-page {
+  width: 100%;
+  min-height: 100vh;
+  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  position: relative;
+
+  .back-btn {
+    position: absolute;
+    top: 60rpx;
+    left: 40rpx;
+    display: flex;
+    align-items: center;
+    padding: 16rpx 32rpx;
+    background: rgba(255, 255, 255, 0.25);
+    border-radius: 40rpx;
+    backdrop-filter: blur(10rpx);
+
+    .back-icon {
+      font-size: 36rpx;
+      color: #ffffff;
+      margin-right: 8rpx;
+      font-weight: bold;
+    }
+
+    .back-text {
+      font-size: 28rpx;
+      color: #ffffff;
+    }
+
+    &:active {
+      background: rgba(255, 255, 255, 0.35);
+    }
+  }
+
+  .content-wrapper {
+    background: #ffffff;
+    border-radius: 32rpx;
+    padding: 80rpx 60rpx;
+    text-align: center;
+    box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.15);
+
+    .icon-wrapper {
+      width: 200rpx;
+      height: 200rpx;
+      margin: 0 auto 48rpx;
+      background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      animation: floatAnimation 3s ease-in-out infinite;
+
+      .icon {
+        font-size: 100rpx;
+        line-height: 1;
+      }
+    }
+
+    .title {
+      display: block;
+      font-size: 44rpx;
+      font-weight: bold;
+      color: #333333;
+      margin-bottom: 24rpx;
+      letter-spacing: 4rpx;
+    }
+
+    .subtitle {
+      display: block;
+      font-size: 28rpx;
+      color: #666666;
+      margin-bottom: 56rpx;
+    }
+
+    .progress-bar {
+      width: 100%;
+      height: 12rpx;
+      background: #f0f0f0;
+      border-radius: 6rpx;
+      overflow: hidden;
+      margin-bottom: 36rpx;
+
+      .progress-inner {
+        width: 65%;
+        height: 100%;
+        background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
+        border-radius: 6rpx;
+        animation: progressAnimation 2s ease-in-out infinite alternate;
+      }
+    }
+
+    .tip {
+      display: block;
+      font-size: 24rpx;
+      color: #999999;
+      line-height: 1.6;
+    }
+  }
+}
+
+@keyframes progressAnimation {
+  from {
+    width: 45%;
+  }
+  to {
+    width: 85%;
+  }
+}
+
+@keyframes floatAnimation {
+  0%,
+  100% {
+    transform: translateY(0);
+  }
+  50% {
+    transform: translateY(-20rpx);
+  }
+}
+</style>

+ 39 - 449
pages/index/index2.vue

@@ -3,21 +3,16 @@
 		<view class="welcom">{{ hello }} 欢迎登录</view>
 		<view class="weather-bg">
 			<view class="weather-box">
-
-
 				<view class="weather">
 					<view class="weatext">
 						<view>今天<span class="text-span">{{weatherinfo.air_level}}</span></view>
 						<view class="text-value">{{weatherinfo.at}}℃</view>
 					</view>
 					<view class="weatext">
-
-
 						<image :src="
-          'https://webstaticimg.oss-cn-hangzhou.aliyuncs.com/bigdata_app/img/weather/' +
-          weatherinfo.wea +
-          '.png'
-        " mode="" class="weaimg"></image>
+							'https://webstaticimg.oss-cn-hangzhou.aliyuncs.com/bigdata_app/img/weather/' +weatherinfo.wea +'.png'
+						" mode="" class="weaimg"
+						></image>
 
 						<view class="weatext_title">
 							{{ weatherinfo.wea }}
@@ -40,14 +35,14 @@
 				</view>
 
 			</view>
-			<view class="weather-warning">
+			<view class="weather-warning" v-if="weatherinfo.alarm_content">
 				<image class="weather-alert" :src="$imageURL+'/bigdata_app/newImg/home/weather-alert.png'" mode=""></image>
 			{{weatherinfo.alarm_content}}
 			</view>
 
 		</view>
 		<view class="ai-box">
-			<view class="ai-content">
+			<view class="ai-content" @click="tabfunction(4)">
 				<image :src="$imageURL+'/bigdata_app/newImg/home/ai-bot.png'" class="float-left" mode=""></image>
 				<view class="ai-text">
 					<view class="ai-text-title">我是千耘农业种植大模型</view>
@@ -61,72 +56,34 @@
 		<view class="functionbox">
 			
 			<view class="functionbox_text">
-				<view class="functionbox_text_item" @click="tabfunction(0)" v-if="index < 9" v-for="(item,index) in menuList" :key="index">
+				<view class="functionbox_text_item" @click="tabfunction(0,item)" v-if="index < 9" v-for="(item,index) in menuList" :key="index">
 					<image :src="item.app_menu_icon" mode="" class="itemimg">
 					</image>
 					<view class=""> {{ item.purview_name }} </view>
 				</view>
-				<!-- <view class="functionbox_text_item" @click="tabfunction(1)">
-					<image :src="$imageURL+'/bigdata_app/newImg/home/zngg.png'" mode="" class="itemimg">
-					</image>
-					<view class=""> 智能灌溉 </view>
-				</view>
-				<view class="functionbox_text_item" v-if="jurisdiction.zjtf" @click="tabfunction(2)">
-					<image :src="$imageURL+'/bigdata_app/newImg/home/yhgl.png'" mode="" class="itemimg"></image>
-					<view class=""> 用户管理 </view>
-				</view>
-				<view class="functionbox_text_item" @click="tabfunction(3)">
-					<image :src="$imageURL+'/bigdata_app/newImg/home/shfw.png'" mode="" class="itemimg"></image>
-					<view class=""> 售后服务 </view>
-				</view>
-				<view class="functionbox_text_item" @click="tabfunction(3)">
-					<image :src="$imageURL+'/bigdata_app/newImg/home/shfw.png'" mode="" class="itemimg"></image>
-					<view class=""> 售后服务 </view>
-				</view>
-				<view class="functionbox_text_item" @click="tabfunction(3)">
-					<image :src="$imageURL+'/bigdata_app/newImg/home/shfw.png'" mode="" class="itemimg"></image>
-					<view class=""> 售后服务 </view>
-				</view>
-				<view class="functionbox_text_item" @click="tabfunction(3)">
-					<image :src="$imageURL+'/bigdata_app/newImg/home/shfw.png'" mode="" class="itemimg"></image>
-					<view class=""> 售后服务 </view>
-				</view> -->
 				<view class="functionbox_text_item" @click="tabfunction(9)" v-if="menuList.length >= 9">
 					<image :src="$imageURL+'/bigdata_app/newImg/home/shfw.png'" mode="" class="itemimg"></image>
 					<view class=""> 更多功能 </view>
 				</view>
 			</view>
-<!-- 			<swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval"
-				:duration="duration">
-				<swiper-item>
-
-
-				</swiper-item>
-				<swiper-item>
-					<view class="swiper-item uni-bg-green">B</view>
-				</swiper-item>
-
-			</swiper> -->
 		</view>
 		<view class="facilitybox">
 			<view class="facilitybox-content">
 				<view class="facilitybox_title"> 智慧助手 </view>
-				<view style="display: flex;gap:24rpx;flex-direction: column;">
+				<view style="display: flex;flex-direction: column;">
 					<view class="facilitybox_itembox">
-						<view class="facilitybox_item facilitybox-zhuanjia" v-if="jurisdiction.zjtf"
+						<view class="facilitybox_item facilitybox-zhuanjia"
 							@click="tabfunction(2)">
 							<image :src="$imageURL+'/bigdata_app/newImg/home/zjhk.png'" mode="" class="itemimg">
 							</image>
 							<view class="facilitybox_span">
 								<text> 专家库 </text>
-
 								<view class="text">农业相关博士、教授、研究员</view>
 							</view>
 						</view>
 						<view class="facilitybox_item" style="display: flex; flex-direction: column;gap: 24rpx;">
 							<view class="facilitybox-suishi"
 								@click="tabfunction(1)">
-
 								<image style="width: 72rpx;height:72rpx;margin-right: 10rpx;"
 									:src="$imageURL+'/bigdata_app/newImg/home/tjss.png'" mode=""
 									class="itemimg float-right">
@@ -140,23 +97,21 @@
 								<view style="width: 69%;" class="facilitybox_span"> 病虫草鼠害库 </view>
 							</view>
 						</view>
-
 					</view>
-					<view class="facilitybox_itembox">
-						<view class="facilitybox_item facilitybox-jwjy" v-if="jurisdiction.fztf"
+					<!-- <view class="facilitybox_itembox">
+						<view class="facilitybox_item facilitybox-jwjy"
 							@click="tabequipment('../prevention/index')">
 							<image :src="$imageURL+'/bigdata_app/newImg/home/jwjy.png'" mode="" class="itemimg">
 							</image>
 							<view class="facilitybox_span"> 积温积雨 </view>
 						</view>
-						<view class="facilitybox_item facilitybox-jgqs" v-if="jurisdiction.jktf"
+						<view class="facilitybox_item facilitybox-jgqs"
 							@click="tabequipment('../monitor/index')">
 							<image :src="$imageURL+'/bigdata_app/newImg/home/jgqs.png'" mode="" class="itemimg">
 							</image>
 							<view class="facilitybox_span"> 价格趋势 </view>
 						</view>
-
-					</view>
+					</view> -->
 				</view>
 			</view>
 			<view class="banner-ad">
@@ -167,31 +122,12 @@
 				<view class="sub-title">
 					AI慧眼识天牛    智守青山护松林
 				</view>
-				<view class="btn">
+				<!-- <view class="btn">
 					查看详情
-				</view>
+				</view> -->
 			</view>
 			</view>
 		</view>
-
-		<!-- 	<view class="insectattack">
-			<view class="insectattack_title" @click="worm">
-				<view class=""> 虫情百科 </view>
-				<view class="iconbox">
-					<u-icon name="arrow-right"></u-icon>
-				</view>
-			</view>
-
-		</view>
-		<view class="insectattack">
-			<view class="insectattack_title" @click="virus">
-				<view class=""> 病害百科 </view>
-				<view class="iconbox">
-					<u-icon name="arrow-right"></u-icon>
-				</view>
-			</view>
-
-		</view> -->
 	</view>
 </template>
 
@@ -226,7 +162,6 @@
 		// },
 		filters:{
 			ahFilter(value){
-	
 				if(value>70){
 					return"湿润"
 				}else if(value<30){
@@ -244,28 +179,14 @@
 				interval: 2000,
 				duration: 500,
 				weatherinfo: {
-					wea: '',
-					air_level: '',
-					at: '23',
-					air_pm25: '3',
-					ah: '56',
-					alarm_content: '天气警告'
+					wea: '-',
+					air_level: '-',
+					at: '-',
+					air_pm25: '-',
+					ah: '-',
+					alarm_content: ''
 				},
 				hello: '',
-				jurisdiction: {
-					cbtf: false,
-					jktf: false,
-					hjtf: false,
-					fztf: false,
-					sytf: false,
-					sbtf: false,
-					sqtf: false,
-					zjtf: false,
-					ggtf: false,
-					qxz: false,
-					sq: false,
-					cbyj: false,
-				},
 				show: false,
 				url: '',
 				loadTF: false
@@ -282,9 +203,6 @@
 			},
 		},
 		methods: {
-			moveHandle() {
-				return;
-			},
 			async getcity(lng, lat) {
 				const res = await this.$myRequest({
 					url: '/api/api_gateway?method=device.device_manage.weathers',
@@ -295,6 +213,7 @@
 				});
 
 				this.weatherinfo = res[0];
+				console.log(this.weatherinfo,'weatherinfo')
 			},
 			async getUserlogin() {
 				const res = await this.$myRequest({
@@ -303,113 +222,25 @@
             is_app: 1,
           }
 				});
-				// this.jurisdiction = {
-				// 	cbtf: false,
-				// 	jktf: false,
-				// 	hjtf: false,
-				// 	fztf: false,
-				// 	sytf: false,
-				// 	sbtf: false,
-				// 	sqtf: false,
-				// 	zjtf: false,
-				// }
         const menuList = [];
         res.forEach(item =>{
           if(item.children){
             menuList.push(...item.children);
           }
         })
-        // res.find(item => item.purview_name == '智慧物联');
-        console.log(menuList,'MenuList')
         this.menuList = menuList || [];
-				uni.setStorage({
-					key: 'jurisdiction',
-					data: JSON.stringify(res.children),
-				});
-				uni.setStorage({
-					key: 'myuser_type',
-					data: JSON.stringify(res.myuser_type),
-				});
-				uni.setStorage({
-					key: 'myuid',
-					data: JSON.stringify(res.myuid),
-				});
-				let QueryPermission = (id) => {
-					let list = res.children;
-					for (var i = 0; i < list.length; i++) {
-						if (list[i].children) {
-							var data = list[i].children;
-							for (var j = 0; j < data.length; j++) {
-								if (data[j].children) {
-									var item = data[j].children;
-									for (var k = 0; k < item.length; k++) {
-										if (item[k].pur_id == id) {
-											return true;
-										}
-									}
-								}
-							}
-						}
-					}
-					return false;
-				};
-				this.jurisdiction = {
-					cbtf: false,
-					jktf: false,
-					hjtf: false,
-					fztf: false,
-					sytf: false,
-					sbtf: false,
-					sqtf: false,
-					zjtf: false,
-					qxz: QueryPermission(242),
-					sq: QueryPermission(284),
-					cbyj: QueryPermission(243),
-				};
-				console.log(res.children);
-				for (var i = 0; i < res.children.length; i++) {
-					switch (res.children[i].pur_id) {
-						case 36:
-							this.jurisdiction.cbtf = true; //"测报系统"
-							break;
-						case 42:
-							this.jurisdiction.jktf = true; //"可视农业"
-							break;
-						case 40:
-							this.jurisdiction.hjtf = true; //"环境监测系统"
-							break;
-						case 44:
-							this.jurisdiction.fztf = true; //"防治系统"
-							break;
-						case 58:
-							this.jurisdiction.sytf = true; //"溯源系统"
-							break;
-						case 28:
-							this.jurisdiction.sbtf = true; //"系统管理"
-							break;
-						case 25:
-							this.jurisdiction.sqtf = true; //"四情基地"
-							break;
-						case 124:
-							this.jurisdiction.zjtf = true; //"专家诊断"
-							break;
-							// case "灌溉控制系统":
-							// 	this.jurisdiction.sftf = true
-							// 	break;
-						case 202:
-							this.jurisdiction.ggtf = true; //"灌溉控制系统"
-							break;
-					}
-				}
 			},
-			tabfunction(index) {
+			tabfunction(index,item) {
 				if (index == 0) {
-					uni.navigateTo({
-						url: '../fourBase/index',
+					uni.switchTab({
+						url: '/pages/equipList2/index',
+          success: () => {
+            setTimeout(() => {
+              uni.$emit('purId',item.pur_id);
+            }, 50);
+          }
 					});
 				} else if (index == 1) {
-					// var that = this
-					// this.show = true
 					uni.navigateTo({
 						url: '/pages/identifyPest/identifyPest',
 					});
@@ -421,8 +252,14 @@
 					uni.navigateTo({
 						url: '../afterSale/index',
 					});
-				} else if (index == 9) {
-          
+				} else if(index == 4){
+					uni.navigateTo({
+						url: '/pages/index/developing',
+					});
+				}else if (index == 9) {
+					uni.navigateTo({
+						url: '/pages/server/index',
+					});
         }
 			},
 			tabequipment(url, type) {
@@ -431,156 +268,27 @@
 					url: `${url}${type ? `?typeId=${type}` : ''}`,
 				});
 			},
-			// onok(ev) {
-			//   this.path = this.url;
-			//   console.log(ev);
-			//   this.loadTF = true;
-			//   uni.showLoading({
-			//     mask: true,
-			//     success: function () {
-			//       console.log(999);
-			//     },
-			//   });
-			//   var publiukey = `-----BEGIN PUBLIC KEY-----
-			// MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6m92fXUrccS4SoLg4W4jPRNua
-			// 4BcRk4ldLcqPuQpD2Mds2+hw+Gi+0MUnshF/r/DTcCJgkt7rtoY9EB6/XJ6MFw14
-			// whhESFie/lZUWRsk8M89Rkr8m5rwmBl+uLAd5LopyshFqKTBXeT2ytHP1JCQLPBO
-			// 34Fy4/yEz4qEzkzBuwIDAQAB
-			// -----END PUBLIC KEY-----`;
-			//   var time = +new Date();
-			//   var str2 = 'YuNfEi' + time + 'YuNfEi';
-			//   var pubblicData = jsencrypt.setEncrypt(publiukey, str2);
-			//   if (this.flag == 2) {
-			//     console.log('111');
-			//     // pest.pests.insect_discern 虫害
-			//     uni.uploadFile({
-			//       // url: 'http://dev.hnyfwlw.com/api/api_gateway?method=base.bases.base_photo', //仅为示例,非真实的接口地址
-			//       url: 'https://wx.hnyfwlw.com/api/api_gateway?method=pest.pests.insect_discern', //仅为示例,非真实的接口地址
-			//       filePath: ev.path,
-			//       name: 'img_file',
-			//       formData: {
-			//         user: 'test',
-			//         sign: pubblicData,
-			//       },
-			//       success: (uploadFileRes) => {
-			//         this.loadTF = false;
-			//         console.log(JSON.parse(uploadFileRes.data));
-			//         uni.navigateTo({
-			//           url:
-			//             '../disandpests/index?datas=' +
-			//             uploadFileRes.data +
-			//             '&path=' +
-			//             ev.path,
-			//         });
-			//       },
-			//       fail(res) {
-			//         console.log(res);
-			//       },
-			//     });
-			//   } else if (this.flag == 1) {
-			//     //pest.pests.insect_discern病害识别
-			//     // uni.showLoading({
-			//     // 	title: '加载中'
-			//     // });
-			//     uni.uploadFile({
-			//       // url: 'http://dev.hnyfwlw.com/api/api_gateway?method=base.bases.base_photo', //仅为示例,非真实的接口地址
-			//       url: 'https://wx.hnyfwlw.com/api/api_gateway?method=pest.pests.plant_discern', //仅为示例,非真实的接口地址
-			//       filePath: ev.path,
-			//       name: 'img_file',
-			//       formData: {
-			//         user: 'test',
-			//         sign: pubblicData,
-			//       },
-			//       success: (uploadFileRes) => {
-			//         this.loadTF = false;
-			//         console.log(JSON.parse(uploadFileRes.data));
-			//         uni.navigateTo({
-			//           url:
-			//             '../disandpests/index?datas=' +
-			//             uploadFileRes.data +
-			//             '&path=' +
-			//             ev.path,
-			//         });
-			//       },
-			//     });
-			//   }
-			//   this.url = '';
-			// },
-			// oncancle() {
-			//   // url设置为空,隐藏控件
-			//   this.url = '';
-			// },
-			// confirm() {
-			//   this.flag = 1;
-			//   uni.chooseImage({
-			//     count: 1, //默认9
-			//     // sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
-			//     sourceType: ['camera', 'album'], //从相册选择
-			//     success: (res) => {
-			//       this.url = res.tempFilePaths[0];
-			//     },
-			//   });
-			//   console.log(1);
-			// },
-			// cancel() {
-			//   this.flag = 2;
-			//   uni.chooseImage({
-			//     count: 1, //默认9
-			//     // sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
-			//     sourceType: ['camera', 'album'], //从相册选择
-			//     success: (res) => {
-			//       console.log(1);
-			//       this.url = res.tempFilePaths[0];
-			//     },
-			//   });
-			// },
 			worm() {
 				uni.navigateTo({
 					url: '../expertDiagnosis/wormcase?name=虫情百科',
 				});
 			},
-			virus() {
-				uni.navigateTo({
-					url: '../expertDiagnosis/wormcase?name=病害百科',
-				});
-			},
-			introduce(id, title) {
-				uni.navigateTo({
-					url: '../expertDiagnosis/introduce?id=' + id + '&title=' + title,
-				});
-			},
 			checkLocationPermission(isTest) {
 				let session_key = uni.getStorageSync('session_key');
+				console.log(session_key,'session_key');
 				let _this = this;
 				// 当用户登录之后再弹位置权限框
 				if (session_key) {
 					uni.getSetting({
 						success(res) {
-							console.log(res);
+							console.log(res,'resres');
 							if (res.authSetting['scope.userLocation']) {
 								uni.getLocation({
 									type: 'wgs84 ',
 									success: (res) => {
-										// console.log(res, 'loacation');
-										// uni.showToast({
-										// 	title: `${res.longitude}, ${res.longitude}`,
-										// 	duration: 20000,
-										// 	icon:'none'
-										// });
 										_this.getcity(res.longitude, res.latitude);
 									},
 									fail(e) {
-										// uni.showModal({
-										// 	title: '提示',
-										// 	content: JSON.stringify(e),
-										// 	success: function (res) {
-										// 		if (res.confirm) {
-										// 			console.log('用户点击确定');
-										// 		} else if (res.cancel) {
-										// 			console.log('用户点击取消');
-										// 		}
-										// 	}
-										// });
 										uni.showToast({
 											title: '系统未开启定位或未授权微信定位',
 											duration: 5000,
@@ -629,8 +337,6 @@
 			}
 		},
 		onLoad() {
-
-			console.log(this.$imageURL)
 			var time = new Date();
 			var hours = time.getHours();
 			if (hours < 12) {
@@ -652,21 +358,16 @@
 <style lang="less">
 	page {
 		background: linear-gradient(180deg, #1FC676 11.72%, #1FC676 11.52%, #D5F9E7 29.83%, #F5F6FA 36.96%), #FFF;
-		// background-image: url(https://s3.hnyfwlw.com/webstaticimg/bigdata_app/newindex/bg.png);
-		// background: linear-gradient(180deg, #1FC676 8.72%, #1FC676 18.52%, #D5F9E7 21.83%, #F5F6FA 25.96%), #FFF;
 		background-size: 100%;
 		background-repeat: no-repeat;
 		background-color: #f9f9f9;
 	}
-
 	.home {
-		// background: linear-gradient(180deg, #1FC676 8.72%, #1FC676 18.52%, #D5F9E7 21.83%, #F5F6FA 25.96%), #FFF;
 		width: 100%;
 		height: 100%;
 		padding-top: 94rpx;
 		box-sizing: border-box;
 	}
-
 	.welcom {
 		height: 64rpx;
 		line-height: 64rpx;
@@ -674,7 +375,6 @@
 		font-size: 40rpx;
 		color: #fff;
 	}
-
 	.weather-bg {
 		width: 100%;
 		height: 212rpx;
@@ -682,27 +382,20 @@
 		background-size: 100% 100%;
 		background-repeat: no-repeat;
 	}
-
 	.weather-box {
 		display: flex;
 		margin: 24rpx 0 16rpx 0;
 	}
-
 	.weather:nth-child(1) {
-
 		border-right: 1px solid rgba(255, 255, 255, 0.6);
 	}
-
 	.weather {
 		flex: 1;
 		display: flex;
-
-
 		.weaimg {
 			width: 42rpx;
 			height: 42rpx;
 		}
-
 		.weatext {
 			gap: 8rpx;
 			flex: 1;
@@ -712,12 +405,10 @@
 			font-size: 24rpx;
 			color: rgba(255, 255, 255, 0.8);
 		}
-
 		.weatext_title {
 			font-size: 24rpx;
 			color: #fff;
 		}
-
 		.text-span {
 			color: #0BBC58;
 			margin-left: 16rpx;
@@ -725,13 +416,11 @@
 			border-radius: 4px;
 			background: rgba(255, 255, 255, 0.6);
 		}
-
 		.text-value {
 			font-size: 48rpx;
 			color: #fff;
 		}
 	}
-
 	.weather-warning {
 		margin: 20rpx 0;
 		padding: 0 40rpx;
@@ -742,7 +431,6 @@
 			margin-right: 10rpx;
 		}
 	}
-
 	.ai-box {
 		width: 100%;
 		padding: 0 40rpx;
@@ -751,7 +439,6 @@
 		margin-bottom: 12rpx;
 		position: relative;
 		top: -20rpx;
-
 		.ai-content {
 			box-sizing: border-box;
 			height: 100%;
@@ -759,14 +446,12 @@
 			border: 1.5px solid #FFF;
 			background: linear-gradient(180deg, #ffffffa3 0%, #FFF 100%);
 			padding: 24rpx;
-
 			image {
 				width: 80rpx;
 				height: 80rpx;
 				float: left;
 				margin-right: 16rpx;
 			}
-
 			.float-right {
 				float: right;
 				padding: 4px 12px;
@@ -775,55 +460,39 @@
 				background: #0BBC58;
 				margin: 12rpx 0;
 			}
-
 			.ai-text {
-
 				float: left;
 			}
-
 			.ai-text-title {
 				color: #333834;
 				line-height: 40rpx;
 				font-size: 28rpx;
-
 				font-weight: 700;
 			}
-
 			.ai-text-subtitle {
 				color: #7b9783;
 				line-height: 40rpx;
 				font-size: 20rpx;
-
 				font-weight: 400;
-
 			}
 		}
-
-
 	}
-
-
 	.functionbox {
 		width: 100%;
-		// height: 240rpx;
 		padding: 0rpx 32rpx 0 32rpx;
 		box-sizing: border-box;
 		margin-bottom: 16rpx;
 		.swiper {
 			height: 208rpx;
 		}
-
 		.functionbox_title {
 			padding-left: 20rpx;
 			font-size: 34rpx;
 		}
-
 		.functionbox_text {
 			display: flex;
 			flex-wrap: wrap;
-			// justify-content: space-around;
 			margin-top: 30rpx;
-			
 			.functionbox_text_item {
 				width:20%;
 				text-align: center;
@@ -838,43 +507,33 @@
 			}
 		}
 	}
-
 	.facilitybox {
 		width: 100%;
 		padding: 0 32rpx;
 		box-sizing: border-box;
 		background: #F5F6FA;
-
 		.facilitybox-content {
 			border-radius: 16rpx;
 			background: #FFF;
 			padding: 32rpx;
 		}
-
 		.facilitybox_title {
 			font-size: 30rpx;
 			color: #333;
 			margin-bottom: 24rpx;
-			// padding-left: 20rpx;
 		}
-
 		.facilitybox_itembox {
-
 			display: flex;
 			gap: 32rpx;
-
 			.facilitybox_item {
 				flex: 1;
-
 				color: #616666;
-
 				.facilitybox_span {
 					padding: 16rpx 24rpx;
 					width: 50%;
 					color: #0B3F5D;
 					font-weight: 500;
 					font-size: 28rpx;
-
 					.text {
 						font-size: 20rpx;
 						color: #4E916E;
@@ -882,7 +541,6 @@
 						margin-top: 9rpx;
 					}
 				}
-
 				.itemimg {
 					width: 90rpx;
 					height: 90rpx;
@@ -890,12 +548,10 @@
 					margin: 7rpx 0;
 				}
 			}
-
 			.facilitybox-zhuanjia {
 				border-radius: 8px;
 				background: linear-gradient(180deg, #D3FBE6 0%, #F5F7FA 100%);
 				position: relative;
-
 				.itemimg {
 					width: 112rpx;
 					height: 146rpx;
@@ -903,63 +559,49 @@
 					bottom: 0;
 					right: 16rpx;
 				}
-
 				text {
 					color: #003318;
 					font-weight: 500;
 					font-size: 28rpx;
-
 				}
 			}
-
 			.facilitybox-suishi {
 				border-radius: 8px;
 				background: linear-gradient(180deg, #CAECFF 0%, #F5F7FA 99.89%);
 				padding: 9rpx 0;
-
 				.facilitybox_span {
 					color: #0B3F5D;
 				}
 			}
-
 			.facilitybox-bchk {
 				border-radius: 8px;
 				background: linear-gradient(180deg, #EEE5F6 0%, #F5F7FA 95.65%);
-				// height: 102rpx;
 				padding: 10rpx 0;
-
 				.facilitybox_span {
 					color: #3E2B50;
 				}
-
 				.itemimg {
 					width: 78rpx;
 					height: 72rpx;
 					margin-right: 10rpx;
 				}
 			}
-
 			.facilitybox-jgqs {
 				border-radius: 8px;
 				background: linear-gradient(180deg, #D2E5FF 0%, #F5F7FA 95.65%);
-
 				.facilitybox_span {
 					color: #0D2E5B;
 				}
 			}
-
 			.facilitybox-jwjy {
 				border-radius: 8px;
 				background: linear-gradient(180deg, #FFF4D2 0%, #F5F7FA 95.65%);
-
 				.facilitybox_span {
 					color: #3D4012;
 				}
 			}
 		}
 	}
-
-
 	.banner-ad {
 		margin: 32rpx 0;
 		height: 224rpx;
@@ -975,7 +617,6 @@
 			box-sizing: border-box;
 			.title{
 				 color: #333333;
-				 
 				 font-size: 28rpx;
 				 font-style: normal;
 				 font-weight: 700;
@@ -983,7 +624,6 @@
 			}
 			.sub-title{
 				 color: #666666;
-				
 				 font-size: 20rpx;
 				 font-style: normal;
 				 font-weight: 500;
@@ -1000,18 +640,14 @@
 			}
 		}
 	}
-
 	.insectattack {
 		width: 90%;
 		margin: 0 auto;
 		padding: 30rpx;
-
 		.insectattack_title {
 			font-size: 34rpx;
-			// padding-left: 20rpx;
 			display: flex;
 			justify-content: space-between;
-
 			.iconbox {
 				width: 40rpx;
 				height: 40rpx;
@@ -1023,27 +659,20 @@
 				font-size: 20rpx;
 			}
 		}
-
 		.insectattack_listbox {
-			// padding: 0 20rpx;
 			overflow-x: auto;
-
 			.insectattack_list {
 				width: 1104rpx;
 				display: flex;
 				margin-top: 30rpx;
-
 				flex-wrap: wrap;
-
 				.list_box {
-					// background-color: #f00;
 					background-size: 100% 100%;
 					width: 246rpx;
 					height: 324rpx;
 					margin-right: 30rpx;
 					border-radius: 20rpx;
 					position: relative;
-
 					.list_boxbg {
 						width: 100%;
 						height: 100%;
@@ -1051,20 +680,17 @@
 						top: 0;
 						left: 0;
 						z-index: -1;
-
 						.list_boxbg_img {
 							width: 100%;
 							height: 100%;
 						}
 					}
-
 					.list_box_xiang {
 						width: 95%;
 						margin-top: 0rpx auto;
 						display: flex;
 						justify-content: flex-end;
 						padding-top: 20rpx;
-
 						.list_box_xiang_click {
 							padding: 8rpx 15rpx;
 							background-color: rgba(0, 0, 0, 0.2);
@@ -1073,7 +699,6 @@
 							border-radius: 52rpx;
 						}
 					}
-
 					.list_box_info {
 						width: 90%;
 						margin: 130rpx auto 0;
@@ -1084,11 +709,9 @@
 								rgba(255, 255, 255, 0.44));
 						padding: 10rpx;
 						box-sizing: border-box;
-
 						.list_box_info_name {
 							font-weight: 700;
 						}
-
 						.list_box_info_text {
 							font-size: 18rpx;
 							overflow: hidden;
@@ -1099,42 +722,9 @@
 						}
 					}
 				}
-
-				// .list_box1 {
-				// 	background-image: url(../../static/images/newindex/cao.png);
-				// }
-
-				// .list_box2 {
-				// 	background-image: url(../../static/images/newindex/yee.jpg);
-				// }
-
-				// .list_box3 {
-				// 	background-image: url(../../static/images/newindex/lingc.jpg);
-				// }
-
-				// .list_box4 {
-				// 	background-image: url(../../static/images/newindex/ming.png);
-				// }
-
-				// .list_box5 {
-				// 	background-image: url(../../static/images/newindex/mai.png);
-				// }
-
-				// .list_box6 {
-				// 	background-image: url(../../static/images/newindex/dadou.jpg)
-				// }
-
-				// .list_box7 {
-				// 	background-image: url(../../static/images/newindex/yumi.png);
-				// }
-
-				// .list_box8 {
-				// 	background-image: url(../../static/images/newindex/dao.png);
-				// }
 			}
 		}
 	}
-
 	.loading {
 		position: absolute;
 		top: 0;

+ 6 - 2
pages/my/about/about.vue

@@ -159,8 +159,12 @@
 			// this.id = plus.runtime.version
 		},
 		onBackPress(option){
-			uni.redirectTo({
-				url:"../index/index"
+			// uni.redirectTo({
+			// 	url:"../index/index"
+			// })
+			// 返回上一页面
+			uni.navigateBack({
+				delta: 1
 			})
 		}
 	}

+ 342 - 0
pages/server/index.vue

@@ -0,0 +1,342 @@
+<template>
+	<view class="server-page">
+		<!-- 状态栏占位 -->
+    <view class="device-detail__header">
+      <u-icon
+        size="36"
+        class="arrow-left"
+        name="arrow-left"
+        @click="goBack"
+      ></u-icon>
+      更多服务
+    </view>
+
+		<!-- 主内容区域 -->
+		<view class="content-container">
+			<!-- 加载状态 -->
+			<view class="loading-container" v-if="loading">
+				<u-loading mode="circle" size="80"></u-loading>
+				<text class="loading-text">加载中...</text>
+			</view>
+
+			<!-- 空数据状态 -->
+			<view class="empty-container" v-else-if="menuList.length === 0">
+				<image :src="$imageURL + '/bigdata_app/newindex/empty.png'" mode="aspectFit" class="empty-img"></image>
+				<text class="empty-text">暂无数据</text>
+			</view>
+
+			<!-- 菜单网格 -->
+			<view class="menu-grid" v-else>
+				<view
+					class="menu-item"
+					v-for="(item, index) in menuList"
+					:key="item.pur_id || index"
+				>
+					<view class="menu-icon-wrap">
+            <text class="menu-name">{{ item.purview_name }}</text>
+            <view class="menu-icon-container">
+              <view class="menu-icon" v-for="(child, childIndex) in item.children" :key="child.pur_id || childIndex" 
+					    @click="handleMenuClick(child)"
+            >
+                <image :src="child.app_menu_icon || getDefaultIcon(child.icon)" mode="aspectFit" class="app_menu_icon"></image>
+                <text class="menu-icon-text">{{ child.purview_name }}</text> 
+              </view>
+            </view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			loading: true,
+			menuList: []
+		}
+	},
+	onLoad() {
+		this.getMenuList()
+	},
+	methods: {
+		// 获取菜单列表
+		async getMenuList() {
+			try {
+				this.loading = true
+				const res = await this.$myRequest({
+					url: '/api/api_gateway?method=user.login.user_login_info',
+					method: 'POST',
+					data: {
+						is_app: 1
+					}
+				})
+        console.log(res,'resresres')
+				if (res.length > 0) {
+					// 获取第一层数据
+					this.menuList = res.filter(item => item.children && item.children.length > 0)
+          console.log(this.menuList,'menuListmenuList')
+				}
+			} catch (error) {
+				console.error('获取菜单列表失败:', error)
+				uni.showToast({
+					title: '获取菜单失败',
+					icon: 'none'
+				})
+			} finally {
+				this.loading = false
+			}
+		},
+
+		// 获取默认图标
+		getDefaultIcon(icon) {
+			const iconMap = {
+				'forecast': this.$imageURL + '/bigdata_app/newindex/cb.png',
+				'sex-lure': this.$imageURL + '/bigdata_app/newindex/cb.png',
+				'color-lure': this.$imageURL + '/bigdata_app/newindex/fz.png',
+				'control': this.$imageURL + '/bigdata_app/newindex/fz.png',
+				'weather': this.$imageURL + '/bigdata_app/newindex/qxyj.png',
+				'seedling': this.$imageURL + '/bigdata_app/newindex/base.png',
+				'disaster': this.$imageURL + '/bigdata_app/newindex/hj.png',
+				'soil': this.$imageURL + '/bigdata_app/newindex/sqyj.png',
+				'video': this.$imageURL + '/bigdata_app/newindex/jk.png',
+				'irrigate': this.$imageURL + '/bigdata_app/newindex/guangai.png',
+				'water': this.$imageURL + '/bigdata_app/newindex/guangai.png',
+				'four-mood': this.$imageURL + '/bigdata_app/newindex/base.png',
+				'expert': this.$imageURL + '/bigdata_app/newindex/knowledge.png',
+				'data': this.$imageURL + '/bigdata_app/newindex/user.png',
+				'setting': this.$imageURL + '/bigdata_app/newindex/user.png'
+			}
+			return iconMap[icon] || this.$imageURL + '/bigdata_app/newindex/base.png'
+		},
+
+		// 处理菜单点击
+		handleMenuClick(item) {
+			console.log('点击菜单:', item)
+
+			// 根据不同的pur_id跳转到不同的页面
+			const purId = item.pur_id
+
+			// 虫情监测模块
+			if (purId == 36 || purId == 426 || purId == 427 || purId == 44 || purId == 282 || purId == 40 || purId == 428 || purId == 202 || purId == 233) {
+        uni.switchTab({
+					url: '/pages/equipList2/index',
+          success: () => {
+            setTimeout(() => {
+              uni.$emit('purId',purId);
+            }, 50);
+          }
+				})
+			}
+			// 四情基地
+			else if (purId == 25) {
+				uni.navigateTo({
+					url: '/pages/fourBase/index'
+				})
+			}else if(purId == 125){
+        uni.navigateTo({
+          url: '/pages/expertDiagnosis/index'
+        })
+      }
+			else if (purId == 126) {
+				uni.navigateTo({
+					url: '/pages/expertDiagnosis/wormcase?name=虫情百科'
+				})
+			}
+			// 用户管理 || purId == 156
+			else if (purId == 29) {
+				uni.navigateTo({
+					url: '/pages/equipMange/index/index'
+				})
+			}
+			else if (purId == 156) {
+				uni.navigateTo({
+					url: '/pages/afterSale/index'
+				})
+			}
+			// 默认跳转到开发中页面
+			else {
+				uni.navigateTo({
+					url: '/pages/index/developing'
+				})
+			}
+		},
+
+		// 返回上一页
+		goBack() {
+			uni.navigateBack({
+				delta: 1
+			})
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.server-page {
+	width: 100%;
+	min-height: calc(100vh - 112rpx);
+  padding-top: 112rpx;
+  overflow-y: auto;
+  background: linear-gradient(180deg, #D3F4E3 10.82%, #F5F6FA 16.29%, #f5f6fa00 100%), #F5F6FA;
+}
+.device-detail__header {
+  width: 100%;
+  font-size: 28rpx;
+  color: #999;
+  color: #042118;
+  font-family: 'Source Han Sans CN VF';
+  font-weight: 700;
+  position: relative;
+  text-align: center;
+  .arrow-left {
+    position: absolute;
+    left: 32rpx;
+    margin-right: 12rpx;
+  }
+}
+.status_bar {
+	height: var(--status-bar-height);
+	width: 100%;
+	background-color: #fff;
+}
+
+.nav-bar {
+	width: 100%;
+	background-color: #fff;
+	border-bottom: 1px solid #e5e5e5;
+
+	.nav-bar-content {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		height: 88rpx;
+		padding: 0 30rpx;
+
+		.nav-back {
+			width: 60rpx;
+			height: 60rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+
+		.nav-title {
+			font-size: 36rpx;
+			font-weight: 500;
+			color: #333;
+		}
+
+		.nav-placeholder {
+			width: 60rpx;
+		}
+	}
+}
+
+.content-container {
+	padding: 30rpx;
+	padding-bottom: 100rpx;
+}
+
+.loading-container {
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	padding-top: 200rpx;
+
+	.loading-text {
+		margin-top: 30rpx;
+		font-size: 28rpx;
+		color: #999;
+	}
+}
+
+.empty-container {
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	padding-top: 200rpx;
+
+	.empty-img {
+		width: 300rpx;
+		height: 300rpx;
+	}
+
+	.empty-text {
+		margin-top: 30rpx;
+		font-size: 28rpx;
+		color: #999;
+	}
+}
+
+.menu-grid {
+	display: grid;
+	gap: 30rpx 20rpx;
+
+	.menu-item {
+		background-color: #fff;
+		border-radius: 20rpx;
+		padding: 30rpx 20rpx;
+		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
+		transition: all 0.3s ease;
+
+		
+
+		.menu-icon-wrap {
+			margin-bottom: 16rpx;
+      .menu-name{
+        color: #333333;
+        font-family: "Source Han Sans CN VF";
+        font-size: 28rpx;
+        font-weight: 700;
+      }
+      .menu-icon-container{
+        display: grid;
+        grid-template-columns: repeat(4, 1fr);
+        gap: 20rpx;
+        margin-top: 20rpx;
+      }
+      .menu-icon{
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        justify-content: center;
+      }
+			.app_menu_icon {
+				width: 80rpx;
+				height: 80rpx;
+        margin-bottom: 8rpx;
+        &:active {
+          transform: scale(0.95);
+          opacity: 0.8;
+        }
+			}
+      .menu-icon-text{
+        // 超出部分省略号
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        color: #333333;
+        text-align: center;
+        font-family: "Source Han Sans CN VF";
+        font-size: 24rpx;
+        font-weight: 400;
+      }
+		}
+
+		.menu-name {
+			font-size: 24rpx;
+			color: #333;
+			text-align: center;
+			line-height: 1.4;
+			max-width: 100%;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+		}
+	}
+}
+</style>