Commit 6325dd288cd6db11a241ac443db7b3e64eb6e2ae

Authored by YunaiV
1 parent 9cf88d19

mp:前端增加 message 消息的展示

yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/MpMessageBaseVO.java
@@ -10,6 +10,7 @@ import me.chanjar.weixin.common.api.WxConsts; @@ -10,6 +10,7 @@ import me.chanjar.weixin.common.api.WxConsts;
10 10
11 import java.util.List; 11 import java.util.List;
12 12
  13 +// TODO 芋艿:VO 的注解
13 /** 14 /**
14 * 粉丝消息表 Base VO,提供给添加、修改、详细的子 VO 使用 15 * 粉丝消息表 Base VO,提供给添加、修改、详细的子 VO 使用
15 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 16 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
@@ -158,6 +159,21 @@ public class MpMessageBaseVO { @@ -158,6 +159,21 @@ public class MpMessageBaseVO {
158 @TableField(typeHandler = MpMessageDO.ArticleTypeHandler.class) 159 @TableField(typeHandler = MpMessageDO.ArticleTypeHandler.class)
159 private List<MpMessageDO.Article> articles; 160 private List<MpMessageDO.Article> articles;
160 161
  162 + /**
  163 + * 音乐链接
  164 + *
  165 + * 消息类型为 {@link WxConsts.XmlMsgType} 的 MUSIC
  166 + */
  167 + private String musicUrl;
  168 + /**
  169 + * 高质量音乐链接
  170 + *
  171 + * WIFI 环境优先使用该链接播放音乐
  172 + *
  173 + * 消息类型为 {@link WxConsts.XmlMsgType} 的 MUSIC
  174 + */
  175 + private String hqMusicUrl;
  176 +
161 // ========= 事件推送 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html 177 // ========= 事件推送 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html
162 178
163 /** 179 /**
yudao-ui-admin/src/views/mp/components/wx-msg/card.scss
@@ -84,3 +84,18 @@ @@ -84,3 +84,18 @@
84 } 84 }
85 } 85 }
86 } 86 }
  87 +
  88 +/** joolun 额外加的 */
  89 +.avue-comment__main {
  90 + flex: unset!important;
  91 + border-radius: 5px!important;
  92 + margin: 0 8px!important;
  93 +}
  94 +.avue-comment__header {
  95 + border-top-left-radius: 5px;
  96 + border-top-right-radius: 5px;
  97 +}
  98 +.avue-comment__body {
  99 + border-bottom-right-radius: 5px;
  100 + border-bottom-left-radius: 5px;
  101 +}
yudao-ui-admin/src/views/mp/components/wx-msg/main.vue
@@ -68,22 +68,13 @@ @@ -68,22 +68,13 @@
68 <div v-else-if="item.type === 'location'"> 68 <div v-else-if="item.type === 'location'">
69 <wx-location :label="item.label" :location-y="item.locationY" :location-x="item.locationX" /> 69 <wx-location :label="item.label" :location-y="item.locationY" :location-x="item.locationX" />
70 </div> 70 </div>
71 -  
72 <div v-else-if="item.type === 'news'" style="width: 300px"> <!-- TODO 芋艿:待测试;详情页也存在类似的情况 --> 71 <div v-else-if="item.type === 'news'" style="width: 300px"> <!-- TODO 芋艿:待测试;详情页也存在类似的情况 -->
73 <wx-news :articles="item.articles" /> 72 <wx-news :articles="item.articles" />
74 </div> 73 </div>
75 -  
76 -<!-- <div v-if="item.repType == 'music'">-->  
77 -<!-- <el-link type="success" :underline="false" target="_blank" :href="item.repUrl">-->  
78 -<!-- <div class="avue-card__body" style="padding:10px;background-color: #fff;border-radius: 5px">-->  
79 -<!-- <div class="avue-card__avatar"><img :src="item.repThumbUrl" alt=""></div>-->  
80 -<!-- <div class="avue-card__detail">-->  
81 -<!-- <div class="avue-card__title" style="margin-bottom:unset">{{item.repName}}</div>-->  
82 -<!-- <div class="avue-card__info" style="height: unset">{{item.repDesc}}</div>-->  
83 -<!-- </div>-->  
84 -<!-- </div>-->  
85 -<!-- </el-link>-->  
86 -<!-- </div>--> 74 + <div v-else-if="item.type === 'music'">
  75 + <wx-music :title="item.title" :description="item.description" :thumb-media-url="item.thumbMediaUrl"
  76 + :music-url="item.musicUrl" :hq-music-url="item.hqMusicUrl" />
  77 + </div>
87 </div> 78 </div>
88 </div> 79 </div>
89 </div> 80 </div>
@@ -103,6 +94,7 @@ @@ -103,6 +94,7 @@
103 import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue'; 94 import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue';
104 import WxNews from '@/views/mp/components/wx-news/main.vue'; 95 import WxNews from '@/views/mp/components/wx-news/main.vue';
105 import WxLocation from '@/views/mp/components/wx-location/main.vue'; 96 import WxLocation from '@/views/mp/components/wx-location/main.vue';
  97 + import WxMusic from '@/views/mp/components/wx-music/main.vue';
106 98
107 export default { 99 export default {
108 name: "wxMsg", 100 name: "wxMsg",
@@ -111,7 +103,8 @@ @@ -111,7 +103,8 @@
111 WxVideoPlayer, 103 WxVideoPlayer,
112 WxVoicePlayer, 104 WxVoicePlayer,
113 WxNews, 105 WxNews,
114 - WxLocation 106 + WxLocation,
  107 + WxMusic
115 }, 108 },
116 props: { 109 props: {
117 wxUserId: { 110 wxUserId: {
@@ -245,19 +238,6 @@ @@ -245,19 +238,6 @@
245 .msg-send { 238 .msg-send {
246 padding: 10px; 239 padding: 10px;
247 } 240 }
248 -.avue-comment__main {  
249 - flex: unset!important;  
250 - border-radius: 5px!important;  
251 - margin: 0 8px!important;  
252 -}  
253 -.avue-comment__header {  
254 - border-top-left-radius: 5px;  
255 - border-top-right-radius: 5px;  
256 -}  
257 -.avue-comment__body {  
258 - border-bottom-right-radius: 5px;  
259 - border-bottom-left-radius: 5px;  
260 -}  
261 .avatar-div { 241 .avatar-div {
262 text-align: center; 242 text-align: center;
263 width: 80px; 243 width: 80px;
yudao-ui-admin/src/views/mp/components/wx-music/main.vue 0 → 100644
  1 +<!--
  2 + 【微信消息 - 音乐】
  3 +-->
  4 +<template>
  5 + <div>
  6 + <el-link type="success" :underline="false" target="_blank" :href="hqMusicUrl ? hqMusicUrl : musicUrl">
  7 + <div class="avue-card__body" style="padding:10px;background-color: #fff;border-radius: 5px">
  8 + <div class="avue-card__avatar">
  9 + <img :src="thumbMediaUrl" alt=""/>
  10 + </div>
  11 + <div class="avue-card__detail">
  12 + <div class="avue-card__title" style="margin-bottom:unset">{{ title }}</div>
  13 + <div class="avue-card__info" style="height: unset">{{ description }}</div>
  14 + </div>
  15 + </div>
  16 + </el-link>
  17 + </div>
  18 +</template>
  19 +
  20 +<script>
  21 +
  22 +export default {
  23 + name: "wxMusic",
  24 + props: {
  25 + title: {
  26 + required: false,
  27 + type: String
  28 + },
  29 + description: {
  30 + required: false,
  31 + type: String
  32 + },
  33 + musicUrl: {
  34 + required: false,
  35 + type: String
  36 + },
  37 + hqMusicUrl: {
  38 + required: false,
  39 + type: String
  40 + },
  41 + thumbMediaUrl: {
  42 + required: true,
  43 + type: String
  44 + },
  45 + }
  46 +};
  47 +</script>
  48 +
  49 +<style lang="scss" scoped>
  50 +/* 因为 joolun 实现依赖 avue 组件,该页面使用了 card.scc */
  51 +@import '../wx-msg/card.scss';
  52 +</style>
yudao-ui-admin/src/views/mp/message/index.vue
@@ -89,6 +89,10 @@ @@ -89,6 +89,10 @@
89 <div v-else-if="scope.row.type === 'location'"> 89 <div v-else-if="scope.row.type === 'location'">
90 <wx-location :label="scope.row.label" :location-y="scope.row.locationY" :location-x="scope.row.locationX" /> 90 <wx-location :label="scope.row.label" :location-y="scope.row.locationY" :location-x="scope.row.locationX" />
91 </div> 91 </div>
  92 + <div v-else-if="scope.row.type === 'music'">
  93 + <wx-music :title="scope.row.title" :description="scope.row.description" :thumb-media-url="scope.row.thumbMediaUrl"
  94 + :music-url="scope.row.musicUrl" :hq-music-url="scope.row.hqMusicUrl" />
  95 + </div>
92 <div v-else> 96 <div v-else>
93 <el-tag type="danger" size="mini">未知消息类型</el-tag> 97 <el-tag type="danger" size="mini">未知消息类型</el-tag>
94 </div> 98 </div>
@@ -119,6 +123,7 @@ import WxVideoPlayer from &#39;@/views/mp/components/wx-video-play/main.vue&#39;; @@ -119,6 +123,7 @@ import WxVideoPlayer from &#39;@/views/mp/components/wx-video-play/main.vue&#39;;
119 import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue'; 123 import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue';
120 import WxMsg from '@/views/mp/components/wx-msg/main.vue'; 124 import WxMsg from '@/views/mp/components/wx-msg/main.vue';
121 import WxLocation from '@/views/mp/components/wx-location/main.vue'; 125 import WxLocation from '@/views/mp/components/wx-location/main.vue';
  126 +import WxMusic from '@/views/mp/components/wx-music/main.vue';
122 127
123 export default { 128 export default {
124 name: "WxFansMsg", 129 name: "WxFansMsg",
@@ -126,7 +131,8 @@ export default { @@ -126,7 +131,8 @@ export default {
126 WxVideoPlayer, 131 WxVideoPlayer,
127 WxVoicePlayer, 132 WxVoicePlayer,
128 WxMsg, 133 WxMsg,
129 - WxLocation 134 + WxLocation,
  135 + WxMusic
130 }, 136 },
131 data() { 137 data() {
132 return { 138 return {