Преглед изворни кода

ETA预测指标库目录改成三级

cxmo пре 1 година
родитељ
комит
44d990fbdf

+ 15 - 0
src/api/modules/predictEdbApi.js

@@ -7,6 +7,21 @@ import http from "@/api/http.js"
 export const classifyList = params => {
   return http.get('/datamanage/predict_classify/list',params)
 }
+/**
+ * 添加分类V2 懒加载
+ * @returns 
+ */
+export const classifyListV2 = params => {
+    return http.get('/datamanage/predict_classify/list/v2',params)
+}
+/**
+ * 分类的图表列表 IsOnlyMe ClassifyId
+ * @param {*} params 
+ * @returns 
+ */
+export const classifyChartList = params => {
+    return http.get('/datamanage/predict_edb_info/items',params)
+}
 
 /**
  * 新增分类

+ 1 - 1
src/views/dataEntry_manage/chartSetting.vue

@@ -1284,7 +1284,7 @@ export default {
     canDropHandle(draggingNode, dropNode, type) {
       let canDrop = false;
       // 移动的是一级目录
-			if(draggingNode.level===1&&dropNode.level===1) {
+			if(draggingNode.level===1&&dropNode.level===1&&type!=='inner') {
 				canDrop=true
 			} 
 

+ 3 - 3
src/views/dataEntry_manage/databaseComponents/batchComptedDialog.vue

@@ -370,10 +370,10 @@ export default {
 		/* 获取目录结构 */
 		async getMenu() {
 			const res = this.edbSource === 'predict'
-				? await preDictEdbInterface.classifyOne()
-				: await dataBaseInterface.menuList()
+				? await preDictEdbInterface.classifyListV2()
+				: await dataBaseInterface.menuListV3()
 				if (res.Ret !== 200) return
-				this.edbSource !== 'predict' && this.filterNodes(res.Data.AllNodes);
+				//this.edbSource !== 'predict' && this.filterNodes(res.Data.AllNodes);
 				this.options = res.Data.AllNodes || [];
 		},
 		// 递归改变第三级目录结构

+ 5 - 4
src/views/dataEntry_manage/databaseComponents/diffusionIndexDia.vue

@@ -325,15 +325,16 @@ export default {
 		/* 获取目录结构 */
 		async getMenu() {
 			const res = this.isPredict
-      ? await preDictEdbInterface.classifyOne()
-      : await dataBaseInterface.menuList()
+      ? await preDictEdbInterface.classifyListV2()
+      : await dataBaseInterface.menuListV3()
 				if (res.Ret === 200) {
-					if(!this.isPredict){
+					/* if(!this.isPredict){
 						this.filterNodes(res.Data.AllNodes);
 						this.options = res.Data.AllNodes || [];
 					}else{
 						this.options = res.Data.AllNodes || [];
-					}
+					} */
+					this.options = res.Data.AllNodes || [];
 				}
 		},
 		// 递归改变第三级目录结构

+ 4 - 3
src/views/dataEntry_manage/databaseComponents/fittingResidueDia.vue

@@ -360,15 +360,16 @@ export default {
 
 		/* 获取目录结构 */
 		async getMenu() {
-			const res=this.isPredict?await preDictEdbInterface.classifyOne():await dataBaseInterface.menuList()
+			const res=this.isPredict?await preDictEdbInterface.classifyListV2():await dataBaseInterface.menuListV3()
 			// dataBaseInterface.menuList().then((res) => {
 				if (res.Ret === 200) {
-					if(!this.isPredict){
+					/* if(!this.isPredict){
 						this.filterNodes(res.Data.AllNodes);
 						this.options = res.Data.AllNodes || [];
 					}else{
 						this.options = res.Data.AllNodes || [];
-					}
+					} */
+					this.options = res.Data.AllNodes || [];
 				}
 			// });
 		},

+ 4 - 3
src/views/dataEntry_manage/databaseComponents/jointTargetDia.vue

@@ -421,15 +421,16 @@ export default {
 
 		/* 获取目录结构 */
 		async getMenu() {
-			const res=this.isPredict?await preDictEdbInterface.classifyOne():await dataBaseInterface.menuList()
+			const res=this.isPredict?await preDictEdbInterface.classifyListV2():await dataBaseInterface.menuListV3()
 			// dataBaseInterface.menuList().then(res => {
 				if(res.Ret === 200) {
-					if(!this.isPredict){
+					/* if(!this.isPredict){
 						this.filterNodes(res.Data.AllNodes);
 						this.menuOptions = res.Data.AllNodes || [];
 					}else{
 						this.menuOptions = res.Data.AllNodes || [];
-					}
+					} */
+					this.menuOptions = res.Data.AllNodes || [];
 				}
 			// })
 		},

+ 12 - 4
src/views/dataEntry_manage/databaseList.vue

@@ -672,12 +672,12 @@ export default {
 				this.page_no = 1;
 				this.$refs.valueUl.scrollTop = 0;
 				// 查找图表的父级code
-				this.defaultShowNodes = this.findParentNodeHandle(this.treeData,search_obj.ClassifyId);
+				//this.defaultShowNodes = this.findParentNodeHandle(this.treeData,search_obj.ClassifyId);
 				this.select_node = search_obj.UniqueCode;
 				this.selected_edbid = newval;
 
 				//滚动到高亮节点位置
-				setTimeout(() => {
+				/* setTimeout(() => {
 					this.$refs.menuTree.setCurrentKey(this.select_node);
 					let node = document.getElementById(`node${this.select_node}`);
 					let parent = document.getElementsByClassName('tree-cont')[0];
@@ -685,7 +685,7 @@ export default {
 					if(node.offsetTop > parent.offsetHeight) {
 						parent.scrollTop =  node.offsetTop - parent.offsetHeight/2
 					}
-				},400)
+				},400) */
 			}
 		},
 	},
@@ -787,6 +787,14 @@ export default {
 						const _node = this.$refs.menuTree.getNode(this.select_node)
 						this.dynamicNode = _node;
 						this.dynamicNode&&this.resetNodeStyle(this.dynamicNode)
+						//滚动到高亮位置
+						setTimeout(() => {
+							let node = document.getElementById(`node${this.select_node}`)||{}
+							let parent = document.getElementsByClassName('tree-cont')[0];
+							if(node.offsetTop > parent.offsetHeight) {
+								parent.scrollTop =  node.offsetTop - parent.offsetHeight/2
+							}
+						},400)
 					})
 					
 				}
@@ -1430,7 +1438,6 @@ export default {
 		},
 		// 查找树节点所有父节点
 		findParentNodeHandle(arr, id) {
-            console.log('findParentNodeHandle')
 			// 遍历取父级code push数组
 			for (let i of arr) {
 				if (i.ClassifyId === id) {
@@ -1608,6 +1615,7 @@ export default {
 					frequency: dataInfo.Frequency,
 					unit: dataInfo.Unit,
 					menu: [
+						node.parent.parent.parent.data.ClassifyId,
 						node.parent.parent.data.ClassifyId,
 						data.ClassifyId
 					],

+ 15 - 4
src/views/predictEdb_manage/addPredicEdb.vue

@@ -15,7 +15,7 @@
           <el-form-item prop="classify">
             <div class="item">
               <span class="label">添加到分类</span>
-              <el-select
+              <!-- <el-select
                 v-model="formData.classify"
                 placeholder="请选择分类"
                 style="width: 100%"
@@ -28,7 +28,18 @@
                   :value="item.ClassifyId"
                 >
                 </el-option>
-              </el-select>
+              </el-select> -->
+              <el-cascader
+                    v-model="formData.classify"
+                    :options="classifyArr"
+                    :props="{
+                        label: 'ClassifyName',
+                        value: 'ClassifyId',
+                        children: 'Children',
+                    }"
+                    style="width: 90%"
+                    placeholder="请选择所属分类"
+                />
             </div>
           </el-form-item>
           <el-form-item prop="oldEdb" v-if="!formData.edb_id">
@@ -615,7 +626,7 @@ export default {
     },
 
     getClassifyOne() {
-      preDictEdbInterface.classifyOne().then((res) => {
+      preDictEdbInterface.classifyListV2().then((res) => {
         if (res.Ret !== 200) return;
 
         this.classifyArr = res.Data.AllNodes || [];
@@ -831,7 +842,7 @@ export default {
         }
       })
       let params = {
-        ClassifyId: classify,
+        ClassifyId: classify[classify.length-1],
         EdbName: edbName,
         MaxValue: Number(this.$refs.chartInfo.tableData[0].MaxData),
 				MinValue: Number(this.$refs.chartInfo.tableData[0].MinData),

+ 29 - 16
src/views/predictEdb_manage/components/classifyDia.vue

@@ -4,7 +4,7 @@
 		:visible.sync="isOpenDialog"
 		:close-on-click-modal="false"
 		:modal-append-to-body='false'
-    :title="title"
+		:title="title"
 		@close="cancelHandle"
 		custom-class="dialog"
 		center
@@ -19,12 +19,25 @@
 				:model="formData"
 				:rules="formRules">
 				
-          <el-form-item label="分类名称" prop="classify_name">
-            <el-input
-            v-model="formData.classify_name"
-            style="width: 80%"
-            placeholder="必填项"></el-input>
-          </el-form-item>
+				<!-- 添加一级目录的子分类/编辑二级目录时显示 -->
+				<template v-if="(title=='添加'&&formData.Level === 1)||(title=='编辑'&&formData.Level === 2)">
+					<el-form-item label="一级目录" prop="level_1_Name">
+						<span>{{formData.level_1_Name}}</span>
+					</el-form-item>
+				</template>
+				<!-- 添加二级目录的子分类/编辑三级目录时显示 -->
+				<template v-if="(title=='添加'&&formData.Level === 2)||(title=='编辑'&&formData.Level === 3)">
+					<el-form-item label="一级目录" prop="level_2_Name">
+						<span>{{formData.level_2_Name}}</span>
+					</el-form-item>
+				</template>
+
+				<el-form-item label="分类名称" prop="classify_name">
+					<el-input
+					v-model="formData.classify_name"
+					style="width: 80%"
+					placeholder="必填项"></el-input>
+				</el-form-item>
 				</el-form>
 			</div>
 			<div class="dia-bot">
@@ -74,16 +87,16 @@ export default {
 	methods: {
 		async saveHandle() {
 			await this.$refs.diaForm.validate()
-      const { classify_name,classify_id }  = this.formData;
-      const { Ret,Msg } = this.title==='添加' 
-        ? await preDictEdbInterface.classifyAdd({ ClassifyName:classify_name })
-        : await preDictEdbInterface.classifyEdit({ ClassifyName:classify_name, ClassifyId:classify_id  })
-        
-      if( Ret !== 200) return
-      this.$message.success(Msg);
+			const { classify_name,classify_id,Level,ParentId}  = this.formData;
+			const { Ret,Msg } = this.title==='添加' 
+				? await preDictEdbInterface.classifyAdd({ ClassifyName:classify_name,ParentId,Level})
+				: await preDictEdbInterface.classifyEdit({ ClassifyName:classify_name, ClassifyId:classify_id  })
+				
+			if( Ret !== 200) return
+			this.$message.success(Msg);
 
-      this.cancelHandle();
-      this.$emit('successCallback')
+			this.cancelHandle();
+			this.$emit('successCallback')
 		},
 
 		/* 取消 */

+ 23 - 8
src/views/predictEdb_manage/components/computedDialog.vue

@@ -101,7 +101,7 @@
 					<selectUnit v-model="formData.unit" style="width: 340px" />
 				</el-form-item>
 				<el-form-item label="指标目录" prop="menu">
-					<el-select
+<!-- 					<el-select
             v-model="formData.menu"
             placeholder="请选择分类"
             style="width: 340px"
@@ -113,7 +113,18 @@
               :label="item.ClassifyName"
               :value="item.ClassifyId"
             />
-          </el-select>
+          </el-select> -->
+					<el-cascader
+						v-model="formData.menu"
+						:options="options"
+						:props="{
+							label: 'ClassifyName',
+							value: 'ClassifyId',
+							children: 'Children',
+						}"
+						style="width: 90%"
+						placeholder="请选择所属分类"
+					/>
 				</el-form-item>
 				<el-form-item label="频度" prop="frequency">
 					<el-select
@@ -257,11 +268,11 @@ export default {
 	methods: {
 		/* 获取目录结构 */
 		getMenu() {
-      preDictEdbInterface.classifyOne().then(res => {
-        if(res.Ret !== 200) return
+			preDictEdbInterface.classifyListV2().then(res => {
+				if(res.Ret !== 200) return
 
-        this.options = res.Data.AllNodes || [];
-      }) 
+				this.options = res.Data.AllNodes || [];
+			}) 
 		},
 
 		/* 添加额外的指标列 */
@@ -366,7 +377,7 @@ export default {
 							});
 						let params = {
 							CalculateFormula: this.formula,
-							ClassifyId: this.formData.menu,
+							ClassifyId: this.formData.menu[this.formData.menu.length - 1],
 							EdbName: this.formData.targetName,
 							Frequency: this.formData.frequency,
 							Unit: this.formData.unit,
@@ -381,7 +392,11 @@ export default {
 							if (res.Ret !== 200) return
 
 							this.$message.success(this.calulateForm.edb_id ? '编辑成功' : '新增成功');
-							this.calulateForm.edb_id ? this.$emit('addCallBack','edit') : this.$emit('addCallBack','add',{ code:res.Data.UniqueCode,id:res.Data.EdbInfoId });
+							this.calulateForm.edb_id ? this.$emit('addCallBack','edit') : this.$emit('addCallBack','add',{ 
+								code:res.Data.UniqueCode,
+								id:res.Data.EdbInfoId,
+								classifyId:params.ClassifyId
+							});
 							this.init();
 						});
 					}

+ 15 - 4
src/views/predictEdb_manage/components/edbDia.vue

@@ -21,7 +21,7 @@
 				:rules="formRules"
       >
         <el-form-item label="添加到分类" prop="classify">
-          <el-select
+          <!-- <el-select
             v-model="formData.classify"
             placeholder="请选择分类"
             style="width: 90%"
@@ -34,7 +34,18 @@
               :value="item.ClassifyId"
             >
             </el-option>
-          </el-select>
+          </el-select> -->
+          <el-cascader
+                v-model="formData.classify"
+                :options="classifyArr"
+                :props="{
+                    label: 'ClassifyName',
+                    value: 'ClassifyId',
+                    children: 'Children',
+                }"
+                style="width: 90%"
+                placeholder="请选择所属分类"
+            />
         </el-form-item>
         <el-form-item label="选择指标" prop="oldEdb" v-if="title==='添加指标'">
           <el-select
@@ -207,7 +218,7 @@ export default {
   },
   methods: {
     getClassifyOne() {
-      preDictEdbInterface.classifyOne().then(res => {
+      preDictEdbInterface.classifyListV2().then(res => {
         if(res.Ret !== 200) return
 
         this.classifyArr = res.Data.AllNodes || [];
@@ -281,7 +292,7 @@ export default {
         fixedValue 
       } = this.formData;
       let params = {
-        ClassifyId: classify,
+        ClassifyId: classify[classify.length-1],
         EdbName: edbName,
         EndDate: endDate,
         RuleType: predict_type,

+ 20 - 5
src/views/predictEdb_manage/components/operationDialog.vue

@@ -172,7 +172,7 @@
 							/>
 						</el-form-item>
 						<el-form-item label="指标目录" prop="menu">
-							<el-select
+							<!-- <el-select
 								v-model="formData.menu"
 								placeholder="请选择分类"
 								style="width: 340px"
@@ -184,7 +184,18 @@
 									:label="item.ClassifyName"
 									:value="item.ClassifyId"
 								/>
-							</el-select>
+							</el-select> -->
+							<el-cascader
+								v-model="formData.menu"
+								:options="options"
+								:props="{
+									label: 'ClassifyName',
+									value: 'ClassifyId',
+									children: 'Children',
+								}"
+								style="width: 90%"
+								placeholder="请选择所属分类"
+							/>
 						</el-form-item>
 						<el-form-item label="频度" prop="frequency">
 							<el-select
@@ -482,7 +493,7 @@ export default {
 
 		/* 获取目录结构 */
 		getMenu() {
-      preDictEdbInterface.classifyOne().then(res => {
+      preDictEdbInterface.classifyListV2().then(res => {
         if(res.Ret !== 200) return
 
         this.options = res.Data.AllNodes || [];
@@ -585,7 +596,7 @@ export default {
 					Source: this.type,
 					EdbName: this.formData.targetName,
 					Unit: this.formData.unit,
-					ClassifyId: this.formData.menu,
+					ClassifyId: this.formData.menu[this.formData.menu.length - 1],
 					Frequency: this.formData.frequency,
 					FromEdbInfoId: this.select_target,
 					Formula: valueMap[this.type] ? String(this.formData[valueMap[this.type]]) : String(this.formData.n_num),
@@ -603,7 +614,11 @@ export default {
 					if(res.Ret !== 200) return
 
 					this.$message.success(this.operationForm.edb_id ? '编辑成功' : '新增成功');
-					this.operationForm.edb_id ? this.$emit('addCallBack','edit') : this.$emit('addCallBack','add',{ code:res.Data.UniqueCode,id:res.Data.EdbInfoId });
+					this.operationForm.edb_id ? this.$emit('addCallBack','edit') : this.$emit('addCallBack','add',{ 
+						code:res.Data.UniqueCode,
+						id:res.Data.EdbInfoId,
+						classifyId:params.ClassifyId
+					});
 					this.init();
 				})		
 		},

+ 44 - 21
src/views/predictEdb_manage/mixins/mixin.js

@@ -40,10 +40,11 @@ export default {
 
   methods: {
     /* 根据unicode展开树结构并选中当前图表 重置图表配置 日期区间 */
-    selectCurrentNode({ code, id, type }) {
+    selectCurrentNode({ code, id, classifyId }) {
+        console.log('params',code,id,classifyId)
       let deep_arr = _.cloneDeep(this.treeData);
       // 查找图表的分类父级id
-      let arr = this.findParentNodeHandle(deep_arr, code).slice(1).reverse(); // 父的父的父-父的父-父
+      let arr = this.findParentNodeHandle(deep_arr, classifyId).reverse(); // 父的父的父-父的父-父
       this.defaultShowNodes = arr;
       this.select_node = code;
       this.$refs.treeRef.setCurrentKey(this.select_node);
@@ -52,16 +53,16 @@ export default {
     },
 
     // 查找树节点所有父节点
-    findParentNodeHandle(arr, id) {
+    findParentNodeHandle(arr, id,paramName='UniqueCode') {
       // 遍历取父级code push数组
       for (let i of arr) {
-        if (i.UniqueCode === id) {
-          return [i.UniqueCode];
+        if (i.ClassifyId === id) {
+          return [i[paramName]];
         }
         if (i.Children) {
-          let node = this.findParentNodeHandle(i.Children, id);
+          let node = this.findParentNodeHandle(i.Children, id,paramName);
           if (node) {
-            return node.concat(i.UniqueCode);
+            return node.concat(i[paramName]);
           }
         }
       }
@@ -112,19 +113,20 @@ export default {
     dropOverHandle(b, a, i, e) {
       // console.log(i, a);
       // 被拖拽节点对应的 Node、结束拖拽时最后进入的节点、被拖拽节点的放置位置
-      // 一/二级目录
-      if ([1].includes(b.level)) this.handleMoveCatalogue(b, a, i, e);
+      // 一/二/三级目录
+      if ([1,2,3].includes(b.level)) this.handleMoveCatalogue(b, a, i, e);
 
       // 指标层
-      if (b.level === 2) this.handleMoveSheet(b, a, i, e);
+      if (b.level === 4) this.handleMoveSheet(b, a, i, e);
     },
 
-    // 移动的为一级目录
+    // 移动的为一/二/三级目录
     handleMoveCatalogue(b, a, i, e) {
       let list = a.parent.childNodes,
         targetIndex = 0,
         PrevClassifyId = 0,
-        NextClassifyId = 0;
+        NextClassifyId = 0,
+        ParentClassifyId = 0;
 
       list.forEach((item, index) => {
         if (item.data.ClassifyId === b.data.ClassifyId) {
@@ -135,7 +137,7 @@ export default {
 
       if (targetIndex === 0) {
         PrevClassifyId = 0;
-        NextClassifyId = list[targetIndex + 1].data.ClassifyId;
+        NextClassifyId = list.length>1?list[targetIndex + 1].data.ClassifyId:0;
       } else if (targetIndex === list.length - 1) {
         PrevClassifyId = list[targetIndex - 1].data.ClassifyId;
         NextClassifyId = 0;
@@ -143,10 +145,21 @@ export default {
         PrevClassifyId = list[targetIndex - 1].data.ClassifyId;
         NextClassifyId = list[targetIndex + 1].data.ClassifyId;
       }
+      
+      if(b.level===2||b.level===3){
+        if(i==='inner'){
+            ParentClassifyId=a.data.ClassifyId
+            PrevClassifyId=0
+            NextClassifyId=a.data.Children.length>1?a.data.Children[1].ClassifyId:0
+        }else{
+            ParentClassifyId=a.data.ParentId
+        }
+      }
 
       preDictEdbInterface
         .classifyMove({
           ClassifyId: b.data.ClassifyId,
+          ParentClassifyId: ParentClassifyId,
           PrevClassifyId: PrevClassifyId,
           NextClassifyId: NextClassifyId,
         })
@@ -258,15 +271,25 @@ export default {
         canDrop = true;
       }
 
-      // 二级
-      if (draggingNode.level === 2) {
-        if (
-          (dropNode.level === 1 && type === "inner") ||
-          (dropNode.level === 2 && type !== "inner")
-        ) {
-          canDrop = true;
+      // 二级目录
+        if(draggingNode.level===2){
+            if((dropNode.level===1&&type==='inner')||(dropNode.level===2&&type!=='inner')){
+                canDrop=true
+            }
+        }
+
+        //三级目录
+        if(draggingNode.level===3){
+            if((dropNode.level===2&&type==='inner')||(dropNode.level===3&&type!=='inner')){
+                canDrop=true
+            }
+        }
+        //四级指标层
+        if(draggingNode.level===4){
+            if((dropNode.level===3&&type==='inner')||(dropNode.level===4&&type!=='inner')){
+                canDrop=true
+            }
         }
-      }
 
       return canDrop;
     },

+ 111 - 21
src/views/predictEdb_manage/predictEdb.vue

@@ -56,6 +56,8 @@
 						:expand-on-click-node="false"
 						check-strictly
 						empty-text="暂无分类"
+						lazy
+						:load="getLazyTreeData"
 						@node-expand="handleNodeExpand"
 						@node-collapse="handleNodeCollapse"
 						@current-change="nodeChange"
@@ -94,12 +96,19 @@
 									style="width: 14px; height: 14px; margin-right: 8px"
 									v-if="data.Button.MoveButton"
 								/>
+								<img
+									src="~@/assets/img/set_m/add.png"
+									alt=""
+									style="width: 14px; height: 14px; margin-right: 8px"
+									@click.stop="addNode(node, data)"
+									v-if="data.Button.AddButton&&!data.EdbInfoId"
+								/>
 								<img
 									src="~@/assets/img/set_m/edit.png"
 									alt=""
 									style="width: 15px; height: 14px; margin-right: 8px"
 									@click.stop="editNode(node, data)"
-									v-if="data.Button.OpButton"
+									v-if="data.Button.OpButton&&!data.EdbInfoId"
 								/>
 								<img
 									slot="reference"
@@ -107,7 +116,7 @@
 									alt=""
 									style="width: 14px; height: 14px"
 									@click.stop="removeNode(node, data)"
-									v-if="data.Button.DeleteButton"
+									v-if="data.Button.DeleteButton&&!data.EdbInfoId"
 								/>
 								<i class="el-icon-view" v-if="data.EdbInfoId" @click.stop="viewNode(node,data)"></i>
 							</span>
@@ -435,11 +444,12 @@ export default {
 			select_classify: '',
 			new_label:'',//双击修改的value
 			treeData: [], //分类数据
-      defaultShowNodes: [], //展开节点
-      defaultProp: {
-        label: 'ClassifyName',
-        children: 'Children',
-      }, //树结构配置项
+			defaultShowNodes: [], //展开节点
+			defaultProp: {
+				label: 'ClassifyName',
+				children: 'Children',
+				isLeaf:'isLeaf'
+			}, //树结构配置项
 			dynamicNode: null,
 			edbName: '',
 			edb_nameEn: '',
@@ -581,7 +591,8 @@ export default {
 			this.detail_show_chart = true;
 			this.$nextTick(()=>{
 				//切换为曲线图
-				this.$refs.detailComponentRef.$refs.chartInfo.chartInfo.ChartType=1
+				this.$refs.detailComponentRef&&
+				(this.$refs.detailComponentRef.$refs.chartInfo.chartInfo.ChartType=1)
 			})
 				
 		},
@@ -600,7 +611,7 @@ export default {
 				let search_obj = this.searchOptions.find(_ => _.EdbInfoId === newval);
 				let deep_arr = _.cloneDeep(this.treeData);
 				// 查找图表的分类父级id
-				let arr = this.findParentNodeHandle(deep_arr, search_obj.UniqueCode).slice(1).reverse(); // 父的父的父-父的父-父
+				let arr = this.findParentNodeHandle(deep_arr, search_obj.ClassifyId).reverse(); // 父的父的父-父的父-父
 				this.defaultShowNodes = arr;
 				this.select_node = search_obj.UniqueCode;
 				this.$refs.treeRef.setCurrentKey(this.select_node);
@@ -627,7 +638,7 @@ export default {
 
 		/* 获取分类 */
 		getTreeData(params=null) {
-			preDictEdbInterface.classifyList({IsOnlyMe:this.isOnlyMe||false}).then(res => {
+			preDictEdbInterface.classifyListV2({IsOnlyMe:this.isOnlyMe||false}).then(res => {
 				const { Ret,Data } = res;
 				
 				if(Ret !== 200) return
@@ -689,18 +700,51 @@ export default {
 			this.dialog_title = '添加';
 			this.classifyForm = {
 				classify_name: '',
+				Level:0,
+				ParentId:0
+			}
+			this.classifyDia = true;
+		},
+		addNode(node,{ClassifyName,ClassifyId}){
+			this.dialog_title = '添加'
+			/* 添加目录 */
+			this.classifyForm = {
+				classify_name:'',
+				Level:node.level,
+				ParentId:ClassifyId,
+				level_1_Name:node.level === 1
+				? ClassifyName
+				: node.level === 2
+				? node.parent.data.ClassifyName
+				: node.parent.parent.data.ClassifyName,
+				level_2_Name:node.level === 1
+				? ''
+				: node.level === 2
+				? ClassifyName
+				: node.parent.data.ClassifyName,
 			}
 			this.classifyDia = true;
 		},
-
     /* 编辑节点 */
-    editNode(node, { ClassifyName,ClassifyId }) {
+    editNode(node, { ClassifyName,ClassifyId,Level,ParentId}) {
 
       this.dialog_title = '编辑';
       /* 编辑目录 */
       this.classifyForm = {
         classify_name: ClassifyName,
         classify_id: ClassifyId,
+        Level:node.Level,
+        ParentId:ParentId,
+        level_1_Name:node.level === 1
+            ? ClassifyName
+            : node.level === 2
+            ? node.parent.data.ClassifyName
+            : node.parent.parent.data.ClassifyName,
+        level_2_Name:node.level === 1
+            ? ''
+            : node.level === 2
+            ? ClassifyName
+            : node.parent.data.ClassifyName,
       };
       this.classifyDia = true;
     },
@@ -745,7 +789,8 @@ export default {
 					type && res.Data.EdbInfoId
 						? this.getTreeData({
 								code: res.Data.UniqueCode,
-								id: res.Data.EdbInfoId
+								id: res.Data.EdbInfoId,
+								classifyId:res.Data.ClassifyId
 							})
 						: this.getTreeData();
         });
@@ -783,10 +828,11 @@ export default {
 		},
 
 		/* 展开对应菜单 显示详情 */
-		detailShowHandle({ UniqueCode, EdbInfoId }) {
+		detailShowHandle({ UniqueCode, EdbInfoId,ClassifyId}) {
 			let params = {
 				code: UniqueCode,
-				id: EdbInfoId
+				id: EdbInfoId,
+				classifyId:ClassifyId
 			};
 			this.selectCurrentNode(params);
 			this.select_classify = 0;
@@ -886,6 +932,9 @@ export default {
 
 		/* 计算指标回显 */
 		setComputedDialogForm({Source,CalculateList,CalculateFormula,EdbInfoId,EdbName,Unit,Frequency,ClassifyId,MoveType,MoveFrequency,Calendar},type='') {
+			//找到指标的父级
+			let deep_arr = _.cloneDeep(this.treeData);
+			const parentNodes = this.findParentNodeHandle(deep_arr,ClassifyId,'ClassifyId')
 			//指标运算 or 其他计算类型指标
 			if( Source === 31 ) {
 				/* 回显指标和表单 */
@@ -902,7 +951,7 @@ export default {
 				this.calulateForm =  {
 					edb_id:EdbInfoId,
 					formula: CalculateFormula,
-					menu: ClassifyId,
+					menu: parentNodes.reverse(),
 					targetName: EdbName,
 					unit: Unit,
 					frequency: Frequency,
@@ -915,9 +964,7 @@ export default {
 						targetName: EdbName,
 						frequency: Frequency,
 						unit: Unit,
-						menu: [
-							ClassifyId
-						],
+						menu: parentNodes.reverse(),
 						view: type === 'view',
 						source: Source,
 						date: CalculateFormula,
@@ -935,7 +982,7 @@ export default {
 					edb_id: EdbInfoId,
 					targetName: EdbName,
 					unit: Unit,
-					menu: ClassifyId,
+					menu: parentNodes.reverse(),
 					frequency: Frequency,
 					formula: CalculateFormula || '',
 					view: type === 'view',
@@ -1125,13 +1172,56 @@ export default {
 			this.$refs.listRef.scrollTop = 0;
       this.getPublicList();
     },
+		//懒加载el-tree
+		getLazyTreeData(node,resolve,maxLevel=3){
+			if(node.level===0){
+					resolve(this.treeData)
+				}
+				if(node.level>0&&node.level<=maxLevel){
+					//获取对应层级的Child
+					resolve(node.data.Children||[])
+				}
+				if(node.level===maxLevel){
+					//调接口获取该分类下图表的数据
+					preDictEdbInterface.classifyChartList({
+						ClassifyId:node.data.ClassifyId,
+						IsShowMe:this.isOnlyMe
+					}).then(res=>{
+						if(res.Ret===200){
+							let arr=res.Data.EdbInfoList||[]
+							arr=arr.map(item=>{
+								return {
+									...item,
+									isLeaf:true
+								}
+							})
+							resolve(arr)
+						}else{
+							resolve([])
+						}
+						this.changeTreeNode()
+					})
+				}
+				if(node.level>maxLevel){
+					resolve([])
+				}
+		},
+		changeTreeNode(){
+			this.$refs.treeRef.setCurrentKey(this.select_node);
+			this.$nextTick(()=>{
+				const _node = this.$refs.treeRef.getNode(this.select_node)
+				this.dynamicNode = _node;
+				this.dynamicNode&&this.resetNodeStyle(this.dynamicNode)
+			})
+		}
 	},
 	mounted() {
 		const obj=sessionStorage.getItem('predictEdbTreeData')
 		if(obj||this.$route.query.code){
 			let code=obj?JSON.parse(obj).code:this.$route.query.code
 			let id=obj?JSON.parse(obj).id:this.$route.query.id
-			this.getTreeData({code: code,id: id})
+			let classifyId=obj?JSON.parse(obj).classifyId:this.$route.query.classifyId
+			this.getTreeData({code: code,id: Number(id),classifyId:Number(classifyId)})
 		}else{
 			this.getTreeData()
 		}