1 line
27 KiB
Plaintext
1 line
27 KiB
Plaintext
{"version":3,"sources":["pages/connect/connect.uvue","pages/index/index.uvue","App.uvue"],"sourcesContent":["<template>\r\n <view class=\"container\">\r\n <!-- 顶部导航 -->\r\n <view class=\"nav-bar\">\r\n <text class=\"nav-title\">表盘管理器</text>\r\n </view>\r\n\r\n <!-- 主内容区 -->\r\n <view class=\"content\">\r\n <!-- 图片预览区 (圆形表盘) -->\r\n <view class=\"preview-container\">\r\n <view class=\"preview-frame\">\r\n <image \r\n :src=\"currentImageUrl\" \r\n class=\"preview-image\" \r\n mode=\"aspectFill\"\r\n v-if=\"currentImageUrl\"\r\n ></image>\r\n <view class=\"empty-preview\" v-else>\r\n <uni-icons type=\"image\" size=\"60\" color=\"#ccc\"></uni-icons>\r\n <text>请选择表盘图片</text>\r\n </view>\r\n </view>\r\n <button \r\n class=\"set-btn\" \r\n @click=\"setAsCurrentFace\" \r\n v-if=\"currentImageUrl\"\r\n >\r\n 设置为当前表盘\r\n </button>\r\n\t\t<button class=\"upload-btn\" @click=\"chooseImage\">\r\n\t\t <uni-icons type=\"camera\" size=\"24\" color=\"#fff\"></uni-icons>\r\n\t\t <text>上传图片</text>\r\n\t\t</button>\r\n </view>\r\n\r\n <!-- 卡片式轮播区 -->\r\n <view class=\"carousel-section\">\r\n <text class=\"section-title\">已上传表盘</text>\r\n <view class=\"carousel-container\">\r\n <!-- 卡片式轮播核心修改 -->\r\n <swiper \r\n class=\"card-swiper\" \r\n circular \r\n previous-margin=\"200rpx\" \r\n next-margin=\"200rpx\"\r\n @change=\"handleCarouselChange\"\r\n >\r\n <swiper-item v-for=\"(img, index) in uploadedImages\" :key=\"index\">\r\n <view class=\"card-item\" @click=\"selectImage(index)\">\r\n <view class=\"card-frame\">\r\n <image \r\n :src=\"img.url\" \r\n class=\"card-image\" \r\n mode=\"aspectFill\"\r\n ></image>\r\n <view class=\"card-overlay\" v-if=\"currentImageIndex === index\">\r\n <uni-icons type=\"checkmark\" size=\"30\" color=\"#007aff\"></uni-icons>\r\n </view>\r\n </view>\r\n </view>\r\n </swiper-item>\r\n </swiper>\r\n <view class=\"carousel-hint\" v-if=\"uploadedImages.length === 0\">\r\n <text>暂无上传图片,请点击上方上传按钮添加</text>\r\n </view>\r\n </view>\r\n </view>\r\n\r\n <!-- BLE数据展示区 -->\r\n <view class=\"data-section\">\r\n <text class=\"section-title\">设备状态</text>\r\n <view class=\"data-grid\">\r\n <!-- 电量信息 -->\r\n <view class=\"data-card\">\r\n <view class=\"data-icon battery-icon\">\r\n <uni-icons type=\"battery\" size=\"36\" :color=\"batteryColor\"></uni-icons>\r\n </view>\r\n <view class=\"data-info\">\r\n <text class=\"data-value\">{{ batteryLevel }}%</text>\r\n <text class=\"data-label\">电量</text>\r\n </view>\r\n </view>\r\n\r\n <!-- 温度信息 -->\r\n <view class=\"data-card\">\r\n <view class=\"data-icon temp-icon\">\r\n <uni-icons type=\"thermometer\" size=\"36\" color=\"#ff7a45\"></uni-icons>\r\n </view>\r\n <view class=\"data-info\">\r\n <text class=\"data-value\">{{ temperature }}°C</text>\r\n <text class=\"data-label\">温度</text>\r\n </view>\r\n </view>\r\n\r\n <!-- 湿度信息 -->\r\n <view class=\"data-card\">\r\n <view class=\"data-icon humidity-icon\">\r\n <uni-icons type=\"water\" size=\"36\" color=\"#40a9ff\"></uni-icons>\r\n </view>\r\n <view class=\"data-info\">\r\n <text class=\"data-value\">{{ humidity }}%</text>\r\n <text class=\"data-label\">湿度</text>\r\n </view>\r\n </view>\r\n\r\n <!-- 表盘状态 -->\r\n <view class=\"data-card\">\r\n <view class=\"data-icon status-icon\">\r\n <uni-icons type=\"watch\" size=\"36\" color=\"#52c41a\"></uni-icons>\r\n </view>\r\n <view class=\"data-info\">\r\n <text class=\"data-value\">{{ faceStatusText }}</text>\r\n <text class=\"data-label\">表盘状态</text>\r\n </view>\r\n </view>\r\n </view>\r\n\r\n <!-- 设备连接状态 -->\r\n <view class=\"connection-status\">\r\n <uni-icons \r\n type=\"bluetooth\" \r\n size=\"24\" \r\n :color=\"isConnected ? '#52c41a' : '#ff4d4f'\"\r\n :animation=\"isScanning ? 'spin' : ''\"\r\n ></uni-icons>\r\n\t\t <view class=\"status-pot\" \r\n\t\t :style=\"{\r\n\t\t\t backgroundColor:isConnected?'Green':'red'\r\n\t\t }\"\r\n\t\t ></view>\r\n <text class=\"status-text\">\r\n {{ isConnected ? '已连接设备' : isScanning ? '正在搜索设备...' : '未连接设备' }}\r\n </text>\r\n <button \r\n class=\"connect-btn\" \r\n @click=\"toggleConnection\"\r\n :disabled=\"isScanning\"\r\n >\r\n {{ isConnected ? '断开连接' : '连接设备' }}\r\n </button>\r\n </view>\r\n </view>\r\n </view>\r\n </view>\r\n</template>\r\n\r\n<script>\r\n// 脚本部分与原代码一致,无需修改\r\nexport default {\r\n data() {\r\n return {\r\n // 图片相关\r\n uploadedImages: [], // 已上传的图片列表\r\n currentImageUrl: '', // 当前选中的图片\r\n currentImageIndex: -1, // 当前选中的图片索引\r\n imageDir: '', // 图片保存目录\r\n \r\n // BLE设备数据\r\n isConnected: true, // 是否连接\r\n isScanning: false, // 是否正在扫描\r\n batteryLevel: 0, // 电量\r\n temperature: 0, // 温度\r\n humidity: 0, // 湿度\r\n faceStatus: 0, // 表盘状态 0-正常 1-更新中 2-异常\r\n \r\n\t // statusPotColor:'Green',\r\n\t \r\n\t deviceId:'',\r\n\t imageServiceuuid:'',\r\n\t imageWriteuuid:'',\r\n // 模拟数据定时器\r\n dataTimer: null\r\n };\r\n },\r\n \r\n computed: {\r\n // 表盘状态文本\r\n faceStatusText() {\r\n switch(this.faceStatus) {\r\n case 0: return '正常';\r\n case 1: return '更新中';\r\n case 2: return '异常';\r\n default: return '未知';\r\n }\r\n },\r\n \r\n // 电池颜色(根据电量变化)\r\n batteryColor() {\r\n if (this.batteryLevel > 70) return '#52c41a';\r\n if (this.batteryLevel > 30) return '#faad14';\r\n return '#ff4d4f';\r\n }\r\n },\r\n \r\n onLoad(options) {\r\n\tthis.deviceId = options.deviceId\r\n\tthis.initImageDir();\r\n\tthis.loadSavedImages();\r\n\tthis.setBleMtu();\r\n },\r\n \r\n onUnload() {\r\n // 页面卸载时清理\r\n this.stopDataSimulation();\r\n if (this.isConnected) {\r\n this.disconnectDevice();\r\n }\r\n },\r\n \r\n methods: {\r\n\twriteBleImage(){\r\n\t\t\r\n\t},\r\n\tgetBleService(){\r\n\t\tvar that = this\r\n\t\tuni.getBLEDeviceServices({\r\n\t\t\tdeviceId:that.deviceId,\r\n\t\t\tsuccess(services) {\r\n\t\t\t\tthat.imageServiceuuid = services.services[2].uuid;\r\n\t\t\t\tthat.getBleChar()\r\n\t\t\t},\r\n\t\t\tfail() {\r\n\t\t\t\tconsole.log('获取服务Id失败')\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\tgetBleChar(){\r\n\t\tvar that = this;\r\n\t\tuni.getBLEDeviceCharacteristics({\r\n\t\t\tdeviceId:that.deviceId,\r\n\t\t\tserviceId:that.imageServiceuuid,\r\n\t\t\tsuccess(res){\r\n\t\t\t\tthat.imageWriteuuid = res.characteristics[0].uuid;\r\n\t\t\t},\r\n\t\t\tfail() {\r\n\t\t\t\tconsole.log('获取特征Id失败')\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n\tsetBleMtu(){\r\n\t\tvar that = this\r\n\t\tuni.setBLEMTU({\r\n\t\t\tdeviceId:that.deviceId,\r\n\t\t\tmtu:512,\r\n\t\t\tsuccess() {\r\n\t\t\t\tthat.isConnected = true\r\n\t\t\t\t// that.statusPotColor = 'Green'\r\n\t\t\t\tconsole.log('MTU设置成功')\r\n\t\t\t\tthat.getBleService();\r\n\t\t\t},\r\n\t\t\tfail() {\r\n\t\t\t\tconsole.log('MTU设置失败')\r\n\t\t\t}\r\n\t\t})\r\n\t},\r\n // 初始化图片保存目录\r\n initImageDir() {\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n // H5和小程序使用本地存储模拟\r\n\r\n this.imageDir = 'watch_faces/';\r\n\r\n },\r\n \r\n loadSavedImages() {\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n // H5和小程序从本地存储加载\r\n\r\n const savedImages = uni.getStorageSync('watch_face_images') || [];\r\n this.uploadedImages = savedImages;\r\n if (savedImages.length > 0) {\r\n this.currentImageUrl = savedImages[0].url;\r\n this.currentImageIndex = 0;\r\n }\r\n\r\n },\r\n \r\n // 判断是否为图片文件\r\n isImageFile(filename) {\r\n const ext = filename.toLowerCase().split('.').pop();\r\n return ['jpg', 'jpeg', 'png', 'gif', 'bmp'].includes(ext);\r\n },\r\n \r\n // 选择图片\r\n chooseImage() {\r\n uni.chooseImage({\r\n count: 1,\r\n sizeType: ['compressed'],\r\n sourceType: ['album', 'camera'],\r\n success: (res) => {\r\n\t\t\tconsole.log(res)\r\n\t\t\tconst tempFilePath = res.tempFilePaths[0];\r\n\t\t\tconst fs = uni.getFileSystemManager();\r\n\t\t\t\tfs.readFile({\r\n\t\t\t\t\tfilePath: tempFilePath,\r\n\t\t\t\t\tencoding: 'binary',\r\n\t\t\t\tsuccess: res => {\r\n\t\t\t\t\tthis.imageBuffer = res.data;\r\n\t\t\t\t\tthis.log = '图片读取成功,大小:' + this.imageBuffer.byteLength + '字节';\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.saveImageToLocal(tempFilePath);\r\n },\r\n fail: (err) => {\r\n console.error('选择图片失败:', err);\r\n uni.showToast({ title: '选择图片失败', icon: 'none' });\r\n }\r\n });\r\n },\r\n \r\n // 保存图片到本地目录\r\n saveImageToLocal(tempPath) {\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n // H5和小程序保存到本地存储\r\n\r\n const fileName = `face_${Date.now()}.png`;\r\n this.uploadedImages.push({\r\n name: fileName,\r\n url: tempPath\r\n });\r\n // 保存到本地存储\r\n uni.setStorageSync('watch_face_images', this.uploadedImages);\r\n // 选中新图片\r\n this.currentImageIndex = this.uploadedImages.length - 1;\r\n this.currentImageUrl = tempPath;\r\n uni.showToast({ title: '图片保存成功', icon: 'success' });\r\n\r\n },\r\n \r\n // 选择轮播中的图片\r\n selectImage(index) {\r\n this.currentImageIndex = index;\r\n this.currentImageUrl = this.uploadedImages[index].url;\r\n },\r\n \r\n // 轮播图变化时触发\r\n handleCarouselChange(e) {\r\n const index = e.detail.current;\r\n this.currentImageIndex = index;\r\n this.currentImageUrl = this.uploadedImages[index].url;\r\n },\r\n \r\n // 设置为当前表盘\r\n setAsCurrentFace() {\r\n // 这里可以添加发送图片到手表的逻辑\r\n this.faceStatus = 1; // 标记为更新中\r\n \r\n // 模拟更新过程\r\n setTimeout(() => {\r\n this.faceStatus = 0; // 更新完成,恢复正常状态\r\n uni.showToast({ title: '表盘已更新', icon: 'success' });\r\n \r\n // 保存当前选择到本地\r\n uni.setStorageSync('current_watch_face', this.currentImageUrl);\r\n }, 1500);\r\n },\r\n \r\n // 切换设备连接状态\r\n toggleConnection() {\r\n if (this.isConnected) {\r\n this.disconnectDevice();\r\n } else {\r\n this.connectDevice();\r\n }\r\n },\r\n \r\n // 连接设备\r\n connectDevice() {\r\n\t\tvar that = this;\r\n\t\tthis.isScanning = true;\r\n\t\tuni.showToast({ title: '正在连接设备...', icon: 'none' });\r\n\t\tuni.createBLEConnection({\r\n\t\t\tdeviceId:that.deviceId,\r\n\t\t\tsuccess() {\r\n\t\t\t\tthat.isScanning = false;\r\n\t\t\t\tthat.isConnected = true;\r\n\t\t\t\t// that.statusPotColor = 'Green';\r\n\t\t\t\tuni.showToast({ title: '设备连接成功', icon: 'success' });\r\n\t\t\t\tthat.setBleMtu();\r\n\t\t\t\tthat.startDataSimulation();\r\n\t\t\t}\r\n\t\t})\r\n },\r\n \r\n // 断开连接\r\n disconnectDevice() {\r\n\t\tvar that = this;\r\n\t\tuni.closeBLEConnection({\r\n\t\t\tdeviceId:that.deviceId,\r\n\t\t\tsuccess() {\r\n\t\t\t\tthat.isConnected = false;\r\n\t\t\t\tthat.statusPotColor = 'red';\r\n\t\t\t\tuni.showToast({ title: '已断开连接', icon: 'none' });\r\n\t\t\t\tthat.stopDataSimulation();\r\n\t\t\t},\r\n\t\t\tfail(res) {\r\n\t\t\t\tif(res == 10000){\r\n\t\t\t\t\tuni.openBluetoothAdapter({\r\n\t\t\t\t\t\tsuccess() {\r\n\t\t\t\t\t\t\tthat.isConnected = false;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tfail() {\r\n\t\t\t\t\t\t\tconsole.log('初始化失败')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n \r\n },\r\n \r\n // 开始模拟数据更新\r\n startDataSimulation() {\r\n // 清除之前的定时器\r\n if (this.dataTimer) {\r\n clearInterval(this.dataTimer);\r\n }\r\n \r\n // 初始化随机数据\r\n this.batteryLevel = Math.floor(Math.random() * 30) + 70; // 70-100%\r\n this.temperature = Math.floor(Math.random() * 10) + 20; // 20-30°C\r\n this.humidity = Math.floor(Math.random() * 30) + 40; // 40-70%\r\n \r\n // 每5秒更新一次数据\r\n this.dataTimer = setInterval(() => {\r\n // 电量缓慢减少\r\n if (this.batteryLevel > 1) {\r\n this.batteryLevel = Math.max(1, this.batteryLevel - Math.random() * 2);\r\n }\r\n \r\n // 温度小幅波动\r\n this.temperature = Math.max(15, Math.min(35, this.temperature + (Math.random() * 2 - 1)));\r\n \r\n // 湿度小幅波动\r\n this.humidity = Math.max(30, Math.min(80, this.humidity + (Math.random() * 4 - 2)));\r\n \r\n }, 5000);\r\n },\r\n \r\n // 停止数据模拟\r\n stopDataSimulation() {\r\n if (this.dataTimer) {\r\n clearInterval(this.dataTimer);\r\n this.dataTimer = null;\r\n }\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.status-pot{\r\n\twidth: 16px;\r\n\theight: 16px;\r\n\tborder-radius: 50%;\r\n}\r\n.container {\r\n background-color: #f5f5f7;\r\n min-height: 100vh;\r\n}\r\n\r\n/* 导航栏 */\r\n.nav-bar {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 20rpx 30rpx;\r\n background-color: #ffffff;\r\n}\r\n\r\n.nav-title {\r\n color: white;\r\n font-size: 36rpx;\r\n font-weight: 500;\r\n}\r\n\r\n.upload-btn {\r\n /* display: flex; */\r\n align-items: center;\r\n gap: 8rpx;\r\n background-color: #28d50e;\r\n color: white;\r\n width: 35%;\r\n margin-top: 10px;\r\n padding: 14rpx 0rpx;\r\n border-radius: 8rpx;\r\n font-size: 26rpx;\r\n}\r\n\r\n/* 内容区 */\r\n.content {\r\n padding: 30rpx;\r\n}\r\n\r\n.section-title {\r\n display: block;\r\n font-size: 32rpx;\r\n color: #333;\r\n margin: 30rpx 0 20rpx;\r\n font-weight: 500;\r\n}\r\n\r\n/* 图片预览区 */\r\n.preview-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n margin-bottom: 20rpx;\r\n}\r\n\r\n.preview-frame {\r\n\twidth: 480rpx;\r\n\theight: 480rpx;\r\n\tborder-radius: 50%;\r\n\tbackground-color: #ffffff;\r\n\tbox-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n\talign-items: center;\r\n\toverflow: hidden;\r\n\tposition: relative;\r\n}\r\n\r\n.preview-image {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.empty-preview {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n color: #ccc;\r\n}\r\n\r\n.empty-preview text {\r\n margin-top: 20rpx;\r\n font-size: 28rpx;\r\n}\r\n\r\n.set-btn {\r\n margin-top: 20rpx;\r\n background-color: #3cbb19;\r\n color: white;\r\n width: 35%;\r\n padding: 15rpx 0rpx;\r\n border-radius: 8rpx;\r\n font-size: 28rpx;\r\n}\r\n\r\n/* 卡片式轮播区 */\r\n.carousel-section {\r\n margin-bottom: 30rpx;\r\n}\r\n\r\n.carousel-container {\r\n background-color: white;\r\n border-radius: 16rpx;\r\n padding: 20rpx 0;\r\n box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);\r\n overflow: hidden;\r\n}\r\n\r\n/* 卡片轮播核心样式 */\r\n.card-swiper {\r\n width: 100%;\r\n height: 240rpx;\r\n}\r\n\r\n.card-swiper .swiper-item {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n transition: all 0.3s ease;\r\n}\r\n\r\n/* 卡片样式 */\r\n.card-item {\r\n width: 240rpx;\r\n height: 240rpx;\r\n}\r\n\r\n.card-frame {\r\n width: 240rpx;\r\n height: 100%;\r\n border-radius: 50%;\r\n overflow: hidden;\r\n box-shadow: 0 6rpx 16rpx rgba(0, 0, 0, 0.15);\r\n position: relative;\r\n}\r\n\r\n.card-image {\r\n width: 240rpx;\r\n height: 100%;\r\n}\r\n\r\n/* 选中状态覆盖层 */\r\n.card-overlay {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 240rpx;\r\n height: 100%;\r\n background-color: rgba(0, 0, 0, 0.3);\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n/* 卡片轮播动画效果 */\r\n.card-swiper .swiper-item:not(.swiper-item-active) {\r\n transform: scale(0.8);\r\n opacity: 0.6;\r\n z-index: 1;\r\n}\r\n\r\n.card-swiper .swiper-item-active {\r\n transform: scale(1);\r\n z-index: 2;\r\n}\r\n\r\n.carousel-hint {\r\n height: 200rpx;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #999;\r\n font-size: 26rpx;\r\n text-align: center;\r\n}\r\n\r\n/* 数据展示区 */\r\n.data-section {\r\n background-color: white;\r\n border-radius: 16rpx;\r\n padding: 20rpx 30rpx;\r\n box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);\r\n}\r\n\r\n.data-grid {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 20rpx;\r\n margin-bottom: 30rpx;\r\n}\r\n\r\n.data-card {\r\n background-color: #f9f9f9;\r\n border-radius: 12rpx;\r\n padding: 20rpx;\r\n display: flex;\r\n align-items: center;\r\n gap: 20rpx;\r\n}\r\n\r\n.data-icon {\r\n width: 60rpx;\r\n height: 60rpx;\r\n border-radius: 12rpx;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n.battery-icon {\r\n background-color: #f6ffed;\r\n}\r\n\r\n.temp-icon {\r\n background-color: #fff7e6;\r\n}\r\n\r\n.humidity-icon {\r\n background-color: #e6f7ff;\r\n}\r\n\r\n.status-icon {\r\n background-color: #f0f9ff;\r\n}\r\n\r\n.data-info {\r\n flex: 1;\r\n}\r\n\r\n.data-value {\r\n font-size: 32rpx;\r\n font-weight: bold;\r\n color: #333;\r\n}\r\n\r\n.data-label {\r\n font-size: 24rpx;\r\n color: #666;\r\n}\r\n\r\n/* 连接状态 */\r\n.connection-status {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 15rpx 0;\r\n border-top: 1rpx solid #f0f0f0;\r\n}\r\n\r\n.status-text {\r\n flex: 1;\r\n margin: 0 15rpx;\r\n font-size: 28rpx;\r\n color: #333;\r\n}\r\n\r\n.connect-btn {\r\n padding: 12rpx 24rpx;\r\n border-radius: 8rpx;\r\n font-size: 26rpx;\r\n background-color: #007aff;\r\n color: white;\r\n}\r\n\r\n.connect-btn:disabled {\r\n background-color: #ccc;\r\n}\r\n</style>",null,null],"names":[],"mappings":"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"} |