智慧宿舍系统小程序

This commit is contained in:
qianlile
2021-07-27 21:57:03 +08:00
parent 8b2c22efe2
commit b16621221e
1290 changed files with 56513 additions and 0 deletions

View File

@@ -0,0 +1,232 @@
// miniprogram/pages/roomSystem/index.js
const { requestApi } = require('../../API/request.js');
Page({
/**
* 页面的初始数据
*/
data: {
light_power:false,
gradientColor: {
'0%': '#ffd01e',
'100%': '#ee0a24',
},
curtainShow:false,
curtainAutoChecked:true,
curtainManvalChecked:false,
curtainPowerChecked:false,
fanShow:false,
tempShow:false,
realMaxTempValue:50,
maxTempValue:0,
currentValue:0,
deviceInfo:{},
nowDeviceData:{}
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
wx.setNavigationBarTitle({
title: '智能宿舍系统',
})
this.setData({
currentValue:this.data.realMaxTempValue,
maxTempValue:this.data.realMaxTempValue
});
this.getLastPageData();
this.query();
},
//查询设备最新数据
async query(){
const res = await requestApi(`/system/status/newByNum/${this.data.deviceInfo.deviceNum}`,{ method:'GET' });
let light_power;
if (res.data.data.lightStatus === 0) {
light_power = false;
}else if (res.data.data.lightStatus === 1) {
light_power =true;
}
this.setData({
nowDeviceData:res.data.data,
light_power
})
},
getLastPageData(){
const eventChannel = this.getOpenerEventChannel();
eventChannel.on('getDeviceInfo',(data)=>{
this.setData({ deviceInfo:data })
})
},
initParams(){
// const params = {
// deviceNum: this.data.deviceInfo.deviceNum,
// relayStatus: this.data.nowDeviceData.relayStatus,
// lightStatus: this.data.nowDeviceData.lightStatus,
// isOnline: this.data.nowDeviceData.isOnline,
// rssi: this.data.nowDeviceData.rssi,
// deviceTemperature: this.data.nowDeviceData.deviceTemperature,
// airTemperature: this.data.nowDeviceData.airTemperature,
// airHumidity: this.data.nowDeviceData.airHumidity,
// triggerSource: this.data.nowDeviceData.triggerSource,
// brightness: this.data.nowDeviceData.brightness,
// lightInterval: this.data.nowDeviceData.lightInterval,
// lightMode: this.data.nowDeviceData.lightMode,
// fadeTime: this.data.nowDeviceData.fadeTime,
// red: this.data.nowDeviceData.red,
// green: this.data.nowDeviceData.green,
// blue: this.data.nowDeviceData.blue,
// other:this.data.nowDeviceData.other
// };
const params = this.data.nowDeviceData;
return params;
},
async lightPower(){
let light_power = this.data.light_power;
let lightStatus;
if (light_power === false) {
lightStatus = 1;
}else if (light_power === true) {
lightStatus = 0;
}
let params = this.initParams();
params.lightStatus = lightStatus;
const res = await requestApi(`/system/status`,{
method:'PUT',
data:params
});
console.log('lightres:',res);
if (res.data.code !== 200) {
wx.showToast({
title: '操作失败',
icon:'error'
})
return;
}
this.setData({ light_power:!light_power });
},
showCurtain(){
this.setData({
curtainShow:true
})
},
onAutoCurtainMode(){
let curtainAutoChecked = !this.data.curtainAutoChecked;
this.setData({
curtainAutoChecked:curtainAutoChecked,
curtainManvalChecked:!curtainAutoChecked
})
},
onManvalCurtainMode(){
let curtainManvalChecked = !this.data.curtainManvalChecked;
this.setData({
curtainAutoChecked:!curtainManvalChecked,
curtainManvalChecked:curtainManvalChecked
})
},
onChangeCurtainPower(){
let curtainPowerChecked = this.data.curtainPowerChecked;
if (this.data.curtainManvalChecked) {
this.setData({ curtainPowerChecked:!curtainPowerChecked })
}
},
showFan(){
this.setData({
fanShow:true
})
},
showTemp(){
this.setData({
tempShow:true
})
},
onChangeValue(e){
this.setData({ maxTempValue:e.detail,currentValue:e.detail })
},
onDrag(e){
this.setData({ currentValue:e.detail.value })
},
onCancel(){
this.setData({
maxTempValue:this.data.realMaxTempValue,
currentValue:this.data.realMaxTempValue,
tempShow:false
})
},
onMakeSure(){
this.setData({
realMaxTempValue:this.data.maxTempValue,
tempShow:false
})
},
onClose(){
this.setData({
curtainShow:false,
fanShow:false
})
this.onCancel();
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

View File

@@ -0,0 +1,11 @@
{
"usingComponents": {
"van-circle": "@vant/weapp/circle/index",
"van-popup": "@vant/weapp/popup/index",
"van-cell": "@vant/weapp/cell/index",
"van-cell-group": "@vant/weapp/cell-group/index",
"van-switch": "@vant/weapp/switch/index",
"van-slider": "@vant/weapp/slider/index",
"van-button": "@vant/weapp/button/index"
}
}

View File

@@ -0,0 +1,92 @@
<!--miniprogram/pages/roomSystem/index.wxml-->
<view class='body'>
<view class='top'>
<view class='around center power'>
<view class='power_light center' bindtap='lightPower' style='{{ light_power?"box-shadow:0 0 50rpx 20rpx #0023ff":"" }}'>
<image src='{{ light_power?"/images/power_on.png":"/images/power_off.png" }}' />
</view>
</view>
<view class='TH around center'>
<van-circle value="{{ nowDeviceData.airTemperature }}" color="{{ gradientColor }}" stroke-width="8" size="165" >
<slots>
<view class='temp_text'>温度:{{ nowDeviceData.deviceTemperature }} ℃</view>
<view class='humi_text'>湿度:{{ nowDeviceData.airHumidity }}%</view>
</slots>
</van-circle>
</view>
</view>
<view class='group'>
<view class='curtain item'>
<van-cell title="窗帘" value="{{ curtainAutoChecked?'自动':'手动' }}" size='large'
icon='/images/curtain.png' is-link bindtap='showCurtain'
border="{{ true }}" />
</view>
<view class='fan item'>
<van-cell title="风扇" size='large' value="自动"
icon='/images/fan.png' is-link border="{{ true }}" bindtap='showFan' />
</view>
<view class='temp item'>
<van-cell title="温度最大值" size='large' value="{{ realMaxTempValue }}℃"
icon='/images/temp.png'is-link border="{{ true }}" bindtap='showTemp' />
</view>
</view>
<van-popup show="{{ curtainShow }}" round position="bottom" bind:close="onClose">
<view class='choose'>
<van-cell size='large' title="自动模式">
<view slots='value'>
<van-switch checked="{{ curtainAutoChecked }}" bind:change="onAutoCurtainMode" />
</view>
</van-cell>
</view>
<view class='choose'>
<van-cell size='large' title="手动模式">
<view slots='value'>
<van-switch checked="{{ curtainManvalChecked }}" bind:change="onManvalCurtainMode" />
</view>
</van-cell>
</view>
<block wx:if='{{ curtainManvalChecked }}'>
<view class='curtain_power'>
<van-cell title="窗帘开关" title-style='color:blue;'>
<view slots='value'>
<van-switch checked="{{ curtainManvalChecked && curtainPowerChecked }}" bind:change="onChangeCurtainPower" />
</view>
</van-cell>
</view>
</block>
</van-popup>
<van-popup show="{{ fanShow }}" round custom-style="height: 30%;" position="bottom" bind:close="onClose">
<view class='choose'>
<van-cell size='large' title="自动模式">
<view slots='value'>
<van-switch checked="{{ checked }}" bind:change="onChange" />
</view>
</van-cell>
</view>
<view class='choose'>
<van-cell size='large' title="手动模式">
<view slots='value'>
<van-switch checked="{{ checked }}" bind:change="onChange" />
</view>
</van-cell>
</view>
<view class='curtain_power'>
<van-cell title="风扇开关">
<view slots='value'>
<van-switch checked="{{ checked }}" bind:change="onChange" />
</view>
</van-cell>
</view>
</van-popup>
<van-popup show="{{ tempShow }}" round position="bottom" bind:close="onClose">
<view class='tempZu'>设置温度最大值:{{ maxTempValue }}℃</view>
<view class='tempZu'>滑块当前值:{{ currentValue }}</view>
<view class='slider tempZu'>
<van-slider value="{{ maxTempValue }}" bind:change="onChangeValue" bind:drag='onDrag' />
</view>
<view class='tempZu btns'>
<van-button round color='#bfbfbf' bindtap='onCancel' block>取 消</van-button>
<van-button round type="info" bindtap='onMakeSure' block>确 定</van-button>
</view>
</van-popup>
</view>

View File

@@ -0,0 +1,63 @@
/* miniprogram/pages/roomSystem/index.wxss */
.center{
display:flex;
justify-content:center;
align-items:center;
}
.top{
display:flex;
justify-content:space-around;
margin:100rpx 0;
}
.power{
background-color:#bfbfbf;
}
.around{
width:300rpx;
height:300rpx;
border-radius:50%;
}
.power_light:active{
background-color:#eee;
}
.power_light{
width:230rpx;
height:230rpx;
border-radius:50%;
background-color:#fff;
}
.power_light>image{
width:70rpx;
height:70rpx;
border-radius:50%;
}
.temp_text{
font-size:46rpx;
margin:15rpx 0;
}
.group{
width:90%;
margin:30rpx auto;
}
.item{
margin:25rpx 0;
width:100%;
}
.choose{
margin:15rpx 0;
}
.tempZu{
width:80%;
margin:35rpx auto;
}
.slider{
margin:70rpx auto;
}
.btns{
display:flex;
justify-content:space-around;
}
van-button{
width:200rpx;
}