Explorar o código

用户未登录状态控制

jwyu hai 2 meses
pai
achega
cb446ce54e

+ 3 - 2
src/api/index.js

@@ -15,7 +15,7 @@ function handleNoToken() {
   }
   // 目前只有报告详情所以写死回跳地址吧
   const redirectUrl=urlParams.reportid?encodeURIComponent(`/pages-report/reportDetail/index?id=${urlParams.reportid}`):''
-  console.log('408 回跳地址:',redirectUrl);
+  console.log('401 回跳地址:',redirectUrl);
   setTimeout(() => {
     wx.miniProgram.navigateTo({
       url: `/pages/user/refreshToken?redirectUrl=${redirectUrl}`,
@@ -95,7 +95,8 @@ _axios.interceptors.response.use(
         Toast("服务器开了个小差");
       }, 100);
     }
-    if (data.Ret === 408) {
+    // 401 token失效 408 用户未登录
+    if (data.Ret === 401) {
       //token失效
       setTimeout(() => {
         Toast(data.Msg);

+ 1 - 1
src/components/PreviewPDF.vue

@@ -42,7 +42,7 @@ async function loadPage(pageNum) {
     loadingPages.value.push(pageNum)
     try {
       const page = await pdfDoc.getPage(pageNum);
-      const viewport = page.getViewport({ scale: 1 });
+      const viewport = page.getViewport({ scale: 2.5 });
       const canvas = document.getElementById(`pdfCanvas${pageNum-1}`)
       const context = canvas.getContext("2d");
 

+ 0 - 10
src/router/modules/chart.js

@@ -1,10 +0,0 @@
-export default[
-  {
-    path:'/chart/detail',
-    component:()=>import('@/views/chart/Detail.vue'),
-    name:'ChartDetail',
-    meta:{
-      title:'图表详情'
-    },
-  }
-]

+ 1 - 9
src/router/modules/report.js

@@ -7,18 +7,10 @@ export default[
       title:'报告详情'
     },
   },
-  {
-    path:'/report/htpdf',
-    component:()=>import('@/views/report/HT_PDF.vue'),
-    name:'ReportHTPDF',
-    meta:{
-      title:'报告详情'
-    },
-  },
   {
     path:'/report/pdf',
     component:()=>import('@/views/report/PDF.vue'),
-    name:'ReportPDFDetail',
+    name:'ReportPDF',
     meta:{
       title:'报告详情'
     },

+ 0 - 200
src/views/chart/Detail.vue

@@ -1,200 +0,0 @@
-<script setup>
-import { useRoute } from 'vue-router'
-import apiChart from '@/api/modules/chart'
-import apiCommon from '@/api/modules/common'
-import { Message } from 'tdesign-mobile-vue';
-
-const route = useRoute()
-let chartId=route.query.chartId
-
-
-// 获取配置
-const chartBaseUrl = ref('')
-function getSystemConfig() {
-  apiCommon.systemConfig().then(res => {
-    if (res.Ret === 200) {
-      const arr = res.Data || []
-      console.log(arr);
-      arr.forEach(item => {
-        if (item.ConfKey === 'ChartViewUrl') {
-          chartBaseUrl.value = item.ConfVal
-        }
-      });
-    }
-  })
-}
-getSystemConfig()
-
-const chartInfo = ref(null)
-function getChartDetail() {
-  chartInfo.value=null
-  apiChart.getChartDetail({
-    ChartInfoId:Number(chartId)
-  }).then(res => {
-    if (res.Ret === 200) {
-      chartInfo.value = res.Data
-    }
-  })
-}
-getChartDetail()
-
-async function handleCollect() {
-  const params={
-    UniqueCode:chartInfo.value.UniqueCode,
-    ChartName:chartInfo.value.ChartName,
-    ChartImage:chartInfo.value.ChartImage
-  }
-  const res=chartInfo.value.IsCollect?await apiChart.chartCollectCancel({
-    UniqueCode:chartInfo.value.UniqueCode,
-  }):await apiChart.chartCollect(params)
-  if(res.Ret===200){
-    Message.success(chartInfo.value.IsCollect?'取消收藏成功':'收藏成功')
-    chartInfo.value.IsCollect=!chartInfo.value.IsCollect
-    // 通知更新收藏列表
-    wx.miniProgram.postMessage({
-      data: 'refreshCollectList'
-    });
-  }
-}
-
-const chartRenderUrl = computed(() => {
-  return `${chartBaseUrl.value}/chart/preview?code=${chartInfo.value.UniqueCode}&source=etamini&token=${route.query.token}`
-})
-
-
-// 获取图列表切换用
-let changeChartList=ref([])
-async function getChangeChartList(){
-  if(route.query.fromPage!=='myCollect') return
-  let res=await apiChart.myChartLocate()
-  if(res.Ret===200){
-    changeChartList.value=res.Data||[]
-  }
-}
-getChangeChartList()
-
-// 切换上一张下一张
-function handleChangeChart(type){
-  const index=changeChartList.value.findIndex(e=>e.ChartInfoId==chartId)
-  if(type==='pre'){
-    if(index<1) return Message.warning('当前已是第一张')
-    const obj=changeChartList.value[index-1]
-    chartId=obj.ChartInfoId
-    getChartDetail()
-  }else{
-    if(index===changeChartList.value.length-1) return Message.warning('当前已是最后一张')
-    const obj=changeChartList.value[index+1]
-    chartId=obj.ChartInfoId
-    getChartDetail()
-  }
-}
-
-
-const isShowMZSM = ref(false)
-
-
-</script>
-<template>
-  <div class="chart-detail-page" v-if="chartInfo">
-    <div class="chart-title">{{chartInfo.ChartName}}</div>
-    <div class="mz-tips" @click="isShowMZSM = true">免责声明</div>
-    <!-- 图表渲染盒子 -->
-    <div class="chart-render-wrap">
-      <iframe :src="chartRenderUrl"></iframe>
-    </div>
-    <div v-if="chartInfo.SourcesFrom&&JSON.parse(chartInfo.SourcesFrom).text"><span>来源:{{chartInfo.SourcesFrom?JSON.parse(chartInfo.SourcesFrom).text:''}}</span></div>
-
-    <div class="change-btns-box" v-if="changeChartList.length>1">
-      <div class="btn" @click="handleChangeChart('pre')">上一张</div>
-      <div class="btn" @click="handleChangeChart('next')">下一张</div>
-    </div>
-    <!-- 收藏 -->
-    <svg-icon @click="handleCollect" class="collect-icon" :name="chartInfo.IsCollect?'collected':'collect'" />
-  </div>
-  <!-- 免责声明 -->
-  <disclaimers-wrap v-model:show="isShowMZSM" />
-</template>
-
-<style lang="scss" scoped>
-.chart-detail-page {
-  background-color: #fff;
-  padding: var(--page-padding);
-  min-height: 100vh;
-  .chart-title {
-    font-size: 36px;
-    line-height: 44px;
-    margin-bottom: 20px;
-  }
-  .mz-tips {
-    text-align: right;
-    color: var(--primary-color);
-    font-size: var(--font-size-small);
-  }
-  .chart-render-wrap {
-    margin-top: 50px;
-    height: 800px;
-    margin-bottom: 40px;
-    iframe {
-      width: 100%;
-      height: 100%;
-      border: none;
-    }
-  }
-  .change-btns-box {
-    position: fixed;
-    left: var(--page-padding);
-    right: var(--page-padding);
-    bottom: 69px;
-    display: flex;
-    justify-content: space-between;
-    .btn {
-      width: 48%;
-      height: 68px;
-      text-align: center;
-      border-radius: 68px;
-      line-height: 68px;
-      background-color: #f3f5f9;
-    }
-  }
-}
-.collect-icon {
-  position: fixed;
-  z-index: 99;
-  right: 34px;
-  bottom: 150px;
-  width: 100px;
-  height: 100px;
-}
-
-@media (min-width: 600px) {
-  .chart-detail-page {
-    min-height: 100vh;
-    .chart-title {
-      font-size: 18px;
-      line-height: 22px;
-      margin-bottom: 10px;
-    }
-    .chart-render-wrap {
-      margin-top: 25px;
-      height: 400px;
-    }
-    .change-btns-box{
-      bottom: 35px;
-      justify-content: center;
-      gap: 0 10px;
-      .btn{
-        max-width: 200px;
-        height: 34px;
-        border-radius: 34px;
-        line-height: 34px;
-      }
-    }
-  }
-  .collect-icon{
-    right: 17px;
-    bottom: 75px;
-    width: 50px;
-    height: 50px;
-  }
-}
-</style>

+ 249 - 232
src/views/report/Detail.vue

@@ -1,7 +1,7 @@
 <script setup>
 import apiReport from '@/api/modules/report'
 import { useRoute } from 'vue-router'
-import { Message,Toast  } from 'tdesign-mobile-vue';
+import { Message, Toast } from 'tdesign-mobile-vue';
 import apiUser from '@/api/modules/user'
 import { useThrottleFn } from '@vueuse/core'
 
@@ -12,73 +12,58 @@ const route = useRoute()
 let userInfo = null
 async function getUserInfo() {
   const res = await apiUser.userInfo()
-  if (res.Ret === 200&&res.ErrCode===0) {
+  if (res.Ret === 200 && res.ErrCode === 0) {
     userInfo = res.data
   }
 }
 getUserInfo()
-const defaultImg = new URL(`@/assets/imgs/default-author.png`,import.meta.url).href
+const defaultImg = new URL(`@/assets/imgs/default-author.png`, import.meta.url).href
 
 const reportId = route.query.reportid
 const reportInfo = ref(null)
 const reportContent = ref('')
-const reportStatus = ref(4)//1已过期,2没有该品种权限,3没有权限,4有权限,5未绑定
-const headImgStyle=ref([])
-const endImgStyle=ref([])
-const layoutBaseInfo=ref({
-  '研报标题':'',
-  '研报作者':'',
-  '创建时间':''
+const isFollowed = ref(false)
+const authorInfo=ref(null)
+const isLogin=ref(false)
+const headImgStyle = ref([])
+const endImgStyle = ref([])
+const layoutBaseInfo = ref({
+  '研报标题': '',
+  '研报作者': '',
+  '创建时间': ''
 })
 
 // 报告内容分页
-const pageSize=20
-let page=0
-let endPageNum=0
-let contentTotals=[]
-const renderContentList=ref([])
-function splitReportContent(data){
-  const arr=data.split('</p>');
-  contentTotals=arr.map(_ => _+'</p>')
-  renderContentList.value=contentTotals.slice(0,pageSize)
-  endPageNum=parseInt(contentTotals.length / pageSize) + 1;
+const pageSize = 20
+let page = 0
+let endPageNum = 0
+let contentTotals = []
+const renderContentList = ref([])
+function splitReportContent(data) {
+  const arr = data.split('</p>');
+  contentTotals = arr.map(_ => _ + '</p>')
+  renderContentList.value = contentTotals.slice(0, pageSize)
+  endPageNum = parseInt(contentTotals.length / pageSize) + 1;
 }
-function handleLoadContent(){
-  renderContentList.value=renderContentList.value.concat(contentTotals.slice(page*pageSize,(page+1)*pageSize))
+function handleLoadContent() {
+  renderContentList.value = renderContentList.value.concat(contentTotals.slice(page * pageSize, (page + 1) * pageSize))
 }
 async function getReportInfo() {
-    //获取研报详情
+  //获取研报详情
   if (!reportId) return
   const res = await apiReport.getReportDetail({
     reportId: reportId
   })
-  if (res.Ret === 200&&res.ErrCode===0) {
-    const {detail,authorInfo} = res.data
-    reportInfo.value = {
-        Author:detail.author,
-        AuthorId:1,
-        AuthorImg:authorInfo?.length>1?'':authorInfo[0].headImgUrl,
-        IsFollowed:false,
-        PublishTime:detail.publishTime,
-        Abstract:detail.abstract,
-        Title:detail.title,
-        Content:detail.content,
-        HasChapter:Boolean(detail.hasChapter),
-        ChapterContent:detail.chapters,
-        HeadResource:{
-            ImgUrl:detail.headResource?.imgURL||'',
-            Style:detail.headResource?.style||''
-        },
-        EndResource:{
-            ImgUrl:detail.endResource?.imgURL||'',
-            Style:detail.endResource?.style||''
-        }
-    }
-    headImgStyle.value=reportInfo.value.HeadResource.Style?JSON.parse(reportInfo.value.HeadResource.Style):[]
-    endImgStyle.value=reportInfo.value.EndResource.Style?JSON.parse(reportInfo.value.EndResource.Style):[]
-    layoutBaseInfo.value['研报标题']=reportInfo.value.Title
-    layoutBaseInfo.value['研报作者']=reportInfo.value.Author
-    layoutBaseInfo.value['创建时间']= reportInfo.value.PublishTime
+  if (res.Ret === 200 && res.ErrCode === 0) {
+    const { detail, authorInfo } = res.data
+    authorInfo.value=authorInfo
+    reportInfo.value = detail
+    isLogin.value=res.data.login
+    headImgStyle.value = reportInfo.value.headResource.style ? JSON.parse(reportInfo.value.headResource.style) : []
+    endImgStyle.value = reportInfo.value.endResource.style ? JSON.parse(reportInfo.value.endResource.style) : []
+    layoutBaseInfo.value['研报标题'] = reportInfo.value.title
+    layoutBaseInfo.value['研报作者'] = reportInfo.value.author
+    layoutBaseInfo.value['创建时间'] = reportInfo.value.publishTime
 
     getAuthorFollowState()
     nextTick(() => {
@@ -89,52 +74,39 @@ async function getReportInfo() {
     // 设置分享文案
     wx.miniProgram.postMessage({
       data: {
-        title: reportInfo.value.Title
+        title: reportInfo.value.title
       }
     });
 
-    //await getUserInfo()
-    reportContent.value = modifyReportContentIframeData(reportInfo.value.Content)
+    reportContent.value = reportInfo.value.content
     splitReportContent(reportContent.value)
   }
 }
 getReportInfo()
-function getAuthorFollowState(){
-    apiUser.getFollowState({
-        names:reportInfo.value.Author
-    }).then(res=>{
-        if(res.Ret === 200&&res.ErrCode===0){
-            reportInfo.value.IsFollowed = res.data.followStatus==='following'
-        }
-    })
-}
-function changeFollowState(){
-    apiUser.followAuthor({
-        analystNames:reportInfo.value.Author,
-        followType:reportInfo.value.IsFollowed?'unfollowed':'following',
-        mobile:userInfo?.mobile||''
-    }).then(res=>{
-        if(res.Ret === 200&&res.ErrCode===0){
-            reportInfo.value.IsFollowed = !reportInfo.value.IsFollowed
-            Toast({
-                theme: 'success',
-                direction: 'row',
-                message: reportInfo.value.IsFollowed?'关注成功':'取消关注成功',
-            })
-        }
-    })
-}
-
-// 修改报告中嵌入的图表地址
-function modifyReportContentIframeData(str){
-  let temStr=str.replace(/http:\/\/eta.dwfutures.com:8001/g,'https://dwresearch.dwfutures.com')
-  return temStr.replace(/http:\/\/58.210.74.21:9100\/etastatic/g,'https://dwresearch.dwfutures.com/etastatic')
+function getAuthorFollowState() {
+  apiUser.getFollowState({
+    names: reportInfo.value.author
+  }).then(res => {
+    if (res.Ret === 200 && res.ErrCode === 0) {
+      isFollowed.value = res.data.followStatus === 'following'
+    }
+  })
 }
-
-// 给报告详情中图表加参数
-function formatIframeData() {
-  reportContent.value = reportInfo.value.Content.replace(/\/chartshow\?code=/g, `/chartshow?source=etamini&token=${localStorage.getItem('token')}&reportId=${reportId}&code=`)
-  splitReportContent(reportContent.value)
+function changeFollowState() {
+  apiUser.followAuthor({
+    analystNames: reportInfo.value.author,
+    followType: isFollowed.value ? 'unfollowed' : 'following',
+    mobile: userInfo?.mobile || ''
+  }).then(res => {
+    if (res.Ret === 200 && res.ErrCode === 0) {
+      isFollowed.value = !isFollowed.value
+      Toast({
+        theme: 'success',
+        direction: 'row',
+        message: isFollowed.value ? '关注成功' : '取消关注成功',
+      })
+    }
+  })
 }
 
 // 显示免责声明
@@ -142,7 +114,7 @@ const isShowMZSM = ref(false)
 
 // 显示返回顶部
 const showToTop = ref(false)
-const handlePageScroll=useThrottleFn(()=>{
+const handlePageScroll = useThrottleFn(() => {
   const top = document.documentElement.scrollTop || document.body.scrollTop
   if (top > window.outerHeight) {
     showToTop.value = true
@@ -150,16 +122,16 @@ const handlePageScroll=useThrottleFn(()=>{
     showToTop.value = false
   }
 
-  if(page >= endPageNum) return
+  if (page >= endPageNum) return
   const clientHeight = document.documentElement.clientHeight || document.body.clientHeight; // 可视高度
   const scrollHeight = document.body.scrollHeight; // 总高度
   const bufferHeight = 400;
-  if((scrollHeight - top - clientHeight) < bufferHeight+100) {
+  if ((scrollHeight - top - clientHeight) < bufferHeight + 100) {
     console.log('触底')
     page++
     handleLoadContent();
   }
-},300)
+}, 300)
 
 function handleBackTop() {
   document.body.scrollTop = document.documentElement.scrollTop = 0
@@ -189,115 +161,142 @@ onUnmounted(() => {
   window.removeEventListener('scroll', handlePageScroll)
 })
 
+function handleGoLogin() {
+  const redirectUrl = encodeURIComponent(`/pages-report/reportDetail/index?id=${route.query.reportid}`)
+  wx.miniProgram.reLaunch({
+    url: `/pages/login/index?redirectUrl=${redirectUrl}`
+  })
+}
+
 </script>
 
 <template>
   <div class="report-detail-page" v-if="reportInfo">
     <!-- 智能研报有版头版尾 -->
-    <div class="html-head-img-box" v-if="reportInfo.HeadResource.ImgUrl">
-      <img :src="reportInfo.HeadResource.ImgUrl" alt="" style="display:block;width:100%">
-      <div 
-        class="head-layout-item" 
-        v-for="item in headImgStyle" 
+    <div class="html-head-img-box" v-if="reportInfo.headResource.imgUrl">
+      <img
+        :src="reportInfo.headResource.imgUrl"
+        alt=""
+        style="display: block; width: 100%"
+      />
+      <div
+        class="head-layout-item"
+        v-for="item in headImgStyle"
         :key="item.value"
         :style="{
-          fontFamily:item.family,
-          fontSize:item.size,
-          fontWeight:item.weight,
-          textAlign:item.align,
-          color:item.color,
-          width:item.width,
-          height:item.height,
-          left:item.left,
-          top:item.top
+          fontFamily: item.family,
+          fontSize: item.size,
+          fontWeight: item.weight,
+          textAlign: item.align,
+          color: item.color,
+          width: item.width,
+          height: item.height,
+          left: item.left,
+          top: item.top,
         }"
       >
         {{ layoutBaseInfo[item.value] }}
       </div>
     </div>
-    <div class="time-box" style="text-align:right;" v-if="reportInfo.HeadResource.ImgUrl">
+    <div
+      class="time-box"
+      style="text-align: right"
+      v-if="reportInfo.headResource.imgUrl"
+    >
       <span>如有内容疑问 请查看 &nbsp;</span>
       <span class="btn" @click="isShowMZSM = true">免责声明</span>
     </div>
 
-    <template v-if="!reportInfo.HeadResource.ImgUrl&&!reportInfo.EndResource.ImgUrl">
-        <div class="title-box">{{ reportInfo.Title }}</div>
-        <div class="author-box">
-            <div class="img-box">
-                <img :src="reportInfo.AuthorImg?reportInfo.AuthorImg:defaultImg">
-            </div>
-            <div class="author-info">
-                <span class="name">{{ reportInfo.Author.split(',').join('、') }}</span>
-                <span class="time">{{ reportInfo.PublishTime }}</span>
-            </div>
-            <div 
-                @click="changeFollowState"
-                :class="['opt-btn',reportInfo.IsFollowed?'followed':'']">
-                {{ reportInfo.IsFollowed?'取消关注':'关注' }}
-            </div>
+    <template
+      v-if="!reportInfo.headResource.imgUrl && !reportInfo.endResource.imgUrl"
+    >
+      <div class="title-box">{{ reportInfo.title }}</div>
+      <div class="author-box">
+        <div class="img-box">
+          <img
+            :src="authorInfo?.[0].headImgUrl|| defaultImg"
+          />
         </div>
-        <div class="time-box">
-            <span class="btn" @click="isShowMZSM = true">免责声明</span>
+        <div class="author-info">
+          <span class="name">{{
+            reportInfo.author.split(",").join("、")
+          }}</span>
+          <span class="time">{{ reportInfo.publishTime }}</span>
         </div>
-   </template>
+        <div
+          @click="changeFollowState"
+          :class="['opt-btn', isFollowed ? 'followed' : '']"
+          v-if="isLogin"
+        >
+          {{ isFollowed ? "取消关注" : "关注" }}
+        </div>
+      </div>
+      <div class="time-box">
+        <span class="btn" @click="isShowMZSM = true">免责声明</span>
+      </div>
+    </template>
 
-    <div class="des-box" v-if="reportInfo.Abstract">
-        <svg-icon name="icon01"></svg-icon>
-        <div>{{ reportInfo.Abstract }}</div>
+    <div class="des-box" v-if="reportInfo.abstract">
+      <svg-icon name="icon01"></svg-icon>
+      <div>{{ reportInfo.abstract }}</div>
     </div>
     <div
-        id="rich-content"
-        class="report-content-box rich-content"
-        v-html="reportContent"
-        v-if="reportStatus !== 4"
+      id="rich-content"
+      class="report-content-box rich-content"
+      v-html="reportContent"
+      v-if="false"
     />
     <template v-else>
+      <div
+        id="rich-content"
+        class="report-content-box rich-content"
+        v-if="!reportInfo.hasChapter"
+      >
+        <div v-for="item in renderContentList" :key="item" v-html="item"></div>
+      </div>
+      <!-- 章节报告 -->
+      <div
+        id="rich-content"
+        class="report-content-box rich-content"
+        v-if="reportInfo.hasChapter"
+      >
         <div
-            id="rich-content"
-            class="report-content-box rich-content"
-            v-if="!reportInfo.HasChapter"
-        >
-            <div v-for="item in renderContentList" :key="item" v-html="item"></div>
-        </div>
-        <!-- 章节报告 -->
-        <div
-            id="rich-content"
-            class="report-content-box rich-content"
-            v-if="reportInfo.HasChapter"
+          class="chapter-item-wrap"
+          v-for="(chapter, index) in reportInfo.chapters"
+          :key="index"
         >
-            <div 
-                class="chapter-item-wrap" 
-                v-for="chapter,index in reportInfo.ChapterContent"
-                :key="index"
-            >
-                <div class="chapter-title">
-                <h3 class="chapter-title-text">{{chapter.title}}</h3>
-                </div>
-                <div v-html="chapter.content"></div>
-            </div>
+          <div class="chapter-title">
+            <h3 class="chapter-title-text">{{ chapter.title }}</h3>
+          </div>
+          <div v-html="chapter.content"></div>
         </div>
+      </div>
     </template>
-    
 
     <!-- 拼接版尾 -->
-    <div class="html-end-img-box" v-if="reportInfo.EndResource.ImgUrl">
-      <img :src="reportInfo.EndResource.ImgUrl" alt="" style="display:block;width:100%">
-      <div 
-        class="head-layout-item" 
-        v-for="item in endImgStyle" 
+    <div class="html-end-img-box" v-if="reportInfo.endResource.imgUrl">
+      <img
+        :src="reportInfo.endResource.imgUrl"
+        alt=""
+        style="display: block; width: 100%"
+      />
+      <div
+        class="head-layout-item"
+        v-for="item in endImgStyle"
         :key="item.value"
         :style="{
-          fontFamily:item.family,
-          fontSize:(item.size*2)+'px',
-          fontWeight:item.weight,
-          textAlign:item.align,
-          color:item.color,
-          width:item.width,
-          height:item.height,
-          left:item.left,
-          top:item.top
+          fontFamily: item.family,
+          fontSize: item.size * 2 + 'px',
+          fontWeight: item.weight,
+          textAlign: item.align,
+          color: item.color,
+          width: item.width,
+          height: item.height,
+          left: item.left,
+          top: item.top,
         }"
-      >{{ layoutBaseInfo[item.value] }}
+      >
+        {{ layoutBaseInfo[item.value] }}
       </div>
     </div>
     <!-- 右侧悬浮操作栏 -->
@@ -313,6 +312,23 @@ onUnmounted(() => {
       </div>
     </div>
   </div>
+  <!-- 无权限\未登录  -->
+  <div class="no-auth-wrap">
+    <div class="opcity-box"></div>
+    <div class="content-box">
+      <img class="icon" src="@/assets/imgs/lock-img.png" alt="" />
+      <template v-if="!isLogin">
+        <div class="text">您尚未登录,请登录后查看</div>
+        <t-button
+          theme="primary"
+          block
+          style="width: 300px; margin: 30px auto"
+          @click="handleGoLogin"
+          >去登陆</t-button
+        >
+      </template>
+    </div>
+  </div>
   <!-- 免责声明 -->
   <disclaimers-wrap v-model:show="isShowMZSM" />
 </template>
@@ -326,51 +342,51 @@ onUnmounted(() => {
     line-height: 44px;
     margin-bottom: 20px;
   }
-  .author-box{
+  .author-box {
     display: flex;
     align-items: center;
-    .img-box{
-        width:78px;
-        height:78px;
-        border-radius: 50%;
-        overflow: hidden;
-        img{
-            width: 100%;
-            height: 100%;
-        }
+    .img-box {
+      width: 78px;
+      height: 78px;
+      border-radius: 50%;
+      overflow: hidden;
+      img {
+        width: 100%;
+        height: 100%;
+      }
     }
-    .author-info{
-        margin-left: 30px;
-        flex: 1;
-        .name{
-            /* display: block; */
-            display: -webkit-box;
-            overflow: hidden;
-            text-overflow: ellipsis;
-            -webkit-line-clamp: 2;
-            line-break: anywhere;
-            -webkit-box-orient: vertical;
-        }
-        .time{
-            margin-top: 10px;
-            font-size: var(--font-size-small);
-            color: var(--text-color-grey);
-        }
+    .author-info {
+      margin-left: 30px;
+      flex: 1;
+      .name {
+        /* display: block; */
+        display: -webkit-box;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        -webkit-line-clamp: 2;
+        line-break: anywhere;
+        -webkit-box-orient: vertical;
+      }
+      .time {
+        margin-top: 10px;
+        font-size: var(--font-size-small);
+        color: var(--text-color-grey);
+      }
     }
-    .opt-btn{
-        margin-left: auto;
-        align-self: flex-start;
-        min-width: 140px;
-        height: 40px;
-        padding:5px 10px;
-        border-radius: 8px;
-        background-color: var(--primary-color);
-        color:var(--text-color-inverse);
-        text-align: center;
-        &.followed{
-            background-color:var(--bg-disabled-color);
-            color:var(--text-color-grey);
-        }
+    .opt-btn {
+      margin-left: auto;
+      align-self: flex-start;
+      min-width: 140px;
+      height: 40px;
+      padding: 5px 10px;
+      border-radius: 8px;
+      background-color: var(--primary-color);
+      color: var(--text-color-inverse);
+      text-align: center;
+      &.followed {
+        background-color: var(--bg-disabled-color);
+        color: var(--text-color-grey);
+      }
     }
   }
   .time-box {
@@ -435,25 +451,25 @@ onUnmounted(() => {
       display: inline-block !important;
       vertical-align: middle !important;
     }
-    
+
     .chapter-item-wrap {
       padding: 20px 0;
       .chapter-title {
-          display: flex;
-          align-items: center;
+        display: flex;
+        align-items: center;
+        font-size: 30px;
+        .type {
+          height: fit-content;
+          display: inline-block;
+          color: #fff;
+          padding: 10px 20px;
+          background-color: #e6a23c;
+          border-radius: 8px;
+          margin-right: 20px;
+        }
+        .chapter-title-text {
           font-size: 30px;
-          .type {
-              height: fit-content;
-              display: inline-block;
-              color: #fff;
-              padding: 10px 20px;
-              background-color: #E6A23C;
-              border-radius: 8px; 
-              margin-right: 20px;
-          }
-          .chapter-title-text {
-              font-size: 30px;
-          }
+        }
       }
     }
   }
@@ -463,8 +479,8 @@ onUnmounted(() => {
     right: 34px;
     bottom: 130px;
     //加上这个保证back-top-img不会重复渲染
-    transform: translateZ(0);//不知道什么原理
-    
+    transform: translateZ(0); //不知道什么原理
+
     .item {
       margin-top: 10px;
     }
@@ -474,14 +490,15 @@ onUnmounted(() => {
       display: block;
     }
   }
-  .html-head-img-box,.html-end-img-box{
+  .html-head-img-box,
+  .html-end-img-box {
     margin-bottom: 10px;
     position: relative;
     overflow: hidden;
-    .head-layout-item{
-        position: absolute;
-        overflow: hidden;
-        box-sizing: border-box
+    .head-layout-item {
+      position: absolute;
+      overflow: hidden;
+      box-sizing: border-box;
     }
   }
 }

+ 0 - 261
src/views/report/HT_PDF.vue

@@ -1,261 +0,0 @@
-<script setup>
-import apiReport from '@/api/modules/report'
-import { useRoute } from 'vue-router'
-import { Message,Toast  } from 'tdesign-mobile-vue';
-import apiUser from '@/api/modules/user'
-import { useThrottleFn } from '@vueuse/core'
-import dayjs from 'dayjs'
-
-const route = useRoute()
-
-
-// 获取用户信息
-let userInfo = null
-async function getUserInfo() {
-  const res = await apiUser.userInfo()
-  if (res.Ret === 200&&res.ErrCode===0) {
-    userInfo = res.data
-  }
-}
-getUserInfo()
-const defaultImg = new URL(`@/assets/imgs/default-author.png`,import.meta.url).href
-
-const reportId = route.query.reportid
-const reportInfo = ref(null)
-async function getReportInfo() {
-    //获取研报详情
-  if (!reportId) return
-  const res = await apiReport.getReportDetail({
-    reportId: reportId
-  })
-  if (res.Ret === 200&&res.ErrCode===0) {
-    const {author,publishedTime,pdfUrl,title,abstract,authorInfo} = res.data
-    reportInfo.value = {
-        Author:author,
-        AuthorImg:authorInfo?.length>1?'':authorInfo[0].headImgUrl,
-        IsFollowed:false,
-        PublishTime:publishedTime,
-        Abstract:abstract,
-        Title:title,
-        PdfUrl:pdfUrl,
-    }
-
-    getAuthorFollowState()
-
-    // 设置分享文案
-    wx.miniProgram.postMessage({
-      data: {
-        title: reportInfo.value.Title
-      }
-    });
-  }
-}
-getReportInfo()
-function getAuthorFollowState(){
-    apiUser.getFollowState({
-        names:reportInfo.value.Author
-    }).then(res=>{
-        if(res.Ret === 200&&res.ErrCode===0){
-            reportInfo.value.IsFollowed = res.data.followStatus==='following'
-        }
-    })
-}
-function changeFollowState(){
-    apiUser.followAuthor({
-        analystNames:reportInfo.value.Author,
-        followType:reportInfo.value.IsFollowed?'unfollowed':'following',
-        mobile:userInfo?.mobile||''
-    }).then(res=>{
-        if(res.Ret === 200&&res.ErrCode===0){
-            reportInfo.value.IsFollowed = !reportInfo.value.IsFollowed
-            Toast({
-                theme: 'success',
-                direction: 'row',
-                message: reportInfo.value.IsFollowed?'关注成功':'取消关注成功',
-            })
-        }
-    })
-}
-
-// 显示免责声明
-const isShowMZSM = ref(false)
-// 显示返回顶部
-const showToTop = ref(false)
-const handlePageScroll=useThrottleFn(()=>{
-  const top = document.documentElement.scrollTop || document.body.scrollTop
-  if (top > window.outerHeight) {
-    showToTop.value = true
-  } else {
-    showToTop.value = false
-  }
-
-  if(page >= endPageNum) return
-  const clientHeight = document.documentElement.clientHeight || document.body.clientHeight; // 可视高度
-  const scrollHeight = document.body.scrollHeight; // 总高度
-  const bufferHeight = 400;
-  if((scrollHeight - top - clientHeight) < bufferHeight+100) {
-    console.log('触底')
-    page++
-    handleLoadContent();
-  }
-},300)
-
-function handleBackTop() {
-  document.body.scrollTop = document.documentElement.scrollTop = 0
-}
-onMounted(() => {
-  window.addEventListener('scroll', handlePageScroll)
-})
-onUnmounted(() => {
-  window.removeEventListener('scroll', handlePageScroll)
-})
-</script>
-
-<template>
-    <div class="report-ht_pdf-wrap" v-if="reportInfo">
-        <div class="report-top-box">
-            <div class="title-box">{{ reportInfo.Title }}</div>
-            <div class="author-box">
-                <div class="img-box">
-                    <img :src="reportInfo.AuthorImg?reportInfo.AuthorImg:defaultImg">
-                </div>
-                <div class="author-info">
-                    <span class="name">{{ reportInfo.Author.split(',').join('、') }}</span>
-                    <span class="time">{{ dayjs(reportInfo.PublishTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
-                </div>
-                <div 
-                    @click="changeFollowState"
-                    :class="['opt-btn',reportInfo.IsFollowed?'followed':'']">
-                    {{ reportInfo.IsFollowed?'取消关注':'关注' }}
-                </div>
-            </div>
-            <div class="time-box">
-                <span class="btn" @click="isShowMZSM = true">免责声明</span>
-            </div>
-        </div>
-        <div class="des-box" v-if="reportInfo.Abstract">
-            <svg-icon name="icon01"></svg-icon>
-            <div>{{ reportInfo.Abstract }}</div>
-        </div>
-        <div class="report-content">
-            <preview-PDF :url="reportInfo.PdfUrl"/>
-        </div>
-        <!-- 右侧悬浮操作栏 -->
-        <div class="right-fix-box">
-            <!-- 返回顶部 -->
-            <div class="item back-top-img">
-                <svg-icon
-                name="backtop"
-                v-show="showToTop"
-                @click="handleBackTop"
-                class="back-top-img"
-                />
-            </div>
-        </div>
-    </div>
-    <!-- 免责声明 -->
-    <disclaimers-wrap v-model:show="isShowMZSM" />
-</template>
-
-<style scoped lang="scss">
-.report-ht_pdf-wrap{
-    background-color: #fff;
-    padding: var(--page-padding);
-    display: flex;
-    flex-direction: column;
-    overflow-y: auto;
-    .title-box {
-        font-size: 36px;
-        line-height: 44px;
-        margin-bottom: 20px;
-    }
-    .author-box{
-        display: flex;
-        align-items: center;
-        .img-box{
-            width:78px;
-            height:78px;
-            border-radius: 50%;
-            overflow: hidden;
-            img{
-                width: 100%;
-                height: 100%;
-            }
-        }
-        .author-info{
-            margin-left: 30px;
-            flex: 1;
-            .name{
-                /* display: block; */
-                display: -webkit-box;
-                overflow: hidden;
-                text-overflow: ellipsis;
-                -webkit-line-clamp: 2;
-                line-break: anywhere;
-                -webkit-box-orient: vertical;
-            }
-            .time{
-                margin-top: 10px;
-                font-size: var(--font-size-small);
-                color: var(--text-color-grey);
-            }
-        }
-        .opt-btn{
-            margin-left: auto;
-            align-self: flex-start;
-            min-width: 140px;
-            height: 40px;
-            padding:5px 10px;
-            border-radius: 8px;
-            background-color: var(--primary-color);
-            color:var(--text-color-inverse);
-            text-align: center;
-            &.followed{
-                background-color:var(--bg-disabled-color);
-                color:var(--text-color-grey);
-            }
-        }
-    }
-    .time-box {
-        font-size: var(--font-size-small);
-        text-align: right;
-        .btn {
-        color: var(--primary-color);
-        }
-    }
-    .des-box {
-        background-color: #f8f8f8;
-        padding: 20px;
-        margin: 20px 0;
-        display: flex;
-        gap: 0 10px;
-        color: var(--text-color-sub);
-        font-size: var(--font-size-small);
-        line-height: 36px;
-    }
-    .right-fix-box {
-        position: fixed;
-        z-index: 99;
-        right: 34px;
-        bottom: 130px;
-        transform: translateZ(0);//不知道什么原理
-        .item {
-        margin-top: 10px;
-        }
-        .back-top-img {
-        width: 100px;
-        height: 100px;
-        display: block;
-        }
-        .collect-icon {
-        width: 100px;
-        height: 100px;
-        display: block;
-        }
-    }
-    .report-content{
-        flex: 1;
-        margin-top: 20px;
-    }
-}
-</style>

+ 162 - 178
src/views/report/PDF.vue

@@ -1,114 +1,100 @@
 <script setup>
 import apiReport from '@/api/modules/report'
 import { useRoute } from 'vue-router'
-import { Message } from 'tdesign-mobile-vue';
-import apiCommon from '@/api/modules/common'
+import { Message, Toast } from 'tdesign-mobile-vue';
 import apiUser from '@/api/modules/user'
+import { useThrottleFn } from '@vueuse/core'
+import dayjs from 'dayjs'
 
 const route = useRoute()
 
-// 获取系统配置
-let systemConfig = null
-function getSystemConfig() {
-  apiCommon.systemConfig().then(res => {
-    if (res.Ret === 200) {
-      systemConfig = res.Data
-      console.log(res.Data);
-    }
-  })
-}
-getSystemConfig()
 
 // 获取用户信息
 let userInfo = null
 async function getUserInfo() {
   const res = await apiUser.userInfo()
-  if (res.Ret === 200) {
-    userInfo = res.Data
+  if (res.Ret === 200 && res.ErrCode === 0) {
+    userInfo = res.data
   }
 }
-
-
+getUserInfo()
+const defaultImg = new URL(`@/assets/imgs/default-author.png`, import.meta.url).href
 
 const reportId = route.query.reportid
 const reportInfo = ref(null)
-const reportContent = ref('')
-const reportStatus = ref(0)//1已过期,2没有该品种权限,3没有权限,4有权限,5未绑定
-const reportCollected = ref(false)//报告是否收藏
-const isBind=ref(false)
+const isFollowed = ref(false)
 async function getReportInfo() {
+  //获取研报详情
   if (!reportId) return
-  const res = await apiReport.getPdfReportDetail({
-    ReportPdfId: Number(reportId)
+  const res = await apiReport.getReportDetail({
+    reportId: reportId
   })
-  if (res.Ret === 200) {
-    reportInfo.value = res.Data.Report
-    reportStatus.value = res.Data.Status
-    reportCollected.value = res.Data.IsCollect || false
-    isBind.value=res.Data.IsSignIn
+  if (res.Ret === 200 && res.ErrCode === 0) {
+    reportInfo.value = res.data
+
+    getAuthorFollowState()
 
     // 设置分享文案
     wx.miniProgram.postMessage({
       data: {
-        title: res.Data.Report.Title
+        title: reportInfo.value.title
       }
     });
-    await getUserInfo()
   }
 }
 getReportInfo()
-
-
-// 拨打电话
-function handleCallPhone() {
-  let tel = userInfo.SellerPhone
-  if (!tel) {
-    systemConfig.forEach(item => {
-      if (item.ConfKey === 'ServicePhone') {
-        tel = item.ConfVal
-      }
-    });
-  }
-
-  var phoneLink = 'tel:' + tel;
-  var link = document.createElement('a');
-  link.setAttribute('href', phoneLink);
-  link.onclick = function () {
-    return true;
-  };
-  link.click();
+function getAuthorFollowState() {
+  apiUser.getFollowState({
+    names: reportInfo.value.author
+  }).then(res => {
+    if (res.Ret === 200 && res.ErrCode === 0) {
+      isFollowed.value = res.data.followStatus === 'following'
+    }
+  })
 }
-
-// 点击收藏
-async function handleCollect() {
-  const res = reportCollected.value ? await apiReport.pdfReportCollectCancel({ ReportPdfId: Number(reportId) }) : await apiReport.pdfReportCollect({ ReportPdfId: Number(reportId) })
-  if (res.Ret === 200) {
-    Message.success(reportCollected.value ? '取消收藏成功' : '收藏成功')
-    reportCollected.value = !reportCollected.value
-    // 通知更新收藏列表
-    wx.miniProgram.postMessage({
-      data: 'refreshCollectList'
-    });
-  }
+function changeFollowState() {
+  apiUser.followAuthor({
+    analystNames: reportInfo.value.author,
+    followType: isFollowed.value ? 'unfollowed' : 'following',
+    mobile: userInfo?.mobile || ''
+  }).then(res => {
+    if (res.Ret === 200 && res.ErrCode === 0) {
+      isFollowed.value = !isFollowed.value
+      Toast({
+        theme: 'success',
+        direction: 'row',
+        message: isFollowed.value ? '关注成功' : '取消关注成功',
+      })
+    }
+  })
 }
 
 // 显示免责声明
 const isShowMZSM = ref(false)
-
 // 显示返回顶部
 const showToTop = ref(false)
-function handlePageScroll() {
+const handlePageScroll = useThrottleFn(() => {
   const top = document.documentElement.scrollTop || document.body.scrollTop
   if (top > window.outerHeight) {
     showToTop.value = true
   } else {
     showToTop.value = false
   }
-}
+
+  if (page >= endPageNum) return
+  const clientHeight = document.documentElement.clientHeight || document.body.clientHeight; // 可视高度
+  const scrollHeight = document.body.scrollHeight; // 总高度
+  const bufferHeight = 400;
+  if ((scrollHeight - top - clientHeight) < bufferHeight + 100) {
+    console.log('触底')
+    page++
+    handleLoadContent();
+  }
+}, 300)
+
 function handleBackTop() {
   document.body.scrollTop = document.documentElement.scrollTop = 0
 }
-
 onMounted(() => {
   window.addEventListener('scroll', handlePageScroll)
 })
@@ -116,39 +102,58 @@ onUnmounted(() => {
   window.removeEventListener('scroll', handlePageScroll)
 })
 
-function handleGoLogin(){
-  const redirectUrl=encodeURIComponent(`/pages-report/reportDetail/index?id=${route.query.reportid}`) 
+function handleGoLogin() {
+  const redirectUrl = encodeURIComponent(`/pages-report/reportDetail/index?id=${route.query.reportid}`)
   wx.miniProgram.reLaunch({
-    url:`/pages/login/index?redirectUrl=${redirectUrl}`
+    url: `/pages/login/index?redirectUrl=${redirectUrl}`
   })
 }
 
 </script>
 
 <template>
-  <div :class="['report-detail-page',reportStatus !== 4||(reportStatus === 5&&!isBind)?'report-detail_hidden':'']" v-if="reportInfo">
-    <div class="title-box">{{ reportInfo.Title }}</div>
-    <div class="author-box">{{ reportInfo.Author }}</div>
-    <div class="time-box">
-      <span>{{ reportInfo.PublishTime }}</span>
-      <span class="btn" @click="isShowMZSM = true">免责声明</span>
+  <div class="report-ht_pdf-wrap" v-if="reportInfo">
+    <div class="report-top-box">
+      <div class="title-box">{{ reportInfo.title }}</div>
+      <div class="author-box">
+        <div class="img-box">
+          <img
+            :src="
+              reportInfo.authorInfo.lenght > 0
+                ? reportInfo.authorInfo[0].headImgUrl
+                : defaultImg
+            "
+          />
+        </div>
+        <div class="author-info">
+          <span class="name">{{
+            reportInfo.author.split(",").join("、")
+          }}</span>
+          <span class="time">{{
+            dayjs(reportInfo.publishedTime).format("YYYY-MM-DD HH:mm:ss")
+          }}</span>
+        </div>
+        <div
+          @click="changeFollowState"
+          :class="['opt-btn', isFollowed ? 'followed' : '']"
+          v-if="reportInfo.login"
+        >
+          {{ isFollowed ? "取消关注" : "关注" }}
+        </div>
+      </div>
+      <div class="time-box">
+        <span class="btn" @click="isShowMZSM = true">免责声明</span>
+      </div>
     </div>
-    <div class="des-box" v-if="reportInfo.Abstract">
+    <div class="des-box" v-if="reportInfo.abstract">
       <svg-icon name="icon01"></svg-icon>
-      <div>{{ reportInfo.Abstract }}</div>
+      <div>{{ reportInfo.abstract }}</div>
     </div>
-    <div class="report-content-box rich-content">
-      <preview-PDF :url="reportInfo.PdfUrl"/>
+    <div class="report-content">
+      <preview-PDF :url="reportInfo.pdfUrl" v-if="reportInfo.pdfUrl" />
     </div>
     <!-- 右侧悬浮操作栏 -->
     <div class="right-fix-box">
-      <!-- 收藏 -->
-      <svg-icon
-        @click="handleCollect"
-        class="item collect-icon"
-        :name="reportCollected ? 'collected' : 'collect'"
-        v-if="reportStatus === 4"
-      />
       <!-- 返回顶部 -->
       <div class="item back-top-img">
         <svg-icon
@@ -160,65 +165,90 @@ function handleGoLogin(){
       </div>
     </div>
   </div>
-  <!-- 无权限  -->
-  <div class="no-auth-wrap" v-if="reportStatus !== 4">
+  <!-- 无权限\未登录  -->
+  <div class="no-auth-wrap">
     <div class="opcity-box"></div>
     <div class="content-box">
       <img class="icon" src="@/assets/imgs/lock-img.png" alt="" />
-      <div class="text" v-if="reportStatus === 3">
-        您暂无权限查看,<br />请联系客服人员开通!
-      </div>
-      <div class="text" v-if="reportStatus === 2">
-        您暂无该品种权限,<br />请联系销售人员开通!
-      </div>
-      <div class="text" v-if="reportStatus === 1">
-        您的权限已过期,<br />请联系销售人员开通!
-      </div>
-      <t-button
-        theme="primary"
-        block
-        style="width: 300px; margin: 30px auto"
-        @click="handleCallPhone"
-        >立即联系</t-button
-      >
-    </div>
-  </div>
-  <!-- 未绑定 -->
-  <div class="no-auth-wrap" v-if="reportStatus === 5&&!isBind">
-    <div class="opcity-box"></div>
-    <div class="content-box">
-      <img class="icon" src="@/assets/imgs/lock-img.png" alt="" />
-      <div class="text">
-        为了优化您的用户体验<br />请登录后查看更多信息!
-      </div>
-      <t-button
-        theme="primary"
-        block
-        style="width: 300px; margin: 30px auto"
-        @click="handleGoLogin"
-        >去登陆</t-button
-      >
+      <template v-if="!reportInfo?.login">
+        <div class="text">您尚未登录,请登录后查看</div>
+        <t-button
+          theme="primary"
+          block
+          style="width: 300px; margin: 30px auto"
+          @click="handleGoLogin"
+          >去登陆</t-button
+        >
+      </template>
     </div>
   </div>
   <!-- 免责声明 -->
   <disclaimers-wrap v-model:show="isShowMZSM" />
 </template>
 
-<style lang="scss" scoped>
-.report-detail-page {
+<style scoped lang="scss">
+.report-ht_pdf-wrap {
   background-color: #fff;
   padding: var(--page-padding);
+  display: flex;
+  flex-direction: column;
+  overflow-y: auto;
   .title-box {
     font-size: 36px;
     line-height: 44px;
     margin-bottom: 20px;
   }
+  .author-box {
+    display: flex;
+    align-items: center;
+    .img-box {
+      width: 78px;
+      height: 78px;
+      border-radius: 50%;
+      overflow: hidden;
+      img {
+        width: 100%;
+        height: 100%;
+      }
+    }
+    .author-info {
+      margin-left: 30px;
+      flex: 1;
+      .name {
+        /* display: block; */
+        display: -webkit-box;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        -webkit-line-clamp: 2;
+        line-break: anywhere;
+        -webkit-box-orient: vertical;
+      }
+      .time {
+        margin-top: 10px;
+        font-size: var(--font-size-small);
+        color: var(--text-color-grey);
+      }
+    }
+    .opt-btn {
+      margin-left: auto;
+      align-self: flex-start;
+      min-width: 140px;
+      height: 40px;
+      padding: 5px 10px;
+      border-radius: 8px;
+      background-color: var(--primary-color);
+      color: var(--text-color-inverse);
+      text-align: center;
+      &.followed {
+        background-color: var(--bg-disabled-color);
+        color: var(--text-color-grey);
+      }
+    }
+  }
   .time-box {
-    margin-top: 10px;
     font-size: var(--font-size-small);
-    color: var(--text-color-grey);
+    text-align: right;
     .btn {
-      float: right;
       color: var(--primary-color);
     }
   }
@@ -237,6 +267,7 @@ function handleGoLogin(){
     z-index: 99;
     right: 34px;
     bottom: 130px;
+    transform: translateZ(0); //不知道什么原理
     .item {
       margin-top: 10px;
     }
@@ -251,6 +282,10 @@ function handleGoLogin(){
       display: block;
     }
   }
+  .report-content {
+    flex: 1;
+    margin-top: 20px;
+  }
 }
 .no-auth-wrap {
   position: fixed;
@@ -280,55 +315,4 @@ function handleGoLogin(){
     height: 200px;
   }
 }
-
-@media (min-width: 600px) {
-  .report-detail-page {
-    .title-box {
-      font-size: 18px;
-      line-height: 22px;
-      margin-bottom: 10px;
-    }
-    .time-box {
-      margin-top: 5px;
-    }
-    .des-box {
-      padding: 10px;
-      margin: 10px 0;
-      gap: 0 5px;
-      line-height: 18px;
-    }
-    .right-fix-box {
-      right: 17px;
-      bottom: 65px;
-      .item {
-        margin-top: 5px;
-      }
-      .back-top-img {
-        width: 50px;
-        height: 50px;
-      }
-      .collect-icon {
-        width: 50px;
-        height: 50px;
-      }
-    }
-  }
-  .no-auth-wrap {
-    .opcity-box {
-      height: 65px;
-    }
-    .content-box {
-      padding-bottom: 100px;
-    }
-    .icon {
-      width: 100px;
-      height: 100px;
-    }
-  }
-}
-
-.report-detail_hidden{
-  height: 100vh;
-  overflow: hidden;
-}
-</style>
+</style>