2023-03-27 03:18:25 +08:00
|
|
|
|
<!--
|
|
|
|
|
- Copyright (C) 2018-2019
|
|
|
|
|
- All rights reserved, Designed By www.joolun.com
|
|
|
|
|
芋道源码:
|
|
|
|
|
① 移除多余的 rep 为前缀的变量,让 message 消息更简单
|
|
|
|
|
② 代码优化,补充注释,提升阅读性
|
|
|
|
|
③ 优化消息的临时缓存策略,发送消息时,只清理被发送消息的 tab,不会强制切回到 text 输入
|
|
|
|
|
④ 支持发送【视频】消息时,支持新建视频
|
|
|
|
|
-->
|
|
|
|
|
<template>
|
2023-04-19 11:07:51 +08:00
|
|
|
|
<el-tabs type="border-card" v-model="objData.type" @tab-click="onTabClick">
|
2023-03-27 03:18:25 +08:00
|
|
|
|
<!-- 类型 1:文本 -->
|
2023-04-19 11:07:51 +08:00
|
|
|
|
<TabText v-model="objData.content" />
|
2023-03-27 03:18:25 +08:00
|
|
|
|
<!-- 类型 2:图片 -->
|
2023-04-19 11:07:51 +08:00
|
|
|
|
<TabImage v-model="objData" />
|
2023-03-27 03:18:25 +08:00
|
|
|
|
<!-- 类型 3:语音 -->
|
2023-04-19 11:07:51 +08:00
|
|
|
|
<TabVoice v-model="objData" />
|
2023-03-28 01:18:37 +08:00
|
|
|
|
<!-- 类型 4:视频 -->
|
2023-04-19 11:07:51 +08:00
|
|
|
|
<TabVideo v-model="objData" />
|
2023-03-27 03:18:25 +08:00
|
|
|
|
<!-- 类型 5:图文 -->
|
2023-04-19 11:07:51 +08:00
|
|
|
|
<TabNews v-model="objData" :news-type="newsType" />
|
2023-03-27 03:18:25 +08:00
|
|
|
|
<!-- 类型 6:音乐 -->
|
2023-04-19 11:07:51 +08:00
|
|
|
|
<TabMusic v-model="objData" />
|
2023-03-27 03:18:25 +08:00
|
|
|
|
</el-tabs>
|
|
|
|
|
</template>
|
2023-03-26 04:25:34 +08:00
|
|
|
|
|
2023-04-19 11:07:51 +08:00
|
|
|
|
<script setup lang="ts" name="WxReplySelect">
|
|
|
|
|
import { ObjData, NewsType } from './components/types'
|
|
|
|
|
import TabText from './components/TabText.vue'
|
|
|
|
|
import TabImage from './components/TabImage.vue'
|
|
|
|
|
import TabVoice from './components/TabVoice.vue'
|
|
|
|
|
import TabVideo from './components/TabVideo.vue'
|
|
|
|
|
import TabNews from './components/TabNews.vue'
|
|
|
|
|
import TabMusic from './components/TabMusic.vue'
|
|
|
|
|
|
|
|
|
|
interface Props {
|
|
|
|
|
objData: ObjData
|
|
|
|
|
newsType?: NewsType
|
2023-04-18 11:18:37 +08:00
|
|
|
|
}
|
2023-04-19 11:07:51 +08:00
|
|
|
|
const props = withDefaults(defineProps<Props>(), {
|
|
|
|
|
newsType: () => NewsType.Published
|
2023-04-18 11:18:37 +08:00
|
|
|
|
})
|
2023-03-26 04:25:34 +08:00
|
|
|
|
|
2023-04-19 11:07:51 +08:00
|
|
|
|
const objData = reactive(props.objData)
|
|
|
|
|
// const tempObj = new Map().set(objData.type, Object.assign({}, objData))
|
2023-04-18 11:18:37 +08:00
|
|
|
|
|
2023-04-19 11:07:51 +08:00
|
|
|
|
/** 切换消息类型的 tab */
|
|
|
|
|
const onTabClick = () => {
|
|
|
|
|
clear()
|
2023-04-18 11:18:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-04-19 11:07:51 +08:00
|
|
|
|
/** 清除除了`type`的字段 */
|
|
|
|
|
const clear = () => {
|
2023-04-18 11:18:37 +08:00
|
|
|
|
objData.content = ''
|
|
|
|
|
objData.mediaId = ''
|
|
|
|
|
objData.url = ''
|
|
|
|
|
objData.title = ''
|
|
|
|
|
objData.description = ''
|
2023-04-19 11:07:51 +08:00
|
|
|
|
objData.articles = []
|
2023-04-18 11:18:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-04-19 11:07:51 +08:00
|
|
|
|
defineExpose({
|
|
|
|
|
clear
|
|
|
|
|
})
|
2023-03-27 03:18:25 +08:00
|
|
|
|
</script>
|
2023-03-26 04:25:34 +08:00
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
.select-item {
|
|
|
|
|
width: 280px;
|
|
|
|
|
padding: 10px;
|
|
|
|
|
margin: 0 auto 10px auto;
|
|
|
|
|
border: 1px solid #eaeaea;
|
|
|
|
|
}
|
2023-03-28 01:18:37 +08:00
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
.select-item2 {
|
|
|
|
|
padding: 10px;
|
|
|
|
|
margin: 0 auto 10px auto;
|
|
|
|
|
border: 1px solid #eaeaea;
|
|
|
|
|
}
|
2023-03-28 01:18:37 +08:00
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
.ope-row {
|
|
|
|
|
padding-top: 10px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
2023-03-28 01:18:37 +08:00
|
|
|
|
|
|
|
|
|
.input-margin-bottom {
|
|
|
|
|
margin-bottom: 2%;
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
.item-name {
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
2023-03-28 01:18:37 +08:00
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
.el-form-item__content {
|
|
|
|
|
line-height: unset !important;
|
|
|
|
|
}
|
2023-03-28 01:18:37 +08:00
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
.col-select {
|
|
|
|
|
border: 1px solid rgb(234, 234, 234);
|
|
|
|
|
padding: 50px 0px;
|
|
|
|
|
height: 160px;
|
|
|
|
|
width: 49.5%;
|
|
|
|
|
}
|
2023-03-28 01:18:37 +08:00
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
.col-select2 {
|
|
|
|
|
border: 1px solid rgb(234, 234, 234);
|
|
|
|
|
padding: 50px 0px;
|
|
|
|
|
height: 160px;
|
|
|
|
|
}
|
2023-03-28 01:18:37 +08:00
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
.col-add {
|
|
|
|
|
border: 1px solid rgb(234, 234, 234);
|
|
|
|
|
padding: 50px 0px;
|
|
|
|
|
height: 160px;
|
|
|
|
|
width: 49.5%;
|
|
|
|
|
float: right;
|
|
|
|
|
}
|
2023-03-28 01:18:37 +08:00
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
.avatar-uploader-icon {
|
|
|
|
|
border: 1px solid #d9d9d9;
|
|
|
|
|
font-size: 28px;
|
|
|
|
|
color: #8c939d;
|
|
|
|
|
width: 100px !important;
|
|
|
|
|
height: 100px !important;
|
|
|
|
|
line-height: 100px !important;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
2023-03-28 01:18:37 +08:00
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
.material-img {
|
|
|
|
|
width: 100%;
|
|
|
|
|
}
|
2023-03-28 01:18:37 +08:00
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
.thumb-div {
|
|
|
|
|
display: inline-block;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
2023-03-28 01:18:37 +08:00
|
|
|
|
|
2023-03-27 03:18:25 +08:00
|
|
|
|
.item-infos {
|
|
|
|
|
width: 30%;
|
|
|
|
|
margin: auto;
|
|
|
|
|
}
|
|
|
|
|
</style>
|