const app = getApp(); const { getBanner, listByDevice } = require('../../utils/api.js'); import timeUtil from '../../utils/time_util.js'; import strings from '../../utils/strings.js'; import route_util from '../../utils/route_util.js'; Page({ data: { nvabarData: { showCapsule: 0, //是否显示左上角图标 1表示显示 0表示不显示 title: 'OhPlay', //导航栏 中间的标题 }, ///下午好 isLogin: false, greeting: "", bannerList: [], autoplay: true, interval: 3000, // 切换时间间隔 duration: 500, // 滑动动画时长 circular: true, // 衔接滑动 indexPage: 0, ///是否展示频道 showChannel: false, ////首页 navBarHeight: app.globalData.navBarHeight, MenuButtonheight: app.globalData.MenuButtonheight, MenuButtonTop: app.globalData.MenuButtonTop, actionIndex: null, luoma: ["Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", " Ⅶ", "Ⅷ", "Ⅸ", "Ⅹ", "Ⅺ", "Ⅻ"], channelData: [], deviceList: [], deviceListIndex: null, isOneLoading: true, uid: null, isSetWake: false, thisDeviceMac: null, battery: 4, // 0≤电量<20,0格 ////我的界面 loginStatus: true, nickName: "未登录", userPic: './../../img/head_pic.png' }, onLoad(options) { var that = this; that.onUserInfoLoad(); that.onBannerLoad(); }, onShow() { var that = this; that.onHomeShow(); that.onBannerShow(); }, onHomeShow() { var that = this; var userInfo = wx.getStorageSync("userInfo") || ""; if (!strings.isEmpty(userInfo)) { // 获取设备本地数据 if (app.globalData.newDeviceId) { that.getDeviceData(); } // 更新 else if (that.data.deviceListIndex !== null) { that.actionDevice(that.data.deviceListIndex); } } // 取消订阅 else { if (that.data.thisDeviceMac !== null) { app.unsubscribe(`/${that.data.thisDeviceMac}/user/pub_response`); }; } }, ///开始时home的 getDeviceData() { var that = this; var devicelist = wx.getStorageSync("devicelist") || ""; if (!strings.isEmpty(devicelist)) { const resData = JSON.parse(devicelist); that.setData({ deviceList: resData }); // 连接mqtt if (app.globalData.client === null) { app.connect(); } else if (app.globalData.newDeviceId) { that.setData({ actionIndex: null, deviceListIndex: null, }); // 监听 let topic = `/AIrSMArT_${resData[0].name.split("BLUFI_")[1]}/status/onoffline`; app.subscribe(topic); const Timeout = setTimeout(() => { clearTimeout(Timeout); that.actionDevice(0); }, 1000); } // // 有新设备 // if(app.globalData.newDeviceId) { // that.setData({ // actionIndex: null, // deviceListIndex: null, // }); // let topic = `/AIrSMArT_${resData[0].name.split("BLUFI_")[1]}/status/onoffline`; // app.subscribe(topic); // } } }, // 回调 mqttCallback(type, option) { // console.log("gadsfadsfqwerq===" + type + "===" + option); var that = this; let payloads = null; if (option) { payloads = JSON.parse(option.payload); }; switch (type) { case "connect": that.connectSuccess(); break; case "message_onoffline": that.online(payloads); break; case "message": // 接收设备播放信息 if (payloads.type === "get_position" && payloads.other) { let actionIndex = null; that.data.channelData.map((v, index) => { if (v.channelNum === payloads.other.channel) { actionIndex = index; } }); that.setData({ actionIndex, }); } else if (payloads.type === "play" || payloads.type === "play_state") { if (that.data.deviceListIndex === null) { return; } // 接收设备当前播放状态 const obj = { DstDeviceName: that.getThisDeviceID() } app.PubMsg({ type: "get_position", ...obj }); } else if (payloads.type === "get_dev_info") { // 接收设备当前信息 that.getchannelData(payloads.other.ProdModel); // 电量 that.setData({ battery: that._battery(payloads.other.Power), }) // 当前设备木有设置定时 that.setData({ isSetWake: false, }); payloads.other.alarm.map((v) => { if (v.enable === "1") { that.setData({ isSetWake: true }); } }); // 更新信息 ///连上就调用2次 that.data.deviceList.map((v, index) => { // console.log("gadsfadsfadsfa==444===" + payloads.SrcDeviceName); // console.log("gadsfadsfadsfa==555===" + JSON.stringify(payloads.other)); // [{"deviceId":"BLUFI_7cdfa1fcbb24","name":"BLUFI_7cdfa1fcbb24","state":"online"}] /// payloads.other // {"Guid":"AIrSMArT_7cdfa1fcbb24","ProdModel":"MW-2AX(WIFI-N)","sim_iccid":"","esim_iccid":"","SoftVer":"3.0.7","Firmware":"RTOS","Power":20,"lowBatteryNtf":0,"Volume":24,"Mute":0,"pauseShutdown":600,"PlayState":4,"PlayMode":0,"devName":"猫王小王子OTR-X","deviceId":"","deviceSecret":"","is_tts_enable":1,"SignalQuality":100,"CardIndex":0,"CardSum":0,"NetModel":2,"is_netmode_auto":2,"Imei":"","mid":"","deviceDSN":"","userid":"1","user_id_white":"10000309","alarm":[{"alarm_id":"0","alarm_name":"close","current_timestamp":"2024-03-31 19:20:39","on_off_timestamp":"19:30:39","operation":"off","song_uri":"","weekly_repeat":"0","enable":"0","action":"update","week_actives":[0,0,0,0,0,0,0]},{"alarm_id":"1","alarm_name":"open","current_timestamp":"2023-11-17 12:25:10","on_off_timestamp":"13:35:00","operation":"on","song_uri":"","weekly_repeat":"1","enable":"1","action":"update","week_actives":[1,1,1,1,1,1,1]}]} ///payloads.SrcDeviceName AIrSMArT_7cdfa1fcbb24 if (payloads.SrcDeviceName && payloads.SrcDeviceName.indexOf(v.name.split("BLUFI_")[1]) !== -1) { that.data.deviceList[index].ProdModel = payloads.other.ProdModel; that.data.deviceList[index].devName = payloads.other.devName; } }); // 更新缓存 wx.setStorage({ key: "devicelist", data: JSON.stringify(that.data.deviceList), success() { that.setData({ deviceList: that.data.deviceList }) } }); } else if (payloads.type === "battery" && payloads.other) { that.setData({ battery: that._battery(payloads.other.battery), }) } break; default: } }, // 格式化电量 _battery(battery) { let _battery = 0; if (battery < 20) { _battery = 0 } else if (20 <= battery && battery < 40) { _battery = 1 } else if (40 <= battery && battery < 60) { _battery = 2 } else if (60 <= battery && battery < 80) { _battery = 3 } else if (80 <= battery && battery <= 100) { _battery = 4 } else if (battery > 100) { _battery = 5 }; return _battery }, connectSuccess() { // 订阅设备在线信息 var that = this; that.subscribeDevicesStatus(); }, // [{"deviceId":"BLUFI_7cdfa1fcbb24","name":"BLUFI_7cdfa1fcbb24","state":"online","ProdModel":"MW-2AX(WIFI-N)","devName":"猫王小王子OTR-X"}] ///连上就调用2次 /// payloads:{"uuid":"AIrSMArT_7cdfa1fcbb24","state":"online","userid":"1"} online(payloads) { // 设置在线状态 var that = this; console.log("gadsfadsfadsfa==777===" + JSON.stringify(payloads)); that.data.deviceList.map((v, index) => { if (payloads.uuid && payloads.uuid.indexOf(v.name.split("BLUFI_")[1]) !== -1) { that.data.deviceList[index].state = payloads.state; } }); that.setData({ deviceList: that.data.deviceList, }); // 更新缓存 wx.setStorage({ key: "devicelist", data: JSON.stringify(that.data.deviceList) }); // 如没有选中,选中最新的 (() => { if (that.data.deviceListIndex === null) { let itue = false; that.data.deviceList.map((v, index) => { if (v.state === "online" && !itue) { itue = true; that.actionDevice(index); } }); } // else { // that.actionDevice(that.data.deviceListIndex); // }; })(); // 当前播放设备离线 if (that.data.deviceListIndex !== null && that.data.deviceList[that.data.deviceListIndex].state !== "online") { that.setData({ actionIndex: null, deviceListIndex: null, }); }; }, // 订阅设备在线状态 subscribeDevicesStatus() { var that = this; that.data.deviceList.forEach((value) => { let topic = `/AIrSMArT_${value.name.split("BLUFI_")[1]}/status/onoffline`; app.subscribe(topic); }) }, subscribeCurrDevice() { var that = this; if (!(app.globalData.client && app.globalData.client.connected)) { console.log("未连接MQTT服务器"); const str = setInterval(() => { clearInterval(str); that.subscribeCurrDevice(); }, 500); return; }; if (that.data.deviceList.length === 0 || that.data.deviceListIndex === null) { return }; let topic = `/AIrSMArT_${that.data.deviceList[that.data.deviceListIndex].name.split("BLUFI_")[1]}/user/pub_response`; app.subscribe(topic); const obj = { DstDeviceName: that.getThisDeviceID() }; app.PubMsg({ type: "get_dev_info", ...obj }); }, actionMusic(e) { var that = this; if (e.currentTarget.dataset.index === that.data.actionIndex) { return; }; if (that.data.deviceListIndex === null) { wx.showToast({ title: '请选择设备', icon: "none" }) return; }; that.setData({ actionIndex: e.currentTarget.dataset.index }); const other = { "url": "", "media_data": "", "user_id": `${app.globalData.userInfo.deviceUid}`, "timestamp": `${Math.round(new Date() / 1000)}`, "channel_id": `${that.data.channelData[e.currentTarget.dataset.index].channelNum}`, "order": "", "resource_from": "", "songAlbumID": "", "version": 3, "is_debug": app.globalData.is_debug }; app.PubMsg({ type: "play", DstDeviceName: that.getThisDeviceID(), other }); }, getThisDeviceID() { var that = this; return `AIrSMArT_${that.data.deviceList[that.data.deviceListIndex].name.split("BLUFI_")[1]}` }, getchannelData(clientType) { var that = this; Ï if (that.data.deviceListIndex === null) { return; }; listByDevice({ clientType }).then((res) => { that.setData({ channelData: res }); // 接收设备当前播放状态 const obj = { DstDeviceName: that.getThisDeviceID() } app.PubMsg({ type: "get_position", ...obj }); wx.setStorage({ key: "channelData", data: res }); // 有新设备 if (app.globalData.newDeviceId) { app.globalData.newDeviceId = null; return; // 去掉此功能,先留着吧 // const other= { // "url": "", // "media_data": "", // "user_id": `${app.globalData.userInfo.deviceUid}`, // "timestamp": `${Math.round(new Date() / 1000)}`, // "channel_id": `${res[1].channelNum}`, // "order": "", // "resource_from": "", // "songAlbumID":"", // "version":3, // "is_debug": app.globalData.is_debug // }; // app.PubMsg({ // type: "play", // DstDeviceName: that.getThisDeviceID(), // other // }); } }) }, goChannel() { var that = this; wx.setStorage({ key: "channelDeta", data: that.data.channelData[that.data.actionIndex], success() { wx.navigateTo({ url: './../channelDetails/channelDetails' }) } }) }, updata() { // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 wx.getUpdateManager().applyUpdate() }, onUnload() { if (app.globalData.client === null) { return; }; app.globalData.client.end(true); app.globalData.client.end(true); app.globalData.client = null; }, onTapIndex(e) { var that = this; var index = e.currentTarget.dataset.index; var indexPage = that.data.indexPage; if (indexPage != index) { that.setData({ indexPage: index, }); } }, goMeAbout() { wx.navigateTo({ url: './../about/about', }) }, goMeLogin() { var that = this; if (that.data.isLogin) { // 退出登录 wx.removeStorage({ key: 'userInfo', success(res) { var nickName = "未登录"; var greeting = that.getGreetBuNickName(nickName); that.setData({ isLogin: false, greeting: greeting, nickName: nickName, userPic: "./../../img/head_pic.png", }); } }); wx.removeStorage({ key: 'token', }) } else { // 登录 wx.navigateTo({ url: './../login/login', }); } }, addDevice() { var that = this; if (!that.data.isLogin) { wx.navigateTo({ url: './../login/login' }); return; } that.goDeviceConnect(); }, goDeviceConnect() { wx.navigateTo({ url: './../deviceList/deviceList', }); }, ///点击item // [{"deviceId":"BLUFI_7cdfa1fcbb24","name":"BLUFI_7cdfa1fcbb24","state":"online","ProdModel":"MW-2AX(WIFI-N)","devName":"猫王小王子OTR-X"}] onTapItem(e) { var that = this; var item = e.currentTarget.dataset.item; var ProdModel = item.ProdModel; if (ProdModel == "MW-2AX(WIFI-N)") { console.log("gadfadsfadsfaf===aa"); if (e.currentTarget.dataset.index === that.data.deviceListIndex) { console.log("gadfadsfadsfaf===bbb"); that.goWake(); } else { console.log("gadfadsfadsfaf===ccc"); that.actionDevice(e.currentTarget.dataset.index) } return; } console.log(e) ///去蓝牙连接处理 if (item.state !== "online") { that.addConnectBlueDevice({ deviceId: item.deviceId, name: item.devName, state: item.state, clientType: item.ProdModel, mac: item.mac, }); } else { route_util.jumpParam('/pages/deviceDetail/detail', JSON.stringify(item)) } }, actionDevice(index) { var that = this; const device = that.data.deviceList[index]; if (device.state !== "online") { return; }; // 取消订阅 if (that.data.thisDeviceMac !== null) { app.unsubscribe(`/${that.data.thisDeviceMac}/user/pub_response`); }; that.setData({ deviceListIndex: index, thisDeviceMac: `AIrSMArT_${that.data.deviceList[index].name.split("BLUFI_")[1]}` }); // app.PubMsg({ // type: "get_dev_info", // DstDeviceName: that.getThisDeviceID() // }); that.subscribeCurrDevice(); }, goWake() { var that = this; if (that.data.deviceListIndex === null) { return; }; wx.navigateTo({ url: './../deviceWake/deviceWake?deviceId=' + that.data.deviceList[that.data.deviceListIndex].deviceId + "&clientType=" + that.data.deviceList[that.data.deviceListIndex].ProdModel, }); }, ///点击banner事件 onTapBanner() { var that = this; var item = e.currentTarget.dataset.item; }, deleteDevice(e) { var that = this; wx.showModal({ title: '确定删除?', success: function (res) { if (res.confirm) { if (that.data.deviceList[e.currentTarget.dataset.index].ProdModel != "MW-2AX(WIFI-N)") { const id = that.data.deviceList[e.currentTarget.dataset.index].deviceId; const deviceList = that.data.deviceList.filter((item, i) => { return id !== item.deviceId }); wx.setStorage({ key: "devicelist", data: JSON.stringify(deviceList), success() { that.setData({ deviceList, }); // 当前没有设备 if (deviceList.length === 0) { that.setData({ deviceListIndex: null, }); } } }); return; } const id = that.data.deviceList[e.currentTarget.dataset.index].deviceId; let name = that.data.deviceListIndex !== null ? that.data.deviceList[that.data.deviceListIndex].name : null; const deviceList = that.data.deviceList.filter((item, i) => { return id !== item.deviceId }); // 取消订阅 app.unsubscribe(`/AIrSMArT_${that.data.deviceList[e.currentTarget.dataset.index].name.split("BLUFI_")[1]}/user/pub_response`); wx.setStorage({ key: "devicelist", data: JSON.stringify(deviceList), success() { that.setData({ deviceList, thisDeviceMac: null }); // 当前没有设备 if (deviceList.length === 0) { that.setData({ actionIndex: null, deviceListIndex: null, }); } if (that.data.deviceListIndex === null) { return }; if (e.currentTarget.dataset.index === that.data.deviceListIndex) { let index_ = null; deviceList.map((v, index) => { if (v.state === "online" && index_ === null) { index_ = index; } }); if (index_ !== null) { that.actionDevice(index_); } else { that.setData({ actionIndex: null, deviceListIndex: null, }); }; } else { deviceList.map((v, index) => { if (v.name === name) { that.setData({ deviceListIndex: index, }); } }); } } }); } } }); }, // {"applicationType":"[0, 1]","deviceId":"DB:45:DD:76:42:15","img":"https://music-play.oss-cn-shenzhen.aliyuncs.com/device/20220909100711728016597.png","offlineImg":"https://music-play.oss-cn-shenzhen.aliyuncs.com/device/20220909100714667384264.png","connectImg":null,"name":"猫王音响·小王子 OTR-X","bluetoothName":"猫王音响·小王子 OTR-X","bluetoothNames":["猫王音响·小王子 OTR-X"],"isChannelsPlatforms":0,"platform":-1,"typeList":[{"is5g":0,"type":1,"connectType":1,"functionList":[1,3,6],"deviceLinkResp":{"icon1":"https://music-play.oss-cn-shenzhen.aliyuncs.com/device/20220909100644913162836.png","icon2":"https://music-play.oss-cn-shenzhen.aliyuncs.com/device/20220909100648938942906.png","icon":null,"guideUrl":null}},{"is5g":0,"type":2,"connectType":3,"functionList":[1,3],"deviceLinkResp":{"icon1":"https://music-play.oss-cn-shenzhen.aliyuncs.com/device/20230313155903515728925.png","icon2":"https://music-play.oss-cn-shenzhen.aliyuncs.com/device/20230313155910706032704.png","icon":null,"guideUrl":null}}],"clientType":"MW-2AX(WIFI)","firstVersion":"0.0.1","filter":null,"guideUrl":null,"manufacturer":"ShanJing","deviceType":0,"mac":"9b45dd76e2150000", /// deviceList /// 连接方式:bt-0,ble-1,upnp-2,mqtt-3 /// clientType // [{"deviceId":"BLUFI_7cdfa1fcbb24","name":"BLUFI_7cdfa1fcbb24","state":"online","ProdModel":"MW-2AX(WIFI-N)","devName":"猫王小王子OTR-X"}] addConnectBlueDevice(newDevice) { var that = this; // 同一个设备 var deviceList = that.data.deviceList; var tempList = deviceList.filter((v) => v.deviceId === newDevice.deviceId); if (tempList && tempList.length > 0) { deviceList = deviceList.filter((v) => v.deviceId !== newDevice.deviceId); }; deviceList.unshift({ /// 蓝牙ble连接 connectType: 1, deviceId: newDevice.deviceId, name: newDevice.deviceId, state: "online", ProdModel: newDevice.clientType, devName: newDevice.name, mac: newDevice.mac, }); var finalList = that.updateDeviceList(deviceList); var indexPage = that.data.indexPage; if (indexPage != 0) { that.setData({ indexPage: 0, deviceListIndex: 0, deviceList: finalList, }); } else { that.setData({ deviceListIndex: 0, deviceList: finalList, }); } // 更新缓存 wx.setStorage({ key: "devicelist", data: JSON.stringify(finalList) }); }, addConnectWifiDevice(deviceList) { var that = this; var finalList = that.updateDeviceList(deviceList); var indexPage = that.data.indexPage; if (indexPage != 0) { that.setData({ indexPage: 0, deviceListIndex: 0, deviceList: finalList, }); } else { that.setData({ deviceListIndex: 0, deviceList: finalList, }); } // 更新缓存 wx.setStorage({ key: "devicelist", data: JSON.stringify(finalList) }); }, updateDeviceList(deviceList) { if (deviceList.length == 0) return []; var finalList = []; finalList.push(deviceList[0]); var onLineList = []; var onNoLineList = []; for (var i = 0; i < deviceList.length; i++) { if (i > 0) { if (deviceList[i].state == "online") { onLineList.push(deviceList[i]) } else { onNoLineList.push(deviceList[i]) } } } onLineList.forEach(element => { if (element.ProdModel == "MW-2AX(WIFI-N)") { onLineList.push(element) } else { onNoLineList.push(element) } }); var onLineWifiList = []; var onLineNoWifiList = []; onNoLineList.forEach(element => { if (element.ProdModel == "MW-2AX(WIFI-N)") { onLineWifiList.push(element) } else { onLineNoWifiList.push(element) } }); finalList = finalList.concat(onLineWifiList); finalList = finalList.concat(onLineNoWifiList); var onNoLineWifiList = []; var onNoLineNoWifiList = []; onNoLineList.forEach(element => { if (element.ProdModel == "MW-2AX(WIFI-N)") { onNoLineWifiList.push(element) } else { onNoLineNoWifiList.push(element) } }); finalList = finalList.concat(onNoLineWifiList); finalList = finalList.concat(onNoLineWifiList); return finalList; }, ///******************************* 可折叠 ********************************************/// onUserInfoLoad() { var that = this; var userInfo = wx.getStorageSync("userInfo") || ""; if (!strings.isEmpty(userInfo)) { var phone = userInfo.phone; if (!phone) { return; }; var nickName = userInfo.nickname || ""; var greeting = that.getGreetBuNickName(nickName); // 获取缓存的频道数据 var channelData = wx.getStorageSync("channelData") || ""; if (!strings.isEmpty(channelData)) { that.setData({ channelData: channelData, greeting: greeting, nickName: nickName, userPic: userInfo.headUrl || "", isLogin: true, }) } else { that.setData({ greeting: greeting, nickName: nickName, userPic: userInfo.headUrl || "", isLogin: true, }); } that.getDeviceData(); } else { var greeting = that.getGreetBuNickName(""); that.setData({ greeting: greeting, }) } }, getGreetBuNickName(nickName) { var greeting = timeUtil.getGreet(); if (nickName != "" && nickName != "未登录") { greeting = greeting + ',' + nickName;; } return greeting; }, onBannerLoad() { var that = this; var bannerList = wx.getStorageSync("homeBanner") || []; if (that.data.bannerList.length == 0) { that.setData({ bannerList: bannerList }); } }, onBannerShow() { var that = this; getBanner({}).then((res) => { that.setData({ bannerList: res }); wx.setStorageSync("homeBanner", res); }) }, })