257 lines
6.1 KiB
Vue
257 lines
6.1 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="page_container">
|
|||
|
|
<custom-nav-bar :title="isGroupApplication ? '群通知' : '好友请求'" />
|
|||
|
|
|
|||
|
|
<view class="application_item">
|
|||
|
|
<view class="base_info_row">
|
|||
|
|
<view class="base_info_left" @click="toSourceDetails">
|
|||
|
|
<my-avatar :src="getSourceFaceURL" :desc="getSourceName" />
|
|||
|
|
<view class="base_info_details">
|
|||
|
|
<text class="nickname">{{ getSourceName }}</text>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<u-icon name="arrow-right" size="18" color="#999"></u-icon>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="request_message">
|
|||
|
|
<view v-if="isGroupApplication" class="title">
|
|||
|
|
<text>申请加入 </text>
|
|||
|
|
<text class="group_name">{{ currentApplication.groupName }}</text>
|
|||
|
|
</view>
|
|||
|
|
<text v-else>{{ `${getSourceName}:` }}</text>
|
|||
|
|
<text>{{ currentApplication.reqMsg }}</text>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="action_row">
|
|||
|
|
<u-button
|
|||
|
|
:loading="loadingState.accept"
|
|||
|
|
@click="acceptAplication"
|
|||
|
|
type="primary"
|
|||
|
|
:plain="true"
|
|||
|
|
:text="`通过${isGroupApplication ? '入群' : '好友'}申请`"
|
|||
|
|
></u-button>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="action_row">
|
|||
|
|
<u-button
|
|||
|
|
:loading="loadingState.refuse"
|
|||
|
|
@click="refuseAplication"
|
|||
|
|
type="primary"
|
|||
|
|
:plain="true"
|
|||
|
|
:text="`拒绝${isGroupApplication ? '入群' : '好友'}申请`"
|
|||
|
|
></u-button>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import { mapGetters } from "vuex";
|
|||
|
|
import IMSDK, { GroupJoinSource } from "openim-uniapp-polyfill";
|
|||
|
|
import CustomNavBar from "@/components/CustomNavBar/index.vue";
|
|||
|
|
import MyAvatar from "@/components/MyAvatar/index.vue";
|
|||
|
|
export default {
|
|||
|
|
components: {
|
|||
|
|
CustomNavBar,
|
|||
|
|
MyAvatar,
|
|||
|
|
},
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
currentApplication: {},
|
|||
|
|
isOnline: false,
|
|||
|
|
loadingState: {
|
|||
|
|
accept: false,
|
|||
|
|
refuse: false,
|
|||
|
|
},
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
computed: {
|
|||
|
|
...mapGetters(["storeSelfInfo"]),
|
|||
|
|
isGroupApplication() {
|
|||
|
|
return this.currentApplication.groupID !== undefined;
|
|||
|
|
},
|
|||
|
|
getSourceID() {
|
|||
|
|
return (
|
|||
|
|
this.currentApplication.fromUserID ?? this.currentApplication.userID
|
|||
|
|
);
|
|||
|
|
},
|
|||
|
|
getSourceName() {
|
|||
|
|
return (
|
|||
|
|
this.currentApplication.fromNickname ?? this.currentApplication.nickname
|
|||
|
|
);
|
|||
|
|
},
|
|||
|
|
getSourceFaceURL() {
|
|||
|
|
return (
|
|||
|
|
this.currentApplication.fromFaceURL ?? this.currentApplication.faceURL
|
|||
|
|
);
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
onLoad(options) {
|
|||
|
|
const { application } = options;
|
|||
|
|
this.currentApplication = JSON.parse(application);
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
toSourceDetails() {
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: `/pages/common/userCard/index?sourceID=${this.getSourceID}`,
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
acceptAplication() {
|
|||
|
|
this.loadingState.accept = true;
|
|||
|
|
let func;
|
|||
|
|
if (this.isGroupApplication) {
|
|||
|
|
func = IMSDK.asyncApi(
|
|||
|
|
IMSDK.IMMethods.AcceptGroupApplication,
|
|||
|
|
IMSDK.uuid(),
|
|||
|
|
{
|
|||
|
|
groupID: this.currentApplication.groupID,
|
|||
|
|
fromUserID: this.currentApplication.userID,
|
|||
|
|
handleMsg: "",
|
|||
|
|
},
|
|||
|
|
);
|
|||
|
|
} else {
|
|||
|
|
console.log(this.currentApplication);
|
|||
|
|
func = IMSDK.asyncApi(
|
|||
|
|
IMSDK.IMMethods.AcceptFriendApplication,
|
|||
|
|
IMSDK.uuid(),
|
|||
|
|
{
|
|||
|
|
toUserID: this.currentApplication.fromUserID,
|
|||
|
|
handleMsg: "",
|
|||
|
|
},
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
func
|
|||
|
|
.then(() => {
|
|||
|
|
uni.$u.toast("操作成功");
|
|||
|
|
setTimeout(() => uni.navigateBack(), 500);
|
|||
|
|
})
|
|||
|
|
.catch((e) => {
|
|||
|
|
console.log(e);
|
|||
|
|
uni.$u.toast("操作失败");
|
|||
|
|
})
|
|||
|
|
.finally(() => (this.loadingState.accept = false));
|
|||
|
|
},
|
|||
|
|
refuseAplication() {
|
|||
|
|
this.loadingState.refuse = true;
|
|||
|
|
let func;
|
|||
|
|
if (this.isGroupApplication) {
|
|||
|
|
func = IMSDK.asyncApi(
|
|||
|
|
IMSDK.IMMethods.RefuseGroupApplication,
|
|||
|
|
IMSDK.uuid(),
|
|||
|
|
{
|
|||
|
|
groupID: this.currentApplication.groupID,
|
|||
|
|
fromUserID: this.currentApplication.userID,
|
|||
|
|
handleMsg: "",
|
|||
|
|
},
|
|||
|
|
);
|
|||
|
|
} else {
|
|||
|
|
func = IMSDK.asyncApi(
|
|||
|
|
IMSDK.IMMethods.RefuseFriendApplication,
|
|||
|
|
IMSDK.uuid(),
|
|||
|
|
{
|
|||
|
|
toUserID: this.currentApplication.fromUserID,
|
|||
|
|
handleMsg: "",
|
|||
|
|
},
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
func
|
|||
|
|
.then(() => {
|
|||
|
|
uni.$u.toast("操作成功");
|
|||
|
|
setTimeout(() => uni.navigateBack(), 250);
|
|||
|
|
})
|
|||
|
|
.catch(() => uni.$u.toast("操作失败"))
|
|||
|
|
.finally(() => (this.loadingState.refuse = false));
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
};
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
.page_container {
|
|||
|
|
background-color: #f8f8f8;
|
|||
|
|
|
|||
|
|
.application_item {
|
|||
|
|
padding: 72rpx 44rpx 24rpx;
|
|||
|
|
background-color: #fff;
|
|||
|
|
|
|||
|
|
.base_info_row {
|
|||
|
|
@include btwBox();
|
|||
|
|
|
|||
|
|
.base_info_left {
|
|||
|
|
@include vCenterBox();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.base_info_details {
|
|||
|
|
margin-left: 24rpx;
|
|||
|
|
|
|||
|
|
.nickname {
|
|||
|
|
@include nomalEllipsis();
|
|||
|
|
max-width: 600rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.online_state {
|
|||
|
|
@include vCenterBox();
|
|||
|
|
flex-direction: row;
|
|||
|
|
font-size: 24rpx;
|
|||
|
|
color: #999;
|
|||
|
|
margin-top: 6rpx;
|
|||
|
|
|
|||
|
|
.dot {
|
|||
|
|
background-color: #10cc64;
|
|||
|
|
width: 12rpx;
|
|||
|
|
height: 12rpx;
|
|||
|
|
border-radius: 50%;
|
|||
|
|
margin-right: 12rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.request_message {
|
|||
|
|
background-color: #eee;
|
|||
|
|
margin-top: 48rpx;
|
|||
|
|
padding: 24rpx 36rpx;
|
|||
|
|
border-radius: 12rpx;
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
color: #666;
|
|||
|
|
min-height: 240rpx;
|
|||
|
|
|
|||
|
|
.title {
|
|||
|
|
margin-bottom: 12rpx;
|
|||
|
|
color: $uni-text-color;
|
|||
|
|
|
|||
|
|
.group_name {
|
|||
|
|
@nomalEllipsis();
|
|||
|
|
max-width: 400rpx;
|
|||
|
|
color: $uni-color-primary;
|
|||
|
|
margin-left: 12rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.join_source {
|
|||
|
|
margin-top: 20rpx;
|
|||
|
|
font-size: 24rpx;
|
|||
|
|
color: #666;
|
|||
|
|
text-align: right;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.action_row {
|
|||
|
|
margin-top: 24rpx;
|
|||
|
|
|
|||
|
|
.u-button {
|
|||
|
|
border: none;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
&:last-child {
|
|||
|
|
.u-button {
|
|||
|
|
color: #999 !important;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|