IM的链接和断开时机调整,APP打开自动判断登录,链接。退出登录后断开链接
新朋友数量提醒
This commit is contained in:
@@ -85,6 +85,15 @@ const pedingFriend = (recipient) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 好友申请数量
|
||||||
|
*/
|
||||||
|
const getPendingCount = () => {
|
||||||
|
return request({
|
||||||
|
url: 'im/friends/pending/count'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
getImToken,
|
getImToken,
|
||||||
deleteFriend,
|
deleteFriend,
|
||||||
@@ -95,5 +104,6 @@ export {
|
|||||||
resolveFriend,
|
resolveFriend,
|
||||||
rejectFriend,
|
rejectFriend,
|
||||||
searchFriend,
|
searchFriend,
|
||||||
pedingFriend
|
pedingFriend,
|
||||||
|
getPendingCount
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
|
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||||
|
|||||||
@@ -4,7 +4,9 @@
|
|||||||
<view>
|
<view>
|
||||||
<view class="friend-flex u-border-bottom" @click="toPending">
|
<view class="friend-flex u-border-bottom" @click="toPending">
|
||||||
<u-avatar class="cover" size="40" shape="square" :src="require('@/static/im/im_01.png')"></u-avatar>
|
<u-avatar class="cover" size="40" shape="square" :src="require('@/static/im/im_01.png')"></u-avatar>
|
||||||
<view class="name">新的朋友</view>
|
<view class="name">
|
||||||
|
新的朋友 ({{ pendingCount }})
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="friend-flex" @click="showToast">
|
<view class="friend-flex" @click="showToast">
|
||||||
<u-avatar class="cover" size="40" shape="square" :src="require('@/static/im/im_00.png')"></u-avatar>
|
<u-avatar class="cover" size="40" shape="square" :src="require('@/static/im/im_00.png')"></u-avatar>
|
||||||
@@ -22,7 +24,8 @@
|
|||||||
<u-index-anchor :text="indexs[friend]" bgColor="#F3F6FB" height="20" size="12" color="#666">
|
<u-index-anchor :text="indexs[friend]" bgColor="#F3F6FB" height="20" size="12" color="#666">
|
||||||
</u-index-anchor>
|
</u-index-anchor>
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<view v-for="(friendItem, index) in item" :key="friendItem.userId" class="friend-flex u-border-bottom"
|
<view v-for="(friendItem, index) in item" :key="friendItem.userId"
|
||||||
|
class="friend-flex u-border-bottom"
|
||||||
@click="$Router.push({ name: 'imFriendsInfo', params: { targetId: friendItem.userId } })">
|
@click="$Router.push({ name: 'imFriendsInfo', params: { targetId: friendItem.userId } })">
|
||||||
<block v-if="friendItem.portraitUrl != ''">
|
<block v-if="friendItem.portraitUrl != ''">
|
||||||
<u-avatar class="cover" size="40" shape="square" :src="friendItem.portraitUrl || ''"
|
<u-avatar class="cover" size="40" shape="square" :src="friendItem.portraitUrl || ''"
|
||||||
@@ -47,24 +50,29 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {
|
import {
|
||||||
getFriends
|
getFriends,
|
||||||
|
getPendingCount
|
||||||
} from '@/apis/interfaces/im';
|
} from '@/apis/interfaces/im';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
indexs: [],
|
indexs: [],
|
||||||
friends: []
|
friends: [],
|
||||||
|
pendingCount: 0
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
getFriends().then(res => {
|
getFriends().then(res => {
|
||||||
this.indexs = res.indexList;
|
this.indexs = res.indexList
|
||||||
this.friends = res.itemArr;
|
this.friends = res.itemArr
|
||||||
});
|
})
|
||||||
|
getPendingCount().then(res => {
|
||||||
|
console.log(res);
|
||||||
|
this.pendingCount = res
|
||||||
|
})
|
||||||
},
|
},
|
||||||
computed: {},
|
|
||||||
methods: {
|
methods: {
|
||||||
// 扫码提示
|
|
||||||
showToast() {
|
showToast() {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '群聊功能暂未开放,敬请期待',
|
title: '群聊功能暂未开放,敬请期待',
|
||||||
|
|||||||
@@ -103,11 +103,7 @@
|
|||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
if (this.$store.state.token !== '') {
|
if (this.$store.state.token !== '') {
|
||||||
getImToken().then(res => {
|
this.getConversationList()
|
||||||
im.connect(res.token, res.userInfo, () => {
|
|
||||||
this.getConversationList()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
this.isShown = true
|
this.isShown = true
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
<view class="info-box">
|
<view class="info-box">
|
||||||
<image src="@/static/user/user_back.png" mode="aspectFill" />
|
<image src="@/static/user/user_back.png" mode="aspectFill" />
|
||||||
<view class="user-flex">
|
<view class="user-flex">
|
||||||
<image class="cover" @click="$Router.push({ name: 'Setting' })" :src="userInfo.avatar || require('@/static/user/cover.png')" mode="aspectFill" />
|
<image class="cover" @click="$Router.push({ name: 'Setting' })"
|
||||||
|
:src="userInfo.avatar || require('@/static/user/cover.png')" mode="aspectFill" />
|
||||||
<view class="user-content">
|
<view class="user-content">
|
||||||
<block v-if="$store.state.token != ''">
|
<block v-if="$store.state.token != ''">
|
||||||
<view class="name">{{ userInfo.nickname }}</view>
|
<view class="name">{{ userInfo.nickname }}</view>
|
||||||
@@ -21,10 +22,14 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="chainAddress" v-if="userInfo.chain_address">
|
<view class="chainAddress" v-if="userInfo.chain_address">
|
||||||
<u-icon labelPos="left" @click="copy(userInfo.chain_address)" labelSize="14" labelColor="#fff" :label="userInfo.chain_address.substr(0, 20)+'...'" space="10" :name="require('@/static/imgs/copy.png')" size="16" />
|
<u-icon labelPos="left" @click="copy(userInfo.chain_address)" labelSize="14"
|
||||||
|
labelColor="#fff" :label="userInfo.chain_address.substr(0, 20)+'...'" space="10"
|
||||||
|
:name="require('@/static/imgs/copy.png')" size="16" />
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
<block v-else><view class="name" @click="isLogin()">未登录</view></block>
|
<block v-else>
|
||||||
|
<view class="name" @click="isLogin()">未登录</view>
|
||||||
|
</block>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -36,7 +41,10 @@
|
|||||||
<image src="@/static/user/icon_06.png" mode="widthFix" />
|
<image src="@/static/user/icon_06.png" mode="widthFix" />
|
||||||
ZH会员
|
ZH会员
|
||||||
</view>
|
</view>
|
||||||
<view class="subtitle"><u-notice-bar :text="cardText" icon="" bgColor="" duration="3000" color="#fcc692" direction="column"></u-notice-bar></view>
|
<view class="subtitle">
|
||||||
|
<u-notice-bar :text="cardText" icon="" bgColor="" duration="3000" color="#fcc692" direction="column">
|
||||||
|
</u-notice-bar>
|
||||||
|
</view>
|
||||||
<view class="btn" @click="openVip" v-if="userInfo.identity.length === 0">开通</view>
|
<view class="btn" @click="openVip" v-if="userInfo.identity.length === 0">开通</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
@@ -121,352 +129,403 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { info } from '@/apis/interfaces/user';
|
import {
|
||||||
import userAuth from '@/public/userAuth';
|
info
|
||||||
export default {
|
} from '@/apis/interfaces/user';
|
||||||
data() {
|
import userAuth from '@/public/userAuth';
|
||||||
return {
|
import im from '@/utils/im/index.js'
|
||||||
cardText: ['新用户首单即赠会员', '老用户专属验证开通会员'],
|
|
||||||
userInfo: {
|
export default {
|
||||||
nickname: '',
|
data() {
|
||||||
avatar: '',
|
return {
|
||||||
identity: []
|
cardText: ['新用户首单即赠会员', '老用户专属验证开通会员'],
|
||||||
}
|
userInfo: {
|
||||||
};
|
nickname: '',
|
||||||
},
|
avatar: '',
|
||||||
onShow() {
|
identity: []
|
||||||
this.getInfo();
|
}
|
||||||
},
|
};
|
||||||
methods: {
|
|
||||||
// 用户信息
|
|
||||||
getInfo() {
|
|
||||||
if (this.$store.state.token === '') return;
|
|
||||||
info()
|
|
||||||
.then(res => {
|
|
||||||
console.log(res);
|
|
||||||
uni.setNavigationBarTitle({
|
|
||||||
title: res.nickname
|
|
||||||
});
|
|
||||||
this.userInfo = res;
|
|
||||||
console.log(res);
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
uni.showToast({
|
|
||||||
title: err.message,
|
|
||||||
icon: 'none'
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
// 开通会员
|
onShow() {
|
||||||
openVip() {
|
this.getInfo();
|
||||||
if (this.isLogin()) {
|
},
|
||||||
uni.showActionSheet({
|
methods: {
|
||||||
itemList: ['我是新用户', '我是老用户'],
|
// 用户信息
|
||||||
success: res => {
|
getInfo() {
|
||||||
switch (res.tapIndex) {
|
if (this.$store.state.token === '') return;
|
||||||
case 0:
|
info()
|
||||||
uni.showModal({
|
.then(res => {
|
||||||
title: '开通提示',
|
console.log(res);
|
||||||
content: '平台新用户完成首笔订单,即可获赠ZH健康会员',
|
uni.setNavigationBarTitle({
|
||||||
showCancel: false,
|
title: res.nickname
|
||||||
cancelText: '去完成',
|
});
|
||||||
success: res => {
|
this.userInfo = res;
|
||||||
console.log(res);
|
console.log(res);
|
||||||
this.$Router.pushTab({ name: 'Store' });
|
})
|
||||||
}
|
.catch(err => {
|
||||||
});
|
uni.showToast({
|
||||||
break;
|
title: err.message,
|
||||||
case 1:
|
icon: 'none'
|
||||||
uni.showToast({
|
});
|
||||||
title: '老用户渠道暂未开放',
|
});
|
||||||
icon: 'none'
|
},
|
||||||
});
|
// 开通会员
|
||||||
break;
|
openVip() {
|
||||||
|
if (this.isLogin()) {
|
||||||
|
uni.showActionSheet({
|
||||||
|
itemList: ['我是新用户', '我是老用户'],
|
||||||
|
success: res => {
|
||||||
|
switch (res.tapIndex) {
|
||||||
|
case 0:
|
||||||
|
uni.showModal({
|
||||||
|
title: '开通提示',
|
||||||
|
content: '平台新用户完成首笔订单,即可获赠ZH健康会员',
|
||||||
|
showCancel: false,
|
||||||
|
cancelText: '去完成',
|
||||||
|
success: res => {
|
||||||
|
console.log(res);
|
||||||
|
this.$Router.pushTab({
|
||||||
|
name: 'Store'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
uni.showToast({
|
||||||
|
title: '老用户渠道暂未开放',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 开通钱包
|
||||||
|
onWallet() {
|
||||||
|
if (this.isLogin()) {
|
||||||
|
if (this.userInfo.is_wallet) this.$Router.push({
|
||||||
|
name: 'WalletProperty'
|
||||||
|
});
|
||||||
|
else this.$Router.push({
|
||||||
|
name: 'WalletAdd'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 个人档案
|
||||||
|
onFiles() {
|
||||||
|
if (this.isLogin()) {
|
||||||
|
if (!this.userInfo.has_record) {
|
||||||
|
this.$Router.push({
|
||||||
|
name: 'EssentialInfo'
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// this.$Router.push({ name: 'UserFiles',params:{id:this.userInfo.record_id} });
|
||||||
|
uni.navigateTo({
|
||||||
|
url: `/pages/user/files?id=${this.userInfo.record.record_id}`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 按钮导航
|
||||||
|
onBtn(name, params) {
|
||||||
|
if (this.isLogin()) {
|
||||||
|
this.$Router.push({
|
||||||
|
name,
|
||||||
|
params
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 检查登录
|
||||||
|
isLogin() {
|
||||||
|
if (this.$store.state.token === '') {
|
||||||
|
const Auth = new userAuth();
|
||||||
|
Auth.Login();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
// 退出登录
|
||||||
|
logOut() {
|
||||||
|
this.userInfo = {
|
||||||
|
nickname: '',
|
||||||
|
avatar: '',
|
||||||
|
identity: []
|
||||||
|
};
|
||||||
|
this.$store.commit('setToken', '');
|
||||||
|
// 断开IM链接
|
||||||
|
im.disconnect()
|
||||||
|
},
|
||||||
|
copy(data) {
|
||||||
|
uni.setClipboardData({
|
||||||
|
data: data,
|
||||||
|
success: function() {
|
||||||
|
uni.showToast({
|
||||||
|
title: '复制成功',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
|
||||||
// 开通钱包
|
|
||||||
onWallet() {
|
|
||||||
if (this.isLogin()) {
|
|
||||||
if (this.userInfo.is_wallet) this.$Router.push({ name: 'WalletProperty' });
|
|
||||||
else this.$Router.push({ name: 'WalletAdd' });
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 个人档案
|
|
||||||
onFiles() {
|
|
||||||
if (this.isLogin()) {
|
|
||||||
if (!this.userInfo.has_record) {
|
|
||||||
this.$Router.push({ name: 'EssentialInfo' });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// this.$Router.push({ name: 'UserFiles',params:{id:this.userInfo.record_id} });
|
|
||||||
uni.navigateTo({
|
|
||||||
url: `/pages/user/files?id=${this.userInfo.record.record_id}`
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 按钮导航
|
|
||||||
onBtn(name, params) {
|
|
||||||
if (this.isLogin()) {
|
|
||||||
this.$Router.push({ name, params });
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 检查登录
|
|
||||||
isLogin() {
|
|
||||||
if (this.$store.state.token === '') {
|
|
||||||
const Auth = new userAuth();
|
|
||||||
Auth.Login();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
// 退出登录
|
|
||||||
logOut() {
|
|
||||||
this.userInfo = {
|
|
||||||
nickname: '',
|
|
||||||
avatar: '',
|
|
||||||
identity: []
|
|
||||||
};
|
|
||||||
this.$store.commit('setToken', '');
|
|
||||||
},
|
|
||||||
copy(data){
|
|
||||||
uni.setClipboardData({
|
|
||||||
data: data,
|
|
||||||
success: function () {
|
|
||||||
uni.showToast({
|
|
||||||
title:'复制成功',
|
|
||||||
icon:'none'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.content {
|
.content {
|
||||||
background: $window-color;
|
background: $window-color;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
}
|
|
||||||
// 版权信息
|
|
||||||
.footer-text {
|
|
||||||
text-align: center;
|
|
||||||
font-size: $title-size-sm;
|
|
||||||
padding: $padding $padding $padding * 2;
|
|
||||||
color: $text-gray-m;
|
|
||||||
}
|
|
||||||
// 用户信息
|
|
||||||
.info-box {
|
|
||||||
position: relative;
|
|
||||||
background: linear-gradient(to right, #34ce98, #22aa98);
|
|
||||||
color: white;
|
|
||||||
@extend .ios-top;
|
|
||||||
& > image {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
// z-index: 100;
|
|
||||||
}
|
}
|
||||||
.user-flex {
|
|
||||||
|
// 版权信息
|
||||||
|
.footer-text {
|
||||||
|
text-align: center;
|
||||||
|
font-size: $title-size-sm;
|
||||||
|
padding: $padding $padding $padding * 2;
|
||||||
|
color: $text-gray-m;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 用户信息
|
||||||
|
.info-box {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: $padding * 2 $padding ($padding * 2 + 60);
|
background: linear-gradient(to right, #34ce98, #22aa98);
|
||||||
height: 128rpx;
|
color: white;
|
||||||
.cover {
|
@extend .ios-top;
|
||||||
|
|
||||||
|
&>image {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 128rpx;
|
top: 0;
|
||||||
height: 128rpx;
|
right: 0;
|
||||||
border-radius: 50%;
|
width: 100%;
|
||||||
border: solid 6rpx white;
|
height: 100%;
|
||||||
box-sizing: border-box;
|
// z-index: 100;
|
||||||
z-index: 100;
|
|
||||||
}
|
}
|
||||||
.user-content {
|
|
||||||
padding-left: 158rpx;
|
.user-flex {
|
||||||
height: 128rpx;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
.chainAddress {
|
padding: $padding * 2 $padding ($padding * 2 + 60);
|
||||||
overflow: hidden;
|
height: 128rpx;
|
||||||
white-space: nowrap;
|
|
||||||
text-overflow: ellipsis;
|
.cover {
|
||||||
font-size: $title-size-m;
|
position: absolute;
|
||||||
padding-top: 10rpx;
|
width: 128rpx;
|
||||||
|
height: 128rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: solid 6rpx white;
|
||||||
|
box-sizing: border-box;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-content {
|
||||||
|
padding-left: 158rpx;
|
||||||
|
height: 128rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: column;
|
||||||
align-items: center;
|
justify-content: center;
|
||||||
justify-content: flex-start;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 200;
|
|
||||||
}
|
.chainAddress {
|
||||||
.name {
|
overflow: hidden;
|
||||||
line-height: 40rpx;
|
white-space: nowrap;
|
||||||
font-weight: bold;
|
text-overflow: ellipsis;
|
||||||
font-size: $title-size + 8;
|
font-size: $title-size-m;
|
||||||
@extend .nowrap;
|
padding-top: 10rpx;
|
||||||
}
|
display: flex;
|
||||||
.tabs {
|
flex-direction: row;
|
||||||
padding-top: 10rpx;
|
align-items: center;
|
||||||
&-item {
|
justify-content: flex-start;
|
||||||
background: rgba($color: #000000, $alpha: 0.3);
|
position: relative;
|
||||||
font-size: $title-size-sm - 4;
|
z-index: 200;
|
||||||
display: inline-block;
|
}
|
||||||
line-height: 36rpx;
|
|
||||||
padding: 0 20rpx;
|
.name {
|
||||||
border-radius: 20rpx;
|
line-height: 40rpx;
|
||||||
image {
|
font-weight: bold;
|
||||||
width: 26rpx;
|
font-size: $title-size + 8;
|
||||||
height: 26rpx;
|
@extend .nowrap;
|
||||||
vertical-align: middle;
|
}
|
||||||
margin-bottom: 2rpx;
|
|
||||||
margin-right: 8rpx;
|
.tabs {
|
||||||
|
padding-top: 10rpx;
|
||||||
|
|
||||||
|
&-item {
|
||||||
|
background: rgba($color: #000000, $alpha: 0.3);
|
||||||
|
font-size: $title-size-sm - 4;
|
||||||
|
display: inline-block;
|
||||||
|
line-height: 36rpx;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
border-radius: 20rpx;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 26rpx;
|
||||||
|
height: 26rpx;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-bottom: 2rpx;
|
||||||
|
margin-right: 8rpx;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// 会员卡
|
// 会员卡
|
||||||
.vip-card {
|
.vip-card {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin: -60rpx $margin $margin;
|
margin: -60rpx $margin $margin;
|
||||||
background: linear-gradient(to right bottom, #3e5364, #31364a);
|
background: linear-gradient(to right bottom, #3e5364, #31364a);
|
||||||
border-radius: $radius;
|
|
||||||
box-sizing: border-box;
|
|
||||||
color: #fcc692;
|
|
||||||
padding: $padding ($padding + 170) $padding $padding;
|
|
||||||
.title {
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: $title-size-lg;
|
|
||||||
line-height: 40rpx;
|
|
||||||
image {
|
|
||||||
width: 32rpx;
|
|
||||||
height: 32rpx;
|
|
||||||
margin-right: 10rpx;
|
|
||||||
vertical-align: middle;
|
|
||||||
margin-bottom: 4rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.subtitle {
|
|
||||||
font-size: $title-size-sm;
|
|
||||||
margin-top: 10rpx;
|
|
||||||
.u-notice-bar {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.btn {
|
|
||||||
position: absolute;
|
|
||||||
right: $margin;
|
|
||||||
margin-top: -30rpx;
|
|
||||||
top: 50%;
|
|
||||||
height: 60rpx;
|
|
||||||
line-height: 60rpx;
|
|
||||||
background: linear-gradient(to right, #fce3c5, #fcc590);
|
|
||||||
color: #31364a;
|
|
||||||
font-weight: bold;
|
|
||||||
width: 150rpx;
|
|
||||||
text-align: center;
|
|
||||||
font-size: $title-size-m;
|
|
||||||
border-radius: 30rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 订单信息
|
|
||||||
.order-box {
|
|
||||||
margin: $margin;
|
|
||||||
background: white;
|
|
||||||
border-radius: $radius;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
&-item {
|
|
||||||
width: 25%;
|
|
||||||
padding: $padding $padding/2;
|
|
||||||
text-align: center;
|
|
||||||
.icon {
|
|
||||||
width: 48rpx;
|
|
||||||
height: 48rpx;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
.title {
|
|
||||||
font-size: $title-size-sm;
|
|
||||||
margin-top: $margin/3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 健康数据
|
|
||||||
.health-flex {
|
|
||||||
display: flex;
|
|
||||||
margin: $margin ($margin - 10);
|
|
||||||
&-item {
|
|
||||||
margin: 0 10rpx;
|
|
||||||
background: white;
|
|
||||||
width: calc(50% - 20rpx);
|
|
||||||
border-radius: $radius;
|
border-radius: $radius;
|
||||||
padding: $padding;
|
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
color: #fcc692;
|
||||||
|
padding: $padding ($padding + 170) $padding $padding;
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
|
font-weight: bold;
|
||||||
font-size: $title-size-lg;
|
font-size: $title-size-lg;
|
||||||
.icon {
|
line-height: 40rpx;
|
||||||
|
|
||||||
|
image {
|
||||||
width: 32rpx;
|
width: 32rpx;
|
||||||
height: 32rpx;
|
height: 32rpx;
|
||||||
|
margin-right: 10rpx;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
margin-left: 10rpx;
|
margin-bottom: 4rpx;
|
||||||
margin-bottom: 2rpx;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.num {
|
|
||||||
font-weight: bold;
|
.subtitle {
|
||||||
font-size: $title-size + 10;
|
|
||||||
padding: $padding/3 0;
|
|
||||||
text {
|
|
||||||
font-size: 70%;
|
|
||||||
padding-left: 10rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.hith {
|
|
||||||
font-size: $title-size-sm;
|
font-size: $title-size-sm;
|
||||||
color: $text-gray;
|
margin-top: 10rpx;
|
||||||
|
|
||||||
|
.u-notice-bar {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
.btn {
|
||||||
// 模块
|
|
||||||
.btns-box {
|
|
||||||
background: white;
|
|
||||||
margin: $margin;
|
|
||||||
border-radius: $radius;
|
|
||||||
&-item {
|
|
||||||
position: relative;
|
|
||||||
line-height: 90rpx;
|
|
||||||
padding: $padding * 0.6 $padding;
|
|
||||||
font-size: $title-size-lg;
|
|
||||||
&::after {
|
|
||||||
position: absolute;
|
|
||||||
height: 1rpx;
|
|
||||||
content: ' ';
|
|
||||||
left: $margin;
|
|
||||||
right: $margin;
|
|
||||||
bottom: 0;
|
|
||||||
background-color: #f9f9f9;
|
|
||||||
}
|
|
||||||
&:last-child::after {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.forward {
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: $margin;
|
right: $margin;
|
||||||
}
|
margin-top: -30rpx;
|
||||||
.icon {
|
top: 50%;
|
||||||
width: 44rpx;
|
height: 60rpx;
|
||||||
height: 44rpx;
|
line-height: 60rpx;
|
||||||
vertical-align: middle;
|
background: linear-gradient(to right, #fce3c5, #fcc590);
|
||||||
margin-right: $margin/2;
|
color: #31364a;
|
||||||
margin-bottom: 8rpx;
|
font-weight: bold;
|
||||||
|
width: 150rpx;
|
||||||
|
text-align: center;
|
||||||
|
font-size: $title-size-m;
|
||||||
|
border-radius: 30rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 订单信息
|
||||||
|
.order-box {
|
||||||
|
margin: $margin;
|
||||||
|
background: white;
|
||||||
|
border-radius: $radius;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
&-item {
|
||||||
|
width: 25%;
|
||||||
|
padding: $padding $padding/2;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: 48rpx;
|
||||||
|
height: 48rpx;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: $title-size-sm;
|
||||||
|
margin-top: $margin/3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 健康数据
|
||||||
|
.health-flex {
|
||||||
|
display: flex;
|
||||||
|
margin: $margin ($margin - 10);
|
||||||
|
|
||||||
|
&-item {
|
||||||
|
margin: 0 10rpx;
|
||||||
|
background: white;
|
||||||
|
width: calc(50% - 20rpx);
|
||||||
|
border-radius: $radius;
|
||||||
|
padding: $padding;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: $title-size-lg;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: 32rpx;
|
||||||
|
height: 32rpx;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-left: 10rpx;
|
||||||
|
margin-bottom: 2rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.num {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: $title-size + 10;
|
||||||
|
padding: $padding/3 0;
|
||||||
|
|
||||||
|
text {
|
||||||
|
font-size: 70%;
|
||||||
|
padding-left: 10rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.hith {
|
||||||
|
font-size: $title-size-sm;
|
||||||
|
color: $text-gray;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 模块
|
||||||
|
.btns-box {
|
||||||
|
background: white;
|
||||||
|
margin: $margin;
|
||||||
|
border-radius: $radius;
|
||||||
|
|
||||||
|
&-item {
|
||||||
|
position: relative;
|
||||||
|
line-height: 90rpx;
|
||||||
|
padding: $padding * 0.6 $padding;
|
||||||
|
font-size: $title-size-lg;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
position: absolute;
|
||||||
|
height: 1rpx;
|
||||||
|
content: ' ';
|
||||||
|
left: $margin;
|
||||||
|
right: $margin;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child::after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.forward {
|
||||||
|
position: absolute;
|
||||||
|
right: $margin;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: 44rpx;
|
||||||
|
height: 44rpx;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-right: $margin/2;
|
||||||
|
margin-bottom: 8rpx;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -5,111 +5,132 @@
|
|||||||
* moduleName: 登录
|
* moduleName: 登录
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { router } from '../router'
|
import {
|
||||||
import { keyAuth } from '../apis/interfaces/auth'
|
router
|
||||||
|
} from '../router'
|
||||||
|
import {
|
||||||
|
keyAuth
|
||||||
|
} from '../apis/interfaces/auth'
|
||||||
import store from '../store'
|
import store from '../store'
|
||||||
|
import {
|
||||||
|
getImToken
|
||||||
|
} from '@/apis/interfaces/im.js'
|
||||||
|
import im from '@/utils/im/index.js'
|
||||||
|
|
||||||
class userAuth {
|
class userAuth {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.univerfyConfig = {
|
this.univerfyConfig = {
|
||||||
fullScreen: true,
|
fullScreen: true,
|
||||||
authButton: {
|
authButton: {
|
||||||
'title': '一键登录',
|
'title': '一键登录',
|
||||||
'normalColor': '#34CE98',
|
'normalColor': '#34CE98',
|
||||||
'highlightColor': '#16b17a',
|
'highlightColor': '#16b17a',
|
||||||
'disabledColor': '#aae4cc',
|
'disabledColor': '#aae4cc',
|
||||||
},
|
},
|
||||||
otherLoginButton: {
|
otherLoginButton: {
|
||||||
'title': '其他手机号码',
|
'title': '其他手机号码',
|
||||||
'borderColor': '#34CE98',
|
'borderColor': '#34CE98',
|
||||||
'textColor': '#34CE98'
|
'textColor': '#34CE98'
|
||||||
},
|
},
|
||||||
privacyTerms: {
|
privacyTerms: {
|
||||||
'checkedImage': '/static/icon/checked-icon.png',
|
'checkedImage': '/static/icon/checked-icon.png',
|
||||||
'uncheckedImage': '/static/icon/unchecked-icon.png',
|
'uncheckedImage': '/static/icon/unchecked-icon.png',
|
||||||
'textColor': '#999',
|
'textColor': '#999',
|
||||||
'termsColor': '#34CE98',
|
'termsColor': '#34CE98',
|
||||||
'suffix': '并使用本机号码登录/注册',
|
'suffix': '并使用本机号码登录/注册',
|
||||||
'privacyItems': [{
|
'privacyItems': [{
|
||||||
'url': 'https://www.baidu.com',
|
'url': 'https://www.baidu.com',
|
||||||
'title': '隐私协议'
|
'title': '隐私协议'
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://www.baidu.com',
|
'url': 'https://www.baidu.com',
|
||||||
'title': '服务协议'
|
'title': '服务协议'
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
buttons: {
|
buttons: {
|
||||||
'iconWidth': '45px',
|
'iconWidth': '45px',
|
||||||
'list': [{
|
'list': [{
|
||||||
"provider": '微信登录',
|
"provider": '微信登录',
|
||||||
"iconPath": '/static/icons/wechat.png',
|
"iconPath": '/static/icons/wechat.png',
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 预登录
|
// 预登录
|
||||||
Login() {
|
Login() {
|
||||||
//#ifdef H5
|
//#ifdef H5
|
||||||
router.push({ name: 'Auth' })
|
router.push({
|
||||||
return
|
name: 'Auth'
|
||||||
//#endif
|
})
|
||||||
|
return
|
||||||
|
//#endif
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
uni.showLoading({
|
uni.showLoading({
|
||||||
title: '加载中',
|
title: '加载中',
|
||||||
mask: true
|
mask: true
|
||||||
})
|
})
|
||||||
uni.preLogin({
|
uni.preLogin({
|
||||||
provider: 'univerify',
|
provider: 'univerify',
|
||||||
success: res => {
|
success: res => {
|
||||||
this.keyLogin().then(() => {
|
this.keyLogin().then(() => {
|
||||||
resolve({
|
resolve({
|
||||||
auth: true
|
auth: true
|
||||||
})
|
})
|
||||||
}).catch(errMsg => {
|
}).catch(errMsg => {
|
||||||
reject(errMsg)
|
reject(errMsg)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
fail: err => {
|
fail: err => {
|
||||||
router.push({ name: 'Auth' })
|
router.push({
|
||||||
},
|
name: 'Auth'
|
||||||
complete() {
|
})
|
||||||
uni.hideLoading()
|
},
|
||||||
}
|
complete() {
|
||||||
})
|
uni.hideLoading()
|
||||||
})
|
}
|
||||||
}
|
})
|
||||||
// 一键登录
|
})
|
||||||
keyLogin() {
|
}
|
||||||
return new Promise((resolve, reject) => {
|
// 一键登录
|
||||||
uni.login({
|
keyLogin() {
|
||||||
provider: 'univerify',
|
return new Promise((resolve, reject) => {
|
||||||
univerifyStyle: {
|
uni.login({
|
||||||
...this.univerfyConfig
|
provider: 'univerify',
|
||||||
},
|
univerifyStyle: {
|
||||||
success: authResult => {
|
...this.univerfyConfig
|
||||||
keyAuth({
|
},
|
||||||
access_token: authResult.authResult.access_token,
|
success: authResult => {
|
||||||
openid: authResult.authResult.openid
|
keyAuth({
|
||||||
}).then(res => {
|
access_token: authResult.authResult.access_token,
|
||||||
uni.closeAuthView()
|
openid: authResult.authResult.openid
|
||||||
store.commit('setToken', res.token_type + ' ' + res.access_token)
|
}).then(res => {
|
||||||
resolve()
|
uni.closeAuthView()
|
||||||
}).catch(err => {
|
store.commit('setToken', res.token_type + ' ' + res.access_token)
|
||||||
reject(err)
|
// 在这里,登录成功,链接IM服务
|
||||||
})
|
getImToken().then(res => {
|
||||||
},
|
im.connect(res.token, res.userInfo)
|
||||||
fail: err => {
|
})
|
||||||
uni.closeAuthView()
|
resolve()
|
||||||
switch (err.code) {
|
}).catch(err => {
|
||||||
case 30002:
|
reject(err)
|
||||||
router.push({ name: 'Auth', params: { keyPhone: 1 }})
|
})
|
||||||
break
|
},
|
||||||
}
|
fail: err => {
|
||||||
}
|
uni.closeAuthView()
|
||||||
})
|
switch (err.code) {
|
||||||
})
|
case 30002:
|
||||||
}
|
router.push({
|
||||||
|
name: 'Auth',
|
||||||
|
params: {
|
||||||
|
keyPhone: 1
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default userAuth
|
export default userAuth
|
||||||
|
|||||||
@@ -3,13 +3,20 @@ import * as CallLib from '@/uni_modules/RongCloud-CallWrapper/lib/index'
|
|||||||
import store from '@/store/index.js'
|
import store from '@/store/index.js'
|
||||||
import {
|
import {
|
||||||
getFriends,
|
getFriends,
|
||||||
getUserInfo
|
getUserInfo,
|
||||||
|
getImToken
|
||||||
} from '@/apis/interfaces/im.js'
|
} from '@/apis/interfaces/im.js'
|
||||||
|
|
||||||
const initIm = (KEY) => {
|
const initIm = (KEY) => {
|
||||||
RongIMLib.init(KEY)
|
RongIMLib.init(KEY)
|
||||||
CallLib.init()
|
CallLib.init()
|
||||||
addListeners()
|
addListeners()
|
||||||
|
// 初始化的时候 自动链接
|
||||||
|
if (store.getters.getToken !== '') {
|
||||||
|
getImToken().then(res => {
|
||||||
|
connect(res.token, res.userInfo, () => {})
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const setNotifyBadge = () => {
|
const setNotifyBadge = () => {
|
||||||
@@ -19,6 +26,9 @@ const setNotifyBadge = () => {
|
|||||||
count
|
count
|
||||||
}) => {
|
}) => {
|
||||||
if (code === 0) {
|
if (code === 0) {
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
plus.runtime.setBadgeNumber(count)
|
||||||
|
// #endif
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
uni.setTabBarBadge({
|
uni.setTabBarBadge({
|
||||||
index: 3,
|
index: 3,
|
||||||
@@ -31,6 +41,7 @@ const setNotifyBadge = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -60,6 +71,13 @@ const connect = (token, userInfo, callback) => {
|
|||||||
|
|
||||||
const disconnect = () => {
|
const disconnect = () => {
|
||||||
RongIMLib.disconnect()
|
RongIMLib.disconnect()
|
||||||
|
// 移除提醒数量
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
plus.runtime.setBadgeNumber(0)
|
||||||
|
// #endif
|
||||||
|
uni.removeTabBarBadge({
|
||||||
|
index: 3
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 允许通知的消息类型,触发更新消息列表操作
|
// 允许通知的消息类型,触发更新消息列表操作
|
||||||
|
|||||||
Reference in New Issue
Block a user