diff --git a/miniprogram/miniprogram/app.json b/miniprogram/miniprogram/app.json index 61dcaf0..22ce32c 100644 --- a/miniprogram/miniprogram/app.json +++ b/miniprogram/miniprogram/app.json @@ -5,7 +5,8 @@ "pages/lockDetail/lockDetail", "pages/card/card", "pages/fingerprint/fingerprint", - "pages/password/password" + "pages/password/password", + "pages/configNetwork/configNetwork" ], "window": { "backgroundTextStyle": "light", diff --git a/miniprogram/miniprogram/pages/configNetwork/configNetwork.js b/miniprogram/miniprogram/pages/configNetwork/configNetwork.js new file mode 100644 index 0000000..9b27041 --- /dev/null +++ b/miniprogram/miniprogram/pages/configNetwork/configNetwork.js @@ -0,0 +1,131 @@ +const { + Result, + startSearchWiFi, + selectLock, + starEventOn, + connectWiFi, + starEventOff, +} = requirePlugin('starCloud') + +Page({ + data: { + lock: null, // 当前选中的锁 + accountInfo: {}, + loading: false, + wifiList: [], + showConnectDialog: false, + connectSsid: '', + connectPassword: '', + }, + onLoad() { + starEventOn('searchWiFiResult', async (data) => { + if (data.code === 0) { + console.log("收到wifi搜索列表的事件回调", data) + this.setData({wifiList: data.wifiList || [], loading: false}); + } + this.setData({loading: false}); + wx.hideLoading(); + }); + + + const app = getApp(); + + // 尝试获取全局数据 + const lock = app.globalData.lock; + const accountInfo = app.globalData.accountInfo; + + console.log('lockDetail onLoad:', {lock, accountInfo}); + + if (!lock || !accountInfo) { + wx.showToast({ + title: '获取设备信息失败', + icon: 'none' + }); + setTimeout(() => { + wx.navigateBack(); + }, 1500); + return; + } + + // 设置数据到页面 + this.setData({ + lock, + accountInfo + }); + this.searchWifi(); + }, + async searchWifi() { + console.log('启动搜索WiFi...'); + this.setData({loading: true}); + wx.showLoading({title: '正在搜索WiFi...', mask: true}); + try { + await selectLock({ + accountInfo: this.data.accountInfo, + lockId: this.data.lock.lockId + }); + const result = await startSearchWiFi({ + disconnect: false + }); + console.log('searchWifi result', result); + if (result.code === 0) { + // 已经开始搜索,loading状态保持,等待事件回调结束loading + } else { + this.setData({loading: false}); + wx.hideLoading(); + wx.showModal({ + title: '搜索失败', + content: result.message || '启动WiFi搜索失败', + showCancel: false + }); + } + } catch (error) { + this.setData({loading: false}); + wx.hideLoading(); + wx.showModal({ + title: '异常', + content: error.message || 'WiFi搜索异常', + showCancel: false + }); + } + }, + onWifiItemTap(e) { + const ssid = e.currentTarget.dataset.ssid; + this.setData({ + showConnectDialog: true, + connectSsid: ssid, + connectPassword: '' + }); + }, + onInputSsid(e) { + this.setData({connectSsid: e.detail.value}); + }, + onInputPassword(e) { + this.setData({connectPassword: e.detail.value}); + }, + onDialogCancel() { + this.setData({showConnectDialog: false}); + }, + async onDialogConfirm() { + const ssid = this.data.connectSsid; + const password = this.data.connectPassword; + this.setData({loading: true}); + wx.showLoading({title: '正在连接WiFi...', mask: true}); + await selectLock({ + accountInfo: this.data.accountInfo, + lockId: this.data.lock.lockId + }); + // 这里可以进行连接WiFi的逻辑 + const result = await connectWiFi({ + ssid: ssid, + password: password, + }); + console.log('connectWiFi result', result); + this.setData({loading: false, showConnectDialog: false}); + wx.hideLoading(); + }, + onUnload() { + if (typeof starEventOff === 'function') { + starEventOff('searchWiFiResult'); + } + }, +}); \ No newline at end of file diff --git a/miniprogram/miniprogram/pages/configNetwork/configNetwork.json b/miniprogram/miniprogram/pages/configNetwork/configNetwork.json new file mode 100644 index 0000000..c68411c --- /dev/null +++ b/miniprogram/miniprogram/pages/configNetwork/configNetwork.json @@ -0,0 +1,3 @@ +{ + "navigationBarTitleText": "配置网络" +} \ No newline at end of file diff --git a/miniprogram/miniprogram/pages/configNetwork/configNetwork.wxml b/miniprogram/miniprogram/pages/configNetwork/configNetwork.wxml new file mode 100644 index 0000000..92860ea --- /dev/null +++ b/miniprogram/miniprogram/pages/configNetwork/configNetwork.wxml @@ -0,0 +1,29 @@ + + 配置网络 + + + • 确保搜索WiFi时锁板处于亮屏状态 + \n + • 确保连接的WiFi是2.4GHz的WiFi + + + + + {{item.ssid}} + 信号: {{item.rssi}} + + + + + 连接WiFi + + + + + + + + + + + \ No newline at end of file diff --git a/miniprogram/miniprogram/pages/configNetwork/configNetwork.wxss b/miniprogram/miniprogram/pages/configNetwork/configNetwork.wxss new file mode 100644 index 0000000..c671869 --- /dev/null +++ b/miniprogram/miniprogram/pages/configNetwork/configNetwork.wxss @@ -0,0 +1,111 @@ +.container { + padding: 32rpx; + min-height: 100vh; + background: #f7f7f7; +} +.header { + font-size: 36rpx; + font-weight: bold; + margin-bottom: 32rpx; + color: #007AFF; +} +.content { + font-size: 28rpx; + color: #333; +} +.wifi-list { + margin-top: 32rpx; + background: #fff; + border-radius: 16rpx; + padding: 24rpx; +} +.wifi-item { + display: flex; + justify-content: space-between; + align-items: center; + padding: 16rpx 0; + border-bottom: 1rpx solid #f0f0f0; +} +.wifi-item:last-child { + border-bottom: none; +} +.ssid { + font-size: 28rpx; + color: #333; +} +.rssi { + font-size: 24rpx; + color: #999; +} +.loading-bar { + margin: 24rpx 0; + padding: 20rpx; + background: #fffbe6; + color: #faad14; + border-radius: 8rpx; + text-align: center; + font-size: 28rpx; +} +.dialog-mask { + position: fixed; + top: 0; left: 0; right: 0; bottom: 0; + background: rgba(0,0,0,0.4); + z-index: 1000; + display: flex; + align-items: center; + justify-content: center; +} +.dialog-box { + background: #fff; + border-radius: 16rpx; + width: 80vw; + max-width: 600rpx; + padding: 40rpx 32rpx 24rpx 32rpx; + box-shadow: 0 8rpx 32rpx rgba(0,0,0,0.15); +} +.dialog-title { + font-size: 32rpx; + font-weight: bold; + color: #333; + margin-bottom: 32rpx; + text-align: center; +} +.dialog-content { + margin-bottom: 32rpx; +} +.dialog-input { + width: 100%; + height: 80rpx; + border: 2rpx solid #eee; + border-radius: 8rpx; + font-size: 28rpx; + margin-bottom: 24rpx; + padding: 0 20rpx; + box-sizing: border-box; +} +.dialog-actions { + display: flex; + justify-content: space-between; + gap: 24rpx; +} +.dialog-btn { + flex: 1; + height: 72rpx; + border-radius: 36rpx; + font-size: 28rpx; +} +.dialog-btn.cancel { + background: #f5f5f5; + color: #666; +} +.dialog-btn.confirm { + background: linear-gradient(135deg, #007AFF, #40a9ff); + color: #fff; +} +.tip-text { + color: #faad14; + font-size: 26rpx; + line-height: 1.8; + margin-bottom: 12rpx; + white-space: pre-line; +} \ No newline at end of file diff --git a/miniprogram/miniprogram/pages/lockDetail/lockDetail.js b/miniprogram/miniprogram/pages/lockDetail/lockDetail.js index e3cc4fd..10f62a9 100644 --- a/miniprogram/miniprogram/pages/lockDetail/lockDetail.js +++ b/miniprogram/miniprogram/pages/lockDetail/lockDetail.js @@ -401,5 +401,12 @@ Page({ }); } }); - } + }, + + // 配置网络 + configNetwork() { + wx.navigateTo({ + url: '/pages/configNetwork/configNetwork' + }); + }, }); diff --git a/miniprogram/miniprogram/pages/lockDetail/lockDetail.wxml b/miniprogram/miniprogram/pages/lockDetail/lockDetail.wxml index 13cc52d..d694d81 100644 --- a/miniprogram/miniprogram/pages/lockDetail/lockDetail.wxml +++ b/miniprogram/miniprogram/pages/lockDetail/lockDetail.wxml @@ -67,6 +67,11 @@ 功能设置 查看所有配置 + diff --git a/miniprogram/miniprogram/pages/lockDetail/lockDetail.wxss b/miniprogram/miniprogram/pages/lockDetail/lockDetail.wxss index a4bbcd5..3afd8fe 100644 --- a/miniprogram/miniprogram/pages/lockDetail/lockDetail.wxss +++ b/miniprogram/miniprogram/pages/lockDetail/lockDetail.wxss @@ -278,3 +278,7 @@ transform: scale(0.98); opacity: 0.9; } + +.network-icon { + background-image: url("data:image/svg+xml,%3Csvg t='1710000000000' class='icon' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M512 832a64 64 0 1 0 0-128 64 64 0 0 0 0 128zm0-704C300.3 128 128 300.3 128 512h64c0-176.7 143.3-320 320-320s320 143.3 320 320h64c0-211.7-172.3-384-384-384zm0 192c-123.7 0-224 100.3-224 224h64c0-88.2 71.8-160 160-160s160 71.8 160 160h64c0-123.7-100.3-224-224-224z' fill='%23007AFF'/%3E%3C/svg%3E"); +} diff --git a/package-lock.json b/package-lock.json index 072ada2..0ede099 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "@dcloudio/uni-mp-xhs": "3.0.0-4030620241128001", "@dcloudio/uni-quickapp-webview": "3.0.0-4030620241128001", "pinia": "^2.2.8", - "star-cloud-uni": "^1.0.14", + "star-cloud-uni": "^1.0.16", "vue": "^3.5.13", "vue-i18n": "^9.1.9" }, @@ -10046,9 +10046,9 @@ } }, "node_modules/star-cloud-uni": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/star-cloud-uni/-/star-cloud-uni-1.0.14.tgz", - "integrity": "sha512-8KnuxvqiyvDcodaue0t0ofYuMNYqXv2HLw5P1HglEWZqiQyMCMwB8dcx9UxV4X1mdRlgj0/JbxdT5vE/eRT4Og==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/star-cloud-uni/-/star-cloud-uni-1.0.16.tgz", + "integrity": "sha512-Q9KF7C41WD5KH3EePgkFTIxaLnbc/uL4N0iu6qzmZ+6N8bJIHQaJAcnJPho+TQVsnyv9fkTOR4bF0oOqqg/dGg==", "dependencies": { "buffer": "^6.0.3", "crc": "^4.3.2", diff --git a/package.json b/package.json index 5e7b109..72fc901 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "@dcloudio/uni-mp-xhs": "3.0.0-4030620241128001", "@dcloudio/uni-quickapp-webview": "3.0.0-4030620241128001", "pinia": "^2.2.8", - "star-cloud-uni": "^1.0.14", + "star-cloud-uni": "^1.0.16", "vue": "^3.5.13", "vue-i18n": "^9.1.9" }, diff --git a/src/index.js b/src/index.js index a6f3bb3..19c669f 100644 --- a/src/index.js +++ b/src/index.js @@ -24,7 +24,10 @@ import { remoteUnLock, readSupportFunctionsSetting, getLockList, + startSearchWiFi, + connectWiFi } from 'star-cloud-uni' + // 用于存储事件监听器的Map const eventListeners = new Map(); module.exports = { @@ -260,7 +263,7 @@ module.exports = { // 存储监听器 eventListeners.set(eventName, listener); - + // 注册事件监听 uni.$on(eventName, listener); }, @@ -317,7 +320,7 @@ module.exports = { * @param params * @returns {Promise<*>} */ - async remoteUnLock(params){ + async remoteUnLock(params) { return await remoteUnLock(params) }, @@ -326,7 +329,22 @@ module.exports = { * @param params * @returns {Promise<*>} */ - async getLockList(params){ + async getLockList(params) { return await getLockList(params); + }, + + + /** + * 启动搜索wifi + * @param params + * @returns {Promise<*>} + */ + async startSearchWiFi(params) { + return await startSearchWiFi(params); + }, + + + async connectWiFi(params){ + return await connectWiFi(params); } }