浏览代码

资产转移设置;所有引用处指标,图表,表格权限控制

Karsa 1 年之前
父节点
当前提交
fc6be2b52c
共有 57 个文件被更改,包括 2213 次插入1264 次删除
  1. 17 0
      src/api/modules/setApi.js
  2. 二进制
      src/assets/img/icons/lock_big.png
  3. 二进制
      src/assets/img/icons/lock_black.png
  4. 二进制
      src/assets/img/set_m/no_auth.png
  5. 23 0
      src/components/edb/noAuth.vue
  6. 40 0
      src/components/noDataAuth.vue
  7. 14 0
      src/utils/buttonConfig.js
  8. 5 1
      src/utils/icon.js
  9. 5 1
      src/utils/registryComponents.js
  10. 22 2
      src/views/chartRelevance_manage/components/selectTarget.vue
  11. 1 1
      src/views/chartRelevance_manage/crossVarietyAnalysis/components/edbTableSection.vue
  12. 1 1
      src/views/chartRelevance_manage/relevance/list.vue
  13. 12 2
      src/views/dataEntry_manage/addChart.vue
  14. 11 0
      src/views/dataEntry_manage/adjustdata/adjustData.vue
  15. 399 377
      src/views/dataEntry_manage/chartSetting.vue
  16. 11 0
      src/views/dataEntry_manage/codecount/index.vue
  17. 33 0
      src/views/dataEntry_manage/components/satterSeriesDia.vue
  18. 11 0
      src/views/dataEntry_manage/databaseComponents/batchComptedDialog.vue
  19. 13 1
      src/views/dataEntry_manage/databaseComponents/batchComputedV2.vue
  20. 11 1
      src/views/dataEntry_manage/databaseComponents/computedDialog.vue
  21. 11 0
      src/views/dataEntry_manage/databaseComponents/diffusionIndexDia.vue
  22. 22 0
      src/views/dataEntry_manage/databaseComponents/fittingResidueDia.vue
  23. 44 0
      src/views/dataEntry_manage/databaseComponents/jointTargetDia.vue
  24. 33 16
      src/views/dataEntry_manage/databaseComponents/operationDialog.vue
  25. 11 1
      src/views/dataEntry_manage/databaseComponents/replaceDialog.vue
  26. 11 0
      src/views/dataEntry_manage/databaseComponents/smoothEdbDialog.vue
  27. 20 1
      src/views/dataEntry_manage/databaseList.vue
  28. 12 2
      src/views/dataEntry_manage/editChart.vue
  29. 2 0
      src/views/datasheet_manage/components/CustomTable.vue
  30. 98 77
      src/views/datasheet_manage/customAnalysis/list.vue
  31. 125 102
      src/views/datasheet_manage/sheetList.vue
  32. 3 1
      src/views/edbHistoryPage.vue
  33. 11 0
      src/views/futures_manage/chartEditor.vue
  34. 496 485
      src/views/mychart_manage/components/chartDetailDia.vue
  35. 3 1
      src/views/mychart_manage/components/chooseChart.vue
  36. 1 1
      src/views/mychart_manage/index.vue
  37. 1 1
      src/views/ppt_manage/newVersion/components/editor/InsertCharts.vue
  38. 8 2
      src/views/ppt_manage/newVersion/pptEditor.vue
  39. 8 2
      src/views/ppt_manage/newVersion/pptEnEditor.vue
  40. 23 1
      src/views/predictEdb_manage/addPredicEdb.vue
  41. 11 1
      src/views/predictEdb_manage/components/dynamicRingdiffer.vue
  42. 11 0
      src/views/predictEdb_manage/components/edbDia.vue
  43. 11 0
      src/views/predictEdb_manage/components/operationDialog.vue
  44. 106 84
      src/views/predictEdb_manage/predictEdb.vue
  45. 2 2
      src/views/report_manage/addreportNew.vue
  46. 1 1
      src/views/report_manage/components/importMyChart.vue
  47. 2 2
      src/views/report_manage/editChapterReport.vue
  48. 2 2
      src/views/report_manage/editreportNew.vue
  49. 6 0
      src/views/report_manage/mixins/reportMixin.js
  50. 2 2
      src/views/report_manage/reportEn/reportEditor.vue
  51. 22 0
      src/views/sandbox_manage/sandFlowNew/components/addLInkDia.vue
  52. 17 2
      src/views/smartReport/components/ETASheet.vue
  53. 17 2
      src/views/smartReport/components/ImportETAChart.vue
  54. 1 1
      src/views/smartReport/components/ImportMyETAChart.vue
  55. 65 12
      src/views/system_manage/components/opearAuthSetDia.vue
  56. 106 6
      src/views/system_manage/components/setClassifySecretDia.vue
  57. 259 67
      src/views/system_manage/dataOperaAuth.vue

+ 17 - 0
src/api/modules/setApi.js

@@ -512,6 +512,23 @@ const operateAuthInterface = {
 	 */
 	edbNoAuthBatchSet: params => {
 		return http.post('/datamanage/edb_no_permission/batch_add',params)
+	},
+
+	/**
+	 * 全量资产转移
+	 * @param {*} params Source NewUserId OldUserId
+	 */
+	transferAllData: params => {
+		return http.post('/datamanage/edb_chart/all/change_user',params)
+	},
+
+	/**
+	 * 获取用户的资产数量统计
+	 * @param {*} params UserId
+	 * @returns 
+	 */
+	getUserStatistic: params => {
+		return http.get('/datamanage/edb_chart/count',params)
 	}
 }
 

二进制
src/assets/img/icons/lock_big.png


二进制
src/assets/img/icons/lock_black.png


二进制
src/assets/img/set_m/no_auth.png


+ 23 - 0
src/components/edb/noAuth.vue

@@ -0,0 +1,23 @@
+<template>
+  <div>
+
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  mounted(){
+
+  },
+  methods:{
+
+  },
+}
+</script>
+<style scoped lang='scss'>
+
+</style>

+ 40 - 0
src/components/noDataAuth.vue

@@ -0,0 +1,40 @@
+<template>
+  <div class="no-auth-wapper">
+    <img
+      src="~@/assets/img/set_m/no_auth.png"
+      alt=""
+    />
+    <span>{{text}}</span>
+  </div>
+</template>
+<script>
+export default {
+  props: {
+    text: {
+      type:String
+    }
+  },
+  data() {
+    return {
+
+    }
+  },
+  mounted(){
+
+  },
+  methods:{
+
+  },
+}
+</script>
+<style scoped lang='scss'>
+.no-auth-wapper {
+  padding: 100px 0;
+  text-align: center;
+  color: #666;
+  img {
+    margin: 20px auto 10px;
+    display: block
+  }
+}
+</style>

+ 14 - 0
src/utils/buttonConfig.js

@@ -625,6 +625,20 @@ export const operateAuthPermission = {
     operateAuth_manual_edit:'operateAuth:manual:edit',
     /*---------手工数据权限-------- */
     sysdataAuth_classify:'sysdataAuth:classify',//手工指标分类
+
+
+    /* new */
+    operateAuth_look:'operateAuth:look',//查看
+    /* 资产转移 */
+    operateAuth_transfer_all:'operateAuth:transfer:all',//全量资产转移
+    operateAuth_transfer_batch:'operateAuth:transfer:batch',//批量设置
+    operateAuth_transfer_one:'operateAuth:transfer:one',//编辑
+
+    /* 数据权限 */
+    operateAuth_set_classifySercet:'operateAuth:set:classifySercet',//分类加密
+    operateAuth_set_classifySet:'operateAuth:set:classifySet',//分类设置
+    operateAuth_set_batch:'operateAuth:set:batch',//指标批量设置
+    operateAuth_set_one:'operateAuth:set:one',//指标单个编辑
 }
 /*-----------基本配置-------- */
 export const baseConfigPermission = {

+ 5 - 1
src/utils/icon.js

@@ -66,5 +66,9 @@ export default {
 	/* 中英文切换 */
 	to_en: require('@/assets/img/icons/toEn.png'),
 	/* 跳转icon */
-	jupm_icon: require('@/assets/img/icons/jump_ico.png')
+	jupm_icon: require('@/assets/img/icons/jump_ico.png'),
+	/* 数据无权限icon */
+	lock_ico2: require('@/assets/img/icons/lock_black.png'),
+	/* 无权限缺省大icon */
+	lock_big: require('@/assets/img/icons/lock_big.png')
 }

+ 5 - 1
src/utils/registryComponents.js

@@ -37,4 +37,8 @@ Vue.component('chartHandlesWrap',chartDetailHandlesWrap)
 
 //长loading统一
 import dataLoading from '@/components/loading.vue';
-Vue.component('dataLoading',dataLoading)
+Vue.component('dataLoading',dataLoading)
+
+//无指标/图表/表格权限缺省
+import noDataAuth from '@/components/noDataAuth.vue';
+Vue.component('noDataAuth',noDataAuth)

+ 22 - 2
src/views/chartRelevance_manage/components/selectTarget.vue

@@ -58,9 +58,19 @@
           :key="item.EdbInfoId"
           :label="item.EdbName"
           :value="item.EdbInfoId"
+          :disabled="!item.HaveOperaAuth"
         >
           <edbDetailPopover :info="item">
-            <div slot="reference">{{item.EdbName}}</div>
+            <div slot="reference">
+              <img 
+                :src="$icons.lock_ico2" 
+                width="18" 
+                height="18" 
+                style="vertical-align:middle" 
+                v-if="!item.HaveOperaAuth"
+              />
+              {{item.EdbName}}
+            </div>
           </edbDetailPopover>
         </el-option>
       </el-select>
@@ -84,9 +94,19 @@
         :key="item.EdbInfoId"
         :label="item.EdbName"
         :value="item.EdbInfoId"
+        :disabled="!item.HaveOperaAuth"
       >
         <edbDetailPopover :info="item">
-          <div slot="reference">{{item.EdbName}}</div>
+          <div slot="reference">
+            <img 
+              :src="$icons.lock_ico2" 
+              width="18" 
+              height="18" 
+              style="vertical-align:middle" 
+              v-if="!item.HaveOperaAuth"
+            />
+            {{item.EdbName}}
+          </div>
         </edbDetailPopover>
       </el-option>
     </el-select>

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

@@ -27,7 +27,7 @@
         </template>
       </el-table-column>
       <el-table-column :label="$t('Table.column_operations')" key="Copy" align="center" width="140">
-        <template slot-scope="scope">
+        <template slot-scope="scope" v-if="scope.row.HaveOperaAuth">
           <span class="editsty" @click="copyCode(scope.row)">
           <i class="el-icon-document-copy" />&nbsp;{{$t('Edb.detail_copydata_btn')}}</span
         ><br />

+ 1 - 1
src/views/chartRelevance_manage/relevance/list.vue

@@ -243,7 +243,7 @@
               </template>
             </el-table-column>
             <el-table-column :label="$t('Edb.Detail.e_opera')" key="Copy" align="center" width="140">
-              <template slot-scope="scope">
+              <template slot-scope="scope" v-if="scope.row.HaveOperaAuth">
                 <!-- <span @click="delTarget(scope.row)" class="deletesty">删除&nbsp;</span> -->
                 <span v-permission="permissionBtn.statisticPermission.corrAnalysis_copyData"
                     class="editsty" @click="copyCode(scope.row)">

+ 12 - 2
src/views/dataEntry_manage/addChart.vue

@@ -86,9 +86,19 @@
 									:key="item.EdbInfoId"
 									:label="chart_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 									:value="item.EdbInfoId"
+									:disabled="!item.HaveOperaAuth"
 								>
 									<edbDetailPopover :info="item">
-										<div slot="reference">{{chart_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName }}</div>
+										<div slot="reference">
+											<img 
+												:src="$icons.lock_ico2" 
+												width="18" 
+												height="18" 
+												style="vertical-align:middle" 
+												v-if="!item.HaveOperaAuth"
+											/>
+											{{chart_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName }}
+										</div>
 									</edbDetailPopover>
 								</el-option>
 							</el-select>
@@ -673,7 +683,7 @@
 							align="center"
 							width="140"
 						>
-							<template slot-scope="scope">
+							<template slot-scope="scope" v-if="scope.row.HaveOperaAuth">
 								<span @click="delTarget(scope.row)" class="deletesty"><!-- 删除 -->{{$t('Table.delete_btn')}}&nbsp;</span>
 								<span v-permission="permissionBtn.chartLibPermission.chartLib_copyData"
 									class="editsty" @click="copyCode(scope.row)">

+ 11 - 0
src/views/dataEntry_manage/adjustdata/adjustData.vue

@@ -24,7 +24,18 @@
                 :key="item.EdbInfoId"
                 :label="eta_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
                 :value="item.EdbInfoId"
+                :disabled="!item.HaveOperaAuth"
               >
+                <div>
+									<img 
+										:src="$icons.lock_ico2" 
+										width="18" 
+										height="18" 
+										style="vertical-align:middle" 
+										v-if="!item.HaveOperaAuth"
+									/>
+									{{eta_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+								</div>
               </el-option>
             </el-select>
             <i class="el-icon-tickets" style="color:#409EFF;font-size:18px" @click="toHistoryPage(select_target,$route.matched);lookEdbId=select_target" v-if="select_target"/>

+ 399 - 377
src/views/dataEntry_manage/chartSetting.vue

@@ -67,6 +67,16 @@
                 :label="currentLang==='en'?(item.ChartNameEn||item.ChartName):item.ChartName"
                 :value="item.ChartInfoId"
               >
+                <div>
+									<img 
+										:src="$icons.lock_ico2" 
+										width="18" 
+										height="18" 
+										style="vertical-align:middle" 
+										v-if="!item.HaveOperaAuth"
+									/>
+									{{currentLang==='en'?(item.ChartNameEn||item.ChartName):item.ChartName}}
+								</div>
               </el-option>
             </el-select>
           </div>
@@ -114,6 +124,13 @@
                   }`"
                   :id="`node${data.UniqueCode}`"
                 >
+                  <img 
+                    :src="$icons.lock_ico2" 
+                    width="18" 
+                    height="18" 
+                    style="vertical-align:middle" 
+                    v-if="!data.HaveOperaAuth&&data.ChartInfoId"
+                  />
                   <span>{{ currentLang==='en' ? (data.ChartClassifyNameEn||data.ChartClassifyName) : data.ChartClassifyName }}</span>
                 </span>
                 <span
@@ -332,196 +349,72 @@
       >
         <!-- =============具体图表区域============== -->
         <div class="chart-min-cont" v-if="tableData.length">
-          <div class="cont-top">
-            <div class="top-left">
-              <!-- 默认曲线图 -->
-              <template v-if="sameOptionType.includes(chartInfo.ChartType)">
-                <el-button
-                  type="primary"
-                  v-for="item in yearSelector"
-                  :key="item.value"
-                  size="medium"
-                  :plain="item.value !== year_select"
-                  class="year-btn"
-                  @click.native="changeYear(item)"
-                  >{{ item.name }}</el-button
-                >
-                <el-button type="text" class="btn-sty" @click="openDateDia">{{
-                  dateTip
-                }}</el-button>
-              </template>
-              <!-- 季节性图选择年份区间 -->
-              <!-- <date-picker
-                v-else-if="chartInfo.ChartType === 2"
-                v-model="season_year"
-                type="month"
-                value-type="format"
-                range
-                placeholder="年份日期选择"
-                @change="seasonYearChange"
-              /> -->
-              <div v-else-if="chartInfo.ChartType === 2" @click="openDateDia" class="date-setting">
-                {{ season_year && season_year.length>0 ? season_year[0]+'~'+season_year[1]:"年份日期选择" }}
+
+          <template v-if="chartInfo.HaveOperaAuth">
+            <div class="cont-top">
+              <div class="top-left">
+                <!-- 默认曲线图 -->
+                <template v-if="sameOptionType.includes(chartInfo.ChartType)">
+                  <el-button
+                    type="primary"
+                    v-for="item in yearSelector"
+                    :key="item.value"
+                    size="medium"
+                    :plain="item.value !== year_select"
+                    class="year-btn"
+                    @click.native="changeYear(item)"
+                    >{{ item.name }}</el-button
+                  >
+                  <el-button type="text" class="btn-sty" @click="openDateDia">{{
+                    dateTip
+                  }}</el-button>
+                </template>
+                <!-- 季节性图选择年份区间 -->
+                <!-- <date-picker
+                  v-else-if="chartInfo.ChartType === 2"
+                  v-model="season_year"
+                  type="month"
+                  value-type="format"
+                  range
+                  placeholder="年份日期选择"
+                  @change="seasonYearChange"
+                /> -->
+                <div v-else-if="chartInfo.ChartType === 2" @click="openDateDia" class="date-setting">
+                  {{ season_year && season_year.length>0 ? season_year[0]+'~'+season_year[1]:"年份日期选择" }}
+                </div>
               </div>
             </div>
-          </div>
-          <div class="cont-bottom">
-            <el-row class="bottom-min">
-              <el-col
-                :span="21"
-                style="padding-bottom: 30px;"
-              >
-               
-                <div class="chartEn-mark" v-show="chartInfo.IsEnChart" style="top: 0;left: 0;">En</div>
-                <div class="chart-show-cont"  v-if="!chartInfo.WarnMsg">
-                  <div class="chartWrapper" id="chartWrapper">
-                    <h2 
-                      class="chart-title"
-                      :style="`
-                        textAlign:${JSON.parse(chartInfo.ChartThemeStyle).titleOptions.align};
-                        fontSize:${JSON.parse(chartInfo.ChartThemeStyle).titleOptions.style.fontSize}px;
-                        color:${JSON.parse(chartInfo.ChartThemeStyle).titleOptions.style.color}
-                      `"
-                    >
-                      {{ currentLang==='en'?(chartInfo.ChartNameEn||chartInfo.ChartName):chartInfo.ChartName }}
-                    </h2>
+            <div class="cont-bottom">
+              <el-row class="bottom-min">
+                <el-col
+                  :span="21"
+                  style="padding-bottom: 30px;"
+                >
+                
+                  <div class="chartEn-mark" v-show="chartInfo.IsEnChart" style="top: 0;left: 0;">En</div>
+                  <div class="chart-show-cont"  v-if="!chartInfo.WarnMsg">
+                    <div class="chartWrapper" id="chartWrapper">
+                      <h2 
+                        class="chart-title"
+                        :style="`
+                          textAlign:${JSON.parse(chartInfo.ChartThemeStyle).titleOptions.align};
+                          fontSize:${JSON.parse(chartInfo.ChartThemeStyle).titleOptions.style.fontSize}px;
+                          color:${JSON.parse(chartInfo.ChartThemeStyle).titleOptions.style.color}
+                        `"
+                      >
+                        {{ currentLang==='en'?(chartInfo.ChartNameEn||chartInfo.ChartName):chartInfo.ChartName }}
+                      </h2>
 
-                    <Chart :options="options" :chartInfo="chartInfo" ref="chartRef"/>
+                      <Chart :options="options" :chartInfo="chartInfo" ref="chartRef"/>
 
-                   <!--  <div class="range-cont left" v-if="leftIndex != -1">
-                      <el-input
-                        style="width: 60px; display: block"
-                        size="mini"
-                        type="number"
-                        :placeholder="$t('Chart.up_limit')"
-                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                        v-model="tableData[leftIndex].MaxData"
-                      />
-                      <el-input
-                        class="min-data-input"
-                        size="mini"
-                        type="number"
-                        :placeholder="$t('Chart.low_limit')"
-                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                        v-model="tableData[leftIndex].MinData"
-                      />
-                    </div>
-                    <div 
-                      class="range-cont right" 
-                      v-if="rightIndex != -1"
-                    >
-                      <el-input
-                        style="width: 60px; display: block"
-                        size="mini"
-                        type="number"
-                        :placeholder="$t('Chart.up_limit')"
-                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                        v-model="tableData[rightIndex].MaxData"
-                      />
-                      <el-input
-                        class="min-data-input"
-                        size="mini"
-                        type="number"
-                        :placeholder="$t('Chart.low_limit')"
-                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                        v-model="tableData[rightIndex].MinData"
-                      />
-                    </div>
-                    <div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
-                      <el-input
-                        style="width: 60px; display: block"
-                        size="mini"
-                        type="number"
-                        :placeholder="$t('Chart.up_limit')"
-                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                        v-model="tableData[rightTwoIndex].MaxData"
-                      />
-                      <el-input
-                        class="min-data-input"
-                        size="mini"
-                        type="number"
-                        :placeholder="$t('Chart.low_limit')"
-                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                        v-model="tableData[rightTwoIndex].MinData"
-                      />
-                    </div> -->
-                    <template v-if="![7,10,11].includes(chartInfo.ChartType)">
-                        <div class="range-cont left" v-if="leftIndex != -1">
-                            <el-input
-                                style="width: 60px; display: block"
-                                size="mini"
-                                type="number"
-                                placeholder="上限"
-                                :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                                v-model="chartLimit.max"
-                                @change="changeLimit"
-                            />
-                            <el-input
-                                class="min-data-input"
-                                size="mini"
-                                type="number"
-                                placeholder="下限"
-                                :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                                v-model="chartLimit.min"
-                                @change="changeLimit"
-                            />
-                        </div>
-                    <div 
-                      class="range-cont right" 
-                      v-if="rightIndex != -1"
-                    >
-                      <el-input
-                        style="width: 60px; display: block"
-                        size="mini"
-                        type="number"
-                        placeholder="上限"
-                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                        v-model="chartLimit.rightMax"
-                        @change="changeLimit"
-                      />
-                      <el-input
-                        class="min-data-input"
-                        size="mini"
-                        type="number"
-                        placeholder="下限"
-                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                        v-model="chartLimit.rightMin"
-                        @change="changeLimit"
-                      />
-                    </div>
-                    <div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
-                      <el-input
-                        style="width: 60px; display: block"
-                        size="mini"
-                        type="number"
-                        placeholder="上限"
-                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                        v-model="chartLimit.rightTwoMax"
-                        @change="changeLimit"
-                      />
-                      <el-input
-                        class="min-data-input"
-                        size="mini"
-                        type="number"
-                        placeholder="下限"
-                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                        v-model="chartLimit.rightTwoMin"
-                        @change="changeLimit"
-                      />
-                    </div>
-                    </template>
-
-                    <!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
-                    <template v-if="[7,10,11].includes(chartInfo.ChartType)">	
-                      <div class="range-cont left">
+                    <!--  <div class="range-cont left" v-if="leftIndex != -1">
                         <el-input
                           style="width: 60px; display: block"
                           size="mini"
                           type="number"
                           :placeholder="$t('Chart.up_limit')"
                           :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                          v-model="chartLimit.max"
-                          @change="changeLimit"
+                          v-model="tableData[leftIndex].MaxData"
                         />
                         <el-input
                           class="min-data-input"
@@ -529,227 +422,356 @@
                           type="number"
                           :placeholder="$t('Chart.low_limit')"
                           :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                          v-model="chartLimit.min"
-                          @change="changeLimit"
+                          v-model="tableData[leftIndex].MinData"
                         />
                       </div>
-                      <!-- x轴上下限 -->
-                      <div class="range-cont bottom" v-if="chartLimit.x_min||chartLimit.x_max">
+                      <div 
+                        class="range-cont right" 
+                        v-if="rightIndex != -1"
+                      >
                         <el-input
-                          class="left"
+                          style="width: 60px; display: block"
+                          size="mini"
+                          type="number"
+                          :placeholder="$t('Chart.up_limit')"
+                          :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                          v-model="tableData[rightIndex].MaxData"
+                        />
+                        <el-input
+                          class="min-data-input"
                           size="mini"
                           type="number"
                           :placeholder="$t('Chart.low_limit')"
                           :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                          v-model="chartLimit.x_min"
-                          @change="changeLimit"
+                          v-model="tableData[rightIndex].MinData"
                         />
+                      </div>
+                      <div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
                         <el-input
-                          class="left"
+                          style="width: 60px; display: block"
                           size="mini"
                           type="number"
                           :placeholder="$t('Chart.up_limit')"
                           :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
-                          v-model="chartLimit.x_max"
+                          v-model="tableData[rightTwoIndex].MaxData"
+                        />
+                        <el-input
+                          class="min-data-input"
+                          size="mini"
+                          type="number"
+                          :placeholder="$t('Chart.low_limit')"
+                          :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                          v-model="tableData[rightTwoIndex].MinData"
+                        />
+                      </div> -->
+                      <template v-if="![7,10,11].includes(chartInfo.ChartType)">
+                          <div class="range-cont left" v-if="leftIndex != -1">
+                              <el-input
+                                  style="width: 60px; display: block"
+                                  size="mini"
+                                  type="number"
+                                  placeholder="上限"
+                                  :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                                  v-model="chartLimit.max"
+                                  @change="changeLimit"
+                              />
+                              <el-input
+                                  class="min-data-input"
+                                  size="mini"
+                                  type="number"
+                                  placeholder="下限"
+                                  :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                                  v-model="chartLimit.min"
+                                  @change="changeLimit"
+                              />
+                          </div>
+                      <div 
+                        class="range-cont right" 
+                        v-if="rightIndex != -1"
+                      >
+                        <el-input
+                          style="width: 60px; display: block"
+                          size="mini"
+                          type="number"
+                          placeholder="上限"
+                          :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                          v-model="chartLimit.rightMax"
+                          @change="changeLimit"
+                        />
+                        <el-input
+                          class="min-data-input"
+                          size="mini"
+                          type="number"
+                          placeholder="下限"
+                          :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                          v-model="chartLimit.rightMin"
                           @change="changeLimit"
                         />
                       </div>
-                    </template>
-                  </div>
-                  <span class="chart-author"
-                    ><!-- 作者 -->{{$t('Chart.Detail.author')}}:{{ chartInfo.SysUserRealName || '' }}</span
-                  >
+                      <div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
+                        <el-input
+                          style="width: 60px; display: block"
+                          size="mini"
+                          type="number"
+                          placeholder="上限"
+                          :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                          v-model="chartLimit.rightTwoMax"
+                          @change="changeLimit"
+                        />
+                        <el-input
+                          class="min-data-input"
+                          size="mini"
+                          type="number"
+                          placeholder="下限"
+                          :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                          v-model="chartLimit.rightTwoMin"
+                          @change="changeLimit"
+                        />
+                      </div>
+                      </template>
+
+                      <!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
+                      <template v-if="[7,10,11].includes(chartInfo.ChartType)">	
+                        <div class="range-cont left">
+                          <el-input
+                            style="width: 60px; display: block"
+                            size="mini"
+                            type="number"
+                            :placeholder="$t('Chart.up_limit')"
+                            :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                            v-model="chartLimit.max"
+                            @change="changeLimit"
+                          />
+                          <el-input
+                            class="min-data-input"
+                            size="mini"
+                            type="number"
+                            :placeholder="$t('Chart.low_limit')"
+                            :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                            v-model="chartLimit.min"
+                            @change="changeLimit"
+                          />
+                        </div>
+                        <!-- x轴上下限 -->
+                        <div class="range-cont bottom" v-if="chartLimit.x_min||chartLimit.x_max">
+                          <el-input
+                            class="left"
+                            size="mini"
+                            type="number"
+                            :placeholder="$t('Chart.low_limit')"
+                            :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                            v-model="chartLimit.x_min"
+                            @change="changeLimit"
+                          />
+                          <el-input
+                            class="left"
+                            size="mini"
+                            type="number"
+                            :placeholder="$t('Chart.up_limit')"
+                            :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
+                            v-model="chartLimit.x_max"
+                            @change="changeLimit"
+                          />
+                        </div>
+                      </template>
+                    </div>
+                    <span class="chart-author"
+                      ><!-- 作者 -->{{$t('Chart.Detail.author')}}:{{ chartInfo.SysUserRealName || '' }}</span
+                    >
+
+                    <div class="chart-bottom-insruction-info">
 
-                  <div class="chart-bottom-insruction-info">
+                      <div class="chart-source" >
+                          <span
+                            v-if="chartInfo.SourcesFrom&&JSON.parse(chartInfo.SourcesFrom).isShow"
+                            :style="`
+                            color: ${JSON.parse(chartInfo.SourcesFrom).color};
+                            fontSize: ${ JSON.parse(chartInfo.SourcesFrom).fontSize }px;
+                          `"
+                          ><!-- 来源 -->{{$t('Chart.Detail.source')}}:{{ JSON.parse(chartInfo.SourcesFrom).text}}</span>
+                      </div>
 
-                    <div class="chart-source" >
-                        <span
-                          v-if="chartInfo.SourcesFrom&&JSON.parse(chartInfo.SourcesFrom).isShow"
-                          :style="`
-                          color: ${JSON.parse(chartInfo.SourcesFrom).color};
-                          fontSize: ${ JSON.parse(chartInfo.SourcesFrom).fontSize }px;
+                      <!-- 公历农历切换 只用于季节性图 -->
+                      <el-radio-group
+                        v-model="calendar_type"
+                        class="calendar-cont"
+                        v-if="chartInfo.ChartType === 2"
+                        @change="getPreviewChartInfo"
+                      >
+                        <el-radio-button label="公历">{{$t('Chart.calendar_gre')}}</el-radio-button>
+                        <el-radio-button label="农历">{{$t('Chart.calendar_lunar')}}</el-radio-button>
+                      </el-radio-group>
+
+                      <!-- 图表说明 -->
+                      <div 
+                        class="chart-instruction" 
+                        v-if="chartInfo.Instructions&&JSON.parse(chartInfo.Instructions).isShow"
+                        v-text="JSON.parse(chartInfo.Instructions).text"
+                        :style="`
+                          color: ${JSON.parse(chartInfo.Instructions).color};
+                          fontSize: ${ JSON.parse(chartInfo.Instructions).fontSize }px
                         `"
-                        ><!-- 来源 -->{{$t('Chart.Detail.source')}}:{{ JSON.parse(chartInfo.SourcesFrom).text}}</span>
+                      ></div>
                     </div>
-
-                    <!-- 公历农历切换 只用于季节性图 -->
-                    <el-radio-group
-                      v-model="calendar_type"
-                      class="calendar-cont"
-                      v-if="chartInfo.ChartType === 2"
-                      @change="getPreviewChartInfo"
-                    >
-                      <el-radio-button label="公历">{{$t('Chart.calendar_gre')}}</el-radio-button>
-							        <el-radio-button label="农历">{{$t('Chart.calendar_lunar')}}</el-radio-button>
-                    </el-radio-group>
-
-                    <!-- 图表说明 -->
-                    <div 
-                      class="chart-instruction" 
-                      v-if="chartInfo.Instructions&&JSON.parse(chartInfo.Instructions).isShow"
-                      v-text="JSON.parse(chartInfo.Instructions).text"
-                      :style="`
-                        color: ${JSON.parse(chartInfo.Instructions).color};
-                        fontSize: ${ JSON.parse(chartInfo.Instructions).fontSize }px
-                      `"
-                    ></div>
+                    
                   </div>
-                  
-                </div>
 
-                <!-- 异常显示 -->
-                <p class="error-tip" style="min-height: 400px;" v-if="chartInfo.WarnMsg">{{chartInfo.WarnMsg}}</p>
-              </el-col>
-              <el-col :span="3" style="position: absolute;height: 100%;right: 0;min-width: 115px;">
-                <ul class="right-actions">
-                    <li><!-- 操作 -->{{$t('Table.column_operations')}}</li>
-                    <li
-                      v-permission="permissionBtn.chartLibPermission.chartLib_share"
-                      class="span-item shareLink"
-                      @click="copyChartConfirm('url')"
-                      :data-clipboard-text="linkUrl"
-                      v-if="!chartInfo.Disabled"
-                    >
-                      <i class="el-icon-share"/>&nbsp;<!-- 分享 -->
-                      {{$t('Chart.chart_share_btn')}}
-                    </li>
-                    <li
-                      v-permission="permissionBtn.chartLibPermission.chartLib_addMy"
-                      class="span-item"
-                      @click="addMychartHandle(chartInfo)"
-                    >
-                      <img
-                        :src="$icons.chart_join_ico"
-                        alt=""
-                        style="width: 13px; height: 12px; vertical-align: middle"
-                      /><!-- 加入我的图库 -->{{$t('Chart.chart_addmy_btn')}}
-                    </li>
-                    <li 
-                      v-permission="permissionBtn.chartLibPermission.chartLib_refresh"
-                      class="span-item" 
-                      @click="refreshHandle"
-                    >
-                      <span>
-                        <i class="el-icon-refresh" style="margin-left:0"/>&nbsp;<!-- 刷新 -->{{$t('Edb.detail_refresh_btn')}} 
-                      </span>
-                    </li>
-                    <li 
-                      v-permission="permissionBtn.chartLibPermission.chartLib_save"
-                      class="span-item"
-                    >
-                      <span @click="saveChartHandle('')">
-                        <i class="el-icon-collection" />&nbsp;<!-- 保存 -->{{$t('Chart.chart_save_btn')}}
-                      </span>
-                    </li>
-                    <li 
-                      v-permission="permissionBtn.chartLibPermission.chartLib_otherSave"
-                      class="span-item"
-                    >
-                      <span @click="saveChartOtherHandle">
-                        <i class="el-icon-document-add" />&nbsp;<!-- 另存为 -->{{$t('Chart.chart_copy_btn')}}
-                      </span>
-                    </li>
-                    <li 
-                      v-permission="permissionBtn.chartLibPermission.chartLib_edit"
-                      class="span-item"
-                      v-if="chartInfo.IsEdit"
-                      @click="editChartHandle"
-                    >
-                      <img
-                        src="~@/assets/img/set_m/edit.png"
-                        alt=""
-                        style="width: 13px; height: 12px;"
-                      />&nbsp;<!-- 编辑 -->{{$t('Chart.chart_edit_btn')}}
-                    </li>
-                    <li 
-                      v-permission="permissionBtn.chartLibPermission.chartLib_copyOffice"
-                      class="span-item copy"
-                      @click="copyChartConfirm('office')"
-                      v-if="!chartInfo.Disabled"
-                    >
-                      <i class="el-icon-document-copy" />&nbsp;<!-- 复制至office -->{{$t('Chart.chart_copyoffice')}}
-                    </li>
-                    <li 
-                      v-permission="permissionBtn.chartLibPermission.chartLib_copyWechat"
-                      class="span-item copy"
-                      @click="copyChartConfirm('微信')"
-                      v-if="!chartInfo.Disabled"
-                    >
-                      <img style="width: 13px; height: 12px;vertical-align: middle" src="~@/assets/img/chart_m/WeChat.jpg" />&nbsp;<!-- 复制至微信 -->{{$t('Chart.chart_copywx')}}
-                    </li>
-                    <li 
-                      v-permission="permissionBtn.chartLibPermission.chartLib_enNameSetting"
-                      class="span-item copy"
-                      @click="openEnNameDia"
+                  <!-- 异常显示 -->
+                  <p class="error-tip" style="min-height: 400px;" v-if="chartInfo.WarnMsg">{{chartInfo.WarnMsg}}</p>
+                </el-col>
+                <el-col :span="3" style="position: absolute;height: 100%;right: 0;min-width: 115px;">
+                  <ul class="right-actions">
+                      <li><!-- 操作 -->{{$t('Table.column_operations')}}</li>
+                      <li
+                        v-permission="permissionBtn.chartLibPermission.chartLib_share"
+                        class="span-item shareLink"
+                        @click="copyChartConfirm('url')"
+                        :data-clipboard-text="linkUrl"
+                        v-if="!chartInfo.Disabled"
+                      >
+                        <i class="el-icon-share"/>&nbsp;<!-- 分享 -->
+                        {{$t('Chart.chart_share_btn')}}
+                      </li>
+                      <li
+                        v-permission="permissionBtn.chartLibPermission.chartLib_addMy"
+                        class="span-item"
+                        @click="addMychartHandle(chartInfo)"
+                      >
+                        <img
+                          :src="$icons.chart_join_ico"
+                          alt=""
+                          style="width: 13px; height: 12px; vertical-align: middle"
+                        /><!-- 加入我的图库 -->{{$t('Chart.chart_addmy_btn')}}
+                      </li>
+                      <li 
+                        v-permission="permissionBtn.chartLibPermission.chartLib_refresh"
+                        class="span-item" 
+                        @click="refreshHandle"
+                      >
+                        <span>
+                          <i class="el-icon-refresh" style="margin-left:0"/>&nbsp;<!-- 刷新 -->{{$t('Edb.detail_refresh_btn')}} 
+                        </span>
+                      </li>
+                      <li 
+                        v-permission="permissionBtn.chartLibPermission.chartLib_save"
+                        class="span-item"
+                      >
+                        <span @click="saveChartHandle('')">
+                          <i class="el-icon-collection" />&nbsp;<!-- 保存 -->{{$t('Chart.chart_save_btn')}}
+                        </span>
+                      </li>
+                      <li 
+                        v-permission="permissionBtn.chartLibPermission.chartLib_otherSave"
+                        class="span-item"
+                      >
+                        <span @click="saveChartOtherHandle">
+                          <i class="el-icon-document-add" />&nbsp;<!-- 另存为 -->{{$t('Chart.chart_copy_btn')}}
+                        </span>
+                      </li>
+                      <li 
+                        v-permission="permissionBtn.chartLibPermission.chartLib_edit"
+                        class="span-item"
+                        v-if="chartInfo.IsEdit"
+                        @click="editChartHandle"
+                      >
+                        <img
+                          src="~@/assets/img/set_m/edit.png"
+                          alt=""
+                          style="width: 13px; height: 12px;"
+                        />&nbsp;<!-- 编辑 -->{{$t('Chart.chart_edit_btn')}}
+                      </li>
+                      <li 
+                        v-permission="permissionBtn.chartLibPermission.chartLib_copyOffice"
+                        class="span-item copy"
+                        @click="copyChartConfirm('office')"
+                        v-if="!chartInfo.Disabled"
+                      >
+                        <i class="el-icon-document-copy" />&nbsp;<!-- 复制至office -->{{$t('Chart.chart_copyoffice')}}
+                      </li>
+                      <li 
+                        v-permission="permissionBtn.chartLibPermission.chartLib_copyWechat"
+                        class="span-item copy"
+                        @click="copyChartConfirm('微信')"
+                        v-if="!chartInfo.Disabled"
+                      >
+                        <img style="width: 13px; height: 12px;vertical-align: middle" src="~@/assets/img/chart_m/WeChat.jpg" />&nbsp;<!-- 复制至微信 -->{{$t('Chart.chart_copywx')}}
+                      </li>
+                      <li 
+                        v-permission="permissionBtn.chartLibPermission.chartLib_enNameSetting"
+                        class="span-item copy"
+                        @click="openEnNameDia"
+                      >
+                        <img style="width: 16px;vertical-align: middle" :src="$icons.to_en" />&nbsp;<!-- 设置英文名称 -->{{$t('Edb.detail_en_btn')}}
+                      </li>
+                      <li 
+                        v-permission="permissionBtn.chartLibPermission.chartLib_del"
+                        class="span-item"
+                        style="color: #ff4040"
+                        @click="delChartHandle"
+                        v-if="chartInfo.IsEdit"
+                      >
+                        <i class="el-icon-delete" style="color: #ff4040" />&nbsp;<!-- 删除 -->{{$t('Chart.chart_del_btn')}}
+                      </li>
+                  </ul>
+                </el-col>
+              </el-row>
+              <el-table
+                :data="tableData"
+                ref="tableRef"
+                highlight-current-row
+                border
+              >
+                <el-table-column
+                  v-for="item in tableColums"
+                  :key="item.label"
+                  :label="item.label"
+                  :width="item.widthsty"
+                  :min-width="item.minwidthsty"
+                  align="center"
+                >
+                  <template slot-scope="scope">
+                    <span v-if="item.key==='SourceName'">
+                      {{scope.row[item.key]}}
+                      <i 
+                        class="el-icon-tickets" 
+                        style="color:#409EFF;font-size:18px" 
+                        @click="toHistoryPage(scope.row.EdbInfoId,$route.matched)"
+                        v-if="scope.row.EdbType===2"
+                      />
+                    </span>
+                    <span v-else>{{ currentLang==='en' ? (scope.row[item.enKey]||scope.row[item.key]) : scope.row[item.key] }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  :label="$t('Table.column_operations')"
+                  key="Copy"
+                  align="center"
+                  width="110"
+                >
+                  <template slot-scope="scope" v-if="scope.row.HaveOperaAuth">
+                    <span 
+                      v-permission="permissionBtn.chartLibPermission.chartLib_copyData"
+                      class="editsty" @click="copyCode(scope.row)"
                     >
-                      <img style="width: 16px;vertical-align: middle" :src="$icons.to_en" />&nbsp;<!-- 设置英文名称 -->{{$t('Edb.detail_en_btn')}}
-                    </li>
-                    <li 
-                      v-permission="permissionBtn.chartLibPermission.chartLib_del"
-                      class="span-item"
-                      style="color: #ff4040"
-                      @click="delChartHandle"
-                      v-if="chartInfo.IsEdit"
+                      <i class="el-icon-document-copy" />&nbsp;<!-- 复制数据 -->{{$t('Edb.detail_copydata_btn')}}
+                    </span>
+                    <span 
+                      v-permission="permissionBtn.chartLibPermission.chartLib_viewData"
+                      class="editsty"
+                      @click="viewTarget(scope.row)"
                     >
-                      <i class="el-icon-delete" style="color: #ff4040" />&nbsp;<!-- 删除 -->{{$t('Chart.chart_del_btn')}}
-                    </li>
-                </ul>
-              </el-col>
-            </el-row>
-            <el-table
-              :data="tableData"
-              ref="tableRef"
-              highlight-current-row
-              border
-            >
-              <el-table-column
-                v-for="item in tableColums"
-                :key="item.label"
-                :label="item.label"
-                :width="item.widthsty"
-                :min-width="item.minwidthsty"
-                align="center"
-              >
-                <template slot-scope="scope">
-                  <span v-if="item.key==='SourceName'">
-                    {{scope.row[item.key]}}
-                    <i 
-                      class="el-icon-tickets" 
-                      style="color:#409EFF;font-size:18px" 
-                      @click="toHistoryPage(scope.row.EdbInfoId,$route.matched)"
-                      v-if="scope.row.EdbType===2"
-                    />
-                  </span>
-                  <span v-else>{{ currentLang==='en' ? (scope.row[item.enKey]||scope.row[item.key]) : scope.row[item.key] }}</span>
-                </template>
-              </el-table-column>
-              <el-table-column
-                :label="$t('Table.column_operations')"
-                key="Copy"
-                align="center"
-                width="110"
-              >
-                <template slot-scope="scope">
-                  <span 
-                    v-permission="permissionBtn.chartLibPermission.chartLib_copyData"
-                    class="editsty" @click="copyCode(scope.row)"
-                  >
-                    <i class="el-icon-document-copy" />&nbsp;<!-- 复制数据 -->{{$t('Edb.detail_copydata_btn')}}
-                  </span>
-                  <span 
-                    v-permission="permissionBtn.chartLibPermission.chartLib_viewData"
-                    class="editsty"
-                    @click="viewTarget(scope.row)"
-                  >
-                    <!-- 查看数据 -->{{$t('Edb.detail_lookdata_btn')}}
-                  </span>
-                </template>
-              </el-table-column>
-              <div slot="empty">
-                <tableNoData :text="$t('Table.no_edb_msg')" size="mini"/>
-              </div>
-            </el-table>
-          </div>
+                      <!-- 查看数据 -->{{$t('Edb.detail_lookdata_btn')}}
+                    </span>
+                  </template>
+                </el-table-column>
+                <div slot="empty">
+                  <tableNoData :text="$t('Table.no_edb_msg')" size="mini"/>
+                </div>
+              </el-table>
+            </div>
+          </template>
+
+          <noDataAuth v-else text="暂无图表权限,如需权限请联系管理员!"/>
         </div>
         <!-- ==============图表列表展示============= -->
         <div class="chart-public-cont" v-else>

+ 11 - 0
src/views/dataEntry_manage/codecount/index.vue

@@ -127,7 +127,18 @@
 										:key="item.EdbInfoId"
 										:label="eta_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 										:value="item.EdbInfoId"
+										:disabled="!item.HaveOperaAuth"
 									>
+										<div>
+											<img 
+												:src="$icons.lock_ico2" 
+												width="18" 
+												height="18" 
+												style="vertical-align:middle" 
+												v-if="!item.HaveOperaAuth"
+											/>
+											{{eta_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+										</div>
 									</el-option>
 								</el-select>
 

+ 33 - 0
src/views/dataEntry_manage/components/satterSeriesDia.vue

@@ -65,7 +65,18 @@
               :key="item.EdbInfoId"
               :label="item.EdbName"
               :value="item.EdbInfoId"
+              :disabled="!item.HaveOperaAuth"
             >
+              <div>
+                <img 
+                  :src="$icons.lock_ico2" 
+                  width="18" 
+                  height="18" 
+                  style="vertical-align:middle" 
+                  v-if="!item.HaveOperaAuth"
+                />
+                {{item.EdbName}}
+              </div>
             </el-option>
           </el-select>
           <ul class="targets-ul">
@@ -124,7 +135,18 @@
               :key="item.EdbInfoId"
               :label="item.EdbName"
               :value="item.EdbInfoId"
+              :disabled="!item.HaveOperaAuth"
             >
+              <div>
+                <img 
+                  :src="$icons.lock_ico2" 
+                  width="18" 
+                  height="18" 
+                  style="vertical-align:middle" 
+                  v-if="!item.HaveOperaAuth"
+                />
+                {{item.EdbName}}
+              </div>
             </el-option>
           </el-select>
           <ul class="targets-ul">
@@ -308,7 +330,18 @@
                 :key="item.EdbInfoId"
                 :label="item.EdbName"
                 :value="item.EdbInfoId"
+                :disabled="!item.HaveOperaAuth"
               >
+                <div>
+									<img 
+										:src="$icons.lock_ico2" 
+										width="18" 
+										height="18" 
+										style="vertical-align:middle" 
+										v-if="!item.HaveOperaAuth"
+									/>
+									{{item.EdbName}}
+								</div>
               </el-option>
             </el-select>
           </el-form-item>

+ 11 - 0
src/views/dataEntry_manage/databaseComponents/batchComptedDialog.vue

@@ -45,7 +45,18 @@
 							:key="item.EdbInfoId"
 							:label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 							:value="item.EdbInfoId"
+							:disabled="!item.HaveOperaAuth"
 						>
+							<div>
+								<img 
+									:src="$icons.lock_ico2" 
+									width="18" 
+									height="18" 
+									style="vertical-align:middle" 
+									v-if="!item.HaveOperaAuth"
+								/>
+								{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+							</div>
 						</el-option>
 					</el-select>
 

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

@@ -124,7 +124,19 @@
                                 :key="item.EdbInfoId"
                                 :label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
                                 :value="item.EdbInfoId"
-                            />
+                                :disabled="!item.HaveOperaAuth"
+                            >
+                                <div>
+									<img 
+										:src="$icons.lock_ico2" 
+										width="18" 
+										height="18" 
+										style="vertical-align:middle" 
+										v-if="!item.HaveOperaAuth"
+									/>
+									{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+								</div>
+                            </el-option>
                         </el-select>
                     </el-form-item>
                     <el-form-item required label="公式">

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

@@ -40,9 +40,19 @@
 							:key="item.EdbInfoId"
 							:label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 							:value="item.EdbInfoId"
+							:disabled="!item.HaveOperaAuth"
 						>
 							<edbDetailPopover :info="item">
-								<div slot="reference">{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}</div>
+								<div slot="reference">
+									<img 
+										:src="$icons.lock_ico2" 
+										width="18" 
+										height="18" 
+										style="vertical-align:middle" 
+										v-if="!item.HaveOperaAuth"
+									/>
+									{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+								</div>
 							</edbDetailPopover>
 						</el-option>
 					</el-select>

+ 11 - 0
src/views/dataEntry_manage/databaseComponents/diffusionIndexDia.vue

@@ -41,7 +41,18 @@
                 :key="item.EdbInfoId"
                 :label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
                 :value="item.EdbInfoId"
+								:disabled="!item.HaveOperaAuth"
               >
+									<div>
+										<img 
+											:src="$icons.lock_ico2" 
+											width="18" 
+											height="18" 
+											style="vertical-align:middle" 
+											v-if="!item.HaveOperaAuth"
+										/>
+										{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+									</div>
               </el-option>
             </el-select>
             <i

+ 22 - 0
src/views/dataEntry_manage/databaseComponents/fittingResidueDia.vue

@@ -49,7 +49,18 @@
               :key="item.EdbInfoId"
               :label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
               :value="item.EdbInfoId"
+							:disabled="!item.HaveOperaAuth"
             >
+							<div>
+								<img 
+									:src="$icons.lock_ico2" 
+									width="18" 
+									height="18" 
+									style="vertical-align:middle" 
+									v-if="!item.HaveOperaAuth"
+								/>
+								{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+							</div>
             </el-option>
           </el-select>
           <span v-if="formData.self_variate" style="color: #409EFF;margin-left: 20px;">{{formData.self_edb_date[0]+'至'+ formData.self_edb_date[1]}}</span>
@@ -93,7 +104,18 @@
               :key="item.EdbInfoId"
               :label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
               :value="item.EdbInfoId"
+							:disabled="!item.HaveOperaAuth"
             >
+							<div>
+								<img 
+									:src="$icons.lock_ico2" 
+									width="18" 
+									height="18" 
+									style="vertical-align:middle" 
+									v-if="!item.HaveOperaAuth"
+								/>
+								{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+							</div>
             </el-option>
           </el-select>
           <span v-if="formData.depend_variate" style="color: #409EFF;margin-left: 20px;">{{formData.depend_edb_date[0]+'至'+ formData.depend_edb_date[1]}}</span>

+ 44 - 0
src/views/dataEntry_manage/databaseComponents/jointTargetDia.vue

@@ -61,7 +61,18 @@
 							:key="item.EdbInfoId"
 							:label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 							:value="item.EdbInfoId"
+							:disabled="!item.HaveOperaAuth"
 						>
+							<div>
+								<img 
+									:src="$icons.lock_ico2" 
+									width="18" 
+									height="18" 
+									style="vertical-align:middle" 
+									v-if="!item.HaveOperaAuth"
+								/>
+								{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+							</div>
 						</el-option>
 					</el-select>
 					<span v-if="formData.pre_edb">({{$t('Edb.Detail.e_start_time')}}:{{ searchOptions.find(item => item.EdbInfoId === formData.pre_edb) ? searchOptions.find(item => item.EdbInfoId === formData.pre_edb).StartDate : ''}})</span>
@@ -87,7 +98,18 @@
 								:key="item.EdbInfoId"
 								:label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 								:value="item.EdbInfoId"
+								:disabled="!item.HaveOperaAuth"
 							>
+								<div>
+									<img 
+										:src="$icons.lock_ico2" 
+										width="18" 
+										height="18" 
+										style="vertical-align:middle" 
+										v-if="!item.HaveOperaAuth"
+									/>
+									{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+								</div>
 							</el-option>
 						</el-select>
 						<span v-if="formData.after_edb">({{$t('Edb.Detail.e_latest_date')}}:{{ searchOptions.find(item => item.EdbInfoId === formData.after_edb) ? searchOptions.find(item => item.EdbInfoId === formData.after_edb).EndDate : ''}})</span>
@@ -115,7 +137,18 @@
 								:key="item.EdbInfoId"
 								:label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 								:value="item.EdbInfoId"
+								:disabled="!item.HaveOperaAuth"
 							>
+								<div>
+									<img 
+										:src="$icons.lock_ico2" 
+										width="18" 
+										height="18" 
+										style="vertical-align:middle" 
+										v-if="!item.HaveOperaAuth"
+									/>
+									{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+								</div>
 							</el-option>
 						</el-select>
 					<span v-if="formData.old_stay_edb">({{$t('EtaBasePage.label_end_date')}}:{{searchMonthOptions.find(item => item.EdbInfoId === formData.old_stay_edb) ? searchMonthOptions.find(item => item.EdbInfoId === formData.old_stay_edb).EndDate : ''}})</span>
@@ -139,7 +172,18 @@
 							:key="item.EdbInfoId"
 							:label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 							:value="item.EdbInfoId"
+							:disabled="!item.HaveOperaAuth"
 						>
+							<div>
+								<img 
+									:src="$icons.lock_ico2" 
+									width="18" 
+									height="18" 
+									style="vertical-align:middle" 
+									v-if="!item.HaveOperaAuth"
+								/>
+								{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+							</div>
 						</el-option>
 					</el-select>
 				</el-form-item>

+ 33 - 16
src/views/dataEntry_manage/databaseComponents/operationDialog.vue

@@ -46,7 +46,18 @@
 						:key="item.EdbInfoId"
 						:label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 						:value="item.EdbInfoId"
+						:disabled="!item.HaveOperaAuth"
 					>
+						<div>
+								<img 
+									:src="$icons.lock_ico2" 
+									width="18" 
+									height="18" 
+									style="vertical-align:middle" 
+									v-if="!item.HaveOperaAuth"
+								/>
+								{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+							</div>
 					</el-option>
 				</el-select>
 				<i class="el-icon-tickets" style="color:#409EFF;font-size:18px" @click="handleSelectBtnClick" v-if="select_target"/>
@@ -85,21 +96,21 @@
 					</div>
 				</el-table>
 				<ul 
-				class="data-ul" 
-				ref="dataUl" 
-				@scroll="scrollHandle"
-				v-if="dataList.length">
-					<li
-						class="value-item"
-						v-for="(item, index) in dataList"
-						:key="item.EdbDataId"
-					>
-						<span class="value-label">
-							<i class="new-tag" v-if="index === 0"></i>
-							{{item.DataTime}}
-						</span>
-						<span class="value-label" style="min-width:200px;text-align:center;">{{item.Value}}</span>
-					</li>
+					class="data-ul" 
+					ref="dataUl" 
+					@scroll="scrollHandle"
+					v-if="dataList.length">
+						<li
+							class="value-item"
+							v-for="(item, index) in dataList"
+							:key="item.EdbDataId"
+						>
+							<span class="value-label">
+								<i class="new-tag" v-if="index === 0"></i>
+								{{item.DataTime}}
+							</span>
+							<span class="value-label" style="min-width:200px;text-align:center;">{{item.Value}}</span>
+						</li>
 				</ul>
 				<div class="form-cont">
 					<el-form
@@ -557,7 +568,13 @@ export default {
 						res.Data.Item.ModifyTime = res.Data.Item.ModifyTime.substr(0,10);
 						this.tableData = [res.Data.Item] || [];
 						this.haveMore =  this.page_no < res.Data.Paging.Pages ? true : false;
-						this.dataList = this.page_no === 1 ? (res.Data.Item.DataList || []) : this.dataList.concat(res.Data.Item.DataList);
+
+						//原指标有权限
+						if(res.Data.Item.HaveOperaAuth) {
+							this.dataList = this.page_no === 1 ? (res.Data.Item.DataList || []) : this.dataList.concat(res.Data.Item.DataList);
+						}else {
+							this.dataList = []
+						}
 					}else {
 						this.tableData = [];
 						this.dataList = [];

+ 11 - 1
src/views/dataEntry_manage/databaseComponents/replaceDialog.vue

@@ -44,9 +44,19 @@
 						:key="item.EdbInfoId"
 						:label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 						:value="item.EdbInfoId"
+						:disabled="!item.HaveOperaAuth"
 					>
 						<edbDetailPopover :info="item">
-							<div slot="reference">{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}</div>
+							<div slot="reference">
+								<img 
+										:src="$icons.lock_ico2" 
+										width="18" 
+										height="18" 
+										style="vertical-align:middle" 
+										v-if="!item.HaveOperaAuth"
+									/>
+								{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+							</div>
 						</edbDetailPopover>
 					</el-option>
 				</el-select>

+ 11 - 0
src/views/dataEntry_manage/databaseComponents/smoothEdbDialog.vue

@@ -43,7 +43,18 @@
                             :key="item.EdbInfoId"
                             :label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
                             :value="item.EdbInfoId"
+                            :disabled="!item.HaveOperaAuth"
                         >
+                            <div>
+                                <img 
+                                    :src="$icons.lock_ico2" 
+                                    width="18" 
+                                    height="18" 
+                                    style="vertical-align:middle" 
+                                    v-if="!item.HaveOperaAuth"
+                                />
+                                {{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+                            </div>
                         </el-option>
                     </el-select>
                     <i class="el-icon-tickets" style="color:#409EFF;font-size:18px" @click="handleSelectBtnClick" v-if="select_target"/>

+ 20 - 1
src/views/dataEntry_manage/databaseList.vue

@@ -43,6 +43,16 @@
 						:label="currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 						:value="item.EdbInfoId"
 					>
+						<div>
+							<img 
+								:src="$icons.lock_ico2" 
+								width="18" 
+								height="18" 
+								style="vertical-align:middle" 
+								v-if="!item.HaveOperaAuth"
+							/>
+							{{currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+						</div>
 					</el-option>
 				</el-select>
 			</div>
@@ -120,6 +130,13 @@
 								: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
@@ -234,7 +251,7 @@
 			</div>
 			<!-- 指标详情 -->
 			<div class="main-right right detail-wrap" id="right" v-show="isShowDetail">
-				<div class="detail">
+				<div class="detail" v-if="EdbData.HaveOperaAuth">
 					<div class="header">
 						<el-tabs v-model="activeTab" @tab-click="rePainChart">
 							<el-tab-pane :label="$t('Edb.trend_chart_tab')" name="Chart">
@@ -364,6 +381,8 @@
 						</div>
 					</div>
 				</div>
+
+				<noDataAuth v-else text="暂无指标权限,如需权限请联系管理员!"/>
 				
 			</div>
 		</div>

+ 12 - 2
src/views/dataEntry_manage/editChart.vue

@@ -94,9 +94,19 @@
 									:key="item.EdbInfoId"
 									:label="chart_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 									:value="item.EdbInfoId"
+									:disabled="!item.HaveOperaAuth"
 								>
 									<edbDetailPopover :info="item">
-										<div slot="reference">{{chart_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName }}</div>
+										<div slot="reference">
+											<img 
+												:src="$icons.lock_ico2" 
+												width="18" 
+												height="18" 
+												style="vertical-align:middle" 
+												v-if="!item.HaveOperaAuth"
+											/>
+											{{chart_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName }}
+										</div>
 									</edbDetailPopover>
 								</el-option>
 							</el-select>
@@ -677,7 +687,7 @@
 							align="center"
 							width="140"
 						>
-							<template slot-scope="scope">
+							<template slot-scope="scope" v-if="scope.row.HaveOperaAuth">
 								<span @click="delTarget(scope.row)" class="deletesty"><!-- 删除 -->{{$t('Table.delete_btn')}}&nbsp;</span>
 								<span v-permission="permissionBtn.chartLibPermission.chartLib_copyData"
 									class="editsty" @click="copyCode(scope.row)">

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

@@ -816,6 +816,8 @@ export default {
     async edbJumpToBase(edb) {
       //非详情页不跳转
       if(!this.disabled) return
+      
+      if(!edb.HaveOperaAuth) return this.$message.warning('暂无指标权限,如需权限请联系管理员!')
 
       const res = await dataBaseInterface.targetDetail({EdbInfoId:edb.EdbInfoId})
       if(res.Ret !== 200) return

+ 98 - 77
src/views/datasheet_manage/customAnalysis/list.vue

@@ -41,6 +41,16 @@
               :label="item.ExcelName"
               :value="item.ExcelInfoId"
             >
+              <div>
+                <img 
+                  :src="$icons.lock_ico2" 
+                  width="18" 
+                  height="18" 
+                  style="vertical-align:middle" 
+                  v-if="!item.HaveOperaAuth"
+                />
+                {{item.ExcelName}}
+              </div>
             </el-option>
           </el-select>
         </div>
@@ -85,6 +95,13 @@
                   (select_node === data.UniqueCode && node.Nodewidth) || ''
                 }`"
               >
+                <img 
+                  :src="$icons.lock_ico2" 
+                  width="18" 
+                  height="18" 
+                  style="vertical-align:middle" 
+                  v-if="!data.HaveOperaAuth&&data.ExcelInfoId"
+                />
                 <span>{{ data.ExcelClassifyName }}</span>
               </span>
               <span
@@ -149,86 +166,90 @@
       >
         <!-- 表格详情 -->
         <div class="sheet-detail-wrapper" v-if="select_id" >
-          <div class="detail-top">
-            <el-input
-              ref="sheetEditTitRef"
-              style="width: 400px"
-              :placeholder="$t('OnlineExcelPage.please_table_name_ipt')"
-              class="label-input"
-              v-model="sheet_title"
-              v-if="sheetDetailInfo.isEditTit"
-              @blur="changeValue(sheetDetailInfo, 'edit-tit')"
-            />
-            <div class="sheet-name"
-              @click="editNodeLabel(sheetDetailInfo, 'edit-tit')"
-              v-else>
-              {{ sheetDetailInfo.ExcelName }}
-              <i class="el-icon-edit"/>
-            </div>
-            <div class="sheet-anothor-info">
-              <span class="author">{{$t('OnlineExcelPage.author_info')}}{{ sheetDetailInfo.SysUserRealName }}</span>
-              <ul class="action-ul" v-if="sheetDetailInfo.Button">
-                <li style="color:#999999 ;">{{$t('OnlineExcelPage.recent_save_time_info')}}{{ saveTime }}</li>
-                <el-tooltip effect="dark" :content="$t('CustomAnalysisPage.up_save_tooltip')" placement="top-start">
-                    <li class="editsty" @click="HandleToPath" v-if="isSheetBtnShow('createedb')&&sheetDetailInfo.Button.OpEdbButton">
-                      <img src="~@/assets/img/icons/choose_bluebg_new.png"/>
-                      <span>{{$t('CustomAnalysisPage.generate_indicators_btn')}}</span>
-                    </li>
-                </el-tooltip>
-
-                <el-tooltip effect="dark" :content="$t('CustomAnalysisPage.up_save_tooltip')" placement="top-start">
-                    <li class="editsty" @click="refreshSheet" v-if="isSheetBtnShow('refresh')&&sheetDetailInfo.Button.RefreshEdbButton">
-                      <img src="~@/assets/img/icons/refresh_blue_new.png"/>
-                      <span>{{ isEdbReFreshLoading? $t('CustomAnalysisPage.refreshing_loading'):$t('CustomAnalysisPage.refresh_loading')}}</span>
-                    </li>
-                </el-tooltip>
-                <li class="editsty" @click="saveHandle" v-if="isSheetBtnShow('save')&&sheetDetailInfo.Button.OpButton">
-                  <img src="~@/assets/img/icons/save_blue_new.png"/>
-                  <span>{{$t('ETable.Btn.save_btn')}}</span>
-                </li>
-                <!-- <li
-                  class="editsty"
-                  @click="goEdit"
-                  v-if="(sheetDetailInfo.Button && sheetDetailInfo.Button.OpButton&&isSheetBtnShow('edit'))"
-                >
-                  <img src="~@/assets/img/icons/edit_blue_new.png" v-if="!editButtonText"/>
-                  <span>{{ editButtonText?editButtonText:'编辑' }}</span> 
-                </li> -->
-                <li
-                  class="editsty"
-                  @click="saveOtherHandle"
-                  v-if="isSheetBtnShow('otherSave')&&sheetDetailInfo.Button.CopyButton"
-                >
-                  <img src="~@/assets/img/icons/save_as_blue_new.png"/>
-                  <span>{{$t('ETable.Btn.save_as')}}</span>
-                </li>
-                <li class="editsty" @click="downloadExcel
-                (sheetDetailInfo)" v-if="isSheetBtnShow('download')&&sheetDetailInfo.Button.DownloadButton">
-                  <img src="~@/assets/img/icons/download_blue.png"/>
-                  <span>{{$t('ETable.Btn.download_btn')}}</span>
-                </li>
-                <li
-                  class="deletesty"
-                  v-if="(isSheetBtnShow('del')&&sheetDetailInfo.Button&&sheetDetailInfo.Button.DeleteButton)"
-                  @click="delSheetHandle({cell:sheetDetailInfo, type:'del'})"
-                >
-                  <img src="~@/assets/img/icons/delete-red.png"/>
-                  <span>{{$t('ETable.Btn.delete_btn')}}</span>
-                </li>
-              </ul>
+          
+          <!-- 有权限 -->
+          <template v-if="sheetDetailInfo.HaveOperaAuth">
+            <div class="detail-top">
+              <el-input
+                ref="sheetEditTitRef"
+                style="width: 400px"
+                :placeholder="$t('OnlineExcelPage.please_table_name_ipt')"
+                class="label-input"
+                v-model="sheet_title"
+                v-if="sheetDetailInfo.isEditTit"
+                @blur="changeValue(sheetDetailInfo, 'edit-tit')"
+              />
+              <div class="sheet-name"
+                @click="editNodeLabel(sheetDetailInfo, 'edit-tit')"
+                v-else>
+                {{ sheetDetailInfo.ExcelName }}
+                <i class="el-icon-edit"/>
+              </div>
+              <div class="sheet-anothor-info">
+                <span class="author">{{$t('OnlineExcelPage.author_info')}}{{ sheetDetailInfo.SysUserRealName }}</span>
+                <ul class="action-ul" v-if="sheetDetailInfo.Button">
+                  <li style="color:#999999 ;">{{$t('OnlineExcelPage.recent_save_time_info')}}{{ saveTime }}</li>
+                  <el-tooltip effect="dark" :content="$t('CustomAnalysisPage.up_save_tooltip')" placement="top-start">
+                      <li class="editsty" @click="HandleToPath" v-if="isSheetBtnShow('createedb')&&sheetDetailInfo.Button.OpEdbButton">
+                        <img src="~@/assets/img/icons/choose_bluebg_new.png"/>
+                        <span>{{$t('CustomAnalysisPage.generate_indicators_btn')}}</span>
+                      </li>
+                  </el-tooltip>
+
+                  <el-tooltip effect="dark" :content="$t('CustomAnalysisPage.up_save_tooltip')" placement="top-start">
+                      <li class="editsty" @click="refreshSheet" v-if="isSheetBtnShow('refresh')&&sheetDetailInfo.Button.RefreshEdbButton">
+                        <img src="~@/assets/img/icons/refresh_blue_new.png"/>
+                        <span>{{ isEdbReFreshLoading? $t('CustomAnalysisPage.refreshing_loading'):$t('CustomAnalysisPage.refresh_loading')}}</span>
+                      </li>
+                  </el-tooltip>
+                  <li class="editsty" @click="saveHandle" v-if="isSheetBtnShow('save')&&sheetDetailInfo.Button.OpButton">
+                    <img src="~@/assets/img/icons/save_blue_new.png"/>
+                    <span>{{$t('ETable.Btn.save_btn')}}</span>
+                  </li>
+                  <!-- <li
+                    class="editsty"
+                    @click="goEdit"
+                    v-if="(sheetDetailInfo.Button && sheetDetailInfo.Button.OpButton&&isSheetBtnShow('edit'))"
+                  >
+                    <img src="~@/assets/img/icons/edit_blue_new.png" v-if="!editButtonText"/>
+                    <span>{{ editButtonText?editButtonText:'编辑' }}</span> 
+                  </li> -->
+                  <li
+                    class="editsty"
+                    @click="saveOtherHandle"
+                    v-if="isSheetBtnShow('otherSave')&&sheetDetailInfo.Button.CopyButton"
+                  >
+                    <img src="~@/assets/img/icons/save_as_blue_new.png"/>
+                    <span>{{$t('ETable.Btn.save_as')}}</span>
+                  </li>
+                  <li class="editsty" @click="downloadExcel
+                  (sheetDetailInfo)" v-if="isSheetBtnShow('download')&&sheetDetailInfo.Button.DownloadButton">
+                    <img src="~@/assets/img/icons/download_blue.png"/>
+                    <span>{{$t('ETable.Btn.download_btn')}}</span>
+                  </li>
+                  <li
+                    class="deletesty"
+                    v-if="(isSheetBtnShow('del')&&sheetDetailInfo.Button&&sheetDetailInfo.Button.DeleteButton)"
+                    @click="delSheetHandle({cell:sheetDetailInfo, type:'del'})"
+                  >
+                    <img src="~@/assets/img/icons/delete-red.png"/>
+                    <span>{{$t('ETable.Btn.delete_btn')}}</span>
+                  </li>
+                </ul>
+              </div>
             </div>
-          </div>
 
-          <!-- <dataLoading :loading="isSheetLoading"/> -->
+            <!-- 表格 -->
+            <div class="sheet-wrap">
+              <Sheet
+                ref="sheetRef"
+                v-if="sheetConfigOpt.data"
+                :option="sheetConfigOpt"
+              />
+            </div>
+          </template>
 
-          <!-- 表格 -->
-          <div class="sheet-wrap">
-            <Sheet
-              ref="sheetRef"
-              v-if="sheetConfigOpt.data"
-              :option="sheetConfigOpt"
-            />
-          </div>
+          <noDataAuth v-else text="暂无表格权限,如需权限请联系管理员!"/>
         </div>
 
          <!-- 列表 -->

+ 125 - 102
src/views/datasheet_manage/sheetList.vue

@@ -43,6 +43,16 @@
               :label="item.ExcelName"
               :value="item.ExcelInfoId"
             >
+              <div>
+                <img 
+                  :src="$icons.lock_ico2" 
+                  width="18" 
+                  height="18" 
+                  style="vertical-align:middle" 
+                  v-if="!item.HaveOperaAuth"
+                />
+                {{item.ExcelName}}
+              </div>
             </el-option>
           </el-select>
         </div>
@@ -87,6 +97,13 @@
                   (select_node === data.UniqueCode && node.Nodewidth) || ''
                 }`"
               >
+                <img 
+                  :src="$icons.lock_ico2" 
+                  width="18" 
+                  height="18" 
+                  style="vertical-align:middle" 
+                  v-if="!data.HaveOperaAuth&&data.ExcelInfoId"
+                />
                 <span>{{ data.ExcelClassifyName }}</span>
               </span>
               <span
@@ -151,121 +168,127 @@
       >
         <!-- 表格详情 -->
         <div class="sheet-detail-wrapper" v-if="select_id">
-          <div class="detail-top">
-            <el-input
-              ref="sheetEditTitRef"
-              style="width: 400px"
-              :placeholder="$t('OnlineExcelPage.please_table_name_ipt')"
-              class="label-input"
-              v-model="sheet_title"
-              v-if="sheetDetailInfo.isEditTit"
-              @blur="changeValue(sheetDetailInfo, 'edit-tit')"
-            />
-            <span
-              class="sheet-name"
-              @click="editExcelName(sheetDetailInfo, 'edit-tit')"
-              v-else
-            >
-              {{ sheetDetailInfo.ExcelName }}
-              <i class="el-icon-edit" v-if="sheetDetailInfo.Source === 1 && onlineExcelEditing" />
-            </span>
-            <!-- <div class="sheet-name">
-              {{ sheetDetailInfo.ExcelName }}
-            </div> -->
-            <div class="sheet-anothor-info">
-              <span class="author">{{$t('OnlineExcelPage.author_info')}}{{ sheetDetailInfo.SysUserRealName }}</span>
-              <ul class="action-ul">
-                <li style="color:#999999 ;">{{$t('OnlineExcelPage.recent_save_time_info')}}{{ saveTime }}</li>
-                <li
-                  class="editsty"
-                  @click="goEditHandle"
-                  v-if="(sheetDetailInfo.Button && sheetDetailInfo.Button.OpButton&&isSheetBtnShow('edit') && (!onlineExcelEditing))"
-                >
-                  <img src="~@/assets/img/icons/edit_blue_new.png" v-if="!editButtonText"/>
-                  <span>{{ editButtonText?editButtonText:$t('ETable.Btn.edit_btn') }}</span> 
-                </li>
-                <li
-                  class="editsty"
-                  @click="saveHandle"
-                  v-if="(sheetDetailInfo.Button && sheetDetailInfo.Button.OpButton&&isSheetBtnShow('save') && onlineExcelEditing)"
-                >
-                  <img src="~@/assets/img/icons/save_blue_new.png"/>
-                  <span>{{$t('ETable.Btn.save_btn')}}</span> 
-                </li>
-                <template v-if="[2, 3].includes(sheetDetailInfo.Source)">
+
+          <!-- 有权限 -->
+          <template v-if="sheetDetailInfo.HaveOperaAuth">
+            <div class="detail-top">
+              <el-input
+                ref="sheetEditTitRef"
+                style="width: 400px"
+                :placeholder="$t('OnlineExcelPage.please_table_name_ipt')"
+                class="label-input"
+                v-model="sheet_title"
+                v-if="sheetDetailInfo.isEditTit"
+                @blur="changeValue(sheetDetailInfo, 'edit-tit')"
+              />
+              <span
+                class="sheet-name"
+                @click="editExcelName(sheetDetailInfo, 'edit-tit')"
+                v-else
+              >
+                {{ sheetDetailInfo.ExcelName }}
+                <i class="el-icon-edit" v-if="sheetDetailInfo.Source === 1 && onlineExcelEditing" />
+              </span>
+              <!-- <div class="sheet-name">
+                {{ sheetDetailInfo.ExcelName }}
+              </div> -->
+              <div class="sheet-anothor-info">
+                <span class="author">{{$t('OnlineExcelPage.author_info')}}{{ sheetDetailInfo.SysUserRealName }}</span>
+                <ul class="action-ul">
+                  <li style="color:#999999 ;">{{$t('OnlineExcelPage.recent_save_time_info')}}{{ saveTime }}</li>
                   <li
                     class="editsty"
-                    @click="refreshSheetEdb"
-                    v-if="sheetDetailInfo.Button.RefreshButton&&isSheetBtnShow('refresh')"
+                    @click="goEditHandle"
+                    v-if="(sheetDetailInfo.Button && sheetDetailInfo.Button.OpButton&&isSheetBtnShow('edit') && (!onlineExcelEditing))"
                   >
-                  <img src="~@/assets/img/icons/refresh_blue_new.png"/>
-                    <span>{{$t('ETable.Btn.refresh_btn')}}</span>
+                    <img src="~@/assets/img/icons/edit_blue_new.png" v-if="!editButtonText"/>
+                    <span>{{ editButtonText?editButtonText:$t('ETable.Btn.edit_btn') }}</span> 
                   </li>
                   <li
                     class="editsty"
-                    @click="saveOtherHandle"
-                    v-if="sheetDetailInfo.Button.CopyButton&&isSheetBtnShow('otherSave')"
+                    @click="saveHandle"
+                    v-if="(sheetDetailInfo.Button && sheetDetailInfo.Button.OpButton&&isSheetBtnShow('save') && onlineExcelEditing)"
                   >
-                    <img src="~@/assets/img/icons/save_as_blue_new.png"/>
-                    <span>{{$t('ETable.Btn.save_as')}}</span>
+                    <img src="~@/assets/img/icons/save_blue_new.png"/>
+                    <span>{{$t('ETable.Btn.save_btn')}}</span> 
+                  </li>
+                  <template v-if="[2, 3].includes(sheetDetailInfo.Source)">
+                    <li
+                      class="editsty"
+                      @click="refreshSheetEdb"
+                      v-if="sheetDetailInfo.Button.RefreshButton&&isSheetBtnShow('refresh')"
+                    >
+                    <img src="~@/assets/img/icons/refresh_blue_new.png"/>
+                      <span>{{$t('ETable.Btn.refresh_btn')}}</span>
+                    </li>
+                    <li
+                      class="editsty"
+                      @click="saveOtherHandle"
+                      v-if="sheetDetailInfo.Button.CopyButton&&isSheetBtnShow('otherSave')"
+                    >
+                      <img src="~@/assets/img/icons/save_as_blue_new.png"/>
+                      <span>{{$t('ETable.Btn.save_as')}}</span>
+                    </li>
+                  </template>
+                  <li v-if="isSheetBtnShow('download')"
+                    class="editsty" @click="downloadExcel(sheetDetailInfo)">
+                    <img src="~@/assets/img/icons/download_blue.png"/>
+                    <span>{{$t('ETable.Btn.download_btn')}}</span>
                   </li>
-                </template>
-                <li v-if="isSheetBtnShow('download')"
-                  class="editsty" @click="downloadExcel(sheetDetailInfo)">
-                  <img src="~@/assets/img/icons/download_blue.png"/>
-                  <span>{{$t('ETable.Btn.download_btn')}}</span>
-                </li>
-                <li
-                  class="deletesty"
-                  v-if="(sheetDetailInfo.Button && sheetDetailInfo.Button.DeleteButton
-                    &&isSheetBtnShow('del'))
-                  "
-                  @click="delSheetHandle({cell:sheetDetailInfo, type:'del'})"
-                >
-                  <img src="~@/assets/img/icons/delete-red.png"/>
-                  <span>{{$t('ETable.Btn.delete_btn')}}</span>
-                </li>
-              </ul>
+                  <li
+                    class="deletesty"
+                    v-if="(sheetDetailInfo.Button && sheetDetailInfo.Button.DeleteButton
+                      &&isSheetBtnShow('del'))
+                    "
+                    @click="delSheetHandle({cell:sheetDetailInfo, type:'del'})"
+                  >
+                    <img src="~@/assets/img/icons/delete-red.png"/>
+                    <span>{{$t('ETable.Btn.delete_btn')}}</span>
+                  </li>
+                </ul>
+              </div>
+
             </div>
 
-          </div>
+            <!-- 表格 -->
+            <div class="sheet-wrap">
+              <Sheet
+                ref="sheetRef"
+                v-if="sheetDetailInfo.Source === 1&&sheetDetailInfo.ExcelInfoId"
+                :option="{
+                  data: [{
+                    ...JSON.parse(sheetDetailInfo.Content),
+                    scrollTop: 0,
+                    scrollLeft: 0
+                  }]
+                }"
+                :sheetInfo="{
+                  ExcelInfoId: sheetDetailInfo.ExcelInfoId,
+                  ExcelName: sheetDetailInfo.ExcelName,
+                  ExcelClassifyId: sheetDetailInfo.ExcelClassifyId,
+                  Source: sheetDetailInfo.Source
+                }"
+                :limit="limit"
+                @updated="autoSaveFun"
+              />
 
-          <!-- 表格 -->
-          <div class="sheet-wrap">
-            <Sheet
-              ref="sheetRef"
-              v-if="sheetDetailInfo.Source === 1&&sheetDetailInfo.ExcelInfoId"
-              :option="{
-                data: [{
-                  ...JSON.parse(sheetDetailInfo.Content),
-                  scrollTop: 0,
-                  scrollLeft: 0
-                }]
-              }"
-              :sheetInfo="{
-                ExcelInfoId: sheetDetailInfo.ExcelInfoId,
-                ExcelName: sheetDetailInfo.ExcelName,
-                ExcelClassifyId: sheetDetailInfo.ExcelClassifyId,
-                Source: sheetDetailInfo.Source
-              }"
-              :limit="limit"
-              @updated="autoSaveFun"
-            />
+              <!-- 自定义表格  -->
+              <CustomTable
+                v-else-if="sheetDetailInfo.Source === 2"
+                :sheetType="sheetDetailInfo.ExcelType"
+                :disabled="true"
+                ref="customTableRef"
+              />
 
-            <!-- 自定义表格  -->
-            <CustomTable
-              v-else-if="sheetDetailInfo.Source === 2"
-              :sheetType="sheetDetailInfo.ExcelType"
-              :disabled="true"
-              ref="customTableRef"
-            />
+              <MixedTable
+                v-else-if="sheetDetailInfo.Source === 3"
+                :disabled="true"
+                ref="mixedTableRef"
+              />
+            </div>
+          </template>
 
-            <MixedTable
-              v-else-if="sheetDetailInfo.Source === 3"
-              :disabled="true"
-              ref="mixedTableRef"
-            />
-          </div>
+          <noDataAuth v-else text="暂无表格权限,如需权限请联系管理员!"/>
         </div>
 
          <!-- 列表 -->

+ 3 - 1
src/views/edbHistoryPage.vue

@@ -38,7 +38,9 @@ export default {
         },
         handleClickNode(e, data) {
             //EdbInfoType=1 跳预测指标详情,=0跳指标库详情
-            const { ClassifyId, UniqueCode, EdbInfoId, EdbInfoType } = data
+            const { ClassifyId, UniqueCode, EdbInfoId, EdbInfoType,HaveOperaAuth } = data
+            if(!HaveOperaAuth) return this.$message.warning('暂无指标权限,如有问题请联系管理员!')
+            
             let { href } =
             this.$router.resolve({ path: EdbInfoType === 1 ? '/predictEdb' : '/database', query: { code: UniqueCode, id:
             EdbInfoId, classifyId: ClassifyId } });

+ 11 - 0
src/views/futures_manage/chartEditor.vue

@@ -38,7 +38,18 @@
 							:key="item.EdbInfoId"
 							:label="item.EdbName"
 							:value="item.EdbInfoId"
+							:disabled="!item.HaveOperaAuth"
 						>
+							<div>
+								<img 
+									:src="$icons.lock_ico2" 
+									width="18" 
+									height="18" 
+									style="vertical-align:middle" 
+									v-if="!item.HaveOperaAuth"
+								/>
+								{{item.EdbName}}
+							</div>
 						</el-option>
 					</el-select>
 				</div>

文件差异内容过多而无法显示
+ 496 - 485
src/views/mychart_manage/components/chartDetailDia.vue


+ 3 - 1
src/views/mychart_manage/components/chooseChart.vue

@@ -60,7 +60,7 @@
               <div slot="header" class="item-top">
                 <span class="text_oneLine">{{ $parent.chart_lang==='en' ? (chart.ChartNameEn||chart.ChartName) : chart.ChartName }}</span>
               </div>
-              <img :src="chart.ChartImage" alt="" class="chart-img" />
+              <img :src="(chart_source===1&&!chart.HaveOperaAuth) ? $icons.lock_big : chart.ChartImage" alt="" class="chart-img" />
               <div class="item-bottom">
                 <span class="last-time"><!-- 最近更新 -->{{$t('MyEtaPage.label_update_time')}}:{{ chart.ModifyTime.substr(0,10) }}</span>
                 <span class="join_txt" @click="addMychartHandle(chart)">
@@ -166,6 +166,8 @@ export default {
 
     /* 加入我的图库 */
     addMychartHandle(item) {
+      if(this.chart_source===1&&!item.HaveOperaAuth) return this.$message.warning('暂无图表权限,如需权限请联系管理员!')
+
       this.add_chart_id = item.ChartInfoId;
       //已有的分类ids
       this.add_ids = item.MyChartClassifyId ? item.MyChartClassifyId.split(',').map(item => Number(item)) : [];

+ 1 - 1
src/views/mychart_manage/index.vue

@@ -209,7 +209,7 @@
                   />
                 </div>
                 <img
-                  :src="chart.ChartImage"
+                  :src="(chart.Source===1&&!chart.HaveOperaAuth) ? $icons.lock_big : chart.ChartImage"
                   alt=""
                   class="chart-img"
                   @click="viewChartDetail(chart)"

+ 1 - 1
src/views/ppt_manage/newVersion/components/editor/InsertCharts.vue

@@ -40,7 +40,7 @@
           En
         </div>
         <p>{{ item.ChartName }}</p>
-        <img :src="item.ChartImage" alt="" style="-webkit-user-drag:none;"/>
+        <img :src="!item.HaveOperaAuth?$icons.lock_big:item.ChartImage" alt="" style="-webkit-user-drag:none;"/>
       </div>
     </div>
     <div v-if="list.length == 0" class="empty-box"> {{$t('Slides.no_data_empty')}}</div>

+ 8 - 2
src/views/ppt_manage/newVersion/pptEditor.vue

@@ -140,7 +140,7 @@
                     <template v-if="chartList.length">
                     <div v-for="(item, index) in chartList" :key="index" @click="chooseChart(item,'chart')" class="chart-item" :style="item.Disabled && 'cursor: not-allowed;'">
                         <p class="chart_tit" style="word-break: break-all;">{{ item.ChartName }}</p>
-                        <img :src="item.ChartImage" ref="insert_img" style="-webkit-user-drag:none;"/>
+                        <img :src="!item.HaveOperaAuth?$icons.lock_big:item.ChartImage" ref="insert_img" style="-webkit-user-drag:none;"/>
                     </div>
                     </template>
                     <tableNoData :text="$t('Table.prompt_slogan')" size="mini" v-else/>
@@ -169,7 +169,7 @@
                   <template v-if="sheetSearchList.length">
                     <div v-for="(item,index) in sheetSearchList" :key="index" class="sandTable-item" >
                       <p class="chart_tit">{{item.ExcelName}}</p>
-                      <img :src="item.ExcelImage" style="width:100%;object-fit: contain;height: 250px;-webkit-user-drag:none;"  @click="chooseChart(item,'sheet')"/>
+                      <img :src="!item.HaveOperaAuth?$icons.lock_big:item.ExcelImage" style="width:100%;object-fit: contain;height: 250px;-webkit-user-drag:none;"  @click="chooseChart(item,'sheet')"/>
                     </div>
                   </template>
                   <tableNoData :text="$t('Table.prompt_slogan')" size="mini" v-else/>
@@ -831,6 +831,12 @@ export default {
 		},200),
     //点击右侧图表/沙盘图/表格
     chooseChart:_.throttle(async function(item,type){
+      const noAuthMsg = {
+        'chart': '暂无图表权限,如有问题请联系管理员!',
+        'sheet': '暂无表格权限,如有问题请联系管理员!'
+      }
+      if(!item.HaveOperaAuth&&noAuthMsg[type]) return this.$message.warning(noAuthMsg[type])
+
         if(this.pageList.length===0||!this.currentItem){
           this.$message.warning(this.$t('Slides.please_add_page_msg') );
           return;

+ 8 - 2
src/views/ppt_manage/newVersion/pptEnEditor.vue

@@ -141,7 +141,7 @@
                           <i class="el-icon-edit" v-else style="font-size:15px"/>
                         </div>
                         <p class="chart_tit" style="word-break: break-all;">{{ chart_source===1 ? (item.ChartNameEn||item.ChartName) : item.ChartName }}</p>
-                        <img :src="item.ChartImage" ref="insert_img" />
+                        <img :src="!item.HaveOperaAuth?$icons.lock_big:item.ChartImage" ref="insert_img" />
                     </div>
                     </template>
                     <tableNoData  :text="$t('Table.prompt_slogan')" size="mini" v-else/>
@@ -171,7 +171,7 @@
                   <template v-if="sheetSearchList.length">
                     <div v-for="(item,index) in sheetSearchList" :key="index" class="sandTable-item" >
                       <p class="chart_tit">{{item.ExcelName}}</p>
-                      <img :src="item.ExcelImage" style="width:100%;object-fit: contain;height: 250px"  @click="chooseChart(item,'sheet')"/>
+                      <img :src="!item.HaveOperaAuth?$icons.lock_big:item.ExcelImage" style="width:100%;object-fit: contain;height: 250px"  @click="chooseChart(item,'sheet')"/>
                     </div>
                   </template>
                   <tableNoData :text="$t('Table.prompt_slogan')" size="mini" v-else/>
@@ -847,6 +847,12 @@ export default {
 		},200),
     //点击右侧图表或者沙盘图
     chooseChart:_.throttle(async function(item,type){
+        const noAuthMsg = {
+          'chart': '暂无图表权限,如有问题请联系管理员!',
+          'sheet': '暂无表格权限,如有问题请联系管理员!'
+        }
+        if(!item.HaveOperaAuth&&noAuthMsg[type]) return this.$message.warning(noAuthMsg[type])
+
         if(this.pageList.length===0||!this.currentItem){
           this.$message.warning(this.$t('Slides.please_add_page_msg') );
           return;

+ 23 - 1
src/views/predictEdb_manage/addPredicEdb.vue

@@ -50,9 +50,20 @@
                   :key="item.EdbInfoId"
                   :label="item.EdbName"
                   :value="item.EdbInfoId"
+                  :disabled="!item.HaveOperaAuth"
                 >
                   <edbDetailPopover :info="item">
-                    <div slot="reference">{{item.EdbName}}</div>
+                    <div slot="reference">
+                      <img 
+                        :src="$icons.lock_ico2" 
+                        width="18" 
+                        height="18" 
+                        style="vertical-align:middle" 
+                        v-if="!item.HaveOperaAuth"
+                      />
+
+                      {{item.EdbName}}
+                    </div>
                   </edbDetailPopover>
                 </el-option>
               </el-select>
@@ -273,7 +284,18 @@
                       :key="item.EdbInfoId"
                       :label="item.EdbName"
                       :value="item.EdbInfoId"
+                      :disabled="!item.HaveOperaAuth"
                     >
+                      <div>
+                        <img 
+                          :src="$icons.lock_ico2" 
+                          width="18" 
+                          height="18" 
+                          style="vertical-align:middle" 
+                          v-if="!item.HaveOperaAuth"
+                        />
+                        {{item.EdbName}}
+                      </div>
                     </el-option>
                   </el-select>
                   <i class="el-icon-tickets" style="color:#409EFF;font-size:18px" @click="toHistoryPage(item.self_target,$route.matched);lookEdbId=item.self_target;" v-if="item.self_target"/>

+ 11 - 1
src/views/predictEdb_manage/components/dynamicRingdiffer.vue

@@ -36,9 +36,19 @@
 							:key="item.EdbInfoId"
 							:label="item.EdbName"
 							:value="item.EdbInfoId"
+							:disabled="!item.HaveOperaAuth"
 						>
 							<edbDetailPopover :info="item">
-								<div slot="reference">{{item.EdbName}}</div>
+								<div slot="reference">
+									<img 
+										:src="$icons.lock_ico2" 
+										width="18" 
+										height="18" 
+										style="vertical-align:middle" 
+										v-if="!item.HaveOperaAuth"
+									/>
+									{{item.EdbName}}
+								</div>
 							</edbDetailPopover>
 						</el-option>
 					</el-select>

+ 11 - 0
src/views/predictEdb_manage/components/edbDia.vue

@@ -66,7 +66,18 @@
               :key="item.EdbInfoId"
               :label="item.EdbName"
               :value="item.EdbInfoId"
+              :disabled="!item.HaveOperaAuth"
             >
+              <div>
+									<img 
+										:src="$icons.lock_ico2" 
+										width="18" 
+										height="18" 
+										style="vertical-align:middle" 
+										v-if="!item.HaveOperaAuth"
+									/>
+									{{item.EdbName}}
+								</div>
             </el-option>
           </el-select>
         </el-form-item>

+ 11 - 0
src/views/predictEdb_manage/components/operationDialog.vue

@@ -47,7 +47,18 @@
 						:key="item.EdbInfoId"
 						:label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 						:value="item.EdbInfoId"
+						:disabled="!item.HaveOperaAuth"
 					>
+						<div>
+							<img 
+								:src="$icons.lock_ico2" 
+								width="18" 
+								height="18" 
+								style="vertical-align:middle" 
+								v-if="!item.HaveOperaAuth"
+							/>
+							{{$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
+						</div>
 					</el-option>
 				</el-select>
 				<i class="el-icon-tickets" style="color:#409EFF;font-size:18px" @click="$emit('lookHistory',select_target)" v-if="select_target"/>

+ 106 - 84
src/views/predictEdb_manage/predictEdb.vue

@@ -40,7 +40,16 @@
 							:label="currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
 							:value="item.EdbInfoId"
 						>
-							<span>{{ currentLang==='en' ? (item.EdbNameEn||item.EdbName) : item.EdbName }}</span>
+							<div>
+								<img 
+									:src="$icons.lock_ico2" 
+									width="18" 
+									height="18" 
+									style="vertical-align:middle" 
+									v-if="!item.HaveOperaAuth"
+								/>
+								<span>{{ currentLang==='en' ? (item.EdbNameEn||item.EdbName) : item.EdbName }}</span>
+							</div>
 						</el-option>
 					</el-select>
 				</div>
@@ -93,6 +102,13 @@
 								}`"
 								: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
@@ -182,92 +198,98 @@
 
 				<!-- 详情 -->
 				<div class="edb-detail-wrapper main-min-width" v-if="select_id&&!showAssociateChart&&!showAssociateComputeData">
-					<div class="detail-header">
-						<el-tabs v-model="activeTab" @tab-click="changeShowType">
-							<el-tab-pane :label="$t('Edb.trend_chart_tab')" name="Chart">
-							</el-tab-pane>
-							<el-tab-pane :label="$t('Edb.data_detail_tab')" name="Data">
-							</el-tab-pane>
-						</el-tabs>
-						<div class="edb-tool-icon edb-tool" style="align-items: center;">
-							<el-button 
-								v-permission="permissionBtn.predictEdbPermission.edbPreData_update"
-								type="text" 
-								@click="updateEdbPartHandle"
-							><!-- 刷新 -->{{$t('Edb.detail_refresh_btn')}}</el-button>
-							<el-button 
-								type="text" 
-								@click="editEdbHandle('')" 
-								v-if="edbButton.OpButton&&isEdbBtnShow('edbPreData_edit')"
-							><!-- 编辑 -->{{$t('Edb.detail_edit_btn')}}</el-button>
-							<el-button 
-								type="text" 
-								@click="saveEdbHandle" 
-								v-if="detail_show_chart&&isEdbBtnShow('edbPreData_save')"
-							><!-- 保存 -->{{$t('Edb.detail_save_btn')}}</el-button>
-							<el-button 
-								v-permission="permissionBtn.predictEdbPermission.edbPreData_edbSource"
-								type="text" 
-								@click="toHistoryPage(select_id,$route.matched);lookEdbId=select_id"
-							><!-- 指标溯源 -->{{$t('Edb.detail_trace_btn')}}</el-button>
-
-							<el-popover 
-								v-if="showPopover"
-								placement="bottom-end" 
-								trigger="hover"
-								popper-class="edb-tool-popover"
-								width="300" style="display: inline-block;"
-							>
-								<div class="edb-tool-wrap">
-									<el-button 
-										v-permission="permissionBtn.predictEdbPermission.edbPreData_enNameSetting"
-										type="text" 
-										@click="clickEdbNameHandle" 
-										v-if="currentLang==='ch'||!edb_nameEn"
-									>
-										{{$t('Edb.detail_en_btn')}}<!-- 设置英文名称 -->
-									</el-button>
-									<el-button 
-										v-permission="permissionBtn.predictEdbPermission.edbPreData_recalcu"
-										type="text" 
-										@click="updateEdbHandle"
-									>{{$t('Edb.detail_recalculate_btn')}}<!-- 重新计算 --></el-button>
-									<el-button 
-										class="deletesty" 
-										@click="delEdbHandle" 
-										type="text"
-										v-if="edbButton.DeleteButton&&isEdbBtnShow('edbPreData_del')"
-									>{{$t('Edb.detail_del_btn')}}<!-- 删除 --></el-button>
-									<el-button 
-										v-permission="permissionBtn.predictEdbPermission.edbPreData_copyData"
-										type="text" 
-										@click="copyData"
-									>{{$t('Edb.detail_copydata_btn')}}<!-- 复制数据 --></el-button>
-								</div>
-								<div class="edb-btn" slot="reference">
-									<el-button type="text">{{$t('Edb.detail_more_btn')}}<!-- 更多操作 --></el-button>
-									<i class="el-icon-more" style="font-size: 14px;transform: rotate(90deg);cursor: pointer;color: #3375e1;"/>
-								</div>
-							</el-popover>
+
+					<!-- 有指标权限 -->
+					<template>
+						<div class="detail-header">
+							<el-tabs v-model="activeTab" @tab-click="changeShowType">
+								<el-tab-pane :label="$t('Edb.trend_chart_tab')" name="Chart">
+								</el-tab-pane>
+								<el-tab-pane :label="$t('Edb.data_detail_tab')" name="Data">
+								</el-tab-pane>
+							</el-tabs>
+							<div class="edb-tool-icon edb-tool" style="align-items: center;">
+								<el-button 
+									v-permission="permissionBtn.predictEdbPermission.edbPreData_update"
+									type="text" 
+									@click="updateEdbPartHandle"
+								><!-- 刷新 -->{{$t('Edb.detail_refresh_btn')}}</el-button>
+								<el-button 
+									type="text" 
+									@click="editEdbHandle('')" 
+									v-if="edbButton.OpButton&&isEdbBtnShow('edbPreData_edit')"
+								><!-- 编辑 -->{{$t('Edb.detail_edit_btn')}}</el-button>
+								<el-button 
+									type="text" 
+									@click="saveEdbHandle" 
+									v-if="detail_show_chart&&isEdbBtnShow('edbPreData_save')"
+								><!-- 保存 -->{{$t('Edb.detail_save_btn')}}</el-button>
+								<el-button 
+									v-permission="permissionBtn.predictEdbPermission.edbPreData_edbSource"
+									type="text" 
+									@click="toHistoryPage(select_id,$route.matched);lookEdbId=select_id"
+								><!-- 指标溯源 -->{{$t('Edb.detail_trace_btn')}}</el-button>
+
+								<el-popover 
+									v-if="showPopover"
+									placement="bottom-end" 
+									trigger="hover"
+									popper-class="edb-tool-popover"
+									width="300" style="display: inline-block;"
+								>
+									<div class="edb-tool-wrap">
+										<el-button 
+											v-permission="permissionBtn.predictEdbPermission.edbPreData_enNameSetting"
+											type="text" 
+											@click="clickEdbNameHandle" 
+											v-if="currentLang==='ch'||!edb_nameEn"
+										>
+											{{$t('Edb.detail_en_btn')}}<!-- 设置英文名称 -->
+										</el-button>
+										<el-button 
+											v-permission="permissionBtn.predictEdbPermission.edbPreData_recalcu"
+											type="text" 
+											@click="updateEdbHandle"
+										>{{$t('Edb.detail_recalculate_btn')}}<!-- 重新计算 --></el-button>
+										<el-button 
+											class="deletesty" 
+											@click="delEdbHandle" 
+											type="text"
+											v-if="edbButton.DeleteButton&&isEdbBtnShow('edbPreData_del')"
+										>{{$t('Edb.detail_del_btn')}}<!-- 删除 --></el-button>
+										<el-button 
+											v-permission="permissionBtn.predictEdbPermission.edbPreData_copyData"
+											type="text" 
+											@click="copyData"
+										>{{$t('Edb.detail_copydata_btn')}}<!-- 复制数据 --></el-button>
+									</div>
+									<div class="edb-btn" slot="reference">
+										<el-button type="text">{{$t('Edb.detail_more_btn')}}<!-- 更多操作 --></el-button>
+										<i class="el-icon-more" style="font-size: 14px;transform: rotate(90deg);cursor: pointer;color: #3375e1;"/>
+									</div>
+								</el-popover>
+							</div>
 						</div>
-					</div>
 
-					<!--  -->
-					<div class="detail-wrap">
-						
-						<component 
-							:is="detail_show_chart?'edbDetail':'childData'"
-							:id="select_id"
-							:lang="currentLang" 
-							:isAllowEditLimit="isEdbBtnShow('edbPreData_editLimit')"
-							ref="detailComponentRef"
+						<!--  -->
+						<div class="detail-wrap">
 							
-							@updateTit="setNameBack"
-							@setCurrentClassify="setCurrentClassify"
-							@setOpera="(obj) => { edbButton = obj }"
-							@openEnNameDia="openEnNameDia"
-						/>
-					</div>
+							<component 
+								:is="detail_show_chart?'edbDetail':'childData'"
+								:id="select_id"
+								:lang="currentLang" 
+								:isAllowEditLimit="isEdbBtnShow('edbPreData_editLimit')"
+								ref="detailComponentRef"
+								
+								@updateTit="setNameBack"
+								@setCurrentClassify="setCurrentClassify"
+								@setOpera="(obj) => { edbButton = obj }"
+								@openEnNameDia="openEnNameDia"
+							/>
+						</div>
+					</template>
+
+					<!-- <noDataAuth v-else text="暂无图表权限,如需权限请联系管理员!"/> -->
 				</div>
 
 				<!-- 列表 -->

+ 2 - 2
src/views/report_manage/addreportNew.vue

@@ -227,7 +227,7 @@
 							>
 								<p class="color_primary">{{ item.ChartName }}</p>
 								<img
-									:src="item.ChartImage"
+									:src="!item.HaveOperaAuth?$icons.lock_big:item.ChartImage"
 									:id="'listnode' + index"
 									@click="insertHtml(item)"
 								/>
@@ -298,7 +298,7 @@
 							>
 								<p class="color_primary">{{ item.ExcelName }}</p>
 								<img
-									:src="item.ExcelImage"
+									:src="!item.HaveOperaAuth?$icons.lock_big:item.ExcelImage"
 									:id="'sheet' + item.ExcelInfoId"
 									style="object-fit: contain;height: 250px;"
 									@click="insertHtml(item,'sheet')"

+ 1 - 1
src/views/report_manage/components/importMyChart.vue

@@ -25,7 +25,7 @@
             <div class="item" v-for="item in list" :key="item.UniqueCode" @click="handleClickItem">
                 <div class="chartEn-mark" v-show="item.IsEnChart && showEnMark" style="top: 0;left: 0;">En</div>
                 <p class="color_primary">{{ item.ChartName }}</p>
-                <img :src="item.ChartImage" alt="">
+                <img :src="!item.HaveOperaAuth?$icons.lock_big:item.ChartImage" alt="">
             </div>
 		</div>
         <div v-if="list.length==0" class="empty-box">

+ 2 - 2
src/views/report_manage/editChapterReport.vue

@@ -203,7 +203,7 @@
             >
               <p class="color_primary">{{ item.ChartName }}</p>
               <img
-                :src="item.ChartImage"
+                :src="!item.HaveOperaAuth?$icons.lock_big:item.ChartImage"
                 :id="'listnode' + index"
                 @click="insertHtml(item)"
               />
@@ -272,7 +272,7 @@
 							>
 								<p class="color_primary">{{ item.ExcelName }}</p>
 								<img
-									:src="item.ExcelImage"
+									:src="!item.HaveOperaAuth?$icons.lock_big:item.ExcelImage"
 									:id="'sheet' + item.ExcelInfoId"
 									style="object-fit: contain;height: 250px;"
 									@click="insertHtml(item,'sheet')"

+ 2 - 2
src/views/report_manage/editreportNew.vue

@@ -225,7 +225,7 @@
 							>
 								<p class="color_primary">{{ item.ChartName }}</p>
 								<img
-									:src="item.ChartImage"
+									:src="!item.HaveOperaAuth?$icons.lock_big:item.ChartImage"
 									:id="'listnode' + index"
 									@click="insertHtml(item)"
 								/>
@@ -295,7 +295,7 @@
 							>
 								<p class="color_primary">{{ item.ExcelName }}</p>
 								<img
-									:src="item.ExcelImage"
+									:src="!item.HaveOperaAuth?$icons.lock_big:item.ExcelImage"
 									:id="'sheet' + item.ExcelInfoId"
 									style="object-fit: contain;height: 250px;"
 									@click="insertHtml(item,'sheet')"

+ 6 - 0
src/views/report_manage/mixins/reportMixin.js

@@ -211,6 +211,12 @@ export default {
 
   methods: {
     insertHtml(item, type = "chart") {
+      const noAuthMsg = {
+        'chart': '暂无图表权限,如有问题请联系管理员!',
+        'sheet': '暂无表格权限,如有问题请联系管理员!'
+      }
+      if(!item.HaveOperaAuth&&noAuthMsg[type]) return this.$message.warning(noAuthMsg[type])
+
       //设置编辑器获取焦点
       this.editor.events.focus();
       // 获取选定对象

+ 2 - 2
src/views/report_manage/reportEn/reportEditor.vue

@@ -236,7 +236,7 @@
 								</div>
 								<p class="color_primary">{{ chart_source===1 ? (item.ChartNameEn||item.ChartName) : item.ChartName }}</p>
 								<img
-									:src="item.ChartImage"
+									:src="!item.HaveOperaAuth?$icons.lock_big:item.ChartImage"
 									:id="'listnode' + index"
 									@click="insertHtml(item)"
 								/>
@@ -305,7 +305,7 @@
 							>
 								<p class="color_primary">{{ item.ExcelName }}</p>
 								<img
-									:src="item.ExcelImage"
+									:src="!item.HaveOperaAuth?$icons.lock_big:item.ExcelImage"
 									:id="'sheet' + item.ExcelInfoId"
 									style="object-fit: contain;height: 250px;"
 									@click="insertHtml(item,'sheet')"

+ 22 - 0
src/views/sandbox_manage/sandFlowNew/components/addLInkDia.vue

@@ -24,7 +24,18 @@
               :key="item.EdbInfoId"
               :label="item.EdbName"
               :value="item.EdbInfoId"
+              :disabled="!item.HaveOperaAuth"
             >
+              <div>
+                <img 
+                  :src="$icons.lock_ico2" 
+                  width="18" 
+                  height="18" 
+                  style="vertical-align:middle" 
+                  v-if="!item.HaveOperaAuth"
+                />
+                {{item.EdbName}}
+              </div>
             </el-option>
           </el-select>
           <el-select v-else-if="addLinkSearchParams.linkType==2"
@@ -45,7 +56,18 @@
               :key="item.ChartInfoId"
               :label="item.ChartName"
               :value="item.ChartInfoId"
+              :disabled="!item.HaveOperaAuth"
             >
+              <div>
+                <img 
+                  :src="$icons.lock_ico2" 
+                  width="18" 
+                  height="18" 
+                  style="vertical-align:middle" 
+                  v-if="!item.HaveOperaAuth"
+                />
+                {{item.ChartName}}
+              </div>
             </el-option>
           </el-select>
           <el-input v-else v-model="reportKeyWord" @input="searchReport"

+ 17 - 2
src/views/smartReport/components/ETASheet.vue

@@ -20,10 +20,11 @@
                 animation="300"
                 :sort="false"
                 tag="div"
+                :move="onMoveItemHandle"
             >
                 <div class="sheet-item" :comp-data="getCompData(item)" v-for="item in list" :key="item.ExcelInfoId">
                     <div class="title">{{item.ExcelName}}</div>
-                    <div class="img" :style="'backgroundImage:url('+item.ExcelImage+')'"></div>
+                    <div class="img" :style="`backgroundImage:url(${ !item.HaveOperaAuth?$icons.lock_big:item.ExcelImage })`"></div>
                 </div>
             </draggable>
             <tableNoData :text="$t('Table.prompt_slogan')" size="mini" v-if="list.length===0"/>
@@ -93,7 +94,21 @@ export default {
             if(this.finished||this.loading) return
             this.page++
             this.getSheetList()
-        }
+        },
+
+        onMoveItemHandle(e) {
+            /* 无权限 */
+            if (!e.draggedContext.element.HaveOperaAuth) {
+                this.messageTip()
+                return false;
+            }
+
+            return true
+        },
+        
+        messageTip: _.debounce(function() {
+            this.$message.warning('暂无图表权限,如有问题请联系管理员!')
+        },200)
     },
 }
 </script>

+ 17 - 2
src/views/smartReport/components/ImportETAChart.vue

@@ -12,10 +12,11 @@
                 animation="300"
                 :sort="false"
                 tag="div"
+                :move="onMoveItemHandle"
             >
                 <div class="chart-item" :comp-data="getCompData(item)" v-for="item in list" :key="item.UniqueCode">
                     <div class="title">{{item.ChartName}}</div>
-                    <div class="img" :style="'backgroundImage:url('+item.ChartImage+')'"></div>
+                    <div class="img" :style="`backgroundImage:url(${ !item.HaveOperaAuth?$icons.lock_big:item.ChartImage })`"></div>
                 </div>
             </draggable>
             <tableNoData :text="$t('ReportManage.ReportList.no_chart_table_available')" size="mini" v-if="list.length===0"/>
@@ -90,7 +91,21 @@ export default {
             this.list=[]
             this.keyword=key
             this.getETAChartList()
-        }
+        },
+
+        onMoveItemHandle(e) {
+            /* 无权限 */
+            if (!e.draggedContext.element.HaveOperaAuth) {
+                this.messageTip()
+                return false;
+            }
+
+            return true
+        },
+        
+        messageTip: _.debounce(function() {
+            this.$message.warning('暂无图表权限,如有问题请联系管理员!')
+        },200)
     },
 }
 </script>

+ 1 - 1
src/views/smartReport/components/ImportMyETAChart.vue

@@ -24,7 +24,7 @@
 		<div class="list" v-infinite-scroll="load" v-if="list.length>0">
             <div class="chart-item" v-for="item in list" :key="item.UniqueCode" @click="handleClickItem">
                 <div class="title">{{item.ChartName}}</div>
-                <div class="img" :style="'backgroundImage:url('+item.ChartImage+')'"></div>
+                <div class="img" :style="`backgroundImage:url(${ !item.HaveOperaAuth?$icons.lock_big:item.ChartImage })`"></div>
             </div>
 		</div>
         <tableNoData :text="$t('Table.prompt_slogan')" size="mini" v-if="list.length===0"/>

+ 65 - 12
src/views/system_manage/components/opearAuthSetDia.vue

@@ -45,9 +45,23 @@
       </div>
 
       <div class="classify-cont" v-if="form.type==='classify'">
-        <el-tabs v-model="currentTab" @tab-click="handleClick">
-          <el-tab-pane :label="item.label" :name="String(item.key)" v-for="item in tabs" :key="item.key"></el-tab-pane>
+        <el-radio-group v-model="currentTab" @input="()=>{ currentSubTab='4';getClassifyList()}" style="margin-bottom:10px;">
+          <el-radio-button
+            v-for="item in tabs" 
+            :key="item.key"
+            :label="item.key"
+          >{{item.label}}</el-radio-button>
+        </el-radio-group>
+
+        <el-tabs v-model="currentSubTab" @tab-click="getClassifyList" v-if="currentTab===6">
+          <el-tab-pane 
+            :label="item.label" 
+            v-for="item in subTabs" 
+            :key="item.key" 
+            :name="String(item.key)"
+          ></el-tab-pane>
         </el-tabs>
+
         <div class="scroll-cont classify-section">
           <el-tree
             :data="classifyList"
@@ -64,12 +78,13 @@
     </div>
 
     <div class="dia-bot">
-      <el-button type="primary" style="margin-right:20px" @click="cancelHandle">{{$t('Dialog.confirm_btn')}}</el-button>
+      <el-button type="primary" style="margin-right:20px" @click="saveHandle">{{$t('Dialog.confirm_btn')}}</el-button>
       <el-button type="primary" plain @click="cancelHandle">{{$t('Dialog.cancel_btn')}}</el-button>
     </div>
   </el-dialog>
 </template>
 <script>
+import { operateAuthInterface } from '@/api/modules/setApi';
 export default {
   props: {
     isShow: {
@@ -78,22 +93,31 @@ export default {
     userList: {
       type: Array
     },
-    classifyList: {
+    tabs: {
       type: Array
     },
-    tabs: {
+    subTabs: {
       type: Array
     },
     form: {
       type: Object
     }
   },
+  watch: {
+    isShow(nval) {
+      if(!nval) return
+        
+      this.form.type==='classify'&&this.getClassifyList()
+    }
+  },
   data() {
     return {
-      cascaderIdx: 0,
       selectUserIds: [],
       selectUserList: [],
-      currentTab: '1',
+
+      currentTab: 3,
+      currentSubTab: '4',
+      classifyList: [],
       classifyTips: `注:1、支持加密分类关联部分用户;<br>
        2、若模块分类中,子分类加密父分类不加密,则父分类展示但禁选。`
     }
@@ -102,6 +126,29 @@ export default {
 
   },
   methods:{
+    /* 获取分类列表 */
+    getClassifyList() {
+
+      operateAuthInterface.getClassificationBySource({
+        Source: Number(this.currentTab),
+         SubSource: Number(this.currentTab) === 6 ? Number(this.currentSubTab) : 0
+      }).then(res => {
+        if(res.Ret == 200){
+          this.classifyList = res.Data.List || []
+          //如果是三级分类,去掉最后一级分类的child
+          this.filterNodes(this.classifyList)
+        }
+      })
+    },
+    filterNodes(arr) {
+        arr.length && arr.forEach(item => {
+            item.Child && item.Child.length && this.filterNodes(item.Child)
+            if(item.Child && !item.Child.length) {
+                delete item.Child
+            }
+        })
+    },
+
     /* 选中分类 */
     checkClassify(a,b,c) {
 
@@ -112,26 +159,32 @@ export default {
     /* 选择用户 */
     checkUser() {
       let selectUser = this.$refs.userRef.getCheckedNodes(true);
+
       let arr = []
       arr = selectUser.length&&selectUser.map(_ => ({
         label: _.label,
         value: _.value
       }))
 
-      this.selectUserList = arr
-      this.cascaderIdx++;
+      this.selectUserList = arr.filter(_ => this.selectUserIds.includes(_.value))
     },
 
     removeUser(val) {
-      console.log(this.selectUserIds,val)
-      let index = this.selectUserList.findIndex(_ => _===val)
+      let index = this.selectUserList.findIndex(_ => _.value===val)
       this.selectUserList.splice(index,1)
-      // let 
+
+      this.selectUserIds = this.selectUserIds.filter(_ => _!==val)
+    },
+
+    saveHandle() {
+      if(!this.selectUserIds.length) return this.$message.warning('请选择用户')
+      this.cancelHandle()
     },
 
     cancelHandle() {
       this.selectUserIds = []
       this.selectUserList = []
+      this.currentTab = 3
       this.$emit('update:isShow',false)
     }
   },

+ 106 - 6
src/views/system_manage/components/setClassifySecretDia.vue

@@ -11,8 +11,21 @@
 		v-dialogDrag
   >
     <div class="main">
-      <el-tabs v-model="currentTab" @tab-click="handleClick">
-          <el-tab-pane :label="item.label" :name="String(item.key)" v-for="item in tabs" :key="item.key"></el-tab-pane>
+        <el-radio-group v-model="currentTab" @input="()=>{ currentSubTab='4';getClassifyList()}" style="margin-bottom:10px;">
+          <el-radio-button
+            v-for="item in tabs" 
+            :key="item.key"
+            :label="item.key"
+          >{{item.label}}</el-radio-button>
+        </el-radio-group>
+
+        <el-tabs v-model="currentSubTab" @tab-click="getClassifyList" v-if="currentTab===6">
+          <el-tab-pane 
+            :label="item.label" 
+            v-for="item in subTabs" 
+            :key="item.key" 
+            :name="String(item.key)"
+          ></el-tab-pane>
         </el-tabs>
         <div class="scroll-cont classify-section">
           <el-tree
@@ -21,15 +34,46 @@
               label: 'ClassifyName',
               children: 'Child',
             }"
-            show-checkbox
+            :expand-on-click-node="false"
             node-key="ClassifyId"
-          />
+          >
+            <div class="classify-item" slot-scope="{ data }">
+              <span>{{data.ClassifyName}}</span>
+
+              <el-dropdown style="margin-right: 10px" @command="handleCommand" trigger="click">
+                <span class="el-dropdown-link  el-dropdown-link-img">
+                    <!-- <img src="~@/assets/img/chart_m/Group.png" v-if="item.IsPublic === 0"> -->
+                    <img src="~@/assets/img/chart_m/User.png">
+                </span>
+                <el-dropdown-menu slot="dropdown">
+                  <el-dropdown-item 
+                    :command="{key:'own',data}" 
+                    :class="data.IsPublic === 0 ? 'el-dropdown-menu-item-chat-act' : ''"
+                    class="el-dropdown-menu-item-chat"
+                  >
+                    公开
+                  </el-dropdown-item>
+                  <el-dropdown-item 
+                    class="el-dropdown-menu-item-chat"
+                  >
+                    私密
+                  </el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
+            </div>
+          </el-tree>
         </div>
     </div>
 
+    <div class="dia-bot">
+      <el-button type="primary" style="margin-right:20px" @click="cancelHandle">{{$t('Dialog.confirm_btn')}}</el-button>
+      <el-button type="primary" plain @click="cancelHandle">{{$t('Dialog.cancel_btn')}}</el-button>
+    </div>
+
   </el-dialog>
 </template>
 <script>
+import { operateAuthInterface } from '@/api/modules/setApi';
 export default {
   props: {
     isShow: {
@@ -37,23 +81,79 @@ export default {
     },
     tabs: {
       type: Array
+    },
+    subTabs: {
+      type: Array
+    },
+  },
+  watch: {
+    isShow(nval) {
+      if(!nval) return
+
+      this.getClassifyList()
     }
   },
   data() {
     return {
-      currentTab: '1'
+      currentTab: 3,
+      currentSubTab: '4',
+      classifyList: []
     }
   },
   mounted(){
-
   },
   methods:{
+    
+    /* 获取分类列表 */
+    getClassifyList() {
+
+      operateAuthInterface.getClassificationBySource({
+        Source: Number(this.currentTab),
+        SubSource: Number(this.currentTab) === 6 ? Number(this.currentSubTab) : 0
+      }).then(res => {
+        if(res.Ret == 200){
+          this.classifyList = res.Data.List || []
+          //如果是三级分类,去掉最后一级分类的child
+          this.filterNodes(this.classifyList)
+        }
+      })
+    },
+    filterNodes(arr) {
+        arr.length && arr.forEach(item => {
+            item.Child && item.Child.length && this.filterNodes(item.Child)
+            if(item.Child && !item.Child.length) {
+                delete item.Child
+            }
+        })
+    },
+
     cancelHandle() {
+      this.currentTab = 3
       this.$emit('update:isShow',false)
     }
   },
 }
 </script>
 <style scoped lang='scss'>
+.scroll-cont {
+    padding: 15px;
+    border: 1px solid #ddd;
+    border-radius: 4px;
+    overflow-y: auto;
+  }
 
+.classify-section{
+  max-height: 200px;
+}
+
+.classify-item {
+  flex: 1;
+  display: flex;
+  justify-content: space-between;
+}
+.dia-bot {
+  display: flex;
+  justify-content: center;
+  margin: 30px 0;
+}
 </style>

+ 259 - 67
src/views/system_manage/dataOperaAuth.vue

@@ -7,7 +7,7 @@
           @change="changeSet"
         >
           <el-option label="设置资产权限" :value="1"/>
-          <el-option label="设置可见权限" :value="2"/>
+          <el-option label="设置数据权限" :value="2"/>
         </el-select>
         <el-cascader
           v-model="searchForm.user"
@@ -21,7 +21,7 @@
           collapse-tags
           :show-all-levels="false"
           clearable
-          @change="changeUser"
+          @change="()=>{ filterChange();getUserDataCount();}"
           filterable
           :placeholder="this.$t('SystemManage.OperateAuth.placeholder04')" 
           style="margin: 0 20px"
@@ -35,8 +35,17 @@
           v-if="currAuthSet===1"
         >全量资产转移</el-button>
         <template v-if="currAuthSet===2">
+          <el-tooltip effect="dark" placement="right">
+            <div
+              slot="content"
+              v-html="ruleTips.classifySet"
+              style="line-height: 20px;width:300px"
+            ></div>
+            <i class="el-icon-warning" style="color: #666" />
+          </el-tooltip>
+          
           <el-button type="primary" @click="setMenuSecretHandle">分类加密设置</el-button>
-          <el-button type="primary" @click="setAuthHandle({},'classify')">用户权限设置</el-button>
+          <el-button type="primary" @click="setAuthHandle({},'classify')">按分类设置权限</el-button>
         </template>
         <el-button 
           type="primary" 
@@ -48,16 +57,24 @@
     <div class="main">
 
       <ul class="tab-wrapper">
-        <li :class="['tab-li',{act: default_tab===item.key}]" v-for="item in tabs" :key="item.key" @click="changeTab(item)">{{item.label}}</li>
+        <li :class="['tab-li',{act: default_tab===item.key}]" v-for="item in tabs" :key="item.key" @click="changeTab(item)">
+          {{item.label}}
+
+          <div style="margin-top:20px;color: #666;" v-if="statisticCountMap[item.key]">数量:{{statisticCountMap[item.key]}}</div>
+        </li>
       </ul>
 
+      <el-tabs v-model="default_sub_tab" @tab-click="changeSubTab" v-if="default_tab===6">
+        <el-tab-pane :label="item.label" v-for="item in subTabs" :key="item.key" :name="String(item.key)"></el-tab-pane>
+      </el-tabs>
+
       <div class="filter-wrapper">
         <div>
           <el-input 
             v-model="searchForm.key_word" 
             :placeholder="phText" 
             style="width: 250px;margin-right:20px;"
-            @change="filterChange(1)"
+            @change="filterChange"
             clearable
             >
             <i slot="prefix" class="el-input__icon el-icon-search"/>
@@ -75,10 +92,10 @@
             }"
             collapse-tags
             :show-all-levels="false"
-            :key="default_tab"
+            :key="classifysOptKey"
             clearable
             filterable
-            @change="filterChange(1)"
+            @change="filterChange"
             :placeholder="this.$t('SystemManage.OperateAuth.placeholder03')" 
             style="width: 250px;"
           />
@@ -86,8 +103,14 @@
         </div>
 
         <div>
-          <span>已选:{{ searchForm.checkAll ? total : checkedList.length }}</span>
-          <el-checkbox v-model="searchForm.checkAll" style="margin-left:20px" @change="listCheckAllChange">列表全选</el-checkbox>
+          <!-- <span>已选:{{ searchForm.checkAll ? total : checkedList.length }}</span> -->
+          <el-checkbox 
+            v-model="searchForm.checkAll"
+            :indeterminate="searchForm.checkSome"
+            :disabled="tableData.length===0"
+            style="margin-left:20px" 
+            @change="listCheckAllChange"
+          >列表全选</el-checkbox>
         </div>
       </div>
 
@@ -99,6 +122,8 @@
         border
         style="margin:20px 0"
         @selection-change="selectionChange"
+        @select="selectHandle" 
+        @select-all="selectAllPageHandle"
       >
           <el-table-column
             type="selection"
@@ -131,7 +156,7 @@
           :page_no="page_no"
           :pageSize="pageSize"
           :total="total"
-          @handleCurrentChange="filterChange"
+          @handleCurrentChange="pageChange"
         />
       </div>
 
@@ -151,7 +176,6 @@
           hide-required-asterisk
           label-width="80px"
           :model="transferForm"
-          :rules="dialogFormRules"
           @close="cancelTransfer"
         >
           <!-- 原创建人 -->
@@ -178,7 +202,10 @@
             />
           </el-form-item>
 
-          <el-form-item :label="$t('SystemManage.OperateAuth.new_creator')" prop="newUser">
+          <el-form-item :label="$t('SystemManage.OperateAuth.new_creator')" prop="newUser" :rules="[
+              { required: true, message: this.$t('SystemManage.OperateAuth.placeholder05'), trigger: 'change' }
+            ]"
+          >
             <el-cascader
               v-model="transferForm.newUser"
               :options="userList"
@@ -221,8 +248,8 @@
     <opearAuthSetDia
       :isShow.sync="isSetAuthDia"
       :userList="userList"
-      :classifyList="classifyOption"
       :tabs="tabs"
+      :subTabs="subTabs"
       :form="authForm"
     />
 
@@ -230,11 +257,12 @@
     <setClassifySecretDia
       :isShow.sync="isSetClassifySecret"
       :tabs="tabs"
+      :subTabs="subTabs"
     />
   </div>
 </template>
 <script>
-import { operateAuthInterface } from '@/api/modules/setApi';
+import { operateAuthInterface,departInterence } from '@/api/modules/setApi';
 import {dataBaseInterface} from '@/api/modules/chartApi'
 import mPage from '@/components/mPage.vue';
 import mDialog from '@/components/mDialog.vue'
@@ -243,28 +271,6 @@ import setClassifySecretDia from './components/setClassifySecretDia.vue';
 export default {
   components: { mPage,mDialog,opearAuthSetDia,setClassifySecretDia },
   computed: {
-    //权限配置化后的tabs
-    authTabs(){
-        const {operateAuthPermission,checkPermissionBtn} = this.permissionBtn
-        const operaMap = {
-            1:checkPermissionBtn(operateAuthPermission.operateAuth_manual),
-            2:checkPermissionBtn(operateAuthPermission.operateAuth_mysteel),
-            3:checkPermissionBtn(operateAuthPermission.operateAuth_etaLib),
-            4:checkPermissionBtn(operateAuthPermission.operateAuth_etaPredictLib),
-            5:checkPermissionBtn(operateAuthPermission.operateAuth_chartLib),
-
-
-
-            6: true
-        }
-        let temp = []
-        for(const k in operaMap){
-            if(operaMap[k]){
-                temp.push(this.tabs[k-1])
-            }
-        }
-        return temp
-    },
     tabs(){
       const tabs = [
         { label: this.$t('SystemManage.OperateAuth.tab01'), key: 1 },
@@ -276,6 +282,15 @@ export default {
       ]
       return this.currAuthSet===1 ? tabs : tabs.filter(item => [3,4,5,6].includes(item.key))
     },
+    subTabs() {
+      const subTabs = [
+        { label: '自定义分析', key: 4 },
+        { label: '时间序列表格', key: 2 },
+        { label: '混合表格', key: 3 },
+      ]
+
+      return subTabs
+    },
     tableColums() {
       const clomusMap = {
         5: [
@@ -314,23 +329,37 @@ export default {
       currAuthSet: 1,//设置资产
 
       default_tab: 1,
+      default_sub_tab: '4',
       searchForm: {
         user: '',
         key_word: '',
         classifys:[],
-        checkAll: false
+        checkAll: false, //控制全选显示状态
+        checkSome: false
       },
+      isSelectAll: false, //真正意义上的全选或不全选
 
       classifyOption: [],
+      classifysOptKey: 0,
       userList: [],
 
-      checkedList: [],
+      checkedList: [], //不全选勾选中的 或 全选取消勾的
+      selectionReactCancel:false,//手动设置选中中
 
       tableLoading: false,
       tableData:[],
       page_no: 1,
       total: 0,
       pageSize: 10,
+      statisticCountMap: {},
+
+      ruleTips: {
+        'classifySet': `
+          1、”分类加密设置“:分类默认公开,分类设置加密后,新增用户默认无加密分类的数据权限。<br>
+          2、按分类设置权限:加密的分类支持开放权限给用户。<br>
+          3、批量设置:同时设置单个或多个数据的权限。
+        `
+      },
 
       /* 转移弹窗 */
       isTransferDia: false,
@@ -368,13 +397,17 @@ export default {
     getClassifyList() {
       if(!this.default_tab) return
 
-      operateAuthInterface.getClassificationBySource({Source: this.default_tab}).then(res => {
+      operateAuthInterface.getClassificationBySource({
+        Source: this.default_tab,
+        SubSource: this.default_tab === 6 ? Number(this.default_sub_tab) : 0
+      }).then(res => {
         if(res.Ret == 200){
           this.classifyOption = res.Data.List || []
           //如果是三级分类,去掉最后一级分类的child
           if([3,4,5,6].includes(this.default_tab)){
             this.filterNodes(this.classifyOption)
           }
+          ++this.classifysOptKey;
         }
       })
     },
@@ -389,25 +422,38 @@ export default {
 
      /* 获取用户列表 */
     getUserList() {
-      // customInterence.getSale({Status: 0,AllEnabled: true}).then(res => {
-      dataBaseInterface.getEdbChartAdminList({Source: this.default_tab}).then(res=>{
+      dataBaseInterface.getEdbChartAdminList({Source: 3}).then(res=>{
         if(res.Ret !== 200) return
 
-        this.userList = res.Data || [];
+        this.userList = res.Data || []
       })
     },
 
-    getTableData() {
+    /* 获取用户的资产数量 */
+    async getUserDataCount() {
+      if(!this.searchForm.user){
+        this.statisticCountMap = {}
+        return
+      }
+
+      const res = await operateAuthInterface.getUserStatistic({ UserId: this.searchForm.user })
+      
+      if(res.Ret !== 200) return
+      this.statisticCountMap = res.Data;
+    },
+    
+    getTableData(type) {
       if(!this.default_tab) return
 
       this.tableLoading = true;
       let params = {
         Source: this.default_tab,
-        UserId: this.searchForm.user || '',
+        UserId: this.searchForm.user || 0,
         CurrentIndex: this.page_no,
         PageSize: this.pageSize,
         Keyword: this.searchForm.key_word,
-        Classify:this.searchForm.classifys.join(',')
+        Classify:this.searchForm.classifys.join(','),
+        SubSource: this.default_tab === 6 ? Number(this.default_sub_tab) : 0
       }
 			operateAuthInterface.list(params).then(res => {
         this.tableLoading = false;
@@ -417,45 +463,160 @@ export default {
 
         this.tableData = Data.List || [];
         this.total = Data.Paging.Totals;
+        
+        if(type==='pageChange'){
+          //页码变化 选中项不做清空
+          this.checkedSomeSelection()
+        }else {
+          this.listCheckAllChange(false)
+
+        }
 			});
     },
 
+    /* 设置当页数据勾选状态 */
+    checkedSomeSelection() {
+      this.selectionReactCancel=true
+      console.log(this.checkedList,this.isSelectAll)
+      if(!this.isSelectAll){
+          this.checkedList.map(_ =>{
+              let row = this.tableData.find(item => item.DataId==_.DataId)
+              if(row){ //设置部分选中
+                  setTimeout(()=>{
+                      this.$refs.table.toggleRowSelection(row,true)
+                  },20)
+              }
+          })
+      }else{
+          // this.$refs.table && this.$refs.table.clearSelection()
+          this.$refs.table &&this.$refs.table.toggleAllSelection()
+          this.checkedList.map(_ =>{
+              let row = this.tableData.find(item => item.DataId==_.DataId)
+              if(row){ //设置部分不勾选
+                  setTimeout(()=>{
+                      this.$refs.table.toggleRowSelection(row,false)
+                  },20)
+              }
+          })
+      }
+      setTimeout(()=>{
+          this.selectionReactCancel=false
+      },30)
+    },
+
+    /* 切换模块 */
     changeTab({key}) {
       this.default_tab = key;
+      this.default_sub_tab = '4';
+      this.searchForm.classifys=[]
+      this.searchForm.key_word=''
+      this.searchForm.checkAll = false
+
+      this.page_no = 1;
+      this.getClassifyList()
+
+      this.getTableData();
+    },
+
+    changeSubTab() {
       this.searchForm.classifys=[]
       this.searchForm.key_word=''
+      this.searchForm.checkAll = false
+
       this.page_no = 1;
       this.getClassifyList()
-      // this.getUserList()
+
       this.getTableData();
     },
 
     changeSet() {
-      this.changeTab({key:''})
+      this.changeTab({key: this.currAuthSet===1?1:3})
     },
 
-    //列表全选改变
+    //列表全选或全不选
     listCheckAllChange(value){
-        this.searchForm.checkAll = value
-        this.$refs.table && this.$refs.table.clearSelection()
+      this.checkedList = []
+      this.isSelectAll = value
+    
+      value ? this.$refs.table && this.$refs.table.toggleAllSelection() : this.$refs.table && this.$refs.table.clearSelection()
+    },
 
-        if(value){
-            this.$refs.table && this.$refs.table.toggleAllSelection()
-        }
+    //筛选改变
+    filterChange() {
+      this.page_no = 1;
+      this.getTableData()
     },
 
-    filterChange(page=1) {
+    // 页码改变
+    pageChange(page) {
        this.page_no = page;
-       this.getTableData()
+       this.getTableData('pageChange')
     },
 
     selectionChange(val) {
-       this.checkedList = val || [];
+      if(this.selectionReactCancel) return
+        // selectAllHandle的触发在selectionChange后面,将selectionChange的逻辑延迟一下
+        //设置全选框状态 选中 半选 不选
+        setTimeout(()=>{
+            let filterChecked = Array.from(new Set(this.checkedList))
+            //全选
+            if(
+              (filterChecked.length===this.total&&this.total>0 && (!this.isSelectAll))
+                || (filterChecked.length === 0 && this.isSelectAll)
+            ){
+                this.searchForm.checkAll = true
+                this.searchForm.checkSome = false
+            //不选
+            }else if(
+              (filterChecked.length === 0 && (!this.isSelectAll))
+              || (filterChecked.length === this.total && this.isSelectAll)
+            ){
+                this.searchForm.checkAll = false
+                this.searchForm.checkSome = false
+            //半选
+            }else{
+                this.searchForm.checkAll = false
+                this.searchForm.checkSome=true
+            }
+        },1)
+    },
+
+    //单选
+    selectHandle(selection,row){ //当前选中的项是进选中还是取消选中中
+      console.log(selection,row)
+        if(this.selectionReactCancel) return 
+
+        //当前项是选中还是取消选
+        let haveChecked = selection.some(_ => _.DataId === row.DataId);
+
+        //全选取消选和不全选选中才有意义
+        if((haveChecked&&!this.isSelectAll) || (!haveChecked&&this.isSelectAll)) {
+          this.checkedList.push(row)
+        }else {
+          this.checkedList=this.checkedList.filter(_ => _.DataId!==row.DataId)
+        }
+    },
+
+    //整列选
+    selectAllPageHandle(selection){
+        if(this.selectionReactCancel) return 
+        
+        //当前页是选中还是取消
+        let haveChecked = selection && selection.length>0;
+
+        //全选取消选和不全选选中才有意义
+        if((haveChecked&&!this.isSelectAll) || (!haveChecked&&this.isSelectAll)) {
+          this.checkedList = [...this.checkedList,...this.tableData]
+        }else {
+
+          let pageIds = this.tableData.map(_ => _.DataId);
+          this.checkedList = this.checkedList.filter(_ => !pageIds.includes(_.DataId))
+        }
     },
 
     /* 转移所属权限 单转 批量转 全量转*/
     transferAuthHandle({ CreateUserName,DataId },type='single') {
-      if(type === 'multiple' && !this.checkedList.length) return this.$message.warning(this.$t('SystemManage.OperateAuth.msg01'))
+      if(type === 'multiple' && !this.checkedList.length &&!this.isSelectAll) return this.$message.warning(this.$t('SystemManage.OperateAuth.msg01'))
 
       this.transferForm = {
         type,
@@ -463,7 +624,7 @@ export default {
         creatorIds: [],
         ids:type === 'single' ? [DataId] : this.checkedList.map(_ => _.DataId),
         newUser: '',
-        assetType: []
+        assetTypes: this.tabs.map(_=>_.key)
       }
       this.isTransferDia = true
     },
@@ -472,16 +633,44 @@ export default {
     async confirmTransferHandle() {
       await this.$refs.formRef.validate()
 
-      // const res = await operateAuthInterface.authEdit({
-      //   Source: this.default_tab,
-      //   DataIdList: this.dialogForm.ids,
-      //   NewUserId: Number(this.dialogForm.new_user)
-      // })
+      //全量转
+      if(this.transferForm.type==='all') return this.transferAllHandle()
+
+      //单模块转
+      const res = await operateAuthInterface.authEdit({
+        Source: this.default_tab,
+        SubSource: this.default_tab === 6 ? Number(this.default_sub_tab) : 0,
+        DataIdList: this.isSelectAll ? [] : this.transferForm.ids,
+        NoDataIdList: this.isSelectAll ? this.transferForm.ids : [],
+        NewUserId: Number(this.transferForm.newUser),
+        Keyword:this.searchForm.key_word,
+        UserId:this.searchForm.user||0,
+        Classify:this.searchForm.classifys.join(','),
+        IsSelectAll:this.isSelectAll
+      })
+
+      if(res.Ret !== 200) return
+      this.$message.success(res.Msg);
+
+      this.cancelTransfer();
+      this.getTableData();
+    },
+
+    /* 全量转移 */
+    async transferAllHandle() {
+      if(!this.transferForm.creatorIds.length) return this.$message.warning('请选择原创建人')
+
+      const res = await operateAuthInterface.transferAllData({
+        Source: this.transferForm.assetTypes,
+        OldUserId: this.transferForm.creatorIds.map(_ => Number(_)),
+        NewUserId: Number(this.transferForm.newUser)
+      })
+
+      if(res.Ret !== 200) return 
+      this.$message.success(res.Msg);
 
-      // if(res.Ret !== 200) return
-      // this.$message.success(res.Msg);
-      // this.cancelDialogHandle();
-      // this.getTableData();
+      this.cancelTransfer();
+      this.getTableData();
     },
 
     cancelTransfer() {
@@ -566,4 +755,7 @@ export default {
 .operateauth-dialog-cont .el-input {
   width: 100%;
 }
+.operate-auth-box .el-tabs__nav-wrap::after {
+  background: transparent;
+}
 </style>

部分文件因为文件数量过多而无法显示