From 8d817b3847f9a96850c1a28f7923940697df7235 Mon Sep 17 00:00:00 2001
From: 李林 <z1292839451@163.com>
Date: 星期一, 26 二月 2024 02:12:35 +0800
Subject: [PATCH] 框架搭建

---
 src/components/view/registrant-count.vue |    2 
 src/components/tool/value-table.vue      |   90 ++-
 src/components/view/data-comparison.vue  |   23 
 src/components/view/role-manage.vue      |    8 
 src/components/view/finance-submit.vue   |   61 ++
 static/js/menu.js                        |  743 ++++++++++++++++++++++++++++++
 src/components/view/person-manage.vue    |    8 
 src/view/404.vue                         |    8 
 src/view/index.vue                       |  264 +++-------
 src/assets/api/controller.js             |   19 
 src/components/view/enums.vue            |   34 
 src/view/enter.vue                       |    2 
 src/components/view/product-count.vue    |   16 
 index.html                               |    2 
 src/components/view/fans-submit.vue      |    8 
 src/App.vue                              |    6 
 src/components/view/data-reporting.vue   |  121 ++++
 src/components/view/index-index.vue      |    4 
 18 files changed, 1,129 insertions(+), 290 deletions(-)

diff --git a/index.html b/index.html
index 2dabd97..c074589 100644
--- a/index.html
+++ b/index.html
@@ -6,7 +6,7 @@
     <meta http-equiv="Expires" CONTENT="0">
     <meta http-equiv="Cache-Control" CONTENT="no-cache">
     <meta http-equiv="Pragma" CONTENT="no-cache">
-    <title>鑳滀簯鏁版嵁绠$悊骞冲彴</title>
+    <title>LIMS瀹為獙瀹ょ鐞嗙郴缁�</title>
     <link rel="icon" type="image/x-icon" href="./static/img/logo.png">
   </head>
   <body>
diff --git a/src/App.vue b/src/App.vue
index 7ebe8dd..ddf8283 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,6 +1,6 @@
 <template>
-	<div id="app">
-		<router-view />
+	<div id="app" style="overflow: hidden;">
+		<router-view/>
 	</div>
 </template>
 
@@ -135,7 +135,7 @@
 		color: #333;
 	}
 
-	.has-gutter .el-table__cell .cell {
+	.el-table__header .has-gutter .el-table__cell .cell {
 		font-size: 14px !important;
 		font-weight: 500;
 	}
diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js
index 5abe1b0..a3738d8 100644
--- a/src/assets/api/controller.js
+++ b/src/assets/api/controller.js
@@ -23,6 +23,7 @@
 	selectMenuList: "/role/selectMenuList", //鑾峰彇鑿滃崟
 	selectPowerByRoleId: "/role/selectPowerByRoleId", //閫氳繃瑙掕壊id鏌ヨ鏉冮檺鍒楄〃
 	upRole: "/role/upRole", //淇敼瑙掕壊
+	getUserMenu: "/user/getUserMenu", //鑾峰彇鐢ㄦ埛鏋氫妇
 }
 
 const dataReporting = {
@@ -40,11 +41,14 @@
 	downFinanceSubmitFile: "/dataReporting/downFinanceSubmitFile", //瀵煎嚭璐㈠姟涓婃姤
 	inputFinanceSubmitCsv: "/dataReporting/inputFinanceSubmitCsv", //瀵煎叆璐㈠姟涓婃姤
 	selectDataComparisonDtoPageList: "/dataReporting/selectDataComparisonDtoPageList", //鑾峰彇鏁版嵁瀵规瘮鍒楄〃
+	deleteAllData: "/dataReporting/deleteAllData", //涓�閿垹闄ゆ墍鏈夌殑鏁版嵁涓婃姤
+	selectDataReportingForCreateUserNames: "/dataReporting/selectDataReportingForCreateUserNames", //鑾峰彇鏁版嵁涓婃姤鐨勭櫥璁颁汉绛涢�夐」
 
 	selectFansSubmitList: "/dataReporting/selectFansSubmitList", //鑾峰彇杩涚矇涓婃姤鍒楄〃
 	delFansSubmit: "/dataReporting/delFansSubmit", //鍒犻櫎杩涚矇涓婃姤淇℃伅
 	updateFansSubmit: "/dataReporting/updateFansSubmit", //淇敼杩涚矇涓婃姤淇℃伅
 	addFansSubmit: "/dataReporting/addFansSubmit", //娣诲姞杩涚矇涓婃姤淇℃伅
+	selectVxs: "/dataReporting/selectVxs", //鑾峰彇杩涚矇涓殑寰俊鍙峰垪琛�
 
 	selectFinanceSubmitList: "/dataReporting/selectFinanceSubmitList", //鑾峰彇璐㈠姟涓婃姤鍒楄〃
 	delFinanceSubmit: "/dataReporting/delFinanceSubmit", //鍒犻櫎璐㈠姟涓婃姤淇℃伅
@@ -57,15 +61,8 @@
 }
 
 const enums = {
-	selectCustomEnumLists: "/enum/selectCustomEnumLists", //鑾峰彇瀹㈡埛鍒楄〃
-	selectCustomEnumList: "/enum/selectCustomEnumList", //鑾峰彇瀹㈡埛鏋氫妇
-	delCustomEnum: "/enum/delCustomEnum", //鍒犻櫎瀹㈡埛淇℃伅
-	updateCustomEnum: "/enum/updateCustomEnum", //淇敼瀹㈡埛淇℃伅
-	addCustomEnum: "/enum/addCustomEnum", //娣诲姞瀹㈡埛淇℃伅
-
-	selectProductEnumLists: "/enum/selectProductEnumLists", //鑾峰彇椤圭洰鍒楄〃
-	selectProductEnumList: "/enum/selectProductEnumList", //鑾峰彇椤圭洰鏋氫妇
-	delProductEnum: "/enum/delProductEnum", //鍒犻櫎椤圭洰淇℃伅
-	updateProductEnum: "/enum/updateProductEnum", //淇敼椤圭洰淇℃伅
-	addProductEnum: "/enum/addProductEnum", //娣诲姞椤圭洰淇℃伅
+	selectEnumList: "/enum/selectEnumList", //鑾峰彇鏋氫妇鍒楄〃
+	addEnum: "/enum/addEnum", //娣诲姞鏋氫妇
+	upEnum: "/enum/upEnum", //淇敼鏋氫妇
+	delEnum: "/enum/delEnum", //鍒犻櫎鏋氫妇
 }
diff --git a/src/components/tool/value-table.vue b/src/components/tool/value-table.vue
index fadc898..f9400e7 100644
--- a/src/components/tool/value-table.vue
+++ b/src/components/tool/value-table.vue
@@ -35,7 +35,7 @@
 	.value-table .el-upload {
 		width: 100%;
 	}
-	
+
 	.value-table .el-upload-dragger {
 		width: 100%;
 	}
@@ -46,8 +46,8 @@
 		<div class="table">
 			<el-table ref="eltable" :data="tableData" style="width: 100%;" height="100%" tooltip-effect="dark" border
 				@selection-change="selectChange" @select="select" v-loading="loading" @sort-change="sortChange"
-				@row-click="rowClick">
-				<el-table-column type="selection" width="50" v-if="data.showSelect">
+				@row-click="rowClick" :show-summary="data.countFleid!=undefined && data.countFleid.length > 0" :summary-method="getSummaries">
+				<el-table-column type="selection" width="65" v-if="data.showSelect">
 				</el-table-column>
 				<el-table-column align="center" type="index" label="搴忓彿" width="70" v-if="data.isIndex">
 				</el-table-column>
@@ -99,9 +99,10 @@
 			</span>
 		</el-dialog>
 		<el-dialog title="鏂板" :visible.sync="addDia" width="500px">
-			<div class="body" v-if="addDia" style="max-height: 600px;overflow-y: auto;padding: 5px 0;">
+			<div class="body" v-if="addDia" style="max-height: 550px;overflow-y: auto;padding: 5px 0;">
 				<el-row v-for="(a, ai) in upHead" :key="ai" style="line-height: 50px;">
-					<el-col :span="6" style="text-align: right;"><span class="required-span" v-if="showAddReq(a.label)">* </span>{{a.value}}锛�</el-col>
+					<el-col :span="6" style="text-align: right;"><span class="required-span" v-if="showAddReq(a.label)">*
+						</span>{{a.value}}锛�</el-col>
 					<el-col :span="16" :offset="1">
 						<el-input v-model="upData[a.label]" size="small" clearable :placeholder="`璇疯緭鍏�${a.value}`"
 							v-if="showType(a.label, data.selectField) == null"></el-input>
@@ -130,9 +131,9 @@
 		</el-dialog>
 		<el-dialog title="鏁版嵁瀵煎叆" :visible.sync="uploadDia" width="500px">
 			<div style="margin: 0 auto;">
-				<el-upload ref="upload" drag :action="javaApi + inputUrl" :headers="token"
-					:file-list="fileList" name="file" :auto-upload="false" accept=".csv" :limit="1" :on-change="beforeUpload"
-					:on-success="onSuccess" :on-error="onError">
+				<el-upload ref="upload" drag :action="javaApi + inputUrl" :headers="token" :file-list="fileList" name="file"
+					:auto-upload="false" accept=".csv" :limit="1" :on-change="beforeUpload" :on-success="onSuccess"
+					:on-error="onError" :data="{param: data.uploadStr}">
 					<i class="el-icon-upload"></i>
 					<div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
 				</el-upload>
@@ -228,7 +229,8 @@
 						font: '鍒犻櫎',
 						type: 'text'
 					}],
-					type: []
+					type: [],
+					uploadStr: ""
 				},
 				tableHead: [],
 				tableData: [],
@@ -343,23 +345,23 @@
 				var str = ob[val]
 				return str == undefined ? null : ob[val].select
 			},
-			showAddReq(label){
-				if(this.data.requiredAdd==undefined){
+			showAddReq(label) {
+				if (this.data.requiredAdd == undefined) {
 					return
 				}
 				for (var i = 0; i < this.data.requiredAdd.length; i++) {
-					if(label == this.data.requiredAdd[i]){
+					if (label == this.data.requiredAdd[i]) {
 						return true
 					}
 				}
 				return false
 			},
-			showUpReq(label){
-				if(this.data.requiredUp==undefined){
+			showUpReq(label) {
+				if (this.data.requiredUp == undefined) {
 					return
 				}
 				for (var i = 0; i < this.data.requiredUp.length; i++) {
-					if(label == this.data.requiredUp[i]){
+					if (label == this.data.requiredUp[i]) {
 						return true
 					}
 				}
@@ -429,11 +431,11 @@
 					return
 				}
 				for (var i = 0; i < this.data.requiredUp.length; i++) {
-					if(this.upData[this.data.requiredUp[i]]==null||this.upData[this.data.requiredUp[i]]==''){
-						var list = this.upHead.filter(a=>{
-							if(a.label == this.data.requiredUp[i]) return a
+					if (this.upData[this.data.requiredUp[i]] == null || this.upData[this.data.requiredUp[i]] == '') {
+						var list = this.upHead.filter(a => {
+							if (a.label == this.data.requiredUp[i]) return a
 						})
-						if(list[0].value == undefined) continue
+						if (list[0].value == undefined) continue
 						this.$message.error(list[0].value + '鏄繀濉」')
 						return
 					}
@@ -500,11 +502,11 @@
 					return
 				}
 				for (var i = 0; i < this.data.requiredAdd.length; i++) {
-					if(this.upData[this.data.requiredAdd[i]]==null||this.upData[this.data.requiredAdd[i]]==''){
-						var list = this.upHead.filter(a=>{
-							if(a.label == this.data.requiredAdd[i]) return a
+					if (this.upData[this.data.requiredAdd[i]] == null || this.upData[this.data.requiredAdd[i]] == '') {
+						var list = this.upHead.filter(a => {
+							if (a.label == this.data.requiredAdd[i]) return a
 						})
-						if(list[0].value == undefined) continue
+						if (list[0].value == undefined) continue
 						this.$message.error(list[0].value + '鏄繀濉」')
 						return
 					}
@@ -596,7 +598,7 @@
 				this.$refs.upload.clearFiles()
 				this.uploadDia = false
 				this.uploading = false
-				if(response.code==201){
+				if (response.code == 201) {
 					this.$message.error(response.message)
 					return
 				}
@@ -608,16 +610,50 @@
 				this.$refs.upload.clearFiles()
 				this.uploading = false
 			},
-			isDisabled(label){
-				if(this.data.disabledUp==undefined){
+			isDisabled(label) {
+				if (this.data.disabledUp == undefined) {
 					return
 				}
 				for (var i = 0; i < this.data.disabledUp.length; i++) {
-					if(label == this.data.disabledUp[i]){
+					if (label == this.data.disabledUp[i]) {
 						return true
 					}
 				}
 				return false
+			},
+			getSummaries(param) {
+				const {
+					columns,
+					data
+				} = param;
+				const sums = [];
+				columns.forEach((column, index) => {
+					if (index === 0) {
+						sums[index] = '鍚堣';
+						return;
+					}
+					const values = data.map(item => Number(item[column.property]));
+					if(this.data.countFleid==undefined){
+						sums[index] = ''
+						return
+					}
+					if (this.data.countFleid.filter(str=>{
+						return str === column.property
+					}).length > 0) {
+						sums[index] = values.reduce((prev, curr) => {
+							const value = Number(curr);
+							if (!isNaN(value)) {
+								return prev + curr;
+							} else {
+								return prev;
+							}
+						}, 0);
+						sums[index] += '';
+					} else {
+						sums[index] = '';
+					}
+				});
+				return sums;
 			}
 		}
 	}
diff --git a/src/components/view/data-comparison.vue b/src/components/view/data-comparison.vue
index dfe4142..3571fca 100644
--- a/src/components/view/data-comparison.vue
+++ b/src/components/view/data-comparison.vue
@@ -58,7 +58,7 @@
 				<div class="search_label">鐧昏鏃ユ湡锛�</div>
 				<div class="search_input">
 					<el-date-picker size="small" v-model="componentData.entity.createTime" type="date" placeholder="閫夋嫨鏃ユ湡"
-						value-format="yyyy-MM-dd" clearable></el-date-picker>
+						value-format="yyyy-MM-dd" :clearable="false" :editable="false"></el-date-picker>
 				</div>
 			</div>
 			<div class="search_thing" style="padding-left: 30px;">
@@ -118,42 +118,29 @@
 				mm = "0" + mm;
 			}
 			this.componentData.entity.createTime = `${yyyy}-${mm}-${dd} 00:00:00`
+			this.componentData.entity.name = localStorage.getItem('data_com_name')==undefined?null:localStorage.getItem('data_com_name')
 		},
 		mounted() {
 			this.entityCopy = this.HaveJson(this.componentData.entity)
-			// this.selectDataComparisonDtoPageList()
 		},
 		methods: {
 			refreshTable() {
 				if (this.componentData.entity.name == null || this.componentData.entity.name == '') {
-					this.$message.error('璐︽埛鍚嶇О鏄繀濉」')
+					this.$message.error('涓昏处鎴峰悕绉版槸蹇呭~椤�')
 				} else if (this.componentData.entity.comparisonName == null || this.componentData.entity.comparisonName == '') {
-					this.$message.error('瀵规瘮鐨勮处鎴峰悕绉版槸蹇呭~椤�')
+					this.$message.error('瀛愯处鎴峰悕绉版槸蹇呭~椤�')
 				} else if (this.componentData.entity.createTime == null) {
 					this.$message.error('鐧昏鏃堕棿鏄繀濉」')
 				} else if (this.componentData.entity.name === this.componentData.entity.comparisonName) {
 					this.$message.error('瀵规瘮鐨勮处鎴蜂笉鑳介噸澶�')
 				} else {
+					localStorage.setItem('data_com_name', this.componentData.entity.name)
 					this.$refs['ValueTable'].selectList()
 				}
 			},
 			refresh() {
 				this.componentData.entity = this.HaveJson(this.entityCopy)
 				this.upIndex++
-			},
-			selectDataComparisonDtoPageList() {
-				this.$axios.post(this.$api.dataReporting.selectDataComparisonDtoPageList, {
-					headers: {
-						'Content-Type': 'application/json'
-					}
-				}).then(res => {
-					res.data.forEach(a => {
-						a.isClick = false
-						a.look = false
-					})
-					this.menu = res.data
-					this.menuCopy = this.HaveJson(res.data)
-				})
 			}
 		}
 	}
diff --git a/src/components/view/data-reporting.vue b/src/components/view/data-reporting.vue
index 39ae996..effeab1 100644
--- a/src/components/view/data-reporting.vue
+++ b/src/components/view/data-reporting.vue
@@ -34,6 +34,9 @@
 		height: calc(100% - 60px - 80px - 10px - 40px);
 		padding: 20px;
 	}
+	.el-radio-group{
+		width: 100%;
+	}
 </style>
 <style>
 	.data_reporting .data_reporting_dia .el-dialog__body {
@@ -55,7 +58,7 @@
 			<el-row class="title">
 				<el-col :span="12" style="padding-left: 20px;">鏁版嵁涓婃姤</el-col>
 				<el-col :span="12" style="text-align: right;padding-right: 8px;">
-					<el-button size="medium" @click="openUpload()" v-if="inPower">
+					<el-button size="medium" @click="chooseDia = true" v-if="inPower">
 						<i class="el-icon-upload2" style="color: #3A7BFA;"></i>
 						<span style="color: #3A7BFA;">瀵煎叆</span>
 					</el-button>
@@ -64,6 +67,7 @@
 						<span style="color: #3A7BFA;">瀵煎嚭</span>
 					</el-button>
 					<el-button size="medium" type="primary" @click="opeaAdd" v-if="addPower">鏂板</el-button>
+					<el-button size="medium" type="danger" @click="delNowAll" v-if="delAllPower">涓�閿垹闄�</el-button>
 				</el-col>
 			</el-row>
 		</div>
@@ -72,14 +76,16 @@
 				<div class="search_label">绯荤粺鏃ユ湡锛�</div>
 				<div class="search_input">
 					<el-date-picker size="small" v-model="componentData.entity.createTime" type="date" placeholder="閫夋嫨鏃ユ湡"
-						value-format="yyyy-MM-dd HH:mm:ss" clearable></el-date-picker>
+						value-format="yyyy-MM-dd HH:mm:ss" :clearable="false" :editable="false" @change="refreshTable"></el-date-picker>
 				</div>
 			</div>
 			<div class="search_thing">
 				<div class="search_label">鐧昏浜猴細</div>
 				<div class="search_input">
-					<el-input size="small" v-model="componentData.entity.registrant" clearable placeholder="鐧昏浜�"
-						@keyup.enter.native="refreshTable()"></el-input>
+					<el-select size="small" style="width: 100%;" placeholder="鐧昏浜�" v-model="componentData.entity.registrant">
+						<el-option :value="null" label="鍏ㄩ儴"></el-option>
+						<el-option v-for="(a, ai) in userNames" :key="ai" :label="a" :value="a"></el-option>
+					</el-select>
 				</div>
 			</div>
 			<div class="search_thing">
@@ -101,7 +107,7 @@
 				:delUrl="$api.dataReporting.delDataReporting" :componentData="componentData" :key="upIndex" @upRole="upRole" :downUrl="$api.dataReporting.downDataReportingFile"/>
 		</div>
 		<el-dialog title="涓婃姤淇敼" :visible.sync="upDia" width="700px" class="data_reporting_dia">
-			<div class="body" v-if="upDia">
+			<div class="body" v-if="upDia" style="max-height: 550px;overflow-y: auto;">
 				<el-row style="line-height: 50px;">
 					<el-col :span="4" style="text-align: right;padding-right: 8px;">绯荤粺鏃ユ湡</el-col>
 					<el-col :span="7">
@@ -212,6 +218,12 @@
 						<el-input v-model="upData.remark" size="small"></el-input>
 					</el-col>
 				</el-row>
+				<el-row style="line-height: 50px;">
+					<el-col :span="4" style="text-align: right;padding-right: 8px;">寰俊鍙�</el-col>
+					<el-col :span="7">
+						<el-input v-model="upData.vxCard" size="small"></el-input>
+					</el-col>
+				</el-row>
 			</div>
 			<span slot="footer" class="dialog-footer" style="margin-right: 18px;">
 				<el-button type="primary" @click="saveUpData" :loading="upLoad">纭� 瀹�</el-button>
@@ -222,7 +234,7 @@
 			<div style="margin: 0 auto;">
 				<el-upload ref="upload" drag :action="javaApi + $api.dataReporting.inputCsv" :headers="token"
 					:file-list="fileList" name="file" :auto-upload="false" accept=".csv" :limit="1" :on-change="beforeUpload"
-					:on-success="onSuccess" :on-error="onError">
+					:on-success="onSuccess" :on-error="onError" :data="{param: componentData.uploadStr}">
 					<i class="el-icon-upload"></i>
 					<div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
 				</el-upload>
@@ -230,6 +242,19 @@
 			<span slot="footer" class="dialog-footer">
 				<el-button @click="uploadDia = false">鍙� 娑�</el-button>
 				<el-button type="primary" @click="submitUpload()">涓� 浼�</el-button>
+			</span>
+		</el-dialog>
+		<el-dialog title="璇烽�夋嫨鏁版嵁涓婃姤鐨勫井淇″彿" :visible.sync="chooseDia" width="500px">
+			<div class="body" v-if="chooseDia" style="max-height: 550px;overflow-y: auto;padding: 5px 0;">
+				<el-radio-group v-model="vx">
+					<el-col :span="8" v-for="(a, ai) in vxs" :key="ai" style="margin-bottom: 5px;">
+						<el-radio border size="small" :label="a.vx">{{a.vx}}</el-radio>
+					</el-col>
+				</el-radio-group>
+			</div>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="chooseDia = false">鍙栨秷</el-button>
+				<el-button type="primary" @click="openUpload()">涓嬩竴姝�</el-button>
 			</span>
 		</el-dialog>
 	</div>
@@ -250,11 +275,11 @@
 						product: null,
 						orderBy: {
 							field: 'id',
-							order: 'desc'
+							order: 'asc'
 						}
 					},
 					isIndex: true,
-					showSelect: true,
+					showSelect: false,
 					select: true,
 					do: [{
 						id: 'update',
@@ -271,8 +296,14 @@
 						method: 'doDiy'
 					}],
 					tagField: {},
-					selectField: {},
-					requiredAdd:['name2','agent','channel','product','showNum','click','accountConsumption'],
+					selectField: {
+						vxCard: {
+							select: []
+						}
+					},
+					requiredAdd:['name2','agent','channel','product','showNum','click','accountConsumption','vxCard'],
+					countFleid: ['fansAdd'],
+					uploadStr: ""
 				},
 				entityCopy: {},
 				upIndex: 0,
@@ -287,7 +318,12 @@
 				addPower: true,
 				token: null,
 				inPower: true,
-				outPower: true
+				outPower: true,
+				delAllPower: true,
+				userNames: [],
+				vxs: [],
+				chooseDia: false,
+				vx: null
 			}
 		},
 		created() {
@@ -312,14 +348,19 @@
 			this.token = {
 				'token': sessionStorage.getItem('token')
 			}
+			this.selectDataReportingForCreateUserNames()
+			this.selectVxs()
 		},
 		methods: {
 			refreshTable() {
 				this.$refs['ValueTable'].selectList()
+				this.selectDataReportingForCreateUserNames()
+				this.selectVxs()
 			},
 			refresh() {
 				this.componentData.entity = this.HaveJson(this.entityCopy)
 				this.upIndex++
+				this.selectDataReportingForCreateUserNames()
 			},
 			upRole(row) {
 				this.upData = this.HaveJson(row)
@@ -358,6 +399,7 @@
 				let add = false
 				let inPower = false
 				let outPower = false
+				let delAllPower = false
 				for (var i = 0; i < power.length; i++) {
 					if (power[i].menuMethod == 'upDataReporting') {
 						up = true
@@ -374,6 +416,9 @@
 					if (power[i].menuMethod == 'downDataReportingFile') {
 						outPower = true
 					}
+					if (power[i].menuMethod == 'deleteAllData') {
+						delAllPower = true
+					}
 				}
 				if (!del) {
 					this.componentData.do.splice(1, 1)
@@ -384,8 +429,14 @@
 				this.addPower = add
 				this.inPower = inPower
 				this.outPower = outPower
+				this.delAllPower = delAllPower
 			},
 			openUpload() {
+				if(this.vx == null || this.vx == undefined) {
+					this.$message.error('璇烽�夋嫨鏁版嵁涓婃姤鐨勫井淇″彿')
+					return
+				}
+				this.componentData.uploadStr = this.vx
 				this.uploadDia = true
 			},
 			beforeUpload(file, fileList) {
@@ -402,11 +453,13 @@
 				}
 				this.uploading = true
 				this.$refs.upload.submit();
+				this.uploadDia = false
 			},
 			onSuccess(response, file, fileList) {
 				this.$refs.upload.clearFiles()
 				this.uploadDia = false
 				this.uploading = false
+				this.chooseDia = false
 				if(response.code==201){
 					this.$message.error(response.message)
 					return
@@ -421,6 +474,52 @@
 			},
 			opeaAdd() {
 				this.$refs.ValueTable.openAddDia(this.$api.dataReporting.addDataReporting);
+			},
+			delNowAll(){
+				this.$confirm('鏄惁鍒犻櫎 '+this.componentData.entity.createTime.split(' ')[0]+' 鏁版嵁鏃堕棿鐨勫叏閮ㄦ暟鎹�?', "璀﹀憡", {
+					confirmButtonText: "纭畾",
+					cancelButtonText: "鍙栨秷",
+					type: "error"
+				}).then(() => {
+					this.uploading = true
+					this.$axios.post(this.$api.dataReporting.deleteAllData, {
+						date: this.componentData.entity.createTime.split(' ')[0]
+					}).then(res => {
+						this.uploading = false
+						if (res.code === 201) {
+							return
+						}
+						this.$message.success('鍒犻櫎鎴愬姛')
+						this.refreshTable()
+					})
+				}).catch(() => {})
+			},
+			selectDataReportingForCreateUserNames(){
+				this.$axios.post(this.$api.dataReporting.selectDataReportingForCreateUserNames,{
+					time: this.componentData.entity.createTime
+				}).then(res => {
+					this.userNames = res.data
+				})
+			},
+			selectVxs(){
+				this.$axios.get(this.$api.dataReporting.selectVxs,{
+					params:{
+						time: this.componentData.entity.createTime
+					}
+				}).then(res => {
+					if (res.code === 201) {
+						return
+					}
+					this.vxs = res.data
+					var str = []
+					res.data.forEach(a => {
+						str.push({
+							label: a.vx,
+							value: a.vx
+						})
+					})
+					this.componentData.selectField.vxCard.select = str
+				})
 			}
 		}
 	}
diff --git a/src/components/view/custom-enum.vue b/src/components/view/enums.vue
similarity index 74%
rename from src/components/view/custom-enum.vue
rename to src/components/view/enums.vue
index fe6d9c4..13cb90b 100644
--- a/src/components/view/custom-enum.vue
+++ b/src/components/view/enums.vue
@@ -40,7 +40,7 @@
 	<div class="role_manage">
 		<div>
 			<el-row class="title">
-				<el-col :span="12" style="padding-left: 20px;">瀹㈡埛绠$悊</el-col>
+				<el-col :span="12" style="padding-left: 20px;">鏋氫妇绠$悊</el-col>
 				<el-col :span="12" style="text-align: right;">
 					<el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
 				</el-col>
@@ -48,14 +48,14 @@
 		</div>
 		<div class="search">
 			<div class="search_thing">
-				<div class="search_label">瀹㈡埛鍚嶇О锛�</div>
+				<div class="search_label">鏍囬锛�</div>
 				<div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-						v-model="componentData.entity.name" @keyup.enter.native="refreshTable()"></el-input></div>
+						v-model="componentData.entity.label" @keyup.enter.native="refreshTable()"></el-input></div>
 			</div>
 			<div class="search_thing">
-				<div class="search_label">鍏徃鍚嶇О锛�</div>
+				<div class="search_label">鍒嗙被锛�</div>
 				<div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-						v-model="componentData.entity.company" @keyup.enter.native="refreshTable()"></el-input></div>
+						v-model="componentData.entity.category" @keyup.enter.native="refreshTable()"></el-input></div>
 			</div>
 			<div class="search_thing" style="padding-left: 30px;">
 				<el-button size="small" @click="refresh()">閲� 缃�</el-button>
@@ -63,7 +63,7 @@
 			</div>
 		</div>
 		<div class="table">
-			<ValueTable ref="ValueTable" :url="$api.enums.selectCustomEnumLists" :upUrl="$api.enums.updateCustomEnum" :delUrl="$api.enums.delCustomEnum" :componentData="componentData" :key="upIndex"/>
+			<ValueTable ref="ValueTable" :url="$api.enums.selectEnumList" :upUrl="$api.enums.upEnum" :delUrl="$api.enums.delEnum" :componentData="componentData" :key="upIndex"/>
 		</div>
 	</div>
 </template>
@@ -78,22 +78,22 @@
 			return {
 				componentData: {
 					entity: {
-						name: null,
-						company: null,
+						label: null,
+						category: null,
 						orderBy: {
 							field: 'id',
 							order: 'asc'
 						}
 					},
 					isIndex: true,
-					showSelect: true,
-					select: true,
+					showSelect: false,
+					select: false,
 					do: [{
 						id: 'update',
 						font: '缂栬緫',
 						type: 'text',
 						method: 'doDiy',
-						field:[]
+						field:['createUserName','updateUserName']
 					},{
 						id: 'delete',
 						font: '鍒犻櫎',
@@ -102,8 +102,8 @@
 					}],
 					tagField: {},
 					selectField: {},
-					requiredAdd:['company','name'],
-					requiredUp:['company','name']
+					requiredAdd:['category','label','value'],
+					requiredUp:['category','label','value']
 				},
 				entityCopy: {},
 				upIndex: 0,
@@ -124,7 +124,7 @@
 				this.upIndex++
 			},
 			openAdd(){
-				this.$refs.ValueTable.openAddDia(this.$api.enums.addCustomEnum);
+				this.$refs.ValueTable.openAddDia(this.$api.enums.addEnum);
 			},
 			// 鏉冮檺鍒嗛厤
 			getPower(){
@@ -133,13 +133,13 @@
 				let del = false
 				let add = false
 				for (var i = 0; i < power.length; i++) {
-					if(power[i].menuMethod=='updateCustomEnum'){
+					if(power[i].menuMethod=='upEnum'){
 						up = true
 					}
-					if(power[i].menuMethod=='delCustomEnum'){
+					if(power[i].menuMethod=='delEnum'){
 						del = true
 					}
-					if(power[i].menuMethod=='addCustomEnum'){
+					if(power[i].menuMethod=='addEnum'){
 						add = true
 					}
 				}
diff --git a/src/components/view/fans-submit.vue b/src/components/view/fans-submit.vue
index c540f67..821fb1d 100644
--- a/src/components/view/fans-submit.vue
+++ b/src/components/view/fans-submit.vue
@@ -59,7 +59,7 @@
 				<div class="search_label">绯荤粺鏃ユ湡锛�</div>
 				<div class="search_input">
 					<el-date-picker size="small" v-model="componentData.entity.createTime" type="date" placeholder="閫夋嫨鏃ユ湡"
-						value-format="yyyy-MM-dd HH:mm:ss" clearable></el-date-picker>
+						value-format="yyyy-MM-dd HH:mm:ss" :clearable="false" :editable="false" @change="refreshTable()"></el-date-picker>
 				</div>
 			</div>
 			<div class="search_thing">
@@ -143,9 +143,9 @@
 							select: []
 						}
 					},
-					requiredAdd: ['custom', 'product', 'fansAdd'],
-					requiredUp: ['custom', 'product', 'fansAdd'],
-					disabledUp: ['custom','product']
+					requiredAdd: ['product', 'fansAdd', 'vx'],
+					requiredUp: ['product', 'fansAdd', 'vx'],
+					disabledUp: ['product', 'vx']
 				},
 				entityCopy: {},
 				upIndex: 0,
diff --git a/src/components/view/finance-submit.vue b/src/components/view/finance-submit.vue
index 1d60a3b..ff389b0 100644
--- a/src/components/view/finance-submit.vue
+++ b/src/components/view/finance-submit.vue
@@ -34,6 +34,9 @@
 		height: calc(100% - 60px - 80px - 10px - 40px);
 		padding: 20px;
 	}
+	.el-radio-group{
+		width: 100%;
+	}
 </style>
 
 <template>
@@ -42,7 +45,7 @@
 			<el-row class="title">
 				<el-col :span="12" style="padding-left: 20px;">璐㈠姟涓婃姤</el-col>
 				<el-col :span="12" style="text-align: right;">
-					<el-button size="medium" @click="$refs.ValueTable.openUpload()" v-if="inPower">
+					<el-button size="medium" @click="chooseDia = true" v-if="inPower">
 						<i class="el-icon-upload2" style="color: #3A7BFA;"></i>
 						<span style="color: #3A7BFA;">瀵煎叆</span>
 					</el-button>
@@ -59,7 +62,7 @@
 				<div class="search_label">绯荤粺鏃ユ湡锛�</div>
 				<div class="search_input">
 					<el-date-picker size="small" v-model="componentData.entity.createTime" type="date" placeholder="閫夋嫨鏃ユ湡"
-						value-format="yyyy-MM-dd HH:mm:ss" clearable></el-date-picker>
+						value-format="yyyy-MM-dd HH:mm:ss" :clearable="false" :editable="false" @change="refreshTable()"></el-date-picker>
 				</div>
 			</div>
 			<div class="search_thing">
@@ -79,6 +82,19 @@
 				:upUrl="$api.dataReporting.updateFinanceSubmit" :delUrl="$api.dataReporting.delFinanceSubmit"
 				:componentData="componentData" :key="upIndex" :downUrl="$api.dataReporting.downFinanceSubmitFile" :inputUrl="$api.dataReporting.inputFinanceSubmitCsv"/>
 		</div>
+		<el-dialog title="璇烽�夋嫨璐㈠姟涓婃姤鐨勫璞�" :visible.sync="chooseDia" width="500px">
+			<div class="body" v-if="chooseDia" style="max-height: 550px;overflow-y: auto;padding: 5px 0;">
+				<el-radio-group v-model="userId">
+					<el-col :span="8" v-for="(a, ai) in users" :key="ai" style="margin-bottom: 2px;">
+						<el-radio border size="small" :label="a.id">{{a.name}}</el-radio>
+					</el-col>
+				</el-radio-group>
+			</div>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="chooseDia = false">鍙栨秷</el-button>
+				<el-button type="primary" @click="goDown">涓嬩竴姝�</el-button>
+			</span>
+		</el-dialog>
 	</div>
 </template>
 
@@ -107,7 +123,7 @@
 						font: '缂栬緫',
 						type: 'text',
 						method: 'doDiy',
-						field: ['createUserName']
+						field: ['createUserName','瀵硅薄=param']
 					}, {
 						id: 'delete',
 						font: '鍒犻櫎',
@@ -121,10 +137,15 @@
 						},
 						custom: {
 							select: []
+						},
+						param:{
+							select:[]
 						}
 					},
-					requiredAdd: ['company', 'name', 'employeeRebate'],
-					requiredUp: ['company', 'name', 'employeeRebate']
+					requiredAdd: ['company', 'name', 'employeeRebate','param'],
+					requiredUp: ['employeeRebate'],
+					disabledUp: ['company', 'name','param'],
+					uploadStr: ""
 				},
 				entityCopy: {},
 				upIndex: 0,
@@ -132,7 +153,10 @@
 				custom: [],
 				addPower: true,
 				inPower: true,
-				outPower: true
+				outPower: true,
+				chooseDia: false,
+				users: [],
+				userId: null
 			}
 		},
 		created() {
@@ -153,6 +177,7 @@
 			this.selectProductEnumList()
 			this.selectCustomEnumList()
 			this.getPower()
+			this.getUserList()
 		},
 		methods: {
 			refreshTable() {
@@ -225,6 +250,30 @@
 				this.addPower = add
 				this.inPower = inPower
 				this.outPower = outPower
+			},
+			getUserList(){
+				this.$axios.get(this.$api.user.getUserMenu).then(res => {
+					if (res.code === 201) {
+						return
+					}
+					this.users = res.data
+					var str = []
+					res.data.forEach(a => {
+						str.push({
+							label: a.name,
+							value: a.id
+						})
+					})
+					this.componentData.selectField.param.select = str
+				})
+			},
+			goDown(){
+				if(this.userId == null || this.userId == undefined) {
+					this.$message.error('璇烽�夋嫨璐㈠姟涓婃姤鐨勫璞�')
+					return
+				}
+				this.componentData.uploadStr = this.userId
+				this.$refs.ValueTable.openUpload()
 			}
 		}
 	}
diff --git a/src/components/view/index-index.vue b/src/components/view/index-index.vue
index 5f6a141..b7b059a 100644
--- a/src/components/view/index-index.vue
+++ b/src/components/view/index-index.vue
@@ -323,9 +323,9 @@
 			setInterval(() => {
 				this.nowTime()
 			}, 1000)
-			setInterval(() => {
+			/* setInterval(() => {
 				this.getDataList()
-			}, 60 * 1000)
+			}, 60 * 1000) */
 		},
 		methods: {
 			nowTime() {
diff --git a/src/components/view/person-manage.vue b/src/components/view/person-manage.vue
index 8470967..6b6a58d 100644
--- a/src/components/view/person-manage.vue
+++ b/src/components/view/person-manage.vue
@@ -48,7 +48,7 @@
 		</div>
 		<div class="search">
 			<div class="search_thing">
-				<div class="search_label">瀹㈡埛鍚嶇О锛�</div>
+				<div class="search_label">鐢ㄦ埛鍚嶏細</div>
 				<div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
 						v-model="componentData.entity.name" @keyup.enter.native="refreshTable()"></el-input></div>
 			</div>
@@ -97,9 +97,9 @@
 							order: 'asc'
 						}
 					},
-					isIndex: false,
-					showSelect: true,
-					select: true,
+					isIndex: true,
+					showSelect: false,
+					select: false,
 					do: [{
 						id: 'update',
 						font: '缂栬緫',
diff --git a/src/components/view/product-count.vue b/src/components/view/product-count.vue
index 0328332..cdc867b 100644
--- a/src/components/view/product-count.vue
+++ b/src/components/view/product-count.vue
@@ -51,15 +51,10 @@
 		</div>
 		<div class="search">
 			<div class="search_thing">
-				<div class="search_label">绯荤粺鏃ユ湡锛�</div>
-				<div class="search_input">
-					<el-date-picker size="small" v-model="componentData.entity.updateTime" type="date" placeholder="閫夋嫨鏃ユ湡" value-format="yyyy-MM-dd HH:mm:ss" clearable></el-date-picker>
-				</div>
-			</div>
-			<div class="search_thing">
 				<div class="search_label">鐧昏鏃ユ湡锛�</div>
 				<div class="search_input">
-					<el-date-picker size="small" v-model="componentData.entity.createTime" type="date" placeholder="閫夋嫨鏃ユ湡" value-format="yyyy-MM-dd HH:mm:ss" clearable></el-date-picker>
+					<el-date-picker size="small" v-model="componentData.entity.createTime" type="date" placeholder="閫夋嫨鏃ユ湡"
+						value-format="yyyy-MM-dd HH:mm:ss" :clearable="false" :editable="false"></el-date-picker>
 				</div>
 			</div>
 			<div class="search_thing">
@@ -77,7 +72,8 @@
 			</div>
 		</div>
 		<div class="table">
-			<ValueTable ref="ValueTable" :url="$api.dataReporting.selectProductCountDtoPageList" :componentData="componentData" :key="upIndex" :downUrl="$api.dataReporting.downProductCountFile"/>
+			<ValueTable ref="ValueTable" :url="$api.dataReporting.selectProductCountDtoPageList"
+				:componentData="componentData" :key="upIndex" :downUrl="$api.dataReporting.downProductCountFile" />
 		</div>
 	</div>
 </template>
@@ -141,8 +137,8 @@
 				this.componentData.entity = this.HaveJson(this.entityCopy)
 				this.upIndex++
 			},
-			selectProductEnumList(){
-				this.$axios.get(this.$api.enums.selectProductEnumList).then(res=>{
+			selectProductEnumList() {
+				this.$axios.get(this.$api.enums.selectProductEnumList).then(res => {
 					this.product = res.data
 				})
 			},
diff --git a/src/components/view/registrant-count.vue b/src/components/view/registrant-count.vue
index 4998eb2..5f89802 100644
--- a/src/components/view/registrant-count.vue
+++ b/src/components/view/registrant-count.vue
@@ -97,7 +97,7 @@
 						name: null,
 						product: null,
 						orderBy: {
-							field: 'update_time',
+							field: 'create_time',
 							order: 'desc'
 						}
 					},
diff --git a/src/components/view/role-manage.vue b/src/components/view/role-manage.vue
index a306f66..7fdf0e2 100644
--- a/src/components/view/role-manage.vue
+++ b/src/components/view/role-manage.vue
@@ -93,6 +93,14 @@
 						<div style="padding: 3px 30px;" v-for="(a, ai) in menu" :key="ai" v-if="a.type=='鍒犻櫎'"><el-checkbox
 								v-model="a.isClick" :disabled="type=='鏌ョ湅'">{{a.remark}}</el-checkbox></div>
 					</el-collapse-item>
+					<el-collapse-item title="瀵煎叆">
+						<div style="padding: 3px 30px;" v-for="(a, ai) in menu" :key="ai" v-if="a.type=='瀵煎叆'"><el-checkbox
+								v-model="a.isClick" :disabled="type=='鏌ョ湅'">{{a.remark}}</el-checkbox></div>
+					</el-collapse-item>
+					<el-collapse-item title="瀵煎嚭">
+						<div style="padding: 3px 30px;" v-for="(a, ai) in menu" :key="ai" v-if="a.type=='瀵煎嚭'"><el-checkbox
+								v-model="a.isClick" :disabled="type=='鏌ョ湅'">{{a.remark}}</el-checkbox></div>
+					</el-collapse-item>
 				</el-collapse>
 			</div>
 			<span slot="footer" class="dialog-footer">
diff --git a/src/view/404.vue b/src/view/404.vue
index 6b00e13..8d16bfa 100644
--- a/src/view/404.vue
+++ b/src/view/404.vue
@@ -3,9 +3,9 @@
     <div class="text-center">
       <div class="error mx-auto" data-text="404">404</div>
       <p class="lead text-gray-800 mb-5">鎵句笉鍒颁綘瑕佽闂殑椤甸潰</p>
-      <p class="text-gray-500 mb-0">椤甸潰涓嶅瓨鍦�</p>
+      <!-- <p class="text-gray-500 mb-0">椤甸潰涓嶅瓨鍦�</p>
       <p><a href="/">杩斿洖棣栭〉</a></p>
-      <el-button @click="back" type="danger" round>杩斿洖涓婁竴椤�</el-button>
+      <el-button @click="back" type="danger" round>杩斿洖涓婁竴椤�</el-button> -->
     </div>
   </div>
 </template>
@@ -31,8 +31,8 @@
       };
       let icon = "../../static/img/logo.png"; // 鍥剧墖鍦板潃
       changeFavicon(icon); // 鍔ㄦ�佷慨鏀圭綉绔欏浘鏍�
-      let title = "璁块棶鍑洪敊"; // 缃戠珯鏍囬
-      document.title = title; // 鍔ㄦ�佷慨鏀圭綉绔欐爣棰�
+      // let title = "璁块棶鍑洪敊"; // 缃戠珯鏍囬
+      // document.title = title; // 鍔ㄦ�佷慨鏀圭綉绔欐爣棰�
     },
     methods: {
       back() {
diff --git a/src/view/enter.vue b/src/view/enter.vue
index 4e01d55..935d27a 100644
--- a/src/view/enter.vue
+++ b/src/view/enter.vue
@@ -102,7 +102,7 @@
     <div class="right">
       <div style="width: calc(100% - 100px * 2);">
         <div class="title_big">娆㈣繋鎮ㄧ櫥褰曪紒</div>
-        <div class="title_small">灞变笢鑳滀簯鏁版嵁绠$悊骞冲彴锛圖MS锛�</div>
+        <div class="title_small">LIMS瀹為獙瀹ょ鐞嗙郴缁�</div>
         <el-form :model="ruleForm" :rules="rules" ref="ruleForm" class="elform" :hide-required-asterisk="true">
           <el-form-item label="鐢ㄦ埛鍚�" prop="account">
             <el-input v-model="ruleForm.account" placeholder="璇疯緭鍏ヨ处鍙�" clearable></el-input>
diff --git a/src/view/index.vue b/src/view/index.vue
index 90e3a44..40bd6df 100644
--- a/src/view/index.vue
+++ b/src/view/index.vue
@@ -9,7 +9,7 @@
 
 	.title {
 		width: 100%;
-		height: 58px;
+		height: 48px;
 		display: flex;
 		align-items: center;
 		padding: 0 30px;
@@ -25,7 +25,7 @@
 	}
 
 	.title .label {
-		font-size: 16px;
+		font-size: 14px;
 		text-align: center;
 		width: calc(100% - 130px - 200px);
 	}
@@ -54,7 +54,7 @@
 	}
 
 	.left {
-		height: calc(100vh - 58px - 40px);
+		height: calc(100vh - 48px - 40px);
 		background-color: #3A7BFA;
 		display: flex;
 		align-items: center;
@@ -78,7 +78,7 @@
 		color: #fff;
 		width: 68px;
 		height: 68px;
-		margin: 12px 0;
+		margin: 8px 0;
 		cursor: pointer;
 		display: flex;
 		align-items: center;
@@ -97,12 +97,12 @@
 	}
 
 	.left .box i {
-		font-size: 28px;
+		font-size: 24px;
 		margin-bottom: 4px;
 	}
 
 	.left .box div {
-		font-size: 14px;
+		font-size: 12px;
 	}
 
 	.small_menu {
@@ -113,13 +113,13 @@
 		color: #3A7BFA;
 	}
 
-	.small_menu p {
-		padding: 12px 15px;
+	.small_menu .p {
+		padding: 6px 10px;
 		cursor: pointer;
 	}
 
-	.small_menu p:hover {
-		background-color: rgba(0, 0, 0, 0.05);
+	.small_menu .p:hover {
+		color: #3A7BFA;
 	}
 
 	.small_menu i {
@@ -127,17 +127,17 @@
 	}
 
 	.small_menu span {
-		font-size: 14px;
+		font-size: 12px;
 	}
 
 	.right {
-		height: calc(100vh - 58px);
+		height: calc(100vh - 48px);
 		transition: .3s;
 	}
 
 	.tag {
 		width: 100%;
-		height: 36px;
+		height: 32px;
 		background: rgb(255, 255, 255);
 		opacity: 0.8;
 		box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.1);
@@ -163,7 +163,7 @@
 	.tag>.el-icon-s-unfold,
 	.el-icon-s-fold,
 	.el-icon-delete {
-		font-size: 18px;
+		font-size: 16px;
 		cursor: pointer;
 		margin: 0 8px;
 	}
@@ -174,21 +174,26 @@
 		align-items: center;
 		display: flex;
 		overflow-x: auto;
+		overflow-y: hidden;
+	}
+
+	.tabs::-webkit-scrollbar {
+		height: 4px;
 	}
 
 	.tab {
 		cursor: pointer;
-		font-size: 14px;
+		font-size: 12px;
 		margin: 0 8px;
-		line-height: 32px;
+		line-height: 28px;
 		transition: 0.3s;
 		border-top: 2px solid transparent;
 		border-bottom: 2px solid transparent;
 		user-select: none;
 		flex-shrink: 0;
 	}
-	
-	.tab:hover{
+
+	.tab:hover {
 		color: #3A7BFA;
 	}
 
@@ -208,7 +213,7 @@
 	}
 
 	.component_view {
-		height: calc(100vh - 94px);
+		height: calc(100vh - 84px);
 		width: calc(100% - 52px);
 		padding: 0 26px;
 		background: rgb(245, 247, 251);
@@ -226,23 +231,32 @@
 		left: 0;
 		display: none;
 		z-index: 999;
+		padding: 0;
 	}
 
 	.right_key_menu li {
 		list-style-type: none;
-		padding: 5px 0;
+		padding: 6px 0;
 		padding-left: 10px;
-		font-size: 0.9rem;
-		transition: .5s;
+		font-size: 12px;
+		transition: .3s;
 		cursor: pointer;
 	}
-	
-	.right_key_menu li i{
-		margin-right: 20px;
+
+	.right_key_menu li i {
+		margin-right: 14px;
 	}
 
 	.right_key_menu li:hover {
-		background-color: #dedede;
+		background-color: #eeeeee;
+	}
+
+	.group {
+		font-size: 12px;
+		color: #ed940d;
+		background-color: transparent !important;
+		cursor: auto !important;
+		margin: 8px 12px;
 	}
 </style>
 <style></style>
@@ -252,30 +266,38 @@
 			<div class="logo">
 				<!-- <img src="../../static/img/logo 1.png" /> -->
 			</div>
-			<div class="label">灞变笢鑳滀簯鏁版嵁绠$悊绯荤粺</div>
+			<div class="label">LIMS瀹為獙瀹ょ鐞嗙郴缁�</div>
 			<div class="user">
 				<el-avatar :size="26">{{ userName.substring(0, 1) }}</el-avatar>
 				<span>{{ userName }}</span>
-				<img src="../../static/img/閫�鍑�.png" @click="out" />
+				<img src="../../static/img/閫�鍑�.png" @click="out" title="閫�鍑鸿处鍙�" />
 			</div>
 		</div>
 		<div class="left" :style="`width: ${leftOpen?'92':'0'}px;`">
 			<div v-for="(a, ai) in menu" :key="ai">
-				<div :class="`box ${activeBox == a.c[0].k ? 'active_box' : ''}`" @click="addTab(a.c[0], -1)" v-if="a.self && getPower(a.c[0].p)">
+				<div :class="`box ${activeBox == a.c[0].k ? 'active_box' : ''}`" @click="addTab(a.c[0], -1)"
+					v-if="a.self && getPower(a.c[0].p)">
 					<i :class="a.i"></i>
 					<div>{{a.v}}</div>
 				</div>
-				<el-popover placement="right-start" width="90" trigger="click" v-if="a.self != true && getPower(a.p)">
+				<el-popover placement="right-start" trigger="click" v-if="a.self != true && getPower(a.p)">
 					<div :class="`box ${activeBox == a.k ? 'active_box' : ''}`" slot="reference">
 						<i :class="a.i"></i>
-						<div>{{ a.v }}</div>
+						<div style="text-align: center;">{{ a.v }}</div>
 					</div>
 					<div class="small_menu">
-						<p v-for="(b, bi) in a.c" :key="bi" :class="activeP == b.k ? 'active_p' : ''" @click="addTab(b, a.k)" v-if="getPower(b.p)">
-							<i :class="b.i"></i>
-							<span>{{ b.v }}</span>
-						</p>
+						<div v-for="(b, bi) in a.c" :key="bi">
+							<el-col v-if="groupMenu(b.g, a.c[bi - 1])" class="group">{{b.g}}</el-col>
+							<el-col :span="groupCount(b.g, a.c)" :class="activeP == b.k ? 'active_p p' : 'p'"
+								@click.native="addTab(b, a.k)" v-if="getPower(b.p)">
+								<p :title="b.v" style="white-space: nowrap;text-overflow: ellipsis;overflow: hidden;">
+									<i :class="b.i"></i>
+									<span>{{ b.v }}</span>
+								</p>
+							</el-col>
+						</div>
 					</div>
+				</el-popover>
 				</el-popover>
 			</div>
 		</div>
@@ -292,15 +314,15 @@
 				<i class="el-icon-delete" @click="allDel" title="鍒犻櫎鎵�鏈夋爣绛鹃〉"></i>
 			</div>
 			<div class="component_view">
-				<component class="com_index" v-for="(com, index) in tabs" :is="com.u" :key="com.k"
-					v-show="com.k == tabActive" :ref="`com-${com.k}`">
+				<component class="com_index" v-for="(com, index) in tabs" :is="com.u" :key="com.k" v-show="com.k == tabActive"
+					:ref="`com-${com.k}`">
 				</component>
 			</div>
 		</div>
 		<!-- 鍙抽敭鑿滃崟 -->
 		<div class="right_key_menu">
 			<el-col :span="24">
-				<el-card :body-style="{padding: '6px 0'}">
+				<el-card :body-style="{padding: '6px'}">
 					<ul>
 						<li style="color: red;" @click="removeTab(activeIndex)"><i class="el-icon-close"></i>鍏抽棴</li>
 						<el-divider></el-divider>
@@ -323,151 +345,34 @@
 		const componentConfig = requireComponent(fileName);
 		comObj[names] = componentConfig.default || componentConfig;
 	});
+	import menu from '../../static/js/menu.js';
+	import menus from '../../static/js/menu.js'
+	import nullFace from '../view/404.vue'
+	comObj['nullFace'] = nullFace
 	export default {
 		components: comObj,
 		data() {
 			return {
 				userName: "value",
 				leftOpen: true,
-				menu: [{
-						k: 0,
-						v: "棣栭〉",
-						i: "font icon-shouyefill",
-						self: true,
-						c: [{
-							k: 0,
-							v: "棣栭〉",
-							i: "font icon-shouyefill",
-							u: "index-index"
-						}]
-					},
-					{
-						k: 2,
-						v: "鏁版嵁涓婃姤",
-						i: "font icon-a-Group1118",
-						self: true,
-						c: [{
-							k: 2,
-							v: "鏁版嵁涓婃姤",
-							i: "font icon-a-Group1118",
-							u: "data-reporting",
-							p: "selectDataReportingList"
-						}]
-					},
-					{
-						k: 3,
-						v: "鏁版嵁缁熻",
-						i: "font icon-a-Group1120",
-						p: "selectProductCountDtoPageList selectRegistrantCountDtoPageList",
-						c: [{
-							k: 9,
-							v: "椤圭洰鏁版嵁缁熻",
-							i: "font icon-24gl-clipboardList",
-							u: "product-count",
-							p: "selectProductCountDtoPageList"
-						},{
-							k: 10,
-							v: "鍛樺伐鏁版嵁缁熻",
-							i: "font icon-24gl-clipboardList",
-							u: "registrant-count",
-							p: "selectRegistrantCountDtoPageList"
-						},{
-							k: 12,
-							v: "鍛樺伐鏁版嵁瀵规瘮",
-							i: "font icon-24gl-clipboardList",
-							u: "data-comparison",
-							p: "selectDataComparisonDtoPageList"
-						}]
-					},
-					{
-						k: 5,
-						v: "杩涚矇涓婃姤",
-						i: "font icon-a-Group1122",
-						self: true,
-						c: [{
-							k: 5,
-							v: "杩涚矇涓婃姤",
-							i: "font icon-a-Group1122",
-							u: "fans-submit",
-							p: "selectFansSubmitList"
-						}]
-					},
-					{
-						k: 6,
-						v: "璐㈠姟涓婃姤",
-						i: "font icon-a-Group1236",
-						self: true,
-						c: [{
-							k: 6,
-							v: "璐㈠姟涓婃姤",
-							i: "font icon-a-Group1236",
-							u: "finance-submit",
-							p: "selectFinanceSubmitList"
-						}]
-					},
-					{
-						k: 7,
-						v: "瑙掕壊绠$悊",
-						i: "font icon-a-Group1126",
-						self: true,
-						c: [{
-							k: 7,
-							v: "瑙掕壊绠$悊",
-							i: "font icon-a-Group1126",
-							u: "role-manage",
-							p: "selectRoleLists"
-						}]
-					},
-					{
-						k: 4,
-						v: "鏁版嵁瀛楀吀",
-						i: "font icon-odbc-full",
-						p: "selectCustomEnumLists selectProductEnumLists",
-						c: [{
-								k: 4,
-								v: "瀹㈡埛绠$悊",
-								i: "font icon-24gl-clipboardList",
-								u: "custom-enum",
-								p: "selectCustomEnumLists"
-							},
-							{
-								k: 11,
-								v: "椤圭洰绠$悊",
-								i: "font icon-24gl-clipboardList",
-								u: "product-enum",
-								p: "selectProductEnumLists"
-							}
-						]
-					},
-					{
-						k: 8,
-						v: "浜哄憳绠$悊",
-						i: "font icon-a-Group1124",
-						self: true,
-						c: [{
-							k: 8,
-							v: "浜哄憳绠$悊",
-							i: "font icon-a-Group1124",
-							u: "person-manage",
-							p: "selectUserList"
-						}]
-					}
-				],
+				menu: [],
 				activeBox: 0,
 				activeP: 0,
 				tabActive: 0,
 				tabs: [{
 					k: 0,
-					v: "棣栭〉",
+					v: "涓汉棣栭〉",
 					i: "font icon-a-Group1124",
-					u: "index-index"
+					u: "nullFace"
 				}],
 				upIndex: 0,
 				activeIndex: 0,
 				power: []
 			};
 		},
-		created() {},
+		created() {
+			this.menu = menus.menu
+		},
 		mounted() {
 			this.userName = JSON.parse(localStorage.getItem("user")).name;
 			this.power = JSON.parse(sessionStorage.getItem('power'))
@@ -485,6 +390,7 @@
 					}
 				});
 				if (num == -1) {
+					if(ob.u == "") ob.u = "nullFace"
 					this.tabs.push(ob);
 				}
 			},
@@ -542,23 +448,41 @@
 				})
 			},
 			// 鍒锋柊琛ㄦ牸鍐呭
-			refreshTable(){
+			refreshTable() {
 				var thing = this.tabs.splice(this.activeIndex, 1)
-				setTimeout(()=>{
+				setTimeout(() => {
 					this.tabs.splice(this.activeIndex, 0, thing[0])
 				}, 0)
 			},
 			// 鏉冮檺鍒嗛厤
-			getPower(p){
-				if(p==undefined) return true
+			getPower(p) {
+				if (p == undefined || p == '') return true
 				let str = p.split(' ')
 				for (var a = 0; a < str.length; a++) {
 					for (var i = 0; i < this.power.length; i++) {
-						if(this.power[i].menuMethod == str[a]) {
+						if (this.power[i].menuMethod == str[a]) {
 							return true
 						}
 					}
 				}
+			},
+			// 鑿滃崟鏍忓垎绫诲垽鏂�
+			groupMenu(g1, g2) {
+				if (g1 == undefined) return false
+				if (g2 == undefined) return true
+				if (g1 == g2.g) return false
+				return true
+			},
+			// 鐩稿悓鍒嗙被鐨勮彍鍗曟暟閲忔槸鍚﹀ぇ浜�4
+			groupCount(g1, gs) {
+				if (g1 == undefined) return 24
+				let count = 0
+				gs.forEach(a=>{
+					if(a.g == g1) count++
+				})
+				if (count > 4) return 8
+				if (count > 1) return 12
+				if (count == 1) return 24
 			}
 		}
 	};
diff --git a/static/js/menu.js b/static/js/menu.js
new file mode 100644
index 0000000..615ef98
--- /dev/null
+++ b/static/js/menu.js
@@ -0,0 +1,743 @@
+var menu = [{
+		k: 0,
+		v: "涓汉棣栭〉",
+		i: "font icon-shouyefill",
+		self: true,
+		c: [{
+			k: 0,
+			v: "涓汉棣栭〉",
+			i: "font icon-shouyefill",
+			u: "index-index"
+		}]
+	},
+	{
+		v: "涓氬姟绠$悊",
+		i: "font icon-a-Group1118",
+		p: "",
+		c: [{
+			v: "妫�楠屼笅鍗�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "妫�楠屼换鍔�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "鎶ュ憡缂栧埗",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "璐圭敤缁熻",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "鏍峰搧绠$悊",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}]
+	},
+	{
+		v: "鏍囧噯闆�",
+		i: "font icon-a-Group1120",
+		p: "",
+		c: [{
+			v: "鏍囧噯搴�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "鏍囧噯妯℃澘",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}]
+	},
+	{
+		v: "缁╂晥绠$悊",
+		i: "font icon-24gl-clipboardList",
+		p: "",
+		c: [{
+			v: "宸ユ椂绠$悊",
+			i: "font icon-24gl-clipboardList",
+			u: "fans-submit",
+			p: ""
+		}, {
+			v: "浜哄憳鑰冨嫟",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "浜哄憳鑰冭瘎",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "浜哄憳鑰冩牳",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "鎶�鑳界瓑绾�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "宸ヨ祫缁撶畻",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "鐝",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}]
+	},
+	{
+		v: "缁熻鍥捐〃",
+		i: "font icon-24gl-clipboardList",
+		p: "",
+		c: [{
+			v: "瀹為獙瀹よ绱�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "姣忔棩涓氬姟缁熻",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "妫�娴嬮」鐩粺璁�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "鏍峰搧缂洪櫡鎸囨暟",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "鑰楁潗缁熻",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "浜哄憳宸ヤ綔鎶ヨ〃",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}]
+	},
+	{
+		v: "鐢靛瓙鐪嬫澘",
+		i: "font icon-a-Group1126",
+		p: "",
+		c: [{
+			v: "瀹㈡埛鎺ュ緟",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "浠诲姟灞曠ず",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}, {
+			v: "璁惧鐘舵�佸強楗卞拰搴�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			p: ""
+		}]
+	},
+	{
+		v: "绯荤粺鍔熻兘",
+		i: "el-icon-s-tools",
+		p: "",
+		c: [{
+			v: "鏁版嵁瀛楀吀",
+			i: "el-icon-s-tools",
+			u: "enums",
+			p: "selectEnumList"
+		}, {
+			v: "瑙掕壊绠$悊",
+			i: "el-icon-s-tools",
+			u: "role-manage",
+			p: ""
+		}, {
+			v: "鐢ㄦ埛绠$悊",
+			i: "el-icon-s-tools",
+			u: "person-manage",
+			p: ""
+		}, {
+			v: "瀹㈡埛绠$悊",
+			i: "el-icon-s-tools",
+			u: "",
+			p: ""
+		}, {
+			v: "绯荤粺鏃ュ織",
+			i: "el-icon-s-tools",
+			u: "",
+			p: ""
+		}]
+	},
+	{
+		v: "4 閫氱敤瑕佹眰",
+		i: "el-icon-tickets",
+		p: "selectCustomEnumLists selectProductEnumLists",
+		c: [{
+				v: "閫氱敤瑕佹眰",
+				i: "font icon-24gl-clipboardList",
+				u: "",
+				g: "4 閫氱敤瑕佹眰",
+				p: ""
+			},
+			{
+				v: "鍏鎬�",
+				i: "font icon-24gl-clipboardList",
+				u: "",
+				g: "4.1 鍏鎬�",
+				p: ""
+			},
+			{
+				v: "淇濆瘑鎬�",
+				i: "font icon-24gl-clipboardList",
+				u: "",
+				g: "4.2 淇濆瘑鎬�",
+				p: ""
+			}
+		]
+	},
+	{
+		v: "5 缁撴瀯瑕佹眰",
+		i: "el-icon-tickets",
+		p: "",
+		c: [{
+			v: "瀹為獙瀹ょ殑娉曞緥鍦颁綅",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "A瀹為獙瀹ょ殑娉曞緥鍦颁綅",
+			p: ""
+		}, {
+			v: "鍏ㄦ潈璐熻矗鐨勭鐞嗗眰",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "B鍏ㄦ潈璐熻矗鐨勭鐞嗗眰",
+			p: ""
+		}, {
+			v: "瀹為獙瀹よ祫璐�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "C鑳藉姏鑼冨洿鍜岃祫璐�",
+			p: ""
+		}, {
+			v: "鑳藉姏鑼冨洿",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "C鑳藉姏鑼冨洿鍜岃祫璐�",
+			p: ""
+		}, {
+			v: "鍦烘墍鎴栬鏂�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "D鍦烘墍鎴栬鏂�",
+			p: ""
+		}, {
+			v: "缁勭粐鐩稿叧鏂囦欢",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "E缁勭粐鐩稿叧鏂囦欢",
+			p: ""
+		}, {
+			v: "浜哄憳宀椾綅浠昏亴",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "F浜哄憳宀椾綅浠昏亴",
+			p: ""
+		}, {
+			v: "娌熼�氬拰瀹h疮",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "G娌熼�氬拰瀹h疮",
+			p: ""
+		}]
+	}, {
+		v: "6 璧勬簮瑕佹眰",
+		i: "el-icon-tickets",
+		p: "",
+		c: [{
+			v: "鎬诲垯",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.1 鎬诲垯",
+			p: ""
+		}, {
+			v: "浜哄憳鎬昏",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "浜哄憳鏄庣粏",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "浜哄憳鍩硅",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "浜哄憳鐩戠潱",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "宀椾綅鑱岃矗",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "浜哄憳鍩烘湰淇℃伅",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "宸ヤ綔灞ュ巻",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "濂栨儵璁板綍",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "鍩硅璁板綍",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "鐩戠潱璁板綍",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "浠昏亴鎺堟潈璁板綍",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "浜哄憳鑳藉姏鐩戞帶璁板綍",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "娌熼�氳褰�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.2 浜哄憳",
+			p: ""
+		}, {
+			v: "澶栨潵浜哄憳绠$悊",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.3 璁炬柦鍜岀幆澧冩潯浠�",
+			p: ""
+		}, {
+			v: "瀹為獙瀹よ鏂藉満鎵�淇℃伅",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.3 璁炬柦鍜岀幆澧冩潯浠�",
+			p: ""
+		}, {
+			v: "璁炬柦鍜岀幆澧冩潯浠惰姹�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.3 璁炬柦鍜岀幆澧冩潯浠�",
+			p: ""
+		}, {
+			v: "鐜鏉′欢寮曠敤",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.3 璁炬柦鍜岀幆澧冩潯浠�",
+			p: ""
+		}, {
+			v: "瀹夊叏鍖轰唬琛ㄦ鏌�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.3 璁炬柦鍜岀幆澧冩潯浠�",
+			p: ""
+		}, {
+			v: "瀹夊叏鍐呭姟",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.3 璁炬柦鍜岀幆澧冩潯浠�",
+			p: ""
+		}, {
+			v: "搴熺墿澶勭悊浜ゆ帴璁板綍",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.3 璁炬柦鍜岀幆澧冩潯浠�",
+			p: ""
+		}, {
+			v: "璁惧鎬昏",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "璁惧宸ュ叿鏄庣粏",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "璧勬簮棰勫畾",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "浣滀笟鎸囧涔�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "璁惧杩愯鎬昏",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "璁惧妗f",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "璁惧楠屾敹",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "璁惧鏍″噯",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "璁惧鏍告煡",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "璁惧缁存姢",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "璁惧鍊熺敤",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "璁惧鏁呴殰",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "浣跨敤璁板綍",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "璁惧鍋滅敤/鍚敤",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.4 璁惧",
+			p: ""
+		}, {
+			v: "閲忓�兼函婧愯鍒�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.5 璁¢噺婧簮鎬�",
+			p: ""
+		}, {
+			v: "鏍囧噯鐗╄川娓呭崟",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.5 璁¢噺婧簮鎬�",
+			p: ""
+		}, {
+			v: "鏍囧噯鐗╄川楠屾敹",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.5 璁¢噺婧簮鎬�",
+			p: ""
+		}, {
+			v: "鏍囧噯鐗╄川棰嗙敤",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.5 璁¢噺婧簮鎬�",
+			p: ""
+		}, {
+			v: "杩囨湡鏍囨牱澶勭疆",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.5 璁¢噺婧簮鎬�",
+			p: ""
+		}, {
+			v: "鏈嶅姟鍜屼緵搴斿搧閲囪喘",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.6 澶栭儴鎻愪緵鐨勪骇鍝佸拰鏈嶅姟",
+			p: ""
+		},{
+			v: "渚涘簲鍟嗙鐞�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "6.6 澶栭儴鎻愪緵鐨勪骇鍝佸拰鏈嶅姟",
+			p: ""
+		}]
+	}, 
+	{
+		v: "7 杩囩▼瑕佹眰",
+		i: "el-icon-tickets",
+		p: "",
+		c: [{
+			v: "妫�楠屽鎵樺崟",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.1 瑕佹眰銆佹爣涔﹀拰鍚堝悓璇勫",
+			p: ""
+		}, {
+			v: "鍚堝悓璇勫",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.1 瑕佹眰銆佹爣涔﹀拰鍚堝悓璇勫",
+			p: ""
+		}, {
+			v: "瀹為獙瀹ょ殑妫�娴嬭兘鍔涙。妗�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.2 鏂规硶鐨勯�夋嫨銆侀獙璇佸拰纭",
+			p: ""
+		}, {
+			v: "鏍囧噯鏌ユ柊",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.2 鏂规硶鐨勯�夋嫨銆侀獙璇佸拰纭",
+			p: ""
+		}, {
+			v: "鏍囧噯鏂规硶鐨勫彉鏇�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.2 鏂规硶鐨勯�夋嫨銆侀獙璇佸拰纭",
+			p: ""
+		}, {
+			v: "鏂规硶楠岃瘉",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.2 鏂规硶鐨勯�夋嫨銆侀獙璇佸拰纭",
+			p: ""
+		}, {
+			v: "鎶芥牱",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.3 鎶芥牱",
+			p: ""
+		}, {
+			v: "妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.4 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�",
+			p: ""
+		}, {
+			v: "鎶�鏈褰�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.5 鎶�鏈褰�",
+			p: ""
+		}, {
+			v: "娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.6 娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹�",
+			p: ""
+		}, {
+			v: "纭繚缁撴灉鏈夋晥鎬�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.7 纭繚缁撴灉鏈夋晥鎬�",
+			p: ""
+		}, {
+			v: "鎶ュ憡缁撴灉",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.8 鎶ュ憡缁撴灉",
+			p: ""
+		}, {
+			v: "鎶曡瘔璇︽儏",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.9 鎶曡瘔",
+			p: ""
+		}, {
+			v: "鎶曡瘔鎯呭喌姹囨�昏〃",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.9 鎶曡瘔",
+			p: ""
+		}, {
+			v: "涓嶇鍚堥」",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.10 涓嶇鍚堝伐浣�",
+			p: ""
+		}, {
+			v: "涓嶇鍚堥」鐨勫垎甯�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.10 涓嶇鍚堝伐浣�",
+			p: ""
+		}, {
+			v: "鏁版嵁鎺у埗鍜屼俊鎭鐞�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "7.11 鏁版嵁鎺у埗鍜屼俊鎭鐞�",
+			p: ""
+		}]
+	},
+	{
+		v: "8 浣撶郴绠$悊瑕佹眰",
+		i: "el-icon-tickets",
+		p: "",
+		c: [{
+			v: "鏂瑰紡",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.1 鏂瑰紡",
+			p: ""
+		}, {
+			v: "绠$悊浣撶郴鏂囦欢",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.2 绠$悊浣撶郴鏂囦欢",
+			p: ""
+		}, {
+			v: "鏂囦欢娓呭崟",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.3 绠$悊浣撶郴鏂囦欢鐨勬帶鍒�",
+			p: ""
+		}, {
+			v: "鏂囦欢鍙楁帶",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.3 绠$悊浣撶郴鏂囦欢鐨勬帶鍒�",
+			p: ""
+		}, {
+			v: "鏂囦欢鍙戞斁鍥炴敹",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.3 绠$悊浣撶郴鏂囦欢鐨勬帶鍒�",
+			p: ""
+		}, {
+			v: "鏂囦欢鍙樻洿",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.3 绠$悊浣撶郴鏂囦欢鐨勬帶鍒�",
+			p: ""
+		}, {
+			v: "鏂囦欢浣滃簾",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.3 绠$悊浣撶郴鏂囦欢鐨勬帶鍒�",
+			p: ""
+		}, {
+			v: "璁板綍鐨勬帶鍒�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.4 璁板綍鐨勬帶鍒�",
+			p: ""
+		}, {
+			v: "搴斿椋庨櫓鍜屾満閬囩殑鎺柦",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.5 搴斿椋庨櫓鍜屾満閬囩殑鎺柦",
+			p: ""
+		}, {
+			v: "瀹㈡埛鍩烘湰淇℃伅绠$悊",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.6 鏀硅繘",
+			p: ""
+		}, {
+			v: "瀹㈡埛婊℃剰搴�",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.6 鏀硅繘",
+			p: ""
+		}, {
+			v: "绾犳鎺柦",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.7 绾犳鎺柦",
+			p: ""
+		}, {
+			v: "鍐呭绠$悊",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.8 鍐呭绠$悊",
+			p: ""
+		}, {
+			v: "绠$悊璇勫",
+			i: "font icon-24gl-clipboardList",
+			u: "",
+			g: "8.9 绠$悊璇勫",
+			p: ""
+		}]
+	}
+]
+
+function computeK() {
+	let k = 1;
+	function computeK(menu) {
+		menu.forEach(item => {
+			if (item.k == undefined) item.k = k++;
+			if (item.c) {
+				computeK(item.c);
+			}
+		});
+	}
+	computeK(menu);
+}
+computeK();
+
+export default {
+	menu: menu
+}
\ No newline at end of file

--
Gitblit v1.9.3