Sprinkler-app/page_newyemian/wgluru-add.vue
2026-01-17 17:37:00 +08:00

1308 lines
32 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page">
<u-navbar title="设备录入" :border-bottom="false" :background="bgc" title-color='#000' back-icon-color="#000" title-size='38' :custom-back="btns"
height='50'></u-navbar>
<view class="iptbox" @click="backpage()">
<input type="text" class="ips" v-model="mac" placeholder=" " style="margin-left: 32rpx;"
placeholder-class="my-placeholder" />
<view class="mini-btn" @click.stop="Binddevice()">蓝牙连接</view>
</view>
<view class="iptbox">
<view class="qrcode" @click="qrcode()">
<image src="https://api.ccttiot.com/smartmeter/img/static/uy7BNwAMIKwvstqFnRhs" mode=""></image>
</view>
<input type="text" class="ips" v-model="storeId" placeholder="请扫描设备上的二维码" style="margin-left: 32rpx;"
placeholder-class="my-placeholder" />
<view class="mini-btn" @click="btnwl">网络控制</view>
</view>
<view class="lanyasj">
<view class="item">
<view class="label-box">
<u-icon name="info-circle" size="28" color="#52c41a"></u-icon>
<text class="label">版本号</text>
</view>
<view>
<text v-if="ver_data.ver" class="value">{{'V' + ver_data.ver}}</text>
<text v-else class="value">--</text>
<view class="apn-btn" @click.stop="fengm()" v-if="carstause">固件升级</view>
</view>
</view>
</view>
<view class="bot_btn">
<view class="btn1" @click="bind()">
录入
</view>
</view>
<u-mask :show="showbind" :z-index='100' />
<view class="tip_box" v-if="showbind">
<view class="top" v-if="showbind">
<view class="tip">
操作提示
</view>
<view class="ipt_box" style="justify-content: center;">
<view class="text" style="width: 80%;text-align: center;">
该mac号已有绑定sn码是否修改为当前sn码
</view>
</view>
</view>
<view class="bots">
<view class="bot_left" @click="showbind=false ">
取消
</view>
<view class="bot_right" @click="changeBind()">
确定
</view>
</view>
</view>
<u-mask :show="showApnModal" :z-index='100' />
<view class="tip_box" v-if="showApnModal">
<view class="top">
<view class="tip">修改APN</view>
<view class="ipt_box" style="justify-content: center;">
<input class="input" v-model="apnValue" placeholder="请输入APN" style="border: 1px solid #ccc; padding: 10rpx; width: 80%; text-align: center; border-radius: 10rpx; height: 60rpx;" />
</view>
</view>
<view class="bots">
<view class="bot_left" @click="showApnModal=false">取消</view>
<view class="bot_right" @click="confirmApn">确定</view>
</view>
</view>
<view class="float-container">
<view class="float-btn" @click="qrcode()">
<image src="https://api.ccttiot.com/smartmeter/img/static/uy7BNwAMIKwvstqFnRhs" mode="aspectFit"></image>
<!-- <text>扫码</text> -->
</view>
</view>
<!-- 进度条 -->
<view class="container" v-if="shengjiflag">
<image src="https://api.ccttiot.com/smartmeter/img/static/uquIy7wJmrNhjvy2maJf" mode=""></image>
<!-- 进度条背景 -->
<view class="progress-bar">
<!-- 进度条填充部分 -->
<view class="progress-fill" :style="{ width: progress + '%' }"></view>
</view>
<!-- 显示进度百分比 -->
<view class="progress-text">{{ progress }}%</view>
<view class="wz">
固件升级中请保持蓝牙连接
</view>
<view class="wz">
切记在蓝牙范围内,以防升级失败
</view>
</view>
<!-- <view class="bot">
<view class="btn">
退款
</view>
</view> -->
</view>
</template>
<script>
const app = getApp();
var xBlufi = require("@/components/blufi/xBlufi.js");
let _this = null;
export default {
data() {
return {
devicesList: [
// {name:'110000',
// mac:'11111'}
],
searching: false,
texts: '正在扫描蓝牙设备...',
btnflag: true,
tishiflag: false,
option: '',
bluthlist: [], //蓝牙数组
// status: 'loading',
statusflag: false,
Bluetoothmac: '',
mac: '',
ishave: false,
ver_data: {},
deviceInfoss: {},
gps: {},
isband: false,
// status: false,
deviceIds: '',
name: '',
orderinfo: {},
dl: 0,
czmoney: true,
iscz: true,
banben: '请点击选择版本',
modelId: '',
bgc: {
backgroundColor: "#FAFDFD",
},
sn: '',
carstause: false,
isbands: false,
show: false,
list: [],
hardwareInfo: {},
showbind: false,
storeId:'',
deviceId:'',
file:'https://lxnapi.ccttiot.com/FlAnyIGlQIy6Ln-l5HWmiSiINwj7' ,//固件升级地址
intervalId: null,
version:'',
progress:0,
shengjiflag:false,
valuedian:1000,
xshu:'1',
x:'',
sn:'',
zhendong:'',
zdlyyc:true,
showApnModal: false,
apnValue: ''
}
},
onLoad(e) {
xBlufi.initXBlufi(1)
xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent)
xBlufi.notifyStartDiscoverBle({
'isStart': true
})
console.log(e)
this.mac = e.mac
this.Binddevice()
this.isbands = false
this.carstause = false
if(uni.getStorageSync('banben') || uni.getStorageSync('banbenid')){
this.banben = uni.getStorageSync('banben')
this.modelId = uni.getStorageSync('banbenid')
}
if(e.sn){
this.storeId = e.sn
}
},
onShow() {
// this.getlist()
// this.getbanben()
uni.setKeepScreenOn({
keepScreenOn: true
})
},
onUnload: function() {
xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
wx.closeBLEConnection({
deviceId: this.deviceId,
})
uni.setKeepScreenOn({
keepScreenOn: false
})
},
onHide() {
xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
xBlufi.notifyStartDiscoverBle({
'isStart': false
});
uni.setKeepScreenOn({
keepScreenOn: false
})
},
onBeforeUnmount() {
xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
xBlufi.notifyStartDiscoverBle({
'isStart': false
});
},
watch: {
},
methods: {
// 点击进行重启
btncq(){
xBlufi.notifySendCustomData({
customData: '11reboot@'
})
},
// 获取版本号和文件
getbanben(){
this.$u.get(`/app/softVersion/latest`).then(res =>{
if(res.code == 200){
this.version = res.data.version
this.file = res.data.fileUrl
}
})
},
// 增加震动值
btnzdadd(){
if(this.zhendong == 10){
uni.showToast({
title: '最高值为10',
icon: 'none',
duration: 3000
})
return
}
this.zhendong = this.zhendong + 1
},
//减少震动值
btnzdjian(){
if(this.zhendong == 0){
uni.showToast({
title: '最低值为0',
icon: 'none',
duration: 3000
})
return
}
this.zhendong = this.zhendong - 1
},
// 点击确定震动
btnqdzd(){
this.$u.get(`/farm/beehive/iot/levelToZdxs?level=${this.zhendong}`).then(res => {
if (res.code == 200) {
xBlufi.notifySendCustomData({
customData: `11zdxs${res.data}@`
})
uni.showToast({
title: '设置成功',
icon: 'success',
duration: 3000
})
this.ver_data = {}
this.Binddevice()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 3000
})
}
})
},
btnwl(){
uni.reLaunch({
url:'/page_newyemian/wgkongzhi?sn=' + this.storeId
})
},
// 开风扇
btnfsk(){
xBlufi.notifySendCustomData({
customData: "11fan100@"
})
uni.showToast({
title: '开启风扇命令成功',
icon: 'success',
duration:2000
})
this.ver_data = {}
this.Binddevice()
},
// 关风扇
btnfsg(){
xBlufi.notifySendCustomData({
customData: "11fan0@"
})
uni.showToast({
title: '关闭风扇命令成功',
icon: 'success',
duration:2000
})
this.ver_data = {}
this.Binddevice()
},
// 点击重置系数
btnczxs(){
xBlufi.notifySendCustomData({
customData: "11zlxs1@"
})
uni.showToast({
title: '重置系数命令成功',
icon: 'success',
duration:2000
})
this.ver_data = {}
this.Binddevice()
},
// 点击校准电量
btnjiaozhun(){
this.x = this.valuedian / this.ver_data.weight * this.ver_data.xs
console.log(this.x,this.valuedian,this.ver_data.weight,this.ver_data.xs);
this.x = this.x.toFixed(3)
setTimeout(()=>{
xBlufi.notifySendCustomData({
customData: "11zlxs" + this.x + '@'
})
this.ver_data = {}
this.Binddevice()
uni.showToast({
title: '发送校准命令成功',
icon: 'success',
duration:2000
})
},1000)
// this.$u.put(`app/beehive/admin/zlxs?sn=${this.sn}&zlxs=${this.x}`).then(res => {
// if(res.code == 200){
// uni.showToast({
// title: '校准成功',
// icon: 'success',
// duration:2000
// })
// setTimeout(()=>{
// this.ver_data = {}
// this.Binddevice()
// },1000)
// }else{
// uni.showToast({
// title: res.msg,
// icon: 'none'
// })
// }
// })
},
btnadd(){
this.valuedian = this.valuedian + 50
},
btnjian(){
this.valuedian = this.valuedian - 50
},
// 点击进行固件升级
fengm(){
var data = {
sum: 100,
http: this.file
}
xBlufi.notifySendCustomData({
customData: data
})
this.shengjiflag = true
this.startProgress()
},
// 固件升级进度
startProgress() {
this.intervalId = setInterval(() => {
if (this.progress < 100) {
} else {
clearInterval(this.intervalId); // 进度达到 100% 时清除定时器
console.log("加载完成");
}
}, 30); // 每 30 毫秒更新一次进度
},
ring() {
xBlufi.notifySendCustomData({
customData: "11clear_weight@"
})
this.ver_data = {}
this.Binddevice()
},
btns(){
uni.reLaunch({
url:'/page_newyemian/wgluru'
})
},
confirm(e) {
// console.log(e);
this.banben = e[0].label
this.modelId = e[0].value
uni.setStorageSync('banben', this.banben)
uni.setStorageSync('banbenid', this.modelId)
},
getlist() {
this.$u.get('/app/model/admin/all').then((res) => {
if (res.code === 200) {
this.Versionlist = res.data
const hardwareVersionId = uni.getStorageSync('hardwareVersionId');
if (hardwareVersionId) {
this.hardwareVersionId = hardwareVersionId
const matchedVersion = this.Versionlist.find(version => version.id ===
hardwareVersionId);
if (matchedVersion) {
this.hardwareInfo = matchedVersion;
}
}
this.list = res.data.map(item => ({
value: item.modelId,
label: item.name
}));
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
send() {
this.$u.post('/app/device/ring?sn=' + this.sn).then((res) => {
if (res.code === 200) {
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
changeBind() {
this.$u.post(`/appVerify/updateSn?sn=` + this.sn + '&mac=' + this.mac + '&hardwareVersionId=' + this
.hardwareVersionId).then((res) => {
if (res.code === 200) {
uni.showToast({
title: '绑定成功',
icon: 'none',
duration: 2000
});
setTimeout(() => {
uni.navigateBack({
delta: 1 // delta值为1时表示返回的页面层数
});
}, 2000)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
bind() {
let data = {
sn: this.storeId,
mac: this.mac,
pre:'CTWG:'
}
this.$u.post('/device/device/addDevice', data).then((res) => {
if (res.code == 200) {
uni.showToast({
title: '录入成功',
icon: 'success',
duration: 2000
})
wx.closeBLEConnection({
deviceId: this.deviceId,
})
setTimeout(()=>{
uni.reLaunch({
url:'/page_newyemian/wgkongzhi?sn=' + this.storeId
})
},1500)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
qrcode() {
uni.scanCode({
onlyFromCamera: true,
scanType: ['qrCode'],
success: res => {
function getQueryParam(url, paramName) {
let regex = new RegExp(`[?&]${paramName}=([^&]*)`)
let results = regex.exec(url);
return results ? decodeURIComponent(results[1].replace(/\+/g, ' ')) : null
}
console.log(res,'000');
let sceneValue = res.result
let decodedValue = decodeURIComponent(sceneValue)
let id = getQueryParam(decodedValue, 's')
this.storeId = id
},
fail: err => {
console.error('扫描失败:', err)
uni.showToast({
title: '扫描失败',
icon: 'none'
})
}
})
},
Binddevice() {
this.zdlyyc = true
this.devicesList = [] // 清空设备列表
uni.showLoading({
title: '连接中..'
})
// 两秒后停止蓝牙搜索
setTimeout(() => {
xBlufi.notifyStartDiscoverBle({
'isStart': false
});
setTimeout(() => {
uni.hideLoading()
if (this.devicesList.length == 0) {
uni.showToast({
title: '暂无发现对应设备,请重试',
icon: 'none'
});
} else {
let uniqueDevicesList = Array.from(new Set(this.devicesList));
// 将去重后的数组重新赋值给 this.devicesList
this.devicesList = uniqueDevicesList;
// console.log(this.devicesList,'this.devicesListthis.devicesList');
this.devicesList.forEach(device => {
// 从设备名称中提取 MAC 地址(假设 MAC 地址是设备名称的后6个字符
let macFromName = device.name.substring(device.name.length - 12);
console.log(macFromName, 'macFromNamemacFromName');
// 与 this.mac 进行比较
if (macFromName == this.mac) {
// 如果相同,则将 this.ishave 设置为 true
console.log(device);
this.deviceInfoss = device
// this.ishave = true;
this.createBLEConnection(device)
console.log('对比正确1111111111');
} else {
console.log('对比错误');
}
});
}
}, 200)
// 判断是否存在浇花器设备
// this.status = true
}, 2000)
},
reboot() {
let vm = this; // 将外部的 this 绑定到 vm 上
uni.getNetworkType({
success(res) {
if (res.networkType !== 'none') {
uni.getConnectedBluetoothDevices({
success(res) {
console.log('已连接的蓝牙设备信息:', res);
// vm.dl = (vm.orderinfo.deviceAmount / vm.orderinfo.unitPrice).toFixed(2); // 使用 vm 访问 Vue 实例的属性
xBlufi.notifySendCustomData({
customData: "11reboot"
});
// uni.hideLoading()
// vm.remakr()
},
fail(err) {
uni.hideLoading()
console.error('获取已连接蓝牙设备信息失败:', err);
}
});
} else {
console.log('手机未连接网络');
}
}
});
},
open() {
let vm = this; // 将外部的 this 绑定到 vm 上
uni.getNetworkType({
success(res) {
if (res.networkType !== 'none') {
uni.getConnectedBluetoothDevices({
success(res) {
console.log('已连接的蓝牙设备信息:', res);
// vm.dl = (vm.orderinfo.deviceAmount / vm.orderinfo.unitPrice).toFixed(2); // 使用 vm 访问 Vue 实例的属性
xBlufi.notifySendCustomData({
customData: "open"
});
xBlufi.notifySendCustomData({
customData: "11open"
});
// uni.hideLoading()
// vm.remakr()
},
fail(err) {
uni.hideLoading()
console.error('获取已连接蓝牙设备信息失败:', err);
}
});
} else {
console.log('手机未连接网络');
}
}
});
},
close() {
let vm = this; // 将外部的 this 绑定到 vm 上
uni.getNetworkType({
success(res) {
if (res.networkType !== 'none') {
uni.getConnectedBluetoothDevices({
success(res) {
console.log('已连接的蓝牙设备信息:', res);
// vm.dl = (vm.orderinfo.deviceAmount / vm.orderinfo.unitPrice).toFixed(2); // 使用 vm 访问 Vue 实例的属性
xBlufi.notifySendCustomData({
customData: "close"
});
xBlufi.notifySendCustomData({
customData: "11close"
});
// uni.hideLoading()
// vm.remakr()
},
fail(err) {
uni.hideLoading()
console.error('获取已连接蓝牙设备信息失败:', err);
}
});
} else {
console.log('手机未连接网络');
}
}
});
},
btnyc() {
this.titleflag = false
},
// 解析自定义数据
funListenDeviceMsgEvent: function(options) {
switch (options.type) {
case xBlufi.XBLUFI_TYPE.TYPE_STATUS_CONNECTED:
if (!options.result) {
this.ver_data = {}
this.carstause = false
}
break;
case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS:
if (options.result) {
let devicesarr = options.data
devicesarr.forEach(device => {
// 只添加以CTWG:开头的设备
const deviceName = device.name || device.localName || ''
// 严格检查设备名称必须以CTWG:开头
if (deviceName && deviceName.length >= 5 && deviceName.substring(0, 5) === 'CTWG:') {
this.devicesList.push(device);
}
});
// 循环结束后统一去重基于deviceId去重
let deviceMap = new Map()
this.devicesList.forEach(device => {
if (device.deviceId && !deviceMap.has(device.deviceId)) {
deviceMap.set(device.deviceId, device)
}
})
this.devicesList = Array.from(deviceMap.values())
}
break;
case xBlufi.XBLUFI_TYPE.TYPE_CONNECTED:
console.log("连接回调:" + JSON.stringify(options));
if (options.result) {
uni.hideLoading();
this.carstause = true
uni.showToast({
title: '连接成功',
icon: 'none'
}); {
xBlufi.notifyInitBleEsp32({
deviceId: options.data.deviceId
});
this.deviceIds = options.data.deviceId
this.name = options.data.name
}
}
break;
case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA:
if (typeof options.data === 'string') {
if (options.data.indexOf("prom:") !== -1) {
console.log("选择固件升级收信息:", options.data, options.data.length);
console.log('固件升级中')
var indexOld = options.data.substring(options.data.indexOf('prom:'))
console.log("indexOld", indexOld);
var load_num = indexOld.substring(
indexOld.indexOf("prom:") + 5,
indexOld.indexOf("@")
)
this.progress = Number(load_num);
console.log("load_num", load_num);
console.log("升级进度:", this.progress)
if (this.progress === 6000) {
console.log('固件成功')
this.progress = 100
uni.showToast({
title: '固件升级成功',
icon: 'success',
duration: 2000
})
setTimeout(()=>{
this.ver_data = {}
this.shengjiflag = false
},2000)
}
if (this.progress === 9000) {
console.log('固件升级失败')
this.progress = 99
uni.showToast({
title: '固件升级失败',
icon: 'none',
duration: 2000
})
setTimeout(()=>{
this.ver_data = {}
this.shengjiflag = false
},1000)
}
}else{
this.ver_data = this.parseBluetoothData(options.data + ',')
if (options.data) {
}
console.log("1收到设备发来的自定义数据结果", options.data,this.ver_data);
if(this.zdlyyc == true){
this.zdlyyc = false
this.$u.get(`/farm/beehive/iot/zdxsToLevel?zdxs=${this.ver_data.zd}`).then(res => {
if (res.code == 200) {
this.zhendong = res.data
}
})
}
}
} else {
console.log("不是字符串:", options.data,this.ver_data);
}
break;
case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_STOP:
if (options.result) {
} else {
}
this.searching = false
break
}
},
parseBluetoothData(data) {
const result = {};
const parts = data.split(',');
parts.forEach(part => {
if (part) {
// 使用正则表达式匹配键和值
const match = part.match(/^([a-zA-Z_]+):?([^@]+)/);
if (match) {
const key = match[1]; // 提取键
const value = match[2]; // 提取值
result[key] = value;
} else {
// 如果没有匹配到键值对,直接将该部分作为键,值为空
result[part] = '';
}
}
});
return result;
},
//4、建立连接
createBLEConnection(e) {
console.log('调用了')
xBlufi.notifyStartDiscoverBle({
'isStart': false
})
console.log(e, '蓝牙信息')
const deviceId = e.deviceId
this.deviceId = e.deviceId
this.Bluetoothmac = e.localName.substring(5) //从第七位开始截取 只取后面的mac号
console.log(this.Bluetoothmac, '11111')
let name = e.name;
console.log('点击了蓝牙准备连接的deviceId:' + e.deviceId)
xBlufi.notifyConnectBle({
isStart: true,
deviceId: e.deviceId,
name
})
},
// 点击重新搜索
Search() {
if (this.status) {
xBlufi.notifyStartDiscoverBle({
'isStart': true
});
// 重新搜索清空蓝牙数组
this.bluthlist = []
this.devicesList = []
// 重新搜索
// this.startBluetoothDevicesDiscovery()
this.statusflag = true
this.status = false
this.texts = '正在扫描蓝牙设备...'
setTimeout(() => {
this.statusflag = false
this.status = true
if (this.searching) {
xBlufi.notifyStartDiscoverBle({
'isStart': false
});
// 判断是否存在浇花器设备
if (this.devicesList.length == 0) {
uni.showToast({
title: '暂无发现对应设备,请重试',
icon: 'none'
});
} else {
this.texts = '扫描到以下设备,请点击连接!'
}
} else {
xBlufi.notifyStartDiscoverBle({
'isStart': true
});
}
}, 2000)
}
},
// 点击隐藏没有设备提示
btnhd() {
this.tishiflag = false
},
btnSetApn(){
this.apnValue = this.ver_data.apn || ''
this.showApnModal = true
},
confirmApn(){
// if(!this.apnValue) {
// uni.showToast({
// title: '请输入APN',
// icon: 'none'
// })
// return
// }
xBlufi.notifySendCustomData({
customData: `11apn${this.apnValue}@`
})
uni.showToast({
title: '设置成功',
icon: 'success'
})
this.showApnModal = false
this.ver_data = {}
this.Binddevice()
}
}
}
</script>
<style lang="scss">
page {
overflow-x: hidden;
background-color: #F3F3F3;
}
.jiaozhun{
display: flex;
padding: 50rpx;
box-sizing: border-box;
width: 100%;
align-items: center;
justify-content: space-between;
button{
height: 80rpx;
line-height: 80rpx;
background-color: #52c41a;
color: #fff;
}
.input{
input{
height: 80rpx;
line-height: 80rpx;
}
border: 1px solid #ccc;
border-radius: 20rpx;
display: flex;
width: 260rpx;
height: 80rpx;
text-align: center;
}
.view{
width: 200rpx;
height: 80rpx;
border-radius: 20rpx;
background-color: #52c41a;
color: #fff;
text-align: center;
line-height: 80rpx;
font-size: 28rpx;
}
}
.container {
display: flex;
flex-direction: column;
align-items: center;
height: 100vh; /* 全屏高度 */
background-color: #f0f0f0; /* 背景颜色 */
position: fixed;
top: 0;
left: 50%;
transform: translateX(-50%);
width: 100%;
z-index: 99;
image{
width: 400rpx;
height: 500rpx;
margin-top: 260rpx;
margin-bottom: 80rpx;
}
.wz{
color: red;
margin-top: 20rpx;
}
}
/* 进度条背景 */
.progress-bar {
width: 80%; /* 进度条宽度 */
height: 20px; /* 进度条高度 */
background-color: #e0e0e0; /* 背景颜色 */
border-radius: 10px; /* 圆角 */
overflow: hidden; /* 隐藏超出部分 */
}
/* 进度条填充部分 */
.progress-fill {
height: 100%;
background-color: #7FAD76; /* 填充颜色 */
transition: width 0.1s ease; /* 平滑过渡 */
}
/* 进度百分比文字 */
.progress-text {
margin-top: 20px;
font-size: 24px;
color: #333;
}
.lanyasj{
margin: 15rpx auto 0;
width: 658rpx;
background: #FFFFFF;
box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.15);
border-radius: 20rpx;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
padding: 30rpx 30rpx;
box-sizing: border-box;
.item{
width: 50%;
margin-top: 20rpx;
text-align: left;
display: flex;
flex-direction: column;
.label-box {
display: flex;
align-items: center;
margin-bottom: 8rpx;
}
.label{
font-size: 24rpx;
color: #999;
margin-left: 8rpx;
}
.value{
font-size: 28rpx;
color: #333;
font-weight: bold;
margin-bottom: 10rpx;
}
.apn-btn {
margin-left: 20rpx;
background-color: #52c41a;
color: #fff;
font-size: 24rpx;
padding: 4rpx 16rpx;
border-radius: 10rpx;
display: inline-block;
}
}
}
.page {
padding-bottom: 250rpx;
width: 750rpx;
height: 100%;
.float-container {
position: fixed;
right: 30rpx;
bottom: 760rpx;
display: flex;
flex-direction: column;
gap: 30rpx;
z-index: 99;
.float-btn {
width: 100rpx;
height: 100rpx;
background: #fff;
border-radius: 50%;
box-shadow: 0 4rpx 10rpx rgba(0,0,0,0.2);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 24rpx;
color: #333;
image {
width: 60rpx;
height: 60rpx;
}
&.confirm-btn {
background: #52c41a;
color: #fff;
border: 2rpx solid #fff;
font-size: 32rpx;
}
}
}
.tip_box {
position: fixed;
left: 72rpx;
top: 628rpx;
width: 610rpx;
// height: 282rpx;
background: #FFFFFF;
border-radius: 30rpx 30rpx 30rpx 30rpx;
z-index: 110;
padding-bottom: 100rpx;
.top {
padding: 52rpx 38rpx 42rpx 36rpx;
.ipt_box {
margin-top: 22rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
.text {
width: 350rpx;
font-weight: 400;
font-size: 32rpx;
color: #3D3D3D;
}
.ipt {
padding: 10rpx 18rpx;
display: flex;
align-items: center;
justify-content: space-between;
margin-left: 26rpx;
width: 420rpx;
height: 64rpx;
border-radius: 0rpx 0rpx 0rpx 0rpx;
border: 2rpx solid #979797;
.input {
width: 80%;
}
}
}
.tip {
width: 100%;
text-align: center;
font-weight: 700;
font-size: 32rpx;
color: #3D3D3D;
}
.txt {
margin-top: 32rpx;
width: 100%;
text-align: center;
font-weight: 500;
font-size: 32rpx;
color: #3D3D3D;
}
}
.bots {
position: absolute;
width: 610rpx;
// border-top: 2rpx solid #D8D8D8;
display: flex;
flex-wrap: nowrap;
// height: 100%;
bottom: -20rpx;
.bot_left {
border-radius: 0rpx 0rpx 0rpx 30rpx;
width: 50%;
height: 86rpx;
display: flex;
align-items: center;
justify-content: center;
font-weight: 500;
font-size: 32rpx;
color: #3D3D3D;
background: #EEEEEE;
}
.bot_right {
border-radius: 0rpx 0rpx 30rpx 0rpx;
width: 50%;
height: 86rpx;
background: #4C97E7;
display: flex;
align-items: center;
justify-content: center;
color: #FFFFFF;
// border-left: 2rpx solid #D8D8D8;
font-weight: 500;
font-size: 32rpx;
// color: #4C97E7;
}
}
}
.imgs {
margin-top: 50rpx;
width: 100%;
display: flex;
justify-content: center;
position: relative;
.an{
width: 200rpx;
height: 60rpx;
color: #fff;
background-color: #52c41a;
border-radius: 10rpx;
position: absolute;
bottom: 0;
right: 30rpx;
text-align: center;
line-height: 60rpx;
}
image {
width: 300rpx;
height: 300rpx;
}
}
.btn {
margin: auto;
margin-top: 30rpx;
// position: fixed;
display: flex;
align-items: center;
justify-content: center;
// bottom: 100rpx;
// left: 46rpx;
width: 658rpx;
height: 88rpx;
background: #52c41a;
border-radius: 20rpx 20rpx 20rpx 20rpx;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
}
.tips {
margin: 28rpx auto 0;
width: 658rpx;
}
.iptbox {
display: flex;
align-items: center;
flex-wrap: nowrap;
padding: 22rpx;
margin: 15rpx auto 0;
width: 658rpx;
height: 88rpx;
background: #FFFFFF;
box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.15);
border-radius: 20rpx 20rpx 20rpx 20rpx;
.qrcode {
padding-right: 20rpx;
border-right: 2rpx solid #D8D8D8;
image {
width: 54rpx;
height: 54rpx;
}
}
.ips {
flex: 1;
min-width: 0;
}
image {
width: 18rpx;
height: 32rpx;
}
.my-placeholder {
font-weight: 400;
font-size: 32rpx;
color: #808080;
}
.mini-btn {
min-width: 140rpx;
padding: 0 20rpx;
height: 60rpx;
line-height: 60rpx;
text-align: center;
background: #52c41a;
color: #fff;
font-size: 26rpx;
border-radius: 30rpx;
margin-left: 10rpx;
flex-shrink: 0;
}
}
.bot_btn {
position: fixed;
bottom: 30rpx;
left: 0;
width: 100%;
display: flex;
flex-wrap: wrap;
padding: 20rpx 46rpx;
box-sizing: border-box;
justify-content: space-between;
background: transparent;
box-shadow: none;
pointer-events: none; /* Let clicks pass through empty space */
.btn1 {
pointer-events: auto;
margin-top: 20rpx;
margin-right: 0;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 80rpx;
background: #fff;
border-radius: 40rpx;
border: 2rpx solid #52c41a;
font-weight: 500;
font-size: 28rpx;
color: #52c41a;
box-shadow: 0 4rpx 10rpx rgba(0,0,0,0.1);
}
}
}
</style>