智慧种植模块一体育苗页面开发,new政务数据大屏路由调整
This commit is contained in:
		
							parent
							
								
									5909699ca8
								
							
						
					
					
						commit
						c4304f8da7
					
				| @ -57,11 +57,11 @@ export const rightApps = [ | |||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     // name: 'sub-government-screen-service',
 |     // name: 'sub-government-screen-service',
 | ||||||
|     name: 'new-digital-agriculture-screen', |     name: 'new-digital-agriculture-screen/v2/land', | ||||||
|     // entry: VITE_APP_SUB_GSS,
 |     // entry: VITE_APP_SUB_GSS,
 | ||||||
|     entry: VITE_APP_SUB_GSR, |     entry: VITE_APP_SUB_GSR, | ||||||
|     // activeRule: '/sub-government-screen-service',
 |     // activeRule: '/sub-government-screen-service',
 | ||||||
|     activeRule: '/new-digital-agriculture-screen', |     activeRule: '/new-digital-agriculture-screen/v2/land', | ||||||
|     title: '数据大屏', |     title: '数据大屏', | ||||||
|     icon: 'images/platform/icon-screen.png', |     icon: 'images/platform/icon-screen.png', | ||||||
|   }, |   }, | ||||||
|  | |||||||
| @ -28,7 +28,7 @@ const props = defineProps({ | |||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| const titles = ref([ | const titles = ref([ | ||||||
|   { label: '首页', value: 'home' }, |   // { label: '首页', value: 'home' }, | ||||||
|   { label: '土地资源', value: 'land' }, |   { label: '土地资源', value: 'land' }, | ||||||
|   { label: '投入品', value: 'inputs' }, |   { label: '投入品', value: 'inputs' }, | ||||||
|   { label: '生产经营主体', value: 'entities' }, |   { label: '生产经营主体', value: 'entities' }, | ||||||
|  | |||||||
| @ -54,7 +54,7 @@ const props = defineProps({ | |||||||
|     type: Array, |     type: Array, | ||||||
|     default() { |     default() { | ||||||
|       return [ |       return [ | ||||||
|         { label: '首页', value: '/new-digital-agriculture-screen/v2/home' }, |         // { label: '首页', value: '/new-digital-agriculture-screen/v2/home' }, | ||||||
|         { label: '土地资源', value: '/new-digital-agriculture-screen/v2/land' }, |         { label: '土地资源', value: '/new-digital-agriculture-screen/v2/land' }, | ||||||
|         { label: '投入品监管', value: '/new-digital-agriculture-screen/v2/inputs' }, |         { label: '投入品监管', value: '/new-digital-agriculture-screen/v2/inputs' }, | ||||||
|         { label: '产出品管理', value: '/new-digital-agriculture-screen/v2/entities' }, |         { label: '产出品管理', value: '/new-digital-agriculture-screen/v2/entities' }, | ||||||
|  | |||||||
| @ -58,10 +58,10 @@ onMounted(() => { | |||||||
|   user-select: none; |   user-select: none; | ||||||
|   box-sizing: border-box; |   box-sizing: border-box; | ||||||
|   width: 100%; |   width: 100%; | ||||||
|   height: 100; |   height: 100%; | ||||||
|   background: |   background: | ||||||
|     url('@/assets/images/basic/containerBG.png') no-repeat center 100%, |     url('../assets/images/basic/containerBG.png') no-repeat center 100%, | ||||||
|     url('@/assets/images/basic/containerBotBG.png') no-repeat bottom center; |     url('../assets/images/basic/containerBotBG.png') no-repeat bottom center; | ||||||
|   &-header { |   &-header { | ||||||
|     width: 100%; |     width: 100%; | ||||||
|     margin-bottom: 16px; |     margin-bottom: 16px; | ||||||
|  | |||||||
| @ -17,21 +17,22 @@ export const constantRoutes = [ | |||||||
|     component: () => import('@/views/error/403.vue'), |     component: () => import('@/views/error/403.vue'), | ||||||
|     hidden: true, |     hidden: true, | ||||||
|   }, |   }, | ||||||
|   { |   // {
 | ||||||
|     path: '/new-digital-agriculture-screen', |   //   // 原来的首页默认配置
 | ||||||
|     name: 'layout', |   //   path: '/new-digital-agriculture-screen',
 | ||||||
|     component: Layout, |   //   name: 'layout',
 | ||||||
|     redirect: '/new-digital-agriculture-screen/v2/home', |   //   component: Layout,
 | ||||||
|     meta: { title: '首页', icon: 'House' }, |   //   redirect: '/new-digital-agriculture-screen/v2/home',
 | ||||||
|     children: [ |   //   meta: { title: '首页', icon: 'House' },
 | ||||||
|       { |   //   children: [
 | ||||||
|         path: '/new-digital-agriculture-screen/v2/home', |   //     {
 | ||||||
|         component: () => import('@/views/home/index.vue'), |   //       path: '/new-digital-agriculture-screen/v2/home',
 | ||||||
|         name: 'home', |   //       component: () => import('@/views/home/index.vue'),
 | ||||||
|         meta: { title: '首页', icon: '' }, |   //       name: 'home',
 | ||||||
|       }, |   //       meta: { title: '首页', icon: '' },
 | ||||||
|     ], |   //     },
 | ||||||
|   }, |   //   ],
 | ||||||
|  |   // },
 | ||||||
|   // ...demoRouters,
 |   // ...demoRouters,
 | ||||||
|   v2, |   v2, | ||||||
|   // {
 |   // {
 | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ export default { | |||||||
|   path: '/new-digital-agriculture-screen', |   path: '/new-digital-agriculture-screen', | ||||||
|   name: 'layout', |   name: 'layout', | ||||||
|   component: Layout, |   component: Layout, | ||||||
|   redirect: '/new-digital-agriculture-screen/v2/home', |   redirect: '/new-digital-agriculture-screen/v2/land', //原home
 | ||||||
|   meta: { title: '首页', icon: '' }, |   meta: { title: '首页', icon: '' }, | ||||||
|   children: [ |   children: [ | ||||||
|     { |     { | ||||||
|  | |||||||
| @ -23,6 +23,7 @@ | |||||||
|     "axios": "^1.6.5", |     "axios": "^1.6.5", | ||||||
|     "echarts": "^5.6.0", |     "echarts": "^5.6.0", | ||||||
|     "element-plus": "^2.7.2", |     "element-plus": "^2.7.2", | ||||||
|  |     "hls.js": "^1.6.2", | ||||||
|     "js-base64": "^3.7.6", |     "js-base64": "^3.7.6", | ||||||
|     "lodash": "^4.17.21", |     "lodash": "^4.17.21", | ||||||
|     "moment": "^2.30.1", |     "moment": "^2.30.1", | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								sub-operation-service/src/assets/images/smartFarm/灌溉控制.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sub-operation-service/src/assets/images/smartFarm/灌溉控制.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.0 KiB | 
							
								
								
									
										
											BIN
										
									
								
								sub-operation-service/src/assets/images/smartFarm/病虫害.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sub-operation-service/src/assets/images/smartFarm/病虫害.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								sub-operation-service/src/assets/images/smartFarm/育苗.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sub-operation-service/src/assets/images/smartFarm/育苗.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.9 KiB | 
| @ -63,6 +63,12 @@ export const constantRoutes = [ | |||||||
|         name: 'fieldInspection', |         name: 'fieldInspection', | ||||||
|         meta: { title: '田间检测' }, |         meta: { title: '田间检测' }, | ||||||
|       }, |       }, | ||||||
|  |       { | ||||||
|  |         path: '/sub-operation-service/smartFarm/growSeedlings', | ||||||
|  |         component: () => import('@/views/smartFarm/growSeedlings/index.vue'), | ||||||
|  |         name: 'growSeedlings', | ||||||
|  |         meta: { title: '一体育苗' }, | ||||||
|  |       }, | ||||||
|     ], |     ], | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|  | |||||||
| @ -48,12 +48,19 @@ const menus = reactive([ | |||||||
|     ], |     ], | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     name: 'purchaser', |     name: 'control', | ||||||
|     title: '生产管理控制', |     title: '生产管理控制', | ||||||
|     icon: 'menu3.png', |     icon: 'menu3.png', | ||||||
|     path: '/sub-operation-service/ecommerce-purchaser', |     path: '/sub-operation-service/ecommerce-purchaser', | ||||||
|     isOpen: false, |     isOpen: false, | ||||||
|     children: [], |     children: [ | ||||||
|  |       { | ||||||
|  |         name: 'control', | ||||||
|  |         title: '一体育苗', | ||||||
|  |         icon: 'menu3.png', | ||||||
|  |         path: '/sub-operation-service/smartFarm/growSeedlings', | ||||||
|  |       }, | ||||||
|  |     ], | ||||||
|   }, |   }, | ||||||
| ]); | ]); | ||||||
| </script> | </script> | ||||||
|  | |||||||
| @ -76,12 +76,19 @@ const leftMenu = reactive([ | |||||||
|     ], |     ], | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     name: 'purchaser', |     name: 'control', | ||||||
|     title: '生产管理控制', |     title: '生产管理控制', | ||||||
|     icon: 'menu3.png', |     icon: 'menu3.png', | ||||||
|     path: '/sub-operation-service/ecommerce-purchaser', |     path: '/sub-operation-service/smartFarm/main', | ||||||
|     isOpen: false, |     isOpen: false, | ||||||
|     children: [], |     children: [ | ||||||
|  |       { | ||||||
|  |         name: 'control', | ||||||
|  |         title: '一体育苗', | ||||||
|  |         icon: 'menu3.png', | ||||||
|  |         path: '/sub-operation-service/smartFarm/growSeedlings', | ||||||
|  |       }, | ||||||
|  |     ], | ||||||
|   }, |   }, | ||||||
| ]); | ]); | ||||||
| 
 | 
 | ||||||
| @ -108,9 +115,12 @@ const toLink = (index) => { | |||||||
|   } |   } | ||||||
| }; | }; | ||||||
| const toLinkSub = (index, c) => { | const toLinkSub = (index, c) => { | ||||||
|  |   console.info('index', index); | ||||||
|  |   console.info('c', c); | ||||||
|   currentCIndex.value = c; |   currentCIndex.value = c; | ||||||
|   let path = leftMenu[index].children[c].path; |   let path = leftMenu[index].children[c].path; | ||||||
|   if (path) { |   if (path) { | ||||||
|  |     console.info('path', path); | ||||||
|     router.push(path); |     router.push(path); | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -0,0 +1,79 @@ | |||||||
|  | <script setup> | ||||||
|  | import { ref, reactive, onMounted, watch } from 'vue'; | ||||||
|  | 
 | ||||||
|  | const props = defineProps({ | ||||||
|  |   column: { | ||||||
|  |     type: Array, | ||||||
|  |     required: true, | ||||||
|  |     default: () => [], | ||||||
|  |   }, | ||||||
|  |   data: { | ||||||
|  |     type: Array, | ||||||
|  |     required: true, | ||||||
|  |     default: () => [], | ||||||
|  |   }, | ||||||
|  |   title: { | ||||||
|  |     type: String, | ||||||
|  |     required: true, | ||||||
|  |     default: () => '', | ||||||
|  |     validator: (items) => { | ||||||
|  |       return items; | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | onMounted(() => { | ||||||
|  |   console.log(props.column); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <el-card style="border-radius: 16px"> | ||||||
|  |       <div class="my-table-title" style="">{{ title }}</div> | ||||||
|  |       <div style="height: 170px"> | ||||||
|  |         <table border="0" cellspacing="0" cellpadding="8"> | ||||||
|  |           <tr class="my-table-th"> | ||||||
|  |             <th v-for="(item, index) in column" :key="item.prop || index"> | ||||||
|  |               {{ item?.label || '' }} | ||||||
|  |             </th> | ||||||
|  |           </tr> | ||||||
|  |           <tr v-for="(item, index) in data" :key="item.id || index"> | ||||||
|  |             <td v-for="(cell, i) of item" :key="item.id || i"> | ||||||
|  |               <span style="color: #25bf82" v-if="cell == '开启'">{{ cell }}</span> | ||||||
|  |               <span style="color: #fe4066" v-else-if="cell == '关闭'">{{ cell }}</span> | ||||||
|  |               <span v-else>{{ cell }}</span> | ||||||
|  |             </td> | ||||||
|  |           </tr> | ||||||
|  |         </table> | ||||||
|  |       </div> | ||||||
|  |     </el-card> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .my-table-title { | ||||||
|  |   font-size: 16px; | ||||||
|  |   font-weight: bold; | ||||||
|  |   text-align: left; | ||||||
|  |   color: #000; | ||||||
|  |   margin-bottom: 16px; | ||||||
|  | } | ||||||
|  | table { | ||||||
|  |   width: 100%; | ||||||
|  |   display: table; | ||||||
|  |   border-collapse: collapse; | ||||||
|  | } | ||||||
|  | td, | ||||||
|  | th { | ||||||
|  |   display: table-cell; | ||||||
|  |   width: auto; | ||||||
|  |   padding: 5px; | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | .my-table-th { | ||||||
|  |   color: #999; | ||||||
|  |   font-weight: 300; | ||||||
|  |   background-color: rgba(37, 191, 130, 0.05); | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @ -0,0 +1,158 @@ | |||||||
|  | <script setup> | ||||||
|  | import { ref, reactive, onMounted, watch } from 'vue'; | ||||||
|  | import { isEmpty, getAssetsFile } from '@/utils'; | ||||||
|  | import { useRoute, useRouter } from 'vue-router'; | ||||||
|  | const route = useRoute(); | ||||||
|  | const router = useRouter(); | ||||||
|  | 
 | ||||||
|  | const props = defineProps({ | ||||||
|  |   devices: { | ||||||
|  |     type: Array, | ||||||
|  |     required: true, | ||||||
|  |     default: () => [], | ||||||
|  |     validator: (items) => { | ||||||
|  |       return items.every((item) => { | ||||||
|  |         return ( | ||||||
|  |           typeof item === 'object' && | ||||||
|  |           item !== null && | ||||||
|  |           typeof item.id === 'number' && | ||||||
|  |           typeof item.isOpen === 'number' && | ||||||
|  |           typeof item.isOperation === 'number' && | ||||||
|  |           typeof item.name === 'string' && | ||||||
|  |           typeof item.serial === 'string' && | ||||||
|  |           typeof item.icon === 'string' && | ||||||
|  |           (!item.status || typeof item.status === 'number') | ||||||
|  |         ); | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   title: { | ||||||
|  |     type: String, | ||||||
|  |     required: true, | ||||||
|  |     default: () => '', | ||||||
|  |     validator: (items) => { | ||||||
|  |       return items; | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <el-card style="border-radius: 16px"> | ||||||
|  |       <div class="device-list-title" style="">{{ title }}</div> | ||||||
|  |       <div style="display: flex; justify-content: flex-start; flex-wrap: wrap; gap: 16px"> | ||||||
|  |         <div v-for="(item, index) in devices" :key="index" class="device"> | ||||||
|  |           <div v-if="item.status == 1" class="status" style="background-color: #25bf82">正常</div> | ||||||
|  |           <div v-else-if="item.status == 0" class="status" style="background-color: #999999">离线</div> | ||||||
|  |           <div v-else-if="item.status == -1" class="status" style="background-color: #fe4066">故障</div> | ||||||
|  |           <div style="display: flex; flex-direction: column; justify-content: space-between; height: 100%"> | ||||||
|  |             <div style="display: flex; justify-content: flex-start"> | ||||||
|  |               <img v-if="item.icon === 'plant'" :src="getAssetsFile('images/smartFarm/育苗.png')" alt="" /> | ||||||
|  |               <img v-else-if="item.icon === 'gogga'" :src="getAssetsFile('images/smartFarm/病虫害.png')" alt="" /> | ||||||
|  |               <img v-else-if="item.icon === 'water'" :src="getAssetsFile('images/smartFarm/灌溉控制.png')" alt="" /> | ||||||
|  |               <div style="margin-left: 10px"> | ||||||
|  |                 <div style="font-size: 16px; text-align: left">{{ item.name }}</div> | ||||||
|  |                 <div style="font-size: 12px; text-align: left">{{ item.serial }}</div> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |             <div style="text-align: left; font-size: 16px; display: flex; justify-content: space-between; padding-left: 6px"> | ||||||
|  |               <div style="width: 128px; height: 30px; border-radius: 15px; background-color: #ffffff"> | ||||||
|  |                 <div v-if="item.status == '0'" :class="{ 'swich-box2': true, 'swich-box-close': item.isOpen == 0 }"> | ||||||
|  |                   <span class="swich-btn" :style="{ color: item.isOpen == 0 ? '#999999' : '#ffffff' }">开启</span> | ||||||
|  |                   <span class="swich-btn" :style="{ color: item.isOpen == 1 ? '#999999' : '#ffffff' }">关闭</span> | ||||||
|  |                 </div> | ||||||
|  |                 <div v-else :class="{ 'swich-box': true, 'swich-box-close': item.isOpen == 0 }"> | ||||||
|  |                   <span class="swich-btn" :style="{ color: item.isOpen == 0 ? '#25bf82' : '#ffffff' }" @click="item.isOpen = 1">开启</span> | ||||||
|  |                   <span class="swich-btn" :style="{ color: item.isOpen == 1 ? '#999999' : '#ffffff' }" @click="item.isOpen = 0">关闭</span> | ||||||
|  |                 </div> | ||||||
|  |               </div> | ||||||
|  |               <span v-if="item.isOperation == 0" style="color: #999999">待机中...</span> | ||||||
|  |               <span v-else-if="item.isOperation == 1" style="color: #25bf82">运作中...</span> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </el-card> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .device-list-title { | ||||||
|  |   font-size: 16px; | ||||||
|  |   font-weight: bold; | ||||||
|  |   text-align: left; | ||||||
|  |   color: #000; | ||||||
|  |   margin-bottom: 20px; | ||||||
|  | } | ||||||
|  | .device { | ||||||
|  |   height: 150px; | ||||||
|  |   flex: 0 0 calc(33.33% - 11px); | ||||||
|  |   background-color: #f5f5f5; | ||||||
|  |   border-radius: 16px; | ||||||
|  |   position: relative; | ||||||
|  |   cursor: pointer; | ||||||
|  |   padding: 16px 16px 16px 10px; | ||||||
|  |   img { | ||||||
|  |     height: 64px; | ||||||
|  |     width: 64px; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .status { | ||||||
|  |   border-radius: 0 16px 0 16px; | ||||||
|  |   height: 32px; | ||||||
|  |   line-height: 26px; | ||||||
|  |   width: 40px; | ||||||
|  |   position: absolute; | ||||||
|  |   right: 0; | ||||||
|  |   top: 0; | ||||||
|  |   display: flex; | ||||||
|  |   justify-content: center; | ||||||
|  |   align-items: center; | ||||||
|  |   color: #ffffff; | ||||||
|  |   font-size: 12px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .swich-box, | ||||||
|  | .swich-box2 { | ||||||
|  |   width: 128px; | ||||||
|  |   height: 30px; | ||||||
|  |   border-radius: 15px; | ||||||
|  |   z-index: 0; | ||||||
|  |   position: relative; | ||||||
|  |   &::before { | ||||||
|  |     display: inline-block; | ||||||
|  |     position: absolute; | ||||||
|  |     content: ''; | ||||||
|  |     top: 0; | ||||||
|  |     left: 0; | ||||||
|  |     z-index: -1; | ||||||
|  |     width: 64px; | ||||||
|  |     height: 30px; | ||||||
|  |     background-color: #25bf82; | ||||||
|  |     border-radius: 15px; | ||||||
|  |     transition: all 0.3s ease-in-out; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   &.swich-box-close::before { | ||||||
|  |     left: 64px; | ||||||
|  |     background-color: #999999; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   ::v-deep .swich-btn { | ||||||
|  |     display: inline-block; | ||||||
|  |     font-size: 16px; | ||||||
|  |     width: 64px; | ||||||
|  |     height: 30px; | ||||||
|  |     line-height: 30px; | ||||||
|  |     border-radius: 15px; | ||||||
|  |     text-align: center; | ||||||
|  |     transition: all 0.3s ease-in-out; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .swich-box2 { | ||||||
|  |   &::before { | ||||||
|  |     background-color: #999999; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @ -0,0 +1,204 @@ | |||||||
|  | <template> | ||||||
|  |   <section> | ||||||
|  |     <common> | ||||||
|  |       <template #main> | ||||||
|  |         <div> | ||||||
|  |           <ProduceDevices :title="'育苗设备'" :devices="devices"></ProduceDevices> | ||||||
|  |         </div> | ||||||
|  |         <div style="display: flex; justify-content: space-between; margin-top: 20px"> | ||||||
|  |           <MyTable :title="'育苗策略'" :data="leftTableData" :column="leftTableTitle" style="width: 60%; margin-right: 20px"></MyTable> | ||||||
|  |           <MyTable :title="'育苗记录'" :data="rightTableData" :column="rightTableTitle" style="flex: 1"></MyTable> | ||||||
|  |         </div> | ||||||
|  |       </template> | ||||||
|  |     </common> | ||||||
|  |   </section> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script setup> | ||||||
|  | import { ref } from 'vue'; | ||||||
|  | import Common from '../components/common.vue'; | ||||||
|  | import MyTable from '@/views/smartFarm/components/myTable.vue'; | ||||||
|  | import ProduceDevices from '@/views/smartFarm/components/produceDevices.vue'; | ||||||
|  | 
 | ||||||
|  | const devices = ref([ | ||||||
|  |   { | ||||||
|  |     name: 'A-001', | ||||||
|  |     serial: 'YM20250101001', // 设备序列号 | ||||||
|  |     icon: 'plant', // plant育苗 gogga病虫害 water喷灌 | ||||||
|  |     isOpen: 1, // 0:关闭 1:开启 | ||||||
|  |     isOperation: 0, // 0:待机中 1:运作中 | ||||||
|  |     status: '1', // -1:故障 0:离线 1:正常 | ||||||
|  |     id: 0, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     name: 'A-002', | ||||||
|  |     serial: 'YM20250101002', | ||||||
|  |     icon: 'plant', | ||||||
|  |     isOpen: 0, | ||||||
|  |     isOperation: 1, | ||||||
|  |     status: '1', | ||||||
|  |     id: 1, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     name: 'A-003', | ||||||
|  |     serial: 'YM20250101003', | ||||||
|  |     icon: 'gogga', | ||||||
|  |     isOpen: 0, | ||||||
|  |     isOperation: 0, | ||||||
|  |     status: '-1', | ||||||
|  |     id: 2, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     name: 'A-004', | ||||||
|  |     serial: 'YM20250101004', | ||||||
|  |     icon: 'water', | ||||||
|  |     isOpen: 1, | ||||||
|  |     isOperation: 0, | ||||||
|  |     status: '0', | ||||||
|  |     id: 3, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     name: 'A-005', | ||||||
|  |     serial: 'YM20250101005', | ||||||
|  |     icon: 'gogga', | ||||||
|  |     isOpen: 0, | ||||||
|  |     isOperation: 1, | ||||||
|  |     status: '1', | ||||||
|  |     id: 4, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     name: 'A-006', | ||||||
|  |     serial: 'YM20250101006', | ||||||
|  |     icon: 'water', | ||||||
|  |     isOpen: 1, | ||||||
|  |     isOperation: 0, | ||||||
|  |     status: '1', | ||||||
|  |     id: 5, | ||||||
|  |   }, | ||||||
|  | ]); | ||||||
|  | 
 | ||||||
|  | const leftTableData = ref([ | ||||||
|  |   { | ||||||
|  |     name: '温度', | ||||||
|  |     value: '>25', | ||||||
|  |     device: '制冷机', | ||||||
|  |     behavior: '开启', | ||||||
|  |     time: 10, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     name: '湿度', | ||||||
|  |     value: '<24', | ||||||
|  |     device: '喷洒机', | ||||||
|  |     behavior: '关闭', | ||||||
|  |     time: 15, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     name: 'PH值', | ||||||
|  |     value: '>8', | ||||||
|  |     device: '配肥机', | ||||||
|  |     behavior: '开启', | ||||||
|  |     time: 5, | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     name: '风速', | ||||||
|  |     value: '>中风', | ||||||
|  |     device: '通风窗', | ||||||
|  |     behavior: '关闭', | ||||||
|  |     time: '/', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     name: '光照', | ||||||
|  |     value: '>强光', | ||||||
|  |     device: '幕布', | ||||||
|  |     behavior: '开启', | ||||||
|  |     time: '/', | ||||||
|  |   }, | ||||||
|  | ]); | ||||||
|  | const leftTableTitle = ref([ | ||||||
|  |   { | ||||||
|  |     label: '参数名称', | ||||||
|  |     prop: 'name', | ||||||
|  |     width: 'auto', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     label: '参数值', | ||||||
|  |     prop: 'value', | ||||||
|  |     width: 'auto', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     label: '智能设备', | ||||||
|  |     prop: 'device', | ||||||
|  |     width: 'auto', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     label: '机械行为', | ||||||
|  |     prop: 'behavior', | ||||||
|  |     width: 'auto', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     label: '持续时间(min)', | ||||||
|  |     prop: 'time', | ||||||
|  |     width: 'auto', | ||||||
|  |   }, | ||||||
|  | ]); | ||||||
|  | 
 | ||||||
|  | const rightTableData = ref([ | ||||||
|  |   { | ||||||
|  |     date: '2025-01-01 10:36', | ||||||
|  |     device: '制冷机', | ||||||
|  |     behavior: '开启', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     date: '2025-01-01 10:30', | ||||||
|  |     device: '喷洒机', | ||||||
|  |     behavior: '关闭', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     date: '2025-01-01 10:22', | ||||||
|  |     device: '配肥机', | ||||||
|  |     behavior: '开启', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     date: '2025-01-01 10:10', | ||||||
|  |     device: '通风窗', | ||||||
|  |     behavior: '关闭', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     date: '2025-01-01 10:00', | ||||||
|  |     device: '幕布', | ||||||
|  |     behavior: '开启', | ||||||
|  |   }, | ||||||
|  | ]); | ||||||
|  | const rightTableTitle = ref([ | ||||||
|  |   { | ||||||
|  |     label: '执行时间', | ||||||
|  |     prop: 'date', | ||||||
|  |     width: 'auto', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     label: '智能设备', | ||||||
|  |     prop: 'device', | ||||||
|  |     width: 'auto', | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     label: '机械行为', | ||||||
|  |     prop: 'behavior', | ||||||
|  |     width: 'auto', | ||||||
|  |   }, | ||||||
|  | ]); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | .plantStatus { | ||||||
|  |   display: flex; | ||||||
|  |   justify-content: space-between; | ||||||
|  |   font-size: 14px; | ||||||
|  |   margin: 7px 0; | ||||||
|  |   .leftKey { | ||||||
|  |     color: #000000; | ||||||
|  |   } | ||||||
|  |   .rightValue { | ||||||
|  |     color: #25bf82; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @ -4417,6 +4417,13 @@ __metadata: | |||||||
|   languageName: node |   languageName: node | ||||||
|   linkType: hard |   linkType: hard | ||||||
| 
 | 
 | ||||||
|  | "hls.js@npm:^1.6.2": | ||||||
|  |   version: 1.6.2 | ||||||
|  |   resolution: "hls.js@npm:1.6.2" | ||||||
|  |   checksum: 10c0/c8700d88610afa85bf441cd624f6d548c1fea59c0e510fb05be02f9a33660b8a46cb17910ea5179b9d1307ce9242f4e904d8aa98d7f63d0df750d6d0f6e85134 | ||||||
|  |   languageName: node | ||||||
|  |   linkType: hard | ||||||
|  | 
 | ||||||
| "hookified@npm:^1.6.0": | "hookified@npm:^1.6.0": | ||||||
|   version: 1.6.0 |   version: 1.6.0 | ||||||
|   resolution: "hookified@npm:1.6.0" |   resolution: "hookified@npm:1.6.0" | ||||||
| @ -8512,6 +8519,7 @@ __metadata: | |||||||
|     eslint-config-prettier: "npm:^9.1.0" |     eslint-config-prettier: "npm:^9.1.0" | ||||||
|     eslint-plugin-prettier: "npm:^5.1.3" |     eslint-plugin-prettier: "npm:^5.1.3" | ||||||
|     eslint-plugin-vue: "npm:^9.20.1" |     eslint-plugin-vue: "npm:^9.20.1" | ||||||
|  |     hls.js: "npm:^1.6.2" | ||||||
|     js-base64: "npm:^3.7.6" |     js-base64: "npm:^3.7.6" | ||||||
|     lodash: "npm:^4.17.21" |     lodash: "npm:^4.17.21" | ||||||
|     mockjs: "npm:^1.1.0" |     mockjs: "npm:^1.1.0" | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 2090205686@qq.com
						2090205686@qq.com