<template> <view class="page" :style="{'min-height':h+'px', 'padding-top':mt+'px'}"> <cus-header title='设备管理'></cus-header> <template v-if="list.length"> <div class="list" :style="{'height':'calc(100vh - '+(mt+100)+'px)'}"> <u-list> <u-list-item v-for="(item, index) in list" :key="index"> <device-box :item="item" @unbindSuccess="unbindSuccess"></device-box> </u-list-item> </u-list> </div> </template> <template v-else> <div class="empty adffcacjc" :style="{'height':'calc(100vh - '+(mt+100)+'px)'}"> <image src="http://106.54.209.120:8188/static/empty_device.png"></image> <p>暂无绑定设备</p> </div> </template> <div class="btns adfacjb"> <div class="zt_btn" @tap="scanBindDevice">扫码绑定设备</div> <div class="zt_btn" @tap="wifiBindDevice">配网并绑定设备</div> </div> </view> </template> <script> import deviceBox from '@/components/deviceBox/index.vue' export default { components:{ deviceBox }, data(){ return { list:[] } }, async onShow() { await this.getAgentModelList() this.getList(); }, methods:{ getAgentModelList(){ return new Promise((resolve,reject)=>{ this.$api.get('/agent/template').then(res=>{ if(res.data.code!==0) return this.$showToast(res.data.msg) if(res.data.data.length){ let map = new Map(); res.data.data.forEach(l=>{ map.set(l.systemPrompt,l) }) this.modelMap = map; } resolve() }) }) }, getList(){ this.$api.get(`/device/bind/${null}`).then(res=>{ if(res.data.code!==0) return this.$showToast(res.data.msg) this.list = res.data.data; this.list.forEach(l=>{ l.roleModelName = this.modelMap.get(l?.agent?.systemPrompt)?.agentName; }) }) }, scanBindDevice(){ let that = this; uni.scanCode({ success: (res) => { let result = JSON.parse(res.result); if(res.errMsg==='scanCode:ok'){ that.$api.post('/device/bindAdd',{ ...result, "type": "", "userId": 0, "agentId": "" }).then(res=>{ if(res.data.code!==0) return that.$showToast(res.data.msg) uni.navigateTo({ url:'/pagesMy/scanResult' }) }) } } }) }, wifiBindDevice(){ uni.navigateTo({ url:'/pagesMy/deviceAdd' }) }, unbindSuccess(){ this.getList(); } } } </script> <style scoped lang="less"> .page{ background: #FFFFFF; padding: 0 21rpx 172rpx; box-sizing: border-box; .box{ position: relative; width: calc(100% - 60rpx); background: #FFFFFF; box-shadow: 0rpx 4rpx 20rpx 0rpx rgba(0,0,0,0.04); border-radius: 32rpx; border: 1rpx solid #D9F159; box-sizing: border-box; } .list{ position: relative; ::v-deep .u-list{ width: 100%; height: 100% !important; } ::v-deep .u-list-item{ width: 100%; } .l_box{ width: 100%; padding: 49rpx 30rpx 40rpx; margin-top: 20rpx; .l_top{ .lt_l{ font-family: PingFang-SC, PingFang-SC; font-weight: bold; font-size: 32rpx; color: #111111; line-height: 40rpx; } .lt_r{ image{ width: 42rpx; height: 42rpx; margin-right: 34rpx; } .ltr_zt{ font-family: PingFangSC, PingFang SC; font-weight: 400; font-size: 26rpx; line-height: 37rpx; padding-left: 22rpx; position: relative; &::before{ content: ''; width: 12rpx; height: 12rpx; border-radius: 50%; position: absolute; left: 0; top: 50%; margin-top: -6rpx; } &.zx{ color: #1B50FF; &::before{ background: #1B50FF; } } &.lx{ color: #C7C7C7; &::before{ background: #C7C7C7; } } } } } .l_content{ border-top: 1rpx solid #E2E2E2; margin-top: 37rpx; padding-top: 36rpx; overflow: hidden; .lc_role{ .lcr_l{ width: 148rpx; height: 148rpx; border-radius: 50%; } .lcr_r{ width: calc(100% - 148rpx); padding-left: 30rpx; box-sizing: border-box; p{ font-family: PingFang-SC, PingFang-SC; font-weight: bold; font-size: 32rpx; color: #111111; line-height: 32rpx; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .text{ font-family: PingFangSC, PingFang SC; font-weight: 400; font-size: 24rpx; color: #7C8592; line-height: 24rpx; margin-top: 24rpx; } } } .lc_btns{ margin-top: 62rpx; margin-left: -1rpx; overflow: hidden; .lcb_pre{ width: calc(100% / 3); height: 37rpx; border-left: 1rpx solid #72832B; font-family: PingFang-SC, PingFang-SC; font-weight: bold; font-size: 26rpx; color: #72832B; line-height: 37rpx; text-align: center; } } } } } .empty{ image{ width: 64rpx; height: 66rpx; } p{ font-family: PingFangSC, PingFang SC; font-weight: 400; font-size: 30rpx; color: #A6A6A6; line-height: 42rpx; text-align: center; margin-top: 30rpx; } } .btns{ width: calc(100% - 60rpx); position: fixed; left: 20rpx; bottom: 64rpx; .zt_btn{ width: calc(50% - 15rpx); } } } </style>