2025-05-29 15:48:38 +08:00
|
|
|
|
<script setup>
|
2025-10-29 15:17:22 +08:00
|
|
|
|
import { ref } from "vue";
|
|
|
|
|
|
import { onShow } from "@dcloudio/uni-app";
|
2025-05-29 15:48:38 +08:00
|
|
|
|
import Container from "@/components/Container.vue";
|
2025-06-19 21:03:33 +08:00
|
|
|
|
import ScreenHint from "@/components/ScreenHint.vue";
|
2025-05-29 15:48:38 +08:00
|
|
|
|
import SButton from "@/components/SButton.vue";
|
2025-10-31 10:22:02 +08:00
|
|
|
|
import {
|
|
|
|
|
|
bindDeviceAPI,
|
|
|
|
|
|
getMyDevicesAPI,
|
|
|
|
|
|
unbindDeviceAPI,
|
|
|
|
|
|
laserAimAPI,
|
|
|
|
|
|
} from "@/apis";
|
2025-05-29 15:48:38 +08:00
|
|
|
|
import useStore from "@/store";
|
|
|
|
|
|
import { storeToRefs } from "pinia";
|
|
|
|
|
|
const showTip = ref(false);
|
|
|
|
|
|
const confirmBindTip = ref(false);
|
2025-05-31 14:17:56 +08:00
|
|
|
|
const addDevice = ref();
|
2025-05-29 15:48:38 +08:00
|
|
|
|
const store = useStore();
|
2025-06-16 00:30:56 +08:00
|
|
|
|
const { updateDevice } = store;
|
|
|
|
|
|
const { user, device } = storeToRefs(store);
|
2025-05-31 14:17:56 +08:00
|
|
|
|
const justBind = ref(false);
|
2025-10-29 15:17:22 +08:00
|
|
|
|
const calibration = ref(false);
|
2025-05-29 15:48:38 +08:00
|
|
|
|
|
|
|
|
|
|
// 扫描二维码方法
|
|
|
|
|
|
const handleScan = () => {
|
|
|
|
|
|
// 调用扫码API
|
|
|
|
|
|
uni.scanCode({
|
|
|
|
|
|
// 只支持扫码二维码
|
|
|
|
|
|
onlyFromCamera: true,
|
|
|
|
|
|
scanType: ["qrCode"],
|
|
|
|
|
|
success: async (res) => {
|
2025-08-06 11:37:24 +08:00
|
|
|
|
try {
|
|
|
|
|
|
const base64Decode = (str) => {
|
|
|
|
|
|
// 将 base64 转换为 utf8 字符串
|
|
|
|
|
|
const bytes = wx.base64ToArrayBuffer(str);
|
|
|
|
|
|
return String.fromCharCode.apply(null, new Uint8Array(bytes));
|
|
|
|
|
|
};
|
2025-06-16 00:30:56 +08:00
|
|
|
|
|
2025-08-06 11:37:24 +08:00
|
|
|
|
addDevice.value = JSON.parse(base64Decode(res.result));
|
|
|
|
|
|
confirmBindTip.value = true;
|
|
|
|
|
|
} catch (err) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: "无效二维码",
|
|
|
|
|
|
icon: "none",
|
|
|
|
|
|
duration: 2000,
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
2025-05-29 15:48:38 +08:00
|
|
|
|
},
|
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
|
console.error("扫码失败:", err);
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: "扫码失败",
|
|
|
|
|
|
icon: "error",
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const confirmBind = async () => {
|
2025-06-22 15:04:10 +08:00
|
|
|
|
if (!justBind.value && addDevice.value.id) {
|
2025-07-26 19:35:31 +08:00
|
|
|
|
const result = await bindDeviceAPI(addDevice.value);
|
2025-06-16 00:30:56 +08:00
|
|
|
|
confirmBindTip.value = false;
|
2025-07-26 19:35:31 +08:00
|
|
|
|
if (result.binded) {
|
|
|
|
|
|
return uni.showToast({
|
|
|
|
|
|
title: "设备已绑定其他账号,请解绑后再绑定",
|
|
|
|
|
|
icon: "none",
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
updateDevice(addDevice.value.id, addDevice.value.name);
|
2025-05-31 14:17:56 +08:00
|
|
|
|
justBind.value = true;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: "绑定成功",
|
|
|
|
|
|
icon: "success",
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const toFristTryPage = () => {
|
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url: "/pages/first-try",
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
2025-05-31 14:17:56 +08:00
|
|
|
|
|
|
|
|
|
|
const unbindDevice = async () => {
|
|
|
|
|
|
await unbindDeviceAPI(device.value.deviceId);
|
2025-10-29 18:07:42 +08:00
|
|
|
|
uni.setStorageSync("calibration", false);
|
2025-05-31 14:17:56 +08:00
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: "解绑成功",
|
|
|
|
|
|
icon: "success",
|
|
|
|
|
|
});
|
|
|
|
|
|
device.value = {};
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const toDeviceIntroPage = () => {
|
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url: "/pages/device-intro",
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
2025-06-16 00:30:56 +08:00
|
|
|
|
|
|
|
|
|
|
const backToHome = () => {
|
|
|
|
|
|
uni.navigateBack();
|
|
|
|
|
|
};
|
2025-09-28 14:48:19 +08:00
|
|
|
|
|
|
|
|
|
|
const copyEmail = () => {
|
|
|
|
|
|
uni.setClipboardData({
|
|
|
|
|
|
data: "shelingxingqiu@163.com",
|
|
|
|
|
|
success: () => {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: "邮箱已复制",
|
|
|
|
|
|
icon: "success",
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
2025-10-29 15:17:22 +08:00
|
|
|
|
|
2025-10-31 10:22:02 +08:00
|
|
|
|
const goCalibration = async () => {
|
|
|
|
|
|
await laserAimAPI();
|
2025-10-29 15:17:22 +08:00
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url: "/pages/calibration",
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
onShow(() => {
|
|
|
|
|
|
calibration.value = uni.getStorageSync("calibration");
|
|
|
|
|
|
});
|
2025-05-29 15:48:38 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
|
<Container title="弓箭绑定">
|
2025-06-16 00:30:56 +08:00
|
|
|
|
<view v-if="!device.deviceId" class="scan-code">
|
2025-09-28 09:09:38 +08:00
|
|
|
|
<button hover-class="none" @click="handleScan">
|
2025-05-29 15:48:38 +08:00
|
|
|
|
<image src="../static/scan.png" mode="widthFix" />
|
2025-09-28 09:09:38 +08:00
|
|
|
|
</button>
|
|
|
|
|
|
<button hover-class="none" @click="showTip = true">
|
|
|
|
|
|
<text>扫</text>
|
|
|
|
|
|
<text :style="{ color: '#fed847' }">射灵弓箭</text>
|
|
|
|
|
|
<text>上的二维码</text>
|
|
|
|
|
|
<image src="../static/s-question-mark-white.png" mode="widthFix" />
|
|
|
|
|
|
</button>
|
|
|
|
|
|
<text>射灵智能弓箭,三模传感系统与独创靶环算法,</text>
|
|
|
|
|
|
<text>毫秒级在线实时对战,让你拥有全球约战的乐趣!</text>
|
|
|
|
|
|
<button hover-class="none" @click="toDeviceIntroPage">
|
|
|
|
|
|
<image src="../static/have-no-device.png" mode="widthFix" />
|
|
|
|
|
|
</button>
|
2025-06-19 21:03:33 +08:00
|
|
|
|
<ScreenHint
|
2025-05-29 15:48:38 +08:00
|
|
|
|
mode="square"
|
|
|
|
|
|
:show="showTip"
|
|
|
|
|
|
:onClose="() => (showTip = false)"
|
|
|
|
|
|
>
|
|
|
|
|
|
<view class="scan-tips">
|
2025-09-28 09:09:38 +08:00
|
|
|
|
<text>扫码绑定设灵弓箭</text>
|
2025-08-05 15:17:19 +08:00
|
|
|
|
<image
|
|
|
|
|
|
src="https://static.shelingxingqiu.com/attachment/2025-08-05/dbuacrelri7jr3axiy.png"
|
|
|
|
|
|
mode="widthFix"
|
|
|
|
|
|
/>
|
2025-09-28 09:09:38 +08:00
|
|
|
|
<text>【注】已被绑定的弓箭无法再次绑定。</text>
|
2025-09-28 14:48:19 +08:00
|
|
|
|
<view>
|
|
|
|
|
|
<text>如有任何疑问,请随时联系:</text>
|
2025-10-29 15:17:22 +08:00
|
|
|
|
<button hover-class="none" @click="copyEmail">
|
|
|
|
|
|
shelingxingqiu@163.com
|
|
|
|
|
|
</button>
|
2025-09-28 14:48:19 +08:00
|
|
|
|
</view>
|
2025-05-29 15:48:38 +08:00
|
|
|
|
</view>
|
2025-06-19 21:03:33 +08:00
|
|
|
|
</ScreenHint>
|
|
|
|
|
|
<ScreenHint
|
2025-05-29 15:48:38 +08:00
|
|
|
|
:show="confirmBindTip"
|
|
|
|
|
|
:onClose="() => (confirmBindTip = false)"
|
|
|
|
|
|
>
|
|
|
|
|
|
<view class="confirm-bind">
|
|
|
|
|
|
<text
|
|
|
|
|
|
>智能弓箭和系统账号需一一对应,你确定要将<text
|
|
|
|
|
|
:style="{ color: '#fed847' }"
|
|
|
|
|
|
>当前登录用户账号</text
|
|
|
|
|
|
>绑定<text :style="{ color: '#fed847' }">这把弓箭</text>吗?
|
|
|
|
|
|
绑定后不可随意更换。</text
|
|
|
|
|
|
>
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<view @click="confirmBind">确认绑定</view>
|
|
|
|
|
|
<view @click="() => (confirmBindTip = false)">取消</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-06-19 21:03:33 +08:00
|
|
|
|
</ScreenHint>
|
2025-05-29 15:48:38 +08:00
|
|
|
|
</view>
|
2025-05-31 14:17:56 +08:00
|
|
|
|
<view v-if="justBind" class="just-bind">
|
2025-10-29 15:17:22 +08:00
|
|
|
|
<view
|
|
|
|
|
|
class="device-binded"
|
|
|
|
|
|
:style="{ marginBottom: calibration ? '250rpx' : '100rpx' }"
|
|
|
|
|
|
>
|
2025-10-30 10:11:15 +08:00
|
|
|
|
<view>
|
2025-05-29 15:48:38 +08:00
|
|
|
|
<image src="../static/device-icon.png" mode="widthFix" />
|
|
|
|
|
|
<text>{{ device.deviceName }}</text>
|
2025-10-29 15:17:22 +08:00
|
|
|
|
<view class="calibration" v-if="calibration">
|
|
|
|
|
|
<button hover-class="none" @click="goCalibration">
|
|
|
|
|
|
<text>重新校准</text>
|
|
|
|
|
|
<image src="../static/enter-arrow-blue.png" mode="widthFix" />
|
|
|
|
|
|
</button>
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<image src="../static/calibration-tip.png" mode="widthFix" />
|
|
|
|
|
|
<text>如有场地/距离变化,需重新校准以保证智能弓射箭精准度</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-05-29 15:48:38 +08:00
|
|
|
|
</view>
|
2025-05-31 14:17:56 +08:00
|
|
|
|
<image src="../static/bind-success.png" mode="widthFix" />
|
2025-05-29 15:48:38 +08:00
|
|
|
|
<view>
|
2025-05-31 14:17:56 +08:00
|
|
|
|
<image
|
2025-07-11 22:21:34 +08:00
|
|
|
|
:src="user.avatar || '../static/user-icon.png'"
|
2025-05-31 14:17:56 +08:00
|
|
|
|
mode="widthFix"
|
|
|
|
|
|
:style="{ borderRadius: '50%' }"
|
|
|
|
|
|
/>
|
2025-05-29 15:48:38 +08:00
|
|
|
|
<text>{{ user.nickName }}</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-10-29 15:17:22 +08:00
|
|
|
|
<block v-if="calibration">
|
|
|
|
|
|
<SButton :onClick="toFristTryPage" width="60vw" :rounded="40"
|
|
|
|
|
|
>进入新手试炼</SButton
|
2025-06-16 00:30:56 +08:00
|
|
|
|
>
|
2025-10-29 15:17:22 +08:00
|
|
|
|
<view :style="{ marginTop: '15px' }">
|
|
|
|
|
|
<SButton
|
|
|
|
|
|
:onClick="backToHome"
|
|
|
|
|
|
backgroundColor="#fff3"
|
|
|
|
|
|
color="#fff"
|
|
|
|
|
|
width="60vw"
|
|
|
|
|
|
:rounded="40"
|
|
|
|
|
|
>返回首页</SButton
|
|
|
|
|
|
>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</block>
|
|
|
|
|
|
<block v-else>
|
2025-10-29 18:07:42 +08:00
|
|
|
|
<view>
|
|
|
|
|
|
<text>恭喜,你的弓箭和账号已成功绑定!</text>
|
|
|
|
|
|
<text :style="{ color: '#fed847' }">已赠送6个月射灵世界会员</text>
|
|
|
|
|
|
</view>
|
2025-10-29 15:17:22 +08:00
|
|
|
|
<SButton :onClick="goCalibration" width="60vw" :rounded="40">
|
2025-10-31 10:22:02 +08:00
|
|
|
|
开启智能弓进行校准
|
2025-10-29 15:17:22 +08:00
|
|
|
|
</SButton>
|
2025-10-29 17:18:25 +08:00
|
|
|
|
<text :style="{ marginTop: '20rpx', fontSize: '20rpx', color: '#fff9' }"
|
|
|
|
|
|
>校准时弓箭激光将开启,请勿直视激光</text
|
|
|
|
|
|
>
|
2025-10-29 15:17:22 +08:00
|
|
|
|
</block>
|
2025-05-29 15:48:38 +08:00
|
|
|
|
</view>
|
2025-06-16 00:30:56 +08:00
|
|
|
|
<view v-if="device.deviceId && !justBind" class="has-device">
|
2025-05-31 14:17:56 +08:00
|
|
|
|
<view class="device-binded">
|
2025-10-30 10:11:15 +08:00
|
|
|
|
<view>
|
2025-05-31 14:17:56 +08:00
|
|
|
|
<image src="../static/device-icon.png" mode="widthFix" />
|
|
|
|
|
|
<text>{{ device.deviceName }}</text>
|
2025-10-29 18:07:42 +08:00
|
|
|
|
<view class="calibration">
|
2025-10-29 17:18:25 +08:00
|
|
|
|
<button hover-class="none" @click="goCalibration">
|
|
|
|
|
|
<text>去校准</text>
|
|
|
|
|
|
<image src="../static/enter-arrow-blue.png" mode="widthFix" />
|
|
|
|
|
|
</button>
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<image src="../static/calibration-tip.png" mode="widthFix" />
|
|
|
|
|
|
<text
|
|
|
|
|
|
>首次绑定智能弓或场地/距离变化时,应进行校准以确保射箭精度</text
|
|
|
|
|
|
>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-05-31 14:17:56 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<image src="../static/bind.png" mode="widthFix" />
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<image
|
2025-07-11 22:21:34 +08:00
|
|
|
|
:src="user.avatar || '../static/user-icon.png'"
|
2025-05-31 14:17:56 +08:00
|
|
|
|
mode="widthFix"
|
|
|
|
|
|
:style="{ borderRadius: '50%' }"
|
|
|
|
|
|
/>
|
|
|
|
|
|
<text>{{ user.nickName }}</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-10-29 17:18:25 +08:00
|
|
|
|
<view :style="{ marginTop: '240rpx' }">
|
2025-10-29 15:17:22 +08:00
|
|
|
|
<SButton :onClick="unbindDevice" width="80vw" :rounded="40"
|
|
|
|
|
|
>解绑</SButton
|
|
|
|
|
|
>
|
|
|
|
|
|
</view>
|
2025-05-31 14:17:56 +08:00
|
|
|
|
</view>
|
2025-05-29 15:48:38 +08:00
|
|
|
|
</Container>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
2025-05-31 14:17:56 +08:00
|
|
|
|
.scan-code,
|
|
|
|
|
|
.just-bind,
|
|
|
|
|
|
.has-device {
|
2025-05-29 15:48:38 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-around;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
}
|
2025-09-28 09:09:38 +08:00
|
|
|
|
.scan-code {
|
|
|
|
|
|
justify-content: flex-start;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
2025-09-28 09:09:38 +08:00
|
|
|
|
.scan-code > button:first-child {
|
|
|
|
|
|
margin-top: 22%;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
2025-09-28 09:09:38 +08:00
|
|
|
|
.scan-code > button:first-child > image {
|
|
|
|
|
|
width: 300rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.scan-code > button:nth-child(2) {
|
2025-05-29 15:48:38 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
2025-09-28 09:09:38 +08:00
|
|
|
|
justify-content: center;
|
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
|
color: #ffffff;
|
|
|
|
|
|
margin: 50rpx;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
2025-09-28 09:09:38 +08:00
|
|
|
|
.scan-code > button:nth-child(2) > image {
|
|
|
|
|
|
width: 28rpx;
|
|
|
|
|
|
margin-left: 10rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.scan-code > text {
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #fff9;
|
|
|
|
|
|
}
|
|
|
|
|
|
.scan-code > button:nth-child(5) {
|
|
|
|
|
|
margin-top: 25%;
|
|
|
|
|
|
}
|
|
|
|
|
|
.scan-code > button:nth-child(5) > image {
|
|
|
|
|
|
width: 380rpx;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
.scan-tips {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
font-size: 14px;
|
2025-09-28 09:09:38 +08:00
|
|
|
|
width: 90%;
|
|
|
|
|
|
margin-top: 20%;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
.scan-tips > text {
|
|
|
|
|
|
margin-bottom: 2px;
|
2025-09-28 09:09:38 +08:00
|
|
|
|
color: #fff;
|
|
|
|
|
|
font-size: 24rpx;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
.scan-tips > text:first-child {
|
|
|
|
|
|
color: #fed847;
|
|
|
|
|
|
margin-bottom: 10px;
|
2025-09-28 09:09:38 +08:00
|
|
|
|
font-size: 32rpx;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
2025-09-28 14:48:19 +08:00
|
|
|
|
.scan-tips > view {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: flex-start;
|
|
|
|
|
|
}
|
2025-05-29 15:48:38 +08:00
|
|
|
|
.scan-tips > view:last-child {
|
|
|
|
|
|
margin-top: 5px;
|
2025-09-28 14:48:19 +08:00
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.scan-tips > view:last-child > button {
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #39a8ff;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
.scan-tips > image {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
|
}
|
|
|
|
|
|
.confirm-bind {
|
2025-06-16 00:30:56 +08:00
|
|
|
|
color: #fff9;
|
|
|
|
|
|
font-size: 14px;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
.confirm-bind > view:last-child {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-between;
|
2025-07-26 19:35:31 +08:00
|
|
|
|
margin-top: 10px;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
.confirm-bind > view:last-child > view {
|
|
|
|
|
|
width: 48%;
|
|
|
|
|
|
border-radius: 20px;
|
|
|
|
|
|
background-color: #fed847;
|
|
|
|
|
|
color: #000;
|
|
|
|
|
|
line-height: 40px;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
.confirm-bind > view:last-child > view:nth-child(2) {
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
background-color: #fff3;
|
|
|
|
|
|
}
|
2025-05-31 14:17:56 +08:00
|
|
|
|
.device-binded {
|
2025-05-29 15:48:38 +08:00
|
|
|
|
width: 100%;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
font-size: 14px;
|
2025-10-29 15:17:22 +08:00
|
|
|
|
margin-top: 200rpx;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
2025-05-31 14:17:56 +08:00
|
|
|
|
.device-binded > view {
|
2025-05-29 15:48:38 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
2025-10-29 15:17:22 +08:00
|
|
|
|
position: relative;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
2025-05-31 14:17:56 +08:00
|
|
|
|
.device-binded > view > image {
|
2025-10-29 15:17:22 +08:00
|
|
|
|
width: 140rpx;
|
|
|
|
|
|
height: 140rpx;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
margin-bottom: 5px;
|
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
|
}
|
2025-06-16 11:26:57 +08:00
|
|
|
|
.device-binded > view > text {
|
|
|
|
|
|
width: 120px;
|
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
}
|
2025-05-31 14:17:56 +08:00
|
|
|
|
.device-binded > image {
|
2025-10-29 15:17:22 +08:00
|
|
|
|
width: 100rpx;
|
2025-05-31 14:17:56 +08:00
|
|
|
|
margin: 0 20px;
|
|
|
|
|
|
}
|
|
|
|
|
|
.has-device,
|
|
|
|
|
|
.just-bind {
|
|
|
|
|
|
justify-content: flex-start;
|
|
|
|
|
|
}
|
|
|
|
|
|
.has-device > view:nth-child(2),
|
|
|
|
|
|
.just-bind > view:nth-child(2) {
|
2025-05-29 15:48:38 +08:00
|
|
|
|
color: #fff9;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
font-size: 14px;
|
2025-10-29 15:17:22 +08:00
|
|
|
|
margin-bottom: 100rpx;
|
2025-05-29 15:48:38 +08:00
|
|
|
|
}
|
2025-05-31 14:17:56 +08:00
|
|
|
|
.has-device > view:nth-child(2) > text,
|
|
|
|
|
|
.just-bind > view:nth-child(2) > text {
|
2025-05-29 15:48:38 +08:00
|
|
|
|
margin: 5px;
|
|
|
|
|
|
}
|
2025-10-29 15:17:22 +08:00
|
|
|
|
.calibration {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
bottom: -145rpx;
|
|
|
|
|
|
left: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.calibration > button {
|
|
|
|
|
|
font-size: 22rpx;
|
|
|
|
|
|
color: #287fff;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
2025-10-30 10:11:15 +08:00
|
|
|
|
padding-bottom: 15rpx;
|
|
|
|
|
|
padding-left: 50rpx;
|
2025-10-29 15:17:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
.calibration > button > image {
|
|
|
|
|
|
width: 28rpx;
|
|
|
|
|
|
height: 28rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.calibration > view {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
font-size: 20rpx;
|
|
|
|
|
|
color: #fff9;
|
|
|
|
|
|
padding-top: 40rpx;
|
|
|
|
|
|
padding-left: 35rpx;
|
|
|
|
|
|
width: 300rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.calibration > view > image {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
width: 370rpx;
|
|
|
|
|
|
}
|
2025-05-29 15:48:38 +08:00
|
|
|
|
</style>
|