浏览代码

指标库跳转判断;添加指标库目录判断

Karsa 6 月之前
父节点
当前提交
d6a6f0b4f7
共有 29 个文件被更改,包括 560 次插入157 次删除
  1. 87 2
      src/api/modules/chartApi.js
  2. 1 1
      src/views/chartRelevance_manage/components/saveEdbToBaseDia.vue
  3. 2 2
      src/views/chartRelevance_manage/crossVarietyAnalysis/components/edbTableSection.vue
  4. 1 1
      src/views/chartRelevance_manage/relevance/components/multipleIndForm.vue
  5. 1 1
      src/views/dataEntry_manage/adjustdata/adjustData.vue
  6. 1 1
      src/views/dataEntry_manage/codecount/index.vue
  7. 1 1
      src/views/dataEntry_manage/databaseComponents/batchComptedDialog.vue
  8. 1 1
      src/views/dataEntry_manage/databaseComponents/batchComputedSave.vue
  9. 1 1
      src/views/dataEntry_manage/databaseComponents/batchComputedV2.vue
  10. 48 0
      src/views/dataEntry_manage/databaseComponents/collectEdbMenu.vue
  11. 1 1
      src/views/dataEntry_manage/databaseComponents/computedDialog.vue
  12. 1 1
      src/views/dataEntry_manage/databaseComponents/diffusionIndexDia.vue
  13. 190 0
      src/views/dataEntry_manage/databaseComponents/edbCollectDia.vue
  14. 1 1
      src/views/dataEntry_manage/databaseComponents/fittingResidueDia.vue
  15. 1 1
      src/views/dataEntry_manage/databaseComponents/jointTargetDia.vue
  16. 1 1
      src/views/dataEntry_manage/databaseComponents/operationDialog.vue
  17. 1 1
      src/views/dataEntry_manage/databaseComponents/smoothEdbDialog.vue
  18. 205 125
      src/views/dataEntry_manage/databaseList.vue
  19. 3 3
      src/views/dataEntry_manage/mixins/chartPublic.js
  20. 2 2
      src/views/datasheet_manage/components/CustomTable.vue
  21. 1 1
      src/views/datasheet_manage/customAnalysis/components/createTargetForm.vue
  22. 1 1
      src/views/intervalAnalysis/components/batchSelectEdb.vue
  23. 1 1
      src/views/intervalAnalysis/components/saveMultipleEdb.vue
  24. 1 1
      src/views/intervalAnalysis/components/saveSingleEdb.vue
  25. 1 1
      src/views/mychart_manage/components/chartDetailDia.vue
  26. 1 1
      src/views/sandbox_manage/index_new_version.vue
  27. 1 1
      src/views/sandbox_manage/sandFlowNew/index.vue
  28. 1 1
      src/views/supply_manage/components/createTargetDia.vue
  29. 2 2
      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.post('/datamanage/edb_collect/list',params)
+		},
+}
+
 export {
 	dataBaseInterface,
 	mychartInterface,
-	chartFrameInterface
+	chartFrameInterface,
+	edbCollectInterface
 }

+ 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 || [];

+ 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 || [];

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

@@ -0,0 +1,48 @@
+<template>
+    <el-tree
+        ref="catalogTree"
+        class="catalog-tree other-tree"
+        empty-text="暂无图库"
+        :data="ownClassifyList"
+        node-key="nodeKeyId"
+        :expand-on-click-node="false"
+        @current-change="(data,node)=>{nodeChange(data,node)}"
+        >
+        <div class="custom-tree-node" slot-scope="{ data }">
+            <span class="tree-label">{{ data.name }}</span>
+            <div class="right-item right-item-box" >
+                <el-dropdown @command="handleCommand" trigger="click" v-if="data.MyChartClassifyId">
+                <span class="el-dropdown-link"> 
+                    <i class="el-icon-more" style="font-size: 16px;transform: rotate(90deg);cursor: pointer"/>
+                </span>
+                <el-dropdown-menu slot="dropdown">
+                    <el-dropdown-item :command="{key:'copy'}" :disabled="select_classify_userid === roleId"><!-- 复制 -->{{$t('MyEtaPage.option_op_copy')}}</el-dropdown-item>
+                </el-dropdown-menu>
+                </el-dropdown>
+            </div>
+        </div>
+    </el-tree>
+</template>
+
+<script>
+import { edbCollectInterface } from '@/api/modules/chartApi'
+export default {
+  props: {
+    data: {
+      type: Object
+    },
+  },
+  data() {
+    return {
+      ownClassifyList: []
+
+
+
+    }
+  }
+}
+</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 || [];

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

@@ -0,0 +1,190 @@
+<template>
+  <div class="edbCollectDia-container">
+    <el-dialog
+      :visible.sync="isAddMyDialog"
+      :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': selected_classify.includes(item.MyChartClassifyId)}]"
+            :key="item.MyChartClassifyId"
+            type="info"
+            effect="plain"
+            @click="chooseClassify(item.MyChartClassifyId)"
+          >
+            {{ item.MyChartClassifyName }}
+          </el-tag>
+        </div>
+        <span class="add-cont" @click="addClassify">
+          <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 { mychartInterface } from '@/api/api.js'
+import pubDialog from '@/components/pubDialog.vue';
+export default {
+	name:'',
+	components: {
+		pubDialog
+	},
+	props: {
+		isAddMyDialog: {
+			type: Boolean,
+		},
+    add_id: {
+      type: Number,
+    },
+    add_ids: {
+      type: Array,
+      default: []
+    }
+	},
+	watch: {
+		isAddMyDialog(newval) {
+			if(newval) {
+				this.getClassify();
+        console.log(this.add_ids)
+			}
+		}
+	},
+	data () {
+		return {
+			classifyArr:[],//分类列表
+      selected_classify: [],
+			//新增弹窗
+			isClassifyDia: false,
+      dia_title: /* '新增分类' */this.$t('EtaChartPage.add_my_classify'),
+      dialogKeyArrs: [
+        {
+          label: /* '分类名称' */ this.$t('Chart.classify_name_label'),
+          prop: 'name',
+          type: 'input',
+          maxlen: 10,
+          placeholder: /* '请输入分类名称' */this.$t('Chart.InputHolderAll.input_classify'),
+        },
+      ],
+      formData: {
+        name: ''
+      },
+			addRules: {
+				name:[
+					{ required: true, message: /* '分类名称不能为空' */this.$t('Chart.Vailds.classify_msg'), trigger: 'blur' },
+				],
+			}
+		};
+	},
+	methods: {
+		/* 获取分类列表 */
+		getClassify() {
+			mychartInterface.classifyList()
+				.then(res => {
+					if(res.Ret !== 200) return
+					this.classifyArr = res.Data ? res.Data.List : [];
+          this.selected_classify = _.cloneDeep(this.add_ids);
+				})
+		},
+
+    chooseClassify(id) {
+      if(this.selected_classify.includes(id)) {
+        let index = this.selected_classify.indexOf(id);
+        this.selected_classify.splice(index, 1);
+      }else {
+        this.selected_classify.push(id);
+      }
+    },
+
+		/* 添加分类 */
+		addClassify() {
+			this.isClassifyDia = true;
+		},
+    /* 新增分类回调 */
+    addNewClassifyHandle({name}) {
+      mychartInterface.addClassify({
+        MyChartClassifyName: name
+      }).then(res => {
+        if(res.Ret !== 200) return
+        this.isClassifyDia = false;
+        this.getClassify();
+      })
+    },
+
+    /* 加入收藏 */
+    saveHandle() {
+      if(!this.selected_classify.length) return this.$message.warning(/* '请选择分类' */this.$t('MsgPrompt.select_category'));
+      mychartInterface.add({
+        ChartInfoId: this.add_id,
+        MyChartClassifyId: this.selected_classify
+      }).then(res => {
+        if(res.Ret !== 200) return 
+        this.$message.success(/* '已加入我的图库' */this.$t('Chart.OptMsg.add_mine_success'))
+        this.$emit('addSuccess',res.Data)
+      })
+    },
+
+    init() {
+      this.selected_classify = [];
+    },
+    
+		cancelHandle() {
+      this.init()
+			this.$emit('cancel')
+		}
+	},
+	created() {},
+	mounted() {},
+}
+</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){

+ 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){

+ 205 - 125
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="search_txt" 
+					: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
@@ -72,107 +83,130 @@
 			</span>
 			
 			<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"
-								/>
-								<!-- 编辑节点 如果是分类,判断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')"
+								<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.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')"
-								/>
-							
+								<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.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>
+						</el-tree>
+
+						<!-- 收藏目录 -->
+						<collectEdbMenu
+							v-else
+							:data="treeData"
+						/>
 					</div>
+
 					<div class="noDepart" @click="addLevelOneHandle" v-if="CanOpClassify&&isEdbBtnShow('editCatalog')">
 						<img
 							src="~@/assets/img/set_m/add_ico.png"
@@ -218,6 +252,8 @@
 								<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'">移出</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>
@@ -239,10 +275,17 @@
 							</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="EdbData.EdbType===1 && isEdbBtnShow('edbBaseData_collect')"
+								type="text" 
+								@click="handleCollectEdb" 
+							>{{EdbData.IsCollect?'移出':'收藏'}}</el-button>
 							<el-button 
 								v-if="isEdbBtnShow('update')"
 								type="text" 
@@ -570,6 +613,7 @@
 
 <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';
@@ -596,6 +640,8 @@ 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';
 export default {
 	name: '',
 	components: {
@@ -622,7 +668,9 @@ export default {
 		SmoothEdbDialog,
 		batchComputedV2,
 		setLangInfoDia,
-		edbHasUsedDia
+		edbHasUsedDia,
+		collectEdbMenu,
+		edbCollectDia
 	},
 	directives: {
 		drag(el, bindings,vnode) {
@@ -759,7 +807,10 @@ export default {
 			isLangInfoDia: false,
 
 			edbHasUsedDiaShow:false,
-			hasUsedList:[]
+			hasUsedList:[],
+
+			/* 目录分类 */
+			classifyShowType:'public'
 		};
 	},
 	watch: {
@@ -802,7 +853,7 @@ export default {
 	},
 	computed: {
 		/* 是否是数据查看库 */
-		isBasic() {
+		isBasicBase() {
 			return this.$route.path === '/edbBasicbase'
 		},
 
@@ -940,14 +991,23 @@ export default {
 				'checkRelatedEdb':edbDataPermission.edbData_checkRelatedEdb,//查看关联指标
 				'checkCalcChart':edbDataPermission.edbData_checkCalcChart,//查看计算指标
 				'enableOrDisable':edbDataPermission.edbData_enableOrDisable,//启用/停用
+
+				'edbBaseData_collect': edbDataPermission.edbBaseData_collect,//收藏移出
 			}
 			return checkPermissionBtn(BtnMap[type])
 		},
 		/* 获取树分类数据 */
-		getTreeData(params) {
-			
-			dataBaseInterface.targetCatalog({IsOnlyMe:this.IsOnlyMe,ParentId:0}).then(res=>{
-				if(res.Ret===200){
+		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
+					})
+
+	
+					if(res.Ret!==200) return 
 					const arr=res.Data.AllNodes || []
 					this.treeData=arr.map(item=>{
 						return {
@@ -955,13 +1015,15 @@ export default {
 							// isLeaf:item.Children.length?false:true
 						}
 					})
+					
 					this.CanOpClassify = res.Data.CanOpClassify;
 					this.showData = true;
-					/* 处理树展开和选中图表 */
-					params && this.selectCurrentNode(params);
-					!params && this.select_node && this.$refs.menuTree.setCurrentKey(this.select_node);
-				}
-			})
+
+					if(this.classifyShowType==='public') {
+						/* 处理树展开和选中图表 */
+						params && this.selectCurrentNode(params);
+						!params && this.select_node && this.$refs.menuTree.setCurrentKey(this.select_node);
+					}
 		},
 		/* 获取最新的指标 默认展示 */
 		getNewTargetList: _.throttle(function() {
@@ -1058,7 +1120,8 @@ export default {
 				PageSize:this.PageSize,
 				CurrentIndex:this.CurrentIndex,
 				ClassifyId:this.select_classifyId,
-				IsOnlyMe:this.IsOnlyMe
+				IsOnlyMe:this.IsOnlyMe,
+				EdbType: this.isBasicBase?1:2
 			}).then(res=>{
 				if(res.Ret!==200) return
 				if(res.Data){
@@ -1066,8 +1129,6 @@ export default {
 					this.Total = res.Data.Paging.Totals||0
 					this.IsListEnd = res.Data.Paging.IsEnd
 				}
-
-
 			})
 		},
 		// 切换刷新状态
@@ -1113,7 +1174,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
 
@@ -2068,7 +2130,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=>{
@@ -2126,6 +2192,20 @@ export default {
 			this.$nextTick(()=>{//重新打开计算指标选择类型弹窗
 				this.isOpenComputed=true
 			})
+		},
+
+		/* 切换分类类型 */
+		handleChangeClassifyType() {
+			this.defaultShowNodes = [];
+			this.selected_edbid = 0;
+			this.select_classifyId = 0;
+			this.getTreeData()
+			this.getEdbChartList()
+		},
+
+		/* 收藏指标 */
+		handleCollectEdb() {
+
 		}
 	},
 	//离开页面时保存标签
@@ -2134,7 +2214,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})
@@ -2241,7 +2321,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 || [];

+ 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 || [];

+ 2 - 2
src/views/system_manage/dataOperaAuth.vue

@@ -305,12 +305,12 @@ export default {
         { label: this.$t('SystemManage.OperateAuth.tab02'), key: 2 },
         // { label: this.$t('SystemManage.OperateAuth.tab03'), key: 3 },
         { label: '数据查看', 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 = [