Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
84 lines
2.2 KiB
TypeScript
84 lines
2.2 KiB
TypeScript
/** 展示用设备项 */
|
|
interface DeviceItem {
|
|
name: string
|
|
connected: boolean
|
|
}
|
|
|
|
/** 页面状态 */
|
|
type DeviceStatus = 'idle' | 'searching' | 'found' | 'empty'
|
|
|
|
/** 假设备数据 */
|
|
const MOCK_DEVICES: DeviceItem[] = [
|
|
{ name: '乐福体脂秤 Pro', connected: false },
|
|
{ name: '乐福体脂秤 Air', connected: false },
|
|
{ name: '乐福体脂秤 Mini', connected: false },
|
|
]
|
|
|
|
/** 扫描定时器 */
|
|
let _searchTimer: number | null = null
|
|
|
|
Page({
|
|
data: {
|
|
status: 'idle' as DeviceStatus,
|
|
deviceList: [] as DeviceItem[],
|
|
},
|
|
|
|
onHide() {
|
|
this._clearSearchTimer()
|
|
},
|
|
|
|
onUnload() {
|
|
this._clearSearchTimer()
|
|
},
|
|
|
|
_clearSearchTimer() {
|
|
if (_searchTimer !== null) {
|
|
clearTimeout(_searchTimer)
|
|
_searchTimer = null
|
|
}
|
|
},
|
|
|
|
/** 点击「开始搜索 / 重新搜索」:模拟扫描 */
|
|
onStartSearch() {
|
|
this._clearSearchTimer()
|
|
this.setData({ status: 'searching', deviceList: [] })
|
|
_searchTimer = setTimeout(() => {
|
|
this.setData({
|
|
status: 'found',
|
|
deviceList: MOCK_DEVICES.map(item => ({ ...item })),
|
|
})
|
|
}, 1500)
|
|
},
|
|
|
|
/** 点击整张卡片:已连接 → 跳转配网页;未连接 → 走连接流程 */
|
|
onTapCard(e: WechatMiniprogram.TouchEvent) {
|
|
const connected = e.currentTarget.dataset.connected as boolean
|
|
if (connected) {
|
|
wx.navigateTo({ url: '/pages/connectedWifi/connectedWifi' })
|
|
return
|
|
}
|
|
this.onConnect(e)
|
|
},
|
|
|
|
/** 模拟连接指定设备 */
|
|
onConnect(e: WechatMiniprogram.TouchEvent) {
|
|
const index = e.currentTarget.dataset.index as number
|
|
const list = this.data.deviceList.map((item, i) => ({
|
|
...item,
|
|
connected: i === index,
|
|
}))
|
|
this.setData({ deviceList: list })
|
|
},
|
|
|
|
/** 断开当前连接 */
|
|
onDisconnect() {
|
|
const list = this.data.deviceList.map(item => ({ ...item, connected: false }))
|
|
this.setData({ deviceList: list })
|
|
},
|
|
|
|
/** 查看帮助 */
|
|
onOpenHelp() {
|
|
wx.showToast({ title: '请确保设备已开机且在附近', icon: 'none' })
|
|
},
|
|
})
|