shop-live/components/sd-live-page/livepage.nvue

1923 lines
38 KiB
Plaintext
Raw Normal View History

2023-10-28 16:31:53 +08:00
<template>
<view class="container">
<view class="top-do-box">
<view class="room-info">
<view class="room-logo-box">
<image :src="room.cover" class="room-logo-box"></image>
</view>
<view class="room-info-message">
<view class="room-user-name">
<text
style="color: #fff;font-size: 25rpx;">{{room.live_name.length>6?room.live_name.substring(0, 6)+'...': room.live_name}}</text>
</view>
<view class="room-user-money">
<text style="color: #fff;font-size: 25rpx;">4000</text>
</view>
</view>
<view class="room-guanzhu" @click="interest" v-if="!isshow">
<text class="guanzhu" v-if="!follow">关注</text>
<text class="guanzhu" v-else>已关注</text>
</view>
</view>
<view class="room-users-box">
<scroll-view class="right_top_scroll" scroll-x="true" scroll-left="0">
<view class="top-scroll-users-header" v-for="(bitem,bindex) in users" :key="bindex">
<image :src="bitem.app_user_avatar" class="top-scroll-users-header"
v-if="bitem.app_user_avatar"></image>
<image src="https://lihai001.oss-cn-chengdu.aliyuncs.com/attach/default_avtar.png"
class="top-scroll-users-header" mode="aspectFill"></image>
</view>
</scroll-view>
</view>
<view class="users-count web-font">
<view class="users-count web-font">
<text class="users-count-text"> {{users.length}}</text>
</view>
<view class="users-count " @click="outroom">
<image src="@/static/img/close.png" class="users-count-img" mode="aspectFit"></image>
</view>
</view>
</view>
<view class="top-left" v-if="isshow">
<view class="top-left-a" @click="switchCamera">
<image class="left-img" src="/static/img/qiehuan.png" mode=""></image>
</view>
</view>
<view class="msgview">
<mh-msgList ref="msgList" :msgList="msgList"></mh-msgList>
</view>
<!-- 底部操作 -->
<view class="inpit-box-bg" v-if="focus">
<view class="inpit-box-body">
<input class="uni-input" @input="onKeyInput" maxlength="20" cursor-spacing="10" hold-keyboard
placeholder="说点什么吧..." :value="inputValue" :focus="focus" />
<view v-if="inputValue!=''" @click="send_message">
<text class="send-but">发送</text>
</view>
</view>
</view>
<view class="dobox" v-else>
<view class="inpit-box">
<view class="input-tpl" @click="set_focus">
<text class="input-tpls">说点什么..</text>
</view>
<view class="functionbox">
<view class="function-box">
<view class="ico-box" @click="send_liwu">
<image class="ico-box-img" src="@/static/img/li.png" mode="aspectFit"></image>
</view>
<view class="ico-box" @click="send_shop">
<image class="ico-box-img" src="@/static/img/shanpin.png" mode="aspectFit"></image>
</view>
<view class="ico-box" @click="send_lick">
<image class="ico-box-img" src="@/static/img/gn.png"></image>
</view>
</view>
</view>
</view>
</view>
<!-- 底部分享弹窗 -->
<uni-popup ref="share" :type="type" :custom="true" @change="change">
<template v-if="popup==1">
<view class="uni-share" style="background-color: #333333;">
<view class="send-boj" id="tes">
<view class="send-boj-txt">
<text class="send-boj-txta">礼物</text>
<view class="gift-jb-con">
<image class="gift-jb-img" src="@/static/img/jb.png" mode=""></image>
<text class="gift-web-je">
{{now_money}}
</text>
</view>
</view>
<view class="send-boj-close" @tap="close">
<image class="send-boj-close-img" src="/static/img/close.png" mode=""></image>
</view>
</view>
<scroll-view scroll-y style="height: 480rpx;overflow: hidden;">
<view class="uni-share-content">
<view class="lw-box" v-for="(litem,lindex) in liwu" :key="lindex"
@click="send_liwu_obj(litem)" @touchstart="handleTouchStart(lindex)"
@touchend="handleTouchEnd(lindex)" :class="{ 'hovered': lindex== hoveredIndex }">
<image class="lw-ico" :src="litem.gift_img"></image>
<view class="lw-name">
<text class="lw-name">{{litem.gift_name}}</text>
</view>
<view class="lw-money">
<image class="lw-money-img" src="@/static/img/jb.png" mode=""></image>
<text class="lw-moneya">{{litem.gift_price}}
</text>
</view>
<text class="send-m" v-if="lindex== hoveredIndex">赠送</text>
</view>
</view>
</scroll-view>
<!-- <view class="gift-botton-view" @click="rechargejb">
<text class="gift-web-cz">充值</text>
</view> -->
</view>
</template>
<template v-if="popup==2">
<view class="uni-shop">
<view class="shop">
<view class="shop-top">
<image class="shop-top-img" :src="room.cover" mode=""></image>
<text class="shop-top-txt">{{roomDetail.live_name}}</text>
</view>
<view class="shop-close" @tap="close">
<image class="shop-close-img" src="/static/img/colse1.png" mode=""></image>
</view>
</view>
<scroll-view scroll-y style="height: 680rpx;overflow: hidden;">
<view class="uni-shop-content">
<view class="shop-content" v-for="(litem,lindex) in roomDetail.goods" :key="lindex">
<image class="shop-content-img" :src="litem.app_goods_pic"></image>
<view class="shop-content-txt">
<view class="sp-txta">{{litem.app_goods_name}}</view>
<view class="sp-txtb">
<view class="txtba">
<text class="txtba-a">¥</text>
<text class="txtba-b">{{litem.app_goods_price.split('.')[0]}}.</text>
<text class="txtba-c">{{litem.app_goods_price.split('.')[1]}}</text>
</view>
<text class="txtbb" @click="shopp(litem)" v-if="!isshow">去抢购</text>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</template>
</uni-popup>
<uni-popup ref="recharge" :type="type" :custom="true" @change="change">
<view class="uni-recharge">
<view class="recharge">
<view class="recharge_title">
<text class="recharge_title">我的金币</text>
</view>
<view class="recharge-one">
<image class="recharge-one-img" src="../../static/img/jb.png" mode="aspectFit"></image>
<view class="recharge-one-txt"><text class="recharge-one-txt" {{now_money}}</text></view>
</view>
<view class="recharge-con">
<view class="recharge-con-title">
<text class="recharge-con-title">金币充值</text>
</view>
<view class="recharge-con-detail">
<view class="con-detail" v-for="(item,ik) in Recharglist" :key='ik'
@click="RechargClick(ik)" :class="{ 'carecharge': ik== regIndex }">
<view class="" v-if='item.id=="AA"'>
<!-- <text class="con-detaila">输入金额</text> -->
<input type="text" class="con-detaila" value="" placeholder="输入金额" />
<text class="con-detailb">最低可充值1元</text>
</view>
<view class="" v-else>
<text class="con-detaila">{{item.data.give}}金币</text>
<text class="con-detailb">{{item.data.price}}元</text>
</view>
</view>
</view>
<text class="recharge-conbottom">
立即充值
</text>
</view>
</view>
</view>
</uni-popup>
<!-- 礼物弹窗 -->
<view class="gift-alert" v-for="(gift,gindex) in giftobj" :key="gindex"
:style="{ top: gift.top + 'px', left: gift.left + 'px' }">
<view class="gift-alerta">
<view class="send-boj-user-header">
<image :src="gift.app_user_avatar" class="send-boj-user-header-img" mode="aspectFill"
v-if="gift.app_user_avatar"></image>
<image src="https://lihai001.oss-cn-chengdu.aliyuncs.com/attach/default_avtar.png"
class="send-boj-user-header-img" mode="aspectFill"></image>
</view>
<view class="gift-detail">
<text class="gifta">{{gift.app_user_name}}</text>
<text class="giftb">送{{room.app_user_name}}{{gift.gift_name}}</text>
</view>
<view class="gift-ico">
<image :src="gift.gift_img" class="gift-ico-img" mode="aspectFill"></image>
</view>
</view>
<view class="gift-alertb">
<image class="gift-alertb-img" src="@/static/img/X.png" mode=""></image>
<view class="gift-alertb-txt"> <text class="gift-alertb-txt">{{gift.gift_num}}</text> </view>
</view>
</view>
<gb-popup :isShow="isShow1" rName="确定" :isBut="false" lName="取消" @lEvent="show1" @rEvent="copyData"
title="请输入礼物数量">
<view style="padding: 30rpx;">
<input type="value" v-model="gift_num" placeholder="请输入" />
</view>
</gb-popup>
</view>
</template>
<script>
import {
joinChatRoom,
sendGroupMessage,
bindUser,
stopPushLive,
liveDetail,
getfans,
rewardList,
giftList,
liveAudience,
getuser,
getRechargeApi,
sendGift,
getAjuser
} from '@/api/api.js'
import {
VUE_APP_WS_URL
} from '@/config/app';
import uniPopup from '@/components/uni-popup/live-uni-popup.vue';
import gbpopup from '@/components/gb-popup/gb-popup.vue';
import msgList from '@/components/mh-msgList/mh-msgList.vue';
export default {
name: "sd-float-page",
props: {
role_val: {
type: String,
default: '0'
},
roomid_val: {
type: String,
default: '0'
},
room: {
type: Object,
}
},
components: {
uniPopup,
'mh-msgList': msgList,
'gb-popup': gbpopup,
},
data() {
return {
windowWidth: '',
// room: [], //房间信息
roomobj: [],
isShow1: false,
users: [],
rid: 0, //房间id
role: '', //角色
focus: false,
inputValue: '',
isshow: false,
message_arr: [
],
msgList: [{
userName: "系统通知",
content: "倡导绿色直播,严禁发布涉黄涉毒涉赌,严禁发布涉政、违法及低俗违规内容。健康直播,文明互动",
cmd: "say",
msg_type: "system"
}, ],
view_id: '',
liwu: [],
liwu2: [],
liwu3: [],
type: 'bottom',
follow: false, //关注
popup: 3, //1礼物操作 2其他操作 3.商品
user: '',
giftobj: [], //礼物
join_arr: [],
userName: '',
now_money: 0,
roomDetail: '',
userinfo: null,
hoveredIndex: -1,
regIndex: -1,
gifts: [],
gifsobj: {},
gift_num: ''
}
},
mounted() {
// console.log(this.$store.state.app.userInfo, '房间id 以及当前用户id')
if (typeof this.$store.state.app.userInfo === 'string' && this.$store.state.app.userInfo.length > 0) {
this.userinfo = JSON.parse(this.$store.state.app.userInfo)
} else {
this.userinfo = this.$store.state.app.userInfo
}
this.get_live_room(); //调用直播间信息
this.rewardList()
this.giftList()
this.liveAudience()
this.getuser()
this.getRecharg()
this.getjuser()
},
onReady() {
this.windowWidth = uni.getSystemInfoSync().screenWidth //获取屏幕宽度
const t = this;
t.role = this.$props.role_val;
t.rid = this.$props.roomid_val;
t.user = uni.getStorageSync('user');
console.log('浮动模板被加载的事件')
console.log(this.$props)
// 保持屏幕常亮
uni.setKeepScreenOn({
keepScreenOn: true,
success: (res) => {
console.log('手机长亮时间')
console.log(res)
},
fail: (e) => {
console.log(e)
console.log('手机长亮时间')
}
});
uni.onKeyboardHeightChange(res => {
if (res.height == 0) {
this.focus = false;
}
})
},
methods: {
//关注
getjuser() {
getAjuser(this.room.app_user_id).then((res) => {
if (res.status == 200) {
this.follow = res.data.is_start
}
}).catch((err) => {
})
},
//获取充值数据
getRecharg() {
getRechargeApi().then((res) => {
this.Recharglist = res.data.recharge_quota
this.Recharglist.push({
data: {},
id: 'AA'
})
// this.now_money = res.data.now_money
})
},
//获取余额
getuser() {
getuser().then((res) => {
this.now_money = res.data.now_money
})
},
//获取房间人数列表
liveAudience() {
let data = {
app_name: 'shop',
live_stream_id: this.room.live_stream_id
}
liveAudience(data).then((res) => {
this.users = res.data.lists
})
},
//礼物列表
rewardList() {
rewardList().then((res) => {
console.log(res, '11111111')
})
},
//送礼
bosendGift(gif) {
// 执行关闭模态对话框的操作
let data = {
app_name: 'shop',
gift_id: gif.gift_id,
live_stream_id: this.room.live_stream_id,
gift_num: gif.gift_num,
}
console.log(data)
sendGift(data).then((res) => {
if (res.code == 1) {
this.$refs.share.close()
uni.hideModal()
} else {
uni.showModal({
title: '提示',
content: res.msg,
confirmColor: '#ee6666', //确定字体颜色
showCancel: false, //没有取消按钮的弹框
buttonText: '确定',
success: function(res) {
if (res.confirm) {
} else if (res.cancel) {
console.log('用户点击取消');
}
},
})
}
})
},
//礼物列表
giftList() {
giftList().then((res) => {
this.liwu = res.data
})
},
//关注
interest() {
this.follow = !this.follow
if (this.follow) {
getfans(this.room.app_user_id, {
status: 1
}).then((res) => {
console.log(res, '11111111')
if (res.status == 200) {
console.log('关注成功')
}
}).catch((err) => {
console.log(err)
})
} else {
getfans(this.room.app_user_id, {
status: 0
}).then((res) => {
if (res.status == 200) {
console.log('已取消关注')
}
}).catch((err) => {
console.log(err)
})
}
},
//充值
RechargClick(index) {
this.regIndex = index
},
//hover效果设置
handleTouchStart(index) {
this.hoveredIndex = index;
},
handleTouchEnd(index) {
this.hoveredIndex = -1;
},
//加入直播间
joinChatRoom() {
let data = {
live_stream_id: this.room.live_stream_id,
app_name: 'shop',
app_user_id: this.userinfo.uid,
app_user_name: this.userinfo.nickname,
app_user_avatar: this.userinfo.avatar,
}
joinChatRoom(data).then((res) => {
if (res.code == 1) {
console.log('加入房间成功')
} else {
uni.showModal({
title: '提示',
content: res.msg,
confirmColor: '#ee6666', //确定字体颜色
showCancel: false, //没有取消按钮的弹框
buttonText: '确定',
success: function(res) {
if (res.confirm) {
uni.redirectTo({
url: '/pages/room/room_list'
})
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}
})
},
//购买商品
shopp(item) {
uni.sendHostEvent('live_shop', item, (ret) => {
//发送消息成功回调
console.log('购买商品' + JSON.stringify(item));
});
},
//绑定用户id
bindUser(client_id) {
let data = {
app_name: 'shop',
app_user_id: uni.getStorageSync('UID'),
client_id: client_id
}
bindUser(data).then((res) => {
if (res.code == 1) {
console.log('绑定成功')
this.joinChatRoom()
}
}).catch((err) => {
console.log(err)
})
},
// 进入这个页面的时候创建websocket连接【整个页面随时使用】
connectSocketInit() {
// 创建一个this.socketTask对象【发送、接收、关闭socket都由这个对象操作】
this.socketTask = uni.connectSocket({
// 【非常重要】必须确保你的服务器是成功的,如果是手机测试千万别使用ws://127.0.0.1:9099【特别容易犯的错误】
url: VUE_APP_WS_URL,
success(data) {
console.log("websocket连接成功", data);
},
fail() {
console.log("websocket连接失败", data);
},
complete(data) {
console.log("websocket连接完成", data);
}
});
this.socketTask.onError((res) => {
console.log("连接发生错误", res)
})
// 消息的发送和接收必须在正常连接打开中,才能发送或接收【否则会失败】
this.socketTask.onOpen(res => {
console.log(res, '连接打开');
})
this.socketTask.onMessage((res) => {
console.log("收到服务器内容:" + res.data);
let str = res.data
let obj = JSON.parse(str);
if (obj.type == 'init') {
this.bindUser(obj.client_id)
} else if (obj.type == 'message') {
// console.log(this.msgList.length, '11111111111')
let data1 = {
userName: obj.name,
content: obj.text,
avatar: obj.avatar,
cmd: "say",
msg_type: "user"
}
this.msgList.push(data1)
this.$refs.msgList.setMsgPanelScroll()
} else if (obj.type == 'sys_message') {
let data1 = {
userName: obj.name,
content: obj.text,
avatar: obj.avatar,
cmd: "say",
msg_type: "system"
}
this.msgList.push(data1)
this.$refs.msgList.setMsgPanelScroll()
} else if (obj.type == 'stream') {
if (obj.status == -1) {
uni.showModal({
title: '提示',
content: '直播间已关闭',
confirmColor: '#ee6666', //确定字体颜色
showCancel: false, //没有取消按钮的弹框
buttonText: '确定',
success: function(res) {
if (res.confirm) {
uni.redirectTo({
url: '/pages/room/room_list'
})
} else if (res.cancel) {
console.log('用户点击取消');
}
}
})
}
} else if (obj.type == 'gift_message') {
this.sendGift(obj)
} else if (obj.type == 'audience') {
this.liveAudience()
}
});
// 这里仅是事件监听【如果socket关闭了会执行】
this.socketTask.onClose(() => {
console.log("已经被关闭了")
})
},
sendGift(gift) {
// userName: "11111111",
// number: 33330,
// gift_name: "333333333",
// userAvatar: "https://lihai001.oss-cn-chengdu.aliyuncs.com/def/1b716202302251108516996.png",
// gift_ico: "https://lihai001.oss-cn-chengdu.aliyuncs.com/def/1b716202302251108516996.png",
gift.top = Math.random() * 200 // 随机生成礼物的位置
gift.left = Math.random() * 200 // 随机生成礼物的位置
this.giftobj.push(gift);
setTimeout(() => {
this.giftobj.splice(this.gifts.indexOf(gift), 1); // 礼物消失
}, 3000);
},
start() {
this.timeoutObj = setTimeout(() => {
//这里发送一个心跳,后端收到后,返回一个心跳消息,
//onmessage拿到返回的心跳就说明连接正常
console.log('ping');
this.socketTask.send({
data: "ping"
});
}, this.timeout)
},
// 关闭websocket【离开这个页面的时候执行关闭】
closeSocket() {
this.socketTask.close({
success(res) {
this.is_open_socket = false;
console.log("关闭成功", res)
},
fail(err) {
console.log("关闭失败", err)
}
})
},
//关闭弹窗
close() {
this.$refs.share.close()
},
//切换摄像头
switchCamera() {
console.log('切换摄像头')
this.$emit('switchCamera', '')
},
//关闭直播间
outroom: function() {
if (this.roomDetail.app_user_id == this.userinfo.uid) {
// console.log(this.roomDetail)
stopPushLive({
app_name: 'shop',
stream_name: this.roomDetail.stream_name
}).then((res) => {
if (res.code == 1) {
console.log('关闭直播间')
uni.redirectTo({
url: '/pages/room/room_list'
})
}
})
} else {
uni.redirectTo({
url: '/pages/room/room_list'
})
}
},
//获取房间详情
get_live_room() {
liveDetail({
app_name: 'shop',
live_stream_id: this.room.live_stream_id,
}).then(res => {
if (res.code == 1) {
this.roomDetail = res.data
console.log(res.data.app_user_id, this.userinfo.uid, 'AAAAAAAAAA')
if (res.data.app_user_id == this.userinfo.uid) {
this.isshow = true
this.userinfo.nickname = res.data.app_user_name
this.userinfo.avatar = res.data.app_user_avatar
}
}
this.connectSocketInit()
}).catch((err) => {})
},
togglePopup(type, open) {
this.type = type
if (open === 'tip') {
this.show = true
} else {
this.$refs[open].open()
}
},
cancel(type) {
if (type === 'tip') {
this.show = false
return
}
// this.$refs[type].close()
},
change(e) {
console.log('是否打开:' + e.show)
},
//充值
rechargejb: function() {
this.$refs['share'].close()
const t = this;
this.type = 'bottom'
this.$refs['recharge'].open()
},
send_liwu: function() {
const t = this;
t.popup = 1;
this.type = 'bottom'
t.togglePopup('bottom', 'share');
// this.$refs['recharge'].open()
},
send_shop: function() {
const t = this;
t.popup = 2;
this.type = 'bottom'
t.togglePopup('bottom', 'share');
},
send_lick: function() {
this.sendGift()
},
//礼物弹窗
show1() {
this.isShow1 = !this.isShow1
this.gift_num = ''
},
//礼物弹窗0
copyData() {
this.gifsobj.gift_num = this.gift_num
this.bosendGift(this.gifsobj)
this.show1()
},
//礼物弹窗1
send_liwu_obj: function(gt) {
console.log(this.gift_num)
let gift = {
'gift_id': gt.id,
}
this.isShow1 = true
this.gifsobj = gift
},
//对话监听
set_focus: function() {
this.focus = !this.focus
},
//对话输入监听
onKeyInput: function(event) {
this.inputValue = event.detail.value
},
//发消息
send_message: function() {
const t = this;
t.focus = false;
if (t.to_userid == '') {
uni.showToast({
title: '内容不能为空',
duration: 2000,
icon: 'none'
});
return false;
}
let data = {
live_stream_id: this.room.live_stream_id,
app_name: 'shop',
app_user_id: uni.getStorageSync('UID'),
message: this.inputValue
}
sendGroupMessage(data).then(res => {
console.log('发送的消息' + JSON.stringify(res))
this.inputValue = ''
if (res.code == 1) {
console.log('发送的消息成功')
}
})
// let message = {
// userName: '大黄',
// content: this.inputValue,
// cmd: "say",
// msg_type: "user"
// };
// /** 实际应用应发送到服务端通过监听服务端传回的消息加入的msgList **/
// if (this.msgList.length > 100) {
// this.msgList.splice(0, 1);
// this.msgList.push(message)
// this.$refs.msgList.setMsgPanelScroll()
// this.inputValue = ''
// } else {
// this.msgList.push(message)
// this.$refs.msgList.setMsgPanelScroll()
// this.inputValue = ''
// }
// console.log(this.msgList)
},
},
// onBackPress() {
// this.$refs['showpopup'].close()
// this.$refs['showtip'].close()
// this.$refs['showimage'].close()
// this.$refs['showshare'].close()
// }
}
</script>
<style lang="scss" scoped>
page {
position: relative;
}
.container {
width: 100%;
/* 设置容器的宽度 */
}
.dobox {
position: absolute;
bottom: 0rpx;
width: 750rpx;
background-color: #F8F8F8;
}
.inpit-box {
padding: 20upx 20rpx;
width: 700rpx;
flex-direction: row;
justify-content: space-between;
/* padding-top: 40upx; */
}
.inpit-box-bg {
position: absolute;
bottom: 0;
height: 80rpx;
width: 750rpx;
background-color: #F8F8F8;
z-index: 9999;
}
.inpit-box-body {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
}
.uni-input {
font-size: 32upx;
height: 60upx;
margin-top: 10upx;
padding-left: 20rpx;
color: #333333;
background-color: #f8f8f8;
flex: 1;
}
.send-but {
width: 120upx;
background-color: #0081FF;
color: #FFFFFF;
text-align: center;
font-size: 28upx;
height: 60upx;
line-height: 60upx;
border-radius: 60upx;
margin-top: 10upx;
}
.function-box {
width: 380rpx;
flex-direction: row;
justify-content: space-around;
padding-left: 20upx;
}
.ico-box {
width: 77rpx;
height: 77rpx;
border-radius: 50%;
background-color: rgba(0, 0, 0, .1);
line-height: 77rpx;
}
.ico-box-img {
width: 77rpx;
height: 77rpx;
border-radius: 50%;
background-color: rgba(0, 0, 0, .1);
line-height: 77rpx;
}
.ico {
font-size: 48upx;
}
.input-tpl {
height: 70upx;
width: 300upx;
line-height: 70upx;
text-align: left;
background: rgba(0, 0, 0, 0.25);
opacity: 1;
border-radius: 39upx;
}
.input-tpls {
height: 70upx;
width: 300upx;
line-height: 70upx;
text-align: left;
padding-left: 20rpx;
font-size: 25upx;
color: #FFFFFF;
border-radius: 70upx;
}
.top-left {
// height: auto;
position: absolute;
width: 40rpx;
right: 20rpx;
top: 230rpx;
z-index: 99999;
}
.left-img {
width: 40rpx;
height: 40rpx;
}
.gifta {
font-size: 23rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
margin-top: 5rpx;
margin-bottom: 5rpx;
text-align: center;
}
.giftb {
font-size: 19rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #FFFFFF;
text-align: center;
}
.nickname {
font-size: 28upx;
color: #22c8ef;
/* font-weight: 800; */
padding: 0 10upx;
line-height: 40upx;
padding-left: 4upx;
font-weight: 800;
}
.message-scroll-box {
line-height: 40upx;
color: #f9f9f9;
font-size: 28upx;
white-space: pre-wrap;
font-weight: 800;
}
.message-scroll-box-xi {
line-height: 40upx;
color: #f9f9f9;
font-size: 28upx;
white-space: pre-wrap;
}
.message-scroll-box-gift {
color: #22c8ef;
line-height: 40upx;
font-size: 28upx;
white-space: pre-wrap;
}
.user-lever {
background-color: #ebc602;
padding: 4upx 10upx;
border-radius: 20upx;
height: 20upx;
line-height: 20upx;
float: left;
display: flex;
overflow: hidden;
margin-top: 10upx;
}
.msgview {
position: fixed;
width: 540rpx;
height: 540rpx;
left: 20rpx;
bottom: 180rpx;
overflow: hidden;
border: none;
z-index: 9;
}
.chat-area-line {
width: 550upx;
flex-direction: row;
margin-bottom: 5upx;
}
.system-msg {
width: 550upx;
margin-bottom: 5upx;
}
.system-msg-detail {
// max-width: 550upx;
padding: 10upx;
border-radius: 30upx;
background-color: rgba($color: #000000, $alpha: 0.4);
flex-direction: row;
flex-wrap: wrap;
margin-right: 14upx;
>.system-msg-detail-username {
color: red;
font-size: 32upx;
font-weight: 400;
line-height: 40upx;
}
>.system-msg-detail-content {
font-size: 32upx;
font-weight: 400;
line-height: 40upx;
color: #A0CFFF;
}
}
.user-line {
// max-width: 530upx;
padding: 10upx;
color: #FFFFFF;
flex-direction: row;
border-radius: 30upx;
background-color: rgba($color: #000000, $alpha: 0.4);
margin-right: 14upx;
font-size: 28upx;
font-weight: 400;
line-height: 40upx;
}
.user-msg {
width: 530upx;
margin-bottom: 5upx;
}
.user-msg-detail {
padding: 10upx;
border-radius: 30upx;
background-color: rgba($color: #000000, $alpha: 0.4);
flex-direction: row;
flex-wrap: wrap;
margin-right: 14upx;
>.user-msg-detail-tag {
color: #A0CFFF;
background-color: #53C21D;
width: 80upx;
height: 40upx;
border-radius: 20upx;
font-size: 32upx;
font-weight: 400;
line-height: 40upx;
}
>.user-msg-detail-username {
color: #A0CFFF;
font-size: 32upx;
font-weight: 400;
line-height: 40upx;
}
>.user-msg-detail-content {
font-size: 32upx;
font-weight: 400;
line-height: 40upx;
color: #fff;
}
}
.user-lever-ico-box {
width: 100rpx;
width: 15upx;
height: 15upx;
border-radius: 100%;
background-color: #e0ad07;
padding: 2upx;
margin-right: 5upx;
}
.user-lever-ico {
width: 15upx;
height: 15upx;
// margin: auto;
}
.user-lever-text {
color: #FFFFFF;
font-size: 22upx;
height: 20upx;
line-height: 20upx;
}
.uni-recharge {
background-color: #fff;
position: fixed;
bottom: 0;
flex: 1;
width: 750rpx;
background: #FFFFFF;
border-top-left-radius: 30upx;
border-top-right-radius: 30upx;
}
.recharge-one {
display: flex;
justify-content: center; //弹性盒子对象在主轴上的对齐方式
align-items: center;
}
.recharge_title {
font-size: 33rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
text-align: center;
margin-top: 32rpx;
margin-bottom: 42rpx;
}
.recharge-one-img {
width: 72rpx;
height: 72rpx;
vertical-align: middle;
}
.recharge-one-txt {
font-size: 33rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
text-align: center;
margin-top: 18rpx;
}
.recharge-con {
padding: 0 32rpx;
}
.recharge-con-title {
font-size: 33rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
}
.recharge-con-detail {
flex-direction: row;
margin-top: 32rpx;
margin-bottom: 200rpx;
}
.recharge-conbottom {
width: 589rpx;
height: 84rpx;
line-height: 84rpx;
text-align: center;
position: absolute;
bottom: 30rpx;
left: 50%;
margin-left: -299.5rpx;
background: #F84221;
border-radius: 42rpx 42rpx;
font-size: 33rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
}
.con-detail {
width: 217rpx;
height: 159rpx;
margin-right: 18rpx;
border-radius: 21rpx 21rpx;
background: #F4F4F4;
text-align: center;
}
.carecharge {
border-width: 1px;
border-style: solid;
border-color: #F84221;
}
.con-detaila {
margin-top: 32rpx;
margin-bottom: 17rpx;
font-size: 37rpx;
font-family: PingFang SC-Semibold, PingFang SC;
font-weight: 600;
color: #333333;
}
.con-detailb {
font-size: 26rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
}
/* 底部分享 */
.uni-share {
background-color: #fff;
position: fixed;
bottom: 0;
width: 750rpx;
border-top-left-radius: 30upx;
border-top-right-radius: 30upx;
}
.uni-shop {
background-color: #fff;
position: fixed;
bottom: 0;
width: 750rpx;
border-top-left-radius: 30upx;
border-top-right-radius: 30upx;
}
.shop {
flex-direction: row;
justify-content: space-between;
}
.shop-top {
flex-direction: row;
margin-top: 20rpx;
margin-bottom: 20rpx;
margin-left: 20rpx;
}
.shop-top-img {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
}
.shop-close {
margin: 20rpx 20rpx;
}
.shop-close-img {
width: 60rpx;
height: 60rpx;
}
.shop-top-txt {
line-height: 80rpx;
margin-left: 30rpx;
}
.uni-share-title {
line-height: 60rpx;
font-size: 24rpx;
padding: 15rpx 0;
text-align: center;
}
.uni-shop-content {
/* #ifndef APP-NVUE */
/* display: flex; */
/* #endif */
// width: 750rpx;
// display: flex;
flex-wrap: wrap;
// justify-content: center;
padding-left: 20rpx;
padding-bottom: 20rpx;
margin-top: 20rpx;
/* padding-bottom: 0; */
}
.shop-content {
width: 700rpx;
// border-width: 1px;
// border-style: solid;
// border-color: red;
flex-direction: row;
margin-bottom: 20rpx;
}
.shop-content-img {
width: 160rpx;
height: 160rpx;
// border-width: 1px;
// border-style: solid;
// border-color: red;
}
.shop-content-txt {
margin-left: 20rpx;
width: 500rpx;
position: relative;
}
.sp-txta {
font-size: 30rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
}
.sp-txtb {
position: absolute;
bottom: 20rpx;
width: 500rpx;
flex-direction: row;
justify-content: space-between;
.txtba {
color: red;
flex-direction: row;
height: 60rpx;
line-height: 60rpx;
font-size: 26rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 400;
color: #F84221;
}
.txtba-a {
font-size: 26rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 400;
color: #F84221;
line-height: 60rpx;
}
.txtba-b {
font-size: 33rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #F84221;
line-height: 60rpx;
}
.txtba-c {
font-size: 26rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 400;
line-height: 60rpx;
color: #F84221;
}
.txtbb {
width: 120rpx;
height: 60rpx;
line-height: 60rpx;
background-color: red;
border-radius: 0px 11rpx 11rpx 0px;
text-align: center;
font-size: 30rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
}
}
.uni-share-content {
/* #ifndef APP-NVUE */
/* display: flex; */
/* #endif */
// width: 750rpx;
// display: flex;
flex-direction: row;
justify-content: space-between;
flex-wrap: wrap;
// justify-content: center;
padding: 15px 28rpx;
/* padding-bottom: 0; */
}
.content-image {
width: 60rpx;
height: 60rpx;
}
.uni-share-content-text {
font-size: 26rpx;
color: #333;
padding-top: 5px;
padding-bottom: 10px;
}
.uni-share-btn {
height: 90rpx;
line-height: 90rpx;
font-size: 14px;
border-top-color: #f5f5f5;
border-top-width: 1px;
border-top-style: solid;
text-align: center;
color: #666;
}
.gift-botton-view {
line-height: 90rpx;
height: 90rpx;
font-size: 14px;
border-top-color: #5c1398;
border-top-width: 1px;
border-top-style: solid;
text-align: center;
}
.gift-jb-con {
width: 221rpx;
height: 43rpx;
background: rgba(0, 0, 0, 0.25);
border-radius: 39rpx 39rpx;
flex-direction: row;
}
.gift-web-je {
font-size: 23rpx;
line-height: 43rpx;
font-weight: normal;
color: #FFFFFF;
}
.gift-jb-img {
width: 33rpx;
height: 33rpx;
margin-top: 3rpx;
margin-left: 10rpx;
margin-right: 10rpx;
}
.gift-web-cz {
font-size: 25rpx;
color: #fff;
text-align: center;
}
/* 礼物 */
.lw-box {
width: 168rpx;
height: 224rpx;
background: rgba(0, 0, 0, 0.2);
border-radius: 21rpx 21rpx;
margin-bottom: 30upx;
position: relative;
}
.hovered {
border: 2rpx solid #707070;
}
.send-m {
width: 168rpx;
height: 49rpx;
line-height: 49rpx;
text-align: center;
position: absolute;
background: #F84221;
bottom: 0;
border-radius: 0 0 21rpx 21rpx;
font-size: 23rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #FFFFFF;
}
.lw-ico {
width: 100rpx;
height: 100rpx;
margin-left: 35rpx;
margin-top: 20rpx;
margin-bottom: 10rpx;
}
.lw-name {
font-size: 23rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #FFFFFF;
text-align: center;
margin-bottom: 10rpx;
}
.lw-money {
flex-direction: row;
}
.lw-moneya {
font-size: 23rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #FFFFFF;
text-align: center;
margin-top: 5rpx;
}
.lw-money-img {
width: 28rpx;
height: 28rpx;
margin-left: 38rpx;
margin-right: 5rpx;
}
.send-boj {
// display: flex;
flex-direction: row;
justify-content: space-between;
padding: 20upx 30upx;
// border-bottom: 2upx solid #5c1398;
}
.send-boj-txt {
flex: 1;
padding-right: 40rpx;
flex-direction: row;
justify-content: space-between;
}
.send-boj-txta {
font-size: 30rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
}
.send-boj-close {
width: 30rpx;
height: 30rpx;
}
.send-boj-close-img {
width: 30rpx;
height: 30rpx;
}
.gift-alert {
width: 430rpx;
flex-direction: row;
justify-content: space-between;
// background-color: green;
animation: slideRight 1s linear forwards;
z-index: 9999;
}
.gift-alerta {
width: 359rpx;
height: 70rpx;
background: rgba(0, 0, 0, 0.25);
border-radius: 39rpx 39rpx;
padding-left: 2rpx;
flex-direction: row;
justify-content: space-between;
}
.gift-alertb {
flex-direction: row;
height: 72rpx;
}
.gift-alertb-img {
width: 44rpx;
height: 72rpx;
}
.gift-alertb-txt {
font-size: 45rpx;
margin-top: 5rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 700;
color: #FFFFFF;
}
@keyframes slideRight {
0% {
transform: translateX(0);
}
100% {
transform: translateX(100%);
}
}
.gift-ico {
width: 60upx;
height: 60upx;
margin-top: 10rpx;
}
.gift-ico-img {
width: 60upx;
height: 60upx;
}
.send-boj-user-header {
width: 63upx;
height: 63upx;
border-radius: 50%;
margin-top: 3rpx;
}
.send-boj-user-header-img {
width: 63upx;
height: 63upx;
border-radius: 50%;
}
.top-do-box {
width: 750rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
margin-top: 60rpx;
}
.room-info {
width: 350rpx;
display: flex;
flex-direction: row;
height: 80upx;
background-color: rgba(0, 0, 0, .2);
border-radius: 90upx;
}
.room-logo-box {
width: 80upx;
height: 80upx;
border-radius: 50%;
}
.room-info-message {
margin-left: 10rpx;
}
.room-user-name {
width: 150rpx;
font-size: 25upx;
color: #fff;
margin-top: 10rpx;
}
.room-user-money {
font-size: 28upx;
font-size: 25upx;
color: #fff;
margin-top: 5rpx;
}
.room-xin-box {
height: 30upx;
line-height: 30upx;
font-size: 20upx;
color: #FFFFFF;
border-radius: 30upx;
background-color: #f4305e;
margin-top: 10upx;
padding: 0 10upx;
margin-right: 4upx;
}
.room-money {
height: 30upx;
line-height: 30upx;
font-size: 20upx;
color: #FFFFFF;
border-radius: 30upx;
white-space: nowrap;
overflow: hidden;
margin-top: 10upx;
}
.room-guanzhu {
width: 105upx;
height: 60upx;
line-height: 60upx;
text-align: center;
color: #f4305e;
background-color: #FFFFFF;
border-radius: 50upx;
margin-top: 10rpx;
}
.guanzhu {
width: 105upx;
height: 60upx;
line-height: 60upx;
text-align: center;
font-size: 25rpx;
color: #f4305e;
background-color: #FFFFFF;
border-radius: 50upx;
}
.room-users-box {
width: 200rpx;
height: 65upx;
display: flex;
}
.right_top_scroll {
overflow: hidden;
flex-direction: row;
flex-wrap: nowrap;
width: 200rpx;
height: 85upx;
margin-top: 10rpx;
}
.top-scroll-users-header {
width: 60upx;
height: 60upx;
border-radius: 50%;
margin-right: 10upx;
overflow: hidden;
}
// .top-scroll-users-header image {
// width: 100%;
// height: 100%;
// }
.users-count {
display: flex;
flex-direction: row;
color: #FFFFFF;
font-size: 28upx;
}
.users-count-text {
margin-top: 10rpx;
width: 70upx;
height: 60upx;
line-height: 60upx;
text-align: center;
border-radius: 60upx;
background-color: rgba(0, 0, 0, .2);
margin-right: 30rpx;
}
.users-count-img {
width: 40rpx;
height: 40rpx;
margin-top: 20rpx;
margin-right: 20rpx;
}
</style>