194 lines
6.9 KiB
Vue
194 lines
6.9 KiB
Vue
<template>
|
||
<view class="sent--popups u-border-top" v-if="show">
|
||
<view class="item" @click="onPopupsItem('picture')">
|
||
<image class="icon" src="@/static/icon/popups-icon-00.png" mode="widthFix"></image>
|
||
<text class="text">相册</text>
|
||
</view>
|
||
<view class="item" @click="onPopupsItem('camera')">
|
||
<image class="icon" src="@/static/icon/popups-icon-01.png" mode="widthFix"></image>
|
||
<text class="text">拍摄</text>
|
||
</view>
|
||
<view class="item" @click="onPopupsItem('video')" v-if="conversationType == 1">
|
||
<image class="icon" src="@/static/icon/popups-icon-02.png" mode="widthFix"></image>
|
||
<text class="text">视频通话</text>
|
||
</view>
|
||
<view class="item" @click="onPopupsItem('location')">
|
||
<image class="icon" src="@/static/icon/popups-icon-03.png" mode="widthFix"></image>
|
||
<text class="text">位置</text>
|
||
</view>
|
||
<view class="item" @click="onPopupsItem('redpacket')">
|
||
<image class="icon" src="@/static/icon/popups-icon-04.png" mode="widthFix"></image>
|
||
<text class="text">红包</text>
|
||
</view>
|
||
<view class="item" @click="onPopupsItem('file')">
|
||
<image class="icon" src="@/static/icon/popups-icon-05.png" mode="widthFix"></image>
|
||
<text class="text">文件</text>
|
||
</view>
|
||
|
||
<tki-file-manager ref="filemanager" @result="sendFileMessage"></tki-file-manager>
|
||
|
||
<u-action-sheet :actions="callActions" cancelText="取消" @close="callShow = false" @select="singleCall"
|
||
:show="callShow">
|
||
</u-action-sheet>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import im from '@/utils/im/index.js'
|
||
import imBase from '../../mixins/imBase.js'
|
||
import tkiFileManager from "@/components/tki-file-manager/tki-file-manager.vue"
|
||
|
||
export default {
|
||
mixins: [
|
||
imBase
|
||
],
|
||
components: {
|
||
tkiFileManager
|
||
},
|
||
data() {
|
||
return {
|
||
callActions: [{
|
||
type: 0,
|
||
name: '语音通话'
|
||
},
|
||
{
|
||
type: 1,
|
||
name: '视频通话'
|
||
}
|
||
],
|
||
callShow: false
|
||
}
|
||
},
|
||
props: {
|
||
show: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
conversationType: {
|
||
type: Number,
|
||
default: 0
|
||
},
|
||
targetId: {
|
||
type: String,
|
||
default: ''
|
||
}
|
||
},
|
||
methods: {
|
||
sendFileMessage(path) {
|
||
if (path) {
|
||
im.sentFile(this.conversationType, this.targetId, path).then(res => {
|
||
this.success()
|
||
}).catch(err => {
|
||
uni.showToast({
|
||
icon: 'none',
|
||
title: '发送文件失败' + err
|
||
})
|
||
})
|
||
} else {
|
||
uni.showToast({
|
||
icon: 'none',
|
||
title: '选择文件失败'
|
||
})
|
||
}
|
||
},
|
||
singleCall(e) {
|
||
uni.navigateTo({
|
||
url: '/pages/im/private/call?targetId=' + this.targetId + '&mediaType=' + e.type +
|
||
'&isCall=true'
|
||
})
|
||
},
|
||
onPopupsItem(type) {
|
||
switch (type) {
|
||
case 'picture':
|
||
uni.chooseImage({
|
||
count: 9,
|
||
sourceType: ['album'],
|
||
success: res => {
|
||
let funs = []
|
||
res.tempFilePaths.map((item, index) => {
|
||
funs[index] = im.sentImage(this.conversationType, this
|
||
.targetId, item)
|
||
})
|
||
|
||
Promise.all(funs).then(res => {
|
||
this.success()
|
||
})
|
||
}
|
||
})
|
||
break;
|
||
case 'camera':
|
||
uni.chooseImage({
|
||
sourceType: ['camera'],
|
||
success: res => {
|
||
im.sentImage(this.conversationType, this.targetId, res.tempFilePaths[0])
|
||
.then((res) => {
|
||
this.success()
|
||
})
|
||
}
|
||
})
|
||
break;
|
||
case 'video':
|
||
this.callShow = true
|
||
break;
|
||
case 'location':
|
||
uni.chooseLocation({
|
||
success: (location) => {
|
||
const thumbnail = ''
|
||
// 通过 location 的经纬度,合成一张图片,再把图片的base64发送出去
|
||
im.sentLocation(this.conversationType, this.targetId, location, thumbnail)
|
||
.then(() => {
|
||
this.success()
|
||
})
|
||
}
|
||
})
|
||
break;
|
||
case 'redpacket':
|
||
uni.showToast({
|
||
icon: 'none',
|
||
title: '功能正在开发中'
|
||
})
|
||
break;
|
||
case 'file':
|
||
this.$refs.filemanager._openFile()
|
||
break;
|
||
}
|
||
},
|
||
// 处理返回
|
||
success() {
|
||
this.$emit('success')
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.sent--popups {
|
||
background: white;
|
||
padding: 30rpx 15rpx;
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
flex-direction: row;
|
||
|
||
.item {
|
||
width: 150rpx;
|
||
margin: 15rpx;
|
||
text-align: center;
|
||
}
|
||
|
||
.text {
|
||
text-align: center;
|
||
font-size: 26rpx;
|
||
color: #555;
|
||
padding-top: 15rpx;
|
||
}
|
||
|
||
.icon {
|
||
width: 110rpx;
|
||
height: 110rpx;
|
||
margin: 0 20rpx;
|
||
border-radius: 20rpx;
|
||
background: #F3F6FB;
|
||
}
|
||
}
|
||
</style>
|