import dxui from '../../dxmodules/dxUi.js' import std from '../../dxmodules/dxStd.js' import bus from '../../dxmodules/dxEventBus.js' import viewUtils from "./viewUtils.js" import mainView from './mainView.js' import wechatNetView from './wechatNetView.js' import networkSettingView from './config/menu/networkSettingView.js' import configView from './config/configView.js' import common from '../../dxmodules/dxCommon.js' import topView from './topView.js' import screen from '../screen.js' const wechatBindView = {} // 全局标志-判断二维码是否获取成功 let qrCodeGetSuccess = false wechatBindView.init = function () { /**************************************************创建屏幕*****************************************************/ const screenMain = dxui.View.build('wechatBindView', dxui.Utils.LAYER.MAIN) wechatBindView.screenMain = screenMain screenMain.scroll(false) screenMain.bgColor(0xffffff) screenMain.on(dxui.Utils.ENUM.LV_EVENT_SCREEN_LOADED, () => { topView.changeTheme(true) }) // 企业微信图标 const wechatImg = dxui.Image.build('wechatBindImg', screenMain) wechatImg.source(screen.resourcePath.imagePath + '/wechat.png') wechatImg.align(dxui.Utils.ALIGN.TOP_MID, 0, screen.screenSize.height * (150 / 1024)) // 绑定设备提示标签 const bindDeviceLbl = dxui.Label.build('bindDeviceLbl', screenMain) wechatBindView.bindDeviceLbl = bindDeviceLbl bindDeviceLbl.text('正在获取企微绑定二维码') bindDeviceLbl.textFont(viewUtils.font(30)) bindDeviceLbl.align(dxui.Utils.ALIGN.TOP_MID, 0, screen.screenSize.height * (500 / 1024)) bindDeviceLbl.dataI18n = 'wechatBindView.getQrCode' wechatBindView.statusPanel = viewUtils.statusPanel(screenMain, 'wechatBindView.success', 'wechatBindView.fail') const wechatBindBox = dxui.View.build('wechatBindBox', screenMain) viewUtils._clearStyle(wechatBindBox) wechatBindBox.width(screen.screenSize.width) wechatBindBox.height(screen.screenSize.height * (70 / 1024)) wechatBindBox.bgOpa(0) wechatBindBox.clickable(false) wechatBindBox.flexFlow(dxui.Utils.FLEX_FLOW.ROW) wechatBindBox.flexAlign(dxui.Utils.FLEX_ALIGN.SPACE_BETWEEN, dxui.Utils.FLEX_ALIGN.CENTER, dxui.Utils.FLEX_ALIGN.CENTER) wechatBindBox.align(dxui.Utils.ALIGN.BOTTOM_MID, 0, 0) // 企业微信SN标签 const wechatSnBox = dxui.View.build('wechatBindSnBox', wechatBindBox) viewUtils._clearStyle(wechatSnBox) wechatSnBox.width(screen.screenSize.width / 2) wechatSnBox.height(screen.screenSize.height * (70 / 1024)) wechatSnBox.padLeft(screen.screenSize.width * (38 / 600)) wechatSnBox.bgOpa(0) wechatSnBox.clickable(false) wechatSnBox.flexFlow(dxui.Utils.FLEX_FLOW.ROW) wechatSnBox.flexAlign(dxui.Utils.FLEX_ALIGN.START, dxui.Utils.FLEX_ALIGN.CENTER, dxui.Utils.FLEX_ALIGN.CENTER) const wechatSnLbl = dxui.Label.build('wechatBindSnLbl', wechatSnBox) wechatSnLbl.textFont(viewUtils.font(20)) wechatSnLbl.text("SN: " + screen.getConfig()["sys.sn"]) wechatSnLbl.textColor(0x2e2e2e) // 企业微信IP标签 const wechatIpBox = dxui.View.build('wechatBindIpBox', wechatBindBox) viewUtils._clearStyle(wechatIpBox) wechatIpBox.width(screen.screenSize.width / 2) wechatIpBox.height(screen.screenSize.height * (70 / 1024)) wechatIpBox.padRight(screen.screenSize.width * (23 / 600)) wechatIpBox.bgOpa(0) wechatIpBox.clickable(false) wechatIpBox.flexFlow(dxui.Utils.FLEX_FLOW.ROW) wechatIpBox.flexAlign(dxui.Utils.FLEX_ALIGN.END, dxui.Utils.FLEX_ALIGN.CENTER, dxui.Utils.FLEX_ALIGN.CENTER) const wechatIpLbl = dxui.Label.build('wechatBindIpLbl', wechatIpBox) wechatBindView.wechatIpLbl = wechatIpLbl wechatIpLbl.textFont(viewUtils.font(20)) wechatIpLbl.text("IP: " + screen.getConfig()["net.ip"]) wechatIpLbl.textColor(0x2e2e2e) bus.on("showQrCode", wechatBindView.showQrCode) bus.on("weComIsBind", wechatBindView.weComIsBind) } wechatBindView.getQrCode = function () { wechatBindView.timer = std.setInterval(() => { let netIsConnected = screen.driver.net.isConnected() if (netIsConnected && !qrCodeGetSuccess) { let payload = screen.mqttReply(std.genRandomStr(10), { type: 0 }, screen.MQTT_CODE.S_000) payload.uuid = payload.uuid.toUpperCase() screen.driver.mqtt.send("access_device/v2/event/wecom", JSON.stringify(payload)) }else if(!netIsConnected){ // 网络连接失败, MQTT连接失败, 请检查网络连接, 跳转到企业微信网络配置页面 wechatNetView.netConfigLbl.text('请先连接网络') wechatNetView.timerCreate() std.clearInterval(wechatBindView.timer) wechatBindView.timer = null dxui.loadMain(wechatNetView.screenMain) } }, 1000) } // 企业微信 wechatBindView.showQrCode = function (data) { if (data) { // 如果企微绑定状态不一致,则更新企微绑定状态 if(screen.weCom.getStatus() !== data.status){ screen.saveConfig({ sys: { weComStatus: data.status } }) if(data.status === 0){ // 说明设备已解绑 // 删除凭证、人员、权限、人脸 screen.deleteAll() screen.driver.face.clean() wechatNetView.timerCreate() // 跳转到企业微信网络配置页面 dxui.loadMain(wechatNetView.screenMain) }else{ // 说明设备已经绑定(这个时候因为是状态对齐,因此就不需要播报绑定成功语音了) wechatBindView.success() } return } wechatBindView.bindDeviceLbl.text('请使用企业微信扫码绑定设备') wechatBindView.bindDeviceLbl.dataI18n = 'wechatBindView.bindDevice' // 设备绑定二维码 if (!wechatBindView.qrcode) { const qrcode = dxui.View.build('wechatQrCode', wechatBindView.screenMain) wechatBindView.qrcode = qrcode viewUtils._clearStyle(qrcode) qrcode.setSize(screen.screenSize.width * (255 / 600), screen.screenSize.height * (255 / 1024)) qrcode.align(dxui.Utils.ALIGN.TOP_MID, 0, screen.screenSize.height * (550 / 1024)); const qrcodeObj = dxui.Utils.GG.NativeBasicComponent.lvQrcodeCreate(qrcode.obj, screen.screenSize.width * (255 / 600), 0x000000, 0xffffff) wechatBindView.qrcodeObj = qrcodeObj dxui.Utils.GG.NativeBasicComponent.lvQrcodeUpdate(wechatBindView.qrcodeObj, data.bindQr) qrCodeGetSuccess = true } // 保存绑定状态 screen.saveConfig( { sys: { weComStatus: data.status } } ) } } // 远程控制-接收企业微信绑定状态通知 wechatBindView.weComIsBind = function (event) { if (event) { let data = event.data.extra let payload = screen.mqttReply(event.serialNo, null, screen.MQTT_CODE.S_000) payload.uuid = payload.uuid.toUpperCase() payload.message = "success" if (screen.weCom.isWeCom() && screen.weCom.getStatus() === 1 && data.weComStatus === 1) { // 如果设备当前是绑定状态,且通知是绑定,则跳转到人脸识别页面 wechatBindView.success() } else if (screen.weCom.isWeCom() && screen.weCom.getStatus() === 1 && data.weComStatus === 0) { // 如果设备当前是绑定状态,且通知是解绑,则删除凭证、人脸,然后跳转到企业微信网络配置页面 screen.saveConfig({ sys: { weComStatus: data.weComStatus } }) // 删除凭证、人员、权限、人脸 screen.deleteAll() screen.driver.face.clean() wechatNetView.timerCreate() // 跳转到企业微信网络配置页面 dxui.loadMain(wechatNetView.screenMain) } else if (screen.weCom.isWeCom() && screen.weCom.getStatus() === 0 && data.weComStatus === 0) { // 如果设备当前是未绑定状态,且通知是未绑定,则跳转到企微绑定页面 screen.saveConfig({ sys: { weComStatus: data.weComStatus } }) wechatNetView.timerCreate() dxui.loadMain(wechatNetView.screenMain) } else if (screen.weCom.isWeCom() && screen.weCom.getStatus() === 0 && data.weComStatus === 1) { screen.saveConfig({ sys: { weComStatus: data.weComStatus } }) wechatBindView.success() }else{ payload.code = screen.MQTT_CODE.E_100 payload.message = "failed" } screen.driver.mqtt.send("access_device/v2/cmd/control_reply", JSON.stringify(payload)) } } wechatBindView.success = function () { screen.driver.audio.ttsPlay("绑定成功") wechatBindView.statusPanel.success() std.clearInterval(wechatBindView.timer) wechatBindView.timer = null networkSettingView.screenMain.backScreen = configView.screenMain networkSettingView.screenMain.titleBox.backScreen = configView.screenMain std.setTimeout(() => { // 如果设备当前是未绑定状态,且通知是绑定,则跳转到人脸识别页面 dxui.loadMain(mainView.screenMain) }, 3000) } export default wechatBindView