Pārlūkot izejas kodu

Merge branch 'master' of http://8.136.199.33:3000/eta_front/eta_front

hbchen 1 gadu atpakaļ
vecāks
revīzija
16e8bab160
43 mainītis faili ar 962 papildinājumiem un 159 dzēšanām
  1. 2 0
      src/api/api.js
  2. 2 0
      src/api/modules/oldApi.js
  3. 5 0
      src/api/modules/reportEnApi.js
  4. 4 0
      src/api/modules/semanticsApi.js
  5. 1 1
      src/mixins/index.js
  6. 19 7
      src/routes/modules/chartRoutes.js
  7. 5 1
      src/routes/modules/futuresRoutes.js
  8. 1 1
      src/routes/modules/oldRoutes.js
  9. 8 0
      src/views/chartRelevance_manage/fittingEquationChartEditor.vue
  10. 2 2
      src/views/chartRelevance_manage/fittingEquationList.vue
  11. 2 2
      src/views/chartRelevance_manage/list.vue
  12. 8 0
      src/views/chartRelevance_manage/relevanceChartEditor.vue
  13. 8 0
      src/views/chartRelevance_manage/statisticFeatureChartEditor.vue
  14. 2 2
      src/views/chartRelevance_manage/statisticFeatureList.vue
  15. 1 1
      src/views/classify_manage/classifyEnlist.vue
  16. 2 2
      src/views/classify_manage/classifylist.vue
  17. 1 1
      src/views/dataEntry_manage/databaseComponents/addTargetDiaBase.vue
  18. 8 0
      src/views/dataEntry_manage/onlineExcelCopy.vue
  19. 1 1
      src/views/dataEntry_manage/targetList.vue
  20. 8 0
      src/views/datasheet_manage/customSheetEdit.vue
  21. 8 0
      src/views/datasheet_manage/mixedSheetEdit.vue
  22. 16 0
      src/views/futures_manage/chartEditor.vue
  23. 2 1
      src/views/futures_manage/commodityChartBase.vue
  24. 120 0
      src/views/ppt_manage/newVersion/components/editor/InsertSemantics.vue
  25. 6 2
      src/views/ppt_manage/newVersion/pptEditor.vue
  26. 7 2
      src/views/ppt_manage/newVersion/pptEnEditor.vue
  27. 93 4
      src/views/report_manage/addreportNew.vue
  28. 121 0
      src/views/report_manage/components/importSemantics.vue
  29. 1 1
      src/views/report_manage/dayOrWeek.vue
  30. 100 90
      src/views/report_manage/editChapterReport.vue
  31. 105 2
      src/views/report_manage/editreportNew.vue
  32. 4 2
      src/views/report_manage/mixins/messagePush.js
  33. 28 0
      src/views/report_manage/mixins/reportMixin.js
  34. 99 2
      src/views/report_manage/reportEn/reportEditor.vue
  35. 46 9
      src/views/report_manage/reportEn/reportlist.vue
  36. 1 1
      src/views/report_manage/reportVariety.vue
  37. 44 6
      src/views/report_manage/reportlist.vue
  38. 2 2
      src/views/semantics_manage/components/canvasTable.vue
  39. 4 0
      src/views/semantics_manage/semantics/components/selectFileDialog.vue
  40. 38 4
      src/views/semantics_manage/semanticsPage.vue
  41. 7 5
      src/views/system_manage/dataAuthManage.vue
  42. 15 4
      src/views/system_manage/departManage.vue
  43. 5 1
      src/views/system_manage/mixin/departManageMixin.js

+ 2 - 0
src/api/api.js

@@ -134,6 +134,7 @@ const {
   reportauthor,
   getDraft,
   autosave,
+  reportSetPrepublish,
   classifylist,
   classifyparent,
   classifyadd,
@@ -210,6 +211,7 @@ export {
   reportauthor,
   getDraft,
   autosave,
+  reportSetPrepublish,
   classifylist,
   classifyparent,
   classifyadd,

+ 2 - 0
src/api/modules/oldApi.js

@@ -22,6 +22,7 @@ import http from "@/api/http.js"
  const reportauthor = params => { return http.get('/report/author',params); };  //获取作者
  const getDraft = params => { return http.get('/report/getDraft',params); };  //获取草稿
  const autosave = params => { return http.post('/report/saveReportContent',params); };  //保存
+ const reportSetPrepublish=params=>{return http.post('/report/pre_publish',params);};//报告设置定时发布
 
  const classifylist = params => { return http.get('/classify/list',params); };  //获取分类列表
  const classifyparent = params => { return http.get('/classify/parent',params); };  //获取父级分类
@@ -330,6 +331,7 @@ export {
 	reportauthor,
 	getDraft,
 	autosave,
+	reportSetPrepublish,
 	classifylist,
 	classifyparent,
 	classifyadd,

+ 5 - 0
src/api/modules/reportEnApi.js

@@ -162,6 +162,11 @@ export const markReport=params => {
   return http.post('/english_report/mark',params)
 }
 
+//定时发布报告
+export const enReportPrepblish=params=>{
+	return http.post('/english_report/pre_publish',params)
+}
+
 /* 发送日志 */
 export const logInterface = {
 	/**

+ 4 - 0
src/api/modules/semanticsApi.js

@@ -270,6 +270,10 @@ const semanticInterface = {
    */
   moveCompare:params => {
       return http.post('/semantic_analysis/compare/move',params)
+  },
+  //对比文档列表数据
+  compareSearch:params=>{
+    return http.get('/semantic_analysis/compare/search',params)
   }
 }
 

+ 1 - 1
src/mixins/index.js

@@ -9,7 +9,7 @@ const mixins = {
 			if(time==='0001-01-01 00:00:00'||time==='0000-00-00 00:00:00'){
 				return '--'
 			}else{
-				return time.replace(/-/g,'.')
+				return time?time.replace(/-/g,'.'):''
 			}
 			
 		},

+ 19 - 7
src/routes/modules/chartRoutes.js

@@ -93,12 +93,12 @@ export default [
 			},
 			{
 				path:"addCustomSheet",
-				name:"表格编辑",
+				name:"添加表格",
 				component:()=>import('@/views/datasheet_manage/customSheetEdit.vue')
 			},
 			{
 				path:"addMixedSheet",
-				name:"表格编辑",
+				name:"添加表格",
 				component:()=>import('@/views/datasheet_manage/mixedSheetEdit.vue')
 			}
 		]
@@ -169,12 +169,20 @@ export default [
 			{
 				path: 'fittingEquationChartEditor',
 				name: '添加图表',
-				component: () => import('@/views/chartRelevance_manage/fittingEquationChartEditor.vue')
+				component: () => import('@/views/chartRelevance_manage/fittingEquationChartEditor.vue'),
+				meta: { 
+					pathFrom: "fittingEquationList",
+          			pathName: "拟合方程曲线",
+				}
 			},
 			{
 				path: 'relevancechartEditor',
-				name: '图表编辑',
-				component:()=>import('@/views/chartRelevance_manage/relevanceChartEditor.vue')
+				name: '编辑图表',
+				component:()=>import('@/views/chartRelevance_manage/relevanceChartEditor.vue'),
+				meta: { 
+					pathFrom: "chartrelevance",
+          			pathName: "相关性图表",
+				}
 			},
 			{
 				path: 'statisticFeatureList',
@@ -183,8 +191,12 @@ export default [
 			},
 			{
 				path: 'statisticFeatureChartEditor',
-				name: '图表编辑',
-				component:()=>import('@/views/chartRelevance_manage/statisticFeatureChartEditor.vue')
+				name: '编辑图表',
+				component:()=>import('@/views/chartRelevance_manage/statisticFeatureChartEditor.vue'),
+				meta: { 
+					pathFrom: "statisticFeatureList",
+          			pathName: "统计特征",
+				}
 			}
 		]
 	},

+ 5 - 1
src/routes/modules/futuresRoutes.js

@@ -20,7 +20,11 @@ export default [
       {
 				path: "addCommodityChart",
 				name: "编辑图表",
-				component: () => import('@/views/futures_manage/chartEditor.vue')
+				component: () => import('@/views/futures_manage/chartEditor.vue'),
+				meta: { 
+					pathFrom: "commordityChartBase",
+          			pathName: "商品价格曲线",
+				}
 			},
     ]
   }  

+ 1 - 1
src/routes/modules/oldRoutes.js

@@ -187,7 +187,7 @@ export default [
         path: "reportEnEditor",
         component: () =>
           import("@/views/report_manage/reportEn/reportEditor.vue"),
-        name: "英文研报编辑",
+        name: "添加英文研报",
         hidden: false,
       },
       {

+ 8 - 0
src/views/chartRelevance_manage/fittingEquationChartEditor.vue

@@ -361,6 +361,14 @@ export default {
 	},
 	destroyed() {
 		window.removeEventListener('resize', this.reloadRightWid);
+	},
+	beforeRouteEnter(to, from, next) {
+		if(to.query.code){
+			to.matched[1].name='编辑图表'
+		}else{
+			to.matched[1].name='添加图表'
+		}
+		next()
 	}
 };
 </script>

+ 2 - 2
src/views/chartRelevance_manage/fittingEquationList.vue

@@ -392,7 +392,7 @@ export default {
 
 		/* 添加一级目录 */
 		addLevelOneHandle() {
-			this.dialog_title = '添加';
+			this.dialog_title = '添加图表分类';
 			this.classifyForm = {
 				classify_name: '',
 			}
@@ -402,7 +402,7 @@ export default {
     /* 编辑节点 */
     editNode(node, { ChartClassifyName,ChartClassifyId }) {
 
-      this.dialog_title = '编辑';
+      this.dialog_title = '编辑图表分类';
       /* 编辑目录 */
       this.classifyForm = {
         classify_name: ChartClassifyName,

+ 2 - 2
src/views/chartRelevance_manage/list.vue

@@ -464,7 +464,7 @@ export default {
 
     /* 添加一级目录 */
     addLevelOneHandle() {
-      this.dialog_title = "添加";
+      this.dialog_title = "添加图表分类";
       this.classifyForm = {
         classify_name: "",
       };
@@ -473,7 +473,7 @@ export default {
 
     /* 编辑节点 */
     editNode(node, { ChartClassifyName, ChartClassifyId }) {
-      this.dialog_title = "编辑";
+      this.dialog_title = "编辑图表分类";
       /* 编辑目录 */
       this.classifyForm = {
         classify_name: ChartClassifyName,

+ 8 - 0
src/views/chartRelevance_manage/relevanceChartEditor.vue

@@ -398,6 +398,14 @@ export default {
       };
     },
   },
+  beforeRouteEnter(to, from, next) {
+    if(to.query.code){
+      to.matched[1].name='编辑图表'
+    }else{
+      to.matched[1].name='添加图表'
+    }
+    next()
+  },
   data() {
     return {
       chart_code: this.$route.query.code || '',

+ 8 - 0
src/views/chartRelevance_manage/statisticFeatureChartEditor.vue

@@ -586,6 +586,14 @@ export default {
   },
   destroyed() {
     window.removeEventListener('resize', this.reloadRightWid);
+  },
+  beforeRouteEnter(to, from, next) {
+    if(to.query.code){
+      to.matched[1].name='编辑图表'
+    }else{
+      to.matched[1].name='添加图表'
+    }
+    next()
   }
 };
 </script>

+ 2 - 2
src/views/chartRelevance_manage/statisticFeatureList.vue

@@ -371,7 +371,7 @@ export default {
 
 		/* 添加一级目录 */
 		addLevelOneHandle() {
-			this.dialog_title = '添加';
+			this.dialog_title = '添加图表分类';
 			this.classifyForm = {
 				classify_name: '',
 			}
@@ -381,7 +381,7 @@ export default {
     /* 编辑节点 */
     editNode(node, { ChartClassifyName,ChartClassifyId }) {
 
-      this.dialog_title = '编辑';
+      this.dialog_title = '编辑图表分类';
       /* 编辑目录 */
       this.classifyForm = {
         classify_name: ChartClassifyName,

+ 1 - 1
src/views/classify_manage/classifyEnlist.vue

@@ -420,7 +420,7 @@ export default {
 
     editHandle({ClassifyName,Id,ParentId,Sort,ClassifyType}) {
       this.classifyForm = {
-        title: '编辑英文分类',
+        title: '编辑分类',
         show: true,
         classify_name: ClassifyName,
         parent_id: ParentId,

+ 2 - 2
src/views/classify_manage/classifylist.vue

@@ -63,10 +63,10 @@
 		  	</el-col>
 		</el-card>
 		<!-- 添加分类弹框 -->
-		<el-dialog :modal-append-to-body='false' :title="isadd?'新增分类':'编辑分类'" :visible.sync="aeDialog" :close-on-click-modal="false" :center="true" v-dialogDrag custom-class="dialogclassLog" width="700px">
+		<el-dialog :modal-append-to-body='false' :title="isadd?'添加分类':'编辑分类'" :visible.sync="aeDialog" :close-on-click-modal="false" :center="true" v-dialogDrag custom-class="dialogclassLog" width="700px">
 			<div slot="title" style="display:flex;alignItems:center;">
 				<img :src="isadd?$icons.add:$icons.edit" style="color:#fff;width:16px;height:16px;marginRight:5px;">
-				<span style="fontSize:16px;">{{isadd?'新增分类':'编辑分类'}}</span>
+				<span style="fontSize:16px;">{{isadd?'添加分类':'编辑分类'}}</span>
 			</div>
 			<el-form :model="aeForm" :rules="aerules" ref="aeForm" label-position="right" label-width="140px" class="demo-aeForm" id="login-container" @submit.native.prevent>
 				<el-form-item prop="classify_name" label="分类名称">

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

@@ -4,7 +4,7 @@
 			@close="cancelHandle" custom-class="dialog" top="11vh" center width="1200px" v-dialogDrag>
 			<div slot="title" style="display:flex;alignItems:center;">
 				<img :src="$icons.add" style="color:#fff;width:16px;height:16px;marginRight:5px;">
-				<span style="fontSize:16px;">新增指标</span>
+				<span style="fontSize:16px;">添加指标</span>
 			</div>
 			<div class="dialog-top">
 				<div>

+ 8 - 0
src/views/dataEntry_manage/onlineExcelCopy.vue

@@ -185,6 +185,14 @@ created() {
       luckysheet.create(this.options)
     })
   },
+  beforeRouteEnter(to, from, next){
+    if(to.query.isEdit=='true'){
+      to.matched[1].name='编辑excel数据'
+    }else{
+      to.matched[1].name='复制excel数据'
+    }
+    next()
+  },
   beforeRouteLeave(to, from, next) {
     luckysheet.destroy()
     next();

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

@@ -522,7 +522,7 @@ export default {
 				up_time = '';
 				up_day = '';
 			}
-				this.editTitle="修改指标名称";
+				this.editTitle="编辑指标";
 				this.editFormData = {
 					type:item.ClassifyName,
 					frequency:item.Frequency,

+ 8 - 0
src/views/datasheet_manage/customSheetEdit.vue

@@ -82,6 +82,14 @@ import CustomTable from './components/CustomTable.vue'
 import html2canvas from 'html2canvas';
 export default {
   components: { selectTarget,CustomTable },
+  beforeRouteEnter(to, from, next) {
+    if(to.query.id){
+      to.matched[1].name=`编辑表格`
+    }else{
+      to.matched[1].name='添加表格'
+    }
+    next()
+  },
   data() {
     return {
       sheetId: this.$route.query.id || '',

+ 8 - 0
src/views/datasheet_manage/mixedSheetEdit.vue

@@ -61,6 +61,14 @@ import MixedTable from './components/MixedTable.vue'
 import html2canvas from 'html2canvas';
 export default {
   components: { selectTarget,MixedTable },
+  beforeRouteEnter(to, from, next) {
+    if(to.query.id){
+      to.matched[1].name=`编辑表格`
+    }else{
+      to.matched[1].name='添加表格'
+    }
+    next()
+  },
   data() {
     return {
       sheetId: this.$route.query.id || '',

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

@@ -580,6 +580,22 @@ export default {
 	},
 	destroyed() {
 		window.removeEventListener('resize', this.reloadRightWid);
+	},
+	beforeRouteEnter(to, from, next) {
+		if(to.query.code){
+			if(to.query.scence=='price'){
+				to.matched[1].name='编辑价格曲线'
+			}else{
+				to.matched[1].name='编辑利润曲线'
+			}
+		}else{
+			if(to.query.scence=='price'){
+				to.matched[1].name='添加价格曲线'
+			}else{
+				to.matched[1].name='添加利润曲线'
+			}
+		}
+		next()
 	}
 };
 </script>

+ 2 - 1
src/views/futures_manage/commodityChartBase.vue

@@ -747,7 +747,8 @@ export default {
 			this.$router.push({
         path: '/addCommodityChart',
         query: {
-          code: this.chartInfo.UniqueCode
+          code: this.chartInfo.UniqueCode,
+		  scence:this.chartInfo.Source==2?'price':'profit'
         }
       })
 		},

+ 120 - 0
src/views/ppt_manage/newVersion/components/editor/InsertSemantics.vue

@@ -0,0 +1,120 @@
+<template>
+    <div class="import-mychart-wrap">
+        <div>
+            <el-input
+				placeholder="关键词搜索"
+				v-model="keyword"
+				size="medium"
+				prefix-icon="el-icon-search"
+                @input="handleChange"
+			/>
+		</div>
+		<div class="list" v-infinite-scroll="load" v-if="list.length>0">
+            <div class="item" v-for="item in list" :key="item.SaCompareId" @click="handleClickItem(item)">
+                <p>{{ item.Title }}</p>
+                <img :src="item.PicUrl" alt="">
+            </div>
+		</div>
+        <div v-if="list.length==0" class="empty-box">
+            无数据
+        </div>
+    </div>
+</template>
+
+<script>
+import {semanticInterface} from '@/api/modules/semanticsApi.js';
+export default {
+    data() {
+        return {
+            keyword:'',
+            pageSize:20,
+			CurrentIndex: 1,
+			list:[],
+            loading:false,
+            finished:false,
+
+        }
+    },
+    mounted(){
+        this.handleGetList()
+    },  
+    methods: {
+		async handleGetList(){
+            this.loading=true
+            const res=await semanticInterface.compareSearch({
+				PageSize: this.pageSize,
+				CurrentIndex: this.CurrentIndex,
+				Keyword: this.keyword
+			})
+            this.loading=false
+            let arr=res.Data.List||[]
+            arr=arr.map(item => {
+               return {
+                   ...item,
+                   PicUrl:item.ResultImg
+               } 
+            });
+
+            this.list=[...this.list,...arr]
+            if(!res.Data){
+                this.finished=true
+            }
+            if(res.Data&&res.Data.Paging.IsEnd){
+                this.finished=true
+            }
+		},
+
+        load(){
+            if(this.finished) return
+            this.CurrentIndex++
+            this.handleGetList()
+        },
+        handleChange(){
+            console.log('aaa');
+            this.CurrentIndex=1
+            this.finished=false
+            this.list=[]
+            this.handleGetList()
+        },
+
+        handleClickItem(item){
+           this.$parent.chooseChart(item,'sandImage')
+        }
+    },
+}
+</script>
+
+<style lang="scss" scoped>
+.import-mychart-wrap{
+    .list{
+        height: calc(100vh - 320px);
+        overflow-x: hidden;
+		overflow-y: auto;
+        .item{
+            width: 100%;
+            margin: 20px 0;
+            padding: 20px;
+            box-sizing: border-box;
+            border: 1px solid #eaeaea;
+            border-radius: 10px;
+            position: relative;
+            overflow: hidden;
+            p{
+                text-align: center;
+                font-size: 16px;
+                margin-bottom: 10px;
+                color: #5882EF;
+            }
+            img{
+                width: 100%;
+            }
+        }
+    }
+    .empty-box{
+        height: calc(100vh - 320px);
+        text-align: center;
+        color: #999;
+        padding-top: 100px;
+    }
+}
+</style>

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

@@ -176,6 +176,9 @@
               <div v-show="tabsactive == 'MyETA批量'" class="chart-tool flex-column">
                 <insert-charts @handleImportMyChart="handleImportMyChart"/>
               </div>
+              <div v-show="tabsactive == '语义分析插入'" class="chart-tool flex-column">
+                <InsertSemantics />
+              </div>
             </div>
             <!-- 图层编辑 -->
             <div class="layer-edit-box" v-else>
@@ -287,6 +290,7 @@ import InsertPageDialog from './components/editor/InsertPageDialog.vue';
 import addMyClassifyDia from '@/views/dataEntry_manage/components/addMyClassifyDia';
 import InsertCharts from './components/editor/InsertCharts.vue';
 import ContextMenu from './components/ContextMenu.vue';
+import InsertSemantics from './components/editor/InsertSemantics.vue';
 export default {
   mixins:[pptmixin,//ppt页面共同逻辑
           mixins,//图表加载逻辑
@@ -295,7 +299,7 @@ export default {
           ],
   components: { 
         IndexItem, ChooseCover, AddFormat,ShapePreview,
-    LayerEditTool,DeletePageDialog,ChangeFormatDialog,InsertPageDialog,addMyClassifyDia,InsertCharts,ContextMenu
+    LayerEditTool,DeletePageDialog,ChangeFormatDialog,InsertPageDialog,addMyClassifyDia,InsertCharts,ContextMenu,InsertSemantics
   },
   data() {
     return {
@@ -339,7 +343,7 @@ export default {
         catalogId:0,//ppt目录id,添加ppt时需要
         ReportId:0,//ppt对应的双周报id,如果没转过,则为0
         isChartLoading:false,//是否正在加载图表/图片
-        panelTabs: [ '图表','MyETA批量','沙盘','表格' ],
+        panelTabs: [ '图表','MyETA批量','沙盘','表格','语义分析插入' ],
         sheetSearchList:[],
         sheetSearchObj: {
           Keyword:''

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

@@ -180,6 +180,9 @@
                   :showEnMark="true"
                   />
               </div>
+              <div v-show="tabsactive == '语义分析插入'" class="chart-tool flex-column">
+                <InsertSemantics />
+              </div>
             </div>
             <!-- 图层编辑 -->
             <div class="layer-edit-box" v-else>
@@ -299,6 +302,7 @@ import addMyClassifyDia from '@/views/dataEntry_manage/components/addMyClassifyD
 import InsertCharts from './components/editor/InsertCharts.vue';
 import setEnNameDia from '@/views/dataEntry_manage/components/setEnNameDia.vue';
 import ContextMenu from './components/ContextMenu.vue';
+import InsertSemantics from './components/editor/InsertSemantics.vue';
 export default {
   mixins:[pptmixin,//ppt页面共同逻辑
           mixins,//图表加载逻辑
@@ -317,7 +321,8 @@ export default {
     setEnNameDia,
     addMyClassifyDia,
     InsertCharts,
-    ContextMenu
+    ContextMenu,
+    InsertSemantics
   },
   data() {
     return {
@@ -361,7 +366,7 @@ export default {
         catalogId:0,//ppt目录id,添加ppt时需要
         ReportId:0,//ppt对应的双周报id,如果没转过,则为0
         isChartLoading:false,//是否正在加载图表/图片
-        panelTabs: [ '图表','MyETA批量','沙盘','表格' ],
+        panelTabs: [ '图表','MyETA批量','沙盘','表格','语义分析插入' ],
         sheetSearchList:[],
         sheetSearchObj: {
           Keyword:''

+ 93 - 4
src/views/report_manage/addreportNew.vue

@@ -49,6 +49,12 @@
 					>存草稿</el-button
 				>
 				<el-button v-permission="permissionBtn.reportManageBtn.reportManage_publish"
+					type="primary"
+					size="medium"
+					@click.native="clickreportadd('dsfb')"
+					>定时发布</el-button
+				>
+				<el-button
 					type="primary"
 					size="medium"
 					@click.native="clickreportadd('fb')"
@@ -293,8 +299,38 @@
 				<div v-if="tabsactive == 'MyETA批量插入'">
 					<importMyChart @handleImportMyChart="handleImportMyChart"/>
 				</div>
+				<div v-if="tabsactive == '语义分析插入'">
+					<importSemantics @handleImportSemantic="(item)=>insertHtml(item,'image')"/>
+				</div>
 			</div>
 		</div>
+
+		<!-- 定时发布弹窗 -->
+		<el-dialog 
+			v-dialogDrag 
+			:append-to-body="true" 
+			:visible.sync="showDSFB" 
+			width="500px" 
+			title="定时发布"
+		>
+			<div>
+				<div>
+					<span>发送时间</span>
+					<el-date-picker
+						v-model="taskTime"
+						type="datetime"
+						placeholder="选择日期时间"
+						value-format="yyyy-MM-dd HH:mm"
+						:picker-options="timePickerOpt"
+					/>
+				</div>
+				<p style="margin:15px 0">设置成功之后,研报将定时进行发送。</p>
+				<div style="text-align:right;margin:20px 0">
+					<el-button type="primary" plain @click="showDSFB=false">取消</el-button>
+					<el-button type="primary" @click="handleSetReportPrepublish">确定</el-button>
+				</div>
+			</div>
+		</el-dialog>
 	</div>
 </template>
 
@@ -309,7 +345,8 @@ import {
 	reportauthor,
 	getDraft,
 	dataBaseInterface,
-	sandInterface
+	sandInterface,
+	reportSetPrepublish
 } from '@/api/api.js';
 import http from '@/api/http.js';
 import VueFroala from 'vue-froala-wysiwyg';
@@ -317,6 +354,7 @@ import urlSlug from 'url-slug';
 import mixinMsg from './mixins/messagePush'
 import reportMixin from './mixins/reportMixin';
 import importMyChart from './components/importMyChart.vue'
+import importSemantics from './components/importSemantics.vue';
 export default {
 	mixins:[mixinMsg,reportMixin],
 	data() {
@@ -596,7 +634,7 @@ export default {
 						this.isMessagePost = false; 
 						this.reporteditMsg(params2,tp)
 					}else if(isPost){
-						this.$confirm('发布后,是否推送模板消息和客户群?', '发布提示', {
+						this.$confirm('发布后,是否推送模板消息?', '发布提示', {
 								confirmButtonText: '推送',
 								cancelButtonText: '不推送',
 								type: 'warning',
@@ -633,7 +671,7 @@ export default {
 						this.isMessagePost = false; 
 						this.reportaddMsg(params,tp)
 					}else if(isPost){
-						this.$confirm('发布后,是否推送模板消息和客户群?', '发布提示', {
+						this.$confirm('发布后,是否推送模板消息?', '发布提示', {
 								confirmButtonText: '推送',
 								cancelButtonText: '不推送',
 								type: 'warning',
@@ -674,6 +712,57 @@ export default {
 				}
 			});
 		},
+		// 定时发布报告
+		handleSetReportPrepublish(){
+			if(!this.taskTime){
+				this.$message.warning('请选择定时发布的时间')
+				return
+			}
+			const now=this.$moment().format('YYYY-MM-DD HH:mm:ss')
+			console.log(now);
+			console.log(this.taskTime);
+			if(this.$moment(this.taskTime).isBefore(now,'second')){
+				this.$message.warning('定时发布不得早于当前时间')
+				return
+			}
+			console.log('定时去发布了');
+			this.$confirm('是否发布定时报告,并推送模板消息?', '发布提示', {
+				confirmButtonText: '推送',
+				cancelButtonText: '不推送',
+				type: 'warning',
+				distinguishCancelAndClose:true,
+				beforeClose:(action, instance,done)=>{
+					console.log(action, instance);
+					if(action==='close'||action==='cancel') {
+						//右上角或者不推送
+						reportSetPrepublish({
+							ReportId:Number(this.report_draft_id),
+							PrePublishTime:this.taskTime,
+							PreMsgSend:0,
+						}).then(res=>{
+							if(res.Ret===200){
+								this.$message.success('定时发布成功!')
+								this.$router.push({ path: '/reportlist' });
+							}
+						})
+					} else {
+						//confirmButton
+						reportSetPrepublish({
+							ReportId:Number(this.report_draft_id),
+							PrePublishTime:this.taskTime,
+							PreMsgSend:1,
+						}).then(res=>{
+							if(res.Ret===200){
+								this.$message.success('定时发布成功!')
+								this.$router.push({ path: '/reportlist' });
+							}
+						})
+					}
+					done()
+				}
+			})
+
+		},
 		//批量插入我的图表
 		handleImportMyChart(data){
 			//设置编辑器获取焦点
@@ -791,7 +880,7 @@ export default {
 			});
 		},
 	},
-	components: {importMyChart},
+	components: {importMyChart,importSemantics},
 	watch: {
 		'aeForm.add_type'(to, from) {
 			if (from == 2 && to == 1) {

+ 121 - 0
src/views/report_manage/components/importSemantics.vue

@@ -0,0 +1,121 @@
+<template>
+    <div class="import-mychart-wrap">
+        <div>
+            <el-input
+				placeholder="关键词搜索"
+				v-model="keyword"
+				size="medium"
+				prefix-icon="el-icon-search"
+                @input="handleChange"
+			/>
+		</div>
+		<div class="list" v-infinite-scroll="load" v-if="list.length>0">
+            <div class="item" v-for="item in list" :key="item.SaCompareId" @click="handleClickItem(item)">
+                <p>{{ item.Title }}</p>
+                <img :src="item.PicUrl" alt="">
+            </div>
+		</div>
+        <div v-if="list.length==0" class="empty-box">
+            无数据
+        </div>
+    </div>
+</template>
+
+<script>
+import {semanticInterface} from '@/api/modules/semanticsApi.js';
+export default {
+    data() {
+        return {
+            keyword:'',
+            pageSize:20,
+			CurrentIndex: 1,
+			list:[],
+            loading:false,
+            finished:false,
+
+        }
+    },
+    mounted(){
+        this.handleGetList()
+    },  
+    methods: {
+		async handleGetList(){
+            this.loading=true
+            const res=await semanticInterface.compareSearch({
+				PageSize: this.pageSize,
+				CurrentIndex: this.CurrentIndex,
+				Keyword: this.keyword
+			})
+            this.loading=false
+            let arr=res.Data.List||[]
+            arr=arr.map(item => {
+               return {
+                   ...item,
+                   PicUrl:item.ResultImg
+               } 
+            });
+
+            this.list=[...this.list,...arr]
+            if(!res.Data){
+                this.finished=true
+            }
+            if(res.Data&&res.Data.Paging.IsEnd){
+                this.finished=true
+            }
+		},
+
+        handleChange(){
+            console.log('aaa');
+            this.CurrentIndex=1
+            this.finished=false
+            this.list=[]
+            this.handleGetList()
+        },
+
+        load(){
+            if(this.finished) return
+            this.CurrentIndex++
+            this.handleGetList()
+        },
+
+        handleClickItem(item){
+           this.$emit('handleImportSemantic',item)
+        }
+    },
+}
+</script>
+
+<style lang="scss" scoped>
+.import-mychart-wrap{
+    .list{
+        height: calc(100vh - 320px);
+        overflow-x: hidden;
+		overflow-y: auto;
+        .item{
+            width: 100%;
+            margin: 20px 0;
+            padding: 20px;
+            box-sizing: border-box;
+            border: 1px solid #eaeaea;
+            border-radius: 10px;
+            position: relative;
+            overflow: hidden;
+            p{
+                text-align: center;
+                font-size: 16px;
+                margin-bottom: 10px;
+                color: #5882EF;
+            }
+            img{
+                width: 100%;
+            }
+        }
+    }
+    .empty-box{
+        height: calc(100vh - 320px);
+        text-align: center;
+        color: #999;
+        padding-top: 100px;
+    }
+}
+</style>

+ 1 - 1
src/views/report_manage/dayOrWeek.vue

@@ -120,7 +120,7 @@ export default {
         if(to.query.type){
             to.matched[1].name=`编辑${to.query.type=='day'?'晨报':'周报'}`
         }else{
-            to.matched[1].name='编辑晨报/周报'
+            to.matched[1].name='添加晨报/周报'
         }
         next()
     },

+ 100 - 90
src/views/report_manage/editChapterReport.vue

@@ -162,93 +162,91 @@
             </el-form-item>
           </el-form>
         </div>
-				<div v-if="tabsactive == '图表插入'">
-					<el-input
-						placeholder="图表名称"
-						v-model="key_word"
-						size="medium"
-						prefix-icon="el-icon-search"
-						@input="() => {search_page=1;$refs.chartListRef.scrollTop = 0;getreportlist(key_word)}"
-					>
-					</el-input>
-					<el-radio-group v-model="chart_source" @change="() => {search_page=1;$refs.chartListRef.scrollTop = 0;getreportlist()}" style="margin-top: 10px;">
-						<el-radio :label="1">ETA图库</el-radio>
-						<el-radio :label="2">商品价格曲线</el-radio> 
-						<el-radio :label="3">相关性图表</el-radio>
-						<el-radio :label="6">拟合方程曲线</el-radio>
-						<el-radio :label="7">统计特征</el-radio>
-					</el-radio-group>
-					<div style="margin: 10px 0">
-						<el-checkbox v-model="isShowMe" @change="() => {search_page=1;$refs.chartListRef.scrollTop = 0;getreportlist(key_word)}">只看我的</el-checkbox>
-					</div>
-					<div
-						id="reportwin"
-						ref="chartListRef"
-						style="
-							height: calc(100vh - 370px);
-							overflow-x: hidden;
-							overflow-y: auto;
-						"
-						v-infinite-scroll="loadReportHandle"
-						:infinite-scroll-immediate="false"
-					>
-						<template v-if="newreportlist.length">
-							<div
-								v-for="(item, index) in newreportlist"
-								:key="item.ChartInfoId"
-								:style="item.Disabled && 'cursor: not-allowed;'"
-								class="liststy"
-							>
-								<p class="color_primary">{{ item.ChartName }}</p>
-								<img
-									:src="item.ChartImage"
-									:id="'listnode' + index"
-									@click="insertHtml(item)"
-								/>
-							</div>
-						</template>
-
-						<tableNoData text="暂无图表" size="mini" v-else/>
-					</div>
-
-				</div>
-				<div v-if="tabsactive == '沙盘插入'">
-					<el-input
-						placeholder="沙盘名称/品种"
-						v-model="sandTabelQuery.Keyword"
-						size="medium"
-						prefix-icon="el-icon-search"
-					>
-					</el-input>
-					<div
-						id="sandTable-container"
-						ref="sandTable"
-						style="
-							height: calc(100vh - 370px);
-							overflow-x: hidden;
-							overflow-y: auto;
-						"
-						@scroll="sandTableHandleScroll"
-					>
-						<template v-if="sandTableList.length">
-							<div
-								v-for="(item, index) in sandTableList"
-								:key="item.SandboxId"
-								class="liststy"
-							>
-								<p class="color_primary">{{ item.Name }}</p>
-								<img
-									:src="item.PicUrl"
-									:id="'sandTable' + index"
-									@click="insertHtml(item,'image')"
-								/>
-								<p class="source-identification">来源:弘则研究</p>
-							</div>
-						</template>
-						<tableNoData text="暂无数据" size="mini" v-else/>
-					</div>
-				</div>
-				<div v-if="tabsactive == '表格插入'">
+        <div v-if="tabsactive == '图表插入'">
+          <el-input
+            placeholder="标题/子标题/作者"
+            v-model="key_word"
+            size="medium"
+            prefix-icon="el-icon-search"
+            @input="() => {search_page=1;$refs.chartListRef.scrollTop = 0;getreportlist(key_word)}"
+          >
+          </el-input>
+          <el-radio-group v-model="chart_source" @change="() => {search_page=1;$refs.chartListRef.scrollTop = 0;getreportlist()}" style="margin-top: 10px;">
+            <el-radio :label="1">ETA图库</el-radio>
+            <el-radio :label="2">商品价格曲线</el-radio>
+            <el-radio :label="3">相关性图表</el-radio>
+            <el-radio :label="6">拟合方程曲线</el-radio>
+            <el-radio :label="7">统计特征</el-radio>
+          </el-radio-group>
+          <div style="margin: 10px 0">
+            <el-checkbox v-model="isShowMe" @change="() => {search_page=1;$refs.chartListRef.scrollTop = 0;getreportlist(key_word)}">只看我的</el-checkbox>
+          </div>
+          <div
+            id="reportwin"
+            ref="chartListRef"
+            style="
+              height: calc(100vh - 370px);
+              overflow-x: hidden;
+              overflow-y: auto;
+            "
+            v-infinite-scroll="loadReportHandle"
+            :infinite-scroll-immediate="false"
+          >
+          <template v-if="newreportlist.length">
+            <div
+              v-for="(item, index) in newreportlist"
+              :key="item.ChartInfoId"
+              class="liststy"
+              :style="item.Disabled && 'cursor: not-allowed;'"
+            >
+              <p class="color_primary">{{ item.ChartName }}</p>
+              <img
+                :src="item.ChartImage"
+                :id="'listnode' + index"
+                @click="insertHtml(item)"
+              />
+            </div>
+          </template>
+          <tableNoData text="暂无图表" size="mini" v-else/>
+          </div>
+        </div>
+        <div v-if="tabsactive == '沙盘插入'">
+          <el-input
+            placeholder="沙盘名称/品种"
+            v-model="sandTabelQuery.Keyword"
+            size="medium"
+            prefix-icon="el-icon-search"
+          >
+          </el-input>
+          <div
+            id="sandTable-container"
+            ref="sandTable"
+            style="
+              height: calc(100vh - 3780px);
+              overflow-x: hidden;
+              overflow-y: auto;
+            "
+            @scroll="sandTableHandleScroll"
+          >
+            <template v-if="sandTableList.length">
+            <div
+              v-for="(item, index) in sandTableList"
+              :key="item.SandboxId"
+              class="liststy"
+            >
+              <p class="color_primary">{{ item.Name }}</p>
+              <img
+                :src="item.PicUrl"
+                :id="'sandTable' + index"
+                @click="insertHtml(item, 'image')"
+              />
+              <p class="source-identification">来源:弘则研究</p>
+            </div>
+            </template>
+            <tableNoData text="暂无数据" size="mini" v-else/>
+          </div>
+        </div>
+        <div v-if="tabsactive == '表格插入'">
 					<el-input
 						placeholder="表格名称"
 						v-model="sheetSearchObj.Keyword"
@@ -283,8 +281,11 @@
 						<tableNoData text="暂无数据" size="mini" v-else/>
 					</div>
 				</div>
-				<div v-if="tabsactive == 'MyETA批量插入'">
-					<importMyChart @handleImportMyChart="handleImportMyChart"/>
+        <div v-if="tabsactive == 'MyETA批量插入'">
+          <importMyChart @handleImportMyChart="handleImportMyChart" />
+        </div>
+        <div v-if="tabsactive == '语义分析插入'">
+					<importSemantics @handleImportSemantic="(item)=>insertHtml(item,'image')"/>
 				</div>
       </div>
     </div>
@@ -317,6 +318,7 @@ import mixinMsg from "./mixins/messagePush";
 import reportMixin from './mixins/reportMixin';
 import moment from "moment";
 import importMyChart from "./components/importMyChart.vue";
+import importSemantics from './components/importSemantics.vue';
 let ALOSSINS = null; //阿里云上传实例
 export default {
   beforeRouteEnter(to, from, next) {
@@ -329,7 +331,15 @@ export default {
   },
   mixins: [mixinMsg,reportMixin],
   data() {
+    let that=this
     return {
+      weekPanelTabs:[
+        "基础信息",
+        "图表插入",
+        "MyETA批量插入",
+        "沙盘插入",
+        "语义分析插入"
+      ],
       //批量导入图表
       importChartNum: 0, //批量导入图表的数量 如果大于0则说明在加载
 
@@ -855,7 +865,7 @@ export default {
       }
     },
   },
-  components: { importMyChart },
+  components: { importMyChart,importSemantics },
 };
 </script>
 

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

@@ -49,6 +49,12 @@
 					>存草稿</el-button
 				>
 				<el-button v-permission="permissionBtn.reportManageBtn.reportManage_publish"
+					type="primary"
+					size="medium"
+					@click.native="clickreportadd('dsfb')"
+					>定时发布</el-button
+				>
+				<el-button
 					type="primary"
 					size="medium"
 					@click.native="clickreportadd('fb')"
@@ -290,8 +296,38 @@
 				<div v-if="tabsactive == 'MyETA批量插入'">
 					<importMyChart @handleImportMyChart="handleImportMyChart"/>
 				</div>
+				<div v-if="tabsactive == '语义分析插入'">
+					<importSemantics @handleImportSemantic="(item)=>insertHtml(item,'image')"/>
+				</div>
 			</div>
 		</div>
+
+		<!-- 定时发布弹窗 -->
+		<el-dialog 
+			v-dialogDrag 
+			:append-to-body="true" 
+			:visible.sync="showDSFB" 
+			width="500px" 
+			title="定时发布"
+		>
+			<div>
+				<div>
+					<span>发送时间</span>
+					<el-date-picker
+						v-model="taskTime"
+						type="datetime"
+						placeholder="选择日期时间"
+						value-format="yyyy-MM-dd HH:mm"
+						:picker-options="timePickerOpt"
+					/>
+				</div>
+				<p style="margin:15px 0">设置成功之后,研报将定时进行发送。</p>
+				<div style="text-align:right;margin:20px 0">
+					<el-button type="primary" plain @click="showDSFB=false">取消</el-button>
+					<el-button type="primary" @click="handleSetReportPrepublish">确定</el-button>
+				</div>
+			</div>
+		</el-dialog>
 	</div>
 </template>
 
@@ -305,7 +341,8 @@ import {
 	reportauthor,
 	classifyIdDetail,
 	dataBaseInterface,
-	sandInterface
+	sandInterface,
+	reportSetPrepublish
 } from 'api/api.js';
 import VueFroala from 'vue-froala-wysiwyg';
 import urlSlug from 'url-slug';
@@ -313,6 +350,7 @@ import http from '@/api/http.js';
 import mixinMsg from './mixins/messagePush'
 import reportMixin from './mixins/reportMixin';
 import importMyChart from './components/importMyChart.vue'
+import importSemantics from './components/importSemantics.vue';
 export default {
 	mixins:[mixinMsg,reportMixin],
 	data() {
@@ -663,6 +701,71 @@ export default {
 				}
 			});
 		},
+		// 定时发布报告
+		handleSetReportPrepublish(){
+			if(!this.taskTime){
+				this.$message.warning('请选择定时发布的时间')
+				return
+			}
+			const now=this.$moment().format('YYYY-MM-DD HH:mm:ss')
+			console.log(now);
+			console.log(this.taskTime);
+			if(this.$moment(this.taskTime).isBefore(now,'second')){
+				this.$message.warning('定时发布不得早于当前时间')
+				return
+			}
+			console.log('定时去发布了');
+			// 如果改报告已经推送过模板消息
+			if(this.ThsMsgIsSend==1){
+				reportSetPrepublish({
+					ReportId:Number(this.report_id),
+					PrePublishTime:this.taskTime,
+					PreMsgSend:0,
+				}).then(res=>{
+					if(res.Ret===200){
+						this.$message.success('定时发布成功!')
+						this.$router.push({ path: '/reportlist' });
+					}
+				})
+				return
+			}
+			this.$confirm('是否发布定时报告,并推送模板消息?', '发布提示', {
+				confirmButtonText: '推送',
+				cancelButtonText: '不推送',
+				type: 'warning',
+				distinguishCancelAndClose:true,
+				beforeClose:(action, instance,done)=>{
+					console.log(action, instance);
+					if(action==='close'||action==='cancel') {
+						//右上角或者不推送
+						reportSetPrepublish({
+							ReportId:Number(this.report_id),
+							PrePublishTime:this.taskTime,
+							PreMsgSend:0,
+						}).then(res=>{
+							if(res.Ret===200){
+								this.$message.success('定时发布成功!')
+								this.$router.push({ path: '/reportlist' });
+							}
+						})
+					} else {
+						//confirmButton
+						reportSetPrepublish({
+							ReportId:Number(this.report_id),
+							PrePublishTime:this.taskTime,
+							PreMsgSend:1,
+						}).then(res=>{
+							if(res.Ret===200){
+								this.$message.success('定时发布成功!')
+								this.$router.push({ path: '/reportlist' });
+							}
+						})
+					}
+					done()
+				}
+			})
+
+		},
 		//批量插入我的图表
 		handleImportMyChart(data){
 			//设置编辑器获取焦点
@@ -779,7 +882,7 @@ export default {
 			});
 		},
 	},
-	components: {importMyChart},
+	components: {importMyChart,importSemantics},
 };
 </script>
 

+ 4 - 2
src/views/report_manage/mixins/messagePush.js

@@ -27,7 +27,8 @@ export default {
             } else {
               this.publishreport(res.Data.ReportId);
             }
-          } else {
+          } else if(tp=='dsfb'){
+            this.showDSFB=true
             // this.$router.push({path:'/reportlist'});
           }
         }
@@ -54,7 +55,8 @@ export default {
             } else {
               this.publishreport(res.Data.ReportId);
             }
-          } else {
+          } else if(tp=='dsfb'){
+            this.showDSFB=true
             // this.$router.push({path:'/reportlist'});
           }
           //已经添加过报告

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

@@ -7,6 +7,23 @@ import {
   statisticFeatureInterface,
 } from "@/api/modules/chartRelevanceApi";
 export default {
+  watch:{
+    'taskTime'(){
+          this.taskTime=this.$moment(this.taskTime).format('YYYY-MM-DD HH:mm')+':00'
+			    const date = this.$moment(this.taskTime).startOf('day').format('x');
+	        const nowDate = this.$moment().startOf('day').format('x');
+	        // 如果选择的是今天 则需要禁用已经过去的时间节点
+	        if (date <= nowDate) {
+	            // 默认选择的最新时间 是当前时间的两分钟后 (留出2分钟的富裕时间)
+	            this.timePickerOpt.selectableRange = (
+	                `${this.$moment().add(2,'m').format('HH:mm:ss')} - 23:59:59`
+	            );
+	        }else {
+				// 如果是以后的日期,则不需要禁用时间节点
+	            this.timePickerOpt.selectableRange = '00:00:00 - 23:59:59';
+	        }
+		},
+  },
   data() {
     let that = this;
     return {
@@ -139,6 +156,7 @@ export default {
         "MyETA批量插入",
         "表格插入",
         "沙盘插入",
+        "语义分析插入"
       ],
 
       sheetSearchObj: {},
@@ -163,6 +181,16 @@ export default {
 
       isShowMe: false,
       autoSaveFlag: true, //是否开启自动保存
+
+      showDSFB:false,//显示定时发布弹窗
+			taskTime:'',//定时发布的时间
+			timePickerOpt:{
+				disabledDate(e){
+					return e.getTime()< new Date().getTime()-24 * 60 * 60 * 1000
+				},
+				selectableRange:'00:00:00 - 23:59:59',
+        format:'HH:mm'
+			},
     };
   },
 

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

@@ -64,6 +64,12 @@
 					>存草稿</el-button
 				>
 				<el-button v-permission="permissionBtn.enReportManageBtn.enReport_publish"
+					type="primary"
+					size="medium"
+					@click.native="clickreportadd('dsfb')"
+					>定时发布</el-button
+				>
+				<el-button
 					type="primary"
 					size="medium"
 					@click.native="clickreportadd('fb')"
@@ -299,6 +305,9 @@
 				<div v-if="tabsactive == 'MyETA批量插入'">
 					<importMyChart @handleImportMyChart="handleImportMyChart" :showEnMark="true" />
 				</div>
+				<div v-if="tabsactive == '语义分析插入'">
+					<importSemantics @handleImportSemantic="(item)=>insertHtml(item,'image')"/>
+				</div>
 			</div>
 		</div>
 
@@ -313,6 +322,33 @@
       :edblist="enChartInfo.ChartType===10?enEdblist:[]"
 		/>
 
+		<!-- 定时发布弹窗 -->
+		<el-dialog 
+			v-dialogDrag 
+			:append-to-body="true" 
+			:visible.sync="showDSFB" 
+			width="500px" 
+			title="定时发布"
+		>
+			<div>
+				<div>
+					<span>发送时间</span>
+					<el-date-picker
+						v-model="taskTime"
+						type="datetime"
+						placeholder="选择日期时间"
+						value-format="yyyy-MM-dd HH:mm"
+						:picker-options="timePickerOpt"
+					/>
+				</div>
+				<p style="margin:15px 0">设置成功之后,研报将定时进行发送。</p>
+				<div style="text-align:right;margin:20px 0">
+					<el-button type="primary" plain @click="showDSFB=false">取消</el-button>
+					<el-button type="primary" @click="handleConfirmDSFB">确定</el-button>
+				</div>
+			</div>
+		</el-dialog>
+
 	</div>
 </template>
 
@@ -329,6 +365,7 @@ import mixinMsg from '../mixins/messagePush'
 import reportMixin from '../mixins/reportMixin';
 import importMyChart from '../components/importMyChart.vue'
 import setEnNameDia from '@/views/dataEntry_manage/components/setEnNameDia.vue'
+import importSemantics from '../components/importSemantics.vue';
 export default {
 	mixins:[mixinMsg,reportMixin],
 	data() {
@@ -439,9 +476,26 @@ export default {
         language: "zh_cn",
         //允许粘贴的样式
         pasteAllowedStyleProps: ['font-family', 'font-size', 'color']
-      }
+      },
+
+			showDSFB:false,//显示定时发布弹窗
+			taskTime:'',//定时发布的时间
+			timePickerOpt:{
+				disabledDate(e){
+					return e.getTime()< new Date().getTime()-24 * 60 * 60 * 1000
+				},
+				selectableRange:'00:00:00 - 23:59:59'
+			},
 		};
 	},
+	beforeRouteEnter(to, from, next) {
+        if(to.query.id){
+            to.matched[1].name=`编辑英文研报`
+		}else{
+			to.matched[1].name=`添加英文研报`
+		}
+        next()
+    },
 	mounted() {
 		this.$route.query.id && this.getreportdetail();
 		this.getclassifylist();
@@ -473,6 +527,20 @@ export default {
 			this.$refs.sandTable.scrollTop=0
 			this.sandTabelQuery.CurrentIndex = 1
 			this.getSandTable()
+		},
+		'taskTime'(){
+			const date = this.$moment(this.taskTime).startOf('day').format('x');
+	        const nowDate = this.$moment().startOf('day').format('x');
+	        // 如果选择的是今天 则需要禁用已经过去的时间节点
+	        if (date <= nowDate) {
+	            // 默认选择的最新时间 是当前时间的两分钟后 (留出2分钟的富裕时间)
+	            this.timePickerOpt.selectableRange = (
+	                `${this.$moment().add(2,'m').format('HH:mm:ss')} - 23:59:59`
+	            );
+	        }else {
+				// 如果是以后的日期,则不需要禁用时间节点
+	            this.timePickerOpt.selectableRange = '00:00:00 - 23:59:59';
+	        }
 		}
 	},
 	methods: {
@@ -674,7 +742,12 @@ export default {
 					});
 					window.open(href, "_blank");
 				} else if (tp === "fb") {
+					this.$confirm('是否确定立即发布报告?','提示',{type: 'warning'}).then(()=>{
 						this.publishreport(this.report_id);
+					})
+				}else if(tp==='dsfb'){
+					//定时发布
+					this.showDSFB=true
 				}
 			// if (tp == 'yl') { //预览
 			// 	sessionStorage.setItem('reportdtl', JSON.stringify(params));
@@ -698,6 +771,30 @@ export default {
 			});
 		},
 
+		//定时发布报告
+		handleConfirmDSFB(){
+			if(!this.taskTime){
+				this.$message.warning('请选择定时发布的时间')
+				return
+			}
+			const now=this.$moment().format('YYYY-MM-DD HH:mm:ss')
+			console.log(now);
+			console.log(this.taskTime);
+			if(this.$moment(this.taskTime).isBefore(now,'second')){
+				this.$message.warning('定时发布不得早于当前时间')
+				return
+			}
+			reportEnInterface.enReportPrepblish({
+				ReportId:this.report_id,
+				PrePublishTime:this.taskTime
+			}).then(res=>{
+				if(res.Ret===200){
+					this.$message.success('定时发布成功!')
+					this.$router.push({ path: '/reportEnList' });
+				}
+			})
+		},
+
 		//批量插入我的图表
 		handleImportMyChart(data){
 			//设置编辑器获取焦点
@@ -817,7 +914,7 @@ export default {
 			});
 		},
 	},
-	components: {importMyChart,setEnNameDia},
+	components: {importMyChart,setEnNameDia,importSemantics},
 };
 </script>
 

+ 46 - 9
src/views/report_manage/reportEn/reportlist.vue

@@ -20,6 +20,17 @@
               @click="handlePullReport"
             >同步策略报告</el-button>
           </el-form-item>
+          <el-form-item label="">
+            <el-select
+              v-model="searchform.timeType"
+              placeholder="选择时间类型"
+              size="medium"
+              style="width:110px"
+            >
+              <el-option label="发布时间" value="publish_time"></el-option>
+              <el-option label="更新时间" value="modify_time"></el-option>
+            </el-select>
+          </el-form-item>
           <el-form-item label="">
             <el-date-picker
               v-model="searchform.dateValue"
@@ -53,11 +64,23 @@
               size="medium"
             ></el-cascader>
           </el-form-item>
+          <el-form-item label="">
+            <el-select
+              v-model.number="searchform.publishState"
+              placeholder="发布筛选"
+              size="medium"
+              clearable
+              style="width: 140px"
+            >
+              <el-option label="已发布" :value="2"></el-option>
+              <el-option label="未发布" :value="1"></el-option>
+            </el-select>
+          </el-form-item>
           <el-form-item label="">
             <el-select
               v-permission="permissionBtn.enReportManageBtn.enReport_sendEmail"
               v-model.number="searchform.EmailState"
-              placeholder="状态筛选"
+              placeholder="群发状态筛选"
               size="medium"
               clearable
               style="width: 140px"
@@ -68,7 +91,7 @@
           </el-form-item>
           <el-form-item>
             <el-input
-              placeholder="标题 / 作者"
+              placeholder="标题 / 创建人"
               v-model="searchform.key_word"
               clearable
               size="medium"
@@ -124,6 +147,12 @@
                 <span v-if="row.PvEmail&&row.Pv" style="color:#333">/</span>
                 <span v-if="row.Pv" style="color:#333">{{row.Pv}}</span>
               </span>
+              <span v-else-if="item.key==='PublishTime'">
+                <span>{{row.PrePublishTime?row.PrePublishTime:row.PublishTime}}</span>
+                <svg v-if="row.PrePublishTime&&row.State===1" width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+                  <path d="M15.2002 8C15.2002 4.13401 12.0662 1 8.20019 1C4.3342 1 1.20019 4.13401 1.2002 8C1.2002 11.866 4.3342 15 8.2002 15C12.0662 15 15.2002 11.866 15.2002 8ZM5.2002 10L5.2002 9L8.17491 9L11.2002 4.5L11.9073 5.20711L8.58912 10L5.2002 10Z" fill="#0052D9"/>
+                </svg>
+              </span>
 
               <span v-else-if="item.key==='handle'">
                 <template v-if="row.State===1">
@@ -326,12 +355,14 @@ export default {
   data() {
     return {
       searchform: {
+        timeType:'publish_time',
         dateValue:[],
         frequency:'',
         classifynameArr:'',
         state:'',
         key_word:'',
-        EmailState:''
+        EmailState:'',
+        publishState:''
       },
       optionsArr:[],
       frequencyArr: [ '年度','半年度','季度','月度','双周度','周度','日度','不定时' ],
@@ -460,7 +491,9 @@ export default {
         KeyWord:this.searchform.key_word,
         StartDate: this.searchform.dateValue ? this.searchform.dateValue[0] : '',
         EndDate: this.searchform.dateValue ? this.searchform.dateValue[1] : '',
-        EmailState:this.searchform.EmailState
+        EmailState:this.searchform.EmailState,
+        TimeType:this.searchform.timeType,
+        State:this.searchform.publishState.toString()
 			};
 			this.listLoading = true;
 			reportEnInterface.reportList(params).then(res => {
@@ -499,13 +532,17 @@ export default {
     },
 
     /* 发布报告 */
-    publishReport({Id}) {
-      reportEnInterface.reportPublish({ReportIds:String(Id)}).then(res=>{
-				if(res.Ret!==200) return
+    publishReport(item) {
+      this.$confirm(item.PrePublishTime?'该报告已设置定时发布,是否修改为立即发布?':'是否确定立即发布报告?','提示',{type: 'warning'}).then(()=>{
 
-        this.$message.success('发布成功');
-        this.getTableData();
+				reportEnInterface.reportPublish({ReportIds:String(item.Id)}).then(res=>{
+          if(res.Ret!==200) return
+          this.$message.success('发布成功');
+          this.getTableData();
+        })
+        
 			})
+      
     },
 
     /* 编辑报告 */

+ 1 - 1
src/views/report_manage/reportVariety.vue

@@ -40,7 +40,7 @@
         <!-- 品种编辑弹窗 -->
         <el-dialog 
             :modal-append-to-body='false' 
-            :title="!editBreedData.id?'新增分类':'编辑分类'" 
+            :title="!editBreedData.id?'添加品种':'编辑品种'" 
             :visible.sync="showEditBreed" 
             :close-on-click-modal="false"
             :center="true" 

+ 44 - 6
src/views/report_manage/reportlist.vue

@@ -33,6 +33,18 @@
               </a>
             </template>
           </el-form-item>
+          <el-form-item label="">
+            <el-select
+              v-model="searchform.timeType"
+              placeholder="选择时间类型"
+              size="medium"
+              style="width:110px"
+              @change="search"
+            >
+              <el-option label="发布时间" value="publish_time"></el-option>
+              <el-option label="更新时间" value="modify_time"></el-option>
+            </el-select>
+          </el-form-item>
           <el-form-item label="">
             <el-date-picker
               @change="search"
@@ -76,12 +88,25 @@
               size="medium"
             ></el-cascader>
           </el-form-item>
+          <el-form-item label="">
+            <el-select
+              v-model.number="searchform.publishState"
+              placeholder="发布筛选"
+              size="medium"
+              clearable
+              style="width: 140px"
+              @change="search"
+            >
+              <el-option label="已发布" :value="2"></el-option>
+              <el-option label="未发布" :value="1"></el-option>
+            </el-select>
+          </el-form-item>
           <el-form-item label="">
             <el-select
               v-permission="permissionBtn.reportManageBtn.reportManage_reportList_sendTime"
               @change="search"
               v-model.number="searchform.msgIsSend"
-              placeholder="状态筛选"
+              placeholder="推送消息状态"
               size="medium"
               clearable
               style="width: 140px"
@@ -93,7 +118,7 @@
           <el-form-item>
             <el-input
               @input="search"
-              placeholder="标题 / 作者"
+              placeholder="标题 / 创建人"
               v-model="searchform.key_word"
               clearable
               size="medium"
@@ -184,7 +209,14 @@
             min-width="124"
             align="center"
             :formatter="formatterColumn"
-          ></el-table-column>
+          >
+            <template slot-scope="scope">
+              <span>{{scope.row.PrePublishTime?scope.row.PrePublishTime:scope.row.PublishTime|formatTime}}</span>
+              <svg style="position: relative;top:2px" v-if="scope.row.PrePublishTime&&scope.row.State == '1'" width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+                <path d="M15.2002 8C15.2002 4.13401 12.0662 1 8.20019 1C4.3342 1 1.20019 4.13401 1.2002 8C1.2002 11.866 4.3342 15 8.2002 15C12.0662 15 15.2002 11.866 15.2002 8ZM5.2002 10L5.2002 9L8.17491 9L11.2002 4.5L11.9073 5.20711L8.58912 10L5.2002 10Z" fill="#0052D9"/>
+              </svg>
+            </template>
+          </el-table-column>
           <el-table-column v-if="permissionBtn.checkPermissionBtn(permissionBtn.reportManageBtn.reportManage_reportList_sendTime)"
             prop="MsgSendTime"
             label="报告推送时间"
@@ -507,7 +539,7 @@
             class="el-icon-warning"
             style="font-size: 24px; color: #e6a23c; vertical-align: middle"
           ></i>
-          是否发布报告,且推送模板消息和客户群?
+          {{isDSFB?'该报告已设置定时发布,是否立即发布报告并推送模板消息?':'是否立即发布报告,并推送模板消息?'}}
         </div>
         <div style="margin-bottom: 20px; text-align: center">
           <el-button
@@ -515,7 +547,7 @@
             plain
             style="width: 100px"
             @click="handleClosePublish"
-            >取消发布</el-button
+            >取消</el-button
           >
           <el-button
             type="primary"
@@ -573,7 +605,7 @@ export default {
       let tag = false;
       this.tableData.forEach((item) => {
         if (this.batches.includes(item.Id)) {
-          if (item.NeedThsMsg != 0 && item.ThsMsgIsSend == 0) {
+          if (item.MsgIsSend== 0) {
             tag = true;
           }
         }
@@ -595,6 +627,7 @@ export default {
       listLoading: false,
       tableData: [],
       searchform: {
+        timeType:'publish_time',
         dateValue: "",
         frequency: "",
         classifynameArr: "",
@@ -602,6 +635,7 @@ export default {
         key_word: "",
         publish_sort: "desc",
         msgIsSend: "",
+        publishState:'',
       },
       batches: [],
       uploadloading: false,
@@ -622,6 +656,7 @@ export default {
       },
 
       showPublish: false,
+      isDSFB:false,//是否为定时发布
       tableKey:0,
     };
   },
@@ -877,6 +912,7 @@ export default {
       //发布报告
       this.batches = [];
       this.batches.push(item.Id);
+      this.isDSFB=item.PrePublishTime?true:false
 
       // 周报不需要弹窗直接发布
       // 2023/3/6 研报后台5.5中修改 周报校验是否上传了音频
@@ -1007,6 +1043,8 @@ export default {
         KeyWord: this.searchform.key_word,
         MsgIsSend: this.searchform.msgIsSend,
         // PublishSort:this.searchform.publish_sort,
+        State:this.searchform.publishState,
+        TimeType:this.searchform.timeType
       };
       if (this.searchform.dateValue) {
         params.StartDate = this.searchform.dateValue[0];

+ 2 - 2
src/views/semantics_manage/components/canvasTable.vue

@@ -112,7 +112,7 @@ export default {
   height: 450px;
   overflow: scroll;
   table{
-    width:100%;
+    width:1000px;
     height: 100%;
     border-collapse: collapse;
     /* position: relative; */
@@ -164,7 +164,7 @@ export default {
       }
     }
     td{
-      min-width: 200px;
+      // min-width: 200px;
       min-height: 45px;
       border: 1px solid black;
       padding:5px;

+ 4 - 0
src/views/semantics_manage/semantics/components/selectFileDialog.vue

@@ -139,6 +139,10 @@ export default {
       })
       //获取选择对比文档ids 结果抛出
       if(selectKeys.length){
+        if(selectKeys.length>10){
+          this.$message.warning('最多支持选择10个文档')
+          return
+        }
         this.$emit('selectFile',selectKeys)
       }else{
         this.closeDialog()

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 38 - 4
src/views/semantics_manage/semanticsPage.vue


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

@@ -1,6 +1,7 @@
 <template>
-	<div class="dataAuth-container" v-if="showData">
-		<el-cascader 
+	<div class="dataAuth-container">
+		<el-cascader
+		v-model="default_user"
 		:options="classifyArr"
 		:props="classifyProp"
 		:show-all-levels="false"
@@ -10,7 +11,7 @@
 		clearable
 		@change="chooseUser"
 		/>
-		<ul class="user-list-cont">
+		<!-- <ul class="user-list-cont">
 			<li
 				v-for="item in userList"
 				:key="item.AdminId"
@@ -19,7 +20,7 @@
 			>
 				{{ item.AdminRealName }}
 			</li>
-		</ul>
+		</ul> -->
 		<div class="setting-cont" v-if="authList.length">
 			<ul class="menu_lists">
 				<li v-for="item in authList" :key="item.id" class="menu_item">
@@ -101,7 +102,8 @@ export default {
 			classifyProp:{
 				value:'ItemId',
 				label:'ItemName',
-				children:'Children'
+				children:'Children',
+				emitPath:false
 			},
 			default_user: '',
 			new_label:'',//输入框新值

+ 15 - 4
src/views/system_manage/departManage.vue

@@ -3,7 +3,7 @@
 		<div class="left_cont">
 			<div class="company_top" @click="initDepart">
 				<img src="~@/assets/img/set_m/home_ico.png" alt="" style="width:30px;height:30px;">
-				<span :class="!defaultGroup&&!defaultDepart?'act':''">{{isTrail?global.company_name:'弘则研究'}}</span>
+				<span :class="!defaultGroup&&!defaultDepart?'act':''">部门信息</span>
 			</div>
 			<el-tree
 				ref="departTree"
@@ -12,7 +12,6 @@
 				:data="departArr"
 				node-key="unicodeKey"
 				:props="defaultProp"
-				default-expand-all
 				draggable 
 				:allow-drag="checkAllowDrag"
 				:allow-drop="checkAllowDrop"
@@ -85,6 +84,11 @@
 							<span style="position: relative;">{{scope.row.RealName}}</span>
 						</template>
 					</el-table-column>
+					<el-table-column 
+						prop="AdminName"
+						label="账号"
+						align="center"
+					/>
 					<el-table-column
 					prop="Mobile"
 					label="手机号"
@@ -343,7 +347,10 @@
 		>
 			<div class="dialog-container">
 				<el-form ref="resetForm" :model="resetForm" :rules="resetRules" label-width="100px">
-					<el-form-item label="新密码" prop="password" style="margin-bottom: 40px;">
+					<el-form-item label="账号">
+						<span>{{modifyAdminName}}</span>
+					</el-form-item>
+					<el-form-item label="新密码" prop="password">
 						<el-input v-model="resetForm.password" style="width:100%" :show-password="true"></el-input>
 					</el-form-item>
 					<el-form-item label="确认新密码" prop="check" style="margin-bottom: 40px;">
@@ -365,6 +372,10 @@
 			@close="isMoveDepartShow=false" center width="460px" v-dialogDrag
 		>
 			<div class="dialog-cotainer">
+				<div class="form-item" style="display: flex;align-items: center;margin-bottom:20px">
+					<p style="width:90px">账号</p>
+					<span>{{modifyAdminName}}</span>
+				</div>
 				<div class="form-item" style="display: flex;align-items: center;">
 					<p style="width:90px">选择分组</p>
 					<el-cascader :options="departArr" v-model="resetDepart" :props="form_departProp" style="width:100%"
@@ -1253,7 +1264,7 @@ export default {
 		},
 		/* 删除用户 */
 		delUser(item) {
-			this.$confirm('是否确认删除该用户?','提示',{
+			this.$confirm(`是否确认删除用户【${item.AdminName}】`,'提示',{
 				type:'warning'
 			}).then(() => {
 				departInterence.delUser({

+ 5 - 1
src/views/system_manage/mixin/departManageMixin.js

@@ -59,7 +59,9 @@ export default {
             },
             resetDepart:'',
             modifyAdminId:0,
-            areaCode:[]
+            areaCode:[],
+            modifyAdminName:'',
+
         }
     },
     methods: {
@@ -180,6 +182,7 @@ export default {
             if(type==='show'){
                 this.$refs.resetForm&&this.$refs.resetForm.clearValidate()
                 this.modifyAdminId = data.AdminId
+                this.modifyAdminName=data.AdminName
                 this.isResetPasswordShow = true
             }else{
                 this.$refs.resetForm.validate((valid)=>{
@@ -213,6 +216,7 @@ export default {
                 data.TeamId ?departArr.push(data.TeamId):''
                 this.resetDepart = departArr
                 this.modifyAdminId = data.AdminId
+                this.modifyAdminName=data.AdminName
                 this.isMoveDepartShow = true
             }else{
                 //选择分组接口

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels