jwyu 3 năm trước cách đây
mục cha
commit
1d5aaafc7b

+ 15 - 0
src/api/hzyb/common.js

@@ -6,4 +6,19 @@ export const getWxConfig=(params)=>{
     const url=window.location.href
     console.log(url)
     return get('/wechat/getWxJsConf',{url:url,...params})
+}
+
+/**
+ * 获取海报
+ * @param code_page 分享海报小程序页面地址
+ * @param code_scene 小程序页面参数
+ * @param source 来源 activity_detail(活动详情) activity_list(活动列表)
+ *                    special_column_list(专栏列表) special_column_detail(专栏详情)
+ *                    report_list(报告列表) report_detail(报告详情)
+ *                    chart_list(图库列表) chart_detail(图库详情)
+ * @param version 
+ * @param pars 生成海报需要的页面参数
+ */
+export const apiGetPoster=params=>{
+    return post('/public/get_share_poster',{version:'3.0',...params})
 }

BIN
src/assets/hzyb/share-poster-chart-icon.png


+ 34 - 9
src/views/hzyb/chart/Detail.vue

@@ -3,7 +3,7 @@ import chartBox from './component/chartBox.vue'
 import noAuth from './component/noAuth.vue'
 import sharePoster from '../components/SharePoster.vue'
 import { Popup, Toast,Picker } from 'vant';
-import {ref,onMounted, reactive, watch} from 'vue'
+import {ref,onMounted, reactive, watch,computed} from 'vue'
 import {useRoute, useRouter,onBeforeRouteUpdate} from 'vue-router'
 import moment from 'moment'
 import Highcharts from 'highcharts/highstock';
@@ -195,7 +195,7 @@ const getChartInfo=async (type)=>{
         // 向小程序发送分享数据
         let postData = {
             params:{
-                ChartInfoId:ChartInfoId,
+                chartInfoId:ChartInfoId,
                 searchVal:decodeURIComponent(route.query.searchVal)||'',
                 MyChartId:route.query.MyChartId||'',
                 MyChartClassifyId:route.query.MyChartClassifyId||'',
@@ -917,6 +917,26 @@ const pageTouchmove=(e)=>{
 
     event.preventDefault();//阻止页面移动
 }
+
+// 生成海报所需跳转到小程序页面参数
+const code_scene=computed(()=>{
+    let obj= {
+        chartInfoId:ChartInfoId,
+        searchVal:decodeURIComponent(route.query.searchVal)||'',
+        MyChartId:route.query.MyChartId||'',
+        MyChartClassifyId:route.query.MyChartClassifyId||'',
+    }
+    return JSON.stringify(obj)
+})
+// 生成海报图片所需要的数据
+const posterParams=computed(()=>{
+    return {
+        chart_name:resData.value.ChartInfo.ChartName,
+        chart_image:resData.value.ChartInfo.ChartImage
+    }
+})
+
+
 </script>
 
 <template>
@@ -930,6 +950,13 @@ const pageTouchmove=(e)=>{
                 <span class="date">{{endDate||'结束日期'}}</span>
             </div>
             <img class="icon" src="../../../assets/hzyb/chart/search.png" alt="" @click="handleGoSearch">
+            <share-poster 
+                :shareData="{
+                    type:'chart_detail',
+                    code_scene:code_scene,
+                    data:posterParams
+                }"
+            ></share-poster>
             <img class="icon" src="../../../assets/hzyb/chart/save.png" alt="" @click="handleSaveChart" v-if="canSave">
             <img class="icon" src="../../../assets/hzyb/chart/refresh.png" alt="" @click="handleRefreshChart">
         </div>
@@ -937,13 +964,14 @@ const pageTouchmove=(e)=>{
         <chartBox :options='chartData' v-if="!loading"></chartBox>
         
         <div class="flex source-box">
-            <span>来源:弘则研究</span>
-            <div class="season-change-box" v-if="resData&&resData.ChartInfo.ChartType===2">
+            <div style="flex:1"><span v-if="resData&&resData.ChartInfo.ChartType!==2">来源:{{resData&&resData.ChartInfo.ChartSource}}</span></div>
+            <div class="season-change-box" style="flex:1" v-if="resData&&resData.ChartInfo.ChartType===2">
                 <span :class="calendarType==='农历'&&'active'" @click="calendarTypeChange('农历')">农历</span>
                 <span :class="calendarType==='公历'&&'active'" @click="calendarTypeChange('公历')">公历</span>
             </div>
-            <span style="color:#E3B377" @click="showLimit=true">上下限设置</span>
+            <span style="color:#E3B377;flex:1;text-align:right" @click="showLimit=true">上下限设置</span>
         </div>
+        <div class="source-box" style="margin-top:5px" v-if="resData&&resData.ChartInfo.ChartType===2">来源:{{resData&&resData.ChartInfo.ChartSource}}</div>
 
         <!-- 日期类型 -->
         <div class="date-type-box" v-if="resData&&resData.ChartInfo.ChartType===1">
@@ -1032,9 +1060,6 @@ const pageTouchmove=(e)=>{
                 </div>
             </div>
         </Popup>
-
-        <!-- 分享海报 -->
-        <share-poster :style="{bottom:'100px'}" :shareData="{type:'chartDetail'}"></share-poster>
     </div>
     <!-- 无权限 -->
     <noAuth v-if="noauth" :data="noAuthData"></noAuth>
@@ -1079,7 +1104,7 @@ const pageTouchmove=(e)=>{
             float: right;
             width: 40px;
             height: 40px;
-            margin-left: 50px;
+            margin-left: 30px;
         }
     }
     .select-date-box-head{

+ 20 - 5
src/views/hzyb/components/SharePoster.vue

@@ -1,5 +1,7 @@
 <script setup>
 import {ref} from 'vue'
+import {apiGetPoster} from '@/api/hzyb/common'
+
 const props=defineProps({
     style:Object,
     shareData:Object
@@ -9,13 +11,19 @@ let show=ref(false)
 let showPoster=ref(false)
 let posterImg=ref('')
 
-const handleCreatePoster=()=>{
+const handleCreatePoster=async ()=>{
     show.value=true
-    setTimeout(() => {
+    const res=await apiGetPoster({
+        code_page:props.shareData.code_page,
+        code_scene:props.shareData.code_scene,
+        source:props.shareData.type,
+        pars:props.shareData.data
+    })
+    if(res.code==200){
+        posterImg.value=res.data
         show.value=false
-        posterImg.value='http://hongze.oss-cn-shanghai.aliyuncs.com/static/images/htm2img/e15chyrTqpKDsYPvPRaA77yzIfO6.png'
         showPoster.value=true
-    }, 1500);
+    }
 }
 
 </script>
@@ -23,7 +31,8 @@ const handleCreatePoster=()=>{
 
 <template>
     <div class="share-poster-wrap">
-        <img @click="handleCreatePoster" :style="props.style" class="share-icon" src="@/assets/hzyb/share-poster-icon.png"/>
+        <img @click="handleCreatePoster" class="chart-icon" src="@/assets/hzyb/share-poster-chart-icon.png" alt="" v-if="props.shareData.type=='chart_detail'">
+        <img v-else @click="handleCreatePoster" :style="props.style" class="share-icon" src="@/assets/hzyb/share-poster-icon.png"/>
 
         <view class="poster-mask" v-if="show||showPoster" @click="showPoster=false"></view>
         <view class="loading-box" v-if="show">
@@ -44,6 +53,12 @@ const handleCreatePoster=()=>{
         width: 76px;
         height: 76px;
     }
+    .chart-icon{
+        float: right;
+        width: 40px;
+        height: 40px;
+        margin-left: 30px;
+    }
     .poster-mask{
         position: fixed;
         left: 0;

+ 23 - 1
src/views/hzyb/report/ChapterDetail.vue

@@ -88,7 +88,15 @@
     </van-popup>
 
     <!-- 分享海报 -->
-    <SharePoster :style="{bottom:'100px'}" :shareData="{type:'reportDetail'}" v-if="info.auth_ok"></SharePoster>
+    <SharePoster
+      :style="{bottom:'100px'}" 
+      :shareData="{
+        type:'report_detail',
+        code_scene:code_scene,
+        data:posterParams
+      }" 
+      v-if="info.auth_ok"
+    ></SharePoster>
   </div>
 </van-pull-refresh>
 </template>
@@ -115,6 +123,20 @@ export default {
     AudioBox,
     SharePoster
   },
+  computed:{
+    code_scene(){
+      return JSON.stringify({
+        chapterId:this.chapterId
+      })
+    },
+    posterParams(){
+      return {
+        report_type:this.info.report_chapter_item.classify_name_first,
+        report_title:`【第${this.info.report_chapter_item.stage}期 | ${this.info.report_chapter_item.classify_name_first}  | ${this.info.report_chapter_item.type_name}】${this.info.report_chapter_item.title}`,
+        report_abstract:this.info.report_chapter_item.content
+      }
+    }
+  },
   data() {
     return {
       showDisclaimers: false, //显示免责声明

+ 23 - 1
src/views/hzyb/report/Detail.vue

@@ -81,7 +81,15 @@
             <img v-if="showToTop&&info.auth_ok" @click="handleBackTop" class="back-top-img" src="@/assets/hzyb/report/back-top.png" mode="aspectFill"/>
 
             <!-- 分享海报 -->
-            <SharePoster :style="{bottom:'100px'}" :shareData="{type:'reportDetail'}" v-if="info.auth_ok"></SharePoster>
+            <SharePoster 
+                :style="{bottom:'100px'}" 
+                :shareData="{
+                    type:'report_detail',
+                    code_scene:code_scene,
+                    data:posterParams
+                }"
+                v-if="info.auth_ok"
+            ></SharePoster>
         </div>
 
         <!-- 免责声明 -->
@@ -130,6 +138,20 @@ export default {
         AudioBox,
         SharePoster
     },
+    computed:{
+        code_scene(){
+            return JSON.stringify({
+                reportId:this.reportId
+            })
+        },
+        posterParams(){
+            return {
+                report_type:this.info.report_info.classify_name_first,
+                report_title:`【第${this.info.report_info.stage}期 | ${this.info.report_info.classify_name_second}】${this.info.report_info.title}`,
+                report_abstract:this.info.report_info.content
+            }
+        }
+    },
     data () {
         return {
             showDisclaimers:false,//显示免责声明