Browse Source

Merge branch 'edb_dev' into debug

Karsa 5 tháng trước cách đây
mục cha
commit
42349ba8f9
36 tập tin đã thay đổi với 810 bổ sung236 xóa
  1. 87 2
      src/api/modules/chartApi.js
  2. 6 5
      src/components/antvVueComponents/tooltipCom.vue
  3. 9 0
      src/routes/modules/chartRoutes.js
  4. 8 0
      src/utils/buttonConfig.js
  5. 1 1
      src/views/chartRelevance_manage/components/saveEdbToBaseDia.vue
  6. 2 2
      src/views/chartRelevance_manage/crossVarietyAnalysis/components/edbTableSection.vue
  7. 1 1
      src/views/chartRelevance_manage/relevance/components/multipleIndForm.vue
  8. 1 1
      src/views/dataEntry_manage/adjustdata/adjustData.vue
  9. 1 1
      src/views/dataEntry_manage/codecount/index.vue
  10. 112 0
      src/views/dataEntry_manage/databaseComponents/addCollectClassifyDia.vue
  11. 1 1
      src/views/dataEntry_manage/databaseComponents/batchComptedDialog.vue
  12. 1 1
      src/views/dataEntry_manage/databaseComponents/batchComputedSave.vue
  13. 1 1
      src/views/dataEntry_manage/databaseComponents/batchComputedV2.vue
  14. 1 0
      src/views/dataEntry_manage/databaseComponents/chartTrendRender.vue
  15. 69 0
      src/views/dataEntry_manage/databaseComponents/collectEdbMenu.vue
  16. 1 1
      src/views/dataEntry_manage/databaseComponents/computedDialog.vue
  17. 1 1
      src/views/dataEntry_manage/databaseComponents/diffusionIndexDia.vue
  18. 149 0
      src/views/dataEntry_manage/databaseComponents/edbCollectDia.vue
  19. 1 1
      src/views/dataEntry_manage/databaseComponents/fittingResidueDia.vue
  20. 1 1
      src/views/dataEntry_manage/databaseComponents/jointTargetDia.vue
  21. 5 1
      src/views/dataEntry_manage/databaseComponents/openDialog.vue
  22. 1 1
      src/views/dataEntry_manage/databaseComponents/operationDialog.vue
  23. 1 1
      src/views/dataEntry_manage/databaseComponents/smoothEdbDialog.vue
  24. 323 193
      src/views/dataEntry_manage/databaseList.vue
  25. 3 3
      src/views/dataEntry_manage/mixins/chartPublic.js
  26. 2 2
      src/views/datasheet_manage/components/CustomTable.vue
  27. 1 1
      src/views/datasheet_manage/customAnalysis/components/createTargetForm.vue
  28. 6 2
      src/views/edbHistoryPage.vue
  29. 1 1
      src/views/intervalAnalysis/components/batchSelectEdb.vue
  30. 1 1
      src/views/intervalAnalysis/components/saveMultipleEdb.vue
  31. 1 1
      src/views/intervalAnalysis/components/saveSingleEdb.vue
  32. 1 1
      src/views/mychart_manage/components/chartDetailDia.vue
  33. 1 1
      src/views/sandbox_manage/index_new_version.vue
  34. 1 1
      src/views/sandbox_manage/sandFlowNew/index.vue
  35. 1 1
      src/views/supply_manage/components/createTargetDia.vue
  36. 7 5
      src/views/system_manage/dataOperaAuth.vue

+ 87 - 2
src/api/modules/chartApi.js

@@ -458,7 +458,7 @@ const dataBaseInterface = {
 
 
 
-	//========================================chart
+	//=========================================chart==========
 	// /**
 	//  * 
 	//  * @param {Image} params 
@@ -1375,8 +1375,93 @@ const chartFrameInterface = {
 
 }
 
+
+const edbCollectInterface = {
+	/**
+	 * 获取收藏分类
+	 * @param {*} params  ParentId
+	 * @returns 
+	 */
+		getEdbCollectClassify: params => {
+			return http.get('/datamanage/edb_collect/classify/list',params)
+		},
+
+		/**
+		 * 获取一级收藏分类
+		 * @param {*} params  ParentId
+		 * @returns 
+		 */
+		getEdbCollectClassifyOne: params => {
+			return http.get('/datamanage/edb_collect/classify/tree',params)
+		},
+
+		/**
+		 * 新增收藏分类
+		 * @param {*} params  ClassifyName ParentId Level
+		 * @returns 
+		 */
+		addCollectClassify: params => {
+			return http.post('/datamanage/edb_collect/classify/add',params)
+		},
+
+		/**
+		 * 编辑收藏分类
+		 * @param {*} params  ClassifyName ClassifyId
+		 * @returns 
+		 */
+		editCollectClassify: params => {
+			return http.post('/datamanage/edb_collect/classify/edit',params)
+		},
+
+		/**
+		 * 删除收藏分类
+		 * @param {*} params ClassifyId
+		 * @returns 
+		 */
+		delCollectClassify: params => {
+			return http.post('/datamanage/edb_collect/classify/remove',params)
+		},
+
+		/**
+		 * 移动收藏分类
+		 * @param {*} params ClassifyId
+		 * @returns 
+		 */
+		moveCollectClassify: params => {
+			return http.post('/datamanage/edb_collect/classify/move',params)
+		},
+
+		/**
+		 * 收藏指标
+		 * @param {*} params ClassifyId EdbInfoId
+		 * @returns 
+		 */
+		edbCollect: params => {
+			return http.post('/datamanage/edb_collect/collect',params)
+		},
+		
+		/**
+		 * 取消收藏指标
+		 * @param {*} params ClassifyId EdbInfoId
+		 * @returns 
+		 */
+		edbCollectCancel: params => {
+			return http.post('/datamanage/edb_collect/cancel_collect',params)
+		},
+
+		/**
+		 * 收藏列表
+		 * @param {*} params PageSize CurrentIndex ClassifyId Keyword
+		 * @returns 
+		 */
+		getCollectEdb: params => {
+			return http.get('/datamanage/edb_collect/list',params)
+		},
+}
+
 export {
 	dataBaseInterface,
 	mychartInterface,
-	chartFrameInterface
+	chartFrameInterface,
+	edbCollectInterface
 }

+ 6 - 5
src/components/antvVueComponents/tooltipCom.vue

@@ -103,12 +103,13 @@ export default {
       this.show=false
     },
     nodeClick(){
-      if(this.params.stopNodeClick) return 
+      if(this.params.stopNodeClick) return
       //EdbInfoType 1:跳预测指标详情 0:跳指标库详情
-      const { ClassifyId, UniqueCode, EdbInfoId, EdbInfoType } = this.data.routeQuery
-      let { href } =
-      this.$router.resolve({ path: EdbInfoType === 1 ? '/predictEdb' : '/database', query: { code: UniqueCode, id:
-      EdbInfoId, classifyId: ClassifyId } });
+      const { ClassifyId, UniqueCode, EdbInfoId, EdbInfoType,EdbType,HaveOperaAuth } = this.data.routeQuery
+      if(!HaveOperaAuth) return this.$message.warning('暂无指标权限')
+
+      let { href } = this.$router.resolve({ path: EdbInfoType === 1 ? '/predictEdb' : (EdbType===1?'/edbBasicbase':'/database'), 
+        query: { code: UniqueCode, id:EdbInfoId, classifyId: ClassifyId } });
       window.open(href, '_blank');
     }
   },

+ 9 - 0
src/routes/modules/chartRoutes.js

@@ -61,6 +61,15 @@ export default [
 					name_en:'Indics'
 				},
 			},
+			{
+				path: 'edbBasicbase',
+				component: () => import('@/views/dataEntry_manage/databaseList.vue'),
+				name: '指标库',
+				hidden: false,
+				meta:{
+					name_en:'Indics'
+				},
+			},
 			{
 				path: 'codecount',
 				component: () => import('@/views/dataEntry_manage/codecount/index.vue'),

+ 8 - 0
src/utils/buttonConfig.js

@@ -363,6 +363,14 @@ export const edbDataPermission = {
     edbData_checkRelatedEdb:'edbData:checkRelatedEdb',//查看关联指标
     edbData_checkCalcChart:'edbData:checkCalcChart',//查看计算指标
     edbData_enableOrDisable:'edbData:enableOrDisable',//启用/停用
+
+
+    /* 拆分 数据查看特有权限 */
+    edbData_edbCollect_collect:'edbData:edbCollect:collect',//收藏/移出
+    edbBaseData_view:'edbBaseData:view',//查看`
+    edbData_edbCollectClassify_save:'edbData:edbCollectClassify:save',//收藏分类编辑
+    edbData_edbCollectClassify_remove:'edbData:edbCollectClassify:remove',//收藏分类删除
+    edbData_edbCollectClassify_move:'edbData:edbCollectClassify:move',//收藏分类移动
 }
 /*
  * ---------------------------------------------------------------------------ETA预测指标------------------------------------------------

+ 1 - 1
src/views/chartRelevance_manage/components/saveEdbToBaseDia.vue

@@ -148,7 +148,7 @@ export default {
 				if(res.Ret !== 200) return
 				//this.filterNodes(res.Data.AllNodes,1);
       }else {
-				res = await dataBaseInterface.menuListV3()
+				res = await dataBaseInterface.menuListV3({ClassifyType:2})
 				if(res.Ret !== 200) return
 				//this.filterNodes(res.Data.AllNodes,2);
 			}

+ 2 - 2
src/views/chartRelevance_manage/crossVarietyAnalysis/components/edbTableSection.vue

@@ -189,8 +189,8 @@ export default {
     },
 
     /* 查看数据 跳转指标库展开具体指标 */
-    viewTarget({ UniqueCode,EdbInfoId,EdbInfoCategoryType,ClassifyId }) {
-      let path = EdbInfoCategoryType ? '/predictEdb' : '/database';
+    viewTarget({ UniqueCode,EdbInfoId,EdbInfoCategoryType,ClassifyId,EdbType }) {
+      let path = EdbInfoCategoryType ? '/predictEdb' : (EdbType===1?'/edbBasicbase':'/database');
       let {href} = this.$router.resolve({path, query: {
         code: UniqueCode,
         id: EdbInfoId,

+ 1 - 1
src/views/chartRelevance_manage/relevance/components/multipleIndForm.vue

@@ -337,7 +337,7 @@ export default {
         },
         async getClassifyOpt(){
             const res= this.factorData.EdbInfoType===0
-                        ?await dataBaseInterface.menuListV3()
+                        ?await dataBaseInterface.menuListV3({ClassifyType:2})
                         :await preDictEdbInterface.classifyListV2()
             if (res.Ret !== 200) return
 

+ 1 - 1
src/views/dataEntry_manage/adjustdata/adjustData.vue

@@ -357,7 +357,7 @@ export default {
 
     /* 获取目录结构 */
 		getMenu() {
-			dataBaseInterface.menuListV3().then((res) => {
+			dataBaseInterface.menuListV3({ClassifyType:2}).then((res) => {
 				if (res.Ret === 200) {
 					this.filterNodes(res.Data.AllNodes||[])
 					this.classifyOptions = res.Data.AllNodes || [];

+ 1 - 1
src/views/dataEntry_manage/codecount/index.vue

@@ -398,7 +398,7 @@ export default {
 
 		/* 获取目录结构 */
 		getMenu() {
-			dataBaseInterface.menuListV3().then((res) => {
+			dataBaseInterface.menuListV3({ClassifyType:2}).then((res) => {
 				if (res.Ret !== 200) return
 					this.filterNodes(res.Data.AllNodes||[]);
 					this.menuOptions = res.Data.AllNodes || [];

+ 112 - 0
src/views/dataEntry_manage/databaseComponents/addCollectClassifyDia.vue

@@ -0,0 +1,112 @@
+<template>
+  <el-dialog
+		:visible.sync="show"
+		:close-on-click-modal="false"
+		:modal-append-to-body='false'
+    :title="form.classifyId?'编辑目录':'新增目录'"
+		@close="closeDia"
+		custom-class="edbCollect-classify-dialog"
+		center
+		width="650px"
+		v-dialogDrag
+  >
+    <el-form 
+        :model="classifyForm" 
+        :rules="formRules" 
+        ref="formRef" 
+        hide-required-asterisk
+        label-width="auto"
+    >
+        <!-- 目录名称 -->
+        <el-form-item prop="classifyName" label="目录名称">
+            <el-input 
+                type="text" 
+                v-model="classifyForm.classifyName" 
+                placeholder="请输入目录名称"
+                style="width:80%"
+            />
+        </el-form-item>
+    </el-form>
+
+    <div class="footer" style="margin-top: 20px;">
+        <el-button
+          @click="closeDia"
+        >{{ $t('Dialog.cancel_btn') }}</el-button>
+        <el-button
+          @click="saveClassifyHandle"
+        type="primary"
+        >{{ $t('Dialog.confirm_save_btn') }}</el-button>
+    </div>
+  </el-dialog>  
+</template>
+
+<script>
+import { edbCollectInterface } from '@/api/modules/chartApi'
+export default {
+  props: {
+    show: {
+      type: Boolean
+    },
+    form: {
+      type:Object
+    }
+  },
+  watch: {
+    show(newVal) {
+      if(!newVal) return 
+      this.classifyForm.classifyName = this.form.name;
+    }
+  },
+  data() {
+    return {
+      classifyForm: {
+        classifyName:""
+      },
+
+      formRules: {
+        classifyName: [{ required:true,message:'目录名称不能为空',trigger:'blur'}]
+      }
+    }
+  },
+  methods: {
+    closeDia() {
+      this.$refs.formRef.resetFields()
+      this.$emit('update:show',false)
+    },
+
+    async saveClassifyHandle() {
+      await this.$refs.formRef.validate()
+      
+      const res = this.form.classifyId
+        ? await edbCollectInterface.editCollectClassify({
+            ClassifyName: this.classifyForm.classifyName,
+            ClassifyId: this.form.classifyId
+          })
+        : await edbCollectInterface.addCollectClassify({
+            ClassifyName: this.classifyForm.classifyName,
+          })
+
+      if(res.Ret !== 200) return
+      this.$message.success(this.form.classifyId?'编辑成功':'新增成功');
+      this.closeDia()
+      this.$emit('confirm')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.edbCollect-classify-dialog {
+  .el-form {
+    padding: 0 40px;
+  }
+  .footer {
+    display: flex;
+    justify-content: center;
+    margin: 40px 0;
+    .el-button {
+      width: 130px;
+    }
+  }
+}
+</style>

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

@@ -400,7 +400,7 @@ export default {
 		async getMenu() {
 			const res = this.edbSource === 'predict'
 				? await preDictEdbInterface.classifyListV2()
-				: await dataBaseInterface.menuListV3()
+				: await dataBaseInterface.menuListV3({ClassifyType:2})
 				if (res.Ret !== 200) return
 				//this.edbSource !== 'predict' && this.filterNodes(res.Data.AllNodes);
 				// this.options = res.Data.AllNodes || [];

+ 1 - 1
src/views/dataEntry_manage/databaseComponents/batchComputedSave.vue

@@ -370,7 +370,7 @@ export default {
 		},
         // 获取指标分类
         async getClassifyOpt(){
-            const res=await dataBaseInterface.menuListV3()
+            const res=await dataBaseInterface.menuListV3({ClassifyType:2})
             if (res.Ret !== 200) return
             this.filterNodes(res.Data.AllNodes||[]);
 			this.classifyOpt = res.Data.AllNodes || [];

+ 1 - 1
src/views/dataEntry_manage/databaseComponents/batchComputedV2.vue

@@ -884,7 +884,7 @@ export default {
 		},
         // 获取指标分类
         async getClassifyOpt(){
-            const res=await dataBaseInterface.menuListV3()
+            const res=await dataBaseInterface.menuListV3({ClassifyType:2})
             if (res.Ret !== 200) return
             this.filterNodes(res.Data.AllNodes||[]);
 			this.classifyOpt = res.Data.AllNodes || [];

+ 1 - 0
src/views/dataEntry_manage/databaseComponents/chartTrendRender.vue

@@ -227,6 +227,7 @@ export default {
 		
 		getDataByPath() {
 			const apiMap = {
+				'/edbBasicbase': this.getEdbData,
 				'/database': this.getEdbData,
 				'/analyseVariety': this.getPlantEdbData
 			}

+ 69 - 0
src/views/dataEntry_manage/databaseComponents/collectEdbMenu.vue

@@ -0,0 +1,69 @@
+<template>
+    <el-tree
+        ref="catalogTree"
+        class="catalog-tree other-tree"
+        empty-text="暂无图库"
+        :data="data"
+        node-key="UniqueCode"
+        :expand-on-click-node="false"
+        @current-change="(data,node)=>{$parent.nodeChange(data,node)}"
+        >
+        <div class="custom-tree-node" slot-scope="{ data }">
+            <span class="tree-label">{{ data.ClassifyName }}</span>
+            <div class="right-item right-item-box" >
+                <img
+                  src="~@/assets/img/set_m/edit.png"
+                  alt=""
+                  style="width: 15px; height: 14px; margin-right: 8px"
+                  @click.stop="$parent.handleOpenCollectClassify(data)"
+                  v-if="!data.EdbCode&&$parent.isEdbBtnShow('edbData_edbCollectClassify_save')"
+                />
+
+                <img
+                  src="~@/assets/img/set_m/del_icon.png"
+                  alt=""
+                  style="width: 14px; height: 14px;"
+                  @click.stop="removeCollectNode(data)"
+                  v-if="!data.EdbCode&&$parent.isEdbBtnShow('edbData_edbCollectClassify_remove')"
+                />
+            </div>
+        </div>
+    </el-tree>
+</template>
+
+<script>
+import { edbCollectInterface } from '@/api/modules/chartApi'
+export default {
+  props: {
+    data: {
+      type: Object
+    },
+  },
+  data() {
+    return {
+    }
+  },
+  methods: {
+    removeCollectNode({ClassifyId}) {
+      this.$confirm('若删除该目录,则目录下收藏的所有指标将被清除, 是否继续?',
+          '提示',
+          { type: 'warning' }
+      ).then(async () => {
+        const res = await edbCollectInterface.delCollectClassify({
+          ClassifyId
+        })
+
+        if(res.Ret !== 200) return
+        this.$message.success('删除成功')
+
+        this.$emit('change')
+      })
+      
+    }
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 1 - 1
src/views/dataEntry_manage/databaseComponents/computedDialog.vue

@@ -522,7 +522,7 @@ export default {
 		async getMenu() {
 			const res = this.edbSource === 'predict'
 				? await preDictEdbInterface.classifyListV2()
-				: await dataBaseInterface.menuListV3()
+				: await dataBaseInterface.menuListV3({ClassifyType:2})
 				if (res.Ret !== 200) return
 				
 				this.filterNodes(res.Data.AllNodes||[]);

+ 1 - 1
src/views/dataEntry_manage/databaseComponents/diffusionIndexDia.vue

@@ -347,7 +347,7 @@ export default {
 		async getMenu() {
 			const res = this.isPredict
       ? await preDictEdbInterface.classifyListV2()
-      : await dataBaseInterface.menuListV3()
+      : await dataBaseInterface.menuListV3({ClassifyType:2})
 				if (res.Ret === 200) {
 					this.filterNodes(res.Data.AllNodes||[]);
 					this.options = res.Data.AllNodes || [];

+ 149 - 0
src/views/dataEntry_manage/databaseComponents/edbCollectDia.vue

@@ -0,0 +1,149 @@
+<template>
+  <div class="edbCollectDia-container">
+    <el-dialog
+      :visible.sync="show"
+      :close-on-click-modal="false"
+      :modal-append-to-body="false"
+      title="收藏"
+      @close="cancelHandle"
+      custom-class="dialog"
+      center
+      width="560px"
+      v-dialogDrag
+    >
+      <div class="dialog-min">
+        <div class="classify-cont">
+          <el-tag
+            v-for="item in classifyArr"
+            :class="['classify-tag',{'act': checkedClassifys.includes(item.ClassifyId)}]"
+            :key="item.ClassifyId"
+            type="info"
+            effect="plain"
+            @click="chooseClassify(item.ClassifyId)"
+          >
+            {{ item.ClassifyName }}
+          </el-tag>
+        </div>
+        <span class="add-cont" @click="$parent.handleOpenCollectClassify">
+          <i class="el-icon-circle-plus-outline" />新增
+        </span>
+      </div>
+      <div class="dia-bot">
+        <el-button type="primary" style="margin-right: 20px" @click="saveHandle"
+          >{{$t('Dialog.confirm_save_btn')}}</el-button
+        >
+        <el-button type="primary" plain @click="cancelHandle">{{$t('Dialog.cancel_btn')}}</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { edbCollectInterface } from '@/api/modules/chartApi'
+export default {
+	name:'',
+	props: {
+		show: {
+			type: Boolean,
+		},
+    edbId: {
+      type: Number,
+    },
+    add_ids: {
+      type: Array,
+      default: []
+    }
+	},
+	watch: {
+		show(newval) {
+			if(newval) {
+				this.getClassify();
+			}
+		}
+	},
+	data () {
+		return {
+			classifyArr:[],//分类列表
+      checkedClassifys: [],
+			addRules: {
+				name:[
+					{ required: true, message: /* '分类名称不能为空' */this.$t('Chart.Vailds.classify_msg'), trigger: 'blur' },
+				],
+			}
+		};
+	},
+	methods: {
+		/* 获取分类列表 */
+		getClassify() {
+			edbCollectInterface.getEdbCollectClassifyOne()
+				.then(res => {
+					if(res.Ret !== 200) return
+					this.classifyArr = res.Data || [];
+          this.checkedClassifys = _.cloneDeep(this.add_ids);
+				})
+		},
+
+    chooseClassify(id) {
+      if(this.checkedClassifys.includes(id)) {
+        let index = this.checkedClassifys.indexOf(id);
+        this.checkedClassifys.splice(index, 1);
+      }else {
+        this.checkedClassifys.push(id);
+      }
+    },
+
+    /* 加入收藏 */
+    saveHandle() {
+      if(!this.checkedClassifys.length) return this.$message.warning('请选择分类');
+      edbCollectInterface.edbCollect({
+        EdbInfoId: this.edbId,
+        ClassifyIdList: this.checkedClassifys
+      }).then(res => {
+        if(res.Ret !== 200) return 
+        this.$message.success('收藏成功')
+        this.$emit('success',this.checkedClassifys)
+        this.cancelHandle()
+      })
+    },
+    
+		cancelHandle() {
+      this.checkedClassifys = [];
+			this.$emit('update:show')
+		}
+	},
+}
+</script>
+<style lang="scss">
+.edbCollectDia-container {
+  .el-dialog--center .el-dialog__body {
+    padding: 25px 25px 30px !important;
+  }
+  .dialog-min {
+    .classify-cont {
+      padding: 30px 10px;
+      border: 1px dashed #999;
+      display: flex;
+      flex-wrap: wrap;
+      margin-bottom: 20px;
+      .classify-tag {
+        margin: 5px;
+        padding: 0 20px;
+        cursor: pointer;
+        &.act {
+          background: #409eff;
+          color: #fff;
+        }
+      }
+    }
+    .add-cont {
+      color: #409eff;
+      cursor: pointer;
+    }
+  }
+  .dia-bot {
+    margin: 52px 0 30px;
+    display: flex;
+    justify-content: center;
+  }
+}
+</style>

+ 1 - 1
src/views/dataEntry_manage/databaseComponents/fittingResidueDia.vue

@@ -390,7 +390,7 @@ export default {
 		async getMenu() {
 			const res=this.isPredict
 				?await preDictEdbInterface.classifyListV2()
-				:await dataBaseInterface.menuListV3()
+				:await dataBaseInterface.menuListV3({ClassifyType:2})
 
 				if (res.Ret === 200) {
 					

+ 1 - 1
src/views/dataEntry_manage/databaseComponents/jointTargetDia.vue

@@ -549,7 +549,7 @@ export default {
 
 		/* 获取目录结构 */
 		async getMenu() {
-			const res=this.isPredict?await preDictEdbInterface.classifyListV2():await dataBaseInterface.menuListV3()
+			const res=this.isPredict?await preDictEdbInterface.classifyListV2():await dataBaseInterface.menuListV3({ClassifyType:2})
 			// dataBaseInterface.menuList().then(res => {
 				if(res.Ret === 200) {
 					if(!this.isPredict){

+ 5 - 1
src/views/dataEntry_manage/databaseComponents/openDialog.vue

@@ -99,6 +99,9 @@ export default {
 		},
 		formData: {
 			type: Object,//{parentArr父级数据,isEDB:true 是否为指标}
+		},
+		isBasicBase: {
+			type: Boolean
 		}
 	},
 	watch: {
@@ -175,7 +178,8 @@ export default {
           res = await dataBaseInterface.nodeAdd({
 						ClassifyName: this.formData.levelVal||'',
 						ParentId:this.formData.parent_id || 0,
-						Level: this.formData.level
+						Level: this.formData.level,
+						ClassifyType: this.isBasicBase ? 0 : 2
 					})
         }
 				

+ 1 - 1
src/views/dataEntry_manage/databaseComponents/operationDialog.vue

@@ -597,7 +597,7 @@ export default {
 
 		/* 获取目录结构 */
 		getMenu() {
-			dataBaseInterface.menuListV3().then((res) => {
+			dataBaseInterface.menuListV3({ClassifyType:2}).then((res) => {
 				if (res.Ret === 200) {
 					this.filterNodes(res.Data.AllNodes||[]);
 					this.options = res.Data.AllNodes || [];

+ 1 - 1
src/views/dataEntry_manage/databaseComponents/smoothEdbDialog.vue

@@ -476,7 +476,7 @@ export default {
         async getMenu() {
             const res = this.isPredict
                 ? await preDictEdbInterface.classifyListV2()
-                : await dataBaseInterface.menuListV3()
+                : await dataBaseInterface.menuListV3({ClassifyType:2})
             if(res.Ret!==200) return 
             // this.catalogArr = res.Data.AllNodes || [];
             if(!this.isPredict){

+ 323 - 193
src/views/dataEntry_manage/databaseList.vue

@@ -2,23 +2,23 @@
 	<div class="database_container">
 		<div class="database_top">
 			<div class="top-left">
-				<el-button v-permission="permissionBtn.edbDataPermission.edbData_addEdb"
-					type="primary" @click="addHandler"><!-- 添加指标 -->{{$t('EtaBasePage.add_edb_btn')}}</el-button>
-				<el-button v-permission="permissionBtn.edbDataPermission.edbData_calcuEdb"
-					type="primary" @click="addComputedHandler"><!-- 计算指标 -->{{$t('EtaBasePage.calculation_edb_btn')}}</el-button>
-				<el-button v-permission="permissionBtn.edbDataPermission.edbData_replaceEdb"
-					type="primary" @click="replaceEdbHandler"><!-- 替换指标 -->{{$t('EtaBasePage.replace_edb_btn')}}</el-button>
-				<el-button v-permission="permissionBtn.edbDataPermission.edbData_codeRun"
-					type="primary" @click="$router.push({path: '/codecount'})"><!-- 代码运算 -->{{$t('EtaBasePage.algorithm_btn')}}</el-button>
-				<el-button v-permission="permissionBtn.edbDataPermission.edbData_dataAdjust"
-					type="primary" @click="$router.push({path: '/adjustdata'})"><!-- 数据调整 -->{{$t('EtaBasePage.adjustment_btn')}}</el-button>
-				<!-- <el-button v-permission="permissionBtn.edbDataPermission.edbData_batchUpdate"
-					type="primary" plain @click="updateHandler">一键刷新</el-button> -->
+				<template v-if="!isBasicBase">
+					<el-button v-permission="permissionBtn.edbDataPermission.edbData_addEdb"
+						type="primary" @click="addHandler"><!-- 添加指标 -->{{$t('EtaBasePage.add_edb_btn')}}</el-button>
+					<el-button v-permission="permissionBtn.edbDataPermission.edbData_calcuEdb"
+						type="primary" @click="addComputedHandler"><!-- 计算指标 -->{{$t('EtaBasePage.calculation_edb_btn')}}</el-button>
+					<el-button v-permission="permissionBtn.edbDataPermission.edbData_replaceEdb"
+						type="primary" @click="replaceEdbHandler"><!-- 替换指标 -->{{$t('EtaBasePage.replace_edb_btn')}}</el-button>
+					<el-button v-permission="permissionBtn.edbDataPermission.edbData_codeRun"
+						type="primary" @click="$router.push({path: '/codecount'})"><!-- 代码运算 -->{{$t('EtaBasePage.algorithm_btn')}}</el-button>
+					<el-button v-permission="permissionBtn.edbDataPermission.edbData_dataAdjust"
+						type="primary" @click="$router.push({path: '/adjustdata'})"><!-- 数据调整 -->{{$t('EtaBasePage.adjustment_btn')}}</el-button>
+				</template>
 			</div>
 			<div class="top-right">
 
-
 				<el-select
+					v-if="classifyShowType==='public'"
 					v-model="search_txt"
 					v-loadMore="searchLoad"
 					ref="searchRef"
@@ -49,9 +49,20 @@
 						</div>
 					</el-option>
 				</el-select>
+
+				<el-input
+					v-else
+					v-model="searchCollectWord" 
+					:placeholder="$t('Edb.InputHolderAll.input_name_orid')"
+					style="width: 260px;"
+					@change="getEdbChartList"
+					clearable
+				>
+					<i slot="prefix" class="el-input__icon el-icon-search"/>
+				</el-input>
 			</div>
 		</div>
-		<div class="database-label">
+		<!-- <div class="database-label">
 			<edb-label-list 
 				:currentLang="currentLang"
 				:labelList="labelList"
@@ -60,7 +71,7 @@
 				@deleteLabel="deleteLabel"
 				@moveLabel="({oldIndex,newIndex})=>{labelList[oldIndex] = labelList.splice(newIndex, 1, labelList[oldIndex])[0];}"
 				/>
-		</div>
+		</div> -->
 		<div class="database_main box" id="box" v-if="showData">
 			<!-- 展开收起目录按钮 -->
 			<span
@@ -70,136 +81,153 @@
 			>
 				<i :class="{'el-icon-d-arrow-left':isMainLeftShow,'el-icon-d-arrow-right':!isMainLeftShow}"></i>
 			</span>
-			<!-- <target-tree /> -->
+			
 			<div class="main-left left" id="left" v-show="isMainLeftShow">
+
 				<div class="tree-cont">
-					<div style="padding-bottom:20px;padding-right:20px;display:flex;justify-content:space-between">
+					<el-radio-group 
+						v-model="classifyShowType" 
+						@input="handleChangeClassifyType" 
+						v-if="isBasicBase"
+					>
+						<el-radio-button label="public">
+							公共指标库
+						</el-radio-button>
+						<el-radio-button label="own">
+							个人收藏
+						</el-radio-button>
+					</el-radio-group>
+
+					<div style="padding:20px 0;padding-right:20px;display:flex;justify-content:space-between">
 						<span><!-- 目录 -->{{$t('EtaBasePage.tab_menu')}}</span>
-						<el-checkbox 
+						<!-- <el-checkbox 
 							v-model="IsOnlyMe"
 							@change="onlyMeHandler"
-						><!-- 只看我的 -->{{$t('Edb.only_see_mine')}}</el-checkbox>
+						>{{$t('Edb.only_see_mine')}}</el-checkbox> -->
 					</div>
 					<div class="target_tree">
-					<el-tree
-						ref="menuTree"
-						:data="treeData"
-						node-key="UniqueCode"
-						:props="defaultProp"
-						:allow-drag="canDragHandle"
-						:allow-drop="canDropHandle"
-						:current-node-key="select_node"
-						:default-expanded-keys="defaultShowNodes"
-						:draggable="isEdbBtnShow('moveCatalog')"
-						:expand-on-click-node="false"
-						check-strictly
-						empty-text="暂无目录"
-						lazy
-						:load="getLazyTreeData"
-						@node-expand="handleNodeExpand"
-						@node-collapse="handleNodeCollapse"
-						@current-change="nodeChange"
-						@node-drop="dropOverHandle"
-						@node-drag-end="dropMouseLeave"
-						@node-drag-leave="dropMouseLeave"
-						@node-drag-enter="dropMouseOver"
-					>
-						<span
-							class="custom-tree-node"
-							slot-scope="{ node, data }"
+						<!-- 指标目录 -->
+						<el-tree
+							v-if="classifyShowType==='public'"
+							ref="menuTree"
+							:data="treeData"
+							node-key="UniqueCode"
+							:props="defaultProp"
+							:allow-drag="canDragHandle"
+							:allow-drop="canDropHandle"
+							:current-node-key="select_node"
+							:default-expanded-keys="defaultShowNodes"
+							:draggable="isEdbBtnShow('moveCatalog')"
+							:expand-on-click-node="false"
+							check-strictly
+							empty-text="暂无目录"
+							lazy
+							:load="getLazyTreeData"
+							@node-expand="handleNodeExpand"
+							@node-collapse="handleNodeCollapse"
+							@current-change="nodeChange"
+							@node-drop="dropOverHandle"
+							@node-drag-end="dropMouseLeave"
+							@node-drag-leave="dropMouseLeave"
+							@node-drag-enter="dropMouseOver"
 						>
-							<el-input
-								ref="editVal"
-								style="width: 90px"
-								placeholder="请输入值"
-								class="label-input"
-								v-model="new_label"
-								v-if="data.isEdit&&isEdbBtnShow('editCatalog')"
-								@blur="changeValue(node, data)"
-							/>
-							<span 
-								@dblclick.stop="editNodeLabel(node, data)" 
-								v-else 
-								class="text_oneLine node_label" 
-								:style="`width:${(select_node === data.UniqueCode && node.Nodewidth) || ''}`"
-								:id="`node${data.UniqueCode}`"
-							>
-								<img 
-									:src="$icons.lock_ico2" 
-									width="18" 
-									height="18" 
-									style="vertical-align:middle" 
-									v-if="!data.HaveOperaAuth&&data.EdbInfoId"
-								/>
-								<span>{{ currentLang==='en' ? (data.ClassifyNameEn||data.ClassifyName) : data.ClassifyName }}</span>
-							</span>
 							<span
-								style="display: flex; align-items: center"
-								v-if="select_node===data.UniqueCode&&data.HaveOperaAuth"
+								class="custom-tree-node"
+								slot-scope="{ node, data }"
 							>
-								<!-- <img
-									src="~@/assets/img/data_m/move_ico.png"
-									alt=""
-									style="width: 14px; height: 14px; margin-right: 8px"
-									v-if="data.Button.MoveButton&&isEdbBtnShow('moveCatalog')"
-								/> -->
-								<!-- 添加子项 -->
-								<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&&isEdbBtnShow('editCatalog')&&node.level<6"
+								<el-input
+									ref="editVal"
+									style="width: 90px"
+									placeholder="请输入值"
+									class="label-input"
+									v-model="new_label"
+									v-if="data.isEdit&&isEdbBtnShow('editCatalog')"
+									@blur="changeValue(node, data)"
 								/>
-								<!-- 编辑节点 如果是分类,判断data.Button.OpButton不变;如果是指标,不显示(ETA1.0.3) -->
-								<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.EdbCode&&(data.Button.OpButton)&&isEdbBtnShow('editCatalog')"
-								/>
-								<!-- 删除节点 如果是分类,判断data.Button.DeleteButton不变;如果是指标,不显示(ETA1.0.3) -->
-								<img
-									slot="reference"
-									src="~@/assets/img/set_m/del.png"
-									alt=""
-									style="width: 14px; height: 14px;"
-									@click.stop="removeNode(node,data)"
-									v-if="!data.EdbCode&&(data.Button.DeleteButton)&&isEdbBtnShow('deleteCatalog')"
-								/>
-								<!-- 查看计算指标 -->
-								<!-- <i class="el-icon-view" 
-									v-if="data.EdbType===2&&![58,59,67,68,74].includes(data.Source)&&isEdbBtnShow('checkCalcChart')" 
-									@click.stop="viewNode(node,data)"></i> -->
-								<!-- 查看关联图表 -->
-								<!-- <img 
-									v-if="data.Button.ShowChartRelation&&isEdbBtnShow('checkRelatedChart')" 
-									@click.stop="showAssociateChart=true,showAssociateComputeData=false"
-									src="~@/assets/img/icons/associate_chart.png" 
-									style="width: 14px; height: 14px;margin-left: 8px"
-									alt=""
-								/> -->
-								<!-- 查看关联指标 -->
-								<!-- <img 
-									v-if="data.Button.ShowEdbRelation&&isEdbBtnShow('checkRelatedEdb')" 
-									@click.stop="showAssociateComputeData=true,showAssociateChart=false"
-									src="~@/assets/img/icons/associate_data.png" 
-									style="width: 14px; height: 14px;margin-left: 8px"
-									alt=""
-								/> -->
+								<span 
+									@dblclick.stop="editNodeLabel(node, data)" 
+									v-else 
+									class="text_oneLine node_label" 
+									:style="`width:${(select_node === data.UniqueCode && node.Nodewidth) || ''}`"
+									:id="`node${data.UniqueCode}`"
+								>
+									<img 
+										:src="$icons.lock_ico2" 
+										width="18" 
+										height="18" 
+										style="vertical-align:middle" 
+										v-if="!data.HaveOperaAuth&&data.EdbInfoId"
+									/>
+									<span>{{ currentLang==='en' ? (data.ClassifyNameEn||data.ClassifyName) : data.ClassifyName }}</span>
+								</span>
+								<span
+									style="display: flex; align-items: center"
+									v-if="select_node===data.UniqueCode&&data.HaveOperaAuth"
+								>
+									<!-- <img
+										src="~@/assets/img/data_m/move_ico.png"
+										alt=""
+										style="width: 14px; height: 14px; margin-right: 8px"
+										v-if="data.Button.MoveButton&&isEdbBtnShow('moveCatalog')"
+									/> -->
+									<!-- 添加子项 -->
+									<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&&isEdbBtnShow('editCatalog')&&node.level<6"
+									/>
+									<!-- 编辑节点 如果是分类,判断data.Button.OpButton不变;如果是指标,不显示(ETA1.0.3) -->
+									<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.EdbCode&&(data.Button.OpButton)&&isEdbBtnShow('editCatalog')"
+									/>
+									<!-- 删除节点 如果是分类,判断data.Button.DeleteButton不变;如果是指标,不显示(ETA1.0.3) -->
+									<img
+										slot="reference"
+										src="~@/assets/img/set_m/del_icon.png"
+										alt=""
+										style="width: 14px; height: 14px;"
+										@click.stop="removeNode(node,data)"
+										v-if="!data.EdbCode&&(data.Button.DeleteButton)&&isEdbBtnShow('deleteCatalog')"
+									/>
+								
+								</span>
 							</span>
-						</span>
-					</el-tree>
-					</div>
-					<div class="noDepart" @click="addLevelOneHandle" v-if="CanOpClassify&&isEdbBtnShow('editCatalog')">
-						<img
-							src="~@/assets/img/set_m/add_ico.png"
-							alt=""
-							style="width: 16px; height: 16px; margin-right: 10px"
+						</el-tree>
+
+						<!-- 收藏目录 -->
+						<collectEdbMenu
+							v-else
+							:data="treeData"
+							@change="getTreeData"
 						/>
-						<span>{{$t('EtaBasePage.add_first_menu_btn')}}</span>
 					</div>
+
+					<template>
+						<!-- 新增分类 -->
+						<div class="noDepart" @click="addLevelOneHandle" v-if="classifyShowType==='public'&&CanOpClassify&&isEdbBtnShow('editCatalog')">
+							<img
+								src="~@/assets/img/set_m/add_ico.png"
+								alt=""
+								style="width: 16px; height: 16px; margin-right: 10px"
+							/>
+							<span>{{$t('EtaBasePage.add_first_menu_btn')}}</span>
+						</div>
+						<!-- 新增收藏分类 -->
+						<div class="noDepart" @click="handleOpenCollectClassify" v-if="classifyShowType==='own'&&isEdbBtnShow('edbData_edbCollectClassify_save')">
+							<img
+								src="~@/assets/img/set_m/add_ico.png"
+								alt=""
+								style="width: 16px; height: 16px; margin-right: 10px"
+							/>
+							<span>{{$t('EtaBasePage.add_first_menu_btn')}}</span>
+						</div>
+					</template>
 				</div>
 				<span class="move-btn resize" v-drag id="resize" @mousemove="dynamicNode&&resetNodeStyle(dynamicNode)">
 				</span>
@@ -228,15 +256,18 @@
 								<span v-show="currentLang=='zh'">{{ item.EdbName }}</span> 
 								<span v-show="currentLang=='en'">{{ item.EdbNameEn || item.EdbName }}</span>
 							</div>
+							<!-- !item.HaveOperaAuth ? $icons.lock_big : -->
 							<div class="image" @click="detailShowHandle(item)"
-								:style="{background: `no-repeat top/cover url('${!item.HaveOperaAuth ? $icons.lock_big : item.ChartImage}')`}">
+								:style="{background: `no-repeat top/cover url('${ item.ChartImage}')`}">
 							</div>
 							<div class="info">
-								{{$t('EtaBasePage.time_show')}}:{{item.CreateTime.substring(0,10)}}
+								{{$t('EtaBasePage.time_show')}}:{{item.CreateTime?item.CreateTime.substring(0,10):''}}
 								<!-- wind和钢联化工的指标、计算指标显示 启用/停用-->
 								<span v-if="([2,34].includes(item.Source) || item.EdbType==2) && isEdbBtnShow('enableOrDisable')&&item.IsSupplierStop!=1" 
 								class="enable-toggle-btn" :style="{'color': item.NoUpdate==1?'#0052D9':'#D54941'}"
 								@click="toggleEdbRefreshStatus(item)">{{item.NoUpdate==1?$t('SystemManage.DataRefresh.enable'):$t('SystemManage.DataRefresh.disable') }}</span>
+
+								<span class="deletesty" v-if="classifyShowType==='own'&&isEdbBtnShow('edbData_edbCollect_collect')" @click="handleRemoveCollect(item)">移出</span>
 							</div>
 							<img src="~@/assets/img/icons/edb-stopping.png" class="stop-mark" v-if="([2,34].includes(item.Source) || item.EdbType==2) && ( item.IsSupplierStop==1 || (item.IsSupplierStop==0&&item.NoUpdate==1))" />
 						</div>
@@ -247,6 +278,7 @@
 					<tableNoData :text="$t('Table.no_edb_msg')"/>
 				</div>
 			</div>
+
 			<!-- 指标详情 -->
 			<div class="main-right right detail-wrap" id="right" v-show="isShowDetail">
 				<div class="detail" v-if="EdbData.HaveOperaAuth">
@@ -258,10 +290,18 @@
 							</el-tab-pane>
 						</el-tabs>
 						<div class="edb-tool-icon edb-tool" style="align-items: center;">
-							<el-button v-if="([2,34].includes(EdbData.Source) || EdbData.EdbType==2) && isEdbBtnShow('enableOrDisable')&&EdbData.IsSupplierStop!=1" 
-								type="text" :style="{'color': EdbData.NoUpdate==1?'#0052D9':'#D54941'}"
+							<el-button 
+								v-if="([2,34].includes(EdbData.Source) || EdbData.EdbType==2) && isEdbBtnShow('enableOrDisable')&&EdbData.IsSupplierStop!=1" 
+								type="text" 
+								:style="{'color': EdbData.NoUpdate==1?'#0052D9':'#D54941'}"
 								@click="toggleEdbRefreshStatus(EdbData,'detail')" 
 							>{{EdbData.NoUpdate==1?$t('SystemManage.DataRefresh.enable'):$t('SystemManage.DataRefresh.disable') }}<!-- 启用/停用 --></el-button>
+
+							<el-button 
+								v-if="isBasicBase&&isEdbBtnShow('edbData_edbCollect_collect')"
+								type="text"
+								@click="classifyShowType==='own'?handleRemoveCollect():handleCollectEdb()" 
+							>{{classifyShowType==='own'?'移出':'收藏'}}</el-button>
 							<el-button 
 								v-if="isEdbBtnShow('update')"
 								type="text" 
@@ -403,14 +443,14 @@
 				
 			</div>
 		</div>
-		<!-- 输入英文指标弹窗 -->
-		<!-- <set-en-name-dia :isOpenDialog="setEnName" @cancel="setEnName=false" 
-		:formData="formItemArray" @updateEnName="updateEnName" cType="ebd" /> -->
+
+
 
 		<!-- 目录弹窗 -->
 		<openDialog 
 			:isOpenDialog="isOpenDialog"
 			:title="dialog_title"
+			:isBasicBase="isBasicBase"
 			:formData="dialogForm"
 			@closeDia="isOpenDialog=false"
 			@sucessCallback="sucessCallback"
@@ -551,11 +591,7 @@
 			@success="updateNewest"
 		/>
 
-		 <!-- 指标历史记录 -->
-    <!-- <edbHistoryDialog
-      :isOpenDialog.sync="isLookHistory"
-      :edbId="lookEdbId"
-    /> -->
+
 		<!-- 指数修匀弹窗 -->
 		<SmoothEdbDialog 
 			:is-open-smooth="computed_type==='alpha'"
@@ -589,11 +625,27 @@
 		<!-- 指标已经被引用 -->
 		<edbHasUsedDia :show.sync="edbHasUsedDiaShow" :dataList="hasUsedList"/>
 
+		<!-- 指标收藏弹窗 -->
+		<edbCollectDia
+			ref="edbCollectRef"
+			:show.sync="isOpenEdbCollectDia"
+			:edbId="selected_edbid"
+			:add_ids="EdbData?EdbData.CollectClassifyIdList:[]"
+			@success="arr=>{tableData[0].CollectClassifyIdList = arr}"
+		/>
+
+		<!-- 添加收藏分类弹窗 -->
+		<addCollectClassifyDia
+			:show.sync="isOpenCollectClassifyDia"
+			:form="collectClassifyForm"
+			@confirm="getTreeData();isOpenEdbCollectDia&&$refs.edbCollectRef.getClassify()"
+		/>
 	</div>
 </template>
 
 <script>
 import { dataBaseInterface } from '@/api/api.js';
+import { edbCollectInterface } from '@/api/modules/chartApi';
 import { getComputedTypes,getBatchComputedTypes,getFormulaTip } from './databaseComponents/util';
 
 import openDialog from './databaseComponents/openDialog';
@@ -601,7 +653,7 @@ import addTargetDiaBase from './databaseComponents/addTargetDiaBase';
 import completeTargetDia from './databaseComponents/completeTargetDia'
 import computedDialog from './databaseComponents/computedDialog';
 import operationDialog from './databaseComponents/operationDialog';
-import createChart from './databaseComponents/createChart';
+// import createChart from './databaseComponents/createChart';
 import updateDialog from './databaseComponents/updateDialog';
 import replaceDialog from './databaseComponents/replaceDialog';
 import jointTargetDia from './databaseComponents/jointTargetDia';
@@ -620,6 +672,9 @@ import SmoothEdbDialog from './databaseComponents/smoothEdbDialog.vue';
 import batchComputedV2 from './databaseComponents/batchComputedV2.vue';
 import setLangInfoDia from './components/setLangInfo.vue'
 import edbHasUsedDia from './components/edbHasUsedDia.vue';
+import collectEdbMenu from './databaseComponents/collectEdbMenu.vue';
+import edbCollectDia from './databaseComponents/edbCollectDia.vue';
+import addCollectClassifyDia from './databaseComponents/addCollectClassifyDia.vue';
 export default {
 	name: '',
 	components: {
@@ -628,7 +683,7 @@ export default {
 		completeTargetDia,
 		computedDialog,
 		operationDialog,
-		createChart,
+		// createChart,
 		updateDialog,
 		replaceDialog,
 		jointTargetDia,
@@ -646,7 +701,10 @@ export default {
 		SmoothEdbDialog,
 		batchComputedV2,
 		setLangInfoDia,
-		edbHasUsedDia
+		edbHasUsedDia,
+		collectEdbMenu,
+		edbCollectDia,
+		addCollectClassifyDia
 	},
 	directives: {
 		drag(el, bindings,vnode) {
@@ -728,8 +786,7 @@ export default {
 			edb_source:0,//指标来源 显示计算按钮
 			calculateLoading: false,//计算指标刷新loading
 			refreshLoading: false,//基础指标刷新loading
-			/* 一键成图弹窗 */
-			isCreateChart: false,
+
 			/* 一键更新弹窗 */
 			isUpdate:false,
 			/* 替换指标弹窗 */
@@ -784,7 +841,16 @@ export default {
 			isLangInfoDia: false,
 
 			edbHasUsedDiaShow:false,
-			hasUsedList:[]
+			hasUsedList:[],
+
+			/* 目录分类 */
+			classifyShowType:'public',
+			searchCollectWord:'',
+			//指标收藏弹窗
+			isOpenEdbCollectDia: false,
+			//收藏分类弹窗
+			isOpenCollectClassifyDia: false,
+			collectClassifyForm: {}
 		};
 	},
 	watch: {
@@ -826,6 +892,11 @@ export default {
 		},
 	},
 	computed: {
+		/* 是否是数据查看库 */
+		isBasicBase() {
+			return this.$route.path === '/edbBasicbase'
+		},
+
 		/* 计算弹窗控制 */
 		computedShowTypes() {
 			return this.computed_source===1 ? getComputedTypes() : getBatchComputedTypes();
@@ -841,11 +912,7 @@ export default {
 				return role;
 			}
 		},
-		/* 登录角色id */
-		roleId() {
-			let id = parseInt(localStorage.getItem('AdminId'));
-			return id;
-		},
+
 		//指标详情,也就是tableData[0]
 		EdbData(){
 			return this.tableData[0]?this.tableData[0]:{Button:{},DataInsertConfig:{},DataList:[]}
@@ -964,30 +1031,49 @@ export default {
 				'checkRelatedEdb':edbDataPermission.edbData_checkRelatedEdb,//查看关联指标
 				'checkCalcChart':edbDataPermission.edbData_checkCalcChart,//查看计算指标
 				'enableOrDisable':edbDataPermission.edbData_enableOrDisable,//启用/停用
+
+				'edbData_edbCollect_collect': edbDataPermission.edbData_edbCollect_collect,//收藏移出
+				'edbData_edbCollectClassify_save': edbDataPermission.edbData_edbCollectClassify_save,//收藏分类编辑
+				'edbData_edbCollectClassify_remove': edbDataPermission.edbData_edbCollectClassify_remove,//收藏分类删除
+				'edbData_edbCollectClassify_move': edbDataPermission.edbData_edbCollectClassify_move,//收藏分类移动
+				'edbData_edbCollectClassify_remove': edbDataPermission.edbData_edbCollectClassify_remove,//收藏分类移动
 			}
 			return checkPermissionBtn(BtnMap[type])
 		},
 		/* 获取树分类数据 */
-		getTreeData(params) {
-			
-			dataBaseInterface.targetCatalog({IsOnlyMe:this.IsOnlyMe,ParentId:0}).then(res=>{
-				if(res.Ret===200){
-					const arr=res.Data.AllNodes || []
-					this.treeData=arr.map(item=>{
-						return {
-							...item,
-							// isLeaf:item.Children.length?false:true
-						}
+		async getTreeData(params) {
+			const res = this.classifyShowType==='own'
+				? await edbCollectInterface.getEdbCollectClassify({ParentId:0})
+				: await dataBaseInterface.targetCatalog({
+						IsOnlyMe:this.IsOnlyMe,
+						ParentId:0,
+						ClassifyType: this.isBasicBase ? 0 : 2
 					})
-					this.CanOpClassify = res.Data.CanOpClassify;
-					// this.currentLang = res.Data.Language === 'EN' ? 'en' : 'ch';
-					// this.setLangIntoStore()
+
+	
+					if(res.Ret!==200) return 
 					this.showData = true;
-					/* 处理树展开和选中图表 */
-					params && this.selectCurrentNode(params);
-					!params && this.select_node && this.$refs.menuTree.setCurrentKey(this.select_node);
-				}
-			})
+
+					if(this.classifyShowType==='public') {
+						const arr=res.Data.AllNodes || []
+						this.treeData=arr.map(item=>{
+							return {
+								...item,
+								// isLeaf:item.Children.length?false:true
+							}
+						})
+						
+						this.CanOpClassify = res.Data.CanOpClassify;
+
+						/* 处理树展开和选中图表 */
+						params && this.selectCurrentNode(params);
+						!params && this.select_node && this.$refs.menuTree.setCurrentKey(this.select_node);
+					}else {
+						this.treeData = res.Data||[]
+						this.select_classify =
+							this.select_classify ||
+							(this.treeData.length ? this.treeData[0].ClassifyId:0);
+					}
 		},
 		/* 获取最新的指标 默认展示 */
 		getNewTargetList: _.throttle(function() {
@@ -1029,7 +1115,7 @@ export default {
 						// 展开目录
 						this.defaultShowNodes=classify_arr.map(item=>item.UniqueCode)
 						//设置tree高亮
-						this.$nextTick(()=>{
+						this.$refs.menuTree&&this.$nextTick(()=>{
 							setTimeout(() => {
 								this.$refs.menuTree.setCurrentKey(UniqueCode);
 							}, 1000);
@@ -1054,7 +1140,7 @@ export default {
 							this.$refs.edb_detail_data.$refs.valueUl.scrollTop=0
 						}
 					}
-					this.$nextTick(()=>{
+					this.$refs.menuTree&&this.$nextTick(()=>{
 						const _node = this.$refs.menuTree.getNode(this.select_node)
 						this.dynamicNode = _node;
 						this.dynamicNode&&this.resetNodeStyle(this.dynamicNode)
@@ -1079,22 +1165,27 @@ export default {
 			})
 		}),
 		//获取指标图表列表
-		getEdbChartList(){
-			dataBaseInterface.getEdbChartList({
-				PageSize:this.PageSize,
-				CurrentIndex:this.CurrentIndex,
-				ClassifyId:this.select_classifyId,
-				IsOnlyMe:this.IsOnlyMe
-			}).then(res=>{
+		async getEdbChartList(){
+			const res = this.classifyShowType === 'own' 
+				? await edbCollectInterface.getCollectEdb({
+						PageSize:this.PageSize,
+						CurrentIndex:this.CurrentIndex,
+						ClassifyId:this.select_classifyId,
+						Keyword: this.searchCollectWord
+					})
+ 				:	await dataBaseInterface.getEdbChartList({
+						PageSize:this.PageSize,
+						CurrentIndex:this.CurrentIndex,
+						ClassifyId:this.select_classifyId,
+						IsOnlyMe:this.IsOnlyMe,
+						EdbType: this.isBasicBase?1:2
+					})
 				if(res.Ret!==200) return
 				if(res.Data){
 					this.chartList = this.CurrentIndex===1?res.Data.List:[...this.chartList,...res.Data.List]
 					this.Total = res.Data.Paging.Totals||0
 					this.IsListEnd = res.Data.Paging.IsEnd
 				}
-
-
-			})
 		},
 		// 切换刷新状态
 		async toggleEdbRefreshStatus(item,type='list'){
@@ -1139,7 +1230,8 @@ export default {
 		searchApi(query,page=1) {
 			dataBaseInterface.targetSearchByPage({
 				KeyWord:query,
-				CurrentIndex: page
+				CurrentIndex: page,
+				EdbType: this.isBasicBase?1:2
 			}).then(res => {
 				if(res.Ret !== 200) return
 
@@ -1967,10 +2059,6 @@ export default {
 			})
 		},
 
-		/* 	一键成图 */
-		createChartHandle() {
-			this.isCreateChart = true;
-		},
 		
 		/* 重新刷新 重新计算后重置刷数据 */
 		initDataStatus() {
@@ -2041,7 +2129,7 @@ export default {
 				return
 			}
 			//根据页面宽度 判断标签数量是否达到上限
-			const listWidth = document.querySelector('.database-label').offsetWidth
+			const listWidth = document.querySelector('.database-label')&&document.querySelector('.database-label').offsetWidth
 			const minWidth=170+20
 			const maxNum = Math.floor(listWidth/minWidth)
 			if(this.labelList.length>=maxNum){
@@ -2098,7 +2186,11 @@ export default {
 				resolve(this.treeData)
 			}else{
 				let arr=[]
-				const res=await dataBaseInterface.targetCatalog({ParentId:node.data.ClassifyId,IsOnlyMe:this.IsOnlyMe})
+				const res=await dataBaseInterface.targetCatalog({
+					ParentId:node.data.ClassifyId,
+					IsOnlyMe:this.IsOnlyMe,
+					ClassifyType: this.isBasicBase ? 0 : 2
+				})
 				if (res.Ret === 200) {
 					const temarr = res.Data.AllNodes || [];
 					arr=temarr.map(item=>{
@@ -2156,6 +2248,44 @@ export default {
 			this.$nextTick(()=>{//重新打开计算指标选择类型弹窗
 				this.isOpenComputed=true
 			})
+		},
+
+		/* 切换分类类型 */
+		handleChangeClassifyType() {
+			this.defaultShowNodes = [];
+			this.chartList = [];
+			this.Total = 0;
+			this.selected_edbid = 0;
+			this.select_classifyId = 0;
+			this.search_txt = '';
+			this.searchCollectWord = '';
+			this.getTreeData()
+			this.getEdbChartList()
+		},
+
+		/* 收藏指标 */
+		handleCollectEdb() {
+			this.isOpenEdbCollectDia = true
+		},
+
+		async handleRemoveCollect(item=null) {
+			const res = await edbCollectInterface.edbCollectCancel({
+				ClassifyId: this.select_classifyId,
+				EdbInfoId: item?item.EdbInfoId:this.selected_edbid
+			})
+
+			if(res.Ret !== 200) return 
+			this.$message.success('取消收藏成功')
+			this.getTreeData()
+			this.getEdbChartList()
+		},
+
+		handleOpenCollectClassify(data=null) {
+			this.collectClassifyForm = {
+				name: data?data.ClassifyName:'',
+				classifyId:data?data.ClassifyId:0
+			}
+			this.isOpenCollectClassifyDia = true
 		}
 	},
 	//离开页面时保存标签
@@ -2164,7 +2294,7 @@ export default {
 		next()
 	},
 	mounted() {
-		this.getlabelList()
+		// this.getlabelList()
 		this.getEdbChartList()
 		this.$route.query.code 
 		? this.getTreeData({code: this.$route.query.code,id: this.$route.query.id,classifyId:this.$route.query.classifyId})
@@ -2271,7 +2401,7 @@ export default {
 			}
 			.target_tree {
 				color: #333;
-				height: calc(100vh - 400px); 
+				height: calc(100vh - 420px); 
 				overflow: auto;
 				.label-input .el-input__inner {
 					height: 25px;

+ 3 - 3
src/views/dataEntry_manage/mixins/chartPublic.js

@@ -540,7 +540,7 @@ export const chartSetMixin = {
       chartSetMap[this.chartInfo.ChartType]&&chartSetMap[this.chartInfo.ChartType](newval)
 
       //myeta内或者数据指标库内
-      if(this.$route.path === '/mychart'||this.$route.path==='/database')  this.showData = true;
+      if(['/mychart','/database','/edbBasicbase'].includes(this.$route.path))  this.showData = true;
     },
 
     /* 曲线图设置 */
@@ -2813,8 +2813,8 @@ export const chartSetMixin = {
     },
 
     /* 查看数据 跳转指标库展开具体指标 */
-    viewTarget({ UniqueCode,EdbInfoId,EdbInfoCategoryType,ClassifyId }) {
-      let path = EdbInfoCategoryType ? '/predictEdb' : '/database';
+    viewTarget({ UniqueCode,EdbInfoId,EdbInfoCategoryType,ClassifyId,EdbType }) {
+      let path = EdbInfoCategoryType ? '/predictEdb' : (EdbType===1?'/edbBasicbase':'/database');
       let {href} = this.$router.resolve({path, query: {
         code: UniqueCode,
         id: EdbInfoId,

+ 2 - 2
src/views/datasheet_manage/components/CustomTable.vue

@@ -966,9 +966,9 @@ export default {
       if(res.Ret !== 200) return
 
        //EdbInfoType=1 跳预测指标详情,=0跳指标库详情
-      const {ClassifyId,UniqueCode,EdbInfoId,EdbInfoType} = res.Data;
+      const {ClassifyId,UniqueCode,EdbInfoId,EdbInfoType,EdbType} = res.Data;
       let {href} = this.$router.resolve({
-        path:EdbInfoType===1?'/predictEdb':'/database',
+        path:EdbInfoType===1?'/predictEdb':(EdbType===1?'/edbBasicbase':'/database'),
         query:{code:UniqueCode,id:EdbInfoId,classifyId:ClassifyId}
       });
       window.open(href,'_blank');

+ 1 - 1
src/views/datasheet_manage/customAnalysis/components/createTargetForm.vue

@@ -122,7 +122,7 @@ export default {
 
     /* 获取分类 */
 		getMenu() {
-			dataBaseInterface.menuListV3().then((res) => {
+			dataBaseInterface.menuListV3({ClassifyType:2}).then((res) => {
 				if (res.Ret !== 200) return
         this.filterNodes(res.Data.AllNodes||[]);
 				this.classifyOption = res.Data.AllNodes || [];

+ 6 - 2
src/views/edbHistoryPage.vue

@@ -185,7 +185,9 @@ export default {
                         ClassifyId:this.treeData.ClassifyId, 
                         UniqueCode:this.treeData.UniqueCode, 
                         EdbInfoId:this.treeData.EdbInfoId, 
-                        EdbInfoType:this.treeData.EdbInfoType
+                        EdbInfoType:this.treeData.EdbInfoType,
+                        EdbType:this.treeData.EdbType,
+                        HaveOperaAuth:this.treeData.HaveOperaAuth,
                     },
                     isRoot:true,
                     isLeaf:(this.treeData.Child && this.treeData.Child.length>0)?false:true,
@@ -232,7 +234,9 @@ export default {
                             ClassifyId:element.ClassifyId, 
                             UniqueCode:element.UniqueCode, 
                             EdbInfoId:element.EdbInfoId, 
-                            EdbInfoType:element.EdbInfoType
+                            EdbInfoType:element.EdbInfoType,
+                            EdbType:element.EdbType,
+                            HaveOperaAuth:element.HaveOperaAuth,
                         },
                         isRoot:false,
                         isLeaf:(element.Child && element.Child.length>0)?false:true,

+ 1 - 1
src/views/intervalAnalysis/components/batchSelectEdb.vue

@@ -482,7 +482,7 @@ export default {
 
     // 获取指标分类
     async getClassifyOpt() {
-      const res = await dataBaseInterface.menuListV3()
+      const res = await dataBaseInterface.menuListV3({ClassifyType:2})
       if (res.Ret !== 200) return
       this.filterNodes(res.Data.AllNodes || []);
       this.classifyOpt = res.Data.AllNodes || [];

+ 1 - 1
src/views/intervalAnalysis/components/saveMultipleEdb.vue

@@ -255,7 +255,7 @@ export default {
     },
 
     async getClassifyOpts() {
-      const res = this.tableData[0].EdbInfoCategoryType === 1 ? await preDictEdbInterface.classifyListV2() : await dataBaseInterface.menuListV3()
+      const res = this.tableData[0].EdbInfoCategoryType === 1 ? await preDictEdbInterface.classifyListV2() : await dataBaseInterface.menuListV3({ClassifyType:2})
       if (res.Ret === 200) {
         this.filterNodes(res.Data.AllNodes || []);
         this.classifyOpts = res.Data.AllNodes || [];

+ 1 - 1
src/views/intervalAnalysis/components/saveSingleEdb.vue

@@ -186,7 +186,7 @@ export default {
     },
 
     async getClassifyOpts() {
-      const res = this.tableData[0].EdbInfoCategoryType === 1 ? await preDictEdbInterface.classifyListV2() : await dataBaseInterface.menuListV3()
+      const res = this.tableData[0].EdbInfoCategoryType === 1 ? await preDictEdbInterface.classifyListV2() : await dataBaseInterface.menuListV3({ClassifyType:2})
       if (res.Ret === 200) {
         this.filterNodes(res.Data.AllNodes || []);
         this.classifyOpts = res.Data.AllNodes || [];

+ 1 - 1
src/views/mychart_manage/components/chartDetailDia.vue

@@ -112,7 +112,7 @@
                   class="span-item"
                   style="margin-left: 7px"
                   @click="$parent.addMychartHandle(chartInfo)"
-                  v-if="['/database'].includes($route.path)"
+                  v-if="['/database','/edbBasicbase'].includes($route.path)"
               >
                   <img
                       :src="$icons.chart_join_ico"

+ 1 - 1
src/views/sandbox_manage/index_new_version.vue

@@ -1200,7 +1200,7 @@ import {reportVarietyInterence} from '@/api/modules/reportVariety'
         if(item.Type == 1){
           if(item.databaseType==0){
             // 普通指标
-            const { href } = this.$router.resolve({ path: '/database',query:item.detailParams});
+            const { href } = this.$router.resolve({ path: (item.EdbType===1?'/edbBasicbase':'/database'),query:item.detailParams});
             window.open(href, '_blank');
           }else{
             // 预测指标

+ 1 - 1
src/views/sandbox_manage/sandFlowNew/index.vue

@@ -1226,7 +1226,7 @@ import addLInkDia from './components/addLInkDia.vue';
         if(item.Type == 1){
           if(item.databaseType==0){
             // 普通指标
-            const { href } = this.$router.resolve({ path: '/database',query:item.detailParams});
+            const { href } = this.$router.resolve({ path: (item.EdbType===1?'/edbBasicbase':'/database'),query:item.detailParams});
             window.open(href, '_blank');
           }else{
             // 预测指标

+ 1 - 1
src/views/supply_manage/components/createTargetDia.vue

@@ -144,7 +144,7 @@ export default {
 	methods: {
 		/* 获取目录结构 */
 		getMenu() {
-			dataBaseInterface.menuListV3().then(res => {
+			dataBaseInterface.menuListV3({ClassifyType:2}).then(res => {
 				if(res.Ret === 200) {
 					this.filterNodes(res.Data.AllNodes||[]);
 					this.options = res.Data.AllNodes || [];

+ 7 - 5
src/views/system_manage/dataOperaAuth.vue

@@ -301,14 +301,16 @@ export default {
   computed: {
     tabs(){
       const tabs = [
-        { label: this.$t('SystemManage.OperateAuth.tab01'), key: 1 },
+        // { label: this.$t('SystemManage.OperateAuth.tab01'), key: 1 },
         // { label: this.$t('SystemManage.OperateAuth.tab02'), key: 2 },
-        { label: this.$t('SystemManage.OperateAuth.tab03'), key: 3 },
-        { label: this.$t('SystemManage.OperateAuth.tab04'), key: 4 },
+        // { label: this.$t('SystemManage.OperateAuth.tab03'), key: 3 },
+        { label: '数据查看', key: 3 },
+        { label: '指标加工', key: 7 },
+        { label: '衍生指标', key: 4 },
         { label: this.$t('SystemManage.OperateAuth.tab05'), key: 5 },
         { label: this.$t('SystemManage.OperateAuth.tab06'), key: 6 },
       ]
-      return this.currAuthSet===1 ? tabs : tabs.filter(item => [3,4,5,6].includes(item.key))
+      return this.currAuthSet===1 ? tabs : tabs.filter(item => [3,4,5,6,7].includes(item.key))
     },
     subTabs() {
       const subTabs = [
@@ -605,7 +607,7 @@ export default {
     },
 
     changeSet() {
-      this.changeTab({key: this.currAuthSet===1?1:3})
+      this.changeTab({key: 3})
       this.getUserDataCount()
     },