jwyu 2 ani în urmă
părinte
comite
74ac29579d

+ 1 - 1
.env.development

@@ -1,5 +1,5 @@
 # 接口地址http://8.136.199.33:8610/v1   https://rddptest.hzinsights.com/adminapi
-VITE_APP_API_URL="https://rddptest.hzinsights.com/adminapi"
+VITE_APP_API_URL="http://8.136.199.33:8610/v1"
 # 路由根地址
 VITE_APP_BASE_URL="/"
 # 打包输入文件名

+ 1 - 0
index.html

@@ -12,5 +12,6 @@
     <script type="module" src="/src/main.js"></script>
     <script src="/jquery-3.6.0.min.js"></script>
     <script type='text/javascript' src='/froala_editor.pkgd.min.js'></script>
+    <script type='text/javascript' src='/froala_editor_zh_cn.js'></script>
   </body>
 </html>

+ 304 - 0
public/froala_editor_zh_cn.js

@@ -0,0 +1,304 @@
+/*!
+ * froala_editor v4.0.19 (https://www.froala.com/wysiwyg-editor)
+ * License https://froala.com/wysiwyg-editor/terms/
+ * Copyright 2014-2023 Froala Labs
+ */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('froala-editor')) :
+  typeof define === 'function' && define.amd ? define(['froala-editor'], factory) :
+  (factory(global.FroalaEditor));
+}(this, (function (FE) { 'use strict';
+
+  FE = FE && FE.hasOwnProperty('default') ? FE['default'] : FE;
+
+  /**
+  * Simplified Chinese spoken in China.
+  */
+  FE.LANGUAGE['zh_cn'] = {
+    translation: {
+      // Place holder
+      'Type something': '输入内容',
+      // Basic formatting
+      'Bold': '粗体',
+      'Italic': '斜体',
+      'Underline': '下划线',
+      'Strikethrough': '删除线',
+      // Main buttons
+      'Insert': '插入',
+      'Delete': '删除',
+      'Cancel': '取消',
+      'OK': '确定',
+      'Back': '后退',
+      'Remove': '删除',
+      'More': '更多',
+      'Update': '更新',
+      'Style': '样式',
+      // Font
+      'Font Family': '字体',
+      'Font Size': '字号',
+      // Colors
+      'Colors': '颜色',
+      'Background': '背景',
+      'Text': '字体',
+      'HEX Color': '十六进制颜色',
+      // Paragraphs
+      'Paragraph Format': '段落格式',
+      'Normal': '正文',
+      'Code': '代码',
+      'Heading 1': '标题1',
+      'Heading 2': '标题2',
+      'Heading 3': '标题3',
+      'Heading 4': '标题4',
+      // Style
+      'Paragraph Style': '段落样式',
+      'Inline Style': '内联样式',
+      // Alignment
+      'Align': '对齐方式',
+      'Align Left': '左对齐',
+      'Align Center': '居中',
+      'Align Right': '右对齐',
+      'Align Justify': '两端对齐',
+      'None': '无',
+      // Lists
+      'Ordered List': '编号',
+      'Unordered List': '项目符号',
+      // Indent
+      'Decrease Indent': '减少缩进量',
+      'Increase Indent': '增加缩进量',
+      // Links
+      'Insert Link': '插入超链接',
+      'Open in new tab': '在新标签页中打开',
+      'Open Link': '打开超链接',
+      'Edit Link': '编辑超链接',
+      'Unlink': '删除超链接',
+      'Choose Link': '选择超链接',
+      // Images
+      'Insert Image': '插入图片',
+      'Upload Image': '上传图片',
+      'By URL': '通过 URL',
+      'Browse': '浏览',
+      'Drop image': '拖入图片',
+      'or click': '或点击',
+      'Manage Images': '管理图片',
+      'Loading': '加载中',
+      'Deleting': '删除中',
+      'Tags': '标签',
+      'Are you sure? Image will be deleted.': '图片将会被删除,是否确认?',
+      'Replace': '替换',
+      'Uploading': '上传中',
+      'Loading image': '图片加载中',
+      'Display': '显示',
+      'Inline': '嵌入型',
+      'Break Text': '上下型环绕',
+      'Alternative Text': '替换文字',
+      'Change Size': '改变大小',
+      'Width': '宽度',
+      'Height': '高度',
+      'Something went wrong. Please try again.': '发生错误,请重试。',
+      'Image Caption': '图片标题',
+      'Advanced Edit': '高级编辑',
+      // Video
+      'Insert Video': '插入视频',
+      'Embedded Code': '嵌入代码',
+      'Paste in a video URL': '粘贴视频网址',
+      'Drop video': '拖入视频',
+      'Your browser does not support HTML5 video.': '您的浏览器不支持 HTML5 视频。',
+      'Upload Video': '上传视频',
+      // Tables
+      'Insert Table': '插入表格',
+      'Table Header': '表头',
+      'Remove Table': '删除表格',
+      'Table Style': '表格样式',
+      'Horizontal Align': '水平对齐方式',
+      'Row': '行',
+      'Insert row above': '在上方插入',
+      'Insert row below': '在下方插入',
+      'Delete row': '删除行',
+      'Column': '列',
+      'Insert column before': '在左侧插入',
+      'Insert column after': '在右侧插入',
+      'Delete column': '删除列',
+      'Cell': '单元格',
+      'Merge cells': '合并单元格',
+      'Horizontal split': '水平分割',
+      'Vertical split': '垂直分割',
+      'Cell Background': '单元格背景',
+      'Vertical Align': '垂直对齐方式',
+      'Top': '靠上',
+      'Middle': '居中',
+      'Bottom': '靠下',
+      'Align Top': '靠上对齐',
+      'Align Middle': '居中对齐',
+      'Align Bottom': '靠下对齐',
+      'Cell Style': '单元格样式',
+      // Files
+      'Upload File': '上传文件',
+      'Drop file': '拖入文件',
+      // Emoticons
+      'Emoticons': '表情符号',
+      'Grinning face': '露齿笑脸',
+      'Grinning face with smiling eyes': '露齿笑到眯起眼',
+      'Face with tears of joy': '笑哭',
+      'Smiling face with open mouth': '张嘴微笑',
+      'Smiling face with open mouth and smiling eyes': '眯眼张嘴微笑',
+      'Smiling face with open mouth and cold sweat': '带冷汗的张嘴微笑',
+      'Smiling face with open mouth and tightly-closed eyes': '紧闭双眼张嘴微笑',
+      'Smiling face with halo': '带光环微笑',
+      'Smiling face with horns': '带牛角的微笑',
+      'Winking face': '眨眼',
+      'Smiling face with smiling eyes': '眯眼微笑',
+      'Face savoring delicious food': '馋',
+      'Relieved face': '如释重负',
+      'Smiling face with heart-shaped eyes': '桃心眼微笑',
+      'Smiling face with sunglasses': '戴太阳镜微笑',
+      'Smirking face': '得意地笑',
+      'Neutral face': '中性脸',
+      'Expressionless face': '面无表情',
+      'Unamused face': '不高兴',
+      'Face with cold sweat': '冷汗',
+      'Pensive face': '沉思',
+      'Confused face': '迷惑',
+      'Confounded face': '困惑',
+      'Kissing face': '嘴巴嘟嘟',
+      'Face throwing a kiss': '飞吻',
+      'Kissing face with smiling eyes': '眯眼接吻',
+      'Kissing face with closed eyes': '闭眼接吻',
+      'Face with stuck out tongue': '吐舌',
+      'Face with stuck out tongue and winking eye': '眨眼吐舌',
+      'Face with stuck out tongue and tightly-closed eyes': '眯眼吐舌',
+      'Disappointed face': '失望',
+      'Worried face': '担心',
+      'Angry face': '生气',
+      'Pouting face': '撅嘴',
+      'Crying face': '大哭',
+      'Persevering face': '坚强',
+      'Face with look of triumph': '扬眉吐气',
+      'Disappointed but relieved face': '失望',
+      'Frowning face with open mouth': '皱眉',
+      'Anguished face': '痛苦',
+      'Fearful face': '害怕',
+      'Weary face': '疲惫',
+      'Sleepy face': '困了',
+      'Tired face': '累了',
+      'Grimacing face': '扭曲脸',
+      'Loudly crying face': '大哭',
+      'Face with open mouth': '张开嘴',
+      'Hushed face': '安静',
+      'Face with open mouth and cold sweat': '冷汗',
+      'Face screaming in fear': '害怕尖叫',
+      'Astonished face': '惊讶',
+      'Flushed face': '脸红',
+      'Sleeping face': '熟睡',
+      'Dizzy face': '眩晕',
+      'Face without mouth': '没有嘴的脸',
+      'Face with medical mask': '口罩脸',
+      // Line breaker
+      'Break': '换行',
+      // Math
+      'Subscript': '下标',
+      'Superscript': '上标',
+      // Full screen
+      'Fullscreen': '全屏',
+      // Horizontal line
+      'Insert Horizontal Line': '插入水平线',
+      // Clear formatting
+      'Clear Formatting': '清除格式',
+      // Save
+      'Save': '保存',
+      // Undo, redo
+      'Undo': '撤消',
+      'Redo': '恢复',
+      // Select all
+      'Select All': '全选',
+      // Code view
+      'Code View': '代码视图',
+      // Quote
+      'Quote': '引用',
+      'Increase': '增加引用级别',
+      'Decrease': '减少引用级别',
+      // Quick Insert
+      'Quick Insert': '快速插入',
+      // Spcial Characters
+      'Special Characters': '特殊字符',
+      'Latin': '拉丁字母',
+      'Greek': '希腊字母',
+      'Cyrillic': '西里尔字母',
+      'Punctuation': '标点',
+      'Currency': '货币',
+      'Arrows': '箭头',
+      'Math': '数学',
+      'Misc': '杂项',
+      // Print.
+      'Print': '打印',
+      // Spell Checker.
+      'Spell Checker': '拼写检查器',
+      // Help
+      'Help': '帮助',
+      'Shortcuts': '快捷键',
+      'Inline Editor': '内联编辑器',
+      'Show the editor': '显示编辑器',
+      'Common actions': '常用操作',
+      'Copy': '复制',
+      'Cut': '剪切',
+      'Paste': '粘贴',
+      'Basic Formatting': '基本格式',
+      'Increase quote level': '增加引用级别',
+      'Decrease quote level': '减少引用级别',
+      'Image / Video': '图像/视频',
+      'Resize larger': '放大',
+      'Resize smaller': '缩小',
+      'Table': '表格',
+      'Select table cell': '选择单元格',
+      'Extend selection one cell': '增加选中的单元格',
+      'Extend selection one row': '增加选中的行',
+      'Navigation': '导航',
+      'Focus popup / toolbar': '焦点弹出/工具栏',
+      'Return focus to previous position': '将焦点返回到上一个位置',
+      // Embed.ly
+      'Embed URL': '嵌入网址',
+      'Paste in a URL to embed': '粘贴要嵌入的网址',
+      // Word Paste.
+      'The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?': '粘贴的内容来自微软 Word 文档。你想保留还是清除格式?',
+      'Keep': '保留',
+      'Clean': '清除',
+      'Word Paste Detected': '检测到粘贴自 Word 的内容',
+      // Character Counter
+      'Characters': '字数统计',
+      // More Buttons
+      'More Text': ' 更多文字',
+      'More Paragraph': '更多段落',
+      'More Rich': '更多丰富',
+      'More Misc': '更多杂项',
+      'Rounded': '圆角',
+      'Bordered': '边框',
+      'Shadow': '阴影',
+      'Download PDF': '下载PDF',
+      'Text Color': '字体颜色',
+      'Background Color': '背景颜色',
+      'Inline Class': '内联类',
+      'Highlighted': '高亮',
+      'Transparent': '透明',
+      'Big Red': '大号红',
+      'Small Blue': '小号蓝',
+      'Default': '默认',
+      'Lower Alpha': 'a,b,c...',
+      'Lower Greek': 'α,β,γ...',
+      'Lower Roman': 'i,ii,iii...',
+      'Upper Alpha': 'A,B,C...',
+      'Upper Roman': 'Ⅰ,Ⅱ,Ⅲ...',
+      'Circle': '○ 空心圆',
+      'Disc': '● 实心圆',
+      'Square': '■ 实心方块',
+      'Gray': '灰色',
+      'Spaced': '字母间隙',
+      'Uppercase': '大写',
+      'Line Height': '行高',
+      'Single': '1',
+      'Double': '2'
+    },
+    direction: 'ltr'
+  };
+
+})));
+//# sourceMappingURL=zh_cn.js.map

BIN
src/assets/imgs/icon_back.png


+ 2 - 2
src/assets/styles/common.scss

@@ -114,10 +114,10 @@ img {
     .report-html-wrap{
         font-size: 18px;
         span{
-            font-size: 18px;
+            font-size: 18px !important;
         }
         p{
-            font-size: 18px;
+            font-size: 18px !important;
         }
     }
 }

+ 1 - 1
src/assets/styles/vant.scss

@@ -35,6 +35,6 @@
         font-size: 16px;
     }
     .van-cell__label{
-        font-size: 15px ;
+        font-size: 15px !important;
     }
 }

+ 18 - 5
src/hooks/useFroalaEditor.js

@@ -1,8 +1,8 @@
-import { ref } from "vue";
+import { ref,nextTick } from "vue";
 
 export function useInitFroalaEditor() {
-	// let FroalaEditorIns = ref(null);
-	let frolaEditorContentChange=ref(false)
+	let frolaEditorContentChange=ref(false)//富文本内容是否改变
+	let lastFocusPosition=ref(null)//最后焦点位置
 
 	const options = {
 		toolbarButtons: [
@@ -47,9 +47,22 @@ export function useInitFroalaEditor() {
 		saveInterval: 0,
 		charCounterCount: false,
 		events:{
+			// 内容变化事件
 			contentChanged:function (){
 				frolaEditorContentChange.value=true
-			}
+				getSelection().rangeCount&&(lastFocusPosition.value=getSelection().getRangeAt(0))
+			},
+			keyup:function(e,editor){
+				nextTick(()=>{
+					getSelection().rangeCount&&(lastFocusPosition.value=getSelection().getRangeAt(0))
+				})
+			},
+			click:function(e,editor){
+				nextTick(()=>{
+					getSelection().rangeCount&&(lastFocusPosition.value=getSelection().getRangeAt(0))
+				})
+			},
+
 		}
 	};
 
@@ -81,7 +94,7 @@ export function useInitFroalaEditor() {
 	};
 
 	return {
-		// FroalaEditorIns,
+		lastFocusPosition,
 		frolaEditorContentChange,
 		initFroalaEditor,
 	}

+ 1 - 1
src/layouts/Index.vue

@@ -42,7 +42,7 @@ function goBack(){
                 <div 
                     class="back-home-box"
                     @click="goBack"
-                >返回</div>
+                >返回上级</div>
             </div>
             <van-popover v-model:show="showUserInfo" placement="bottom-end">
                 <div class="userinfo-box_pad" v-if="userInfo">

+ 48 - 4
src/views/report/AddReport.vue

@@ -14,7 +14,7 @@ const cachedViewsStore=useCachedViewsStore()
 const router=useRouter()
 
 
-const {FroalaEditorIns,initFroalaEditor}=useInitFroalaEditor()
+const {lastFocusPosition,initFroalaEditor}=useInitFroalaEditor()
 
 let reportContentEditorIns=null//报告内容编辑器实例
 
@@ -69,6 +69,11 @@ const showReportInsertPop=ref(false)
  * chartType: chart-图表,sheet-表格
  */
 function handleInsert({list,type,chartType}){
+    reportContentEditorIns.events.focus()
+    if(lastFocusPosition.value){
+        reportContentEditorIns.selection.get().removeAllRanges()
+        reportContentEditorIns.selection.get().addRange(lastFocusPosition.value)
+    }
     if(type==='iframe'){
         let link;
         if(chartType==='chart'){
@@ -76,19 +81,19 @@ function handleInsert({list,type,chartType}){
             list.forEach(item => {
                 reportContentEditorIns.html.insert(`<p style='text-align:left; margin-top:10px;'>
 						<iframe src='${link}?code=${item}&fromPage=' width='100%' height='350' style='border-width:0px; min-height:350px;'></iframe>
-					</p>`,false)
+					</p>`)
             });
         }else if(chartType==='sheet'){
             link=import.meta.env.MODE==='production'?'https://chartlib.hzinsights.com/sheetshow':'https://charttest.hzinsights.com/sheetshow'
             list.forEach(item => {
                 reportContentEditorIns.html.insert(`<p style='text-align:left; margin-top:10px;'>
 						<iframe src='${link}?code=${item}' class='iframe${item}'  width='100%' style='border-width:0px;'></iframe>
-					</p>`,false)
+					</p>`)
             });
         }
     }else if(type==='img'){
         list.forEach(item=>{
-            reportContentEditorIns.html.insert(`<img style='width:100%' src='${item}' />`,false)
+            reportContentEditorIns.html.insert(`<img style='width:100%' src='${item}' />`)
         })
     }
 
@@ -365,6 +370,11 @@ async function reportPublish(id){
     flex-direction: column;
     overflow: hidden;
 }
+@media screen and (min-width:$media-width){
+    .add-report-page{
+        height: calc(100dvh - 60px);
+    }
+}
 .van-cell{
     flex-shrink: 0;
 }
@@ -378,6 +388,11 @@ async function reportPublish(id){
         height: 100%;
     }
 }
+@media screen and (min-width:$media-width){
+    .main-wrap{
+        margin-top: 15px;
+    }
+}
 .bot-action-box{
     padding: 20px 16PX;
     display: flex;
@@ -422,4 +437,33 @@ async function reportPublish(id){
         }
     }
 }
+@media screen and (min-width:$media-width){
+    .bot-action-box{
+        margin: 0 auto;
+        width: 600px;
+        padding: 10px 16px;
+        .left-box{
+            border-radius: 50px;
+            height: 56px;
+            margin-right: 10px;
+            padding: 0 10px;
+            .item{
+                font-size: 12px;
+                img{
+                    width: 20px;
+                    height: 20px;
+                    margin: 3px auto;
+                }
+            }
+        }
+        .right-btn{
+            width: 48px;
+            height: 48px;
+            svg{
+                width: 14px;
+                height: 14px;
+            }
+        }
+    }
+}
 </style>

+ 40 - 1
src/views/report/EditReport.vue

@@ -15,7 +15,7 @@ const router=useRouter()
 const route=useRoute()
 
 
-const {FroalaEditorIns,initFroalaEditor,frolaEditorContentChange}=useInitFroalaEditor()
+const {lastFocusPosition,initFroalaEditor,frolaEditorContentChange}=useInitFroalaEditor()
 let reportContentEditorIns=null//报告内容编辑器实例
 
 let autoSaveTimer=null
@@ -141,6 +141,11 @@ const showReportInsertPop=ref(false)
  * chartType: chart-图表,sheet-表格
  */
 function handleInsert({list,type,chartType}){
+    reportContentEditorIns.events.focus()
+    if(lastFocusPosition.value){
+        reportContentEditorIns.selection.get().removeAllRanges()
+        reportContentEditorIns.selection.get().addRange(lastFocusPosition.value)
+    }
     if(type==='iframe'){
         let link;
         if(chartType==='chart'){
@@ -434,6 +439,11 @@ async function reportPublish(id){
     flex-direction: column;
     overflow: hidden;
 }
+@media screen and (min-width:$media-width){
+    .add-report-page{
+        height: calc(100dvh - 60px);
+    }
+}
 .van-cell{
     flex-shrink: 0;
 }
@@ -491,4 +501,33 @@ async function reportPublish(id){
         }
     }
 }
+@media screen and (min-width:$media-width){
+    .bot-action-box{
+        margin: 0 auto;
+        width: 600px;
+        padding: 10px 16px;
+        .left-box{
+            border-radius: 50px;
+            height: 56px;
+            margin-right: 10px;
+            padding: 0 10px;
+            .item{
+                font-size: 12px;
+                img{
+                    width: 20px;
+                    height: 20px;
+                    margin: 3px auto;
+                }
+            }
+        }
+        .right-btn{
+            width: 48px;
+            height: 48px;
+            svg{
+                width: 14px;
+                height: 14px;
+            }
+        }
+    }
+}
 </style>

+ 29 - 37
src/views/report/List.vue

@@ -8,6 +8,7 @@ import { showToast,showDialog,Dialog } from 'vant';
 import { useRouter } from 'vue-router';
 import { useWindowSize } from '@vueuse/core'
 import {useCachedViewsStore} from '@/store/modules/cachedViews'
+import {reportFrequencyOpts} from './utils/config'
 const cachedViewsStore=useCachedViewsStore()
 
 const { width, height } = useWindowSize()
@@ -229,40 +230,6 @@ const statusDropMenuIns=ref(null)
 const showMoreFilter=ref(false)
 const temFrequencyVal=ref('')
 const temMsgIsSendVal=ref('')
-const frequencyOpt=[
-    {
-        label:'年度',
-        value:'年度'
-    },
-    {
-        label:'半年度',
-        value:'半年度'
-    },
-    {
-        label:'季度',
-        value:'季度'
-    },
-    {
-        label:'月度',
-        value:'月度'
-    },
-    {
-        label:'双周度',
-        value:'双周度'
-    },
-    {
-        label:'周度',
-        value:'周度'
-    },
-    {
-        label:'日度',
-        value:'日度'
-    },
-    {
-        label:'不定时',
-        value:'不定时'
-    },
-]//频度筛选项
 const reportStatusOpt=[
     {
         label:'已推送',
@@ -428,10 +395,10 @@ async function handleReportEdit(e){
                         <ul>
                             <li 
                                 :class="['item',temFrequencyVal==item.value?'item-active':'']" 
-                                v-for="item in frequencyOpt" 
+                                v-for="item in reportFrequencyOpts" 
                                 :key="item.value"
                                 @click="handleSelectFrequency(item)"
-                            >{{item.label}}</li>
+                            >{{item.text}}</li>
                             <li class="item" style="height:0"></li>
                         </ul>
                         <div class="bot-btn-box">
@@ -796,6 +763,12 @@ async function handleReportEdit(e){
 }
 
 @media screen and (min-width:$media-width){
+    .add-report-btn{
+        svg{
+            width: 14px;
+            height: 14px;
+        }
+    }
     .sticky-box{
         top: 60px;
         .bot-btn-box{
@@ -832,9 +805,21 @@ async function handleReportEdit(e){
                 margin-bottom: 12px;
             }
         }
+        .clear-filter-box{
+            padding: 0 17px;
+            height: 42px;
+            font-size: 14px;
+            .rocket{
+                width: 24px;
+                height: 24px;
+            }
+            .close-icon{
+                right: 17px;
+            }
+        }
     }
     .top-box{
-        padding: 30px;
+        padding: 15px;
         .menu-icon{
             width: 40px;
             height: 40px;
@@ -854,6 +839,13 @@ async function handleReportEdit(e){
             .title{
                 font-size: 16px;
                 line-height: 22px;
+                .tag{
+                    width: 50px;
+                    height: 22px;
+                    line-height: 22px;
+                    font-size: 14px;
+                    border-radius: 2px;
+                }
             }
             .inline-title{
                 margin-left: -14px;

+ 4 - 0
src/views/report/PreviewDetail.vue

@@ -194,6 +194,10 @@ async function goEdit(){
             padding: 0 10px;
             font-size: 14px;
         }
+        .edit-icon{
+            width: 35px;
+            height: 35px;
+        }
     }
 }
 </style>

+ 35 - 6
src/views/report/ReportDayWeekAdd.vue

@@ -4,7 +4,10 @@ import {ref,reactive} from 'vue'
 import { useRouter } from 'vue-router'
 import apiReport from '@/api/report'
 import { showToast } from 'vant'
+import { useWindowSize } from '@vueuse/core'
 
+
+const { width, height } = useWindowSize()
 const router=useRouter()
 
 // 基本数据
@@ -160,13 +163,23 @@ function close(){
     </van-popup>
 
     <!-- 创建日期 -->
-    <van-calendar
-        :min-date="minDate"
-        :default-date="defaultDate"
+    <van-popup 
         v-model:show="showCreateTimePop"
-        title="选择创建日期"
-        @confirm="handleConfirmCreatime" 
-    />
+        :position="width>650?'center':'bottom'"
+        :style="width>650?{ width: '400px'}:''"
+        round
+    >
+        <van-calendar
+            :poppable="false"
+            :min-date="minDate"
+            :default-date="defaultDate"
+            v-model:show="showCreateTimePop"
+            title="选择创建日期"
+            @confirm="handleConfirmCreatime"
+            :style="{ height: '500px' }"
+        />
+    </van-popup>
+    
 
     <!-- 作者 -->
     <van-popup
@@ -217,4 +230,20 @@ function close(){
         text-align: center;
     }
 }
+@media screen and (min-width:$media-width){
+    .dayweek-report-add{
+        height: calc(100dvh - 60px);
+        .bot-btns{
+            bottom: 24px;
+        }
+    }
+    .bot-btn{
+        margin: 0 10px;
+    }
+    .input-report-title-pop{
+        .bot-btns{
+            padding: 10px 0;
+        }
+    }
+}
 </style>

+ 45 - 5
src/views/report/chapter/Detail.vue

@@ -18,7 +18,7 @@ const router=useRouter()
 
 const userInfo=useUserInfo()
 
-const {initFroalaEditor,frolaEditorContentChange}=useInitFroalaEditor()
+const {lastFocusPosition,initFroalaEditor,frolaEditorContentChange}=useInitFroalaEditor()
 let reportContentEditorIns=null//报告内容编辑器实例
 
 let autoSaveTimer=null
@@ -242,6 +242,11 @@ const showReportInsertPop=ref(false)
  * chartType: chart-图表,sheet-表格
  */
 function handleInsert({list,type,chartType}){
+    reportContentEditorIns.events.focus()
+    if(lastFocusPosition.value){
+        reportContentEditorIns.selection.get().removeAllRanges()
+        reportContentEditorIns.selection.get().addRange(lastFocusPosition.value)
+    }
     if(type==='iframe'){
         let link;
         if(chartType==='chart'){
@@ -249,19 +254,19 @@ function handleInsert({list,type,chartType}){
             list.forEach(item => {
                 reportContentEditorIns.html.insert(`<p style='text-align:left; margin-top:10px;'>
 						<iframe src='${link}?code=${item}&fromPage=' width='100%' height='350' style='border-width:0px; min-height:350px;'></iframe>
-					</p>`,false)
+					</p>`)
             });
         }else if(chartType==='sheet'){
             link=import.meta.env.MODE==='production'?'https://chartlib.hzinsights.com/sheetshow':'https://charttest.hzinsights.com/sheetshow'
             list.forEach(item => {
                 reportContentEditorIns.html.insert(`<p style='text-align:left; margin-top:10px;'>
 						<iframe src='${link}?code=${item}' class='iframe${item}'  width='100%' style='border-width:0px;'></iframe>
-					</p>`,false)
+					</p>`)
             });
         }
     }else if(type==='img'){
         list.forEach(item=>{
-            reportContentEditorIns.html.insert(`<img style='width:100%' src='${item}' />`,false)
+            reportContentEditorIns.html.insert(`<img style='width:100%' src='${item}' />`)
         })
     }
 
@@ -585,5 +590,40 @@ async function handleReportOpt(type){
             margin: 0 10px;
         }
     }
-}   
+}
+@media screen and (min-width:$media-width){
+    .chapter-detail-edit-page{
+        height: calc(100dvh - 60px);
+    }
+    .main-wrap{
+        margin-top: 15px;
+    }
+    .bot-action-box{
+        margin: 0 auto;
+        width: 600px;
+        padding: 10px 16px;
+        .left-box{
+            border-radius: 50px;
+            height: 56px;
+            margin-right: 10px;
+            padding: 0 10px;
+            .item{
+                font-size: 12px;
+                img{
+                    width: 20px;
+                    height: 20px;
+                    margin: 3px auto;
+                }
+            }
+        }
+        .right-btn{
+            width: 48px;
+            height: 48px;
+            svg{
+                width: 14px;
+                height: 14px;
+            }
+        }
+    }
+}
 </style>

+ 11 - 2
src/views/report/chapter/List.vue

@@ -439,11 +439,20 @@ async function handleShowPoster(item){
 }
 
 @media screen and (min-width:$media-width){
+    .report-chapterlist-page{
+        .bot-btns{
+            padding: 10px 0;
+        }
+    }
     .chapter-list-wrap{
         border: none;
-        padding: 30px;
+        padding: var(--van-padding-md);
+        .list-lable{
+            font-size: 16px;
+            margin-bottom: 15px;
+        }
         .top-box{
-            margin-bottom: 27px;
+            margin-bottom: 15px;
             .btn{
                 width: 35px;
                 height: 35px;

+ 39 - 8
src/views/report/chapter/components/EditChapterBaseInfo.vue

@@ -2,6 +2,11 @@
 import { showToast } from "vant";
 import { computed, reactive,ref } from "vue";
 import apiReport from '@/api/report'
+import moment from "moment";
+import { useWindowSize } from '@vueuse/core'
+
+
+const { width, height } = useWindowSize()
 
 const props=defineProps({
     ticketData:{
@@ -32,7 +37,7 @@ const baseInfo=reactive({
     addType:props.defaultData.addType||1,
     ticket:[],
     author:props.defaultData.author||'',
-    createTime:props.defaultData.createTime||'',
+    createTime:props.defaultData.createTime||moment().format('YYYY-MM-DD'),
 })
 
 // 报告新增类型
@@ -59,7 +64,7 @@ const minDate=new Date(2015, 0, 1)
 const defaultDate=ref(new Date())
 const showCreateTimePop=ref(false)
 function handleShowCreatetime(){
-    defaultDate.value=new Date(baseInfo.createtime.replace(/-/g,'/'))
+    defaultDate.value=new Date(baseInfo.createTime.replace(/-/g,'/'))
     showCreateTimePop.value=true
 }
 function handleConfirmCreatime(e){
@@ -170,13 +175,21 @@ function handleSave(){
     />
 
     <!-- 创建日期 -->
-    <van-calendar
-        :min-date="minDate"
-        :default-date="defaultDate"
+    <van-popup 
         v-model:show="showCreateTimePop"
-        title="选择创建日期"
-        @confirm="handleConfirmCreatime" 
-    />
+        :position="width>650?'center':'bottom'"
+        :style="width>650?{ width: '400px'}:''"
+        round
+    >
+        <van-calendar
+            :poppable="false"
+            :min-date="minDate"
+            :default-date="defaultDate"
+            title="选择创建日期"
+            @confirm="handleConfirmCreatime"
+            :style="{ height: '500px' }"
+        />
+    </van-popup>
 
     <!-- 标题 -->
     <van-popup
@@ -200,6 +213,10 @@ function handleSave(){
         :style="{ height: '100%' }"
     >
         <div class="day-report-ticket-list-wrap">
+            <div v-if="ticketData.length==0">
+                <img class="list-empty-img" src="https://hzstatic.hzinsights.com/static/ETA_mobile/empty_img.png" alt="">
+                <p style="text-align:center;color:#999999;font-size:12px">暂无数据</p>
+            </div>
             <ul class="list">
                 <van-checkbox-group v-model="activeTicket">
                     <van-checkbox 
@@ -275,4 +292,18 @@ function handleSave(){
         }
     }
 }
+
+@media screen and (min-width:$media-width){
+    .chapter-baseinfo-wrap{
+        .bot-btns{
+            bottom: 24px;
+        }
+    }
+    .input-report-title-pop{
+        .bot-btns{
+            padding: 10px 0;
+        }
+    }
+
+}
 </style>

+ 31 - 6
src/views/report/chapter/components/EidtBaseInfo.vue

@@ -2,6 +2,10 @@
 import moment from 'moment'
 import {ref,reactive} from 'vue'
 import { showToast } from 'vant'
+import { useWindowSize } from '@vueuse/core'
+
+
+const { width, height } = useWindowSize()
 
 const props=defineProps({
     defaultData:null
@@ -109,13 +113,22 @@ function close(){
     </van-popup>
 
     <!-- 创建日期 -->
-    <van-calendar
-        :min-date="minDate"
-        :default-date="defaultDate"
+    <van-popup 
         v-model:show="showCreateTimePop"
-        title="选择创建日期"
-        @confirm="handleConfirmCreatime" 
-    />
+        :position="width>650?'center':'bottom'"
+        :style="width>650?{ width: '400px'}:''"
+        round
+    >
+        <van-calendar
+            :poppable="false"
+            :min-date="minDate"
+            :default-date="defaultDate"
+            title="选择创建日期"
+            @confirm="handleConfirmCreatime" 
+            :style="{ height: '500px' }"
+        />
+    </van-popup>
+    
 
     <!-- 作者 -->
     <van-popup
@@ -166,4 +179,16 @@ function close(){
         text-align: center;
     }
 }
+@media screen and (min-width:$media-width){
+    .dayweek-report-add{
+        .bot-btns{
+            bottom: 24px;
+        }
+    }
+    .input-report-title-pop{
+        .bot-btns{
+            padding: 10px 0;
+        }
+    }
+}
 </style>

+ 43 - 6
src/views/report/components/EditReportBaseInfo.vue

@@ -6,7 +6,10 @@ import apiReport from '@/api/report'
 import {reportFrequencyOpts} from '../utils/config'
 import { showToast } from "vant"
 import { useRoute } from "vue-router"
+import { useWindowSize } from '@vueuse/core'
 
+
+const { width, height } = useWindowSize()
 const route=useRoute()
 
 const props=defineProps({
@@ -240,13 +243,21 @@ function handleSave(){
     </van-popup>
 
     <!-- 创建日期 -->
-    <van-calendar
-        :min-date="minDate"
-        :default-date="defaultDate"
+    <van-popup 
         v-model:show="showCreateTimePop"
-        title="选择创建日期"
-        @confirm="handleConfirmCreatime" 
-    />
+        :position="width>650?'center':'bottom'"
+        :style="width>650?{ width: '400px'}:''"
+        round
+    >
+        <van-calendar
+            :poppable="false"
+            :min-date="minDate"
+            :default-date="defaultDate"
+            title="选择创建日期"
+            @confirm="handleConfirmCreatime" 
+            :style="{ height: '500px' }"
+        />
+    </van-popup>
 
     <!-- 标题 -->
     <van-popup
@@ -335,4 +346,30 @@ function handleSave(){
         text-align: center;
     }
 }
+
+@media screen and (min-width:$media-width){
+    .report-baseinfo-wrap{
+        .bot-btns{
+            bottom: 24px;
+        }
+    }
+    .select-author-pop{
+        .van-checkbox-group{
+            padding: $page-padding;
+            .van-checkbox{
+                :deep(.van-checkbox__label){
+                    padding: 16px 0;
+                }
+            }
+        }
+        .bot-btns{
+            padding: 10px 0;
+        }
+    }
+    .input-report-title-pop{
+        .bot-btns{
+            padding: 10px 0;
+        }
+    }
+}
 </style>

+ 29 - 0
src/views/report/components/reportInsert/ETAChart.vue

@@ -124,6 +124,8 @@ watch(
                     </svg>
 
                 </li>
+                <li class="chart-item" style="height:0;border:none;margin-bottom:0;padding:0"></li>
+                <li class="chart-item" style="height:0;border:none;margin-bottom:0;padding:0"></li>
             </ul>
         </div>
     </div>
@@ -190,4 +192,31 @@ watch(
         margin: var(--van-padding-sm);
     }
 }
+@media screen and (min-width:$media-width){
+    .ETA-chart-wrap{
+        .chart-list{
+            
+            .chart-item{
+                width: 260px;
+                border-width: 1px;
+                border-radius: 2px;
+                margin-bottom: 15px;
+                padding: 7px;
+                max-height: 220px;
+                .title{
+                    font-size: 14px;
+                    min-height: 30px;
+                }
+            }
+            .active{
+                svg{
+                    width: 14px;
+                    height: 14px;
+                    right: 11px;
+                    bottom: 11px;
+                }
+            }
+        }
+    }
+}
 </style>

+ 12 - 0
src/views/report/components/reportInsert/Index.vue

@@ -83,4 +83,16 @@ function handleConfirmInsert(){
         padding: 48px;
     }
 }
+@media screen and (min-width:$media-width){
+    .report-insert-content-wrap{
+        .top-type-box{
+            .item{
+                padding: 12px 0;
+            }
+        }
+        .bot-btn{
+            padding: 24px;
+        }
+    }
+}
 </style>

+ 39 - 0
src/views/report/components/reportInsert/MyETAChart.vue

@@ -94,6 +94,8 @@ watch(
                         <path d="M14.5 28C22.232 28 28.5 21.732 28.5 14C28.5 6.26801 22.232 0 14.5 0C6.76801 0 0.5 6.26801 0.5 14C0.5 21.732 6.76801 28 14.5 28ZM7.5 14.413L8.913 13L12.5 16.586L20.085 9L21.5 10.415L12.5 19.414L7.5 14.413Z" fill="#0052D9"/>
                     </svg>
                 </li>
+                <li class="chart-item" style="height:0;border:none;margin-bottom:0;padding:0"></li>
+                <li class="chart-item" style="height:0;border:none;margin-bottom:0;padding:0"></li>
             </ul>
         </div>
     </div>
@@ -192,4 +194,41 @@ watch(
         }
     }
 }
+
+@media screen and (min-width:$media-width){
+    .myETA-insert-wrap{
+        .chart-list{
+            max-height: 100%;
+            height: auto;
+            .chart-item{
+                width: 260px;
+                border-width: 1px;
+                border-radius: 2px;
+                margin-bottom: 15px;
+                padding: 7px;
+                max-height: 220px;
+                .title{
+                    font-size: 14px;
+                    min-height: 30px;
+                }
+            }
+            .active{
+                border-width: 1px;
+                svg{
+                    width: 14px;
+                    height: 14px;
+                    right: 11px;
+                    bottom: 11px;
+                }
+            }
+        }
+    }
+    .select-classify-wrap{
+        .list{
+            :deep(.van-radio__label){
+                padding: 16px 0;
+            }
+        }
+    }
+}
 </style>

+ 32 - 0
src/views/report/components/reportInsert/SandTableImg.vue

@@ -91,6 +91,8 @@ watch(
                     </svg>
 
                 </li>
+                <li class="chart-item" style="height:0;border:none;margin-bottom:0;padding:0"></li>
+                <li class="chart-item" style="height:0;border:none;margin-bottom:0;padding:0"></li>
             </ul>
         </div>
     </div>
@@ -145,4 +147,34 @@ watch(
         }
     }
 }
+@media screen and (min-width:$media-width){
+    .sandTableImg-insert-wrap{
+        .chart-list{
+            height: auto;
+            max-height: 100%;
+            .chart-item{
+                width: 260px;
+                border-width: 1px;
+                border-radius: 2px;
+                margin-bottom: 15px;
+                padding: 7px;
+                .title{
+                    font-size: 14px;
+                    min-height: 30px;
+                }
+                img{
+                    height: 150px;
+                }
+            }
+            .active{
+                svg{
+                    width: 14px;
+                    height: 14px;
+                    right: 11px;
+                    bottom: 11px;
+                }
+            }
+        }
+    }
+}
 </style>

+ 32 - 0
src/views/report/components/reportInsert/SheetTableChart.vue

@@ -88,6 +88,8 @@ watch(
                     </svg>
 
                 </li>
+                <li class="chart-item" style="height:0;border:none;margin-bottom:0;padding:0"></li>
+                <li class="chart-item" style="height:0;border:none;margin-bottom:0;padding:0"></li>
             </ul>
         </div>
     </div>
@@ -142,4 +144,34 @@ watch(
         }
     }
 }
+@media screen and (min-width:$media-width){
+    .sheet-insert-wrap{
+        .chart-list{
+            height: auto;
+            max-height: 100%;
+            .chart-item{
+                width: 260px;
+                border-width: 1px;
+                border-radius: 2px;
+                margin-bottom: 15px;
+                padding: 7px;
+                .title{
+                    font-size: 14px;
+                    min-height: 30px;
+                }
+                img{
+                    height: 150px;
+                }
+            }
+            .active{
+                svg{
+                    width: 14px;
+                    height: 14px;
+                    right: 11px;
+                    bottom: 11px;
+                }
+            }
+        }
+    }
+}
 </style>

+ 57 - 4
src/views/reportEn/AddReport.vue

@@ -14,7 +14,7 @@ const cachedViewsStore=useCachedViewsStore()
 const router=useRouter()
 const route=useRoute()
 
-const {frolaEditorContentChange,initFroalaEditor}=useInitFroalaEditor()
+const {lastFocusPosition,frolaEditorContentChange,initFroalaEditor}=useInitFroalaEditor()
 
 let reportContentIns=null//报告内容编辑器实例
 let overviewContentIns=null//overview内容编辑器实例
@@ -142,6 +142,11 @@ const showReportInsertPop=ref(false)
  * chartType: chart-图表,sheet-表格
  */
 function handleInsert({list,type,chartType}){
+    reportContentIns.events.focus()
+    if(lastFocusPosition.value){
+        reportContentIns.selection.get().removeAllRanges()
+        reportContentIns.selection.get().addRange(lastFocusPosition.value)
+    }
     if(type==='iframe'){
         let link;
         if(chartType==='chart'){
@@ -149,19 +154,19 @@ function handleInsert({list,type,chartType}){
             list.forEach(item => {
                 reportContentIns.html.insert(`<p style='text-align:left; margin-top:10px;'>
 						<iframe src='${link}?code=${item}&fromPage=en' width='100%' height='350' style='border-width:0px; min-height:350px;'></iframe>
-					</p>`,false)
+					</p>`)
             });
         }else if(chartType==='sheet'){
             link=import.meta.env.MODE==='production'?'https://chartlib.hzinsights.com/sheetshow':'https://charttest.hzinsights.com/sheetshow'
             list.forEach(item => {
                 reportContentIns.html.insert(`<p style='text-align:left; margin-top:10px;'>
 						<iframe src='${link}?code=${item}' class='iframe${item}'  width='100%' style='border-width:0px;'></iframe>
-					</p>`,false)
+					</p>`)
             });
         }
     }else if(type==='img'){
         list.forEach(item=>{
-            reportContentIns.html.insert(`<img style='width:100%' src='${item}' />`,false)
+            reportContentIns.html.insert(`<img style='width:100%' src='${item}' />`)
         })
     }
 
@@ -370,6 +375,11 @@ function reportPublish(id){
     flex-direction: column;
     overflow: hidden;
 }
+@media screen and (min-width:$media-width){
+    .reporten-add-page{
+        height: calc(100dvh - 60px);
+    }
+}
 .van-cell{
     flex-shrink: 0;
 }
@@ -383,6 +393,11 @@ function reportPublish(id){
         height: 100%;
     }
 }
+@media screen and (min-width:$media-width){
+    .main-wrap{
+        margin-top: 15px;
+    }
+}
 .bot-action-box{
     padding: 20px 16PX;
     display: flex;
@@ -427,6 +442,35 @@ function reportPublish(id){
         }
     }
 }
+@media screen and (min-width:$media-width){
+    .bot-action-box{
+        margin: 0 auto;
+        width: 600px;
+        padding: 10px 16px;
+        .left-box{
+            border-radius: 50px;
+            height: 56px;
+            margin-right: 10px;
+            padding: 0 10px;
+            .item{
+                font-size: 12px;
+                img{
+                    width: 20px;
+                    height: 20px;
+                    margin: 3px auto;
+                }
+            }
+        }
+        .right-btn{
+            width: 48px;
+            height: 48px;
+            svg{
+                width: 14px;
+                height: 14px;
+            }
+        }
+    }
+}
 
 .overview-edit-wrap{
     overflow: hidden;
@@ -445,5 +489,14 @@ function reportPublish(id){
         }
     }
 }
+@media screen and (min-width:$media-width){
+    .overview-edit-wrap{
+        padding: $page-padding;
+        .bot-btns{
+            padding-top: $page-padding;
+        }
+    }
+    
+}
 
 </style>

+ 1 - 6
src/views/reportEn/Detail.vue

@@ -182,14 +182,9 @@ async function goEdit(){
             padding: 0 10px;
             font-size: 14px;
         }
-        .btn-item{
+        .edit-icon{
             width: 35px;
             height: 35px;
-            margin-left: 20px;
-            img{
-                width: 24px;
-                height: 24px;
-            }
         }
     }
 }

+ 19 - 1
src/views/reportEn/List.vue

@@ -771,6 +771,12 @@ function handleGoEmailLog(e){
 }
 
 @media screen and (min-width:$media-width){
+    .add-report-btn{
+        svg{
+            width: 14px;
+            height: 14px;
+        }
+    }
     .sticky-box{
         top: 60px;
         .bot-btn-box{
@@ -807,9 +813,21 @@ function handleGoEmailLog(e){
                 margin-bottom: 12px;
             }
         }
+        .clear-filter-box{
+            padding: 0 17px;
+            height: 42px;
+            font-size: 14px;
+            .rocket{
+                width: 24px;
+                height: 24px;
+            }
+            .close-icon{
+                right: 17px;
+            }
+        }
     }
     .top-box{
-        padding: 30px;
+        padding: 15px;
         .menu-icon{
             width: 40px;
             height: 40px;

+ 35 - 6
src/views/reportEn/components/EditReportBaseInfo.vue

@@ -6,6 +6,9 @@ import apiReportEn from '@/api/reportEn'
 import {reportFrequencyOpts} from '@/views/report/utils/config'
 import { showToast } from "vant"
 import { useRoute } from "vue-router"
+import { useWindowSize } from '@vueuse/core'
+
+const { width, height } = useWindowSize()
 
 const route=useRoute()
 
@@ -239,13 +242,21 @@ function handleSave(){
     </van-popup>
 
     <!-- 创建日期 -->
-    <van-calendar
-        :min-date="minDate"
-        :default-date="defaultDate"
+    <van-popup 
         v-model:show="showCreateTimePop"
-        title="选择创建日期"
-        @confirm="handleConfirmCreatime" 
-    />
+        :position="width>650?'center':'bottom'"
+        :style="width>650?{ width: '400px'}:''"
+        round
+    >
+        <van-calendar
+            :poppable="false"
+            :min-date="minDate"
+            :default-date="defaultDate"
+            title="选择创建日期"
+            @confirm="handleConfirmCreatime"
+            :style="{ height: '500px' }"
+        />
+    </van-popup>
 
     <!-- 标题 -->
     <van-popup
@@ -334,4 +345,22 @@ function handleSave(){
         text-align: center;
     }
 }
+
+@media screen and (min-width:$media-width){
+    .report-baseinfo-wrap{
+        .bot-btns{
+            bottom: 24px;
+        }
+    }
+    .select-author-pop{
+        .van-checkbox-group{
+            padding: $page-padding;
+            .van-checkbox{
+                :deep(.van-checkbox__label){
+                    padding: 16px 0;
+                }
+            }
+        }
+    }
+}
 </style>