<template> <view class="page"> <u-navbar title="设备设置" :border-bottom="false" :background="bgc" back-icon-color="#fff" title-color='#fff' title-size='36' height='50'></u-navbar> <view class="toptit"> 完善设备信息 </view> <view class="card"> <view class="icon_img"> <image src="https://api.ccttiot.com/smartmeter/img/static/uIvJLAq6xh67FZAI5qEC" mode=""></image> <view class="">设备展示图</view> </view> <view class="shebeitit">展示设备的外观信息</view> <view class="icon"> <view class="imgbox" v-if="userImgs"> <view style="border: 0;outline: none;padding-left: 0rpx;border-radius: 16rpx;" @click="getImage"> <image style="border-radius: 10rpx;" :src="userImgs" mode="aspectFit"></image> </view> </view> <view class="imgbox"v-else> <view style="border: 0;outline: none;padding-left: 0rpx;border-radius: 16rpx;" @click="getImage"> <image style="width: 100rpx;height: 100rpx;margin-left: 76rpx;margin-top: 50rpx;" src="https://api.ccttiot.com/smartmeter/img/static/urkb8tICILUpvA86HoxB" mode="aspectFit"></image> <view class="" style="width: 100%;text-align: center;margin-top: 15rpx;"> 上传设备展示图 </view> </view> </view> <!-- 截图 --> <ksp-cropper mode="free" :width="142" :height="142" :maxWidth="1024" :maxHeight="1024" :url="url" @cancel="oncancel" @ok="onok"></ksp-cropper> </view> </view> <view class="shebeiname"> <view class="icon_img"> <image src="https://api.ccttiot.com/smartmeter/img/static/u44V9FNVsAHcbZGtab1A" mode=""></image> <view class="">设备名称</view> </view> <view class="shebeitit"> 正确描述设备名称 </view> <view class="info"> <input type="text" v-model="xgname" /> </view> </view> <view class="buttit"> 设备名称和设备主图将会在用户扫码付款时进行展现 </view> <view class="btnxyb" @click="btnxia"> 下一步(1/3) </view> <!-- <view class="btntg" @click="btntiao"> 跳过 </view> --> </view> </template> <script> var xBlufi = require("@/page_components/blufi/xBlufi.js") export default { data() { return { qrResult: '', bluetoothflag: false, shibaiflag: false, bgc: { backgroundColor: "#8883f0", }, showloading: false, showfz: false, show: false, showshop: false, list: [{ value: '1', label: '欠费立即断电' }, { value: '0', label: '欠费不断电' } ], id: '', xgname: '', deviceInfo: {}, groupList: {}, showpopup: false, remake: '', price: '', showpeice: false, showremake: false, listobj: { deviceName: '', storeName: '', deviceNo: '', model: '', wifi: '', }, showmc: false, pagenum: 1, wateringList: [], pagesize: 10, isLoading: false, noMoreData: false, total: 0, storeId: '', devicesList: [], setMode: null, mac: '', name: '', deviceId: '', isMch: false, taocan: '', token: '', userImgs: '', url: '', modelid:[] } }, onLoad(option) { let id = option.id this.id = id this.getDevice(id) }, onShow() { this.wateringList = [] this.setMode == null this.taocan = '' this.getQiniuToken() // this.getgroup() // this.gettanc() this.getlistobj(this.id) this.getuserinfo() // this.getao() }, // 分享到好友(会话) onShareAppMessage: function() { return { title: '创想物联', path: '/pages/shouye/index' } }, onUnload: function() { console.log("unload "); xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent); wx.closeBLEConnection({ deviceId: this.deviceId, }) }, // 分享到朋友圈 onShareTimeline: function() { return { title: '创想物联', query: '', path: '/pages/shouye/index' } }, methods: { // 点击下一步 btnxia() { if (this.xgname == '') { uni.showToast({ title: '名称不能为空', icon: 'none', duration: 2000 }) } else { let data = { deviceId: this.id, deviceName: this.xgname } this.$u.put('/app/device', data).then((res) => { if (res.code == 200) { this.getDevice() if (this.modelid.some(item => item == 2)) { console.log('wifi'); uni.navigateTo({ url: '/page_components/bindsztwo?id=' + this.id }); } else { console.log('4g'); uni.navigateTo({ url: '/page_components/bindszthr?id=' + this.id }); } } }) } }, btntiao() { uni.navigateTo({ url: '/page_components/bindsztwo?id=' + this.id }) }, btnlyqx() { this.shibaiflag = false this.bluetoothflag = false }, // 修改图片 getImage() { uni.chooseImage({ count: 1, success: (rst) => { this.url = rst.tempFilePaths[0]; } }) }, onok(ev) { this.url = ""; this.path = ev.path; let _this = this let math = 'static/' + _this.$u.guid(20) wx.uploadFile({ url: 'https://up-z2.qiniup.com', name: 'file', filePath: _this.path, formData: { token: _this.token, //后端返回的token key: 'smartmeter/img/' + math }, success: function(res) { let str = JSON.parse(res.data) _this.userImgs = 'https://api.ccttiot.com/' + str.key let data = { deviceId: _this.id, customPicture: _this.userImgs } _this.$u.put('/app/device', data).then((res) => { if (res.code == 200) { this.getDevice() uni.showToast({ title: '操作成功', icon: 'none', duration: 2000 }) } }) } }) }, oncancel() { // url设置为空,隐藏控件 this.url = "" }, // 获取上传七牛云token getQiniuToken() { this.$u.get("/common/qiniu/uploadInfo").then((res) => { if (res.code == 200) { this.token = res.token } }) }, getao() { this.$u.get(`/app/suit/listByDeviceId/${this.id}`).then(res => { if (res.code == 200) { if (res.data.length <= 1) { res.data.forEach(item => { this.taocan += item.name }) } else { res.data.forEach(item => { this.taocan += item.name + ',' }) } } }) }, // 点击设置套餐 btntc() { uni.navigateTo({ url: '/page_fenbao/statulist/taocanlist/index?id=' + this.id }) }, // 获取当前用户信息 getuserinfo() { this.$u.get("/app/user/userInfo").then((res) => { if (res.code == 200) { this.isMch = res.data.isMch } }) }, sub(num) { if (num == 1) { let data = { deviceId: this.id, remark: this.remake } this.showpopup = false this.showremake = false this.putdevice(data) } else if (num == 2) { let data = { deviceId: this.id, price: this.price, } this.showpopup = false this.showpeice = false this.showmc = false this.putdevice(data) } else if (num == 3) { console.log(this.xgname); let data = { deviceId: this.id, deviceName: this.xgname, } this.showpopup = false this.showpeice = false this.showmc = false this.putdevice(data) setTimeout(() => { this.getlistobj(this.id) }, 1000) } }, confirm(e) { let data = { deviceId: this.id, outageWay: e[0].value } this.putdevice(data) }, sremakemc() { console.log(1); this.showmc = true this.xgname = this.listobj.deviceName }, sremake() { this.showpopup = true this.showremake = true }, sprice() { this.showpopup = true this.showpeice = true }, close() { this.showpeice = false this.showremake = false this.showpopup = false this.showmc = false }, getDevice(id) { this.$u.get("/app/device/" + this.id).then((res) => { // this.$forceUpdate() if (res.code == 200) { this.modelid = res.data.modelTags this.deviceInfo = res.data this.storeId = res.data.storeId this.price = this.deviceInfo.price this.remake = this.deviceInfo.remark // this.qrResult = 'CTKG-' + res.data.mac this.qrResult = res.data.mac } }); }, getgroup() { this.$u.get("/app/store/listCount").then((res) => { // this.$forceUpdate() if (res.code == 200) { this.groupList = res.data // this.loadings=true // this.initChart() } }); }, getlistobj(id) { this.$u.get("/app/device/" + id).then((res) => { if (res.code == 200) { this.listobj = res.data this.xgname = this.listobj.deviceName this.userImgs = res.data.picture } }) }, funListenDeviceMsgEvent: function(options) { switch (options.type) { case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_MY_DATA: let loadPercent = options.data; let loadText = '文件读取中' // console.log("文件读取中", options.data); break; case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA: let ver_data = this.parseCustomData(options.data) this.setMode = Math.floor(ver_data.setMode / 60) console.log("1收到设备发来的自定义数据结果:", ver_data, this.setMode) break; case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS: if (options.result) { let devicesarr = options.data // console.log(devicesarr,'devicesarrdevicesarr'); devicesarr.forEach(device => { const mac = device.name.substring(5) if (device.name.slice(5, 17) == this.qrResult) { this.deviceId = device.deviceId this.name = device.name this.mac = device.name.slice(5, 17) // console.log(this.mac, 'macmacmac'); // this.devicesList = uniqueDevicesList; } }) } break; case xBlufi.XBLUFI_TYPE.TYPE_CONNECTED: // console.log("连接回调:" + JSON.stringify(options)); if (options.result) { this.bluetoothflag = false uni.hideLoading(); // uni.showToast({ // title: '连接成功', // icon: 'none' // }); { console.log("连接回调options.data.deviceId:" + options.data.deviceId, "连接回调options.data.name:" + options.data.name); } } else { this.shibaiflag = true this.bluetoothflag = false uni.hideLoading() // uni.showToast({ // title: '设备离线或不在范围内', // icon: 'none', // duration: 2000 // }) } break; case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_START: if (!options.result) { setTimeout(() => { uni.hideLoading() this.bluetoothflag = false }, 3000) console.log("蓝牙未开启", options); // uni.showToast({ // title: '蓝牙未开启', // icon: 'none', // duration: 3000 // }); return } else { // this.searching = true //蓝牙搜索开始 // _this.setData({ // searching: true // }); } break; case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_STOP: if (options.result) { let uniqueDevicesList = Array.from(new Set(this.devicesList)); // 将去重后的数组重新赋值给 this.devicesList this.devicesList = uniqueDevicesList; let list = [] filteredDevices.forEach(device => { // 从设备名称中提取 MAC 地址(假设 MAC 地址是设备名称的后6个字符) let macFromName = device.name.substring(device.name.length - 12); this.$u.get(`/app/device/${macFromName}/isBind`).then((res) => { if (res.data == false) { list.push(device) } else { } }) }); setTimeout(() => { this.devicesList = list }, 200) console.log('蓝牙停止搜索ok'); } else { //蓝牙停止搜索失败 console.log('蓝牙停止搜索失败'); } this.searching = false // _this.setData({ // searching: false // }); break; } }, parseCustomData(data) { // 将字符串按照 "@" 分割成数组 const dataArray = data.split('@'); // 根据约定,解析各个字段的值 const voltage = parseFloat(dataArray[0].substring(1)); // 去除前缀 "V",并将字符串转换为浮点数 const switchState = dataArray[1].substring(1); // 去除前缀 "S" const current = parseFloat(dataArray[2].substring(1)); // 去除前缀 "A",并将字符串转换为浮点数 const power = parseFloat(dataArray[4].substring(1)); // 去除前缀 "P",并将字符串转换为浮点数 const remainingPower = parseFloat(dataArray[5].substring(1)); // 去除前缀 "M",并将字符串转换为浮点数 const setMode = dataArray[6].substring(1); // 去除前缀 "T" // 返回解析后的数据对象 return { voltage, switchState, current, power, remainingPower, setMode }; }, } } </script> <style lang="scss"> /deep/ .u-flex { padding-top: 20rpx !important; box-sizing: border-box; } /deep/ .panel { position: fixed; width: 100%; height: 100%; top: 0; bottom: 0; left: 0; z-index: 99 !important; overflow: hidden; } /deep/ .u-title { padding-bottom: 22rpx; } /deep/ .u-icon__icon { padding-bottom: 22rpx; } .btnxyb { width: 636rpx; height: 100rpx; background: #8883F0; box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1); filter: blur(0px); text-align: center; line-height: 100rpx; font-size: 36rpx; color: #FFFFFF; border-radius: 10rpx; position: fixed; left: 50%; transform: translateX(-50%); bottom: 150rpx; } .btntg { font-size: 32rpx; color: #8883F0; margin-top: 20rpx; position: fixed; left: 50%; transform: translateX(-50%); bottom: 80rpx; } .buttit { font-size: 24rpx; color: #3D3D3D; width: 100%; padding-left: 58rpx; box-sizing: border-box; margin-top: 68rpx; } .toptit { font-weight: 700; font-size: 44rpx; color: #3D3D3D; padding-top: 58rpx; padding-left: 58rpx; box-sizing: border-box; } .shebeiname { width: 654rpx; height: 260rpx; background: #FFFFFF; box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1); border-radius: 24rpx 24rpx 24rpx 24rpx; margin: auto; margin-top: 26rpx; padding-top: 26rpx; padding-left: 28rpx; box-sizing: border-box; .shebeitit { font-size: 28rpx; color: #606060; margin-top: 18rpx; } input { width: 580rpx; height: 66rpx; background: #EDEDED; border-radius: 10rpx 10rpx 10rpx 10rpx; margin-top: 22rpx; padding-left: 26rpx; box-sizing: border-box; } .icon_img { image { width: 50rpx; height: 50rpx; margin-right: 14rpx; } display: flex; align-items: center; view { font-size: 32rpx; color: #3D3D3D; } } } .bluetoothbox { width: 100%; height: 100vh; background-color: #f4f1f6; position: fixed; top: 0; left: 0; z-index: 99; text-align: center; .img { margin-top: 400rpx; width: 320rpx; height: 320rpx; } .one { font-size: 36rpx; color: #000; // margin-top: 80rpx; } .two { margin-top: 30rpx; font-size: 24rpx; color: #ccc; } .thr { margin-top: 30rpx; font-size: 28rpx; color: #ccc; } .anfour { display: flex; margin-top: 30rpx; justify-content: space-between; padding: 0 220rpx; box-sizing: border-box; .qx { width: 100rpx; height: 70rpx; line-height: 70rpx; text-align: center; border: 1px solid #3D3D3D; border-radius: 10rpx; } .cx { width: 200rpx; height: 70rpx; line-height: 70rpx; text-align: center; background-color: #8883F0; color: #fff; border-radius: 10rpx; } } .stop { font-size: 36rpx; color: #000; margin-top: 380rpx; } .xtop { margin-top: 30rpx; font-size: 24rpx; color: #ccc; } .xqx { width: 530rpx; height: 90rpx; line-height: 90rpx; // border: 1px solid #808080; border-radius: 20rpx; text-align: center; background-color: #fff; margin: auto; margin-top: 200rpx; } image { width: 500rpx; height: 500rpx; margin-top: 100rpx; } } page { background-color: #F7FAFE; } .page { width: 750rpx; .popcard { display: flex; justify-content: center; flex-wrap: wrap; width: 550rpx; height: 400rpx; border-radius: 20rpx; .tit { display: flex; justify-content: center; width: 100%; align-items: center; font-size: 28rpx; font-weight: 700; } .ipt { margin-top: 60rpx; width: 80%; .u-input::placeholder { font-size: 20px; color: red; } } .btnbox { width: 100%; display: flex; flex-wrap: nowrap; border-radius: 0 0 20rpx 20rpx; .btn2 { display: flex; align-items: center; justify-content: center; width: 50%; font-size: 32rpx; font-family: HarmonyOS Sans SC, HarmonyOS Sans SC; font-weight: 400; color: #000; background-color: #fff; } .btn1 { display: flex; align-items: center; justify-content: center; width: 50%; font-size: 32rpx; font-family: HarmonyOS Sans SC, HarmonyOS Sans SC; font-weight: 400; color: #fff; background-color: #8883F0; border: 1rpx solid #ccc; } } } .card { padding: 16rpx 28rpx; margin: 60rpx auto 0; width: 654rpx; background: #FFFFFF; border-radius: 30rpx; box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1); opacity: 1; .icon_img { image { width: 50rpx; height: 50rpx; margin-right: 14rpx; } display: flex; align-items: center; view { font-size: 32rpx; color: #3D3D3D; } } .shebeitit { font-size: 28rpx; color: #606060; margin-top: 18rpx; } .li { // display: flex; // flex-wrap: nowrap; // align-items: center; // justify-content: space-between; height: 94rpx; // border-bottom: #E5E5E5 solid 2rpx; .tit { font-size: 32rpx; font-family: HarmonyOS Sans SC, HarmonyOS Sans SC; font-weight: 400; color: #000000; } .info { display: flex; flex-wrap: nowrap; align-items: center; .txt { font-size: 32rpx; font-family: HarmonyOS Sans SC, HarmonyOS Sans SC; font-weight: 400; color: #95989D; } .icon-xiangyou1 { margin-left: 6rpx; color: #95989D; } } } } .btn { display: flex; align-items: center; justify-content: center; margin: 52rpx auto 0; width: 654rpx; height: 100rpx; background: #FF4F4F; box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1); opacity: 1; border-radius: 30rpx; font-size: 32rpx; font-family: HarmonyOS Sans SC, HarmonyOS Sans SC; font-weight: 400; color: #FFFFFF; } .fz { position: fixed; bottom: 0; width: 750rpx; height: 1152rpx; background: #F7FAFE; border-radius: 30rpx 30rpx 0 0; z-index: 10071; .fz_top { margin: 18rpx 0 auto; display: flex; flex-wrap: nowrap; justify-content: space-between; .icon-shanchu { margin-left: 40rpx; font-size: 50rpx; } .tit { font-size: 36rpx; font-family: Source Han Sans, Source Han Sans; font-weight: 400; color: #000000; } .txt { margin-right: 40rpx; font-size: 36rpx; font-family: Source Han Sans, Source Han Sans; font-weight: 400; color: #8883F0; } } .card_cont { width: 750rpx; display: flex; flex-wrap: wrap; align-items: baseline; justify-content: center; height: 1030rpx; overflow-y: auto; overflow-x: hidden; .cards { margin-top: 32rpx; display: flex; flex-wrap: nowrap; align-items: center; justify-content: space-between; padding: 0 40rpx; width: 682rpx; border-radius: 30rpx; height: 114rpx; background: #FFFFFF; box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1); .txt { font-size: 36rpx; font-family: Source Han Sans, Source Han Sans; font-weight: 400; color: #000000; } .num { font-size: 36rpx; font-family: Source Han Sans, Source Han Sans; font-weight: 400; color: #000000; } } } } } .icon { // display: flex; // flex-wrap: wrap; // align-items: center; margin-top: 40rpx; margin-bottom: 30rpx; .imgbox { width: 250rpx; height: 250rpx; background: #EDEDED; border-radius: 10rpx 10rpx 10rpx 10rpx; image { width: 250rpx; height: 250rpx; } } } </style>