移动app

This commit is contained in:
2023-09-24 17:55:19 +08:00
parent 736c5376e0
commit 59f7e39791
735 changed files with 80523 additions and 57 deletions

View File

@@ -0,0 +1,283 @@
<template>
<view v-if="isShow">
<view class="uni-im-control-mark" @touchstart="closeMe" @click="closeMe">
</view>
<view class="control" :style="{top:data.top,left:data.left,right:data.right}">
<template v-if="data.msg.type == 'text'">
<view class="control-item" @click="copyText">
<!-- <uni-icons custom-prefix="uni-im-font" type="uni-im-copy" size="16" color="#FFF"></uni-icons> -->
<text class="control-item-text">复制</text>
</view>
<view class="control-item" @click="answer">
<!-- #ifdef H5 -->
<!-- <uni-icons type="undo" size="18" color="#FFF"></uni-icons> -->
<!-- #endif -->
<text class="control-item-text">回复</text>
</view>
<view class="control-item" @click="revokeMsg" v-if="canRevoke()">
<!-- #ifdef H5 -->
<!-- <uni-icons type="undo" size="18" color="#FFF"></uni-icons> -->
<!-- #endif -->
<text class="control-item-text">撤回</text>
</view>
</template>
<view class="control-item" @click="deleteMsg">
<!-- <uni-icons custom-prefix="uni-im-font" type="uni-im-delete" size="16" color="#FFF"></uni-icons> -->
<text class="control-item-text">删除</text>
</view>
<view class="control-item" @click="other">
<!-- <uni-icons custom-prefix="uni-im-font" type="uni-im-share" size="16" color="#FFF"></uni-icons> -->
<text class="control-item-text">转发</text>
</view>
</view>
<!-- #ifdef APP-NVUE -->
<view class="icon-box" :class="{isInTop:data.isInTop}" :style="{top:data.top}">
<view class="icon" :style="{right:iconBoxRight,left:iconBoxLeft}"></view>
</view>
<!-- #endif -->
</view>
</template>
<script>
import uniIm from '@/uni_modules/uni-im/lib/main.js';
let fn;
export default {
// #ifdef APP-NVUE
beforeCreate() {
// const domModule = uni.requireNativePlugin('dom')
// domModule.addRule('fontFace', {
// 'fontFamily': "uni-im-font",
// 'src': "url('https://at.alicdn.com/t/c/font_3726059_lz2adc1jfve.ttf')"
// });
},
// #endif
data(){
return {
isShow:false,
data: {
top:'',
left:'',
right:'',
width:'',
msg:{},
isInTop:false
}
}
},
computed: {
iconBoxLeft(){
let n = parseInt(this.data.left)
return n ? n*3/2+55+'px' : ''
},
iconBoxRight(){
let n = parseInt(this.data.right)
return n ? n*3/2+50+'px' : ''
}
},
watch: {
isShow(isShow) {
// #ifdef H5
// 当蒙版弹出鼠标右键就关闭uni-im-control
window.addEventListener('contextmenu', (e)=>{
if(fn){
fn(e)
}
})
if(isShow){
setTimeout(()=> {
fn = (e)=> {
if(this.isShow){
if(uniIm.isWidescreen){
this.isShow = false
}
e.preventDefault()
}
}
}, 0);
}else{
fn = false
}
// #endif
}
},
mounted() {
// console.log('this.isShow',this.isShow);
},
methods:{
show(data){
this.data = data
this.isShow = true
},
copyText(){
// console.log('setClipboardData');
console.log('this.data',this.data);
uni.setClipboardData({
data:this.data.msg.body,
complete:(e)=> {
uni.hideToast()
console.log(e);
this.isShow = false
}
})
},
canRevoke() {
let current_uid = uniCloud.getCurrentUserInfo().uid
let {group_id,from_uid,conversation_id,create_time} = this.data.msg || {}
// console.log('create_time',create_time);
// console.log('from_uid current_uid',this.data.msg,from_uid,current_uid);
// 判断是不是群主
let isGroupAdmin = false
if(group_id){
let conversation = uniIm.conversation.dataList.find(i=>i.id == conversation_id)
isGroupAdmin = conversation.group_info.user_id == current_uid
}
// console.log('isGroupAdmin',isGroupAdmin);
//如果是群主
if(isGroupAdmin){
return true
}else{
// 消息发送者为“当前用户”且时间小于2分钟
return from_uid == current_uid && ( Date.now() - create_time < 1000*60*2 )
}
},
async revokeMsg(){
// 再判断一遍防止分钟在2分钟的时候右键了然后到了第3分钟才点下的情况
if(this.canRevoke()){
await uniIm.conversation.revokeMsg(this.data.msg)
}else{
uni.showToast({
title: '已超过2分钟不能撤回',
icon: 'none'
});
}
this.isShow = false
// console.log('this.data.msg',this.data.msg);
},
async answer(){
// console.log('answer')
this.$emit('answer',this.data.msgIndex)
this.isShow = false
},
async deleteMsg(){
// #ifndef H5
return this.other()
// #endif
this.data.msg.is_delete = true
// 存到本地
let conversation = await uniIm.conversation.get(this.data.msg.conversation_id)
conversation.msgManager.localMsg.update(this.data.msg.unique_id,this.data.msg)
this.isShow = false
},
other(){
uni.showToast({
title: '暂不支持',
icon: 'none',
complete: () => {
this.isShow = false
}
});
},
closeMe(){
setTimeout(()=>{
this.isShow = false
// console.log('closeMe');
},300)
}
}
}
</script>
<style lang="scss" scoped>
/* #ifndef APP-NVUE */
view {
display: flex;
flex-direction: column;
box-sizing: border-box;
}
/* #endif */
.control{
background-color:#252a30;
height: 55px;
// width: 375rpx;
position:fixed;
top:0;
border-radius: 5px;
flex-direction: row;
justify-content: space-around;
align-items: center;
/* #ifndef APP-NVUE */
z-index: 9999;
/* #endif */
}
.control-item{
width: 100rpx;
justify-content: center;
align-items: center;
}
.control-item-text{
font-size: 12px;
color:#FFFFFF;
margin-top: 1px;
/* #ifdef H5 */
cursor: pointer;
/* #endif */
}
/* #ifdef H5 */
.control-item-text:hover{
color:#4CD964;
}
/* #endif */
.uni-im-control-mark{
position: fixed;
top: 0;
left: 0;
width: 750rpx;
flex: 1;
height: 9000px;
/* #ifndef APP-NVUE */
width: 100vw !important;
height: 100vh !important;
z-index: 9999;
/* #endif */
/* #ifdef H5 */
max-height:100vh !important;
max-width:100vw !important;
/* #endif */
background-color: rgba(0,0,0,0.1);
}
/* #ifdef H5 */
@media screen and (min-width:960px){
.uni-im-control-mark{
background-color: rgba(255,255,255,0.05);
}
}
/* #endif */
.icon-box{
width: 750rpx;
height: 20px;
position: fixed;
transform:translate(0,-10px);
justify-content: center;
align-items: center;
/* #ifndef APP-NVUE */
z-index: 9999;
/* #endif */
}
.icon{
position: absolute;
background-color: #252a30;
width: 10px;
height: 10px;
transform: rotate(45deg);
}
.isInTop{
transform:translate(0,45px);
}
</style>