From 5bce23414a209e93145da0243917f85b5d57ba6f Mon Sep 17 00:00:00 2001 From: zmt Date: Wed, 14 Jul 2021 18:28:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=85=A7=E6=98=8E=E5=AE=9A=E6=97=B6=E4=B8=AD?= =?UTF-8?q?=E6=8E=A7=E8=AE=BE=E7=BD=AE1/2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages.json | 8 +- .../device/components/store_name/store_name.vue | 2 +- src/subpackage/device/js/device_api.js | 2 +- src/subpackage/device/js/ouxuanac.md | 37 ++- src/subpackage/device/pages/index/index.vue | 8 +- src/subpackage/device/pages/index/timing_list.vue | 336 -------------------- .../device/pages/switch_manage/switch_manage.vue | 55 +++- src/subpackage/device/pages/timing/timing_list.vue | 332 ++++++++++++++++++++ .../device/pages/timing/timing_setting.vue | 347 +++++++++++++++++++++ src/subpackage/device/static/images/longOpen.png | Bin 0 -> 6449 bytes src/subpackage/device/static/images/timing.png | Bin 0 -> 5203 bytes 11 files changed, 760 insertions(+), 367 deletions(-) delete mode 100644 src/subpackage/device/pages/index/timing_list.vue create mode 100644 src/subpackage/device/pages/timing/timing_list.vue create mode 100644 src/subpackage/device/pages/timing/timing_setting.vue create mode 100644 src/subpackage/device/static/images/longOpen.png create mode 100644 src/subpackage/device/static/images/timing.png diff --git a/src/pages.json b/src/pages.json index 23cf4a7..13048ac 100644 --- a/src/pages.json +++ b/src/pages.json @@ -221,12 +221,18 @@ } }, { - "path": "pages/index/timing_list", + "path": "pages/timing/timing_list", "style" : { "navigationBarTitleText": "定时列表" } }, { + "path": "pages/timing/timing_setting", + "style" : { + "navigationBarTitleText": "定时设置" + } + }, + { "path": "pages/switch_manage/switch_manage", "style" : { "navigationBarTitleText": "管理" diff --git a/src/subpackage/device/components/store_name/store_name.vue b/src/subpackage/device/components/store_name/store_name.vue index 1624b6d..4dfc364 100644 --- a/src/subpackage/device/components/store_name/store_name.vue +++ b/src/subpackage/device/components/store_name/store_name.vue @@ -23,7 +23,7 @@ export default { return ()=> {return (this.theme=='light')?'#FFFFFF':'#1a1a1a';} }, getThemeBg(){ - return ()=> {return (this.theme=='light')?'none':'#FFFFFF';} + return ()=> {return (this.theme=='light')?'none':'none';} // }, }, props: ["theme"],//定义主题字段,定制组件展示效果 "light":亮色 diff --git a/src/subpackage/device/js/device_api.js b/src/subpackage/device/js/device_api.js index d6512ff..a0c3758 100644 --- a/src/subpackage/device/js/device_api.js +++ b/src/subpackage/device/js/device_api.js @@ -48,7 +48,7 @@ export const DEVICE_API = { //2021/0713 acUpdate:`${ORIGIN}/ouxuanac/getDescribeDevice`, //中控在线状态查询 - delInfoAC:`${ORIGIN}/ouxuanac/getDescribeDevice`, //删除状态 + // delInfoAC:`${ORIGIN}/ouxuanac/getDescribeDevice`, //删除状态 } export default DEVICE_API; \ No newline at end of file diff --git a/src/subpackage/device/js/ouxuanac.md b/src/subpackage/device/js/ouxuanac.md index 6c9ba2c..78b4066 100644 --- a/src/subpackage/device/js/ouxuanac.md +++ b/src/subpackage/device/js/ouxuanac.md @@ -328,20 +328,39 @@ https://test.ouxuanzhineng.cn/ouxuanac/tts/textToVoice.wav?text=试试看&voice_ ### 更新定时列表 sendPacket ``` 请求参数 -let _data = { - "device": this.curStoreInfo.device_name, - "data": { - "name": "audio-player", - "value": { - "url": _url - } - }, - // "token": "f0d5c19b-b87e-11eb-bc7d-5254005df464" +{ + "device": "00-10-7a-0f-6d-7a", + "data": { + "name": "get-time-select", + "value": {} + } } 返回: {"code":0,"data":[{"date_slice":[{"end":"","start":""}],"day_of_month":null,"day_of_week":[0,1,2,3,5,4,6],"expand_tags":null,"expand_value":{"main":{"name":"set-rpio","title":"测试中控照明8","value":{"id":"8","status":"low"}}},"extension":null,"group":"RPIO","time_arrow_id":"7d56981c-8dd4-11eb-9aad-4e965989bbce","times_on_day":["10:12:00-10:12:10"],"type":"DAY_OF_WEEK","weights":0},{"date_slice":[{"end":"","start":""}],"day_of_month":null,"day_of_week":[0,1,2,3,6,5,4],"expand_tags":null,"expand_value":{"main":{"name":"set-rpio","title":"测试中控照明9","value":{"id":"9","status":"low"}}},"extension":null,"group":"RPIO","time_arrow_id":"862813af-8dd4-11eb-9aad-4e965989bbce","times_on_day":["10:12:00-10:12:10"],"type":"DAY_OF_WEEK","weights":0},{"date_slice":[{"end":"","start":""}],"day_of_month":null,"day_of_week":[0,4,1,5,2,6,3],"expand_tags":null,"expand_value":{"main":{"name":"set-rpio","title":"测试中控照明10","value":{"id":"10","status":"low"}}},"extension":null,"group":"RPIO","time_arrow_id":"8def57e1-8dd4-11eb-9aad-4e965989bbce","times_on_day":["10:12:00-10:12:10"],"type":"DAY_OF_WEEK","weights":0},{"date_slice":[{"end":"","start":""}],"day_of_month":null,"day_of_week":[0,1,2,3,6,5,4],"expand_tags":null,"expand_value":{"main":{"name":"set-rpio","title":"测试中控照明8","value":{"id":"8","status":"high"}}},"extension":null,"group":"RPIO","time_arrow_id":"be5eb915-8dd4-11eb-9aad-4e965989bbce","times_on_day":["10:13:00-10:13:10"],"type":"DAY_OF_WEEK","weights":0},{"date_slice":[{"end":"","start":""}],"day_of_month":null,"day_of_week":[0,1,2,3,6,5,4],"expand_tags":null,"expand_value":{"main":{"name":"set-rpio","title":"测试中控照明9","value":{"id":"9","status":"high"}}},"extension":null,"group":"RPIO","time_arrow_id":"c8c39f5c-8dd4-11eb-9aad-4e965989bbce","times_on_day":["10:13:00-10:13:10"],"type":"DAY_OF_WEEK","weights":0}],"message":""} ``` +### 删除定时任务 sendPacket +``` +请求参数 +{ + "device": "00-10-7a-0f-6d-7a", + "delay": 1, + "data": { + "name": "delete-time-select", + "value": { + "uuid": "d185c9f8-8dd4-11eb-9aad-4e965989bbce" + } + } +} + + devicePlatform + ios + deviceIdentifier + 00008027-000D452836E8002E + audo-0714-01 + iPad-Pro3-12.9-inch1 + +``` diff --git a/src/subpackage/device/pages/index/index.vue b/src/subpackage/device/pages/index/index.vue index 794b5d4..33ce34a 100644 --- a/src/subpackage/device/pages/index/index.vue +++ b/src/subpackage/device/pages/index/index.vue @@ -50,8 +50,12 @@ const tabArr = [ {id: 11, name: '水阀', path: `/pages/switch_manage/switch_manage`}, {id: 12, name: '互动设备', path: `/pages/switch_manage/switch_manage`}, {id: 13, name: '监控', path: ``}, - {id: 14, name: '音响', path: `/pages/audio_manage/audio_manage`}, + {id: 14, name: '音响', path: `/pages/audio_manage/audio_manage`}, //audio_manage {id: 15, name: '机器人', path: ``}, + {id: 16, name: '租球机', path: ``}, + {id: 17, name: '窗帘', path: ``}, + {id: 18, name: '路由器', path: ``}, + {id: 19, name: '物联卡', path: ``}, ]; import { mapState } from 'vuex' export default { @@ -118,7 +122,7 @@ export default { }) }, goTimingList(){ - let timing_list = "/subpackage/device/pages/index/timing_list" + let timing_list = "/subpackage/device/pages/timing/timing_list" util.routeTo(`${timing_list}`, 'nT'); }, getImgPath(id){ diff --git a/src/subpackage/device/pages/index/timing_list.vue b/src/subpackage/device/pages/index/timing_list.vue deleted file mode 100644 index 5aef1fb..0000000 --- a/src/subpackage/device/pages/index/timing_list.vue +++ /dev/null @@ -1,336 +0,0 @@ - - - - - diff --git a/src/subpackage/device/pages/switch_manage/switch_manage.vue b/src/subpackage/device/pages/switch_manage/switch_manage.vue index 283cc1d..347a4fa 100644 --- a/src/subpackage/device/pages/switch_manage/switch_manage.vue +++ b/src/subpackage/device/pages/switch_manage/switch_manage.vue @@ -2,8 +2,9 @@ {{pageInfo.name || '-'}} + - + @@ -19,14 +20,22 @@ - + {{pageInfo.openName || '-'}} - + {{pageInfo.closeName || '-'}} + + + {{pageInfo.longOpenName || '-'}} + + + + {{pageInfo.timingName || '-'}} + @@ -42,52 +51,52 @@ import deviceServer from '../../js/device_server'; import deviceApi from '../../js/device_api'; const showArr = { 's1': { - id: 1, name: '照明管理', isOpen: true, isClose: true, - openIcon: '/subpackage/device/static/images/open.png', - closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关', hardware_type: 'Light' + id: 1, name: '照明管理', isOpen: true, isClose: true, isLongOpen:true, isTiming:true, + openIcon: '/subpackage/device/static/images/open.png',closeIcon: '/subpackage/device/static/images/close.png', + longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png', + openName: '开', closeName: '关', longOpenName: '长按', timingName: '定时', hardware_type: 'Light',iconNum:4 }, 's2': { id: 2, name: '空调管理', isOpen: true, isClose: true, openIcon: '/subpackage/device/static/images/open.png', closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关', hardware_type: 'Air' + openName: '开', closeName: '关', hardware_type: 'Air',iconNum:2 }, 's3': { id: 3, name: '风扇管理', isOpen: true, isClose: true, openIcon: '/subpackage/device/static/images/open.png', closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关', hardware_type: 'Fan' + openName: '开', closeName: '关', hardware_type: 'Fan',iconNum:2 }, 's4': { id: 4, name: '门禁管理', isOpen: true, isClose: false, openIcon: '/subpackage/device/static/images/open.png', closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关', hardware_type: 'AccessControl' + openName: '开', closeName: '关', hardware_type: 'AccessControl',iconNum:2 }, 's5': { id: 5, name: '门闸管理', isOpen: true, isClose: true, openIcon: '/subpackage/device/static/images/in.png', closeIcon: '/subpackage/device/static/images/out.png', - openName: '进', closeName: '出', hardware_type: 'GateControl' + openName: '进', closeName: '出', hardware_type: 'GateControl',iconNum:2 }, 's6': { id: 6, name: '平板管理', isOpen: false, isClose: false, openIcon: '/subpackage/device/static/images/open.png', closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关', hardware_type: '' + openName: '开', closeName: '关', hardware_type: '',iconNum:2 }, 's11': { id: 11, name: '水阀管理', isOpen: true, isClose: true, openIcon: '/subpackage/device/static/images/open.png', closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关', hardware_type: 'WaterValve' + openName: '开', closeName: '关', hardware_type: 'WaterValve',iconNum:2 }, 's12': { id: 12, name: '互动设备管理', isOpen: true, isClose: true, openIcon: '/subpackage/device/static/images/open.png', closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关', hardware_type: '' + openName: '开', closeName: '关', hardware_type: '',iconNum:2 }, } @@ -101,7 +110,12 @@ export default { computed: { ...mapState({ curStoreInfo: state => state.device.curStoreInfo, - }) + }), + getIconWidth(){//计算操作icon的宽度 + return ()=>{ + return 100/this.pageInfo.iconNum+'%' + } + } }, watch: { curStoreInfo(newVal, oldVal){ @@ -156,9 +170,16 @@ export default { .catch(util.hideLoad) }, - // 按钮操作, status 0 -> 关(左), 1 -> 开(右) + // 按钮操作, status 0 -> 关(左), 1 -> 开(右) ,2 -> 长开 ,3 -> 定时 operateBtn: util.debounce(function({ switchInfo, status }){ - + console.log("icon tap status: ",status,switchInfo) + if(status == 2) return util.showNone("未对接,前端等待接口中...") + if(status == 3) return (()=>{ + let timing_setting = `/subpackage/device/pages/timing/timing_setting?opts=1` + util.routeTo(`${timing_setting}`, 'nT'); + })() + //todo 配置page.json ,写新的setting 页 + let _data = this.getOperateReqData({ switchInfo, status }) //针对门禁没有关按钮发两条命令->开&关 20201224 后端: 直接发两条 关的那条这里填5 然后你那边不用管返回 if(switchInfo.hardware_type === 'AccessControl'&&status == 1){ diff --git a/src/subpackage/device/pages/timing/timing_list.vue b/src/subpackage/device/pages/timing/timing_list.vue new file mode 100644 index 0000000..ff3541d --- /dev/null +++ b/src/subpackage/device/pages/timing/timing_list.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/subpackage/device/pages/timing/timing_setting.vue b/src/subpackage/device/pages/timing/timing_setting.vue new file mode 100644 index 0000000..101fa5f --- /dev/null +++ b/src/subpackage/device/pages/timing/timing_setting.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/src/subpackage/device/static/images/longOpen.png b/src/subpackage/device/static/images/longOpen.png new file mode 100644 index 0000000000000000000000000000000000000000..7e292bb56b3e3ad00728e8c26822bec5c888c268 GIT binary patch literal 6449 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 N002ovPDHLkV1k5`6*B+; literal 0 HcmV?d00001