Преглед на файлове

Merge branch 'eta2.6.9' into debug

shanbinzhang преди 1 ден
родител
ревизия
7f8921fb96

+ 10 - 10
src/router/report.js

@@ -71,16 +71,16 @@ export const reportRoutes=[
             hasBackTop:true
         },
     },
-    {
-        path:"/report/chapter/preview",
-        name:"ReportChapterDetail",
-        component: () => import("@/views/report/chapter/Preview.vue"),
-        meta: { 
-            title: "中文研报",
-            keepAlive:false,
-            hasBackTop:true
-        },
-    },
+    // {
+    //     path:"/report/chapter/preview",
+    //     name:"ReportChapterDetail",
+    //     component: () => import("@/views/report/chapter/Preview.vue"),
+    //     meta: { 
+    //         title: "中文研报",
+    //         keepAlive:false,
+    //         hasBackTop:true
+    //     },
+    // },
     {
         path:"/report/search",
         name:"ReportSearch",

+ 0 - 224
src/views/report/Detail.vue

@@ -1,224 +0,0 @@
-<script setup name="reportDetail">
-import {ref} from 'vue'
-import { useRoute } from "vue-router";
-import apiReport from '@/api/report'
-import ReportPublishPop from './components/ReportPublishPop.vue'
-import AudioBox from './components/AudioBox.vue'
-import { showToast,showDialog } from 'vant';
-import {useCachedViewsStore} from '@/store/modules/cachedViews'
-const cachedViewsStore=useCachedViewsStore()
-
-const route=useRoute()
-
-// 获取报告详情
-let reportInfo=ref(null)
-async function getReportDetail(){
-    const res=await apiReport.getReportDetail({ReportId:Number(route.query.id)})
-    if(res.Ret===200){
-        reportInfo.value=res.Data
-        document.title=res.Data.Title
-    }
-}
-getReportDetail()
-
-
-// 发布报告
-const showPublishPop=ref(false)
-
-// 取消发布
-function handleReportPublishCancle(){
-    showDialog({
-        title: '提示',
-        message: `是否确认撤销发布?`,
-        showCancelButton:true
-    }).then(()=>{
-        apiReport.reportPublishCancle({ReportIds:Number(route.query.id)}).then(res=>{
-            if(res.Ret===200){
-                getReportDetail()
-            }
-        })
-    })
-}
-
-// 发布弹窗关闭
-function handlePublishPopClose(refresh){
-    if(refresh){
-        getReportDetail()
-    }
-    showPublishPop.value=false
-}
-
-// 删除报告
-function handleDelReport(){
-    showDialog({
-        title: '提示',
-        message: '删除操作不可恢复,确认删除吗?',
-        showCancelButton:true
-    }).then(() => {
-        // on close
-        apiReport.reportDel({ReportIds:Number(route.query.id)}).then(res=>{
-            if(res.Ret===200){
-                showToast('删除成功')
-                cachedViewsStore.removeCaches('ReportList')
-                setTimeout(() => {
-                    router.back()
-                }, 1500);
-            }
-        })
-    }).catch(()=>{})
-}
-
-// 推送消息
-function handleReportSendMsg(){
-    apiReport.reportMessageSend({
-        ReportId:Number(route.query.id)
-    }).then(res=>{
-        if(res.Ret===200){
-            showToast('推送成功')
-            getReportDetail()
-        }
-    })
-}
-
-</script>
-
-<template>
-    <div class="report-detail-page" v-if="reportInfo">
-        <div class="top-stage-box">
-            <span class="stage">第{{reportInfo.Stage}}期 / {{reportInfo.Frequency}}</span>
-            <template v-if="reportInfo.State===1">
-                <!-- 删除 -->
-                <div class="btn-item red-bg" @click="handleDelReport">
-                    <img src="@/assets/imgs/icon_del.png" alt="">
-                </div>
-                <!-- 发布 -->
-                <div class="btn-item" @click="showPublishPop=true">
-                    <img src="@/assets/imgs/report/icon_publish.png" alt="">
-                </div>
-            </template>
-            <template v-if="reportInfo.State===2">
-                <!-- 推送消息 -->
-                <div class="btn-item" v-if="!reportInfo.MsgIsSend" @click="handleReportSendMsg">
-                    <img src="@/assets/imgs/report/icon_sendmsg2.png" alt="">
-                </div>
-                <!-- 取消发布 -->
-                <div class="btn-item red-bg" @click="handleReportPublishCancle">
-                    <img src="@/assets/imgs/report/icon_publish_cancel2.png" alt="">
-                </div>
-            </template>
-        </div>
-        <h1 class="report-title">{{reportInfo.Title}}</h1>
-        <div class="auth-box">
-            <span>{{reportInfo.Author}}</span>
-            <span>{{reportInfo.PublishTime}}</span>
-        </div>
-        <!-- 音频 -->
-        <AudioBox :url="reportInfo.VideoUrl" v-if="reportInfo.VideoUrl"/>
-        <div class="report-abstract">{{reportInfo.Abstract}}</div>
-        <div class="report-html-wrap" v-html="reportInfo.Content"></div>
-    </div>
-    <!-- 报告发布弹窗 -->
-    <van-popup 
-        v-model:show="showPublishPop"
-        position="center"
-        round
-    >
-        <ReportPublishPop :reportData="reportInfo" @close="handlePublishPopClose"/>
-    </van-popup> 
-</template>
-
-<style lang="scss" scoped>
-.report-detail-page{
-    padding: 30px 34px;
-    .report-title{
-        margin: 30px 0;
-        font-weight: 600;
-        font-size: 42px;
-        line-height: 56px;
-    }
-    .auth-box{
-        display: flex;
-        justify-content: space-between;
-        font-size: $font-grey;
-        font-size: 36px;
-        padding-bottom: 40px;
-        border-bottom: 1px solid $border-color;
-        margin-bottom: 40px;
-    }
-    .report-abstract{
-        font-size: 34px;
-        line-height: 54px;
-        margin: 40px 0;
-    }
-}
-.top-stage-box{
-    .stage{
-        display: inline-block;
-        background-color: #F2F3FF;
-        border-radius: 8px;
-        height: 72px;
-        line-height: 72px;
-        padding: 0 20px;
-        font-size: 28px;
-    }
-    .btn-item{
-        float: right;
-        width: 70px;
-        height: 70px;
-        border-radius: 50%;
-        display: flex;
-        justify-content: center;
-        align-items: center;
-        background-color: #F2F3FF;
-        margin-left: 40px;
-        img{
-            width: 48px;
-            height: 48px;
-        }
-    }
-    .red-bg{
-        background-color: #FFF2F2;
-    }
-}
-
-@media screen and (min-width:$media-width){
-    .report-detail-page{
-        max-width: 800px;
-        margin: 0 auto;
-        padding: 30px;
-        .report-title{
-            margin: 15px 0;
-            font-size: 21px;
-            line-height: 28px;
-        }
-        .auth-box{
-            font-size: 18px;
-            padding-bottom: 20px;
-            margin-bottom: 20px;
-        }
-        .report-abstract{
-            font-size: 17px;
-            line-height: 27px;
-            margin: 20px 0;
-        }
-    }
-    .top-stage-box{
-        .stage{
-            border-radius: 4px;
-            height: 36px;
-            line-height: 36px;
-            padding: 0 10px;
-            font-size: 14px;
-        }
-        .btn-item{
-            width: 35px;
-            height: 35px;
-            margin-left: 20px;
-            img{
-                width: 24px;
-                height: 24px;
-            }
-        }
-    }
-}
-</style>

+ 0 - 582
src/views/report/chapter/Detail.vue

@@ -1,582 +0,0 @@
-<script setup name="reportChapterDetail">
-import {ref,onMounted,onUnmounted, reactive, nextTick} from 'vue'
-import apiReport from '@/api/report'
-import apiChart from '@/api/chart'
-import { useRoute, useRouter } from 'vue-router'
-import EditChapterBaseInfo from './components/EditChapterBaseInfo.vue'
-import AudioBox from '../components/AudioBox.vue'
-import ReportInsertContent from '../components/reportInsert/Index.vue'
-import moment from 'moment'
-import {useInitFroalaEditor} from '@/hooks/useFroalaEditor'
-import {useUserInfo,isWeiXin} from '@/hooks/common'
-import { showToast,showDialog } from 'vant'
-import {useUploadFileToOSS} from '@/hooks/useUploadFileToOSS'
-import MD5 from 'js-md5'
-import {reportManageBtn} from '@/hooks/useAuthBtn'
-import {usePublicSettingStore} from '@/store/modules/publicSetting'
-
-const route=useRoute()
-const router=useRouter()
-
-const userInfo=useUserInfo()
-const publicSettingStore = usePublicSettingStore()
-
-const {lastFocusPosition,initFroalaEditor,imgUploadFlag,frolaEditorContentChange}=useInitFroalaEditor()
-let reportContentEditorIns=null//报告内容编辑器实例
-
-let autoSaveTimer=null
-
-onMounted(() => {
-    getChapterDetail()
-    autoSaveTimer=setInterval(() => {
-        autoSaveReportContent()
-    }, 6000);
-})
-onUnmounted(()=>{
-    clearInterval(autoSaveTimer)
-})
-// 自动保存
-function autoSaveReportContent(e){
-    if(!e&&!frolaEditorContentChange.value) return
-    if(!imgUploadFlag.value){
-        e==='cg'&&showToast('有图片未上传完成,请稍等')
-        return
-    }
-    let arr=[]
-    ticketList.value.forEach(item=>{
-        let obj={
-            ticker:'',
-            sort:1,
-            lable:''
-        }
-        if(item.Selected){
-            obj.ticker=item.BaseColumnTicker
-			obj.sort=arr.length+1
-			obj.lable=item.BaseColumnName
-			arr.push(obj)
-        }
-    })
-    //如果富文本中有未上传完成的图片,去除这个dom
-	$('.fr-element').find('img.fr-uploading').length&&$('.fr-element').find('img.fr-uploading').remove()
-    apiReport.chapterDetailSave({
-        ReportChapterId: Number(route.query.id),
-		Title:chapterBaseInfo.title,
-		AddType:chapterBaseInfo.addType,
-		Author:chapterBaseInfo.author,
-		CreateTime:chapterBaseInfo.createTime,
-		TickerList:arr,
-		Content: $('.fr-element').html(),
-		VideoUrl:chapterBaseInfo.audioUrl,
-		VideoName:`${chapterBaseInfo.title}(${moment().format('MMDD')})`,
-		VideoPlaySeconds:Number(chapterBaseInfo.audioDuration).toFixed(2).toString(),
-		VideoSize:Number(chapterBaseInfo.audioSize).toFixed(2).toString()
-    }).then(res=>{
-        if(res.Ret===200){
-            if(e==='cg'){
-                showToast('保存成功')
-            }
-        }
-        frolaEditorContentChange.value=false
-    })
-}
-
-
-let info=ref(null)
-function getChapterDetail(){
-    apiReport.getChapterDetail({
-        ReportChapterId:Number(route.query.id)
-    }).then(res=>{
-        if(res.Ret===200){
-            info.value=res.Data
-            document.title=`${res.Data.ClassifyNameFirst}-${res.Data.TypeName}`
-
-            chapterBaseInfo.type=res.Data.TypeName
-            chapterBaseInfo.title=res.Data.Title
-            chapterBaseInfo.addType=res.Data.AddType
-            chapterBaseInfo.author=res.Data.Author||userInfo.value.RealName
-            chapterBaseInfo.createTime=moment(res.Data.CreateTime).format('YYYY-MM-DD')
-            if(res.Data.VideoKind==1){
-                chapterBaseInfo.audioUrl=res.Data.VideoUrl
-                chapterBaseInfo.audioDuration=res.Data.VideoPlaySeconds
-                chapterBaseInfo.audioSize=res.Data.VideoSize
-            }
-
-            // 晨报获取指标数据
-            if(res.Data.ReportType=='day'){
-                getDayTicketList()
-            }
-            
-            // 由于周报有个上传音频区域 所以得在此处初始化富文本区域 不然高度有问题
-            nextTick(()=>{
-                const el=document.getElementById('editor')
-                reportContentEditorIns=initFroalaEditor('#editor',{height:el.offsetHeight-150})
-                setTimeout(() => {
-                    reportContentEditorIns.html.set(res.Data.Content);
-                }, 100);
-            })
-            
-        }
-    })
-}
-
-// 获取晨报指标数据
-let ticketList=ref([])
-async function getDayTicketList(){
-    const res=await apiReport.chapterDayReportTicketList({
-        ReportChapterId:info.value.ReportChapterId
-    })
-    if(res.Ret===200){
-        ticketList.value=res.Data||[]
-    }
-}
-
-// 报告基本内容
-const showChapterBaseInfo=ref(false)
-const chapterBaseInfo=reactive({
-    type:'',
-    title:'',
-    addType:'',
-    author:'',
-    createTime:'',
-    audioUrl:'',
-    audioDuration:0,
-    audioSize:0,
-})
-
-// 上传音频
-const showUploadAudio=ref(false)
-const temAudioData=reactive({
-    time:0,
-    size:0,
-    url:'',
-})
-function handleShowUploadAudio(){
-    temAudioData.time=chapterBaseInfo.audioDuration
-    temAudioData.size=chapterBaseInfo.audioSize
-    temAudioData.url=chapterBaseInfo.audioUrl
-    showUploadAudio.value=true
-}
-// 获取音频时长
-function handleGetAudioDuration(file){
-    return new Promise((resolve,reject)=>{
-        if(isWeiXin()){
-            console.log('微信?');
-            resolve(0)
-        }
-
-        const fileUrl=URL.createObjectURL(file)
-        const audioEl=new Audio(fileUrl)
-        audioEl.addEventListener('loadedmetadata',(e)=>{
-            console.log('e.path',e.path)
-            console.log('e.composedPath',e.composedPath())
-            console.log('获取音频时长',e.composedPath()[0].duration);
-            console.log(audioEl.duration);
-            const t=e.composedPath()[0].duration
-            resolve(t)
-        })
-    })
-}
-function handleAudioUploadBeforeRead(e){
-    const allowedTypes = ['audio/mpeg', 'audio/mp4','audio/aac','audio/x-m4a','audio/wav']
-    //由于部分安卓机的部分浏览器无法获取到文件类型,无法判断故先去除判断
-    // if(!allowedTypes.includes(e.type)){
-    //     showToast('上传失败,上传音频格式不正确')
-    //     return false
-    // }
-    return true
-}
-async function handleAudioUploadAfterRead(e){
-    // console.log(e);
-    const duration=await handleGetAudioDuration(e.file)
-    // if(duration>60*15){
-    //     showToast('音频时长不得超过15分钟')
-    //     return
-    // }
-    temAudioData.time=duration||0
-    temAudioData.size=e.file.size/1024/1024 //单位MB
-    temAudioData.name=e.file.name
-    console.log('音频数据temAudioData',temAudioData);
-    // 生成文件名
-    const t=new Date().getTime().toString()
-    const temName=`static/yb/audio/${import.meta.env.MODE}/${MD5(t)}.${e.file.type.split('/')[1]}`
-    console.log(temName);
-    temAudioData.url=await useUploadFileToOSS(e.file,temName)
-}
-function handleUpdateAudio(){
-    chapterBaseInfo.audioUrl=temAudioData.url
-    chapterBaseInfo.audioDuration=temAudioData.time
-    chapterBaseInfo.audioSize=temAudioData.size
-    showUploadAudio.value=false
-}
-//更新下音频时长
-function handleUpdateAudioTime(e){
-    temAudioData.time=e
-}
-
-// 报告插入数据弹窗
-const showReportInsertPop=ref(false)
-/**
- * list:[UniqueCode] 图表code
- * type:iframe/img 插入的为iframe或者图片
- * 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=publicSettingStore.publicSetting.ChartViewUrl;
-        if(chartType==='chart'){
-            // link=import.meta.env.MODE==='production'?'https://chartlib.hzinsights.com/chartshow':'https://charttest.hzinsights.com/chartshow'
-            link=link+'/chartshow'
-            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>`)
-            });
-        }else if(chartType==='sheet'){
-            // link=import.meta.env.MODE==='production'?'https://chartlib.hzinsights.com/sheetshow':'https://charttest.hzinsights.com/sheetshow'
-            link=link+'/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>`)
-            });
-        }
-    }else if(type==='img'){
-        list.forEach(item=>{
-            reportContentEditorIns.html.insert(`<img style='width:100%' src='${item}' />`)
-        })
-    }
-
-    showReportInsertPop.value=false
-}
-
-// 更新sheet表格高度
-function reInitSheetIframe(e){
-    const { height,code } = e.data;
-    let iframeDom = document.getElementsByClassName(`iframe${code}`)
-    Array.prototype.forEach.call(iframeDom, function (ele) {
-        ele.height = `${height+45}px`;
-    });
-}
-onMounted(()=>{
-    window.addEventListener('message',reInitSheetIframe)
-})
-onUnmounted(()=>{
-    window.removeEventListener('message',reInitSheetIframe)
-})
-
-// 刷新所有图表
-async function handleRefreshAllChart(){
-    let code_arr = [];
-    $('iframe').each((k,i) => {
-        try {
-          let href = $(i).attr('src');
-          code_arr.push(href.slice(href.indexOf('code=') + 5));
-        } catch (err) {
-        }
-    });
-    if(!code_arr.length) return showToast('请插入图表');
-    
-    if(route.query.id) {
-        let res = await apiChart.getReportrefreshStatus({
-            Source: 'report',
-            ReportId: Number(route.query.id),
-            ReportChapterId: 0
-        });
-        
-        if(!res.Data.RefreshResult) return showToast('图表正在刷新中,请勿重复操作')
-    }
-    const res=await apiChart.refreshChartMultiple({ChartInfoCode:code_arr})
-    if(res.Ret===200){
-        $('iframe').each((k,i) => {
-          $(i).attr('src',$(i).attr('src'))
-        });
-        showToast('刷新成功')
-    }
-}
-
-//周报校验是否上传了音频
-function handleWeekValidAudio(){
-    return new Promise((resolve,reject)=>{
-        showDialog({
-            title: '发布提示',
-            message: '您还未上传录音文件,确定发布报告吗?',
-            showCancelButton:true
-        }).then(()=>{
-            resolve(true)
-        }).catch(()=>{
-            resolve(false)
-        })
-    })
-}
-
-// 发布章节报告
-async function chapterReportPublish(PublishReport){
-    let arr=[]
-    ticketList.value.forEach(item=>{
-        let obj={
-            ticker:'',
-            sort:1,
-            lable:''
-        }
-        if(item.Selected){
-            obj.ticker=item.BaseColumnTicker
-			obj.sort=arr.length+1
-			obj.lable=item.BaseColumnName
-			arr.push(obj)
-        }
-    })
-    //如果富文本中有未上传完成的图片,去除这个dom
-	$('.fr-element').find('img.fr-uploading').length&&$('.fr-element').find('img.fr-uploading').remove()
-    const res=await apiReport.chapterReportPublish({
-        ReportChapterId: Number(route.query.id),
-		Title:chapterBaseInfo.title,
-		AddType:chapterBaseInfo.addType,
-		Author:chapterBaseInfo.author,
-		CreateTime:chapterBaseInfo.createTime,
-		TickerList:arr,
-		Content: $('.fr-element').html(),
-        PublishReport:PublishReport,
-		VideoUrl:chapterBaseInfo.audioUrl,
-		VideoName:`${chapterBaseInfo.title}(${moment().format('MMDD')})`,
-		VideoPlaySeconds:Number(chapterBaseInfo.audioDuration).toFixed(2).toString(),
-		VideoSize:Number(chapterBaseInfo.audioSize).toFixed(2).toString()
-    })
-    if(res.Ret===200){
-        showToast('发布成功')
-        setTimeout(() => {
-            router.back()
-        }, 1000);
-    }
-}
-
-// 发布报告-fb;保存-cg;预览-yl
-async function handleReportOpt(type){
-    if(type==='yl'){
-
-        const params={
-            Title:chapterBaseInfo.title,
-            Author:chapterBaseInfo.author,
-            PublishTime:chapterBaseInfo.createTime,
-            Abstract:'',
-            Content:$('.fr-element').html()
-        }
-        if(!params.Title){
-            showToast('请填写标题')
-            return
-        }
-        sessionStorage.setItem('reportPreData',JSON.stringify(params))
-        const routerEl=router.resolve({
-            path:'/report/preview',
-            query:{
-                id:-1
-            }
-        })
-        window.open(routerEl.href,'_blank')
-        return
-    }
-    if(type==='cg'){
-        autoSaveReportContent('cg')
-    }
-    if(type==='fb'){
-        if(info.value.ReportType==='week'&&!chapterBaseInfo.audioUrl){
-            const validRes=await handleWeekValidAudio()
-            if(!validRes) return
-        }
-        const res=await apiReport.chapterReportIsLast({ReportChapterId:info.value.ReportChapterId})
-        if(res.Ret===200){
-            if(res.Data){
-                showDialog({
-                    title: '发布提示',
-                    message: '本期报告品种已全部更新,点击发布将同时发布周报,确认同时发布吗?',
-                    showCancelButton:true
-                }).then(()=>{
-                    chapterReportPublish(1)
-                }).catch(()=>{
-                    chapterReportPublish(0)
-                })
-            }else{
-                chapterReportPublish(0)
-            }
-        }
-    }
-}
-
-</script>
-
-<template>
-    <div class="chapter-detail-edit-page">
-        <!-- <van-cell title="章节基础配置" is-link @click="showChapterBaseInfo=true"/> -->
-        <van-cell title="上传音频" is-link v-if="info?.ReportType==='week'" @click="handleShowUploadAudio"/>
-        <div class="main-wrap">
-            <div class="editor-box" id="editor"></div>
-        </div>
-        <!-- 底部操作 -->
-        <div class="bot-action-box">
-            <div class="left-box">
-                <div class="item" @click="handleRefreshAllChart">
-                    <img src="@/assets/imgs/report/icon_refresh.png" alt="">
-                    <span>刷新</span>
-                </div>
-                <div class="item" @click="handleReportOpt('yl')" v-permission="reportManageBtn.reportManage_reportView">
-                    <img src="@/assets/imgs/report/icon_preview.png" alt="">
-                    <span>预览</span>
-                </div>
-                <div class="item" @click="handleReportOpt('cg')">
-                    <img src="@/assets/imgs/report/icon_save2.png" alt="">
-                    <span>保存</span>
-                </div>
-                <div class="item" @click="handleReportOpt('fb')" v-permission="reportManageBtn.reportManage_publish">
-                    <img src="@/assets/imgs/report/icon_publish3.png" alt="">
-                    <span>发布</span>
-                </div>
-            </div>
-            <div class="right-btn" @click="showReportInsertPop=true">
-                <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
-                    <path d="M12.0499 15.9499V27.5H15.9499V15.9499H27.5V12.0499H15.9499V0.5H12.0499V12.0499H0.5V15.9499H12.0499Z" fill="white"/>
-                </svg>
-            </div>
-        </div>
-    </div>
-
-    <!-- 报告插入数据模块 -->
-    <van-popup
-        v-model:show="showReportInsertPop"
-        position="bottom"
-        round
-    >
-        <report-insert-content v-if="showReportInsertPop" @insert="handleInsert"/>
-    </van-popup>
-</template>
-
-<style lang="scss" scoped>
-.chapter-detail-edit-page{
-    height: 100dvh;
-    min-height: 95vh;
-    display: flex;
-    flex-direction: column;
-    overflow: hidden;
-}
-.van-cell{
-    flex-shrink: 0;
-}
-.main-wrap{
-    flex: 1;
-    width: calc(100% - 32PX);
-    margin: 0 auto;
-    margin-top: 30px;
-    .editor-box{
-        width: 100%;
-        height: 100%;
-    }
-}
-.bot-action-box{
-    padding: 20px 16PX;
-    display: flex;
-    align-items: center;
-    .left-box{
-        flex: 1;
-        background: #FFFFFF;
-        box-shadow: 0px 12px 60px 10px rgba(0, 0, 0, 0.05), 0px 32px 48px 4px rgba(0, 0, 0, 0.04), 0px 16px 20px -10px rgba(0, 0, 0, 0.08);
-        border-radius: 100px;
-        height: 112px;
-        display: flex;
-        align-items: center;
-        margin-right: 20px;
-        padding: 0 20px;
-        .item{
-            flex: 1;
-            text-align: center;
-            font-size: 20px;
-            img{
-                width: 40px;
-                height: 40px;
-                display: block;
-                margin: 5px auto;
-            }
-        }
-    }
-    .right-btn{
-        flex-shrink: 0;
-        position: relative;
-        width: 96px;
-        height: 96px;
-        background-color: $theme-color;
-        border-radius: 50%;
-        box-shadow: 0px 6px 28px 4px rgba(0, 0, 0, 0.05), 0px 16px 20px 2px rgba(0, 0, 0, 0.06), 0px 10px 10px -6px rgba(0, 0, 0, 0.1);
-        svg{
-            width: 27px;
-            height: 27px;
-            position: absolute;
-            top: 50%;
-            left: 50%;
-            transform: translate(-50%,-50%);
-        }
-    }
-}
-
-.upload-audio-wrap{
-    height: 100%;
-    position: relative;
-    overflow: hidden;
-    padding: $page-padding;
-    p{
-        color: rgba(0, 0, 0, 0.6);
-        padding-bottom: 32px;
-        border-bottom: 1px solid $border-color;
-        margin-bottom: 32px;
-        word-wrap: break-word;
-    }
-    .bot-btns{
-        // width: 100%;
-        position: absolute;
-        bottom: 0;
-        padding: 20px 0;
-        text-align: center;
-        .bot-btn{
-            width: 315px;
-            margin: 0 10px;
-        }
-    }
-}
-@media screen and (min-width:$media-width){
-    .chapter-detail-edit-page{
-        height: calc(100dvh - 60px);
-        min-height: calc(95vh - 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 - 0
src/views/report/components/reportInsert/Index.vue

@@ -34,6 +34,16 @@ const typeOpt=ref([
         label:'平衡表',
         path:'sheetBalanceList'
     },
+    {
+        value:'统计分析',
+        label:'统计分析',
+        path:''
+    },
+    {
+        value:'商品价格曲线',
+        label:'商品价格曲线',
+        path:'commordityChartBase'
+    },
     {
         value:'AI预测模型',
         label:'AI预测模型',
@@ -139,6 +149,7 @@ function handleConfirmInsert(){
             <SemanticsImg @update="handleSelectChart" v-if="activeType==='语义分析插入'"/>
             <MaterialImg @update="handleSelectChart" v-if="activeType==='素材库'"/>
             <BalanceSheet @update="handleSelectChart" @insert="handleConfirmInsert" v-if="activeType==='平衡表'"/>
+            <ETAForumChart @update="handleSelectChart" v-if="activeType==='etaForum'"/>
             <AIForecastingModel @update="handleSelectChart" v-if="activeType==='AI预测模型'"/>
         </div>
         <div class="bot-btn" v-if="activeType!=='平衡表'">

+ 1 - 1
src/views/report/freeReport/freeReportPreview.vue

@@ -189,7 +189,7 @@ onUnmounted(() => {
     <div class="free-report-scale-outer" :style="{ height: contentHeight + 'px',fontSize:'14px', }">
         <div class="free-report-detail" ref="scaleContainer" :style="scaleStyle">
             <div id="reportdtl" class="main-box" style="width: 1202px;">
-                <div v-for="(item,index) in pageList" :key="index + 1" class="report-content-box" :style="{backgroundColor:bgColor,height:'1697px'}">
+                <div v-for="(item,index) in pageList" :key="index + 1" class="report-content-box" :style="{backgroundColor:bgColor,aspectRatio: reportInfo.FreeReportRatio||'7/10'}">
                     <!-- 版头 -->
                     <div class="border-wrap" style="min-height: 30px;max-height: 100px;" v-if="showHeaderWrap(item)">
                         <div class="page-header-wrap" style="min-height: 30px;max-height: 100px;" v-html="pageConfig.pageEditObject.header.html"></div>