mp:支持 wx-news、wx-location 类型的消息

This commit is contained in:
YunaiV 2023-01-09 23:58:53 +08:00
parent 9e4a978f85
commit b0386429fe
6 changed files with 159 additions and 14 deletions

View File

@ -0,0 +1,36 @@
<!--
微信消息 - 定位
-->
<template>
<div>
<el-link type="primary" target="_blank" :href="'https://map.qq.com/?type=marker&isopeninfowin=1&markertype=1&pointx=' + locationY + '&pointy=' + locationX + '&name=' + label + '&ref=yudao'">
<img :src="'https://apis.map.qq.com/ws/staticmap/v2/?zoom=10&markers=color:blue|label:A|' + locationX + ',' + locationY + '&key=' + qqMapKey + '&size=250*180'">
<p/><i class="el-icon-map-location"></i>{{label}}
</el-link>
</div>
</template>
<script>
export default {
name: "wxLocation",
props: {
locationX: {
required: true,
type: Number
},
locationY: {
required: true,
type: Number
},
label: { //
required: true,
type: String
},
qqMapKey: { // QQ https://lbs.qq.com/service/staticV2/staticGuide/staticDoc
required: false,
type: String,
default: 'TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E' //
}
}
};
</script>

View File

@ -58,23 +58,20 @@
<div v-else-if="item.type === 'video' || item.type === 'shortvideo'" style="text-align: center"> <div v-else-if="item.type === 'video' || item.type === 'shortvideo'" style="text-align: center">
<wx-video-player :url="item.mediaUrl" /> <wx-video-player :url="item.mediaUrl" />
</div> </div>
<div v-if="item.type === 'link'" class="avue-card__detail"> <div v-else-if="item.type === 'link'" class="avue-card__detail">
<el-link type="success" :underline="false" target="_blank" :href="item.url"> <el-link type="success" :underline="false" target="_blank" :href="item.url">
<div class="avue-card__title"><i class="el-icon-link"></i>{{ item.title }}</div> <div class="avue-card__title"><i class="el-icon-link"></i>{{ item.title }}</div>
</el-link> </el-link>
<div class="avue-card__info" style="height: unset">{{item.description}}</div> <div class="avue-card__info" style="height: unset">{{item.description}}</div>
</div> </div>
<!-- TODO 芋艿待完善 --> <!-- TODO 芋艿待完善 -->
<!-- <div v-if="item.repType == 'location'">--> <div v-else-if="item.type === 'location'">
<!-- <el-link type="primary" target="_blank" :href="'https://map.qq.com/?type=marker&isopeninfowin=1&markertype=1&pointx='+item.repLocationY+'&pointy='+item.repLocationX+'&name='+item.repContent+'&ref=joolun'">--> <wx-location :label="item.label" :location-y="item.locationY" :location-x="item.locationX" />
<!-- <img :src="'https://apis.map.qq.com/ws/staticmap/v2/?zoom=10&markers=color:blue|label:A|'+item.repLocationX+','+item.repLocationY+'&key='+qqMapKey+'&size=250*180'">--> </div>
<!-- <p/><i class="el-icon-map-location"></i>{{item.repContent}}-->
<!-- </el-link>-->
<!-- </div>-->
<!-- <div v-if="item.repType == 'news'" style="width: 300px">--> <div v-else-if="item.type === 'news'" style="width: 300px"> <!-- TODO 芋艿待测试详情页也存在类似的情况 -->
<!-- <WxNews :objData="item.content.articles"></WxNews>--> <wx-news :articles="item.articles" />
<!-- </div>--> </div>
<!-- <div v-if="item.repType == 'music'">--> <!-- <div v-if="item.repType == 'music'">-->
<!-- <el-link type="success" :underline="false" target="_blank" :href="item.repUrl">--> <!-- <el-link type="success" :underline="false" target="_blank" :href="item.repUrl">-->
@ -105,14 +102,17 @@
// import WxNews from '@/components/wx-news/main.vue' // import WxNews from '@/components/wx-news/main.vue'
import WxVideoPlayer from '@/views/mp/components/wx-video-play/main.vue'; import WxVideoPlayer from '@/views/mp/components/wx-video-play/main.vue';
import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue'; import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue';
import WxNews from '@/views/mp/components/wx-news/main.vue';
import WxLocation from '@/views/mp/components/wx-location/main.vue';
export default { export default {
name: "wxMsg", name: "wxMsg",
components: { components: {
// WxReplySelect, // WxReplySelect,
// WxNews,
WxVideoPlayer, WxVideoPlayer,
WxVoicePlayer WxVoicePlayer,
WxNews,
WxLocation
}, },
props: { props: {
wxUserId: { wxUserId: {
@ -140,7 +140,8 @@
mp: { mp: {
nickname: '公众号', nickname: '公众号',
avatar: require("@/assets/images/wechat.png"), avatar: require("@/assets/images/wechat.png"),
} },
qqMapKey: '' //
} }
}, },
created() { created() {

View File

@ -0,0 +1,101 @@
<!--
- Copyright (C) 2018-2019
- All rights reserved, Designed By www.joolun.com
微信消息 - 图文
芋道源码
代码优化补充注释提升阅读性
-->
<template>
<div class="news-home">
<div v-for="(article, index) in articles" :key="index" class="news-div">
<!-- 头条 -->
<a target="_blank" :href="article.url" v-if="index === 0">
<div class="news-main">
<div class="news-content">
<img class="material-img" :src="article.picUrl" width="280px" height="120px"/>
<div class="news-content-title">
<span>{{article.title}}</span>
</div>
</div>
</div>
</a>
<!-- 二条/三条等等 -->
<a target="_blank" :href="article.url" v-else>
<div class="news-main-item">
<div class="news-content-item">
<div class="news-content-item-title">{{article.title}}</div>
<div class="news-content-item-img">
<img class="material-img" :src="article.picUrl" height="100%"/>
</div>
</div>
</div>
</a>
</div>
</div>
</template>
<script>
export default {
name: "wxNews",
props: {
articles: {
type: Array // title - description - picUrl - url -
}
}
};
</script>
<style lang="scss" scoped>
.news-home {
background-color: #FFFFFF;
width: 100%;
margin: auto;
}
.news-main {
width: 100%;
margin: auto;
}
.news-content {
background-color: #acadae;
width: 100%;
position: relative;
}
.news-content-title {
display: inline-block;
font-size: 12px;
color: #FFFFFF;
position: absolute;
left: 0;
bottom: 0;
background-color: black;
width: 98%;
padding: 1%;
opacity: 0.65;
white-space: normal;
box-sizing: unset!important
}
.news-main-item {
background-color: #FFFFFF;
padding: 5px 0;
border-top: 1px solid #eaeaea;
}
.news-content-item {
position: relative;
}
.news-content-item-title {
display: inline-block;
font-size: 10px;
width: 70%;
margin-left: 1%;
white-space: normal
}
.news-content-item-img {
display: inline-block;
width: 25%;
background-color: #acadae;
margin-right: 1%;
}
.material-img {
width: 100%;
}
</style>

View File

@ -1,6 +1,7 @@
<!-- <!--
- Copyright (C) 2018-2019 - Copyright (C) 2018-2019
- All rights reserved, Designed By www.joolun.com - All rights reserved, Designed By www.joolun.com
微信消息 - 视频
芋道源码 芋道源码
bug 修复 bug 修复
1joolun 的做法使用 mediaId 从微信公众号下载对应的 mp4 素材从而播放内容 1joolun 的做法使用 mediaId 从微信公众号下载对应的 mp4 素材从而播放内容

View File

@ -1,6 +1,7 @@
<!-- <!--
- Copyright (C) 2018-2019 - Copyright (C) 2018-2019
- All rights reserved, Designed By www.joolun.com - All rights reserved, Designed By www.joolun.com
微信消息 - 语音
芋道源码 芋道源码
bug 修复 bug 修复
1joolun 的做法使用 mediaId 从微信公众号下载对应的 mp4 素材从而播放内容 1joolun 的做法使用 mediaId 从微信公众号下载对应的 mp4 素材从而播放内容

View File

@ -86,6 +86,9 @@
<el-tag size="mini">链接</el-tag> <el-tag size="mini">链接</el-tag>
<a :href="scope.row.url" target="_blank">{{scope.row.title}}</a> <a :href="scope.row.url" target="_blank">{{scope.row.title}}</a>
</div> </div>
<div v-else-if="scope.row.type === 'location'">
<wx-location :label="scope.row.label" :location-y="scope.row.locationY" :location-x="scope.row.locationX" />
</div>
<div v-else> <div v-else>
<el-tag type="danger" size="mini">未知消息类型</el-tag> <el-tag type="danger" size="mini">未知消息类型</el-tag>
</div> </div>
@ -115,13 +118,15 @@ import { getMessagePage } from "@/api/mp/message";
import WxVideoPlayer from '@/views/mp/components/wx-video-play/main.vue'; import WxVideoPlayer from '@/views/mp/components/wx-video-play/main.vue';
import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue'; import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue';
import WxMsg from '@/views/mp/components/wx-msg/main.vue'; import WxMsg from '@/views/mp/components/wx-msg/main.vue';
import WxLocation from '@/views/mp/components/wx-location/main.vue';
export default { export default {
name: "WxFansMsg", name: "WxFansMsg",
components: { components: {
WxVideoPlayer, WxVideoPlayer,
WxVoicePlayer, WxVoicePlayer,
WxMsg WxMsg,
WxLocation
}, },
data() { data() {
return { return {