Commit 7ba6a2e385538eb4008dcdf2df40da0a06a6ef92

Authored by YunaiV
1 parent 331af28f

mp:增加【视频】消息的发送

yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/vo/MpMessageSendReqVO.java
@@ -38,7 +38,7 @@ public class MpMessageSendReqVO { @@ -38,7 +38,7 @@ public class MpMessageSendReqVO {
38 private String title; 38 private String title;
39 39
40 @ApiModelProperty(value = "描述", required = true, example = "你猜") 40 @ApiModelProperty(value = "描述", required = true, example = "你猜")
41 - @NotEmpty(message = "消息内容不能为空", groups = VideoGroup.class) 41 + @NotEmpty(message = "消息描述不能为空", groups = VideoGroup.class)
42 private String description; 42 private String description;
43 43
44 @ApiModelProperty(value = "缩略图的媒体 id", required = true, example = "qqc_2Fot30Jse-HDoZmo5RrUDijz2nGUkP") 44 @ApiModelProperty(value = "缩略图的媒体 id", required = true, example = "qqc_2Fot30Jse-HDoZmo5RrUDijz2nGUkP")
yudao-ui-admin/src/views/mp/components/wx-material-select/main.vue
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
28 <!-- 列表 --> 28 <!-- 列表 -->
29 <el-table v-loading="loading" :data="list"> 29 <el-table v-loading="loading" :data="list">
30 <el-table-column label="编号" align="center" prop="mediaId" /> 30 <el-table-column label="编号" align="center" prop="mediaId" />
31 - <el-table-column label="名字" align="center" prop="name" /> 31 + <el-table-column label="文件名" align="center" prop="name" />
32 <el-table-column label="语音" align="center"> 32 <el-table-column label="语音" align="center">
33 <template v-slot="scope"> 33 <template v-slot="scope">
34 <wx-voice-player :url="scope.row.url" /> 34 <wx-voice-player :url="scope.row.url" />
@@ -54,6 +54,7 @@ @@ -54,6 +54,7 @@
54 <!-- 列表 --> 54 <!-- 列表 -->
55 <el-table v-loading="loading" :data="list"> 55 <el-table v-loading="loading" :data="list">
56 <el-table-column label="编号" align="center" prop="mediaId" /> 56 <el-table-column label="编号" align="center" prop="mediaId" />
  57 + <el-table-column label="文件名" align="center" prop="name" />
57 <el-table-column label="标题" align="center" prop="title" /> 58 <el-table-column label="标题" align="center" prop="title" />
58 <el-table-column label="介绍" align="center" prop="introduction" /> 59 <el-table-column label="介绍" align="center" prop="introduction" />
59 <el-table-column label="视频" align="center"> 60 <el-table-column label="视频" align="center">
yudao-ui-admin/src/views/mp/components/wx-reply/main.vue
@@ -81,15 +81,16 @@ @@ -81,15 +81,16 @@
81 </el-dialog> 81 </el-dialog>
82 </el-row> 82 </el-row>
83 </el-tab-pane> 83 </el-tab-pane>
  84 + <!-- 类型 4:视频 -->
84 <el-tab-pane name="video"> 85 <el-tab-pane name="video">
85 <span slot="label"><i class="el-icon-share"></i> 视频</span> 86 <span slot="label"><i class="el-icon-share"></i> 视频</span>
86 <el-row> 87 <el-row>
87 - <el-input v-model="objData.repName" placeholder="请输入标题"></el-input> 88 + <el-input v-model="objData.title" placeholder="请输入标题"></el-input>
88 <div style="margin: 20px 0;"></div> 89 <div style="margin: 20px 0;"></div>
89 - <el-input v-model="objData.repDesc" placeholder="请输入描述"></el-input> 90 + <el-input v-model="objData.description" placeholder="请输入描述"></el-input>
90 <div style="margin: 20px 0;"></div> 91 <div style="margin: 20px 0;"></div>
91 <div style="text-align: center;"> 92 <div style="text-align: center;">
92 - <a target="_blank" v-if="objData.url" :href="objData.url"><i class="icon-shipinbofang">&nbsp;播放视频</i></a> 93 + <wx-video-player v-if="objData.url" :url="objData.url" />
93 </div> 94 </div>
94 <div style="margin: 20px 0;"></div> 95 <div style="margin: 20px 0;"></div>
95 <div style="text-align: center"> 96 <div style="text-align: center">
@@ -161,13 +162,15 @@ @@ -161,13 +162,15 @@
161 import WxNews from '@/views/mp/components/wx-news/main.vue' 162 import WxNews from '@/views/mp/components/wx-news/main.vue'
162 import WxMaterialSelect from '@/views/mp/components/wx-material-select/main.vue' 163 import WxMaterialSelect from '@/views/mp/components/wx-material-select/main.vue'
163 import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue'; 164 import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue';
  165 + import WxVideoPlayer from '@/views/mp/components/wx-video-play/main.vue';
164 166
165 export default { 167 export default {
166 name: "wxReplySelect", 168 name: "wxReplySelect",
167 components: { 169 components: {
168 WxNews, 170 WxNews,
169 WxMaterialSelect, 171 WxMaterialSelect,
170 - WxVoicePlayer 172 + WxVoicePlayer,
  173 + WxVideoPlayer
171 }, 174 },
172 props: { 175 props: {
173 objData: { // 消息对象。 176 objData: { // 消息对象。
@@ -354,27 +357,22 @@ @@ -354,27 +357,22 @@
354 || this.objData.type === 'voice') { 357 || this.objData.type === 'voice') {
355 tempObjItem.mediaId = item.mediaId 358 tempObjItem.mediaId = item.mediaId
356 this.objData.mediaId = item.mediaId 359 this.objData.mediaId = item.mediaId
357 - if (item.url) {  
358 - tempObjItem.url = item.url;  
359 - this.objData.url = item.url;  
360 - } else { // 必须使用 $delete 删除,否则 vue 监听不到数据  
361 - this.$delete(this.objData, 'url');  
362 - } 360 + tempObjItem.url = item.url;
  361 + this.objData.url = item.url;
363 tempObjItem.name = item.name 362 tempObjItem.name = item.name
364 this.objData.name = item.name 363 this.objData.name = item.name
365 } else if (this.objData.type === 'video') { 364 } else if (this.objData.type === 'video') {
366 - // getMaterialVideo({  
367 - // mediaId:item.mediaId  
368 - // }).then(response => {  
369 - // if(response.code == 200){  
370 - // let data = response.data  
371 - // this.$set(this.objData,'repName',data.title)  
372 - // this.$set(this.objData,'repDesc',data.description)  
373 - // this.$set(this.objData,'url',data.downUrl)  
374 - // tempObjItem.repDesc = data.description  
375 - // tempObjItem.url = data.downUrl  
376 - // }  
377 - // }) 365 + tempObjItem.mediaId = item.mediaId
  366 + this.objData.mediaId = item.mediaId
  367 + tempObjItem.url = item.url;
  368 + this.objData.url = item.url;
  369 + tempObjItem.name = item.name
  370 + this.objData.name = item.name
  371 + // title、introduction
  372 + this.objData.title = item.title
  373 + tempObjItem.title = this.objData.title
  374 + this.objData.description = item.introduction // 消息使用的是 description,素材使用的是 introduction,所以转换下
  375 + tempObjItem.description = this.objData.introduction
378 } 376 }
379 // 最终设置到临时缓存 377 // 最终设置到临时缓存
380 this.tempObj.set(this.objData.type, tempObjItem) 378 this.tempObj.set(this.objData.type, tempObjItem)
@@ -400,15 +398,8 @@ @@ -400,15 +398,8 @@
400 this.dialogThumbVisible = false 398 this.dialogThumbVisible = false
401 }, 399 },
402 deleteObj() { 400 deleteObj() {
403 - console.log('删除!');  
404 - if (this.objData.type === 'news') {  
405 - // TODO 芋艿,待实现  
406 - } else if(this.objData.type === 'image'  
407 - || this.objData.type === 'voice') {  
408 - this.selectMaterial({}) // 选择一个空的素材  
409 - } else if(this.objData.type === 'video') {  
410 - // TODO 芋艿,待实现  
411 - } 401 + // this.$delete(this.objData, 'url'); TODO 芋艿:重新实现清空;还有 reset
  402 + this.selectMaterial({}) // 选择一个空的素材
412 }, 403 },
413 getPage(page, params) { 404 getPage(page, params) {
414 this.tableLoading = true 405 this.tableLoading = true