Jelajahi Sumber

增加主页菜单与tab项的联动

chenwen 2 tahun lalu
induk
melakukan
2b3371d102
7 mengubah file dengan 218 tambahan dan 7 penghapusan
  1. 1 1
      index.html
  2. 7 1
      public/test/menu.json
  3. 8 2
      src/components/Header.vue
  4. 5 2
      src/pages/Home.vue
  5. 9 0
      src/pages/desktop.vue
  6. 182 0
      src/pages/sys/User.vue
  7. 6 1
      src/store/home.js

+ 1 - 1
index.html

@@ -4,7 +4,7 @@
     <meta charset="UTF-8" />
     <link rel="icon" href="/favicon.ico" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>Vite App</title>
+    <title>智能油田生产决策平台</title>
   </head>
   <body>
     <div id="app"></div>

+ 7 - 1
public/test/menu.json

@@ -2,7 +2,8 @@
 	{
 		"menuId":"1",
 		"menuName":"首页",
-		"icon":"HomeFilled"
+		"icon":"HomeFilled",
+		"menuLink":"desktop.vue"
 	},
 	{
 		"menuId":"2",
@@ -26,6 +27,11 @@
 		"menuName":"系统管理",
 		"icon":"Tools",
 		"subMenus":[
+			{
+				"menuId":"5-0",
+				"menuName":"用户管理",
+				"menuLink":"sys/User.vue"
+			},
 			{
 				"menuId":"5-1",
 				"menuName":"井站基础数据"

+ 8 - 2
src/components/Header.vue

@@ -13,7 +13,7 @@
 				background-color="#242f42"
 			    text-color="#bfcbd9"
 			    active-text-color="#20a0ff"
-				
+				:default-active="defActiveTag"
 			  >
 			   
 				<navmenu-item v-for="menu in menus" :key="menu.menuId" :item="menu" @clickMenuItem="menuClickHandle"></navmenu-item>
@@ -58,19 +58,25 @@
 	import { fetchData } from "../api/header.js"
 	import navmenuItem from "./NavmenuItem.vue"
 	
+	const store=useHomeStore()
+	
+	const defActiveTag=computed(() => store.activeTab||'1')
+	
 	const menus = ref([])
 	
 	const getData = () => {
 	    fetchData({}).then((res) => {
 	        console.log(res)
 			menus.value=res
+			
+			store.currentMenu=res[0]
 	    });
 	};
 	getData();
 	
 	
 	
-	const store=useHomeStore()
+	
 	
 	const username=ref('测试用户')
 	

+ 5 - 2
src/pages/Home.vue

@@ -9,7 +9,6 @@
 						<component :is="item.content"/>
 					</transition>
 					
-					<!-- <component :is="item.content"/> -->
 				 </el-tab-pane>
 			</el-tabs>
 		</div>
@@ -36,8 +35,8 @@
 	
 	
    watch(currentMenu,async(newMenu,oldMenu) => {
+	  console.log('menu click')
 	  loadMenuPage(newMenu.menuLink).then(component => {
-		   console.log(component)
 		   newMenu["content"]=markRaw(component.default)
 		   store.addTab(newMenu)
 	   })
@@ -56,6 +55,10 @@
 		height: calc(100% - 58px);
 	}
 	
+	.tabWrap:deep(.el-tabs__content .el-tab-pane){
+		height:100%;
+	}
+	
 	.content-box:deep(.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close){
 		top:-10px !important;
 		right:-10px !important;

+ 9 - 0
src/pages/desktop.vue

@@ -0,0 +1,9 @@
+<template>
+	<div>主页内容</div>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 182 - 0
src/pages/sys/User.vue

@@ -0,0 +1,182 @@
+<template>
+ <div class="qpage">
+	 <el-form :inline="true" :model="formInline" class="query-form-inline">
+	   <el-form-item label="用户名">
+	     <el-input v-model="formInline.user" placeholder="请输入用户名关键字" />
+	   </el-form-item>
+	   
+	   <el-form-item>
+	     <el-button type="primary" @click="onSubmit" loading>检索</el-button>
+	   </el-form-item>
+	 </el-form>
+	 
+	 <div class="qpage-body">
+		<el-table :data="tableData" style="width: 100%;height:100%;"  border stripe>
+		     <el-table-column fixed prop="date" label="Date" width="150" />
+		     <el-table-column prop="name" label="Name" width="120" />
+		     <el-table-column prop="state" label="State" width="120" />
+		     <el-table-column prop="city" label="City" width="320" />
+		     <el-table-column prop="address" label="Address" width="600" />
+		     <el-table-column prop="zip" label="Zip" width="120" />
+		</el-table>
+	 </div>
+	 
+	 <div class="qpage-foot">
+		 <el-pagination
+		       v-model:current-page="currentPage4"
+		       v-model:page-size="pageSize4"
+		       :page-sizes="[100, 200, 300, 400]"
+		       :small="false"
+		       :disabled="false"
+		       :background="false"
+		       layout="total, sizes, prev, pager, next, jumper"
+		       :total="400"
+		      
+		     />
+	 </div>
+ </div>
+  
+</template>
+
+<script  setup>
+import { reactive,ref } from 'vue'
+
+const formInline = reactive({
+  user: '',
+  region: '',
+})
+
+const pageSize4 = ref(100)
+const currentPage4 = ref(4)
+
+const onSubmit = () => {
+  console.log('submit!')
+  alert();
+}
+
+const tableData = [
+  {
+    date: '2016-05-03',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-02',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-04',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-01',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-08',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-06',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-07',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-06',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-07',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-06',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-07',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-06',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+  {
+    date: '2016-05-07',
+    name: 'Tom',
+    state: 'California',
+    city: 'Los Angeles',
+    address: 'No. 189, Grove St, Los Angeles',
+    zip: 'CA 90036',
+  },
+]
+</script>
+
+<style scoped>
+	.qpage{
+		padding: 10px;
+		box-sizing: border-box;
+		height: 100%;
+		
+	}
+	.query-form-inline{
+		margin:0 0px;
+	}
+	
+	.qpage-body{
+		height: calc(100% - 100px);
+	}
+	.qpage-foot{
+		padding:10px 0;
+	}
+</style>

+ 6 - 1
src/store/home.js

@@ -28,7 +28,12 @@ export const useHomeStore = defineStore('home', {
 	  closeTab(tabId){
 		this.menuTabs=this.menuTabs.filter((item) => item.name!=tabId)
 		if(this.menuTabs.length>0){
-			   this.activeTab=(this.menuTabs)[this.menuTabs.length-1]['name']
+			   this.currentMenu=(this.menuTabs)[this.menuTabs.length-1]
+			   this.activeTab=this.currentMenu['name']
+			   
+		}
+		else{
+			this.currentMenu=null
 		}
 	  },
 	  existTab(tabId){