Browse Source

Merge branch 'master'

Karsa 1 year ago
parent
commit
490978cc1c
52 changed files with 2206 additions and 587 deletions
  1. 1 0
      config/index.js
  2. 8 0
      src/api/modules/pptApi.js
  3. 8 0
      src/api/modules/pptEnApi.js
  4. BIN
      src/assets/img/eta_base_config/email_content_template.png
  5. BIN
      src/assets/img/icons/question_mark_black.png
  6. BIN
      src/assets/img/icons/warn-circle-gray.png
  7. 152 7
      src/utils/buttonConfig.js
  8. 1 1
      src/views/Home.vue
  9. 12 5
      src/views/chartRelevance_manage/fittingEquationList.vue
  10. 10 5
      src/views/chartRelevance_manage/list.vue
  11. 12 6
      src/views/chartRelevance_manage/statisticFeatureList.vue
  12. 130 5
      src/views/dataEntry_manage/addChart.vue
  13. 138 33
      src/views/dataEntry_manage/chartSetting.vue
  14. 80 36
      src/views/dataEntry_manage/components/DateChooseDia.vue
  15. 97 0
      src/views/dataEntry_manage/components/LegendEditDia.vue
  16. 10 0
      src/views/dataEntry_manage/css/chartfit.scss
  17. 82 13
      src/views/dataEntry_manage/databaseComponents/chartTrendRender.vue
  18. 67 13
      src/views/dataEntry_manage/databaseComponents/createChart.vue
  19. 44 23
      src/views/dataEntry_manage/databaseList.vue
  20. 184 11
      src/views/dataEntry_manage/editChart.vue
  21. 210 37
      src/views/dataEntry_manage/mixins/addOreditMixin.js
  22. 100 65
      src/views/dataEntry_manage/mixins/chartPublic.js
  23. 5 5
      src/views/dataEntry_manage/thirdBase/BAIINFOTargetbase.vue
  24. 5 5
      src/views/dataEntry_manage/thirdBase/SCITargetbase.vue
  25. 5 5
      src/views/dataEntry_manage/thirdBase/smmTargetbase.vue
  26. 4 4
      src/views/dataEntry_manage/thirdBase/steelChemicalbase.vue
  27. 1 1
      src/views/datasheet_manage/mixins/classifyMixin.js
  28. 38 16
      src/views/datasheet_manage/sheetList.vue
  29. 14 5
      src/views/futures_manage/commodityChartBase.vue
  30. 110 29
      src/views/mychart_manage/components/chartDetailDia.vue
  31. 23 7
      src/views/mychart_manage/index.vue
  32. 100 97
      src/views/ppt_manage/mixins/mixins.js
  33. 2 2
      src/views/ppt_manage/newVersion/components/Cover.vue
  34. 2 2
      src/views/ppt_manage/newVersion/components/CoverEn.vue
  35. 2 2
      src/views/ppt_manage/newVersion/components/catalog/pptContent.vue
  36. 9 9
      src/views/ppt_manage/newVersion/components/catalog/pptContentEn.vue
  37. 20 5
      src/views/ppt_manage/newVersion/components/editor/ChooseCover.vue
  38. 22 7
      src/views/ppt_manage/newVersion/components/editor/ChooseCoverEn.vue
  39. 51 29
      src/views/ppt_manage/newVersion/pptCatalog.vue
  40. 1 0
      src/views/ppt_manage/newVersion/pptEditor.vue
  41. 49 29
      src/views/ppt_manage/newVersion/pptEnCatalog.vue
  42. 1 0
      src/views/ppt_manage/newVersion/pptEnEditor.vue
  43. 25 5
      src/views/predictEdb_manage/addPredicEdb.vue
  44. 73 9
      src/views/predictEdb_manage/components/chartInfo.vue
  45. 29 7
      src/views/predictEdb_manage/components/edbDetail.vue
  46. 30 11
      src/views/predictEdb_manage/predictEdb.vue
  47. 9 3
      src/views/semantics_manage/documentPage.vue
  48. 18 6
      src/views/semantics_manage/semanticsPage.vue
  49. 1 0
      src/views/system_manage/components/imgUpload.vue
  50. 1 1
      src/views/system_manage/dataAuthManage.vue
  51. 6 5
      src/views/system_manage/departManage.vue
  52. 204 21
      src/views/system_manage/etaBaseConfig.vue

+ 1 - 0
config/index.js

@@ -38,6 +38,7 @@ module.exports = {
     proxyTable:{
 		'/adminapi': {
       target: "http://8.136.199.33:7778",
+      // target: "http://192.168.20.49:8605",
 			// secure:false,  // 如果是https接口,需要配置这个参数
 			changeOrigin:true, // 如果接口跨域,需要进行这个参数配置
 			pathRewrite:{

+ 8 - 0
src/api/modules/pptApi.js

@@ -10,6 +10,14 @@ export default{
     getpptList:params=>{
         return http.get('/pptv2/list',params)
     },
+    /**
+     * 验证PPT标题是否冲突
+     * PptId:string PptId
+     * Title:string 标题
+     */
+    pptTitleCheck:params=>{
+        return http.get('/pptv2/titleCheck',params)
+    },
     /**
      * 新增ppt
      * FirstPage:{Title,ReportType,PptDate,ImgUrl} 封面信息

+ 8 - 0
src/api/modules/pptEnApi.js

@@ -3,6 +3,14 @@ import http from "@/api/http.js"
  * 英文PPT 接口 
  */
 export const pptEnInterface = {
+    /**
+     * 验证PPT标题是否冲突
+     * PptId:string PptId
+     * Title:string 标题
+     */
+    pptTitleCheck:params=>{
+        return http.get('/ppt_english/titleCheck',params)
+    },
     /**
      * 新增ppt
      * FirstPage:{Title,ReportType,PptDate,ImgUrl} 封面信息

BIN
src/assets/img/eta_base_config/email_content_template.png


BIN
src/assets/img/icons/question_mark_black.png


BIN
src/assets/img/icons/warn-circle-gray.png


+ 152 - 7
src/utils/buttonConfig.js

@@ -10,6 +10,7 @@ export const checkPermissionBtn = (button_code)=>{
     const buttonCodes = store.state.permissionButton.permissionButtons.map(item=>item.ButtonCode)
     return buttonCodes.includes(button_code)
 }
+
 /*
  * -----------------------------------------------------------------------------研报管理------------------------------------------------
  */
@@ -140,6 +141,9 @@ export const pptPermission ={
     /*--------页面按钮操作-------- */
     ppt_save:'ppt:save',//添加PPT按钮,同时也控制编辑权限
     ppt_merge:'ppt:merge',//合并PPT
+    ppt_addCatalog:'ppt:addCatalog',//添加我的目录
+    ppt_setShare:'ppt:setShare',//设置共享
+    ppt_visible:'ppt:visible',//可见权限
 }
 /*
 *--------英文PPT---------- 
@@ -155,6 +159,9 @@ export const enPPTPermission={
     /*--------页面按钮操作-------- */
     pptEn_save:'pptEn:save',//添加PPT按钮,同时也控制编辑权限
     pptEn_merge:'pptEn:merge',//合并PPT
+    pptEn_addCatalog:'pptEn:addCatalog',
+    pptEn_setShare:'pptEn:setShare',
+    pptEn_visible:'pptEn:visible',
 }
 
 /*
@@ -178,14 +185,28 @@ export const dataSourcePermission = {
     /*--------钢联化工数据库---- */
     mysteelData_refresh:'mysteelData:refresh',//一键刷新
     mysteelData_export:'mysteelData:export',
-    mysteelData_add:'mysteelData:add',
+    mysteelData_add:'mysteelData:add',//新增指标
+    mysteelData_classifyOpt_add:'mysteelData:classifyOpt:add',//添加目录和子项
+    mysteelData_classifyOpt_edit:'mysteelData:classifyOpt:edit',//编辑
+    mysteelData_classifyOpt_delete:'mysteelData:classifyOpt:delete',//删除
     /*--------SMM原始数据库---- */
     smmData_export:'smmData:export',
+    smmData_classifyOpt_add:'smmData:classifyOpt:add',//添加目录和子项
+    smmData_classifyOpt_edit:'smmData:classifyOpt:edit',//编辑
+    smmData_classifyOpt_delete:'smmData:classifyOpt:delete',//删除
+
     /*--------百川盈孚---- */
     bcyfData_edit:'bcyfData:edit',//编辑指标按钮
     bcyfData_export:'bcyfData:export',
+    bcyfData_classifyOpt_add:'bcyfData:classifyOpt:add',//添加目录和子项
+    bcyfData_classifyOpt_edit:'bcyfData:classifyOpt:edit',//编辑
+    bcyfData_classifyOpt_delete:'bcyfData:classifyOpt:delete',//删除
+
     /*--------卓创数据(红桃3)---- */
     hongtao3Data_export:'hongtao3Data:export',
+    hongtao3Data_classifyOpt_add:'hongtao3Data:classifyOpt:add',
+    hongtao3Data_classifyOpt_edit:'hongtao3Data:classifyOpt:edit',
+    hongtao3Data_classifyOpt_delete:'hongtao3Data:classifyOpt:delete',
     /*--------中国煤炭市场网)---- */
     zgmtData_export:'zgmtData:export',
     /*--------EIA  STEO报告---- */
@@ -205,9 +226,15 @@ export const edbDataPermission = {
     edbData_enNameSetting:'edbData:enNameSetting',//设置英文名称
     edbData_edbSource:'edbData:edbSource',//指标溯源
     edbData_copyData:'edbData:copyData',//复制数据
-    edbData_toImgs:'edbData:toImgs',//一键成图
+    /* edbData_toImgs:'edbData:toImgs',//一键成图 */
     edbData_edit:'edbData:edit',//指标编辑,也包括列表项的编辑按钮
     edbData_update:'edbData:update',//更新指标
+    edbData_saveEdb:'edbData:saveEdb',//保存
+    edbData_deleteEdb:'edbData:deleteEdb',//删除
+    edbData_showChartBasis:'edbData:showChartBasis',//展示/隐藏同比图
+    edbData_switchSeason:'edbData:switchSeason',//切换季节性图
+    edbData_editLimit:'edbData:editLimit',//编辑上下限
+    edbData_calculateAgain:'edbData:calculateAgain',//重新计算
     /*------------页面按钮---------- */
     edbData_batchUpdate:'edbData:batchUpdate',//一键更新
     edbData_dataAdjust:'edbData:dataAdjust',//数据调整
@@ -216,6 +243,11 @@ export const edbDataPermission = {
     edbData_calcuEdb:'edbData:calcuEdb',//计算指标
     edbData_addEdb:'edbData:addEdb',//添加指标
     edbData_switchEn:'edbData:switchEn',//切换英文版
+    edbData_classifyOpt_add:'edbData:classifyOpt:add',//添加/编辑分类
+    edbData_classifyOpt_delete:'edbData:classifyOpt:delete',//删除分类
+    edbData_checkRelatedChart:'edbData:checkRelatedChart',//查看关联图表
+    edbData_checkRelatedEdb:'edbData:checkRelatedEdb',//查看关联指标
+    edbData_checkCalcChart:'edbData:checkCalcChart',//查看计算指标
 }
 /*
  * ---------------------------------------------------------------------------ETA预测指标------------------------------------------------
@@ -223,7 +255,7 @@ export const edbDataPermission = {
 export const predictEdbPermission = {
     /*-----------指标详情按钮--------- */
     edbPreData_switchSeason:'edbPreData:switchSeason',//切换季节性图
-    edbPreData_viewData:'edbPreData:viewData',//查看数据
+    /* edbPreData_viewData:'edbPreData:viewData',//查看数据 */
     edbPreData_copyData:'edbPreData:copyData',//复制数据
     edbPreData_del:'edbPreData:del',//删除
     edbPreData_recalcu:'edbPreData:recalcu',//重新计算
@@ -232,10 +264,17 @@ export const predictEdbPermission = {
     edbPreData_update:'edbPreData:update',//更新
     edbPreData_edbSource:'edbPreData:edbSource',//指标溯源
     edbPreData_enNameSetting:'edbPreData:enNameSetting',//设置英文名称
+    edbPreData_editLimit:'edbPreData:editLimit',//编辑上下限
     /*------------页面按钮---------- */
     edbPreData_calcuEdb:'edbPreData:calcuEdb',//计算指标
     edbPreData_addEdb:'edbPreData:addEdb',//添加指标
     edbPreData_switchEn:'edbPreData:switchEn',//切换英文版
+    edbPreData_isOnlyMine:'edbPreData:isOnlyMine',//只看我的
+    edbPreData_classifyOpt_add:'edbPreData:classifyOpt:add',//添加/编辑分类
+    edbPreData_classifyOpt_delete:'edbPreData:classifyOpt:delete',//删除分类
+    edbPreData_checkRelatedChart:'edbPreData:checkRelatedChart',//查看关联图表
+    edbPreData_checkRelatedEdb:'edbPreData:checkRelatedEdb',//查看关联指标
+    edbPreData_checkPreRule:'edbPreData:checkPreRule',//查看预测规则
 }
 
 /*
@@ -255,9 +294,13 @@ export const chartLibPermission = {
     chartLib_refresh:'chartLib:refresh',
     chartLib_addMy:'chartLib:addMy',//加入我的图库
     chartLib_share:'chartLib:share',
+    chartLib_editLimit:'chartLib:editLimit',//编辑上下限
     /*------------页面按钮---------- */
     chartLib_add:'chartLib:add',
     chartLib_switchEn:'chartLib:switchEn',
+    chartLib_isOnlyMine:'chartLib:isOnlyMine',//只看我的
+    chartLib_classifyOpt_add:'chartLib:classifyOpt:add',//新增/编辑分类
+	chartLib_classifyOpt_delete:'chartLib:classifyOpt:delete',//删除分类
 }
 
 /*
@@ -276,8 +319,16 @@ export const myETAPermission = {
     myChart_copyTo:'myChart:copyTo',
     myChart_share:'myChart:share',
     myChart_move:'myChart:move',//移出,同时也控制列表项的移出
+    myChart_copyData:'myChart:copyData',//复制数据
+    myChart_checkData:'myChart:checkData',//查看数据
+    myChart_editLimit:'myChart:editLimit',//编辑上下限
     /*-----------页面按钮--------- */
     myChart_selectChart:'myChart:selectChart',//选择图表
+    myChart_classifyOpt_copy:'myChart:classifyOpt:copy',//复制
+    myChart_classifyOpt_show:'myChart:classifyOpt:show',//可见权限
+    myChart_classifyOpt_edit:'myChart:classifyOpt:edit',//添加我的分类
+    myChart_classifyOpt_rename:'myChart:classifyOpt:rename',//重命名
+    myChart_classifyOpt_delete:'myChart:classifyOpt:delete',//删除
 }
 /*
  * --------------------------------------------------------------------------ETA表格------------------------------------------------
@@ -286,13 +337,28 @@ export const etaTablePermission = {
     /*-----------页面按钮--------- */
     etaTable_customize:'etaTable:customize',//自定义表格这个按钮显示不显示
     etaTable_excel:'etaTable:excel',//添加Excel表格这个按钮显示不显示
+    etaTable_classifyOpt_edit:'etaTable:classifyOpt:edit',//添加编辑表格
+    etaTable_classifyOpt_delete:'etaTable:classifyOpt:delete',//删除表格
+
     /*-----------自定义表格--------- */
-    etaTable_customize_del:'etaTable:customize:del',
+    /* etaTable_customize_del:'etaTable:customize:del',
     etaTable_customize_download:'etaTable:customize:download',
     etaTable_customize_otherSave:'etaTable:customize:otherSave',
     etaTable_customize_refresh:'etaTable:customize:refresh',
-    etaTable_customize_edit:'etaTable:customize:edit',
-
+    etaTable_customize_edit:'etaTable:customize:edit', */
+    
+    //混合表格
+    etaTable_customize_mix_edit:'etaTable:customize:mix:edit',//编辑
+    etaTable_customize_mix_refresh:'etaTable:customize:mix:refresh',//刷新
+    etaTable_customize_mix_otherSave:'etaTable:customize:mix:otherSave',//另存为
+    etaTable_customize_mix_download:'etaTable:customize:mix:download',//下载
+    etaTable_customize_mix_del:'etaTable:customize:mix:del',//删除
+    //数据表格
+    etaTable_customize_data_edit:'etaTable:customize:data:edit',//编辑
+    etaTable_customize_data_refresh:'etaTable:customize:data:refresh',//刷新
+    etaTable_customize_data_otherSave:'etaTable:customize:data:otherSave',//另存为
+    etaTable_customize_data_download:'etaTable:customize:data:download',//下载
+    etaTable_customize_data_del:'etaTable:customize:data:del',//删除
     /*-----------常规表格--------- */
     etaTable_excel_del:'etaTable:excel:del',
     etaTable_excel_download:'etaTable:excel:download',
@@ -327,8 +393,17 @@ export const sandboxPermission = {
 export const semanticPermission = {
     /*-----------文档管理--------- */
     docPage_save:'docPage:save',//添加编辑文档
+    docPage_delete:'docPage:delete',//删除文档
+    docPage_classifyOpt_edit:'docPage:classifyOpt:edit',//添加编辑分类
+    docPage_classifyOpt_delete:'docPage:classifyOpt:delete',//删除分类
     /*-----------文档对比--------- */
     saPage_save:'saPage:save',//添加编辑对比文档
+    saPage_download:'saPage:download',//下载
+    saPage_copyOffice:'saPage:copyOffice',//复制到Office
+    saPage_copyWeixin:'saPage:copyWeixin',//复制到微信
+    saPage_delete:'saPage:delete',//删除对比文档
+    saPage_classifyOpt_edit:'saPage:classifyOpt:edit',//添加编辑分类
+    saPage_classifyOpt_delete:'saPage:classifyOpt:delete',//删除分类
     /*-----------标签管理--------- */
     tagPage_del:'tagPage:del',
     tagPage_save:'tagPage:save',//添加编辑标签
@@ -341,6 +416,9 @@ export const statisticPermission = {
     corrAnalysis_addChart:'corrAnalysis:addChart',//添加图表按钮
     corrAnalysis_viewData:'corrAnalysis:viewData',//查看表格数据
     corrAnalysis_copyData:'corrAnalysis:copyData',//复制表格数据
+    corrAnalysis_onlyMine:'corrAnalysis:onlyMine',//只看我的
+    corrAnalysis_classifyOpt_edit:'corrAnalysis:classifyOpt:edit',//添加/编辑分类
+    corrAnalysis_classifyOpt_delete:'corrAnalysis:classifyOpt:delete',//删除分类
         /*---图表操作栏--- */
     corrAnalysis_del:'corrAnalysis:del',
     corrAnalysis_enNameSetting:'corrAnalysis:enNameSetting',
@@ -354,6 +432,9 @@ export const statisticPermission = {
 
     /*-----------统计特征--------- */
     statisticFeature_addChart:'statisticFeature:addChart',//添加图表按钮
+    statisticFeature_onlyMine:'statisticFeature:onlyMine',//只看我的
+    statisticFeature_classifyOpt_edit:'statisticFeature:classifyOpt:edit',//添加/编辑分类
+    statisticFeature_classifyOpt_delete:'statisticFeature:classifyOpt:delete',//删除分类
         /*---图表操作栏--- */
     statisticFeature_del:'statisticFeature:del',
     statisticFeature_enNameSetting:'statisticFeature:enNameSetting',
@@ -367,6 +448,9 @@ export const statisticPermission = {
 
     /*-----------拟合方程曲线--------- */
     fittingEq_addChart:'fittingEq:addChart',//添加图表按钮
+    fittingEq_onlyMine:'fittingEq:onlyMine',//只看我的
+    fittingEq_classifyOpt_edit:'fittingEq:classifyOpt:edit',//添加编辑分类
+    fittingEq_classifyOpt_delete:'fittingEq:classifyOpt:delete',//删除分类
         /*---图表操作栏--- */
     fittingEq_del:'fittingEq:del',
     fittingEq_enNameSetting:'fittingEq:enNameSetting',
@@ -393,6 +477,10 @@ export const productPricePermission = {
     /*-----------页面按钮--------- */
     goodsPrice_incomeLine:'goodsPrice:incomeLine',//添加利润曲线
     goodsPrice_priceLine:'goodsPrice:priceLine',//添加价格曲线
+    goodsPrice_classifyOpt_edit:'goodsPrice:classifyOpt:edit',//添加/编辑分类
+    goodsPrice_classifyOpt_delete:'goodsPrice:classifyOpt:delete',//删除分类
+    goodsPrice_onlyMine:'goodsPrice:onlyMine',//只看我的
+    goodsPrice_editLimit:'goodsPrice:editLimit',//编辑上下限
     /* 利润曲线 */
     goodsPrice_incomeLine_del:'goodsPrice:incomeLine:del',
     goodsPrice_incomeLine_enNameSetting:'goodsPrice:incomeLine:enNameSetting',
@@ -426,6 +514,8 @@ export const sysDepartPermission = {
     sysDepart_del:'sysDepart:del',//用户删除
     sysDepart_saveUser_researchGroup:'sysDepart:saveUser:researchGroup',//添加/编辑用户表单中,研究方向的按钮
     sysDepart_saveUser_LabelVal:'sysDepart:saveUser:LabelVal',//姓名角色的标签
+    sysDepart_classifyOpt_edit:'sysDepart:classifyOpt:edit',//添加/编辑部门
+    sysDepart_classifyOpt_delete:'sysDepart:classifyOpt:delete',//删除部门
     /*-----------角色管理-------- */
     sysRole_del:'sysRole:del',//删除角色
     sysRole_settingAuth:'sysRole:settingAuth',//设置/查看权限
@@ -453,6 +543,8 @@ export const operateAuthPermission = {
     /*---------手工数据指标-------- */
     operateAuth_manual:'operateAuth:manual',
     operateAuth_manual_edit:'operateAuth:manual:edit',
+    /*---------手工数据权限-------- */
+    sysdataAuth_classify:'sysdataAuth:classify',//手工指标分类
 }
 /*-----------基本配置-------- */
 export const baseConfigPermission = {
@@ -477,4 +569,57 @@ export const outlinkConfigPermission = {
     outlinkListConfig_add:'outlinkListConfig:add',//添加
     outlinkListConfig_edit:'outlinkListConfig:edit',//编辑
     outlinkListConfig_del:'outlinkListConfig:del',//删除
-}
+}
+
+
+//创建了新的ManageBtn记得添加到这里
+const btnMap  = {
+    reportManageBtn,enReportManageBtn,
+    classifyBtn,enClassifyBtn,authorManage,
+    enChartPermission,cloudDisk,
+    pptPermission,enPPTPermission,
+    dataSourcePermission,
+    edbDataPermission,predictEdbPermission,chartLibPermission,
+    myETAPermission,etaTablePermission,
+    sandboxPermission,semanticPermission,
+    statisticPermission,stockPlantPermission,
+    productPricePermission,sysDepartPermission,
+    operateAuthPermission,baseConfigPermission,
+    outlinkConfigPermission
+}
+
+/**
+ *自定义指令使用示例:
+ * <el-checkbox v-model="isOnlyMe"
+ *  v-permission="permissionBtn.chartLibPermission.chartLib_isOnlyMine"
+ *  >只看我的</el-checkbox>
+ */
+/**
+ * 函数使用示例:
+ *  <span v-if="data.Button.OpButton
+ *      &&permissionBtn.isShowBtn('chartLibPermission','chartLib_add')">
+ *  </span>
+ *  <el-input 
+ *      :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib:editLimit')"
+ *      v-model="tableData[leftIndex].MaxData"/>
+ * computed:{ 
+ *  //是否显示公共图库的下拉按钮
+    isShowDropPublic(){
+        return this.permissionBtn.isShowBtn('myETAPermission','myChart_classifyOpt_copy')
+    },
+ * }
+*/
+/** 
+ * 根据权限判断按钮是否展示
+ * 适用于dom本身就有v-if/show条件限制的情况,可以防止自定义指令冲突
+ * 适用于限制表单,组件disabled的情况
+ * @param {String} btnMapName 按钮所属的模块名
+ * @param {String} btnKey 按钮对应的key
+ * @returns Boolean
+ */
+ export const isShowBtn = (btnMapName,btnKey)=>{
+    return btnMap[btnMapName]&&checkPermissionBtn(btnMap[btnMapName][btnKey])
+}
+/* export const getBtnCode = (btnMapName,btnKey)=>{
+    return (btnMap[btnMapName]&&btnMap[btnMapName][btnKey])||''
+} */

+ 1 - 1
src/views/Home.vue

@@ -679,7 +679,7 @@ export default {
       }
       homeInterface.getQuestionnaireDetail().then(res=>{
         // console.log(res);
-        if(res.Ret == 200){
+        if(res.Ret == 200 && res.Data){
           this.showQuestionDia=!!res.Data.IsPopup && (!!res.Data.IsShow)
           this.isQuestionShow = !!res.Data.IsShow
           this.questionList = res.Data.Question.List || []

+ 12 - 5
src/views/chartRelevance_manage/fittingEquationList.vue

@@ -29,7 +29,9 @@
 				</div>
 
 				<div class="search-cont">
-					<el-checkbox v-model="isShowMe"  @change="() => { getTreeData();getPublicList() }">只看我的</el-checkbox>
+					<el-checkbox v-model="isShowMe"  
+						v-permission="permissionBtn.statisticPermission.fittingEq_onlyMine"
+						@change="() => { getTreeData();getPublicList() }">只看我的</el-checkbox>
 					<el-select
 						v-model="search_txt"
 						v-loadMore="searchLoad"
@@ -81,11 +83,11 @@
 								placeholder="请输入值"
 								class="label-input"
 								v-model="new_label"
-								v-if="data.isEdit"
+								v-if="data.isEdit&&permissionBtn.isShowBtn('statisticPermission','fittingEq_classifyOpt_edit')"
 								@blur="changeValue(data)"
 							/>
 							<span
-								@dblclick.stop="editNodeLabel(data)"
+								@dblclick.stop="handleDblClick(data)"
 								v-else
 								class="text_oneLine node_label"
 								:style="`width:${
@@ -108,7 +110,7 @@
 									alt=""
 									style="width: 15px; height: 14px; margin-right: 8px"
 									@click.stop="editNode(node, data)"
-									v-if="!data.ChartInfoId"
+									v-if="!data.ChartInfoId&&permissionBtn.isShowBtn('statisticPermission','fittingEq_classifyOpt_edit')"
 								/>
 								<img
 									slot="reference"
@@ -116,7 +118,7 @@
 									alt=""
 									style="width: 14px; height: 14px"
 									@click.stop="removeNode(node, data)"
-									v-if="!data.ChartInfoId"
+									v-if="!data.ChartInfoId&&permissionBtn.isShowBtn('statisticPermission','fittingEq_classifyOpt_delete')"
 								/>
 							</span>
 						</span>
@@ -124,6 +126,7 @@
 					<div
 						class="noDepart"
 						@click="addLevelOneHandle"
+						v-if="permissionBtn.isShowBtn('statisticPermission','fittingEq_classifyOpt_edit')"
 					>
 						<img
 							src="~@/assets/img/set_m/add_ico.png"
@@ -609,6 +612,10 @@ export default {
       });
       this.copyBlobItem(widthNum,heightNum,svg,type);
     },500),
+		handleDblClick(data){
+			if(!this.permissionBtn.isShowBtn('statisticPermission','fittingEq_classifyOpt_edit')) return
+			this.editNodeLabel(data)
+		}
 	},
 	mounted() {
 

+ 10 - 5
src/views/chartRelevance_manage/list.vue

@@ -19,6 +19,7 @@
         >
           <span>目录</span>
           <el-checkbox v-model="isOnlyMe" @change="onlyMeHandler"
+            v-permission="permissionBtn.statisticPermission.corrAnalysis_onlyMine"
             >只看我的</el-checkbox
           >
         </div>
@@ -84,11 +85,11 @@
                 placeholder="请输入值"
                 class="label-input"
                 v-model="new_label"
-                v-if="data.isEdit"
+                v-if="data.isEdit&&permissionBtn.isShowBtn('statisticPermission','corrAnalysis_classifyOpt_edit')"
                 @blur="changeValue(data)"
               />
               <span
-                @dblclick.stop="editNodeLabel(data)"
+                @dblclick.stop="handleDblclick(data)"
                 v-else
                 class="text_oneLine node_label"
                 :style="`width:${
@@ -111,7 +112,7 @@
                   alt=""
                   style="width: 15px; height: 14px; margin-right: 8px"
                   @click.stop="editNode(node, data)"
-                  v-if="!data.ChartInfoId"
+                  v-if="!data.ChartInfoId&&permissionBtn.isShowBtn('statisticPermission','corrAnalysis_classifyOpt_edit')"
                 />
                 <img
                   slot="reference"
@@ -119,12 +120,12 @@
                   alt=""
                   style="width: 14px; height: 14px"
                   @click.stop="removeNode(node, data)"
-                  v-if="!data.ChartInfoId"
+                  v-if="!data.ChartInfoId&&permissionBtn.isShowBtn('statisticPermission','corrAnalysis_classifyOpt_delete')"
                 />
               </span>
             </span>
           </el-tree>
-          <div class="noDepart" @click="addLevelOneHandle">
+          <div class="noDepart" @click="addLevelOneHandle" v-if="permissionBtn.isShowBtn('statisticPermission','corrAnalysis_classifyOpt_edit')">
             <img
               src="~@/assets/img/set_m/add_ico.png"
               alt=""
@@ -721,6 +722,10 @@ export default {
         // console.log(svg);
         this.copyBlobItem(widthNum, heightNum, svg, type);
     }, 500),
+    handleDblclick(data){
+        if(!this.permissionBtn.isShowBtn('statisticPermission','corrAnalysis_classifyOpt_edit')) return
+        this.editNodeLabel(data)
+    }
   },
   mounted() {
     if (this.$route.query.code) {

+ 12 - 6
src/views/chartRelevance_manage/statisticFeatureList.vue

@@ -16,7 +16,9 @@
 				</div>
 
 				<div class="search-cont">
-					<el-checkbox v-model="isShowMe"  @change="() => { getTreeData();getPublicList() }">只看我的</el-checkbox>
+					<el-checkbox v-model="isShowMe"  
+						v-permission="permissionBtn.statisticPermission.statisticFeature_onlyMine"
+						@change="() => { getTreeData();getPublicList() }">只看我的</el-checkbox>
 					<el-select
 						v-model="search_txt"
 						v-loadMore="searchLoad"
@@ -68,11 +70,11 @@
 								placeholder="请输入值"
 								class="label-input"
 								v-model="new_label"
-								v-if="data.isEdit"
+								v-if="data.isEdit&&permissionBtn.isShowBtn('statisticPermission','statisticFeature_classifyOpt_edit')"
 								@blur="changeValue(data)"
 							/>
 							<span
-								@dblclick.stop="editNodeLabel(data)"
+								@dblclick.stop="handleDblClick(data)"
 								v-else
 								class="text_oneLine node_label"
 								:style="`width:${
@@ -95,7 +97,7 @@
 									alt=""
 									style="width: 15px; height: 14px; margin-right: 8px"
 									@click.stop="editNode(node, data)"
-									v-if="!data.ChartInfoId"
+									v-if="!data.ChartInfoId&&permissionBtn.isShowBtn('statisticPermission','statisticFeature_classifyOpt_edit')"
 								/>
 								<img
 									slot="reference"
@@ -103,13 +105,13 @@
 									alt=""
 									style="width: 14px; height: 14px"
 									@click.stop="removeNode(node, data)"
-									v-if="!data.ChartInfoId"
+									v-if="!data.ChartInfoId&&permissionBtn.isShowBtn('statisticPermission','statisticFeature_classifyOpt_delete')"
 								/>
 							</span>
 						</span>
 					</el-tree>
 					<div
-						class="noDepart"
+						class="noDepart" v-if="permissionBtn.isShowBtn('statisticPermission','statisticFeature_classifyOpt_edit')"
 						@click="addLevelOneHandle"
 					>
 						<img
@@ -578,6 +580,10 @@ export default {
       });
       this.copyBlobItem(widthNum,heightNum,svg,type);
     },500),
+		handleDblClick(data){
+			if(!this.permissionBtn.isShowBtn('statisticPermission','statisticFeature_classifyOpt_edit')) return 
+			this.editNodeLabel(data)
+		}
 	},
 	mounted() {
 

+ 130 - 5
src/views/dataEntry_manage/addChart.vue

@@ -102,6 +102,59 @@
 					</el-select>
 				</div>
 
+				<div class="xaxis-range-cont" v-if="chartInfo.ChartType===2 && tableData && tableData.length>0">
+					<!-- 仅用于季节性图配置 -->
+					<div style="margin-bottom: 12px;" class="xaxis-range-tip">
+						横坐标显示范围 
+						<el-tooltip>
+							<div slot="content">
+								<p class="hint-message">配置横坐标显示的时间刻度</p>
+								<p class="hint-message">1、若开始日期小于结束日期,则默认不跨年,允许勾选跨年</p>
+								<p class="hint-message">2、若开始日期大于等于结束日期,则跨年,不允许取消勾选</p>
+							</div>
+							<img src="~@/assets/img/icons/question_mark_black.png" style="height: 16px;cursor: pointer;margin-left: 6px;" />
+						</el-tooltip>
+					</div>
+					<el-date-picker
+						style="width: 45%;"
+						v-model="SeasonExtraConfig.XStartDate"
+						value-format="MM-dd"
+						popper-class="x-range-picker-date"
+						format="MM-dd"
+						placeholder="开始日期"
+						@change="xAxisChange"
+						:clearable="false"
+					></el-date-picker>
+					<el-date-picker
+						style="width: 45%;"
+						v-model="SeasonExtraConfig.XEndDate"
+						value-format="MM-dd"
+						popper-class="x-range-picker-date"
+						format="MM-dd"
+						placeholder="结束日期"
+						@change="xAxisChange"
+						:clearable="false"
+					></el-date-picker>
+					<!-- <el-date-picker
+						style="width: 90%;"
+						v-model="xAxisRange"
+						type="daterange"
+						value-format="MM-dd"
+						format="MM-dd"
+						popper-class="x-range-picker-date"
+						start-placeholder="开始日期"
+						end-placeholder="结束日期"
+						@change="xAxisRangeChange"
+						:clearable="false"
+						></el-date-picker> -->
+					<el-checkbox label="跨年" v-model="isSpanYear" :disabled="isSpanYearDisable"
+					style="margin-top: 12px;" @change="changeIsSpanYear"></el-checkbox>
+					<div class="legend-set-text" @click="openLegendEditDia">
+						<span>图例名称设置</span>
+						<img src="~@/assets/img/icons/edit-blue.png" />
+					</div>
+				</div>
+
 				<div class="targetset-cont">
 					<!-- 仅用于散点图配置 -->
 					<div class="scatter-setting" v-if="chartInfo.ChartType === 5 && tableData.length">
@@ -295,7 +348,7 @@
 							}}</el-button>
 						</template>
 						<!-- 季节性图选择年份区间 -->
-						<date-picker
+						<!-- <date-picker
 							v-else-if="chartInfo.ChartType === 2"
 							v-model="season_year"
 							type="month"
@@ -303,7 +356,10 @@
 							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 class="cont-bottom">
@@ -477,8 +533,17 @@
     <DateChooseDia
       :isDateDia="isDateDia"
       :dateForm="dateForm"
+			:earliestDate="earliestDate"
       @cancel="isDateDia = false"
       @dateBack="dataChangeBack"
+    />
+
+		<!-- 季节性 图例设置 -->
+		<LegendEditDia
+      :isEditLegend="legendEditDiaShow"
+			:legendList="SeasonExtraConfig.ChartLegend"
+      @cancel="legendEditDiaShow = false"
+      @saveLegend="saveLegend"
     />
   </div>
 </template>
@@ -491,8 +556,9 @@ import Chart from './components/chart';
 import DateChooseDia from './components/DateChooseDia';
 import barOption from './components/barOptionSection.vue';
 import sectionalScatterOption from './components/sectionalScatterOption.vue';
+import LegendEditDia from './components/LegendEditDia.vue';
 export default {
-  components: { Chart,DateChooseDia,barOption,sectionalScatterOption },
+  components: { Chart,DateChooseDia,barOption,sectionalScatterOption,LegendEditDia},
 	directives: {
     drag(el, bindings) {
       el.onmousedown = function (e) {
@@ -534,6 +600,9 @@ export default {
 						this.setAddChartDefault();
 						this.setChartOptionHandle(newval);
 					}
+					
+					// 设置起始日期和最新日期
+					this.setExtremumDate()
 
 				}else {
 					this.chartInfo.ChartName = '';
@@ -569,12 +638,18 @@ export default {
 			this.$refs.diaForm.validate((valid) => {
 				if(valid) {
 					// 季节图只允许添加一个指标
-					if(this.chartInfo.ChartType === 2 && this.tableData.length > 1)  return this.$message.warning('您选择的图表样式为季节性图表,只支持单指标画图');
+					if(this.chartInfo.ChartType === 2 && this.tableData.length > 1) return this.$message.warning('您选择的图表样式为季节性图表,只支持单指标画图');
 
 					if(this.chartInfo.ChartType === 7 && !this.$refs.BarOptRef.dateList.length)  return this.$message.warning('请添加日期');
 
 					if(this.chartInfo.ChartType === 10 && !this.$refs.SectionScatterOptRef.seriesArr[0].edbs)  return this.$message.warning('请添加系列指标');
 
+					if(this.chartInfo.ChartType === 2){
+						if(!(this.SeasonExtraConfig.XStartDate && this.SeasonExtraConfig.XEndDate)){
+							return this.$message.warning('横坐标显示范围不能为空');
+						}
+					}
+					
 					let db_arr = this.tableData.map(item => ({
 							ChartColor: item.ChartColor,
 							PredictChartColor: item.PredictChartColor,
@@ -605,6 +680,7 @@ export default {
 						? {
 								...public_param,
 								DateType: this.year_select,
+								StartYear: this.count_year || 0,
 								StartDate:
 										[5,6].includes(this.year_select)
 											? this.select_date[0]
@@ -612,7 +688,7 @@ export default {
 								EndDate: this.year_select === 5 ? this.select_date[1] : '',
 							} 
 						: typePrams
-
+					// console.log(params);
 					dataBaseInterface.chartAdd(params).then(res => {
 						if(res.Ret !== 200) return;
 							this.setChartImage(res.Data);
@@ -736,6 +812,32 @@ export default {
 				color: #606266;
 				margin-top: 20px;
 			}
+			.xaxis-range-cont{
+				color: #606266;
+				margin-top: 20px;
+				.xaxis-range-tip{
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					.hint-message{
+						font-size: 15px;
+						line-height: 22px;
+					}
+				}
+				.legend-set-text{
+					font-size: 15px;
+					color: #1B7BDE;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					margin-top: 20px;
+					cursor: pointer;
+					img{
+						height: 16px;
+						margin-left: 5px;
+					}
+				}
+			}
 			.targetset-cont {
 				padding: 30px 0 20px;
 				.el-input__inner {
@@ -826,6 +928,13 @@ export default {
 					.btn-sty {
 						border: 1px solid #409eff;
 					}
+					.date-setting{
+						border: 1px solid #DCDFE6;
+						border-radius: 4px;
+						cursor: pointer;
+						color: #333333;
+						line-height: 16px;
+					}
 				}
 				.top-right {
 					font-size: 16px;
@@ -960,6 +1069,12 @@ export default {
 			.year-btn,.btn-sty {
 				font-size: $font-normal;
 			}
+			.date-setting{
+				width: 210px;
+				height: 40px;
+				padding: 12px;
+				font-size: $font-normal;
+			}
 		}
 
 		@media screen and (max-width: 1710px){
@@ -979,6 +1094,12 @@ export default {
 				padding: 6px;
 				border: 1px solid #409eff;
 			}
+			.date-setting{
+				width: 180px;
+				height: 36px;
+				padding: 10px;
+				font-size: $font-small;
+			}
 		}
 	}
 }
@@ -987,4 +1108,8 @@ export default {
 .edb-item-style .el-input__icon {
 	line-height: 27px;
 }
+/*他不要下拉选择框 QAQ */
+.x-range-picker-date {
+	display: none;
+}
 </style>

+ 138 - 33
src/views/dataEntry_manage/chartSetting.vue

@@ -32,7 +32,9 @@
         <ul class="left-tab">
           <li :class="['tab',{'act': leftShowLabel===tab}]" v-for="tab in ['目录','坐标轴']" :key="tab" @click="leftShowLabel=tab">{{tab}}</li>
           <li >
-            <el-checkbox v-model="isOnlyMe"  @change="onlyMeHandler">只看我的</el-checkbox>
+            <el-checkbox v-model="isOnlyMe" 
+                v-permission="permissionBtn.chartLibPermission.chartLib_isOnlyMine"
+                @change="onlyMeHandler">只看我的</el-checkbox>
           </li>
         </ul>
 
@@ -92,7 +94,7 @@
                   placeholder="请输入值"
                   class="label-input"
                   v-model="new_label"
-                  v-if="data.isEdit"
+                  v-if="data.isEdit&&permissionBtn.isShowBtn('chartLibPermission','chartLib_classifyOpt_add')"
                   @blur="changeValue(node, data)"
                 />
                 <span
@@ -116,27 +118,30 @@
                     style="width: 14px; height: 14px; margin-right: 8px"
                     v-if="data.Button.MoveButton"
                   />
+                  <!-- 添加子项 -->
                   <img
                     src="~@/assets/img/set_m/add.png"
                     alt=""
                     style="width: 14px; height: 14px; margin-right: 8px"
                     @click.stop="addNode(node, data)"
-                    v-if="data.Button.AddButton"
+                    v-if="data.Button.AddButton&&permissionBtn.isShowBtn('chartLibPermission','chartLib_classifyOpt_add')"
                   />
+                  <!-- 编辑子项 -->
                   <img
                     src="~@/assets/img/set_m/edit.png"
                     alt=""
                     style="width: 15px; height: 14px; margin-right: 8px"
                     @click.stop="editNode(node, data)"
-                    v-if="data.Button.OpButton"
+                    v-if="data.Button.OpButton&&permissionBtn.isShowBtn('chartLibPermission','chartLib_classifyOpt_add')"
                   />
+                  <!-- 删除子项 -->
                   <img
                     slot="reference"
                     src="~@/assets/img/set_m/del.png"
                     alt=""
                     style="width: 14px; height: 14px"
                     @click.stop="removeNode(node, data)"
-                    v-if="data.Button.DeleteButton"
+                    v-if="data.Button.DeleteButton&&permissionBtn.isShowBtn('chartLibPermission','chartLib_classifyOpt_delete')"
                   />
                 </span>
               </span>
@@ -144,7 +149,7 @@
             <div
               class="noDepart"
               @click="addLevelOneHandle"
-              v-if="CanOpClassify"
+              v-if="CanOpClassify&&permissionBtn.isShowBtn('chartLibPermission','chartLib_classifyOpt_add')"
             >
               <img
                 src="~@/assets/img/set_m/add_ico.png"
@@ -340,7 +345,7 @@
                 }}</el-button>
               </template>
               <!-- 季节性图选择年份区间 -->
-              <date-picker
+              <!-- <date-picker
                 v-else-if="chartInfo.ChartType === 2"
                 v-model="season_year"
                 type="month"
@@ -348,7 +353,10 @@
                 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 class="cont-bottom">
@@ -370,6 +378,7 @@
                         size="mini"
                         type="number"
                         placeholder="上限"
+                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                         v-model="tableData[leftIndex].MaxData"
                       />
                       <el-input
@@ -377,6 +386,7 @@
                         size="mini"
                         type="number"
                         placeholder="下限"
+                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                         v-model="tableData[leftIndex].MinData"
                       />
                     </div>
@@ -389,6 +399,7 @@
                         size="mini"
                         type="number"
                         placeholder="上限"
+                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                         v-model="tableData[rightIndex].MaxData"
                       />
                       <el-input
@@ -396,6 +407,7 @@
                         size="mini"
                         type="number"
                         placeholder="下限"
+                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                         v-model="tableData[rightIndex].MinData"
                       />
                     </div>
@@ -407,6 +419,7 @@
                         size="mini"
                         type="number"
                         placeholder="上限"
+                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                         v-model="tableData[rightTwoIndex].MaxData"
                       />
                       <el-input
@@ -414,6 +427,7 @@
                         size="mini"
                         type="number"
                         placeholder="下限"
+                        :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                         v-model="tableData[rightTwoIndex].MinData"
                       />
                     </div>
@@ -426,6 +440,7 @@
                           size="mini"
                           type="number"
                           placeholder="上限"
+                          :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                           v-model="chartLimit.max"
                           @change="changeLimit"
                         />
@@ -434,6 +449,7 @@
                           size="mini"
                           type="number"
                           placeholder="下限"
+                          :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                           v-model="chartLimit.min"
                           @change="changeLimit"
                         />
@@ -445,6 +461,7 @@
                           size="mini"
                           type="number"
                           placeholder="下限"
+                          :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                           v-model="chartLimit.x_min"
                           @change="changeLimit"
                         />
@@ -453,6 +470,7 @@
                           size="mini"
                           type="number"
                           placeholder="上限"
+                          :disabled="!permissionBtn.isShowBtn('chartLibPermission','chartLib_editLimit')"
                           v-model="chartLimit.x_max"
                           @change="changeLimit"
                         />
@@ -673,6 +691,7 @@
     <DateChooseDia
       :isDateDia="isDateDia"
       :dateForm="dateForm"
+      :earliestDate="earliestDate"
       @cancel="isDateDia = false"
       @dateBack="dataChangeBack"
     />
@@ -1068,7 +1087,7 @@ export default {
     /* 双击label出现input修改框 */
     editNodeLabel(node, data) {
       //目录名称可以双击修改 指标不能
-      if (!data.ChartInfoId && data.Button.OpButton) {
+      if (!data.ChartInfoId && data.Button.OpButton&&this.permissionBtn.isShowBtn('chartLibPermission','chartLib_classifyOpt_add')) {
         this.$set(data, 'isEdit', true);
         this.new_label = data.ChartClassifyName;
         this.$nextTick(() => {
@@ -1542,10 +1561,13 @@ export default {
       }
       if (res.Ret !== 200) return;
       this.chartInfo = res.Data.ChartInfo;
-      
-
+  
       this.tableData = res.Data.EdbInfoList;
+      // 设置起始日期和最新日期
+      this.setExtremumDate()
+
       this.setDefaultDateSelect(); //设置默认的日期选中
+      this.setDefaultPreviewOption(); //设置默认预览配置项
 
       sessionStorage.setItem('defaultArr',JSON.stringify(res.Data.EdbInfoList));
 
@@ -1566,31 +1588,72 @@ export default {
     setDefaultDateSelect() {
       this.year_select = this.chartInfo.DateType;
       this.select_date = [this.chartInfo.StartDate, this.chartInfo.EndDate];
+      this.count_year = this.chartInfo.StartYear;
       this.calendar_type = this.chartInfo.Calendar; //日历类型
-      this.season_year = [
-        this.chartInfo.SeasonStartDate,
-        this.chartInfo.SeasonEndDate,
-      ];
+      
+      if(this.chartInfo.ChartType==2){
+        if(this.year_select==20){
+          let latestYear = parseInt(this.tableData[0].LatestDate.substring(0,4))
+          this.season_year=[`${latestYear-this.count_year+1}-01-01`,`${latestYear}-12-31`]
+        }else if(this.year_select==6){
+          this.season_year = [this.chartInfo.SeasonStartDate,this.tableData[0].LatestDate];
+        }else{
+          this.season_year = [this.chartInfo.SeasonStartDate,this.chartInfo.SeasonEndDate]
+        }
+      }
+
+
       this.dateTip =
         this.chartInfo.DateType === 5
           ? `${this.chartInfo.StartDate}~${this.chartInfo.EndDate}`
           : this.chartInfo.DateType === 6
           ? `${this.chartInfo.StartDate}~至今`
-          : '请选择时间段';
+          : this.chartInfo.DateType === 20
+          ?`最近${this.chartInfo.StartYear}年`
+          :'请选择时间段';
+
+    },
+    // 设置默认预览配置项
+    setDefaultPreviewOption(){
+      if(this.chartInfo.ChartType==2){
+        if(this.chartInfo.SeasonExtraConfig){
+          this.SeasonExtraConfig = JSON.parse(this.chartInfo.SeasonExtraConfig)
+        }else{
+          // 返回空就是默认值
+          this.SeasonExtraConfig.XStartDate="01-01"
+          this.SeasonExtraConfig.XEndDate="12-31",
+          this.SeasonExtraConfig.JumpYear=0
+        }
+
+        // 从DataList中取 ChartLegend
+        this.SeasonExtraConfig.ChartLegend=[]
+        const chartDataHandle = this.calendar_type === "农历"?
+                            this.tableData[0].DataList.filter((item, index) => index > 0):
+                            this.tableData[0].DataList
+
+        chartDataHandle.map(item =>{
+          this.SeasonExtraConfig.ChartLegend.push({Name:item.Years,Value:item.ChartLegend})
+        })
+      }
     },
 
     /* 获取图表详情信息  type为refresh刷新指标不存储时间 */
     async getPreviewChartInfo(type) {
+      let dateArray=this.chartInfo.ChartType==2?this.season_year:this.select_date
+
       let params = {
         ChartType: this.chartInfo.ChartType,
         DateType: this.year_select,
-        StartDate: [5, 6].includes(this.year_select)
-          ? this.select_date[0]
+        StartDate: [5 , 6].includes(this.year_select)
+          ? dateArray[0]
           : '',
-        EndDate: this.year_select === 5 ? this.select_date[1] : '',
+        EndDate: this.year_select === 5 ? dateArray[1] : '',
         Calendar: this.calendar_type,
-        SeasonStartDate: this.season_year ? this.season_year[0] : '',
-        SeasonEndDate: this.season_year ? this.season_year[1] : '',
+        // ETA1.0.5 去除了这两个入参
+        // SeasonStartDate: this.season_year ? this.season_year[0] : '',
+        // SeasonEndDate: this.season_year ? this.season_year[1] : '',
+        SeasonExtraConfig:this.SeasonExtraConfig,
+        StartYear:this.count_year || 0,
         ChartEdbInfoList: this.tableData.map(_ => ({
           EdbInfoId: _.EdbInfoId,
           EdbInfoType: _.EdbInfoType,
@@ -1765,9 +1828,11 @@ export default {
           case 2:
             typeChartParam = {
               ...public_param,
+              DateType: this.year_select,
+              StartYear:this.count_year || 0,
               Calendar: this.calendar_type,
-              SeasonStartDate: this.season_year ? this.season_year[0] : '',
-              SeasonEndDate: this.season_year ? this.season_year[1] : '',
+              StartDate: this.season_year ? this.season_year[0] : '',
+              EndDate: this.season_year ? this.season_year[1] : '',
             }
             break
           case 7:
@@ -1796,6 +1861,7 @@ export default {
           ? {
               ...public_param,
               DateType: this.year_select,
+              StartYear:this.count_year || 0,
               StartDate:
                 this.year_select === 5 || this.year_select === 6
                   ? this.select_date[0]
@@ -1977,34 +2043,64 @@ export default {
       this.select_date = '';
       this.dateTip = '请选择时间段';
       //保存表格配置和上下限 曲线图需要保存表格配置 季节图就不用了
-      this.saveNowOptions();
+      // this.saveNowOptions();
       // 图表已存在
       this.selected_chartid && this.getPreviewChartInfo();
     },
     /* 打开时间段弹窗 */
     openDateDia() {
       // 自定义时间段回显
+			let selectDateStart = this.chartInfo.ChartType === 2?this.season_year[0]:this.select_date[0]
+			let selectDateEnd = this.chartInfo.ChartType === 2?this.season_year[1]:this.select_date[1]
+
       this.dateForm = {
         date_type: this.year_select,
         start_date:
           this.year_select === 5 || this.year_select === 6
-            ? this.select_date[0]
+            ? selectDateStart
             : '',
-        end_date: this.year_select === 5 ? this.select_date[1] : '',
+        end_date: this.year_select === 5 ? selectDateEnd : '',
+        count_year: this.year_select === 20 ? this.count_year : ''
       };
       this.isDateDia = true;
     },
     /* 保存完自定义日期 刷新数据  保存当前的图表配置和上下限 只改变图表*/
     dataChangeBack(data) {
+      // console.log(data,'timeData');
       this.year_select = data.dateType;
       this.isDateDia = false;
       this.select_date = [data.start_date, data.end_date];
-      if (data.dateType === 5) {
-        this.dateTip = `${data.start_date}~${data.end_date}`;
-      } else {
-        this.dateTip = `${data.start_date}~至今`;
+      this.count_year = data.count_year
+
+      let dateStart = data.start_date
+			let dateEnd = data.end_date
+			let latestYear = parseInt(this.latestDate.substring(0,4))
+			if(data.dateType==20){
+				dateStart = `${latestYear-data.count_year+1}-01-01`
+				dateEnd = `${latestYear}-12-31`
+			}
+
+      if(this.chartInfo.ChartType === 2){
+        // 季节性图
+				if(data.dateType==6){
+					dateEnd = this.$moment(new Date()).format("YYYY-MM-DD")
+				}
+				this.season_year = [dateStart, dateEnd];
+				// 因为原本季节性图不支持 DateType为5和6的 所以季节性也将StartDate和EndDate传过去
+				this.select_date = [dateStart, dateEnd];
+      }else{
+				this.select_date = [dateStart, dateEnd];
+
+        if(data.dateType==20){
+          this.dateTip = `最近${data.count_year}年`
+        }else if (data.dateType === 5) {
+          this.dateTip = `${data.start_date}~${data.end_date}`;
+        } else {
+          this.dateTip = `${data.start_date}~至今`;
+        }
       }
-      this.saveNowOptions();
+
+      // this.saveNowOptions();
       this.getPreviewChartInfo();
     },
 
@@ -2159,7 +2255,7 @@ export default {
     },
     /* 季节图切换年份  保持当前配置 */
     seasonYearChange() {
-      this.saveNowOptions();
+      // this.saveNowOptions();
       this.getPreviewChartInfo();
     },
     /* 一键刷新 超长等待..*/
@@ -2613,7 +2709,6 @@ export default {
     padding-left: 50px;
     padding-right: 10px;
   }
-
   @media screen and (min-width: 1711px) {
     .el-icon-refresh {
       font-size: 17px;
@@ -2797,6 +2892,16 @@ export default {
                 padding: 10px;
                 border: 1px solid #409eff;
               }
+              .date-setting{
+                width: 210px;
+                height: 40px;
+                padding: 12px;
+                border: 1px solid #DCDFE6;
+                border-radius: 4px;
+                cursor: pointer;
+                font-size: 14px;
+                color: #333333;
+              }
             }
             .top-right {
               font-size: 16px;

+ 80 - 36
src/views/dataEntry_manage/components/DateChooseDia.vue

@@ -10,41 +10,44 @@
 		custom-class="dateDialog"
 		width="650px">
 			<div class="dialog-min">
-				<el-radio-group v-model="dateType" @change="changeType">
-					<el-radio :label="1" border>起始时间设置</el-radio>
+				<el-radio-group v-model="radioType" @change="changeType">
+					<el-radio :label="1" border>最近N年</el-radio>
 					<el-radio :label="2" border>区间设置</el-radio>
 				</el-radio-group>
 				<div class="date-cont">
-					<template v-if="dateType===2">
-						<date-picker
-							v-model="start_date"
-							type="month"
-							value-type="format"
-							placeholder="起始时间"
-						></date-picker>
-						<span style="margin:0 20px">至</span>
-						<date-picker
-							v-model="end_date"
-							type="month"
-							value-type="format"
-							placeholder="结束时间"
-						></date-picker>
+					<template v-if="radioType===1">
+						<span style="margin:0 20px;color: #000000;">年数</span>
+						<el-input v-model.number="count_year" placeholder="请输入数字"></el-input>
 					</template>
 					<template v-else>
-						<date-picker
+						<el-date-picker
+							v-show="dateType==1"
 							v-model="start_date"
-							type="month"
+							type="date"
+							value-type="format"
+							value-format="yyyy-MM-dd"
+							placeholder="选择日期"
+							:picker-options="pickerOptions"
+						></el-date-picker>
+						<el-date-picker
+							v-show="dateType==2"
+							v-model="dates"
+							type="daterange"
+							unlink-panels
 							value-type="format"
-							placeholder="起始时间"
-						></date-picker>
-						<span style="margin:0 20px">至</span>
-						<el-button type="text" style="font-size: 16px">至今</el-button>
+							value-format="yyyy-MM-dd"
+							start-placeholder="开始日期"
+							end-placeholder="结束日期"
+							:picker-options="pickerOptions"
+						></el-date-picker>
+						<el-checkbox label="至今" :checked="dateType == 1" @change="changeDateType"
+						style="margin-left: 18px;"></el-checkbox>
 					</template>
 				</div>
 			</div>
 			<div class="dia-bot">
-				<el-button type="primary" style="margin-right:20px" @click="saveHandle">保存</el-button>
-				<el-button type="primary" plain @click="cancelHandle">取消</el-button>
+				<el-button plain @click="cancelHandle" style="width: 120px;">取消</el-button>
+				<el-button type="primary" style="width: 120px;margin-left:30px" @click="saveHandle">保存</el-button>
 			</div>
 		</el-dialog>
 </template>
@@ -58,49 +61,90 @@ export default {
 		},
 		dialogTitle: {
 			type: String,
-			default:'设置默认时间'
+			default:'时间长度设置'
 		},
 		dateForm: {
 			type:Object
+		},
+		// 最早的日期,开始时间不得早于这个
+		earliestDate:{
+			type: String,
+			default:'0000-00-00'
 		}
 	},
 	watch: {
 		isDateDia(val) {
 			if(val) {
+				this.radioType = this.dateForm.date_type === 5 || this.dateForm.date_type === 6 ? 2 : 1;
 				this.dateType = this.dateForm.date_type === 5 ? 2 : 1;
 				this.start_date = this.dateForm.start_date;
 				this.end_date = this.dateForm.end_date;
+				this.dates = this.radioType == 2&&this.dateType==2?[this.start_date,this.end_date]:[]
+				this.count_year = this.dateForm.count_year
+			}
+		},
+		dates(value){
+			if(!value){
+				this.start_date = ''
+				this.end_date = ''
+				return 
+			}
+
+			if(value && value.length>0){
+				this.start_date = value[0]
+				this.end_date = value[1]
 			}
 		}
 	},
 	data () {
 		return {
-			dateType:1,
+			radioType:1,
+			dateType:2,
 			start_date: '',
 			end_date: '',
+			count_year:'',// 年数
+			dates:[],
+			pickerOptions:{
+				disabledDate:(date)=>{
+					return date < (new Date(`${this.earliestDate} 00:00:00`) || 0)
+				},
+			}
 		};
 	},
 	methods: {
 		/* 确认时间 返回回调 */
 		saveHandle() {
-			if(!this.start_date || (!this.end_date && this.dateType === 2)) {
+			if(this.radioType == 1 && (!parseInt(this.count_year))) {
+				this.$message.warning('请输入正确的数字')
+				return 
+			}
+			// console.log(this.radioType,this.dateType,this.start_date,this.end_date,this.dates,this.count_year);
+
+			if(this.radioType == 2 && (!this.start_date || (!this.end_date && this.dateType === 2))) {
 				this.$message.warning('请选择正确的时间段')
 			}else {
 				this.$emit('dateBack',{
-					dateType: this.dateType === 1 ? 6 : 5,
+					dateType: this.radioType==1?20:this.dateType === 1 ? 6 : 5,
 					start_date: this.start_date,
-					end_date: this.dateType === 1 ? '' : this.end_date
+					end_date: this.dateType === 1 ? '' : this.end_date,
+					count_year:this.count_year
 				})
 			}
 		},
 		changeType() {
-			this.start_date = '';
-			this.end_date = '';
+			this.dateType=1
+			this.dates=null
+			this.count_year = ''
+		},
+		changeDateType(check){
+			this.dateType=check?1:2
+			this.dates=null
 		},
 		cancelHandle() {
+			this.radioType = 1
 			this.dateType = 1;
-			this.start_date = '';
-			this.end_date = '';
+			this.dates=null
+			this.count_year = ''
 			this.$emit('cancel')
 		}
 	},
@@ -124,13 +168,13 @@ export default {
 		width: 220px !important;
 	}
 	.dialog-min {
-		padding: 10px 20px;
+		padding: 0 35px 60px;
 		.date-cont {
-			margin-top: 30px;
+			margin-top: 50px;
 		}
 	}
 	.dia-bot {
-		margin: 52px 0 30px;
+		margin: 60px 0 30px;
 		display: flex;
 		justify-content: center;
 	}

+ 97 - 0
src/views/dataEntry_manage/components/LegendEditDia.vue

@@ -0,0 +1,97 @@
+<template>
+  <el-dialog
+  :modal-append-to-body='false'
+  title="图例名称设置" 
+  :visible.sync="isEditLegend"
+  :close-on-click-modal="false"
+  @close="cancelHandle"
+  center
+  v-dialogDrag 
+  width="620px">
+    <div class="dialog-legend">
+      <div v-for="(item,index) in legendListCopy" :key="item.Name" class="legend-item">
+        <div class="legend-item-color" :style="{backgroundColor:seasonColor[index]}"></div>
+        <el-input v-model.trim="item.Value" placeholder="请输入图例名称" style="width: 295px;"></el-input>
+      </div>
+      <div class="legend-box-hint">默认取该曲线最新日期的数据年份作为图例名称,手动编辑为其他格式,则不再自动更新</div>
+    </div>
+    <div class="dia-bot">
+      <el-button plain @click="cancelHandle" style="width: 120px;">取消</el-button>
+      <el-button type="primary" style="width: 120px;margin-left:30px" @click="saveHandle">保存</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import {seasonOptions} from "@/utils/defaultOptions.js" 
+import _ from 'lodash';
+export default {
+name:'',
+props: {
+  isEditLegend: {
+    type: Boolean,
+    required:true
+  },
+  legendList:{
+    type: Array,
+    required:true
+  }
+},
+computed:{
+  seasonColor(){
+    return seasonOptions.colors.slice(-this.legendList.length)
+  }
+},
+data () {
+  return {
+    legendListCopy:[]
+  };
+},
+watch: {
+  isEditLegend(val) {
+    if(val) {
+      this.legendListCopy = _.cloneDeep(this.legendList)
+    }
+  }
+},
+methods: {
+  saveHandle() {
+    if(this.legendListCopy.some(item=> !item.Value)){
+      this.$message.error("所有图例名称都不能为空")
+      return
+    }
+    this.$emit('saveLegend',this.legendListCopy)
+  },
+  cancelHandle() {
+    this.$emit('cancel')
+  }
+}
+}
+</script>
+<style lang='scss' scoped>
+.dialog-legend{
+  padding: 10px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  .legend-item{
+    margin-bottom:8px ;
+    display: flex;
+    align-items: center;
+    .legend-item-color{
+      width: 30px;
+      height: 2px;
+      margin-right: 20px;
+    }
+  }
+  .legend-box-hint{
+    margin-top: 10px;
+    color: #C0C4CC;
+    font-size: 14px;
+    font-weight: 100;
+  }
+}
+.dia-bot{
+  margin: 30px 0;
+}
+</style>

+ 10 - 0
src/views/dataEntry_manage/css/chartfit.scss

@@ -175,6 +175,16 @@ $font-normal:14px;
 							padding: 6px;
 							border: 1px solid #409eff;
 						}
+						.date-setting{
+							width: 180px;
+							height: 36px;
+							padding: 10px;
+							border: 1px solid #DCDFE6;
+							border-radius: 4px;
+							cursor: pointer;
+							font-size: 12px;
+							color: #333333;
+						}
 					}
 					.top-right {
 						.join_txt {

+ 82 - 13
src/views/dataEntry_manage/databaseComponents/chartTrendRender.vue

@@ -15,13 +15,13 @@
 				<el-button type="primary" plain size="mini" class="btn-sty" @click="openDateDia">{{
 					dateTip
 				}}</el-button>
-				<el-button type="primary" plain size="mini" class="btn-sty" @click="showOnChart('toggle')" v-if="!isOnlyShowBaseChart">
+				<el-button type="primary" plain size="mini" class="btn-sty" @click="showOnChart('toggle')" v-if="!isOnlyShowBaseChart&&isShowChartBasis">
 					<!-- <i class="el-icon-view"></i> -->
 					{{ isShowOnyearData ? '隐藏同比图' : '展示同比图'}}
 				</el-button>
 			</template>
 			<!-- 季节图时间选择 -->
-			<template v-else-if="chart_type===2">
+			<!-- <template v-else-if="chart_type===2">
 				<date-picker
 						v-model="season_year"
 						type="month"
@@ -30,9 +30,12 @@
 						placeholder="年份日期选择"
 						@change="getDataByPath"
 				/>
-			</template>
+			</template> -->
+			<div v-else-if="chart_type === 2" @click="openDateDia" class="date-setting">
+				{{ season_year && season_year.length>0 ? season_year[0]+'~'+season_year[1]:"年份日期选择" }}
+			</div>
 			<el-button type="primary" plain size="mini" class="btn-sty" style="margin-left:auto;"
-				@click="chartTypeChange" v-if="!isOnlyShowBaseChart">
+				@click="chartTypeChange" v-if="!isOnlyShowBaseChart&&isAllowSwitchSeason">
 				<i class="el-icon-sort" style="transform: rotate(90deg);"></i>
 				切换{{chart_type==1?'季节性图':'曲线图'}}
 			</el-button>
@@ -46,6 +49,7 @@
 						size="mini"
 						type="number"
 						placeholder="上限"
+						:disabled="!isAllowEditLimit"
 						v-model="chartInfo.MaxValue"
 						@change="() => { chart_type===1?setOptions():setSeasonOptions() }"
 					/>
@@ -54,6 +58,7 @@
 						size="mini"
 						type="number"
 						placeholder="下限"
+						:disabled="!isAllowEditLimit"
 						v-model="chartInfo.MinValue"
 						@change="() => { chart_type===1?setOptions():setSeasonOptions() }"
 					/>
@@ -65,6 +70,7 @@
 						type="number"
 						placeholder="上限"
 						v-model="limitData.rightMax"
+						:disabled="!isAllowEditLimit"
 						@change="changeLimit"
 					/>
 					<el-input
@@ -73,6 +79,7 @@
 						type="number"
 						placeholder="下限"
 						v-model="limitData.rightMin"
+						:disabled="!isAllowEditLimit"
 						@change="changeLimit"
 					/>
 				</div>
@@ -120,6 +127,18 @@ export default {
 		chartLang:{
 			type: String,
 			default:()=> 'ch'
+		},
+		isShowChartBasis:{
+			type:Boolean,
+			default:false
+		},
+		isAllowSwitchSeason:{
+			type:Boolean,
+			default:false
+		},
+		isAllowEditLimit:{
+			type:Boolean,
+			default:false
 		}
 	},
 	computed: {
@@ -179,6 +198,8 @@ export default {
 				MinValue: 0,
 				MaxValue: 0
 			},
+			// 最近几年
+			count_year:'',
 		};
 	},
 	methods: {
@@ -197,6 +218,7 @@ export default {
 			let params = {
 				EdbInfoId: this.edbid,
 				DateType: this.year_select,
+				StartYear:this.count_year || 0,
 				StartDate: this.select_date[0] || '',
 				EndDate: this.select_date[1] || ''
 			}
@@ -205,7 +227,9 @@ export default {
 				? await dataBaseInterface.ebd_data(params)
 				: await dataBaseInterface.ebdSeasonData({
 						EdbInfoId: this.edbid,
+						DateType: this.year_select,
 						Calendar: this.calendar_type,
+						StartYear:this.count_year || 0,
 						StartDate: this.season_year[0] || '',
 						EndDate: this.season_year[1] || '',
 					})
@@ -219,6 +243,13 @@ export default {
 					} : EdbInfo;
 					this.tableData = DataList || [];
 
+
+					if(this.chart_type==2 && !(this.season_year && this.season_year.length>0)){
+						// 第一次进行初始化显示
+						let latestYear = parseInt(this.chartInfo.LatestDate.substring(0,4))
+						this.season_year = [`${latestYear-this.count_year+1}-01-01`,`${latestYear}-12-31`];
+					}
+
 					this.chart_type === 1 ? this.setOptions() : this.setSeasonOptions();
 					this.showChart = true;
 					this.$nextTick(()=>{
@@ -250,6 +281,7 @@ export default {
 			let params = {
 				VarietyEdbId: this.edbid,
 				DateType: this.year_select,
+				StartYear:this.count_year || 0,
 				StartDate: this.select_date[0] || '',
 				EndDate: this.select_date[1] || ''
 			}
@@ -258,7 +290,9 @@ export default {
 				? await supplyApi.getEdbDetailData(params)
 				: await supplyApi.getEdbSeasonData({
 						VarietyEdbId: this.edbid,
+						DateType: this.year_select,
 						Calendar: this.calendar_type,
+						StartYear:this.count_year || 0,
 						StartDate: this.season_year[0] || '',
 						EndDate: this.season_year[1] || '',
 					})
@@ -271,7 +305,11 @@ export default {
 						...this.oldOptions
 					} : EdbInfo;
 					this.tableData = DataList || [];
-
+					if(this.chart_type==2 && !(this.season_year && this.season_year.length>0)){
+						// 第一次进行初始化显示
+						let latestYear = parseInt(this.chartInfo.LatestDate.substring(0,4))
+						this.season_year = [`${latestYear-this.count_year+1}-01-01`,`${latestYear}-12-31`];
+					}
 					this.chart_type === 1 ? this.setOptions() : this.setSeasonOptions();
 					this.showChart = true;
 		},
@@ -293,13 +331,17 @@ export default {
 		/* 打开时间段弹窗 */
     openDateDia() {
       // 自定义时间段回显
+
+			let selectDateStart = this.chart_type === 2?this.season_year[0]:this.select_date[0]
+			let selectDateEnd = this.chart_type === 2?this.season_year[1]:this.select_date[1]
       this.dateForm = {
         date_type: this.year_select,
         start_date:
           this.year_select === 5 || this.year_select === 6
-            ? this.select_date[0]
+            ? selectDateStart
             : '',
-        end_date: this.year_select === 5 ? this.select_date[1] : '',
+        end_date: this.year_select === 5 ? selectDateEnd : '',
+        count_year: this.year_select === 20 ? this.count_year : ''
       };
       this.isDateDia = true;
     },
@@ -309,12 +351,26 @@ export default {
       this.year_select = data.dateType;
       this.isDateDia = false;
       this.select_date = [data.start_date, data.end_date];
+      this.count_year = data.count_year
 
       this.dateTip =
         data.dateType === 5
           ? `${data.start_date}~${data.end_date}`
-          : `${data.start_date}~至今`;
-
+          : data.dateType === 6
+					?`${data.start_date}~至今`
+					:`最近${this.count_year}年`
+			if(this.chart_type === 2){
+				let latestYear = parseInt(this.chartInfo.LatestDate.substring(0,4))
+				let dateStart = data.start_date
+				let dateEnd = data.end_date
+				if(data.dateType==20){
+					dateStart = `${latestYear-this.count_year+1}-01-01`
+					dateEnd = `${latestYear}-12-31`
+				}else if(data.dateType==6){
+					dateEnd = this.chartInfo.LatestDate
+				}
+				this.season_year = [dateStart, dateEnd];
+			}
 			const { MinValue,MaxValue } = this.chartInfo;
 			this.oldOptions = {
 				MinValue,
@@ -512,7 +568,7 @@ export default {
             yAxis: 0,
             name: j.Year,
           };
-          const data_array = _.cloneDeep(j.DataList);
+          const data_array = this.calendar_type === '农历'?_.cloneDeep(j.Items):_.cloneDeep(j.DataList);
           data_array &&
             data_array.forEach((item) => {
               serie_item.data.push([item.DataTimestamp, item.Value]);
@@ -645,8 +701,8 @@ export default {
             };
 
       this.options = {
-        colors:
-          this.calendar_type === '公历'
+				colors:
+				this.calendar_type === '公历'
             ? seasonOptions.colors.slice(-chartData.length)
             : seasonOptions.colors.slice(-filterArr.length),
         series: seasonData,
@@ -682,7 +738,9 @@ export default {
 		init(type='') {
 			if(type!=='no_reset') this.chart_type = 1;
 			this.isShowOnyearData = false;
-			this.year_select = 10;
+			this.year_select = this.chart_type==1 ? 10 : 20;
+			// 季节性图默认展示最近5年数据
+			this.count_year=5
 			this.select_date = [];
 			this.options = {};
 			this.dateTip = '请选择时间段';
@@ -733,6 +791,17 @@ export default {
 			background-color: #fff;
 			color: #0052D9;
 		}
+		.date-setting{
+			width: 210px;
+			// height: 40px;
+			padding: 10px;
+			border: 1px solid #DCDFE6;
+			border-radius: 4px;
+			cursor: pointer;
+			font-size: 14px;
+			color: #333333;
+			box-sizing: border-box;
+		}
 		.change-chart-btn{
 				float: right;
 				color: #409eff;

+ 67 - 13
src/views/dataEntry_manage/databaseComponents/createChart.vue

@@ -33,17 +33,19 @@
 				<el-button type="text" class="btn-sty" @click="showOnChart('toggle')" v-if="!isOnlyShowBaseChart">{{ isShowOnyearData ? '隐藏同比图' : '展示同比图'}}</el-button>
 			</template>
 			<!-- 季节图时间选择 -->
-			<template v-else-if="chart_type===2">
-				<date-picker
+			<!-- <template v-else-if="chart_type===2"> -->
+				<!-- <date-picker
 						v-model="season_year"
 						type="month"
 						value-type="format"
 						range
 						placeholder="年份日期选择"
 						@change="getDataByPath"
-				/>
-			</template>
-
+				/> -->
+			<!-- </template> -->
+			<div v-else-if="chart_type === 2" @click="openDateDia" class="date-setting">
+				{{ season_year && season_year.length>0 ? season_year[0]+'~'+season_year[1]:"年份日期选择" }}
+			</div>
 			<span class="change-chart-btn" @click="chartTypeChange" v-if="!isOnlyShowBaseChart">切换{{chart_type==1?'季节性图':'曲线图'}}</span>
 		</div>
 		<div class="min-wrapper">
@@ -183,6 +185,8 @@ export default {
 				MinValue: 0,
 				MaxValue: 0
 			},
+			// 最近几年
+			count_year:'',
 		};
 	},
 	methods: {
@@ -201,6 +205,7 @@ export default {
 			let params = {
 				EdbInfoId: this.edbid,
 				DateType: this.year_select,
+				StartYear:this.count_year || 0,
 				StartDate: this.select_date[0] || '',
 				EndDate: this.select_date[1] || ''
 			}
@@ -209,7 +214,9 @@ export default {
 				? await dataBaseInterface.ebd_data(params)
 				: await dataBaseInterface.ebdSeasonData({
 						EdbInfoId: this.edbid,
+						DateType: this.year_select,
 						Calendar: this.calendar_type,
+						StartYear:this.count_year || 0,
 						StartDate: this.season_year[0] || '',
 						EndDate: this.season_year[1] || '',
 					})
@@ -222,7 +229,11 @@ export default {
 						...this.oldOptions
 					} : EdbInfo;
 					this.tableData = DataList || [];
-
+					if(this.chart_type==2 && !(this.season_year && this.season_year.length>0)){
+						// 第一次进行初始化显示
+						let latestYear = parseInt(this.chartInfo.LatestDate.substring(0,4))
+						this.season_year = [`${latestYear-this.count_year+1}-01-01`,`${latestYear}-12-31`];
+					}
 					this.chart_type === 1 ? this.setOptions() : this.setSeasonOptions();
 					this.showChart = true;
 		},
@@ -232,6 +243,7 @@ export default {
 			let params = {
 				VarietyEdbId: this.edbid,
 				DateType: this.year_select,
+				StartYear:this.count_year || 0,
 				StartDate: this.select_date[0] || '',
 				EndDate: this.select_date[1] || ''
 			}
@@ -240,7 +252,9 @@ export default {
 				? await supplyApi.getEdbDetailData(params)
 				: await supplyApi.getEdbSeasonData({
 						VarietyEdbId: this.edbid,
+						DateType: this.year_select,
 						Calendar: this.calendar_type,
+						StartYear:this.count_year || 0,
 						StartDate: this.season_year[0] || '',
 						EndDate: this.season_year[1] || '',
 					})
@@ -254,6 +268,12 @@ export default {
 					} : EdbInfo;
 					this.tableData = DataList || [];
 
+					if(this.chart_type==2 && !(this.season_year && this.season_year.length>0)){
+						// 第一次进行初始化显示
+						let latestYear = parseInt(this.chartInfo.LatestDate.substring(0,4))
+						this.season_year = [`${latestYear-this.count_year+1}-01-01`,`${latestYear}-12-31`];
+					}
+
 					this.chart_type === 1 ? this.setOptions() : this.setSeasonOptions();
 					this.showChart = true;
 		},
@@ -275,13 +295,17 @@ export default {
 		/* 打开时间段弹窗 */
     openDateDia() {
       // 自定义时间段回显
+
+			let selectDateStart = this.chart_type === 2?this.season_year[0]:this.select_date[0]
+			let selectDateEnd = this.chart_type === 2?this.season_year[1]:this.select_date[1]
       this.dateForm = {
         date_type: this.year_select,
         start_date:
           this.year_select === 5 || this.year_select === 6
-            ? this.select_date[0]
+            ? selectDateStart
             : '',
-        end_date: this.year_select === 5 ? this.select_date[1] : '',
+        end_date: this.year_select === 5 ? selectDateEnd : '',
+        count_year: this.year_select === 20 ? this.count_year : ''
       };
       this.isDateDia = true;
     },
@@ -291,12 +315,26 @@ export default {
       this.year_select = data.dateType;
       this.isDateDia = false;
       this.select_date = [data.start_date, data.end_date];
+      this.count_year = data.count_year
 
       this.dateTip =
         data.dateType === 5
           ? `${data.start_date}~${data.end_date}`
-          : `${data.start_date}~至今`;
-
+          : data.dateType === 6
+					?`${data.start_date}~至今`
+					:`最近${this.count_year}年`
+			if(this.chart_type === 2){
+				let latestYear = parseInt(this.chartInfo.LatestDate.substring(0,4))
+				let dateStart = data.start_date
+				let dateEnd = data.end_date
+				if(data.dateType==20){
+					dateStart = `${latestYear-this.count_year+1}-01-01`
+					dateEnd = `${latestYear}-12-31`
+				}else if(data.dateType==6){
+					dateEnd = this.chartInfo.LatestDate
+				}
+				this.season_year = [dateStart, dateEnd];
+			}
 			const { MinValue,MaxValue } = this.chartInfo;
 			this.oldOptions = {
 				MinValue,
@@ -328,6 +366,7 @@ export default {
 
 			let params = {
 				DateType: this.year_select,
+				StartYear:this.count_year || 0,
 				StartDate: this.select_date[0] || '',
 				EndDate: this.select_date[1] || ''
 			}
@@ -481,6 +520,7 @@ export default {
 		setSeasonOptions() {
 			console.log(this.tableData)
       const chartData = _.cloneDeep(this.tableData);
+
       let seasonYdata = [],
         seasonData = [];
 
@@ -494,7 +534,7 @@ export default {
             yAxis: 0,
             name: j.Year,
           };
-          const data_array = _.cloneDeep(j.DataList);
+          const data_array = this.calendar_type === '农历'?_.cloneDeep(j.Items):_.cloneDeep(j.DataList);
           data_array &&
             data_array.forEach((item) => {
               serie_item.data.push([item.DataTimestamp, item.Value]);
@@ -628,7 +668,7 @@ export default {
 
       this.options = {
         colors:
-          this.calendar_type === '公历'
+				this.calendar_type === '公历'
             ? seasonOptions.colors.slice(-chartData.length)
             : seasonOptions.colors.slice(-filterArr.length),
         series: seasonData,
@@ -663,8 +703,11 @@ export default {
 
 		init(type='') {
 			if(type!=='no_reset') this.chart_type = 1;
+
 			this.isShowOnyearData = false;
-			this.year_select = 10;
+			this.year_select = this.chart_type==1 ? 10 : 20;
+			// 季节性图默认展示最近5年数据
+			this.count_year=5
 			this.select_date = [];
 			this.options = {};
 			this.dateTip = '请选择时间段';
@@ -744,6 +787,17 @@ export default {
 			padding: 10px;
 			border: 1px solid #409eff;
 		}
+		.date-setting{
+			width: 210px;
+			// height: 40px;
+			padding: 10px;
+			border: 1px solid #DCDFE6;
+			border-radius: 4px;
+			cursor: pointer;
+			font-size: 14px;
+			color: #333333;
+			box-sizing: border-box;
+		}
 		.change-chart-btn{
 				float: right;
 				color: #409eff;

+ 44 - 23
src/views/dataEntry_manage/databaseList.vue

@@ -90,7 +90,7 @@
 								placeholder="请输入值"
 								class="label-input"
 								v-model="new_label"
-								v-if="data.isEdit"
+								v-if="data.isEdit&&isEdbBtnShow('editCatalog')"
 								@blur="changeValue(node, data)"
 							/>
 							<span 
@@ -112,40 +112,46 @@
 									style="width: 14px; height: 14px; margin-right: 8px"
 									v-if="data.Button.MoveButton"
 								/>
+								<!-- 添加子项 -->
 								<img
 									src="~@/assets/img/set_m/add.png"
 									alt=""
 									style="width: 14px; height: 14px; margin-right: 8px"
 									@click.stop="addNode(node,data)"
-									v-if="data.Button.AddButton"
+									v-if="data.Button.AddButton&&isEdbBtnShow('editCatalog')"
 								/>
-								<!--如果是分类,判断data.Button.OpButton不变;如果是指标,不显示(ETA1.0.3)-->
+								<!--编辑节点 如果是分类,判断data.Button.OpButton不变;如果是指标,不显示(ETA1.0.3)-->
 								<img
 									src="~@/assets/img/set_m/edit.png"
 									alt=""
 									style="width: 15px; height: 14px; margin-right: 8px"
 									@click.stop="editNode(node,data)"
-									v-if="!data.EdbCode&&(data.Button.OpButton)"
+									v-if="!data.EdbCode&&(data.Button.OpButton)&&isEdbBtnShow('editCatalog')"
 								/>
-								<!--如果是分类,判断data.Button.DeleteButton不变;如果是指标,不显示(ETA1.0.3)-->
+								<!-- 删除节点 如果是分类,判断data.Button.DeleteButton不变;如果是指标,不显示(ETA1.0.3)-->
 								<img
 									slot="reference"
 									src="~@/assets/img/set_m/del.png"
 									alt=""
 									style="width: 14px; height: 14px;"
 									@click.stop="removeNode(node,data)"
-									v-if="!data.EdbCode&&(data.Button.DeleteButton)"
+									v-if="!data.EdbCode&&(data.Button.DeleteButton)&&isEdbBtnShow('deleteCatalog')"
 								/>
-								<i class="el-icon-view" v-if="data.EdbType===2&&![58,59,67,68].includes(data.Source)" @click.stop="viewNode(node,data)"></i>
+								<!-- 查看计算指标 -->
+								<i class="el-icon-view" 
+									v-if="data.EdbType===2&&![58,59,67,68].includes(data.Source)&&isEdbBtnShow('checkCalcChart')" 
+									@click.stop="viewNode(node,data)"></i>
+								<!-- 查看关联图表 -->
 								<img 
-									v-if="data.Button.ShowChartRelation" 
+									v-if="data.Button.ShowChartRelation&&isEdbBtnShow('checkRelatedChart')" 
 									@click.stop="showAssociateChart=true,showAssociateComputeData=false"
 									src="~@/assets/img/icons/associate_chart.png" 
 									style="width: 14px; height: 14px;margin-left: 8px"
 									alt=""
 								/>
+								<!-- 查看关联指标 -->
 								<img 
-									v-if="data.Button.ShowEdbRelation" 
+									v-if="data.Button.ShowEdbRelation&&isEdbBtnShow('checkRelatedEdb')" 
 									@click.stop="showAssociateComputeData=true,showAssociateChart=false"
 									src="~@/assets/img/icons/associate_data.png" 
 									style="width: 14px; height: 14px;margin-left: 8px"
@@ -154,7 +160,7 @@
 							</span>
 						</span>
 					</el-tree>
-					<div class="noDepart" @click="addLevelOneHandle" v-if="CanOpClassify">
+					<div class="noDepart" @click="addLevelOneHandle" v-if="CanOpClassify&&isEdbBtnShow('editCatalog')">
 						<img
 							src="~@/assets/img/set_m/add_ico.png"
 							alt=""
@@ -223,13 +229,13 @@
 								},EdbData)"
 							>编辑</el-button>
 						<!-- 指保存指标的上下限,在走势图才显示 -->
-						<el-button v-if="activeTab==='Chart'"
+						<el-button v-if="activeTab==='Chart'&&isEdbBtnShow('saveEdb')"
 							type="text" @click.stop="saveEdbLimit">保存</el-button>
 						<el-button v-if="isEdbBtnShow('setEn')"
 							type="text" @click="openEnNameDia">设置英文名称</el-button>
 						<el-button v-if="EdbData.Button.InsertNewDataButton&&isEdbBtnShow('newValue')"
 							type="text" @click.stop="updateNewestDataHandle" >{{(EdbData.DataInsertConfig.Date)?'编辑最新值':'添加最新值'}}</el-button>
-						<el-button v-if="EdbData.EdbType===2"
+						<el-button v-if="EdbData.EdbType===2&&isEdbBtnShow('calculateAgain')"
 							type="text" @click.stop="reCalculateHandler" :loading="calculateLoading">重新计算</el-button>
 						<el-button v-if="EdbData.EdbType===2&&isEdbBtnShow('toSource')"
 							type="text" @click="isLookHistory=true;lookEdbId=selected_edbid">指标溯源</el-button>
@@ -237,7 +243,7 @@
 							type="text" @click.stop="refreshBaseHandler" :loading="refreshLoading">全部刷新</el-button>
 						<el-button v-if="isEdbBtnShow('copyData')"
 							type="text" @click="copyCode">复制数据</el-button>
-						<el-button v-if="EdbData.Button.DeleteButton"
+						<el-button v-if="EdbData.Button.DeleteButton&&isEdbBtnShow('deleteEdb')"
 							type="text" @click="removeNode(_,EdbData)" style="color:#C54322;">删除</el-button>
 					</div>
 				</div>
@@ -246,6 +252,9 @@
 						<chart-trend-render
 							:edbid="selected_edbid"
 							:chartLang="currentLang"
+							:isShowChartBasis="isEdbBtnShow('showChartBasis')"
+							:isAllowSwitchSeason="isEdbBtnShow('switchSeason')"
+							:isAllowEditLimit="isEdbBtnShow('editLimit')"
 							ref="createChart"
 							@editEnName="openEnNameDia"/>
 						<div class="info">
@@ -769,18 +778,30 @@ export default {
 		}
 	},
 	methods: {
-		//控制指标详情操作按钮
+		//控制页面按钮权限
 		isEdbBtnShow(type){
 			const {edbDataPermission,checkPermissionBtn}=this.permissionBtn
 			const BtnMap = {
-				'update':edbDataPermission.edbData_update,
-				'edit':edbDataPermission.edbData_edit,
-				'toImg':edbDataPermission.edbData_toImgs,
-				'copyData':edbDataPermission.edbData_copyData,
-				'toSource':edbDataPermission.edbData_edbSource,
-				'setEn':edbDataPermission.edbData_enNameSetting,
-				'newValue':edbDataPermission.edbData_newestValue,
-				'refreshAll':edbDataPermission.edbData_refreshAll,
+				'update':edbDataPermission.edbData_update,//指标更新
+				'edit':edbDataPermission.edbData_edit,//指标编辑
+				/* 'toImg':edbDataPermission.edbData_toImgs, */
+				'copyData':edbDataPermission.edbData_copyData,//复制数据
+				'toSource':edbDataPermission.edbData_edbSource,//指标溯源
+				'setEn':edbDataPermission.edbData_enNameSetting,//设置英文名称
+				'newValue':edbDataPermission.edbData_newestValue,//添加/编辑最新值
+				'refreshAll':edbDataPermission.edbData_refreshAll,//全部刷新
+				'saveEdb':edbDataPermission.edbData_saveEdb,//保存指标
+				'deleteEdb':edbDataPermission.edbData_deleteEdb,//删除指标
+				'showChartBasis':edbDataPermission.edbData_showChartBasis,//展示/隐藏同比图
+				'switchSeason':edbDataPermission.edbData_switchSeason,//切换季节性图
+				'editLimit':edbDataPermission.edbData_editLimit,//编辑上下限
+				'calculateAgain':edbDataPermission.edbData_calculateAgain,//重新计算
+
+				'editCatalog':edbDataPermission.edbData_classifyOpt_add,//添加编辑目录
+				'deleteCatalog':edbDataPermission.edbData_classifyOpt_delete,//删除目录
+				'checkRelatedChart':edbDataPermission.edbData_checkRelatedChart,//查看关联图表
+				'checkRelatedEdb':edbDataPermission.edbData_checkRelatedEdb,//查看关联指标
+				'checkCalcChart':edbDataPermission.edbData_checkCalcChart,//查看计算指标
 			}
 			return checkPermissionBtn(BtnMap[type])
 		},
@@ -1096,7 +1117,7 @@ export default {
 		/* 双击label出现input修改框 */
 		editNodeLabel(node, data) {
 			//目录名称可以双击修改 指标不能
-			if(!data.EdbCode && this.role === 'admin') {
+			if(!data.EdbCode && this.role === 'admin'&&this.isEdbBtnShow('editCatalog')) {
 				this.$set(data,'isEdit',true)
 				this.new_label = data.ClassifyName;
 				this.$nextTick(() => {

+ 184 - 11
src/views/dataEntry_manage/editChart.vue

@@ -110,6 +110,60 @@
 						</el-option>
 					</el-select>
 				</div>
+
+				<div class="xaxis-range-cont" v-if="chartInfo.ChartType===2">
+					<!-- 仅用于季节性图配置 -->
+					<div style="margin-bottom: 12px;" class="xaxis-range-tip">
+						横坐标显示范围 
+						<el-tooltip>
+							<div slot="content">
+								<p class="hint-message">配置横坐标显示的时间刻度</p>
+								<p class="hint-message">1、若开始日期小于结束日期,则默认不跨年,允许勾选跨年</p>
+								<p class="hint-message">2、若开始日期大于等于结束日期,则跨年,不允许取消勾选</p>
+							</div>
+							<img src="~@/assets/img/icons/question_mark_black.png" style="height: 16px;cursor: pointer;margin-left: 6px;" />
+						</el-tooltip>
+					</div>
+					<el-date-picker
+						style="width: 45%;"
+						v-model="SeasonExtraConfig.XStartDate"
+						value-format="MM-dd"
+						popper-class="x-range-picker-date"
+						format="MM-dd"
+						placeholder="开始日期"
+						@change="xAxisChange"
+						:clearable="false"
+					></el-date-picker>
+					<el-date-picker
+						style="width: 45%;"
+						v-model="SeasonExtraConfig.XEndDate"
+						value-format="MM-dd"
+						popper-class="x-range-picker-date"
+						format="MM-dd"
+						placeholder="结束日期"
+						@change="xAxisChange"
+						:clearable="false"
+					></el-date-picker>
+					<!-- <el-date-picker
+						style="width: 90%;"
+						v-model="xAxisRange"
+						type="daterange"
+						value-format="MM-dd"
+						popper-class="x-range-picker-date"
+						format="MM-dd"
+						start-placeholder="开始日期"
+						end-placeholder="结束日期"
+						@change="xAxisRangeChange"
+						:clearable="false"
+					></el-date-picker> -->
+					<el-checkbox label="跨年" v-model="isSpanYear" :disabled="isSpanYearDisable"
+					style="margin-top: 12px;" @change="changeIsSpanYear"></el-checkbox>
+					<div class="legend-set-text" @click="openLegendEditDia">
+						<span>图例名称设置</span>
+						<img src="~@/assets/img/icons/edit-blue.png" />
+					</div>
+				</div>
+
 				<div class="targetset-cont">
 						<!-- 仅用于散点图配置提出 -->
 					<div class="scatter-setting" v-if="chartInfo.ChartType === 5 && tableData.length">
@@ -293,7 +347,7 @@
 							}}</el-button>
 						</template>
 						<!-- 季节性图选择年份区间 -->
-						<date-picker
+						<!-- <date-picker
 							v-else-if="chartInfo.ChartType === 2"
 							v-model="season_year"
 							type="month"
@@ -301,7 +355,11 @@
 							range
 							placeholder="年份日期选择"
 							@change="seasonYearChange"
-						/>
+						/> -->
+						<div v-else-if="chartInfo.ChartType === 2" style="padding: 10px 20px;border: 1px solid #eee;border-radius: 8px;cursor: pointer;"
+						@click="openDateDia">
+							{{ season_year && season_year.length>0 ? season_year[0]+'~'+season_year[1]:"年份日期选择" }}
+						</div>
 					</div>
 				</div>
 				<div class="cont-bottom">
@@ -479,10 +537,19 @@
     <DateChooseDia
       :isDateDia="isDateDia"
       :dateForm="dateForm"
+			:earliestDate="earliestDate"
       @cancel="isDateDia = false"
       @dateBack="dataChangeBack"
     />
 
+		<!-- 季节性 图例设置 -->
+		<LegendEditDia
+      :isEditLegend="legendEditDiaShow"
+			:legendList="SeasonExtraConfig.ChartLegend"
+      @cancel="legendEditDiaShow = false"
+      @saveLegend="saveLegend"
+    />
+
 		<!-- 图表另存 -->
     <SaveChartOther 
       :show.sync="isShowSaveOther" 
@@ -501,8 +568,10 @@ import DateChooseDia from './components/DateChooseDia';
 import SaveChartOther from './components/SaveChartOther';
 import barOption from './components/barOptionSection.vue';
 import sectionalScatterOption from './components/sectionalScatterOption.vue';
+import LegendEditDia from './components/LegendEditDia.vue';
+
 export default {
-  components: { Chart,DateChooseDia,SaveChartOther,barOption,sectionalScatterOption },
+  components: { Chart,DateChooseDia,SaveChartOther,barOption,sectionalScatterOption,LegendEditDia },
 	directives: {
     drag(el, bindings) {
       el.onmousedown = function (e) {
@@ -540,6 +609,8 @@ export default {
 						this.setAddChartDefault();
 						newval.length && !this.chartInfo.WarnMsg && this.setChartOptionHandle(newval);
 					}
+					// 设置起始日期和最新日期
+					this.setExtremumDate()
 				}
       },
       deep: true,
@@ -578,8 +649,15 @@ export default {
 						Unit: BarChartInfo ? BarChartInfo.Unit : ''
 					};
           this.tableData = EdbInfoList;
-          this.setDefaultDateSelect(); //设置默认的日期选中
-					
+
+					this.calendar_type = this.chartInfo.Calendar; //日历类型
+					this.setDefaultPreviewOption() // 设置配置项
+
+					this.$nextTick(()=>{
+						this.setDefaultDateSelect(); //设置默认的日期选中
+					})
+
+
 					if(this.chartInfo.ChartType === 7) {
 						//特殊柱形图数据
 						this.initBarData(res.Data)
@@ -596,19 +674,58 @@ export default {
     setDefaultDateSelect() {
       this.year_select = this.chartInfo.DateType;
       this.select_date = [this.chartInfo.StartDate, this.chartInfo.EndDate];
-      this.calendar_type = this.chartInfo.Calendar; //日历类型
-      this.season_year = [
-        this.chartInfo.SeasonStartDate,
-        this.chartInfo.SeasonEndDate,
-      ];
+			this.count_year = this.chartInfo.StartYear;
+      // this.calendar_type = this.chartInfo.Calendar; //日历类型
+
+			if(this.chartInfo.ChartType==2){
+        if(this.year_select==20){
+          let latestYear = parseInt(this.tableData[0].LatestDate.substring(0,4))
+          this.season_year=[`${latestYear-this.count_year+1}-01-01`,`${latestYear}-12-31`]
+        }else if(this.year_select==6){
+          this.season_year = [this.chartInfo.SeasonStartDate,this.tableData[0].LatestDate];
+        }else{
+          this.season_year = [this.chartInfo.SeasonStartDate,this.chartInfo.SeasonEndDate]
+        }
+      }
+
       this.dateTip =
         this.chartInfo.DateType === 5
           ? `${this.chartInfo.StartDate}~${this.chartInfo.EndDate}`
           : this.chartInfo.DateType === 6
           ? `${this.chartInfo.StartDate}~至今`
-          : '请选择时间段';
+          : this.chartInfo.DateType === 20
+          ?`最近${this.chartInfo.StartYear}年`
+          :'请选择时间段';
+			
     },
+    // 设置配置项
+    setDefaultPreviewOption(){
+      if(this.chartInfo.ChartType==2){
+				this.count_year = this.chartInfo.StartYear
+				// if(!(this.chartInfo.SeasonEndDate && this.chartInfo.SeasonStartDate)){
+				// 	// 获取最近日期的年
+				// 	let latestYear = parseInt(this.latestDate.substring(0,4))
+				// 	this.season_year=[`${latestYear-this.count_year+1}-01-01`,`${latestYear}-12-31`]
+				// }
+        if(this.chartInfo.SeasonExtraConfig){
+          this.SeasonExtraConfig = JSON.parse(this.chartInfo.SeasonExtraConfig)
+					// console.log(this.SeasonExtraConfig);
+					this.isSpanYear=!!this.SeasonExtraConfig.JumpYear
+					this.isSpanYearDisable=
+					!!(new Date(`2023-${this.SeasonExtraConfig.XStartDate}`) > new Date(`2023-${this.SeasonExtraConfig.XEndDate}`) || 
+					new Date(`2023-${this.SeasonExtraConfig.XStartDate}`) == new Date(`2023-${this.SeasonExtraConfig.XEndDate}`))
+        }
+				// 图例名称 需要在DataList中取,SeasonExtraConfig里面的可能是旧的
+				this.SeasonExtraConfig.ChartLegend=[]
+				const chartDataHandle = this.calendar_type === "农历"?
+														this.tableData[0].DataList.filter((item, index) => index > 0):
+														this.tableData[0].DataList
 
+				chartDataHandle.map(item =>{
+					this.SeasonExtraConfig.ChartLegend.push({Name:item.Years,Value:item.ChartLegend})
+				})
+      }
+    },
 		 /* 保存 */
 		saveHandle() {
 			if(!this.tableData.length) return this.$message.warning('暂未选择指标');
@@ -622,6 +739,11 @@ export default {
 
 					if(this.chartInfo.ChartType === 10 && !this.$refs.SectionScatterOptRef.seriesArr[0].edbs)  return this.$message.warning('请添加系列指标');
 
+					if(this.chartInfo.ChartType === 2){
+						if(!(this.SeasonExtraConfig.XStartDate && this.SeasonExtraConfig.XEndDate)){
+							return this.$message.warning('横坐标显示范围不能为空');
+						}
+					}
 					let db_arr = this.tableData.map(item => ({
 							ChartColor: item.ChartColor,
 							PredictChartColor: item.PredictChartColor,
@@ -653,6 +775,7 @@ export default {
 					? {
 							...public_param,
 							DateType: this.year_select,
+							StartYear: this.count_year || 0,
 							StartDate:
 									[5,6].includes(this.year_select)
 										? this.select_date[0]
@@ -767,6 +890,32 @@ export default {
 				color: #606266;
 				margin-top: 10px;
 			}
+			.xaxis-range-cont{
+				color: #606266;
+				margin-top: 20px;
+				.xaxis-range-tip{
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					.hint-message{
+						font-size: 15px;
+						line-height: 22px;
+					}
+				}
+				.legend-set-text{
+					font-size: 15px;
+					color: #1B7BDE;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					margin-top: 20px;
+					cursor: pointer;
+					img{
+						height: 16px;
+						margin-left: 5px;
+					}
+				}
+			}
 			.targetset-cont {
 				padding: 30px 0 20px;
 				.el-input__inner {
@@ -856,6 +1005,13 @@ export default {
 					.btn-sty {
 						border: 1px solid #409eff;
 					}
+					.date-setting{
+						border: 1px solid #DCDFE6;
+						border-radius: 4px;
+						cursor: pointer;
+						color: #333333;
+						line-height: 16px;
+					}
 				}
 				.top-right {
 					font-size: 16px;
@@ -990,6 +1146,12 @@ export default {
 			.year-btn,.btn-sty {
 				font-size: $font-normal;
 			}
+			.date-setting{
+				width: 210px;
+				height: 40px;
+				padding: 12px;
+				font-size: $font-normal;
+			}
 		}
 
 		@media screen and (max-width: 1710px){
@@ -1009,6 +1171,12 @@ export default {
 				padding: 6px;
 				border: 1px solid #409eff;
 			}
+			.date-setting{
+				width: 180px;
+				height: 36px;
+				padding: 10px;
+				font-size: $font-small;
+			}
 		}
 	}
 }
@@ -1017,4 +1185,9 @@ export default {
 .edb-item-style .el-input__icon {
 	line-height: 27px;
 }
+
+/*他不要下拉选择框 QAQ */
+.x-range-picker-date {
+	display: none;
+}
 </style>

+ 210 - 37
src/views/dataEntry_manage/mixins/addOreditMixin.js

@@ -52,6 +52,19 @@ export default {
 			search_have_more: true,
 			search_page: 1,
 			current_search:'',
+			// 季节性图和额外配置
+			SeasonExtraConfig:{
+				ChartLegend:[], // 图例名称数组
+				XStartDate:"01-01", // 横坐标显示范围 - 开始
+				XEndDate:"12-31", // 横坐标显示范围-结束
+				JumpYear:0, //是否跨年
+			},
+			// 横坐标显示范围回显 - 季节性图
+			// xAxisRange:["01-01","12-31"],
+			// 是否跨过一年
+			isSpanYear:false,
+			isSpanYearDisable:false,
+			legendEditDiaShow:false,
 		}
 	},
 	computed: {
@@ -131,31 +144,50 @@ export default {
 
 			/* 正常图获取指标数据 柱形图不获取 */
 			if(this.chartInfo.ChartType !== 7) {
-				let params = this.sameOptionType.includes(this.chartInfo.ChartType) 
-					? {
-						EdbInfoId: item.EdbInfoId,
-						ChartType: this.chartInfo.ChartType,
-						DateType: this.year_select,
-						StartDate:
-							this.year_select === 5 || this.year_select === 6
-								? this.select_date[0]
-								: '',
-						EndDate: this.year_select === 5 ? this.select_date[1] : '',
-					} 
-					: {
-						EdbInfoId: item.EdbInfoId,
-						ChartType: this.chartInfo.ChartType,
-						Calendar: this.calendar_type,
-						SeasonStartDate: this.season_year ? this.season_year[0] : '',
-						SeasonEndDate: this.season_year ? this.season_year[1] : '',
-					};
+				// let params = this.sameOptionType.includes(this.chartInfo.ChartType) 
+				// 	? {
+				// 		EdbInfoId: item.EdbInfoId,
+				// 		ChartType: this.chartInfo.ChartType,
+				// 		DateType: this.year_select,
+				// 		StartDate:
+				// 			this.year_select === 5 || this.year_select === 6
+				// 				? this.select_date[0]
+				// 				: '',
+				// 		EndDate: this.year_select === 5 ? this.select_date[1] : '',
+				// 	} 
+				// 	: {
+				// 		EdbInfoId: item.EdbInfoId,
+				// 		ChartType: this.chartInfo.ChartType,
+				// 		Calendar: this.calendar_type,
+				// 		SeasonStartDate: '',
+				// 		SeasonEndDate: '',
+				// 	};
+				let dateArray=this.chartInfo.ChartType==2?this.season_year:this.select_date
+
+				let params = {
+					EdbInfoId: item.EdbInfoId,
+					ChartType: this.chartInfo.ChartType,
+					Calendar: this.chartInfo.ChartType===2?this.calendar_type:undefined,
+					DateType: this.year_select,
+					StartYear:this.count_year,
+					StartDate:
+						this.year_select === 5 || this.year_select === 6
+							? dateArray[0]
+							: '',
+					EndDate: this.year_select === 5 ? dateArray[1] : '',
+				} 
 				dataBaseInterface.chartInfo(params).then((res) => {
 					if(res.Ret !== 200) return;
 						let [ tableItem ] = res.Data.EdbInfoList;
-	
 						// 同一指标切换图表类型
 						if(type) {
 							this.tableData = [ tableItem ];
+
+							this.$nextTick(()=>{
+								// 等待 tableData的 监听里面的获取到 起始时间和最近日期
+								this.setChartDefault()
+							})
+
 							return
 						};
 						//检查添加指标是否已存在
@@ -167,7 +199,13 @@ export default {
 							else if(this.chartInfo.ChartType === 5 && this.tableData.length >= 2) return this.$message.warning('您选择的图表样式为散点图,最多支持2个指标')
 							this.tableData.push(tableItem);
 							this.isSetExtremeValue = true;
-							console.log(this.tableData)
+							// console.log(this.tableData)
+
+							this.$nextTick(()=>{
+								// 等待 tableData的 监听里面的获取到 起始时间和最近日期
+								this.setChartDefault()
+							})
+
 						}else {
 							this.$message.warning('录入指标已存在');
 						}
@@ -231,16 +269,20 @@ export default {
 
 		/* 曲线图切换筛选项时请求数据 */
 		async getPreviewSplineInfo() {
+			let dateArray=this.chartInfo.ChartType==2?this.season_year:this.select_date
 			let params = {
         ChartType: this.chartInfo.ChartType,
         DateType: this.year_select,
-        StartDate: [5, 6].includes(this.year_select)
-          ? this.select_date[0]
+        StartDate: [5 , 6].includes(this.year_select)
+          ? dateArray[0]
           : '',
-        EndDate: this.year_select === 5 ? this.select_date[1] : '',
+        EndDate: this.year_select === 5 ? dateArray[1]: '',
         Calendar: this.calendar_type,
-        SeasonStartDate: this.season_year ? this.season_year[0] : '',
-        SeasonEndDate: this.season_year ? this.season_year[1] : '',
+				StartYear:this.count_year || 0,
+				// ETA1.0.5 去除了这两个入参
+        // SeasonStartDate: this.season_year ? this.season_year[0] : '',
+        // SeasonEndDate: this.season_year ? this.season_year[1] : '',
+				SeasonExtraConfig:this.SeasonExtraConfig,
         ChartEdbInfoList: this.tableData.map(_ => ({
           EdbInfoId: _.EdbInfoId,
           EdbInfoType: _.EdbInfoType,
@@ -255,6 +297,18 @@ export default {
 
       const { EdbInfoList } = res.Data;
 
+			if(this.chartInfo.ChartType == 2){
+				const chartDataHandle = this.calendar_type === "农历"?
+															EdbInfoList[0].DataList.filter((item, index) => index > 0):
+															EdbInfoList[0].DataList
+
+				// 季节性图例回显
+				this.SeasonExtraConfig.ChartLegend = []
+				chartDataHandle.map(item =>{
+					this.SeasonExtraConfig.ChartLegend.push({Name:item.Years,Value:item.ChartLegend})
+				})
+			}
+
       this.tableData.forEach((item) => {
         let edbData = EdbInfoList.find(_ => _.EdbInfoId===item.EdbInfoId);
         item.DataList = edbData.DataList;
@@ -274,13 +328,17 @@ export default {
 		/* 打开时间段弹窗 */
 		openDateDia() {
 			// 自定义时间段回显
+			let selectDateStart = this.chartInfo.ChartType === 2?this.season_year[0]:this.select_date[0]
+			let selectDateEnd = this.chartInfo.ChartType === 2?this.season_year[1]:this.select_date[1]
+
 			this.dateForm = {
 				date_type: this.year_select,
 				start_date:
 					this.year_select === 5 || this.year_select === 6
-						? this.select_date[0]
+						? selectDateStart
 						: '',
-				end_date: this.year_select === 5 ? this.select_date[1] : '',
+				end_date: this.year_select === 5 ? selectDateEnd : '',
+				count_year: this.year_select === 20 ? this.count_year : ''
 			};
 			this.isDateDia = true;
 		},
@@ -288,23 +346,46 @@ export default {
 		dataChangeBack(data) {
 			this.year_select = data.dateType;
 			this.isDateDia = false;
-			this.select_date = [data.start_date, data.end_date];
-			if (data.dateType === 5) {
+      this.count_year = data.count_year
+
+			let dateStart = data.start_date
+			let dateEnd = data.end_date
+			let latestYear = parseInt(this.latestDate.substring(0,4))
+			if(data.dateType==20){
+				dateStart = `${latestYear-data.count_year+1}-01-01`
+				dateEnd = `${latestYear}-12-31`
+			}
+
+			if(this.chartInfo.ChartType === 2){
+				if(data.dateType==6){
+					// 回显
+					dateEnd = this.$moment(new Date()).format("YYYY-MM-DD")
+				}
+			}
+
+			this.season_year = [dateStart, dateEnd];
+			// 因为原本季节性图不支持 DateType为5和6的 所以季节性也将StartDate和EndDate传过去
+			this.select_date = [dateStart, dateEnd];
+
+			if(data.dateType==20){
+				this.dateTip = `最近${data.count_year}年`
+			}else if (data.dateType === 5) {
 				this.dateTip = `${data.start_date}~${data.end_date}`;
 			} else {
 				this.dateTip = `${data.start_date}~至今`;
 			}
+
 			this.getPreviewSplineInfo();
 		},
 
 			/* 季节图切换年份  保持当前配置 */
-		seasonYearChange() {
-			this.getPreviewSplineInfo();
-		},
+		// seasonYearChange() {
+		// 	this.getPreviewSplineInfo();
+		// },
 
 		/* 切换图重置状态 */
 		initStatus() {
-			this.year_select = 3;
+			this.year_select = this.chartInfo.ChartType === 2?20:3;
 			this.select_date = '';
 			this.isSetExtremeValue = true;
 			this.calendar_type = '公历';
@@ -314,6 +395,11 @@ export default {
 			this.barDateList = [];
       this.chartLimit = {};
       this.sectionScatterData = {};
+
+			this.$nextTick(()=>{
+				// 等待 tableData的 监听里面的获取到 起始时间和最近日期
+				this.setChartDefault()
+			})
 		},
 
 		/* 添加指标时 配置默认颜色 线条等 */
@@ -464,8 +550,11 @@ export default {
 					return {
 						...public_param,
 						Calendar: this.calendar_type,
-						SeasonStartDate: this.season_year ? this.season_year[0] : '',
-						SeasonEndDate: this.season_year ? this.season_year[1] : '',
+						DateType: this.year_select,
+						StartYear: this.count_year || 0,
+						StartDate: this.season_year ? this.season_year[0] : '',
+						EndDate: this.season_year ? this.season_year[1] : '',
+						SeasonExtraConfig:this.SeasonExtraConfig
 					}
 				case 7:
 					return {
@@ -496,8 +585,6 @@ export default {
 						StartDate: "",
 						EndDate: "",
 						Calendar: "公历",
-						SeasonStartDate: "",
-						SeasonEndDate: "",
 						ExtraConfig: JSON.stringify({
 							XName: this.$refs.SectionScatterOptRef.seriesArr[0].x_title,
 							YName: this.$refs.SectionScatterOptRef.seriesArr[0].y_title,
@@ -542,6 +629,92 @@ export default {
 			if(!this.options.series) return
 
 			this.options.yAxis[0].title.text = val;
+		},
+		// 设置图表的默认值
+		setChartDefault(){
+			// console.log(this.latestDate,this.earliestDate,'earliestDate');
+			if(!(this.tableData && this.tableData.length>0)) return 
+			if(this.chartInfo.ChartType === 2){
+				// 季节性图默认选择最近5年
+				this.year_select = 20
+				this.count_year = 5	
+				// 获取最近日期的年
+				let latestYear = parseInt(this.latestDate.substring(0,4))
+
+				this.season_year=[`${latestYear-this.count_year+1}-01-01`,`${latestYear}-12-31`]
+				// this.xAxisRange = ['01-01','12-31']
+				this.SeasonExtraConfig.XStartDate = '01-01'
+				this.SeasonExtraConfig.XEndDate = '12-31'
+				this.isSpanYear=false
+				this.isSpanYearDisable=false
+				this.SeasonExtraConfig.ChartLegend=[]
+
+				const chartDataHandle = this.calendar_type === "农历"?
+														this.tableData[0].DataList.filter((item, index) => index > 0):
+														this.tableData[0].DataList
+				chartDataHandle.map(item =>{
+					this.SeasonExtraConfig.ChartLegend.push({Name:item.Years,Value:item.ChartLegend})
+				})
+			}
+		},
+		// 横轴显示范围改变
+		// xAxisRangeChange(date){
+		// 	console.log(date);
+		// 	if(date && date.length>0){
+		// 		// console.log(date[0],date[1]);
+		// 		let xStartDate = date[0]
+		// 		let xEndDate = date[1]
+		// 		if(new Date(`2023-${xStartDate}`) > new Date(`2023-${xEndDate}`) || 
+		// 		new Date(`2023-${xStartDate}`) == new Date(`2023-${xEndDate}`)){
+		// 			// 开始日期 >= 结束日期 跨年
+		// 			this.isSpanYear=true
+		// 			this.isSpanYearDisable=true
+		// 		}else{
+		// 			this.isSpanYearDisable=false
+		// 		}
+		// 		// this.xAxisRange = [xStartDate,xEndDate]
+		// 		this.SeasonExtraConfig.XStartDate = xStartDate
+		// 		this.SeasonExtraConfig.XEndDate = xEndDate
+		// 		this.SeasonExtraConfig.JumpYear = this.isSpanYear?1:0
+		// 		this.getPreviewSplineInfo()
+		// 	}else{
+		// 		this.isSpanYearDisable=false
+		// 	}
+		// },
+		// 横轴显示范围改变
+		xAxisChange(date){
+			if(this.SeasonExtraConfig.XStartDate && this.SeasonExtraConfig.XEndDate){
+				if(new Date(`2023-${this.SeasonExtraConfig.XStartDate}`) > new Date(`2023-${this.SeasonExtraConfig.XEndDate}`) || 
+				new Date(`2023-${this.SeasonExtraConfig.XStartDate}`) == new Date(`2023-${this.SeasonExtraConfig.XEndDate}`)){
+					// 开始日期 >= 结束日期 跨年
+					this.isSpanYear=true
+					this.isSpanYearDisable=true
+				}else{
+					this.isSpanYearDisable=false
+				}
+				this.SeasonExtraConfig.JumpYear = this.isSpanYear?1:0
+				//修改横轴的时候,请求入参里的图例名称需要清空一下
+				this.SeasonExtraConfig.ChartLegend=[]
+				this.getPreviewSplineInfo()
+			}else{
+				this.isSpanYearDisable=false
+			}
+		},
+		changeIsSpanYear(value){
+			this.SeasonExtraConfig.JumpYear = value?1:0
+			this.getPreviewSplineInfo()
+		},
+		// 打开图例编辑窗口
+		openLegendEditDia(){
+			this.legendEditDiaShow=true
+		},
+		// 图例编辑接口保存
+		saveLegend(copyList){
+			if(copyList && copyList.length>0){
+				this.SeasonExtraConfig.ChartLegend = copyList
+				this.getPreviewSplineInfo()
+				this.legendEditDiaShow=false
+			}
 		}
 	}
 }

+ 100 - 65
src/views/dataEntry_manage/mixins/chartPublic.js

@@ -40,11 +40,20 @@ const basicYAxis = {
 export const chartSetMixin = {
 	data() {
 		return {
-			year_select: yearSelector[0].value, //默认区间15年至今
+      /**
+       * 默认区间15年至今 值等于 5、6、20 是自定义时间段
+       * 20代表最近几年 季节性图默认 最近5年
+       * 6代表至今 只需要选择开始日期
+       * 5代表范围 需要选择开始日期和结束日期
+       */
+			year_select: yearSelector[0].value,
       sameOptionType:[1,3,4,5,6],// 头部一样 配置一样的图表类型 曲线 散点 柱状 面积 组合
       yearSelector, //年份按钮组
       select_date: '', //自定义时间段
+      count_year: 0, //最近年数
       isDateDia: false, // 时间段弹窗
+      earliestDate:'', // 最早的日期 - 起始日期
+      latestDate:'', //最晚日期 - 最新日期
       dateForm: {},
       dateTip: '请选择时间段',
       predefineColors: defaultOpts.colors.slice(0, 2), //定义颜色蓝,红 默认颜色
@@ -157,7 +166,14 @@ export const chartSetMixin = {
       },
 
       /* 统计频率图 */
-      statisticFrequencyData: {}
+      statisticFrequencyData: {},
+      // 季节性图和额外配置 这里为了预览
+			SeasonExtraConfig:{
+				ChartLegend:[], // 图例名称数组
+				XStartDate:"01-01", // 横坐标显示范围 - 开始
+				XEndDate:"12-31", // 横坐标显示范围-结束
+				JumpYear:0, //是否跨年
+			},
 		}
 	},
   watch: {
@@ -739,12 +755,21 @@ export const chartSetMixin = {
       this.rightIndex = -1;
       this.rightTwoIndex = -1;
       const chartData = newval[0];
+      // 农历数据需要去除第一项  农历和公历处理逻辑一样
+      /**
+       * isPredictorChart - 预测指标的chartInfo.vue组件内定义的变量
+       * 预测指标成图 还是之前农历图的逻辑,有空再拆吧,做个兼容
+      */
+      const chartDataHandle=this.calendar_type === '农历'?
+                            this.isPredictorChart?chartData.DataList.List.filter((item, index) => index > 0):
+                            chartData.DataList.filter((item, index) => index > 0):
+                            chartData.DataList
+
       let seasonYdata = [],
         seasonData = [];
-
         /* 公历数据处理 处理数据列 y轴 */
-        if (this.calendar_type === '公历')
-        for (let j of chartData.DataList) {
+        // if (this.calendar_type === '公历')
+        for (let j of chartDataHandle) {
           //预测指标配置
           let predict_params =  chartData.EdbInfoCategoryType === 1 ? this.getSeasonPredictParams(j.CuttingDataTimestamp) : {};
           
@@ -752,16 +777,16 @@ export const chartSetMixin = {
             data: [],
             type: chartData.ChartStyle,
             yAxis: 0,
-            name: j.Year,
+            name: this.isPredictorChart?j.Year:j.ChartLegend,
             ...predict_params
           };
-          const data_array = _.cloneDeep(j.DataList);
+          const data_array = this.calendar_type === '农历' && this.isPredictorChart?_.cloneDeep(j.Items):_.cloneDeep(j.DataList);
           data_array &&
             data_array.forEach((item) => {
               serie_item.data.push([item.DataTimestamp, item.Value]);
             });
-          const index = chartData.DataList.findIndex(
-            (item) => item.Year === j.Year
+          const index = chartDataHandle.findIndex(
+            (item) => this.isPredictorChart?item.Year === j.Year:item.ChartLegend === j.ChartLegend
           );
           const s_yItem = {
             labels: {
@@ -792,57 +817,56 @@ export const chartSetMixin = {
           seasonYdata.push(s_yItem);
         }
 
-      /* 农历数据处理  */
-      let filterArr =
-        this.calendar_type === '农历'
-          ? chartData.DataList.List.filter((item, index) => index > 0)
-          : [];
-      if (this.calendar_type === '农历')
-        for (let j of filterArr) {
-           //预测指标配置
-          let predict_params =  chartData.EdbInfoCategoryType === 1 ? this.getSeasonPredictParams(j.CuttingDataTimestamp) : {};
-
-          let serie_item = {
-            data: [],
-            type: chartData.ChartStyle,
-            yAxis: 0,
-            name: j.Year,
-            ...predict_params
-          };
-          const data_array = _.cloneDeep(j.Items);
-          data_array &&
-            data_array.forEach((item) => {
-              serie_item.data.push([item.DataTimestamp, item.Value]);
-            });
-          const index = filterArr.findIndex((item) => item.Year === j.Year);
-          const s_yItem = {
-            labels: {
-              formatter: function () {
-                let val = this.value;
-                return index !== 0 ? '' : val;
-              },
-              align: 'center',
-            },
-            title: {
-              text:  `${chartData.Unit}`,
-              textCh:chartData.Unit, // 中文
-              // 中文不存在,无论英文有无都显示空
-              textEn:chartData.UnitEn||chartData.Unit, // 英文
-              styleEn:{}, // 英文样式
-              // text:  null,
-              align: 'high',
-              rotation: 0,
-              y: -15,
-              offset: -(12 * chartData.Unit.length),
-            },
-            max: Number(chartData.MaxData),
-            min: Number(chartData.MinData),
-            ...seasonOptions.yAxis,
-          };
-          seasonData.push(serie_item);
-          seasonYdata.push(s_yItem);
-        }
-
+      // /* 农历数据处理  */
+      // let filterArr =
+      //   this.calendar_type === '农历'
+      //     ? chartData.DataList.filter((item, index) => index > 0)
+      //     : [];
+      // if (this.calendar_type === '农历')
+      //   for (let j of filterArr) {
+      //      //预测指标配置
+      //     let predict_params =  chartData.EdbInfoCategoryType === 1 ? this.getSeasonPredictParams(j.CuttingDataTimestamp) : {};
+
+      //     let serie_item = {
+      //       data: [],
+      //       type: chartData.ChartStyle,
+      //       yAxis: 0,
+      //       name: j.ChartLegend,
+      //       ...predict_params
+      //     };
+      //     const data_array = _.cloneDeep(j.DataList);
+      //     data_array &&
+      //       data_array.forEach((item) => {
+      //         serie_item.data.push([item.DataTimestamp, item.Value]);
+      //       });
+      //     const index = filterArr.findIndex((item) => item.ChartLegend === j.ChartLegend);
+      //     const s_yItem = {
+      //       labels: {
+      //         formatter: function () {
+      //           let val = this.value;
+      //           return index !== 0 ? '' : val;
+      //         },
+      //         align: 'center',
+      //       },
+      //       title: {
+      //         text:  `${chartData.Unit}`,
+      //         textCh:chartData.Unit, // 中文
+      //         // 中文不存在,无论英文有无都显示空
+      //         textEn:chartData.UnitEn||chartData.Unit, // 英文
+      //         styleEn:{}, // 英文样式
+      //         // text:  null,
+      //         align: 'high',
+      //         rotation: 0,
+      //         y: -15,
+      //         offset: -(12 * chartData.Unit.length),
+      //       },
+      //       max: Number(chartData.MaxData),
+      //       min: Number(chartData.MinData),
+      //       ...seasonOptions.yAxis,
+      //     };
+      //     seasonData.push(serie_item);
+      //     seasonYdata.push(s_yItem);
+      //   }
       /* x轴显示月日  提示框显示月日*/
       defaultOpts.xAxis.labels = {
         formatter: function () {
@@ -862,7 +886,7 @@ export const chartSetMixin = {
         xDateFormat: '%m/%d',
       }
       let rangeSelector =
-        this.calendar_type === '农历'
+        this.calendar_type === '农历' && this.isPredictorChart
           ? {
               enabled: true,
               selected: 0,
@@ -900,10 +924,7 @@ export const chartSetMixin = {
             };
 
       this.options = {
-        colors:
-          this.calendar_type === '公历'
-            ? seasonOptions.colors.slice(-chartData.DataList.length)
-            : seasonOptions.colors.slice(-filterArr.length),
+        colors:seasonOptions.colors.slice(-chartDataHandle.length),
         series: seasonData,
         yAxis: seasonYdata,
         rangeSelector,
@@ -2040,6 +2061,20 @@ export const chartSetMixin = {
       }else {
         sourceMap[this.chartInfo.Source]();
       }
+    },
+    // 设置 起始日期 和 最新日期
+    setExtremumDate(){
+      //过滤、排序 拿到起始日期
+      let startDateList = this.tableData.map(it => it.StartDate)
+                                        .filter(Boolean)
+                                        .sort((a,b)=> new Date(a).getTime() - new Date(b).getTime())
+      this.earliestDate = startDateList[0]
+      //过滤、排序 拿到最新日期
+      let endDateList = this.tableData.map(it => it.LatestDate)
+                                      .filter(Boolean)
+                                      .sort((a,b)=> new Date(b).getTime() - new Date(a).getTime())
+      this.latestDate = endDateList[0]
+      console.log(this.earliestDate,this.latestDate,'this.latestDate');
     }
 	}
 }

+ 5 - 5
src/views/dataEntry_manage/thirdBase/BAIINFOTargetbase.vue

@@ -78,12 +78,12 @@
                 src="~@/assets/img/set_m/add.png"
                 style="width: 14px; height: 14px; margin-right: 5px"
                 @click.stop="clickClassifyHandle('add', data, node)"
-                v-if="data.Button.AddButton"
+                v-if="data.Button.AddButton&&permissionBtn.isShowBtn('dataSourcePermission','bcyfData_classifyOpt_add')"
               />
               <img
                 v-permission="permissionBtn.dataSourcePermission.bcyfData_edit"
                 src="~@/assets/img/set_m/edit.png"
-                v-if="data.Button.OpButton"
+                v-if="data.Button.OpButton&&permissionBtn.isShowBtn('dataSourcePermission','bcyfData_classifyOpt_edit')"
                 alt=""
                 style="width: 14px; height: 14px; margin-right: 5px"
                 @click.stop="clickClassifyHandle('edit', data, node)"
@@ -97,14 +97,14 @@
               />
               <img
                 src="~@/assets/img/set_m/del.png"
-                v-if="data.Button.DeleteButton"
+                v-if="data.Button.DeleteButton&&permissionBtn.isShowBtn('dataSourcePermission','bcyfData_classifyOpt_delete')"
                 alt=""
                 style="width: 14px; height: 14px"
                 @click.stop="clickClassifyHandle('del', data, node)"
               />
               <img
                 src="~@/assets/img/set_m/del_icon.png"
-                v-if="data.Button.targetDelButton"
+                v-if="data.Button.targetDelButton&&permissionBtn.isShowBtn('dataSourcePermission','bcyfData_classifyOpt_delete')"
                 alt=""
                 style="width: 14px; height: 14px; margin-right: 5px"
                 @click.stop="clickClassifyHandle('delTarget', data, node)"
@@ -113,7 +113,7 @@
           </div>
         </el-tree>
 
-        <div class="add-cont" @click="addClassifyHandle">
+        <div class="add-cont" @click="addClassifyHandle" v-if="permissionBtn.isShowBtn('dataSourcePermission','bcyfData_classifyOpt_add')">
           <img
             src="~@/assets/img/set_m/add_ico.png"
             alt=""

+ 5 - 5
src/views/dataEntry_manage/thirdBase/SCITargetbase.vue

@@ -78,11 +78,11 @@
                 src="~@/assets/img/set_m/add.png"
                 style="width: 14px; height: 14px; margin-right: 5px"
                 @click.stop="clickClassifyHandle('add', data, node)"
-                v-if="data.Button.AddButton"
+                v-if="data.Button.AddButton&&permissionBtn.isShowBtn('dataSourcePermission','hongtao3Data_classifyOpt_add')"
               />
               <img
                 src="~@/assets/img/set_m/edit.png"
-                v-if="data.Button.OpButton"
+                v-if="data.Button.OpButton&&permissionBtn.isShowBtn('dataSourcePermission','hongtao3Data_classifyOpt_edit')"
                 alt=""
                 style="width: 14px; height: 14px; margin-right: 5px"
                 @click.stop="clickClassifyHandle('edit', data, node)"
@@ -96,14 +96,14 @@
               />
               <img
                 src="~@/assets/img/set_m/del.png"
-                v-if="data.Button.DeleteButton"
+                v-if="data.Button.DeleteButton&&permissionBtn.isShowBtn('dataSourcePermission','hongtao3Data_classifyOpt_delete')"
                 alt=""
                 style="width: 14px; height: 14px"
                 @click.stop="clickClassifyHandle('del', data, node)"
               />
               <img
                 src="~@/assets/img/set_m/del_icon.png"
-                v-if="data.Button.targetDelButton"
+                v-if="data.Button.targetDelButton&&permissionBtn.isShowBtn('dataSourcePermission','hongtao3Data_classifyOpt_delete')"
                 alt=""
                 style="width: 14px; height: 14px; margin-right: 5px"
                 @click.stop="clickClassifyHandle('delTarget', data, node)"
@@ -112,7 +112,7 @@
           </div>
         </el-tree>
 
-        <div class="add-cont" @click="addClassifyHandle">
+        <div class="add-cont" @click="addClassifyHandle" v-if="permissionBtn.isShowBtn('dataSourcePermission','hongtao3Data_classifyOpt_add')">
           <img
             src="~@/assets/img/set_m/add_ico.png"
             alt=""

+ 5 - 5
src/views/dataEntry_manage/thirdBase/smmTargetbase.vue

@@ -91,11 +91,11 @@
                 src="~@/assets/img/set_m/add.png"
                 style="width: 14px; height: 14px; margin-right: 5px"
                 @click.stop="clickClassifyHandle('add', data, node)"
-                v-if="data.Button.AddButton"
+                v-if="data.Button.AddButton&&permissionBtn.isShowBtn('dataSourcePermission','smmData_classifyOpt_add')"
               />
               <img
                 src="~@/assets/img/set_m/edit.png"
-                v-if="data.Button.OpButton"
+                v-if="data.Button.OpButton&&permissionBtn.isShowBtn('dataSourcePermission','smmData_classifyOpt_edit')"
                 alt=""
                 style="width: 14px; height: 14px; margin-right: 5px"
                 @click.stop="clickClassifyHandle('edit', data, node)"
@@ -109,14 +109,14 @@
               />
               <img
                 src="~@/assets/img/set_m/del.png"
-                v-if="data.Button.DeleteButton"
+                v-if="data.Button.DeleteButton&&permissionBtn.isShowBtn('dataSourcePermission','smmData_classifyOpt_delete')"
                 alt=""
                 style="width: 14px; height: 14px"
                 @click.stop="clickClassifyHandle('del', data, node)"
               />
               <img
                 src="~@/assets/img/set_m/del_icon.png"
-                v-if="data.Button.targetDelButton"
+                v-if="data.Button.targetDelButton&&permissionBtn.isShowBtn('dataSourcePermission','smmData_classifyOpt_delete')"
                 alt=""
                 style="width: 14px; height: 14px; margin-right: 5px"
                 @click.stop="clickClassifyHandle('delTarget', data, node)"
@@ -125,7 +125,7 @@
           </div>
         </el-tree>
 
-        <div class="add-cont" @click="addClassifyHandle">
+        <div class="add-cont" @click="addClassifyHandle" v-if="permissionBtn.isShowBtn('dataSourcePermission','smmData_classifyOpt_add')">
           <img
             src="~@/assets/img/set_m/add_ico.png"
             alt=""

+ 4 - 4
src/views/dataEntry_manage/thirdBase/steelChemicalbase.vue

@@ -85,18 +85,18 @@
                 src="~@/assets/img/set_m/add.png"
                 style="width: 14px; height: 14px; margin-right: 5px"
                 @click.stop="clickClassifyHandle('add', data, node)"
-                v-if="data.Button.AddButton"
+                v-if="data.Button.AddButton&&permissionBtn.isShowBtn('dataSourcePermission','mysteelData_classifyOpt_add')"
               />
               <img
                 src="~@/assets/img/set_m/edit.png"
-                v-if="data.Button.OpButton"
+                v-if="data.Button.OpButton&&permissionBtn.isShowBtn('dataSourcePermission','mysteelData_classifyOpt_edit')"
                 alt=""
                 style="width: 14px; height: 14px; margin-right: 5px"
                 @click.stop="clickClassifyHandle('edit', data, node)"
               />
               <img
                 src="~@/assets/img/set_m/del.png"
-                v-if="data.Button.DeleteButton"
+                v-if="data.Button.DeleteButton&&permissionBtn.isShowBtn('dataSourcePermission','mysteelData_classifyOpt_delete')"
                 alt=""
                 style="width: 14px; height: 14px"
                 @click.stop="clickClassifyHandle('del', data, node)"
@@ -105,7 +105,7 @@
           </div>
         </el-tree>
 
-        <div class="add-cont" @click="addClassifyHandle">
+        <div class="add-cont" @click="addClassifyHandle" v-if="permissionBtn.isShowBtn('dataSourcePermission','mysteelData_classifyOpt_add')">
           <img
             src="~@/assets/img/set_m/add_ico.png"
             alt=""

+ 1 - 1
src/views/datasheet_manage/mixins/classifyMixin.js

@@ -85,7 +85,7 @@ export default {
 		editNodeLabel(data,type='') {
       if(type === 'edit-tit') {
         if([2,3].includes(this.sheetDetailInfo.Source)) return
-        
+        if(!this.permissionBtn.isShowBtn('etaTablePermission','etaTable_classifyOpt_edit')) return
         this.$set(data,'isEditTit',true)
         this.sheet_title = data.ExcelName;
         this.$nextTick(() => {

+ 38 - 16
src/views/datasheet_manage/sheetList.vue

@@ -68,7 +68,7 @@
                 placeholder="请输入值"
                 class="label-input"
                 v-model="new_label"
-                v-if="data.isEdit"
+                v-if="data.isEdit&&permissionBtn.isShowBtn('etaTablePermission','etaTable_classifyOpt_edit')"
                 @blur="changeValue(data)"
               />
               <span
@@ -95,7 +95,7 @@
                   alt=""
                   style="width: 15px; height: 14px; margin-right: 8px"
                   @click.stop="editNode(node, data)"
-                  v-if="!data.ExcelInfoId"
+                  v-if="!data.ExcelInfoId&&permissionBtn.isShowBtn('etaTablePermission','etaTable_classifyOpt_edit')"
                 />
                 <img
                   slot="reference"
@@ -103,12 +103,12 @@
                   alt=""
                   style="width: 14px; height: 14px"
                   @click.stop="removeNode(node, data)"
-                  v-if="!data.ExcelInfoId"
+                  v-if="!data.ExcelInfoId&&permissionBtn.isShowBtn('etaTablePermission','etaTable_classifyOpt_delete')"
                 />
               </span>
             </span>
           </el-tree>
-          <div class="noDepart" @click="addLevelOneHandle">
+          <div class="noDepart" @click="addLevelOneHandle" v-if="permissionBtn.isShowBtn('etaTablePermission','etaTable_classifyOpt_edit')">
             <img
               src="~@/assets/img/set_m/add_ico.png"
               alt=""
@@ -162,7 +162,7 @@
                 @click="saveHandle"
                 v-if="
                   sheetDetailInfo.Source === 1 &&
-                  sheetDetailInfo.Button.OpButton&&permissionBtn.checkPermissionBtn(permissionBtn.etaTablePermission.etaTable_excel_save)
+                  sheetDetailInfo.Button.OpButton&&isSheetBtnShow(sheetDetailInfo,'save')
                 "
               >
                 保存
@@ -171,21 +171,21 @@
                 <li
                   class="editsty"
                   @click="goEditHandle"
-                  v-if="sheetDetailInfo.Button.OpButton&&permissionBtn.checkPermissionBtn(permissionBtn.etaTablePermission.etaTable_customize_edit)"
+                  v-if="sheetDetailInfo.Button.OpButton&&isSheetBtnShow(sheetDetailInfo,'edit')"
                 >
                   编辑
                 </li>
                 <li
                   class="editsty"
                   @click="refreshSheet"
-                  v-if="sheetDetailInfo.Button.RefreshButton&&permissionBtn.checkPermissionBtn(permissionBtn.etaTablePermission.etaTable_customize_refresh)"
+                  v-if="sheetDetailInfo.Button.RefreshButton&&isSheetBtnShow(sheetDetailInfo,'refresh')"
                 >
                   刷新
                 </li>
                 <li
                   class="editsty"
                   @click="saveOtherHandle"
-                  v-if="sheetDetailInfo.Button.CopyButton&&permissionBtn.checkPermissionBtn(permissionBtn.etaTablePermission.etaTable_customize_otherSave)"
+                  v-if="sheetDetailInfo.Button.CopyButton&&isSheetBtnShow(sheetDetailInfo,'otherSave')"
                 >
                   另存为
                 </li>
@@ -446,6 +446,20 @@ export default {
       }
     },
   },
+  computed:{
+    //数据表格是否展示
+    isShowDataSheet(){
+        const cell = {Source:2}
+        return this.isSheetBtnShow(cell,'edit')||this.isSheetBtnShow(cell,'refresh')||this.isSheetBtnShow(cell,'otherSave')
+            || this.isSheetBtnShow(cell,'download')||this.isSheetBtnShow(cell,'del')
+    },
+    //混合表格是否展示
+    isShowMixSheet(){
+        const cell = {Source:3}
+        return this.isSheetBtnShow(cell,'edit')||this.isSheetBtnShow(cell,'refresh')||this.isSheetBtnShow(cell,'otherSave')
+            || this.isSheetBtnShow(cell,'download')||this.isSheetBtnShow(cell,'del')
+    }
+  },
   methods: {
     /* 添加表格 */
     goAddSheetHandle() {
@@ -826,21 +840,29 @@ export default {
     //判断右侧列表的下载按钮是否显示
     isDownLoadShow(cell){
         const {checkPermissionBtn,etaTablePermission} = this.permissionBtn
-        if(cell.Source===1){
-            return checkPermissionBtn(etaTablePermission.etaTable_excel_download)
-        }else{
-            return checkPermissionBtn(etaTablePermission.etaTable_customize_download)
+        const checkMap = {
+            1:etaTablePermission.etaTable_excel_download,
+            2:etaTablePermission.etaTable_customize_data_download,
+            3:etaTablePermission.etaTable_customize_mix_download
         }
+        return checkPermissionBtn(checkMap[cell.Source])
     },
     //判断右侧列表的删除按钮是否显示
     isDeleteShow(cell){
         const {checkPermissionBtn,etaTablePermission} = this.permissionBtn
-        if(cell.Source===1){
-            return checkPermissionBtn(etaTablePermission.etaTable_excel_del)
-        }else{
-            return checkPermissionBtn(etaTablePermission.etaTable_customize_del)
+        const checkMap = {
+            1:etaTablePermission.etaTable_excel_del,
+            2:etaTablePermission.etaTable_customize_data_del,
+            3:etaTablePermission.etaTable_customize_mix_del
         }
+        return checkPermissionBtn(checkMap[cell.Source])
     },
+    //判断自定义表格-编辑,另存为,刷新按钮是否显示
+    isSheetBtnShow(cell,type){
+        console.log('cell',cell.Source)
+        const sheetType = cell.Source===2?'data':'mix'
+        return this.permissionBtn.isShowBtn('etaTablePermission',`etaTable_customize_${sheetType}_${type}`)
+    }
   },
   mounted() {
     if (this.$route.query.code) {

+ 14 - 5
src/views/futures_manage/commodityChartBase.vue

@@ -18,7 +18,9 @@
 				</div>
 
 				<div class="search-cont">
-					<el-checkbox v-model="isShowMe"  @change="() => { getTreeData();getPublicList() }">只看我的</el-checkbox>
+					<el-checkbox v-model="isShowMe"  
+						v-if="permissionBtn.isShowBtn('productPricePermission','goodsPrice_onlyMine')"
+						@change="() => { getTreeData();getPublicList() }">只看我的</el-checkbox>
 					<el-select
 						v-model="search_txt"
 						v-loadMore="searchLoad"
@@ -70,11 +72,11 @@
 								placeholder="请输入值"
 								class="label-input"
 								v-model="new_label"
-								v-if="data.isEdit"
+								v-if="data.isEdit&&permissionBtn.isShowBtn('productPricePermission','goodsPrice_classifyOpt_edit')"
 								@blur="changeValue(data)"
 							/>
 							<span
-								@dblclick.stop="editNodeLabel(data)"
+								@dblclick.stop="handleDblClick(data)"
 								v-else
 								class="text_oneLine node_label"
 								:style="`width:${
@@ -97,7 +99,7 @@
 									alt=""
 									style="width: 15px; height: 14px; margin-right: 8px"
 									@click.stop="editNode(node, data)"
-									v-if="!data.ChartInfoId"
+									v-if="!data.ChartInfoId&&permissionBtn.isShowBtn('productPricePermission','goodsPrice_classifyOpt_edit')"
 								/>
 								<img
 									slot="reference"
@@ -105,7 +107,7 @@
 									alt=""
 									style="width: 14px; height: 14px"
 									@click.stop="removeNode(node, data)"
-									v-if="!data.ChartInfoId"
+									v-if="!data.ChartInfoId&&permissionBtn.isShowBtn('productPricePermission','goodsPrice_classifyOpt_delete')"
 								/>
 							</span>
 						</span>
@@ -113,6 +115,7 @@
 					<div
 						class="noDepart"
 						@click="addLevelOneHandle"
+						v-if="permissionBtn.isShowBtn('productPricePermission','goodsPrice_classifyOpt_edit')"
 					>
 						<img
 							src="~@/assets/img/set_m/add_ico.png"
@@ -160,6 +163,7 @@
                         size="mini"
                         type="number"
                         placeholder="上限"
+                        :disabled="!permissionBtn.isShowBtn('productPricePermission','goodsPrice_editLimit')"
                         v-model="chartLimit.max"
                         @change="setCommodityChart"
                       />
@@ -168,6 +172,7 @@
                         size="mini"
                         type="number"
                         placeholder="下限"
+                        :disabled="!permissionBtn.isShowBtn('productPricePermission','goodsPrice_editLimit')"
                         v-model="chartLimit.min"
                         @change="setCommodityChart"
                       />
@@ -789,6 +794,10 @@ export default {
       $('#right')[0].style.width = rigtWid;
 
     },
+	handleDblClick(data){
+		if(!this.permissionBtn.isShowBtn('productPricePermission','goodsPrice_classifyOpt_edit')) return
+		this.editNodeLabel(data)
+	}
 	},
 	mounted() {
 

+ 110 - 29
src/views/mychart_manage/components/chartDetailDia.vue

@@ -41,7 +41,7 @@
               }}</el-button>
             </template>
             <!-- 季节性图选择年份区间 -->
-            <date-picker
+            <!-- <date-picker
               v-else-if="chartInfo.ChartType === 2"
               v-model="season_year"
               type="month"
@@ -49,7 +49,10 @@
               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 class="top-right" v-if="chartInfo.Button">
             <span v-permission="permissionBtn.myETAPermission.myChart_move"
@@ -217,6 +220,7 @@
                     size="mini"
                     type="number"
                     placeholder="上限"
+                    :disabled="!isAllowEditLimit"
                     v-model="tableData[leftIndex].MaxData"
                   />
                   <el-input
@@ -224,6 +228,7 @@
                     size="mini"
                     type="number"
                     placeholder="下限"
+                    :disabled="!isAllowEditLimit"
                     v-model="tableData[leftIndex].MinData"
                   />
                 </div>
@@ -233,6 +238,7 @@
                     size="mini"
                     type="number"
                     placeholder="上限"
+                    :disabled="!isAllowEditLimit"
                     v-model="tableData[rightIndex].MaxData"
                   />
                   <el-input
@@ -240,6 +246,7 @@
                     size="mini"
                     type="number"
                     placeholder="下限"
+                    :disabled="!isAllowEditLimit"
                     v-model="tableData[rightIndex].MinData"
                   />
                 </div>
@@ -251,6 +258,7 @@
                     size="mini"
                     type="number"
                     placeholder="上限"
+                    :disabled="!isAllowEditLimit"
                     v-model="tableData[rightTwoIndex].MaxData"
                   />
                   <el-input
@@ -258,6 +266,7 @@
                     size="mini"
                     type="number"
                     placeholder="下限"
+                    :disabled="!isAllowEditLimit"
                     v-model="tableData[rightTwoIndex].MinData"
                   />
                 </div>
@@ -270,6 +279,7 @@
                       size="mini"
                       type="number"
                       placeholder="上限"
+                      :disabled="!isAllowEditLimit"
                       v-model="chartLimit.max"
                       @change="changeLimit"
                     />
@@ -278,6 +288,7 @@
                       size="mini"
                       type="number"
                       placeholder="下限"
+                      :disabled="!isAllowEditLimit"
                       v-model="chartLimit.min"
                       @change="changeLimit"
                     />
@@ -289,6 +300,7 @@
                       size="mini"
                       type="number"
                       placeholder="下限"
+                      :disabled="!isAllowEditLimit"
                       v-model="chartLimit.x_min"
                       @change="changeLimit"
                     />
@@ -297,6 +309,7 @@
                       size="mini"
                       type="number"
                       placeholder="上限"
+                      :disabled="!isAllowEditLimit"
                       v-model="chartLimit.x_max"
                       @change="changeLimit"
                     />
@@ -441,11 +454,11 @@
                     </el-select>
                   </div>
                   <div class="copy-excel">
-                    <span class="editsty" @click="copyCode(props.row)">
+                    <span class="editsty" @click="copyCode(props.row)" v-if="isAllowCopyData">
                       <i class="el-icon-document-copy" />&nbsp;复制数据</span
                     >
                     <span 
-                      class="editsty" 
+                      class="editsty" v-if="isAllowCheckData"
                       @click="viewTarget(props.row)"
                       style="display:block;margin-top:15px;"
                     >&nbsp;查看数据</span>
@@ -482,10 +495,10 @@
               width="110"
             >
               <template slot-scope="scope">
-                <span class="editsty" @click="copyCode(scope.row)">
+                <span class="editsty" @click="copyCode(scope.row)" v-if="isAllowCopyData">
                   <i class="el-icon-document-copy" />&nbsp;复制数据</span
                 >
-                <span 
+                <span v-if="isAllowCheckData"
                   class="editsty"
                   @click="viewTarget(scope.row)"
                 >查看数据</span>
@@ -612,6 +625,18 @@ export default {
     linkUrl() {
       const LINK_CHART_URL = this.$setting.dynamicOutLinks.ChartViewUrl+'/chartshow';
       return `${LINK_CHART_URL}?code=${this.chartInfo.UniqueCode}&fromType=share?&lang=${this.currentLang}`
+    },
+    //是否允许编辑上下限
+    isAllowEditLimit(){
+        return this.permissionBtn.isShowBtn('myETAPermission','myChart_editLimit')
+    },
+    //是否允许复制数据
+    isAllowCopyData(){
+        return this.permissionBtn.isShowBtn('myETAPermission','myChart_copyData')
+    },
+    //是否允许查看数据
+    isAllowCheckData(){
+        return this.permissionBtn.isShowBtn('myETAPermission','myChart_checkData')
     }
   },
   watch: {
@@ -652,7 +677,7 @@ export default {
 
       /* 查看历史弹窗 */
 			isLookHistory: false,
-			lookEdbId: 0,
+			lookEdbId: 0
     };
   },
   methods: {
@@ -730,33 +755,48 @@ export default {
     /* 设置默认时间选中项 */
     setDefaultDateSelect() {
       this.year_select = this.chartInfo.DateType;
+      this.count_year = this.chartInfo.StartYear;
       this.select_date = [this.chartInfo.StartDate, this.chartInfo.EndDate];
       this.calendar_type = this.chartInfo.Calendar; //日历类型
-      this.season_year = [
-        this.chartInfo.SeasonStartDate,
-        this.chartInfo.SeasonEndDate,
-      ];
+
+      if(this.chartInfo.ChartType==2){
+        if(this.year_select==20){
+          let latestYear = parseInt(this.tableData[0].LatestDate.substring(0,4))
+          this.season_year=[`${latestYear-this.count_year+1}-01-01`,`${latestYear}-12-31`]
+        }else if(this.year_select==6){
+          this.season_year = [this.chartInfo.SeasonStartDate,this.tableData[0].LatestDate];
+        }else{
+          this.season_year = [this.chartInfo.SeasonStartDate,this.chartInfo.SeasonEndDate]
+        }
+      }
+
       this.dateTip =
         this.chartInfo.DateType === 5
           ? `${this.chartInfo.StartDate}~${this.chartInfo.EndDate}`
           : this.chartInfo.DateType === 6
           ? `${this.chartInfo.StartDate}~至今`
-          : '请选择时间段';
+          : this.chartInfo.DateType === 20
+          ?`最近${this.chartInfo.StartYear}年`
+          :'请选择时间段';
+
     },
 
     /* 曲线图筛选项发生变化时 非配置项 获取新的图表数据 */
    async getPreviewChartInfo() {
-
+      let dateArray=this.chartInfo.ChartType==2?this.season_year:this.select_date
       let params = {
         ChartType: this.chartInfo.ChartType,
         DateType: this.year_select,
-        StartDate: [5, 6].includes(this.year_select)
-          ? this.select_date[0]
+        StartDate: [5 , 6].includes(this.year_select)
+          ? dateArray[0]
           : '',
-        EndDate: this.year_select === 5 ? this.select_date[1] : '',
+        EndDate: this.year_select === 5 ? dateArray[1] : '',
         Calendar: this.calendar_type,
-        SeasonStartDate: this.season_year ? this.season_year[0] : '',
-        SeasonEndDate: this.season_year ? this.season_year[1] : '',
+        //ETA1.0.5 去除了这两个入参
+        // SeasonStartDate: this.season_year ? this.season_year[0] : '',
+        // SeasonEndDate: this.season_year ? this.season_year[1] : '',
+        SeasonExtraConfig:this.SeasonExtraConfig,
+        StartYear:this.count_year || 0,
         ChartEdbInfoList: this.tableData.map(_ => ({
           EdbInfoId: _.EdbInfoId,
           EdbInfoType: _.EdbInfoType,
@@ -781,13 +821,16 @@ export default {
     /* 打开时间段弹窗 */
     openDateDia() {
       // 自定义时间段回显
+      let selectDateStart = this.chartInfo.ChartType === 2?this.season_year[0]:this.select_date[0]
+			let selectDateEnd = this.chartInfo.ChartType === 2?this.season_year[1]:this.select_date[1]
       this.dateForm = {
         date_type: this.year_select,
         start_date:
           this.year_select === 5 || this.year_select === 6
-            ? this.select_date[0]
+            ? selectDateStart
             : '',
-        end_date: this.year_select === 5 ? this.select_date[1] : '',
+        end_date: this.year_select === 5 ? selectDateEnd : '',
+        count_year: this.year_select === 20 ? this.count_year : ''
       };
       this.isDateDia = true;
     },
@@ -797,19 +840,33 @@ export default {
       this.year_select = data.dateType;
       this.isDateDia = false;
       this.select_date = [data.start_date, data.end_date];
-
+      this.count_year = data.count_year
+      
       this.dateTip =
-        data.dateType === 5
+          data.dateType === 5
           ? `${data.start_date}~${data.end_date}`
-          : `${data.start_date}~至今`;
-
-      this.saveNowOptions();
+          : data.dateType === 6
+					?`${data.start_date}~至今`
+					:`最近${this.count_year}年`
+      if(this.chartInfo.ChartType === 2){
+				let latestYear = parseInt(this.tableData[0].LatestDate.substring(0,4))
+				let dateStart = data.start_date
+				let dateEnd = data.end_date
+				if(data.dateType==20){
+					dateStart = `${latestYear-this.count_year+1}-01-01`
+					dateEnd = `${latestYear}-12-31`
+				}else if(data.dateType==6){
+					dateEnd = this.tableData[0].LatestDate
+				}
+				this.season_year = [dateStart, dateEnd];
+			}
+      // this.saveNowOptions();
       this.getPreviewChartInfo();
     },
 
     /* 季节图切换年份  保持当前配置 */
     seasonYearChange() {
-      this.saveNowOptions();
+      // this.saveNowOptions();
       this.getPreviewChartInfo();
     },
 
@@ -820,7 +877,7 @@ export default {
       this.dateTip = '请选择时间段';
   
       //保存表格配置和上下限 曲线图需要保存表格配置
-      this.saveNowOptions();
+      // this.saveNowOptions();
       this.getPreviewChartInfo();
     },
 
@@ -1055,8 +1112,10 @@ export default {
           typeChartParam = {
             ...public_param,
             Calendar: this.calendar_type,
-            SeasonStartDate: this.season_year ? this.season_year[0] : '',
-            SeasonEndDate: this.season_year ? this.season_year[1] : '',
+            DateType: this.year_select,
+            StartYear:this.count_year || 0,
+            StartDate: this.season_year ? this.season_year[0] : '',
+            EndDate: this.season_year ? this.season_year[1] : '',
           }
           break
         case 7:
@@ -1085,6 +1144,7 @@ export default {
         ? {
             ...public_param,
             DateType: this.year_select,
+            StartYear:this.count_year || 0,
             StartDate:
               this.year_select === 5 || this.year_select === 6
                 ? this.select_date[0]
@@ -1325,6 +1385,13 @@ export default {
   $normal_height: 650px;
   $mini_height: 550px;
 
+  .date-setting{
+    border: 1px solid #DCDFE6;
+    border-radius: 4px;
+    cursor: pointer;
+    color: #333333;
+    line-height: 16px;
+  }
   @media screen and (max-width: 1710px) {
 
     /* transform: scale(0.8);
@@ -1357,6 +1424,11 @@ export default {
     .btn-sty {
       padding: 8px;
     }
+    .date-setting{
+				width: 180px;
+				padding: 10px;
+				font-size: 12px;
+			}
   }
   @media screen and (min-width: 1711px) {
     .year-btn,.btn-sty,.top-right {
@@ -1371,6 +1443,15 @@ export default {
     .btn-sty {
       padding: 10px;
     }
+    .date-setting{
+      width: 210px;
+      padding: 10px;
+      border: 1px solid #DCDFE6;
+      border-radius: 4px;
+      cursor: pointer;
+      font-size: 14px;
+      color: #333333;
+    }
     .el-table__expanded-cell {
       padding: 20px 26px;
     }

+ 23 - 7
src/views/mychart_manage/index.vue

@@ -64,7 +64,7 @@
               </span>
              
               <div class="right-item right-item-box" >
-                <el-dropdown @command="handleCommand" trigger="click">
+                <el-dropdown @command="handleCommand" trigger="click" v-if="isShowDropPublic">
                   <span class="el-dropdown-link"> 
                     <i class="el-icon-more" style="font-size: 16px;transform: rotate(90deg);cursor: pointer"/>
                   </span>
@@ -106,7 +106,8 @@
                 {{ item.MyChartClassifyName }}
               </div>
               <div class="right-item right-item-box">
-                <el-dropdown style="margin-right: 10px" @command="handleCommand" trigger="click">
+                <el-dropdown v-if="isShowGroupBtn"
+                    style="margin-right: 10px" @command="handleCommand" trigger="click">
                   <span class="el-dropdown-link  el-dropdown-link-img">
                     <!-- <i class="el-icon-user" style="font-size: 16px; cursor: pointer"/> -->
                      <img src="~@/assets/img/chart_m/Group.png" v-if="item.IsPublic === 0">
@@ -131,20 +132,22 @@
                     所有人可见</el-dropdown-item>
                   </el-dropdown-menu>
                 </el-dropdown>
-                <el-dropdown @command="handleCommand" trigger="click">
+                <el-dropdown @command="handleCommand" trigger="click" v-if="isShowDropMine">
                   <span class="el-dropdown-link"> 
                     <i class="el-icon-more" style="font-size: 16px;transform: rotate(90deg);cursor: pointer"/>
                   </span>
                   <el-dropdown-menu slot="dropdown">
-                    <el-dropdown-item :command="{key:'edit'}">重命名</el-dropdown-item>
-                    <el-dropdown-item :command="{key:'del'}">删除</el-dropdown-item>
+                    <el-dropdown-item v-if="permissionBtn.isShowBtn('myETAPermission','myChart_classifyOpt_rename')"
+                        :command="{key:'edit'}">重命名</el-dropdown-item>
+                    <el-dropdown-item v-if="permissionBtn.isShowBtn('myETAPermission','myChart_classifyOpt_delete')"
+                        :command="{key:'del'}">删除</el-dropdown-item>
                   </el-dropdown-menu>
                 </el-dropdown>
               </div>
             </li>
           </draggable>
         </div>
-        <div class="noclassify" @click="addClassify">
+        <div class="noclassify" @click="addClassify" v-permission="permissionBtn.myETAPermission.myChart_classifyOpt_edit">
           <img
             src="~@/assets/img/set_m/add_ico.png"
             alt=""
@@ -320,7 +323,7 @@ export default {
       classifyList: [],
       total: 0,
       page_no: 1,
-      page_size: 12,
+      page_size: 1200,
       chartList: [], //列表
       isRightClick: false, //右击弹窗
       rightClick_classify: '', //右击的分类
@@ -379,6 +382,19 @@ export default {
       let id = Number(localStorage.getItem('AdminId'));
       return id;
     },
+    //是否显示公共图库的下拉按钮
+    isShowDropPublic(){
+        return this.permissionBtn.isShowBtn('myETAPermission','myChart_classifyOpt_copy')
+    },
+    //是否显示我的图库的下拉按钮
+    isShowDropMine(){
+        return this.permissionBtn.isShowBtn('myETAPermission','myChart_classifyOpt_rename')
+            || this.permissionBtn.isShowBtn('myETAPermission','myChart_classifyOpt_delete')
+    },
+    //是否显示可见权限
+    isShowGroupBtn(){
+        return this.permissionBtn.isShowBtn('myETAPermission','myChart_classifyOpt_show')
+    }
   },
   watch: {
     // 左侧选中分类

+ 100 - 97
src/views/ppt_manage/mixins/mixins.js

@@ -334,6 +334,12 @@ export default {
     setSeasonChart() {
       /* 季节性图的图表配置 */
       const chartData = this.dataList[0];
+
+
+      // 农历数据需要去除第一项 在ETA1.0.5之后,除了这里 农历和公历处理逻辑一样
+      const chartDataHandle=this.calendar_type === '农历'?
+      chartData.DataList.filter((item, index) => index > 0):
+      chartData.DataList
       let seasonYdata = [],
         seasonData = [],
         chart = {
@@ -341,8 +347,8 @@ export default {
         };
 
       /* 公历数据处理 处理数据列 y轴 */
-      if (this.chartInfo.Calendar === '公历')
-        for (let j of chartData.DataList) {
+      // if (this.chartInfo.Calendar === '公历')
+        for (let j of chartDataHandle) {
            //预测指标配置
           let predict_params =  chartData.EdbInfoCategoryType === 1 ? this.getSeasonPredictParams(j.CuttingDataTimestamp) : {};
 
@@ -350,7 +356,7 @@ export default {
             data: [],
             type: chartData.ChartStyle,
             yAxis: 0,
-            name: j.Year,
+            name: j.ChartLegend,
             ...predict_params
           };
           const data_array = _.cloneDeep(j.DataList);
@@ -358,8 +364,8 @@ export default {
             data_array.forEach((item) => {
               serie_item.data.push([item.DataTimestamp, item.Value]);
             });
-          const index = chartData.DataList.findIndex(
-            (item) => item.Year === j.Year
+          const index = chartDataHandle.findIndex(
+            (item) => item.ChartLegend === j.ChartLegend
           );
           const s_yItem = {
             title: {
@@ -392,58 +398,58 @@ export default {
         }
 
       /* 农历数据处理  */
-      let filterArr =
-        this.chartInfo.Calendar === '农历'
-          ? chartData.DataList.List.filter((item, index) => index > 0)
-          : [];
-      if (this.chartInfo.Calendar === '农历')
-        for (let j of filterArr) {
-           //预测指标配置
-          let predict_params =  chartData.EdbInfoCategoryType === 1 ? this.getSeasonPredictParams(j.CuttingDataTimestamp) : {};
+      // let filterArr =
+      //   this.chartInfo.Calendar === '农历'
+      //     ? chartData.DataList.List.filter((item, index) => index > 0)
+      //     : [];
+      // if (this.chartInfo.Calendar === '农历')
+      //   for (let j of filterArr) {
+      //      //预测指标配置
+      //     let predict_params =  chartData.EdbInfoCategoryType === 1 ? this.getSeasonPredictParams(j.CuttingDataTimestamp) : {};
           
-          let serie_item = {
-            data: [],
-            type: chartData.ChartStyle,
-            yAxis: 0,
-            name: j.Year,
-            ...predict_params
-          };
-          const data_array = _.cloneDeep(j.Items);
-          data_array &&
-            data_array.forEach((item) => {
-              serie_item.data.push([item.DataTimestamp, item.Value]);
-            });
-          const index = filterArr.findIndex((item) => item.Year === j.Year);
-
-          const s_yItem = {
-            title: {
-              text:  `${chartData.Unit}`,
-              textCh:chartData.Unit,
-              textEn:chartData.Unit?chartData.UnitEn:'',
-              // text: null,
-              align: 'high',
-              rotation: 0,
-              y: -15,
-              offset: -(12 * chartData.Unit.length),
-            },
-            labels: {
-              formatter: function (ctx) {
-                let val = ctx.value;
-                return index !== 0 ? '' : val;
-              },
-              align: 'center',
-              style: {
-                fontSize: '10px',
-              },
-              x: -5,
-            },
-            max: Number(chartData.MaxData),
-            min: Number(chartData.MinData),
-            ...seasonOptions.yAxis,
-          };
-          seasonData.push(serie_item);
-          seasonYdata.push(s_yItem);
-        }
+      //     let serie_item = {
+      //       data: [],
+      //       type: chartData.ChartStyle,
+      //       yAxis: 0,
+      //       name: j.Year,
+      //       ...predict_params
+      //     };
+      //     const data_array = _.cloneDeep(j.Items);
+      //     data_array &&
+      //       data_array.forEach((item) => {
+      //         serie_item.data.push([item.DataTimestamp, item.Value]);
+      //       });
+      //     const index = filterArr.findIndex((item) => item.Year === j.Year);
+
+      //     const s_yItem = {
+      //       title: {
+      //         text:  `${chartData.Unit}`,
+      //         textCh:chartData.Unit,
+      //         textEn:chartData.Unit?chartData.UnitEn:'',
+      //         // text: null,
+      //         align: 'high',
+      //         rotation: 0,
+      //         y: -15,
+      //         offset: -(12 * chartData.Unit.length),
+      //       },
+      //       labels: {
+      //         formatter: function (ctx) {
+      //           let val = ctx.value;
+      //           return index !== 0 ? '' : val;
+      //         },
+      //         align: 'center',
+      //         style: {
+      //           fontSize: '10px',
+      //         },
+      //         x: -5,
+      //       },
+      //       max: Number(chartData.MaxData),
+      //       min: Number(chartData.MinData),
+      //       ...seasonOptions.yAxis,
+      //     };
+      //     seasonData.push(serie_item);
+      //     seasonYdata.push(s_yItem);
+      //   }
 
       // 季节图x轴显示月/日 周度指标额外处理时间轴显示
       const xAxis = {
@@ -474,52 +480,49 @@ export default {
       };
 
       //农历默认选中一年数据并隐藏按钮  公历显示全部数据
-      let rangeSelector =
-        this.chartInfo.Calendar === '农历'
-          ? {
-              enabled: true,
-              selected: 0,
-              inputStyle: {
-                display: 'none',
-              },
-              labelStyle: {
-                display: 'none',
-              },
-              buttonTheme: {
-                style: {
-                  display: 'none',
-                },
-              },
-              buttons: [
-                {
-                  type: 'month',
-                  count: 12,
-                  text: '12月',
-                },
-                {
-                  type: 'month',
-                  count: 15,
-                  text: '15月',
-                },
-                {
-                  type: 'all',
-                  text: '全部',
-                },
-              ],
-            }
-          : {
-              enabled: false,
-            };
+      // let rangeSelector =
+      //   this.chartInfo.Calendar === '农历'
+      //     ? {
+      //         enabled: true,
+      //         selected: 0,
+      //         inputStyle: {
+      //           display: 'none',
+      //         },
+      //         labelStyle: {
+      //           display: 'none',
+      //         },
+      //         buttonTheme: {
+      //           style: {
+      //             display: 'none',
+      //           },
+      //         },
+      //         buttons: [
+      //           {
+      //             type: 'month',
+      //             count: 12,
+      //             text: '12月',
+      //           },
+      //           {
+      //             type: 'month',
+      //             count: 15,
+      //             text: '15月',
+      //           },
+      //           {
+      //             type: 'all',
+      //             text: '全部',
+      //           },
+      //         ],
+      //       }
+      //     : {
+      //         enabled: false,
+      //       };
 
       this.options = {
-        colors:
-          this.chartInfo.Calendar === '公历'
-            ? seasonOptions.colors.slice(-chartData.DataList.length)
-            : seasonOptions.colors.slice(-filterArr.length),
+        colors:seasonOptions.colors.slice(-chartDataHandle.length),
         series: seasonData,
         yAxis: seasonYdata,
         xAxis,
-        rangeSelector
+        // rangeSelector
       };
     },
 

+ 2 - 2
src/views/ppt_manage/newVersion/components/Cover.vue

@@ -5,7 +5,7 @@
         <img :src="pageInfo.BackgroundImg" class="pptbg"  style="width:100%"/>
         <div
         style="width:62%; font-size:16px; text-align:center; line-height:1.6;  position:absolute; right:20px; top:50%;zIndex:20;">
-        <p :style="`height:5px; border-top:1px solid ${$parent.pptCoverTextColor||'#fff'};marginBottom:21px;`"></p>
+        <p :style="`height:5px; marginBottom:21px;`"></p>
         <p style="font-size:28px;">{{ pageInfo.Title }}</p>
         <p style="display:flex; align-items:center; justify-content:center;margin:10px 0;">
             <span :style="`display:inline-block; width:15px; margin-right:5px; border-top:1px solid ${$parent.pptCoverTextColor||'#fff'};`"></span>
@@ -17,7 +17,7 @@
         </p>
         <p :style="{'color':$parent.pptCoverTextColor||''}">{{$parent.pptCoverDepartName||'投研部'}}</p>
         <p>{{pageInfo.PptDate}}</p>
-        <p :style="`width:80%; height:1px; border-bottom:1px solid ${$parent.pptCoverTextColor||'#fff'}; margin:21px auto 0;`"></p>
+        <p :style="`width:80%; height:1px; margin:21px auto 0;`"></p>
         </div>
     </div>
 </template>

+ 2 - 2
src/views/ppt_manage/newVersion/components/CoverEn.vue

@@ -3,7 +3,7 @@
         <img :src="pageInfo.BackgroundImg" class="pptbg"  style="width:100%"/>
         <div
         :style="`width:62%; font-size:16px; text-align:center; line-height:1.6; color:${$parent.pptCoverTextColor||'#fff'}; position:absolute; right:20px; top:50%;zIndex:20;`">
-        <p :style="`height:5px; border-top:1px solid ${$parent.pptCoverTextColor||'#fff'};marginBottom:21px;`"></p>
+        <p :style="`height:5px;marginBottom:21px;`"></p>
         <p style="font-size:28px;">{{ pageInfo.Title }}</p>
         <p style="display:flex; align-items:center; justify-content:center;margin:10px 0;">
             <span :style="{'color':$parent.pptCoverTextColor||'#fff'}">{{$parent.pptCoverCompenyName||'ETA'}}</span>
@@ -15,7 +15,7 @@
         </p>
         <p :style="{'color':$parent.pptCoverTextColor||'#fff'}">{{$parent.pptCoverDepartName||'Research Department'}}</p>
         <p>{{pageInfo.PptDate}}</p>
-        <p :style="`width:80%; height:1px; border-bottom:1px solid ${$parent.pptCoverTextColor||'#fff'}; margin:21px auto 0;`"></p>
+        <p :style="`width:80%; height:1px; margin:21px auto 0;`"></p>
         </div>
     </div>
 </template>

+ 2 - 2
src/views/ppt_manage/newVersion/components/catalog/pptContent.vue

@@ -5,10 +5,10 @@
       <template  v-for="(item,index) in loadArr">
           <div class="ppt-item" id="cover" v-if="index===0" :key="item.id">
             <Cover :pageInfo="firstPage" v-show="firstPage"></Cover>
-            <div class="ppt-info">
+            <!-- <div class="ppt-info">
               <p>作者:{{pptItem.AdminRealName}}</p>
               <p>{{pptItem.PptxUrl?'发布':'保存'}}时间:{{$moment(pptTime).format('YYYY-MM-DD')}}</p>
-            </div>
+            </div> -->
           </div>
           <div class="ppt-item" id="back" v-else-if="isLoadBack&&item.name==='back'&&pptBackImage.length" :key="item.id">
             <img :src="pptBackImage" class="pptbg" />

+ 9 - 9
src/views/ppt_manage/newVersion/components/catalog/pptContentEn.vue

@@ -4,10 +4,10 @@
       <template  v-for="(item,index) in loadArr">
           <div class="ppt-item" id="cover" v-if="index===0" :key="item.id">
             <Cover :pageInfo="firstPage" v-show="firstPage"></Cover>
-            <div class="ppt-info">
+            <!-- <div class="ppt-info">
               <p>作者:{{pptItem.AdminRealName}}</p>
               <p>{{pptItem.PptxUrl?'发布':'保存'}}时间:{{$moment(pptTime).format('YYYY-MM-DD')}}</p>
-            </div>
+            </div> -->
           </div>
           <div class="ppt-item" id="back" v-else-if="isLoadBack&&item.name==='back'&&pptBackImage.length" :key="item.id">
             <img :src="pptBackImage" class="pptbg" style="width:100%;height:100%;object-fit: fill !important;"/>
@@ -320,13 +320,13 @@ export default {
       background-size: 100% 104.5%;
       margin-bottom: 20px;
       border: 4px solid transparent;
-      .ppt-info{
-        position:absolute;
-        top:10px;
-        right:15px;
-        color: #fff;
-        font-size: 14px;
-      }
+      // .ppt-info{
+      //   position:absolute;
+      //   top:10px;
+      //   right:15px;
+      //   color: #fff;
+      //   font-size: 14px;
+      // }
       .page-num{
         color:#666666;
         position:absolute;

+ 20 - 5
src/views/ppt_manage/newVersion/components/editor/ChooseCover.vue

@@ -7,7 +7,7 @@
             </header>
             <div class="dialog-bg" :style="'backgroundImage:url('+bgList[bgListIndex]+');backgroundPosition:center;backgroundRepeat:no-repeat;backgroundSize:cover;'">
                 <div :style="`width:62%; font-size:16px; text-align:center; line-height:1.6; color:${$parent.pptCoverTextColor}; position:absolute; right:20px; top:50%;`">
-                    <p :style="`height:5px; border-top:1px solid ${$parent.pptCoverTextColor};margin-bottom:21px;`"></p>
+                    <p :style="`height:5px;margin-bottom:21px;`"></p>
                     <el-input
                       :data-textcolor="$parent.pptCoverTextColor"
                       type="textarea"
@@ -36,7 +36,7 @@
                         value-format="yyyy年M月"
                         placeholder="请选择日期">
                     </el-date-picker>
-                    <p :style="`width:80%; height:1px; border-bottom:1px solid ${$parent.pptCoverTextColor}; margin:21px auto 0;`"></p>
+                    <p :style="`width:80%; height:1px; margin:21px auto 0;`"></p>
                 </div>
             </div>
             <div class="dialog-bot">
@@ -52,6 +52,8 @@
 
 <script>
 import {pptCover} from "@/views/ppt_manage/newVersion/utils/config"
+import {pptInterface} from '@/api/api.js';
+
 export default {
     props:{
         firstPage:{
@@ -59,6 +61,9 @@ export default {
         },
         pptCoverList:{
             type:Array
+        },
+        PptId:{
+            type:Number
         }
     },
     data() {
@@ -87,7 +92,13 @@ export default {
         closeDialog(){
             //如果之前配置的图片不在pptCoverList里 用保存强制替换封面图
             if(this.searchIndex===-1){
-                this.firstPage = Object.assign(this.firstPage,this.pageData)
+                this.firstPage = Object.assign(
+                    this.firstPage,
+                    {
+                        BackgroundImg:this.pageData.BackgroundImg,
+                        ImgUrl:this.pageData.ImgUrl,
+                        BackIndex:this.pageData.BackIndex,
+                    })
                 this.$emit('save',this.firstPage)
             }
             this.$emit('close')
@@ -103,8 +114,12 @@ export default {
                 this.$message.warning('请选择日期')
                 return
             }
-            this.firstPage = Object.assign(this.firstPage,this.pageData)
-            this.$emit('save',this.firstPage)
+            pptInterface.pptTitleCheck({PptId:this.$route.query.id || this.PptId ||0,Title:this.pageData.Title}).then(res=>{
+                if(res.Ret == 200){
+                    this.firstPage = Object.assign(this.firstPage,this.pageData)
+                    this.$emit('save',this.firstPage)
+                }
+            })
         },
         changeBg(){
             if(this.bgListIndex<this.bgList.length-1){

+ 22 - 7
src/views/ppt_manage/newVersion/components/editor/ChooseCoverEn.vue

@@ -7,7 +7,7 @@
             </header>
             <div class="dialog-bg" :style="'backgroundImage:url('+bgList[bgListIndex]+');backgroundPosition:center;backgroundRepeat:no-repeat;backgroundSize:cover;'">
                 <div :style="`width:62%; font-size:16px; text-align:center; line-height:1.6; color:${$parent.pptCoverTextColor||'#fff'}; position:absolute; right:20px; top:50%;`">
-                    <p :style="`height:5px; border-top:1px solid ${$parent.pptCoverTextColor||'#fff'};margin-bottom:21px;`"></p>
+                    <p :style="`height:5px; margin-bottom:21px;`"></p>
                     <el-input
                       :data-textcolor="$parent.pptCoverTextColor"
                       type="textarea"
@@ -37,7 +37,7 @@
                         value-format="yyyy.MM"
                         placeholder="请选择日期">
                     </el-date-picker>
-                    <p :style="`width:80%; height:1px; border-bottom:1px solid ${$parent.pptCoverTextColor||'#fff'}; margin:21px auto 0;`"></p>
+                    <p :style="`width:80%; height:1px; margin:21px auto 0;`"></p>
                 </div>
             </div>
             <div class="dialog-bot">
@@ -53,6 +53,8 @@
 
 <script>
 import {pptCoverEn} from "@/views/ppt_manage/newVersion/utils/config"
+import {pptEnInterface} from '@/api/modules/pptEnApi.js';
+
 export default {
     props:{
         firstPage:{
@@ -60,6 +62,9 @@ export default {
         },
         pptCoverList:{
             type:Array
+        },
+        PptId:{
+            type:Number
         }
     },
     data() {
@@ -88,7 +93,13 @@ export default {
         closeDialog(){
             //如果之前配置的图片不在pptCoverList里 用保存强制替换封面图
             if(this.searchIndex===-1){
-                this.firstPage = Object.assign(this.firstPage,this.pageData)
+                this.firstPage = Object.assign(
+                    this.firstPage,
+                    {
+                        BackgroundImg:this.pageData.BackgroundImg,
+                        ImgUrl:this.pageData.ImgUrl,
+                        BackIndex:this.pageData.BackIndex,
+                    })
                 this.$emit('save',this.firstPage)
             }
             this.$emit('close')
@@ -104,10 +115,14 @@ export default {
                 this.$message.warning('请选择日期')
                 return
             }
-            //格式化PptDate
-            //this.pageData.PptDate = this.$moment(new Date(this.pageData.PptDate)).format("YYYY.MM")
-            this.firstPage = Object.assign(this.firstPage,this.pageData)
-            this.$emit('save',this.firstPage)
+            pptEnInterface.pptTitleCheck({PptId:this.$route.query.id || this.PptId || 0,Title:this.pageData.Title}).then(res=>{
+                if(res.Ret == 200){
+                    //格式化PptDate
+                    //this.pageData.PptDate = this.$moment(new Date(this.pageData.PptDate)).format("YYYY.MM")
+                    this.firstPage = Object.assign(this.firstPage,this.pageData)
+                    this.$emit('save',this.firstPage)
+                }
+            })
         },
         changeBg(){
             if(this.bgListIndex<this.bgList.length-1){

+ 51 - 29
src/views/ppt_manage/newVersion/pptCatalog.vue

@@ -99,7 +99,7 @@
                 <span
                   style="display: flex; align-items: center"
                 >
-                <el-dropdown @command="handleShareCommand" v-if="data.PptVersion">
+                <el-dropdown @command="handleShareCommand" v-if="data.PptVersion&&permissionBtn.isShowBtn('pptPermission','ppt_visible')">
                   <img
                     :src="data.isShare===1?require('@/assets/img/chart_m/User.png'):require('@/assets/img/chart_m/Group.png')"
                     style="width: 14px; height: 14px; margin-right: 8px"
@@ -134,8 +134,8 @@
                         :command="{key:'edit',item:data}" v-if="data.GroupId">重命名</el-dropdown-item>
                     <el-dropdown-item v-permission="permissionBtn.pptPermission.ppt_del"
                         :command="{key:'del',item:data}">删除</el-dropdown-item>
-                    <el-dropdown-item :command="{key:'openShare',item:data}" v-if="data.PptVersion && !data.IsGrant">设置共享</el-dropdown-item>
-                    <el-dropdown-item :command="{key:'cancelShare',item:data}" v-if="data.PptVersion && data.IsGrant">取消共享</el-dropdown-item>
+                    <el-dropdown-item :command="{key:'openShare',item:data}" v-if="data.PptVersion && !data.IsGrant && permissionBtn.isShowBtn('pptPermission','ppt_setShare')">设置共享</el-dropdown-item>
+                    <el-dropdown-item :command="{key:'cancelShare',item:data}" v-if="data.PptVersion && data.IsGrant && permissionBtn.isShowBtn('pptPermission','ppt_setShare')">取消共享</el-dropdown-item>
                     <el-dropdown-item v-permission="permissionBtn.pptPermission.ppt_toEn"
                         :command="{key:'transform',item:data}">转英文PPT</el-dropdown-item>
                   </el-dropdown-menu>
@@ -177,7 +177,7 @@
           </div>
         </div>
 
-        <div class="add-ppt" @click="handleCatalogChange({})">
+        <div class="add-ppt" @click="handleCatalogChange({})" v-if="permissionBtn.isShowBtn('pptPermission','ppt_addCatalog')">
           <img
             src="~@/assets/img/set_m/add_ico.png"
             alt=""
@@ -221,7 +221,8 @@
                 />
               </div>
               <div style="height:1px;background:#ECECEC;margin:0 -10px;"></div>
-              <div class="item-image">
+              <div class="item-image" 
+              :style="item.BackgroundImg?{background: `no-repeat top/cover url('${item.BackgroundImg}')`}:{}">
                 <span>{{item.Title}}</span>
               </div>
               <span style="font-size:14px;">创建时间:{{$moment(item.PptCreateTime).format('YYYY-MM-DD')}}</span>
@@ -246,13 +247,19 @@
           ></ppt-content-old>
         </div>
         <div class="tool-side ppt-page-wrap">
-          <span>操作</span>
-          <div class="tool-list">
-            <span v-for="item in pptToolList" :key="item.key" 
-              :class="{'delete':item.key==='delete'}"
-              @click="handleToolClick(item)">
-              {{item.label}}
-            </span>
+          <div class="ppt-info">
+            <div>作者:{{pptItem.AdminRealName}}</div>
+            <div>{{pptItem.PptxUrl?'发布':'保存'}}时间:{{$moment(pptTime).format('YYYY-MM-DD')}}</div>
+          </div>
+          <div class="tool-list-operation">
+            <span>操作</span>
+            <div class="tool-list">
+              <span v-for="item in pptToolList" :key="item.key" 
+                :class="{'delete':item.key==='delete'}"
+                @click="handleToolClick(item)">
+                {{item.label}}
+              </span>
+            </div>
           </div>
         </div>
       </div>
@@ -1255,8 +1262,12 @@ export default {
                    checkPermissionBtn(pptPermission.ppt_del)||
                    checkPermissionBtn(pptPermission.ppt_toEn)
         }
-        //如果是PPT,会有设置共享按钮,下拉框至少会有一个选项
-        return true
+        if(type==='ppt'){
+            return  checkPermissionBtn(pptPermission.ppt_copy)||
+                    checkPermissionBtn(pptPermission.ppt_del)||
+                    checkPermissionBtn(pptPermission.ppt_setShare)||
+                    checkPermissionBtn(pptPermission.ppt_toEn)
+        }
     },
   },
   mounted(){
@@ -1514,28 +1525,39 @@ export default {
         width:180px;
         background-color: white;
         height: calc(100vh - 120px);
-        padding:20px;
-        overflow-y: scroll;
+        // padding:20px;
+        // overflow-y: scroll;
         border-left: 1px solid #eaeaea;
         &::-webkit-scrollbar-track{
           display: none;
         }
-        .tool-list{
-          margin-top: 20px;
-          display: flex;
-          flex-direction: column;
-          align-items: center;
-          span{
-            cursor: pointer;
-            color:#409eff;
-            display: inline-block;
-            height: 35px;
-            line-height: 35px;
-            &.delete{
-              color: red;
+        .ppt-info{
+          font-size: 14px;
+          color: rgba($color: #000000, $alpha: 0.54);
+          margin-bottom: 5px;
+          padding: 16px 12px;
+          border-bottom: 2px solid rgba($color: #333333, $alpha: 0.03);
+        }
+        .tool-list-operation{
+          padding: 0 20px 20px;
+          .tool-list{
+            margin-top: 20px;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            span{
+              cursor: pointer;
+              color:#409eff;
+              display: inline-block;
+              height: 35px;
+              line-height: 35px;
+              &.delete{
+                color: red;
+              }
             }
           }
         }
+
       }
     }
   }

+ 1 - 0
src/views/ppt_manage/newVersion/pptEditor.vue

@@ -227,6 +227,7 @@
     <choose-cover  v-if="isShowChooseCover"
         :firstPage="firstPage"
         :pptCoverList="pptCoverList"
+        :PptId="pptId"
         @close="closeChooseCover"
         @save="saveCover"
     />

+ 49 - 29
src/views/ppt_manage/newVersion/pptEnCatalog.vue

@@ -96,7 +96,7 @@
                 <span
                   style="display: flex; align-items: center"
                 >
-                <el-dropdown @command="handleShareCommand" v-if="data.PptId">
+                <el-dropdown @command="handleShareCommand" v-if="data.PptId&&permissionBtn.isShowBtn('enPPTPermission','pptEn_visible')">
                   <img
                     :src="data.isShare===1?require('@/assets/img/chart_m/User.png'):require('@/assets/img/chart_m/Group.png')"
                     style="width: 14px; height: 14px; margin-right: 8px"
@@ -131,8 +131,8 @@
                         :command="{key:'edit',item:data}" v-if="data.GroupId">重命名</el-dropdown-item>
                     <el-dropdown-item v-permission="permissionBtn.enPPTPermission.pptEn_del"
                         :command="{key:'del',item:data}">删除</el-dropdown-item>
-                    <el-dropdown-item :command="{key:'openShare',item:data}" v-if="data.PptId && !data.IsGrant">设置共享</el-dropdown-item>
-                    <el-dropdown-item :command="{key:'cancelShare',item:data}" v-if="data.PptId && data.IsGrant">取消共享</el-dropdown-item>
+                    <el-dropdown-item :command="{key:'openShare',item:data}" v-if="data.PptId && !data.IsGrant && permissionBtn.isShowBtn('enPPTPermission','pptEn_setShare')">设置共享</el-dropdown-item>
+                    <el-dropdown-item :command="{key:'cancelShare',item:data}" v-if="data.PptId && data.IsGrant && permissionBtn.isShowBtn('enPPTPermission','pptEn_setShare')">取消共享</el-dropdown-item>
                   </el-dropdown-menu>
                 </el-dropdown>
                 </span>
@@ -172,7 +172,7 @@
           </div>
         </div>
 
-        <div class="add-ppt" @click="handleCatalogChange({})">
+        <div class="add-ppt" @click="handleCatalogChange({})" v-if="permissionBtn.isShowBtn('enPPTPermission','pptEn_addCatalog')">
           <img
             src="~@/assets/img/set_m/add_ico.png"
             alt=""
@@ -216,7 +216,8 @@
                 />
               </div>
               <div style="height:1px;background:#ECECEC;margin:0 -10px;"></div>
-              <div class="item-image">
+              <div class="item-image" 
+              :style="item.BackgroundImg?{background: `no-repeat top/cover url('${item.BackgroundImg}')`}:{}">
                 <span>{{item.Title}}</span>
               </div>
               <span style="font-size:14px;">创建时间:{{$moment(item.PptCreateTime).format('YYYY-MM-DD')}}</span>
@@ -236,13 +237,19 @@
           ></ppt-content>
         </div>
         <div class="tool-side ppt-page-wrap">
-          <span>操作</span>
-          <div class="tool-list">
-            <span v-for="item in pptToolList" :key="item.key" 
-              :class="{'delete':item.key==='delete'}"
-              @click="handleToolClick(item)">
-              {{item.label}}
-            </span>
+          <div class="ppt-info">
+            <div>作者:{{pptItem.AdminRealName}}</div>
+            <div>{{pptItem.PptxUrl?'发布':'保存'}}时间:{{$moment(pptTime).format('YYYY-MM-DD')}}</div>
+          </div>
+          <div class="tool-list-operation">
+            <span>操作</span>
+            <div class="tool-list">
+              <span v-for="item in pptToolList" :key="item.key" 
+                :class="{'delete':item.key==='delete'}"
+                @click="handleToolClick(item)">
+                {{item.label}}
+              </span>
+            </div>
           </div>
         </div>
       </div>
@@ -1150,8 +1157,11 @@ export default {
                    checkPermissionBtn(enPPTPermission.pptEn_save)||
                    checkPermissionBtn(enPPTPermission.pptEn_del)
         }
-        //如果是PPT,会有设置共享按钮,下拉框至少会有一个选项
-        return true
+        if(type==='ppt'){
+            return checkPermissionBtn(enPPTPermission.pptEn_copy)||
+                   checkPermissionBtn(enPPTPermission.pptEn_del)||
+                   checkPermissionBtn(enPPTPermission.pptEn_setShare)
+        }
     }
   },
   mounted(){
@@ -1404,25 +1414,35 @@ export default {
         width:180px;
         background-color: white;
         height: calc(100vh - 120px);
-        padding:20px;
-        overflow-y: scroll;
+        // padding:20px;
+        // overflow-y: scroll;
         border-left: 1px solid #eaeaea;
         &::-webkit-scrollbar-track{
           display: none;
         }
-        .tool-list{
-          margin-top: 20px;
-          display: flex;
-          flex-direction: column;
-          align-items: center;
-          span{
-            cursor: pointer;
-            color:#409eff;
-            display: inline-block;
-            height: 35px;
-            line-height: 35px;
-            &.delete{
-              color: red;
+        .ppt-info{
+          font-size: 14px;
+          color: rgba($color: #000000, $alpha: 0.54);
+          margin-bottom:5px;
+          padding: 16px 12px;
+          border-bottom: 2px solid rgba($color: #333333, $alpha: 0.03);
+        }
+        .tool-list-operation{
+          padding: 0 20px 20px;
+          .tool-list{
+            margin-top: 20px;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            span{
+              cursor: pointer;
+              color:#409eff;
+              display: inline-block;
+              height: 35px;
+              line-height: 35px;
+              &.delete{
+                color: red;
+              }
             }
           }
         }

+ 1 - 0
src/views/ppt_manage/newVersion/pptEnEditor.vue

@@ -227,6 +227,7 @@
     <choose-cover  v-if="isShowChooseCover"
         :firstPage="firstPage"
         :pptCoverList="pptCoverList"
+        :PptId="pptId"
         @close="closeChooseCover"
         @save="saveCover"
     />

+ 25 - 5
src/views/predictEdb_manage/addPredicEdb.vue

@@ -807,16 +807,36 @@ export default {
           }
         })
 
+      let dateArray=[]
+      let DateType,StartYear;
+      
+      if(this.$refs.chartInfo.chartInfo.ChartType==2){
+          DateType=this.$refs.chartInfo.year_select_season
+          StartYear=this.$refs.chartInfo.count_year_season
+          if(!(this.$refs.chartInfo.season_year && this.$refs.chartInfo.season_year.length>0)){
+              // 初始化日期显示
+              let latestYear = parseInt(this.$refs.chartInfo.tableData[0].LatestDate.substring(0,4))
+              this.$refs.chartInfo.season_year = [`${latestYear-StartYear+1}-01-01`,`${latestYear}-12-31`];
+          }
+          dateArray = this.$refs.chartInfo.season_year
+      }else{
+          DateType=this.$refs.chartInfo.year_select
+          StartYear=this.$refs.chartInfo.count_year
+          dateArray = this.$refs.chartInfo.select_date
+      }
+      
       let params = {
         SourceEdbInfoId: this.formData.oldEdb,
-        DateType: this.$refs.chartInfo.year_select,
-        StartDate: this.$refs.chartInfo.select_date[0] || "",
-        EndDate: this.$refs.chartInfo.select_date[1] || "",
+        DateType,
+        StartDate: dateArray[0] || "",
+        EndDate: dateArray[1] || "",
         Calendar: this.$refs.chartInfo.calendar_type,
         ChartType: this.$refs.chartInfo.chartInfo.ChartType,
-        SeasonStartDate: this.$refs.chartInfo.season_year[0] || "",
-        SeasonEndDate: this.$refs.chartInfo.season_year[1] || "",
+        // ETA1.0.5 去除了这两个参数
+        // SeasonStartDate: this.$refs.chartInfo.season_year[0] || "",
+        // SeasonEndDate: this.$refs.chartInfo.season_year[1] || "",
         DataDateType: this.formData.dateType,
+        StartYear:StartYear || 0
       }
 
       const res = await preDictEdbInterface.edbChartDataForAdd(rules_params.length ? {...params,RuleList: rules_params} : params);

+ 73 - 9
src/views/predictEdb_manage/components/chartInfo.vue

@@ -20,7 +20,7 @@
             >{{dateTip}}</el-button>
             </template>
             <!-- 季节图时间选择 -->
-            <template v-if="chartInfo.ChartType==2">
+            <!-- <template v-if="chartInfo.ChartType==2">
                 <date-picker
                     v-model="season_year"
                     type="month"
@@ -29,7 +29,10 @@
                     placeholder="年份日期选择"
                     @change="seasonYearChange"
                 />
-            </template>
+            </template> -->
+            <div v-else-if="chartInfo.ChartType === 2" @click="openDateDia" class="date-setting" style="display: inline-block;">
+				{{ season_year && season_year.length>0 ? season_year[0]+'~'+season_year[1]:"年份日期选择" }}
+			</div>
             <!-- <span v-permission="permissionBtn.predictEdbPermission.edbPreData_switchSeason"
                 class="change-chart-btn" @click="chartTypeChange">切换{{chartInfo.ChartType==1?'季节性图':'曲线图'}}</span> -->
             <el-button type="primary" size="mini" class="btn-sty" style="margin-left:auto;"
@@ -61,6 +64,7 @@
                     size="mini"
                     type="number"
                     placeholder="上限"
+                    :disabled="!isAllowEditLimit"
                     v-model="tableData[0].MaxData"
                     @change="setChartOptionHandle(tableData)"
                 />
@@ -69,6 +73,7 @@
                     size="mini"
                     type="number"
                     placeholder="下限"
+                    :disabled="!isAllowEditLimit"
                     v-model="tableData[0].MinData"
                     @change="setChartOptionHandle(tableData)"
                 />
@@ -96,7 +101,8 @@ export default {
     mixins: [ chartSetMixin,addOrEditMixn ],
     props:{
         edbData:Object,
-        lang: String
+        lang: String,
+        isAllowEditLimit:Boolean,
     },
     watch:{
         'edbData':{
@@ -112,7 +118,8 @@ export default {
     },
     data() {
         return {
-            year_select: 10, //年份选择项 默认全部
+            year_select: 10, //年份选择项
+            year_select_season: 20, //季节性年份选择项 默认最近五年
             yearSelector: [
                 {
                     name: '全部',
@@ -133,6 +140,9 @@ export default {
             isDateDia: false, // 时间段弹窗
             dateForm: {},
             dateTip: '请选择时间段',
+            count_year:5,
+            count_year_season:5,
+            isPredictorChart:true, // 复用了相同的逻辑,为了预测指标图表和正常的图库图表区分开
         }
     },
     mounted() {
@@ -146,28 +156,71 @@ export default {
                     DataList:this.edbData.DataList
                 }
             ]
-
             this.setAddChartDefault();
             this.setChartOptionHandle(this.tableData)
         },
 
         changeYear(item){
-            this.year_select=item.value
+            this.year_select = item.value
             this.select_date = [];
             this.dateTip = '请选择时间段';
             this.$emit('refreshData','saveLimit')
         },
+		/* 打开时间段弹窗 */
+		openDateDia() {
+			// 自定义时间段回显
+			let selectDateStart = this.chartInfo.ChartType === 2?this.season_year[0]:this.select_date[0]
+			let selectDateEnd = this.chartInfo.ChartType === 2?this.season_year[1]:this.select_date[1]
 
+            let year_select_real = this.chartInfo.ChartType === 2?this.year_select_season:this.year_select
+
+			this.dateForm = {
+				date_type: year_select_real,
+				start_date:
+					year_select_real === 5 || year_select_real === 6
+						? selectDateStart
+						: '',
+				end_date: year_select_real === 5 ? selectDateEnd : '',
+				count_year: year_select_real === 20 ?
+                            this.chartInfo.ChartType === 2?this.count_year_season:this.count_year 
+                            : ''
+			};
+			this.isDateDia = true;
+		},
         /* 保存完自定义日期 刷新数据 保存当前的图表配置和上下限 只改变图表*/
         dataChangeBack(data) {
-            this.year_select = data.dateType;
             this.isDateDia = false;
-            this.select_date = [data.start_date, data.end_date];
+
+            if(this.chartInfo.ChartType==1){
+                this.year_select = data.dateType
+                this.count_year = data.count_year
+            }else{
+                this.year_select_season = data.dateType
+                this.count_year_season = data.count_year
+            }
+            let dateStart = data.start_date
+            let dateEnd = data.end_date
+            let latestYear = parseInt(this.tableData[0].LatestDate.substring(0,4))
+
+			if(this.chartInfo.ChartType === 2){
+                if(data.dateType==20){
+                    dateStart = `${latestYear-data.count_year+1}-01-01`
+                    dateEnd = `${latestYear}-12-31`
+                }else if(data.dateType==6){
+					// 回显
+					dateEnd = this.tableData[0].LatestDate
+				}
+                this.season_year = [dateStart, dateEnd];
+			}
+
+            this.select_date = [dateStart, dateEnd];
 
             this.dateTip =
                 data.dateType === 5
                 ? `${data.start_date}~${data.end_date}`
-                : `${data.start_date}~至今`;
+                : data.dateType === 6
+                ?`${data.start_date}~至今`
+                :`最近${this.count_year}年`
 
             this.$emit('refreshData','saveLimit')
         },
@@ -206,6 +259,17 @@ export default {
             background-color: #fff;
 			color: #0052D9;
         }
+        .date-setting{
+			width: 210px;
+			// height: 40px;
+			padding: 10px;
+			border: 1px solid #DCDFE6;
+			border-radius: 4px;
+			cursor: pointer;
+			font-size: 14px;
+			color: #333333;
+			box-sizing: border-box;
+		}
         .change-chart-btn{
             float: right;
             color: #409eff;

+ 29 - 7
src/views/predictEdb_manage/components/edbDetail.vue

@@ -3,6 +3,7 @@
         <chartInfo
             :edbData="edbData"
             :lang="lang"
+            :isAllowEditLimit="isAllowEditLimit"
             @refreshData="refreshData"
             ref="chartInfo"
         />
@@ -50,7 +51,8 @@ import chartInfo from './chartInfo.vue'
 export default {
     props:{
         id: Number,
-        lang: String
+        lang: String,
+        isAllowEditLimit:Boolean,
     },
     components:{chartInfo},
     watch:{
@@ -85,15 +87,35 @@ export default {
     },
     methods: {
         getDetail(type=''){
+			let dateArray=[]
+            let DateType,StartYear;
+            
+            if(this.$refs.chartInfo.chartInfo.ChartType==2){
+                DateType=this.$refs.chartInfo.year_select_season
+                StartYear=this.$refs.chartInfo.count_year_season
+                if(!(this.$refs.chartInfo.season_year && this.$refs.chartInfo.season_year.length>0)){
+                    // 初始化日期显示
+                    let latestYear = parseInt(this.$refs.chartInfo.tableData[0].LatestDate.substring(0,4))
+                    this.$refs.chartInfo.season_year = [`${latestYear-StartYear+1}-01-01`,`${latestYear}-12-31`];
+                }
+                dateArray = this.$refs.chartInfo.season_year
+            }else{
+                DateType=this.$refs.chartInfo.year_select
+                StartYear=this.$refs.chartInfo.count_year
+                dateArray = this.$refs.chartInfo.select_date
+            }
+
             preDictEdbInterface.edbChartInfo({
 				EdbInfoId: this.id,
-                DateType: this.$refs.chartInfo.year_select,
-				StartDate: this.$refs.chartInfo.select_date[0]||'',
-				EndDate: this.$refs.chartInfo.select_date[1]||'',
+                DateType,
+				StartDate: dateArray[0]||'',
+				EndDate: dateArray[1]||'',
                 ChartType:this.$refs.chartInfo.chartInfo.ChartType,
-                SeasonStartDate:this.$refs.chartInfo.season_year[0]||'',
-                SeasonEndDate:this.$refs.chartInfo.season_year[1]||'',
-                Calendar:this.$refs.chartInfo.calendar_type
+                // ETA1.0.5 去除了这两个参数
+                // SeasonStartDate:this.$refs.chartInfo.season_year[0]||'',
+                // SeasonEndDate:this.$refs.chartInfo.season_year[1]||'',
+                Calendar:this.$refs.chartInfo.calendar_type,
+                StartYear:StartYear || 0
 			}).then(res=>{
                 if(res.Ret!=200) return
                 this.edbData.DataList=res.Data.DataList||[]

+ 30 - 11
src/views/predictEdb_manage/predictEdb.vue

@@ -42,7 +42,8 @@
 				</div>
         <div style="margin:20px 0;padding:0 20px;display:flex;justify-content:space-between">
 					<span>目录</span>
-					<el-checkbox v-model="isOnlyMe"  @change="onlyMeHandler">只看我的</el-checkbox>
+					<el-checkbox v-model="isOnlyMe" v-permission="permissionBtn.predictEdbPermission.edbPreData_isOnlyMine"
+						@change="onlyMeHandler">只看我的</el-checkbox>
 				</div>
 				<div class="tree-cont">
 					<el-tree
@@ -99,38 +100,44 @@
 									style="width: 14px; height: 14px; margin-right: 8px"
 									v-if="data.Button.MoveButton"
 								/>
+								<!-- 添加子项 -->
 								<img
 									src="~@/assets/img/set_m/add.png"
 									alt=""
 									style="width: 14px; height: 14px; margin-right: 8px"
 									@click.stop="addNode(node, data)"
-									v-if="data.Button.AddButton&&!data.EdbInfoId"
+									v-if="data.Button.AddButton&&!data.EdbInfoId&&isEdbBtnShow('edbPreData_classifyOpt_add')"
 								/>
+								<!-- 编辑目录 -->
 								<img
 									src="~@/assets/img/set_m/edit.png"
 									alt=""
 									style="width: 15px; height: 14px; margin-right: 8px"
 									@click.stop="editNode(node, data)"
-									v-if="data.Button.OpButton&&!data.EdbInfoId"
+									v-if="data.Button.OpButton&&!data.EdbInfoId&&isEdbBtnShow('edbPreData_classifyOpt_add')"
 								/>
+								<!-- 删除目录 -->
 								<img
 									slot="reference"
 									src="~@/assets/img/set_m/del.png"
 									alt=""
 									style="width: 14px; height: 14px"
 									@click.stop="removeNode(node, data)"
-									v-if="data.Button.DeleteButton&&!data.EdbInfoId"
+									v-if="data.Button.DeleteButton&&!data.EdbInfoId&&isEdbBtnShow('edbPreData_classifyOpt_delete')"
 								/>
-								<i class="el-icon-view" v-if="data.EdbInfoId" @click.stop="viewNode(node,data)"></i>
+								<!-- 查看预测规则 -->
+								<i class="el-icon-view" v-if="data.EdbInfoId&&isEdbBtnShow('edbPreData_checkPreRule')" @click.stop="viewNode(node,data)"></i>
+								<!-- 查看关联图表 -->
 								<img 
-									v-if="data.Button.ShowChartRelation" 
+									v-if="data.Button.ShowChartRelation&&isEdbBtnShow('edbPreData_checkRelatedChart')" 
 									@click.stop="showAssociateChart=true,showAssociateComputeData=false"
 									src="~@/assets/img/icons/associate_chart.png" 
 									style="width: 14px; height: 14px;margin-left: 8px"
 									alt=""
 								/>
+								<!-- 查看关联指标 -->
 								<img 
-									v-if="data.Button.ShowEdbRelation" 
+									v-if="data.Button.ShowEdbRelation&&isEdbBtnShow('edbPreData_checkRelatedEdb')" 
 									@click.stop="showAssociateComputeData=true,showAssociateChart=false"
 									src="~@/assets/img/icons/associate_data.png" 
 									style="width: 14px; height: 14px;margin-left: 8px"
@@ -142,7 +149,7 @@
 					<div
 						class="noDepart"
 						@click="addLevelOneHandle"
-						v-if="opLevelOneClassify"
+						v-if="opLevelOneClassify&&isEdbBtnShow('edbPreData_classifyOpt_add')"
 					>
 						<img
 							src="~@/assets/img/set_m/add_ico.png"
@@ -184,13 +191,13 @@
 							<el-button v-permission="permissionBtn.predictEdbPermission.edbPreData_update"
 								type="text" @click="updateEdbPartHandle">刷新</el-button>
 							<el-button type="text" @click="editEdbHandle('')" 
-								v-if="edbButton.OpButton&&permissionBtn.checkPermissionBtn(permissionBtn.predictEdbPermission.edbPreData_edit)">编辑</el-button>
+								v-if="edbButton.OpButton&&isEdbBtnShow('edbPreData_edit')">编辑</el-button>
 							<el-button type="text" @click="saveEdbHandle" 
-								v-if="detail_show_chart&&permissionBtn.checkPermissionBtn(permissionBtn.predictEdbPermission.edbPreData_save)">保存</el-button>
+								v-if="detail_show_chart&&isEdbBtnShow('edbPreData_save')">保存</el-button>
 							<el-button v-permission="permissionBtn.predictEdbPermission.edbPreData_recalcu"
 								type="text" @click="updateEdbHandle">重新计算</el-button>
 							<el-button class="deletesty" @click="delEdbHandle" type="text"
-								v-if="edbButton.DeleteButton&&permissionBtn.checkPermissionBtn(permissionBtn.predictEdbPermission.edbPreData_del)">删除</el-button>
+								v-if="edbButton.DeleteButton&&isEdbBtnShow('edbPreData_del')">删除</el-button>
 							<el-button v-permission="permissionBtn.predictEdbPermission.edbPreData_copyData"
 								type="text" @click="copyData">复制数据</el-button>
 							<!-- <el-button v-permission="permissionBtn.predictEdbPermission.edbPreData_viewData"
@@ -205,6 +212,7 @@
 							:is="detail_show_chart?'edbDetail':'childData'"
 							:id="select_id"
 							:lang="currentLang" 
+							:isAllowEditLimit="isEdbBtnShow('edbPreData_editLimit')"
 							ref="detailComponentRef"
 							
 							@updateTit="setNameBack"
@@ -651,6 +659,13 @@ export default {
 				if(this.$refs.detailComponentRef){
 					this.$refs.detailComponentRef.$refs.chartInfo.chartInfo.ChartType=1;
 					this.$refs.detailComponentRef.$refs.chartInfo.year_select=10;
+					this.$refs.detailComponentRef.$refs.chartInfo.year_select_season=20;
+
+					this.$refs.detailComponentRef.$refs.chartInfo.calendar_type='公历';
+
+					this.$refs.detailComponentRef.$refs.chartInfo.count_year=5;
+					this.$refs.detailComponentRef.$refs.chartInfo.count_year_season=5;
+					
 					this.$refs.detailComponentRef.$refs.chartInfo.select_date=[];
 					this.$refs.detailComponentRef.$refs.chartInfo.season_year=[];
 					this.$refs.detailComponentRef.$refs.chartInfo.dateTip='请选择时间段';
@@ -685,6 +700,10 @@ export default {
 		}
 	},
 	methods: {
+		isEdbBtnShow(type){
+			const {predictEdbPermission,checkPermissionBtn}=this.permissionBtn
+			return checkPermissionBtn(predictEdbPermission[type])||false
+		},
 		setCurrentClassify(classifyId){
 			//获取指标详情后才能拿到准确的classifyId
 			//根据准备的id查找指标的父级目录并展开

+ 9 - 3
src/views/semantics_manage/documentPage.vue

@@ -52,7 +52,7 @@
                 >
                   <img
                     :src="require('@/assets/img/set_m/edit.png')"
-                    alt="" v-if="node.level!==2"
+                    alt="" v-if="node.level!==2&&isShowTreeBtn(node.level,'edit')"
                     style="width: 14px; height: 14px; margin-right: 5px"
                     @click.stop="clickNodeHandle('edit', data)"
                   />
@@ -63,7 +63,7 @@
                   />
                   <img
                     :src="require('@/assets/img/set_m/del.png')"
-                    alt=""
+                    alt="" v-if="isShowTreeBtn(node.level,'delete')"
                     style="width: 14px; height: 14px; margin-right: 5px"
                     @click.stop="clickNodeHandle('del', data)"
                   />
@@ -73,7 +73,7 @@
         </div>
       </div>
       <div class="catalog-tool">
-        <div class="add-catalog" @click="isModifyClassifyShow=true">
+        <div class="add-catalog" @click="isModifyClassifyShow=true" v-if="isShowTreeBtn(1,'edit')">
           <img
             src="~@/assets/img/set_m/add_ico.png"
             alt=""
@@ -392,6 +392,12 @@ export default {
             this.$message.success('移动成功')
         })
     },
+    //根据层级判断是否展示编辑/删除按钮
+    isShowTreeBtn(level,btnType){
+        return level===1
+            ?this.permissionBtn.isShowBtn('semanticPermission',`docPage_classifyOpt_${btnType}`)
+            :this.permissionBtn.isShowBtn('semanticPermission',`docPage_${btnType==='edit'?'save':btnType}`)
+    }
   },
 };
 </script>

+ 18 - 6
src/views/semantics_manage/semanticsPage.vue

@@ -53,13 +53,13 @@
                 >
                   <img
                     :src="require('@/assets/img/set_m/edit.png')"
-                    alt="" v-if="node.level!==2"
+                    alt="" v-if="node.level!==2&&isShowTreeBtn(node.level,'edit')"
                     style="width: 14px; height: 14px; margin-right: 5px"
                     @click.stop="clickNodeHandle('edit', data)"
                   />
                   <img
                     :src="require('@/assets/img/set_m/del.png')"
-                    alt=""
+                    alt="" v-if="isShowTreeBtn(node.level,'delete')"
                     style="width: 14px; height: 14px; margin-right: 5px"
                     @click.stop="clickNodeHandle('del', data)"
                   />
@@ -69,7 +69,7 @@
         </div>
       </div>
       <div class="catalog-tool">
-        <div class="add-catalog" @click="isModifyClassifyShow=true">
+        <div class="add-catalog" @click="isModifyClassifyShow=true" v-if="isShowTreeBtn(1,'edit')">
           <img
             src="~@/assets/img/set_m/add_ico.png"
             alt=""
@@ -156,21 +156,27 @@
             </svg>
             <span>编辑</span>
           </div>
-          <div class="opt-item" @click="handleDownLoadImg">
+          <div class="opt-item" 
+            v-permission="permissionBtn.semanticPermission.saPage_download" 
+            @click="handleDownLoadImg">
             <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
               <path d="M12.2636 5.81387L8.5 9.57746L8.49998 0.5L7.49998 0.500002L7.5 9.57746L3.73641 5.81387L3.02931 6.52098L7.64645 11.1381C7.84171 11.3334 8.15829 11.3334 8.35355 11.1381L12.9707 6.52098L12.2636 5.81387Z" fill="#409EFF"/>
               <path d="M2 11V13C2 13.5523 2.44772 14 3 14H13C13.5523 14 14 13.5523 14 13V11H13V13H3V11H2Z" fill="#409EFF"/>
             </svg>
             <span>下载</span>
           </div>
-          <div class="opt-item" @click="handleCopyImg">
+          <div class="opt-item" 
+            v-permission="permissionBtn.semanticPermission.saPage_copyOffice" 
+            @click="handleCopyImg">
             <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
               <path d="M3.99995 1.92191C3.99995 1.33727 4.52001 1 4.9953 1H9.36584C9.63437 1 9.89162 1.108 10.0797 1.29969L13.7139 5.00415C13.8972 5.19093 13.9999 5.44209 14.0001 5.70375L14.0046 12.0777C14.0046 12.6624 13.4846 13 13.0093 13H4.99995C4.52472 13 4.00474 12.6628 4.00461 12.0783L3.99995 1.92191ZM4.99999 2L5.00457 12H13.0046L13.0003 6.01275H9.00004V2H4.99999ZM10 2.64645V5.01275H12.3215L10 2.64645Z" fill="#409EFF"/>
               <path d="M2 5.00001V14.0128C2 14.565 2.44772 15.0128 3 15.0128H11V14.0128L3 14.0128V5.00001H2Z" fill="#409EFF"/>
             </svg>
             <span>复制到Office</span>
           </div>
-          <div class="opt-item" @click="handleCopyImg">
+          <div class="opt-item" 
+            v-permission="permissionBtn.semanticPermission.saPage_copyWeixin"
+            @click="handleCopyImg">
             <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
               <mask id="mask0_803_18530" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="16" height="16">
                 <rect width="16" height="16" fill="#D9D9D9"/>
@@ -418,6 +424,12 @@ export default {
                     level:2
                 })
         })
+    },
+    //根据层级判断是否展示编辑/删除按钮
+    isShowTreeBtn(level,btnType){
+        return level===1
+            ?this.permissionBtn.isShowBtn('semanticPermission',`saPage_classifyOpt_${btnType}`)
+            :this.permissionBtn.isShowBtn('semanticPermission',`saPage_${btnType==='edit'?'save':btnType}`)
     }
   },
 };

+ 1 - 0
src/views/system_manage/components/imgUpload.vue

@@ -33,6 +33,7 @@
         },
         watch: {
             imgUrl(newVal) {
+                console.log(newVal);
                 //this.uploadKey++
             }
         },

+ 1 - 1
src/views/system_manage/dataAuthManage.vue

@@ -56,7 +56,7 @@
 		</div>
 		<div class="dataAuth-bot">
 			<div>
-				<span class="add-btn" @click="addClassifyHandle">
+				<span class="add-btn" @click="addClassifyHandle" v-if="permissionBtn.isShowBtn('operateAuthPermission','sysdataAuth_classify')">
 					<i
 						class="el-icon-circle-plus-outline"
 						style="color: #5882ef; font-size: 16px"

+ 6 - 5
src/views/system_manage/departManage.vue

@@ -23,10 +23,11 @@
 					<span style="display:flex;alignItems:center;" v-show="act_node===data.unicodeKey">
                         <img src="~@/assets/img/data_m/move_ico.png" alt="" style="width:12px;height:12px;marginRight:10px;" @click.stop>
 						<img src="~@/assets/img/set_m/add.png" alt="" style="width:12px;height:12px;marginRight:10px;" @click.stop="addNode(data)" 
-						v-if="data.IsDepartment && (!isTrail || (isTrail && data.canEdit))">
-						<img src="~@/assets/img/set_m/add.png" alt="" style="width:12px;height:12px;marginRight:10px;" @click.stop="addNode(data)" v-if="data.IsGroup">
+						v-if="data.IsDepartment && (!isTrail || (isTrail && data.canEdit))&&permissionBtn.isShowBtn('sysDepartPermission','sysDepart_classifyOpt_edit')">
+						<img src="~@/assets/img/set_m/add.png" alt="" style="width:12px;height:12px;marginRight:10px;" @click.stop="addNode(data)" 
+						v-if="data.IsGroup&&permissionBtn.isShowBtn('sysDepartPermission','sysDepart_classifyOpt_edit')">
 						<img src="~@/assets/img/set_m/edit.png" alt="" style="width:12px;height:12px;marginRight:10px;" @click.stop="editNode(data)"
-						v-if="(!isTrail) || (data.canEdit||data.IsGroup)">
+						v-if="((!isTrail) || (data.canEdit||data.IsGroup))&&permissionBtn.isShowBtn('sysDepartPermission','sysDepart_classifyOpt_edit')">
 						<el-popconfirm
 						@onConfirm="removeNode(node,data)"
 						confirmButtonText='删除'
@@ -35,7 +36,7 @@
 						icon="el-icon-info"
 						iconColor="red"
 						title="确定删除吗"
-						v-if="data.DepartmentId!=shareCustomDepartmentId && (!isTrail || (isTrail && (data.canEdit || data.IsGroup)))"
+						v-if="data.DepartmentId!=shareCustomDepartmentId && (!isTrail || (isTrail && (data.canEdit || data.IsGroup)))&&permissionBtn.isShowBtn('sysDepartPermission','sysDepart_classifyOpt_delete')"
 						>
 						<!-- 共享客户组不允许删除 -->
 							<img slot="reference" src="~@/assets/img/set_m/del.png" alt="" style="width:12px;height:12px;marginTop:4px">
@@ -43,7 +44,7 @@
 					</span>
 				</span>
 			</el-tree>
-			<div class="noDepart" @click="addDepart">
+			<div class="noDepart" @click="addDepart" v-if="permissionBtn.isShowBtn('sysDepartPermission','sysDepart_classifyOpt_edit')">
 				<img src="~@/assets/img/set_m/add_ico.png" alt="" style="width:16px;height:16px;marginRight:10px;">
 				<span>新建部门</span>
 			</div>

+ 204 - 21
src/views/system_manage/etaBaseConfig.vue

@@ -25,14 +25,95 @@
                 </div>
                 <div class="side">
                     <el-form-item label="免责声明" prop="Disclaimer" class="disclaimer">
-                        <div class="rich-editor-wrap">
-                            <froala :id="`disclaimer-editor`"
-                                :ref="`disclaimerEditor`" 
-                                :tag="'textarea'" 
-                                :config="disclaimerConfig" v-model="formData.Disclaimer">
-                            </froala>
+                    <div class="rich-editor-wrap">
+                        <froala :id="`disclaimer-editor`"
+                            :ref="`disclaimerEditor`" 
+                            :tag="'textarea'" 
+                            :config="disclaimerConfig" v-model="formData.Disclaimer">
+                        </froala>
+                    </div>
+                    <ConfigAnnotation picHintText="" picName="Disclaimer" @showImage="previewImage"/>
+                </el-form-item>
+                </div>
+            </div>
+            <div class="part-base-tow part" >
+                <div class="side">
+                    <!-- <el-form-item label="国内短信模板" prop="LoginSmsTpId" >
+                        <div class="form-item-type-two sms-type">
+                            <el-input type="text" v-model.trim="formData.LoginSmsTpId" placeholder="请输入国内短信模板ID" style="width: calc(50% - 10px);">
+                                <template slot="suffix">
+                                    <el-tooltip content="登陆系统或找回密码或验证身份" placement="top">
+                                        <div class="input-suffix">
+                                            <img src="~@/assets/img/icons/warn-circle-gray.png" />
+                                        </div>
+                                    </el-tooltip>
+                                </template>
+                            </el-input>
+                            <el-input type="text" v-model.trim="formData.SmsJhgnAppKey" placeholder="请输入国内短信模板appkey" style="width: calc(50% - 10px);" />
                         </div>
-                        <ConfigAnnotation picHintText="" picName="Disclaimer" @showImage="previewImage"/>
+                    </el-form-item>
+                    <el-form-item label="国外短信模板" prop="LoginSmsGjTpId" >
+                        <div class="form-item-type-two sms-type">
+                            <el-input type="text" v-model.trim="formData.LoginSmsGjTpId" placeholder="请输入国外短信模板ID" style="width: calc(50% - 10px);">
+                                <template slot="suffix">
+                                    <el-tooltip content="登陆系统或找回密码或验证身份" placement="top">
+                                        <div class="input-suffix">
+                                            <img src="~@/assets/img/icons/warn-circle-gray.png" />
+                                        </div>
+                                    </el-tooltip>
+                                </template>
+                            </el-input>
+                            <el-input type="text" v-model.trim="formData.SmsJhgjAppKey" placeholder="请输入国外短信模板appkey" style="width: calc(50% - 10px);" />
+                        </div>
+                    </el-form-item> -->
+                    <el-form-item label="邮件模板" prop="LoginEmailTemplateSubject" >
+                        <div class="form-item-type-two">
+                            <el-input type="text" v-model="formData.LoginEmailTemplateSubject" placeholder="请输入邮件标题" >
+                                <template slot="suffix">
+                                        <el-tooltip content="登陆系统或找回密码或验证身份" placement="top">
+                                    <div class="input-suffix">
+                                        <img src="~@/assets/img/icons/warn-circle-gray.png" />
+                                    </div>
+                                </el-tooltip>
+                                </template>
+                            </el-input>
+                        </div>
+                    </el-form-item>
+                    <el-form-item prop="LoginEmailTemplateContent" >
+                        <froala id="email-content-editor"
+                            ref="emailContentEditor" 
+                            tag="textarea" 
+                            :config="{...disclaimerConfig,...emailEditorConfig}" v-model="formData.LoginEmailTemplateContent">
+                        </froala>
+                        <ConfigAnnotation picName="emailContentTemplate" @showImage="previewImage" picHintText=""/>
+                    </el-form-item>
+                </div>
+                <div class="side">
+                    <el-form-item label="中文研报分享标题" prop="H5ShareName">
+                        <el-input type="text" v-model="formData.H5ShareName" placeholder="请输入中文研报分享标题" />
+                    </el-form-item>
+                    <el-form-item label="英文研报分享标题" prop="H5ShareEnName">
+                        <el-input type="text" v-model="formData.H5ShareEnName" placeholder="请输入英文研报分享标题" />
+                    </el-form-item>
+                    <el-form-item label="关联公众号" prop="WxAppId">
+                        <el-input type="text" v-model.trim="formData.WxAppId" placeholder="请输入AppID" />
+                    </el-form-item>
+                    <el-form-item prop="WxAppSecret">
+                        <el-input type="text" v-model.trim="formData.WxAppSecret" placeholder="请输入AppSecret" />
+                    </el-form-item>
+                    <el-form-item prop="WxId">
+                        <el-input type="text" v-model.trim="formData.WxId" placeholder="请输入原始Id" />
+                    </el-form-item>
+                    <div class="input-hint">注:关联公众号填写时,AppID、AppSecret原始ID均需填写。</div>
+                    <el-form-item  prop="H5ReportShareImg">
+                        <ImgUpload 
+                            :imgUrl="formData.H5ReportShareImg"
+                            @showImage="showImage"
+                            @upload="(file)=>handleUploadImage(file,'H5ReportShareImg')"
+                            @remove="deleteFormImg('H5ReportShareImg')"
+                            />
+                        <!-- <ConfigAnnotation picName="OfficialAccountsLogoPic" @showImage="previewImage"
+                            picHintText=""/> -->
                     </el-form-item>
                 </div>
             </div>
@@ -43,14 +124,14 @@
                 </el-radio-group>
                 <div v-if="isShowPPT" v-show="pptLang === 'cn'" class="ppt-form-item-wrap">
                     <div class="inner-input-wrap">
-                        <el-form-item label="公司名称" prop="PptCompanyName">
+                        <el-form-item label="公司名称" prop="PptCompanyName" class="inline-form-item">
                             <el-input type="text" v-model="formData.PptCompanyName"></el-input>
                         </el-form-item>
-                        <el-form-item label="团队名称" prop="PptTeamName">
+                        <el-form-item label="团队名称" prop="PptTeamName" class="inline-form-item">
                             <el-input type="text" v-model="formData.PptTeamName"></el-input>
                         </el-form-item>
-                        <el-form-item label="字体颜色" prop="PptFontColor">
-                            <el-input type="color" style="width:100px;" v-model="formData.PptFontColor"></el-input>
+                        <el-form-item label="字体颜色" prop="PptFontColor" class="inline-form-item">
+                            <el-input type="color" style="width:64px;" v-model="formData.PptFontColor"></el-input>
                         </el-form-item>
                     </div>
                     
@@ -93,14 +174,14 @@
                 </div>
                 <div v-if="isShowEnPPT" v-show="pptLang === 'en'" class="ppt-form-item-wrap">
                     <div class="inner-input-wrap">
-                        <el-form-item label="公司名称" prop="PptCompanyNameEn">
+                        <el-form-item label="公司名称" prop="PptCompanyNameEn" class="inline-form-item">
                             <el-input type="text" v-model="formData.PptCompanyNameEn"></el-input>
                         </el-form-item>
-                        <el-form-item label="团队名称" prop="PptTeamNameEn">
+                        <el-form-item label="团队名称" prop="PptTeamNameEn" class="inline-form-item">
                             <el-input type="text" v-model="formData.PptTeamNameEn"></el-input>
                         </el-form-item>
-                        <el-form-item label="字体颜色" prop="PptFontColorEn">
-                            <el-input type="color" style="width:100px;" v-model="formData.PptFontColorEn"></el-input>
+                        <el-form-item label="字体颜色" prop="PptFontColorEn" class="inline-form-item">
+                            <el-input type="color" style="width:64px;" v-model="formData.PptFontColorEn"></el-input>
                         </el-form-item>
                     </div>
                     <el-form-item label="PPT封面图" prop="EnPptCoverImgs">
@@ -168,7 +249,7 @@
                 </template>
             </div>
         </el-form>
-        <div class="btn-wrap" style="text-align: center;">
+        <div class="btn-wrap" style="text-align: center;padding: 90px 0 60px 0;">
             <el-button type="primary" plain style="width:200px;" @click="cancel">取消</el-button>
             <el-button type="primary"  style="margin-left:50px;width:200px;" @click="saveBaseConfig">保存</el-button>
         </div>
@@ -206,6 +287,18 @@ export default {
                 CompanyName:'',//公司名称
                 CompanyWatermark:'',//公司水印
                 WatermarkChart:0,//是否在研报图表中使用水印 0否 1是
+                LoginSmsTpId:'',//国内短信模板Id
+                SmsJhgnAppKey:'',//国内短信模板appKey
+                LoginSmsGjTpId:'',// 国际短信模板Id
+                SmsJhgjAppKey:'',//国内短信模板appKey
+                LoginEmailTemplateSubject:'', // 邮件标题
+                LoginEmailTemplateContent:'', // 邮件内容
+                H5ShareName:'', // 中文研报分享标题
+                H5ShareEnName:'', // 英文研报分享标题
+                WxAppId:'',
+                WxAppSecret:'',
+                WxId:'',
+                H5ReportShareImg:'',
 
                 UseXf:0,//是否启用科大讯飞服务 0否 1是
                 XfAppid:'',
@@ -224,6 +317,21 @@ export default {
             rules: {
                 Disclaimer:[{ required: true, message: '请输入免责声明', trigger: 'blur' }],
                 CompanyName:[{ required: true, message: '请输入公司名称', trigger: 'blur' }],
+                LoginSmsTpId:[{ required: true, message: '请输入国内短信模板ID', trigger: 'blur' },
+                            {
+                                validator:(rules,value,callback)=>{
+                                    if(!this.formData.SmsJhgnAppKey){
+                                        callback(new Error("请输入国内短信模板appkey"))
+                                    }else{
+                                        callback()
+                                    }
+                                },
+                                trigger: 'blur'
+                            }],
+                LoginEmailTemplateSubject:[{ required: true, message: '请输入邮件标题', trigger: 'blur' }],
+                LoginEmailTemplateContent:[{ required: true, message: '请输入邮件内容', trigger: 'blur' }],
+                H5ShareName:[{ required: true, message: '请输入中文研报分享标题', trigger: 'blur' }],
+                H5ShareEnName:[{ required: true, message: '请输入英文研报分享标题', trigger: 'blur' }],
                 //CompanyWatermark:[{ required: true, message: '请选择水印图片', trigger: 'blur' }],
                 CnPptBackgroundImg:[{ required: true, message: '请选择中文PPT背景图', trigger: 'blur' }],
                 EnPptBackgroundImg:[{ required: true, message: '请选择英文PPT背景图', trigger: 'blur' }],
@@ -263,7 +371,9 @@ export default {
                 wordPasteModal:false,
                 pluginsEnabled:['colors'],//定义可用插件
             },//富文本编辑器配置项
-
+            emailEditorConfig:{
+                placeholderText:'请输入邮件内容',
+            },
             /* ppt config */
             pptLang:'cn',//切换中英文表单 
             CnPptCoverImgs:[],//中文封面列表
@@ -281,7 +391,8 @@ export default {
                 'CompanyWatermark':[require('@/assets/img/eta_base_config/mark_1.jpg')],
                 'pptCoverList':[require('@/assets/img/eta_base_config/ppt_cover.jpg')],
                 'pptBgPic':[require('@/assets/img/eta_base_config/ppt_bgpic.jpg')],
-                'pptBackPic':[require('@/assets/img/eta_base_config/ppt_back.jpg')]
+                'pptBackPic':[require('@/assets/img/eta_base_config/ppt_back.jpg')],
+                'emailContentTemplate':[require('@/assets/img/eta_base_config/email_content_template.png')],
             },
             /* loading */
             configLoading:null,
@@ -344,6 +455,7 @@ export default {
                 }else{
                     this.formData[key] = res.Data.ResourceUrl
                 }
+                console.log(this.formData);
             })
         },
         previewImage(picName){
@@ -391,8 +503,6 @@ export default {
             })
         },
         saveBaseConfig(){
-            //froala 在非本地环境会有版权标识,在表单验证前去掉
-            this.formData.Disclaimer = this.formData.Disclaimer.replace(/<p data-f-id=\"pbf\".*?<\/p>/g, "");
             //rules验证
             this.$refs.baseConfigForm.validate((valid,obj)=>{
                 console.log('valid',valid)
@@ -412,6 +522,22 @@ export default {
                     }
                 }
                 if(valid){
+                    if(this.formData.WxAppId || this.formData.WxAppSecret || this.formData.WxId){
+                        // 只要有一个填,其他必填
+                        if(!this.formData.WxAppId){
+                            this.$message.warning('AppID 不能为空')
+                            return 
+                        }else if(!this.formData.WxAppSecret){
+                            this.$message.warning('AppSecret 不能为空')
+                            return 
+                        }else if(!this.formData.WxId){
+                            this.$message.warning('原始Id 不能为空')
+                            return 
+                        }
+                    }
+                    //froala 在非本地环境会有版权标识,在表单验证前去掉
+                    this.formData.Disclaimer = this.formData.Disclaimer.replace(/<p data-f-id=\"pbf\".*?<\/p>/g, "");
+                    this.formData.LoginEmailTemplateContent = this.formData.LoginEmailTemplateContent.replace(/<p data-f-id=\"pbf\".*?<\/p>/g, "");
                     this.formData.WatermarkChart = ''+(this.checkList.includes('研报图表')?true:false)
                     this.formData.UseXf = ''+(this.Iflytek?true:false)
                     const CnPptCoverImgs = this.formData.CnPptCoverImgs.join(',')
@@ -441,6 +567,36 @@ export default {
     .el-form-item{
         .el-form-item__content{line-height: normal;}
     }
+    .inline-form-item{
+        display: flex;
+        align-items: center;
+        label{
+            height: 40px;
+            margin-right: 10px;
+            white-space: nowrap;
+        }
+        .el-form-item__content{
+            flex-grow: 1;
+        }
+    }
+    .el-input__inner[type="color"]{
+        height: 32px;
+        padding: 0;
+        border: none;
+    }
+    .fr-wrapper{
+        height: 220px!important;
+        .fr-element{
+            min-height: 220px!important;
+        }
+    }
+    .el-input--suffix .el-input__inner{
+        padding-right:34px ;
+    }
+    .el-radio-button__inner{
+        width: 150px;
+    }
+    
 }
 </style>
 <style scoped lang="scss">
@@ -454,6 +610,7 @@ export default {
             width:100%;
         }
         .part{
+            padding-bottom: 30px;
             display: flex;
             justify-content: space-between;
             flex-wrap: wrap;
@@ -461,10 +618,35 @@ export default {
                 border-bottom: 1px solid #DCDFE6;
             }
             &:not(:first-child){
-                margin-top: 30px;
+                margin-top: 50px;
             }
             .side{
                 width:45%;
+                .form-item-type-two{
+                    .input-suffix{
+                        display: flex;
+                        justify-content: center;
+                        align-items: center;
+                        height: 100%;
+                        padding-right: 6px;
+                        img{
+                            height: 16px;
+                            cursor: pointer;
+                        }
+                    }
+                }
+                .sms-type{
+                    display: flex;
+                    align-items: center;
+                    justify-content: space-between;
+                }
+                .input-hint{
+                    color: #999999;
+                    font-size: 14px;
+                    line-height: 20px;
+                    margin-bottom: 10px;
+                    margin-top: -3px;
+                }
             }
             .ppt-form-item-wrap{
                 width:100%;
@@ -475,6 +657,7 @@ export default {
                     width: 100%;
                     display: flex;
                     justify-content: space-between;
+                    margin: 20px 0;
                     >.el-form-item{
                         width:30%;
                     }