柒零 vor 1 Jahr
Ursprung
Commit
2825711296
100 geänderte Dateien mit 9958 neuen und 9250 gelöschten Zeilen
  1. 20 0
      .vscode/settings.json
  2. 111 1
      @vant/weapp/picker/index.wxss
  3. 12 5
      app.js
  4. 51 58
      app.json
  5. 8 5
      app.wxss
  6. 58 0
      custom-tab-bar/index.js
  7. 3 0
      custom-tab-bar/index.json
  8. 33 0
      custom-tab-bar/index.wxml
  9. 94 0
      custom-tab-bar/index.wxss
  10. 177 34
      ec-canvas/ec-canvas.js
  11. 4 3
      ec-canvas/ec-canvas.wxml
  12. 0 21
      ec-canvas/echarts.js
  13. 83 16
      ec-canvas/wx-canvas.js
  14. 6 0
      jsconfig.json
  15. 4270 3879
      pages/data/data.js
  16. 4 2
      pages/data/data.json
  17. 527 416
      pages/data/data.wxml
  18. 1395 1143
      pages/data/data.wxss
  19. 756 961
      pages/index/index.js
  20. 4 3
      pages/index/index.json
  21. 347 284
      pages/index/index.wxml
  22. 573 364
      pages/index/index.wxss
  23. 2 1
      pages/scan/scan.json
  24. 13 7
      pages/scan/scan.wxml
  25. 87 61
      pages/scan/scan.wxss
  26. 66 0
      pages/shop/shop.js
  27. 3 0
      pages/shop/shop.json
  28. 2 0
      pages/shop/shop.wxml
  29. 4 0
      pages/shop/shop.wxss
  30. 0 428
      pages/sleepEvaluation/sleepEvaluation.js
  31. 0 4
      pages/sleepEvaluation/sleepEvaluation.json
  32. 0 151
      pages/sleepEvaluation/sleepEvaluation.wxml
  33. 0 118
      pages/sleepEvaluation/sleepEvaluation.wxss
  34. 0 66
      pages/test/test.js
  35. 0 2
      pages/test/test.wxml
  36. 16 666
      pages/testSAS/testSAS.js
  37. 4 1
      pages/testSAS/testSAS.json
  38. 15 174
      pages/testSAS/testSAS.wxml
  39. 36 368
      pages/testSAS/testSAS.wxss
  40. 0 1
      project.config.json
  41. 53 7
      project.private.config.json
  42. BIN
      static/bg/ic_gyms.png
  43. BIN
      static/bg/ic_gyms_bg.png
  44. BIN
      static/bg/ic_qcms.png
  45. BIN
      static/bg/ic_qcms_bg.png
  46. BIN
      static/bg/ic_smms.png
  47. BIN
      static/bg/ic_smms_bg.png
  48. 41 0
      static/icons/ic_add.svg
  49. 17 0
      static/icons/ic_auto_1.svg
  50. 17 0
      static/icons/ic_auto_2.svg
  51. 64 0
      static/icons/ic_cl_1.svg
  52. 17 0
      static/icons/ic_cl_2.svg
  53. 17 0
      static/icons/ic_cold_1.svg
  54. 17 0
      static/icons/ic_cold_2.svg
  55. 34 0
      static/icons/ic_dd_1.svg
  56. 22 0
      static/icons/ic_dd_2.svg
  57. 38 0
      static/icons/ic_dialog_close.svg
  58. 35 0
      static/icons/ic_ds_1.svg
  59. 66 0
      static/icons/ic_hot_1.svg
  60. 66 0
      static/icons/ic_hot_2.svg
  61. 42 0
      static/icons/ic_humidity.svg
  62. 32 0
      static/icons/ic_kqjhq_1.svg
  63. 22 0
      static/icons/ic_kqjhq_2.svg
  64. 38 0
      static/icons/ic_minus.svg
  65. 34 0
      static/icons/ic_moisture_1.svg
  66. 34 0
      static/icons/ic_moisture_2.svg
  67. 10 0
      static/icons/ic_output_air.svg
  68. 36 0
      static/icons/ic_power.svg
  69. 34 0
      static/icons/ic_power_off.svg
  70. 20 0
      static/icons/ic_pqs_1.svg
  71. 17 0
      static/icons/ic_pqs_2.svg
  72. 17 0
      static/icons/ic_scan.svg
  73. 19 0
      static/icons/ic_td_1.svg
  74. 13 0
      static/icons/ic_td_2.svg
  75. 19 0
      static/icons/ic_temperature.svg
  76. 15 0
      static/icons/ic_wind_1.svg
  77. 15 0
      static/icons/ic_wind_2.svg
  78. 23 0
      static/icons/ic_xxj.svg
  79. 53 0
      static/icons/ic_xxjwh.svg
  80. 30 0
      static/icons/ic_zd_1.svg
  81. 20 0
      static/icons/ic_zd_2.svg
  82. 82 0
      static/icons/ic_zld_1.svg
  83. 45 0
      static/icons/ic_zld_2.svg
  84. BIN
      static/images/alarm.png
  85. BIN
      static/images/hum.png
  86. BIN
      static/images/ic_light_button_bg.png
  87. BIN
      static/images/ic_phone_bg.png
  88. BIN
      static/images/ic_scan_bg.png
  89. BIN
      static/images/ic_test_a.png
  90. BIN
      static/images/ic_test_abg.png
  91. BIN
      static/images/ic_test_b.png
  92. BIN
      static/images/ic_test_bbg.png
  93. BIN
      static/images/ic_top_bg.png
  94. BIN
      static/images/led.png
  95. BIN
      static/images/light.png
  96. BIN
      static/images/report/pingjun_huxilv_new.png
  97. BIN
      static/images/report/pingjun_xinlv_new.png
  98. BIN
      static/images/report/shangchuang_shijian_new.png
  99. BIN
      static/images/report/shenshui_shichang_new.png
  100. BIN
      static/images/report/shuimian_xiaolv_big_new.png

+ 20 - 0
.vscode/settings.json

@@ -0,0 +1,20 @@
+{
+    "minapp-vscode.wxmlFormatter":"prettier",// wxml格式化插件
+    "minapp-vscode.prettier":{//prettier配置
+      "useTabs":false,//tab缩进
+      "tabWidth":2, //tab宽度
+      "printWidth":80,//换行宽度
+      "singleQuote":false,//单引号
+      "jsxBracketSameLine":true
+    },
+    "[wxml]":{//wxml格式化
+      "editor.defaultFormatter":"wechat.miniprogram.wxml-language-features"//wxml格式化插件
+    },
+    "minapp-vscode.formatMaxLineCharacters": 80,
+    "files.associations": {
+        "*.cjson": "jsonc",
+        "*.wxss": "css",
+        "*.wxs": "javascript",
+        "*.wxml": "html"
+    } //换行宽度
+}

+ 111 - 1
@vant/weapp/picker/index.wxss

@@ -1 +1,111 @@
-@import '../common/index.wxss';.van-picker{position:relative;overflow:hidden;-webkit-text-size-adjust:100%;-webkit-user-select:none;user-select:none;background-color:#fff;background-color:var(--picker-background-color,#fff)}.van-picker__toolbar{display:-webkit-flex;display:flex;-webkit-justify-content:space-between;justify-content:space-between;height:44px;height:var(--picker-toolbar-height,44px);line-height:44px;line-height:var(--picker-toolbar-height,44px)}.van-picker__cancel,.van-picker__confirm{padding:0 16px;padding:var(--picker-action-padding,0 16px);font-size:14px;font-size:var(--picker-action-font-size,14px)}.van-picker__cancel--hover,.van-picker__confirm--hover{opacity:.7}.van-picker__confirm{color:#576b95;color:var(--picker-confirm-action-color,#576b95)}.van-picker__cancel{color:#969799;color:var(--picker-cancel-action-color,#969799)}.van-picker__title{max-width:50%;text-align:center;font-weight:500;font-weight:var(--font-weight-bold,500);font-size:16px;font-size:var(--picker-option-font-size,16px)}.van-picker__columns{position:relative;display:-webkit-flex;display:flex}.van-picker__column{-webkit-flex:1 1;flex:1 1;width:0}.van-picker__loading{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;background-color:hsla(0,0%,100%,.9);background-color:var(--picker-loading-mask-color,hsla(0,0%,100%,.9))}.van-picker__mask{top:0;left:0;z-index:2;width:100%;height:100%;background-image:linear-gradient(180deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.4)),linear-gradient(0deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.4));background-repeat:no-repeat;background-position:top,bottom;-webkit-backface-visibility:hidden;backface-visibility:hidden}.van-picker__frame,.van-picker__mask{position:absolute;pointer-events:none}.van-picker__frame{top:50%;right:16px;left:16px;z-index:1;-webkit-transform:translateY(-50%);transform:translateY(-50%)}
+@import '../common/index.wxss';
+
+.van-picker {
+    position: relative;
+    overflow: hidden;
+    -webkit-text-size-adjust: 100%;
+    -webkit-user-select: none;
+    user-select: none;
+    background-color: #fff;
+    background-color: var(--picker-background-color, #fff)
+}
+
+.van-picker__toolbar {
+    display: -webkit-flex;
+    display: flex;
+    -webkit-justify-content: space-between;
+    justify-content: space-between;
+    height: 44px;
+    height: var(--picker-toolbar-height, 44px);
+    line-height: 44px;
+    line-height: var(--picker-toolbar-height, 44px)
+}
+
+.van-picker__cancel,
+.van-picker__confirm {
+    padding: 0 16px;
+    padding: var(--picker-action-padding, 0 16px);
+    font-size: 14px;
+    font-size: var(--picker-action-font-size, 14px)
+}
+
+.van-picker__cancel--hover,
+.van-picker__confirm--hover {
+    opacity: .7
+}
+
+.van-picker__confirm {
+    color: #576b95;
+    color: var(--picker-confirm-action-color, #576b95)
+}
+
+.van-picker__cancel {
+    color: #969799;
+    color: var(--picker-cancel-action-color, #969799)
+}
+
+.van-picker__title {
+    max-width: 50%;
+    text-align: center;
+    font-weight: 500;
+    font-weight: var(--font-weight-bold, 500);
+    font-size: 16px;
+    font-size: var(--picker-option-font-size, 16px)
+}
+
+.van-picker__columns {
+    position: relative;
+    display: -webkit-flex;
+    display: flex
+}
+
+.van-picker__column {
+    -webkit-flex: 1 1;
+    flex: 1 1;
+    width: 0
+}
+
+.van-picker__loading {
+    position: absolute;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    z-index: 4;
+    display: -webkit-flex;
+    display: flex;
+    -webkit-align-items: center;
+    align-items: center;
+    -webkit-justify-content: center;
+    justify-content: center;
+    background-color: hsla(0, 0%, 100%, .9);
+    background-color: var(--picker-loading-mask-color, hsla(0, 0%, 100%, .9))
+}
+
+.van-picker__mask {
+    top: 0;
+    left: 0;
+    z-index: 2;
+    width: 100%;
+    height: 100%;
+    background-image: linear-gradient(180deg, hsla(0, 0%, 100%, .9), hsla(0, 0%, 100%, .4)), linear-gradient(0deg, hsla(0, 0%, 100%, .9), hsla(0, 0%, 100%, .4));
+    background-repeat: no-repeat;
+    background-position: top, bottom;
+    -webkit-backface-visibility: hidden;
+    backface-visibility: hidden
+}
+
+.van-picker__frame,
+.van-picker__mask {
+    position: absolute;
+    pointer-events: none
+}
+
+.van-picker__frame {
+    top: 50%;
+    right: 16px;
+    left: 16px;
+    z-index: 1;
+    -webkit-transform: translateY(-50%);
+    transform: translateY(-50%)
+}

+ 12 - 5
app.js

@@ -1,11 +1,15 @@
+
+
 // app.js
 App({
   onLaunch() {
+    wx.hideTabBar()
     // 展示本地存储能力
-    const logs = wx.getStorageSync('logs') || []
-    logs.unshift(Date.now())
-    wx.setStorageSync('logs', logs)
-
+    // const logs = wx.getStorageSync('logs') || []
+    // logs.unshift(Date.now())
+    // wx.setStorageSync('logs', logs)
+    // this.globalData.selectedTabIndex = wx.getStorageSync("selectedTabIndex") || 0;
+    
     // 登录
     wx.login({
       success: res => {
@@ -13,7 +17,10 @@ App({
       }
     })
   },
+onShow(){
+},
   globalData: {
-    userInfo: null
+    userInfo: null,
+    selectedTabIndex:0
   }
 })

+ 51 - 58
app.json

@@ -1,11 +1,21 @@
 {
   "pages": [
-	  "pages/scan/scan",
-	  "pages/index/index",
-	  "pages/data/data",
-	  "pages/testSAS/testSAS",
-	  "pages/sleepEvaluation/sleepEvaluation"
-	
+    "pages/index/index",
+    "pages/scan/scan",
+    "pages/data/data",
+    "pages/shop/shop",
+    "pages/testSAS/testSAS"
+  ],
+  "subpackages": [
+    {
+      "root": "subpages",
+      "name":"subpages",
+      "pages": [
+        "sleepEvaluation/sleepEvaluation",
+        "sleepQualityIndexAssessment/sleepQualityIndexAssessment",
+        "warmReminder/warmReminder"
+      ]
+    }
   ],
   "window": {
     "backgroundTextStyle": "light",
@@ -22,78 +32,61 @@
   "permission": {
     "scope.userLocation": {
       "desc": "你的位置信息将用于天气效果展示"
-    } 
+    }
   },
   "requiredPrivateInfos": [
-  	"getLocation"
+    "getLocation"
   ],
   "sitemapLocation": "sitemap.json",
   "tabBar": {
+    "custom": true,
+    "selectedColor": "#0BC3AA",
+    "color": "#AAAFC4",
     "list": [
-		{
-		  "pagePath": "pages/index/index",
-		  "text": "控制主页",
-		  "color": "#959595",
-		  "selectedColor": "#00dede",
-		  "iconPath": "static/tabs/home.png",
-		  "selectedIconPath": "static/tabs/home-active.png"
-		},
-		{
-		  "pagePath": "pages/scan/scan",
-		  "text": "二维码",
-		  "color": "#959595",
-		  "selectedColor": "#00dede",
-		  "iconPath": "static/tabs/scan-code.png",
-		  "selectedIconPath": "static/tabs/scan-code-active.png"
-		},
+      {
+        "pagePath": "pages/index/index",
+        "text": "控制主页",
+        "iconPath": "static/tabs/home@2x.png",
+        "selectedIconPath": "static/tabs/home-active@2x.png"
+      },
+      {
+        "pagePath": "pages/shop/shop",
+        "text": "商城",
+        "iconPath": "static/tabs/report@2x.png",
+        "selectedIconPath": "static/tabs/report-active@2x.png"
+      },
+      {
+        "pagePath": "pages/scan/scan",
+        "text": "扫码",
+        "iconPath": "static/tabs/report@2x.png",
+        "selectedIconPath": "static/tabs/report-active@2x.png"
+      },
       {
         "pagePath": "pages/data/data",
         "text": "睡眠报告",
-		"color": "#959595",
-		"selectedColor": "#00dede",
-		"iconPath": "static/tabs/orders.png",
-		"selectedIconPath": "static/tabs/orders-active.png"
+        "iconPath": "static/tabs/report@2x.png",
+        "selectedIconPath": "static/tabs/report-active@2x.png"
       },
       {
         "pagePath": "pages/testSAS/testSAS",
         "text": "调查问卷",
-		"color": "#959595",
-		"selectedColor": "#00dede",
-		"iconPath": "static/tabs/question_gay.png",
-		"selectedIconPath": "static/tabs/question_green.png"
-      },
-      {
-        "pagePath": "pages/sleepEvaluation/sleepEvaluation",
-        "text": "入住评价",
-		"color": "#959595",
-		"selectedColor": "#00dede",
-		"iconPath": "static/tabs/question_gay.png",
-		"selectedIconPath": "static/tabs/question_green.png"
+        "iconPath": "static/tabs/investigation@2x.png",
+        "selectedIconPath": "static/tabs/investigation-active@2x.png"
       }
     ]
   },
   "usingComponents": {
-    "van-button": "@vant/weapp/button/index",
+    "van-tab": "@vant/weapp/tab/index",
+    "van-tabs": "@vant/weapp/tabs/index",
+    "van-collapse": "@vant/weapp/collapse/index",
+    "van-collapse-item": "@vant/weapp/collapse-item/index",
+    "van-popup": "@vant/weapp/popup/index",
+    "van-overlay": "@vant/weapp/overlay/index",
+    "van-picker": "@vant/weapp/picker/index",
+    "van-nav-bar": "@vant/weapp/nav-bar/index",
     "van-field": "@vant/weapp/field/index",
-    "vabutton": "@vant/weapp/button/index",
-    "van-toast": "@vant/weapp/toast/index",
-    "van-dialog": "@vant/weapp/dialog/index",
     "van-icon": "@vant/weapp/icon/index",
-    "van-count-down": "@vant/weapp/count-down/index",
-    "van-circle": "@vant/weapp/circle/index",
-    "van-tag": "@vant/weapp/tag/index",
-    "van-row": "@vant/weapp/row/index",
-    "van-col": "@vant/weapp/col/index",
-    "van-cell": "@vant/weapp/cell/index",
-    "van-cell-group": "@vant/weapp/cell-group/index",
-    "van-notify": "@vant/weapp/notify/index",
-    "van-grid": "@vant/weapp/grid/index",
-    "van-grid-item": "@vant/weapp/grid-item/index",
-    "van-progress": "@vant/weapp/progress/index",
-    "van-notice-bar": "@vant/weapp/notice-bar/index",
-    "van-action-sheet": "@vant/weapp/action-sheet/index",
     "van-switch": "@vant/weapp/switch/index",
-    "van-rate": "@vant/weapp/rate/index",
     "van-transition": "@vant/weapp/transition/index",
     "van-slider": "@vant/weapp/slider/index",
     "van-datetime-picker": "@vant/weapp/datetime-picker/index",

+ 8 - 5
app.wxss

@@ -1,5 +1,6 @@
 /**app.wxss**/
 @import "./weui.wxss";
+
 .container {
   height: 100%;
   display: flex;
@@ -8,12 +9,14 @@
   justify-content: space-between;
   /* padding: 200rpx 0; */
   box-sizing: border-box;
-} 
+}
+
 @font-face {
-  font-family: "iconfont"; /* Project id 4004256 */
+  font-family: "iconfont";
+  /* Project id 4004256 */
   src: url('//at.alicdn.com/t/c/font_4004256_d8n86l3uql.woff2?t=1681015728820') format('woff2'),
-       url('//at.alicdn.com/t/c/font_4004256_d8n86l3uql.woff?t=1681015728820') format('woff'),
-       url('//at.alicdn.com/t/c/font_4004256_d8n86l3uql.ttf?t=1681015728820') format('truetype');
+    url('//at.alicdn.com/t/c/font_4004256_d8n86l3uql.woff?t=1681015728820') format('woff'),
+    url('//at.alicdn.com/t/c/font_4004256_d8n86l3uql.ttf?t=1681015728820') format('truetype');
 }
 
 .iconfont {
@@ -38,4 +41,4 @@
 
 .icon-kaimen-05:before {
   content: "\e62e";
-}
+}

+ 58 - 0
custom-tab-bar/index.js

@@ -0,0 +1,58 @@
+Component({
+  data: {
+    selected: 0,
+    "color": "#AAAFC4",
+    "selectedColor": "#0BC3AA",
+    list: [{
+      "pagePath": "/pages/index/index",
+      "text": "控制主页",
+      "iconPath": "/static/tabs/home@2x.png",
+      "selectedIconPath": "/static/tabs/home-active@2x.png"
+    },
+    {
+      "pagePath": "/pages/shop/shop",
+      "text": "商城",
+      "iconPath": "/static/tabs/report@2x.png",
+      "selectedIconPath": "/static/tabs/report-active@2x.png"
+    },
+    {
+      "pagePath": "/pages/data/data",
+      "text": "睡眠报告",
+      "iconPath": "/static/tabs/report@2x.png",
+      "selectedIconPath": "/static/tabs/report-active@2x.png"
+    },
+    {
+      "pagePath": "/pages/testSAS/testSAS",
+      "text": "调查问卷",
+      "iconPath": "/static/tabs/investigation@2x.png",
+      "selectedIconPath": "/static/tabs/investigation-active@2x.png"
+    }]
+  },
+  attached() {
+    const app = getApp();
+    this.setData({
+      selected: app.globalData.selectedTabIndex || 0
+    })
+    console.log("da=>", app.globalData.selectedTabIndex);
+  },
+
+  methods: {
+    switchTab(e) {
+      const data = e.currentTarget.dataset
+      const url = data.path
+      if (url === "/pages/shop/shop") {
+        wx.showToast({
+          icon: "none",
+          title: '暂未开通',
+        })
+        return
+      }
+      console.log("data.index", data.index);
+      wx.switchTab({ url })
+
+      const app = getApp();
+      app.globalData.selectedTabIndex = data.index;
+
+    }
+  }
+})

+ 3 - 0
custom-tab-bar/index.json

@@ -0,0 +1,3 @@
+{
+  "component": true
+}

+ 33 - 0
custom-tab-bar/index.wxml

@@ -0,0 +1,33 @@
+<!--miniprogram/custom-tab-bar/index.wxml-->
+<view class="m-tab-bar">
+  <!-- <view class="tab-bar-border"></view> -->
+  <view class="bg-tab-bar">
+
+    <image src="/static/tabs/tab-bar-bg.png" style="width: 100vw;height: 52px;" />
+    <view class="bg-bottom"></view>
+  </view>
+
+  <view class="m-tab-list">
+    <view class="m-tab-box m-tab-box-l">
+      <view wx:for="{{list}}" wx:key="index" class="m-tab-bar-item" data-path="{{item.pagePath}}" data-index="{{index}}"
+        bindtap="switchTab" wx:if="{{index < 2}}">
+        <image wx:if="{{selected === index}}" src="{{ item.selectedIconPath }}"></image>
+        <image wx:if="{{selected !== index}}" src="{{ item.iconPath }}"></image>
+        <view style="color: {{selected === index ? selectedColor : color}}">{{item.text}}</view>
+      </view>
+
+    </view>
+    <view class="m-tab-box m-tab-box-r">
+      <view wx:for="{{list}}" wx:key="index" class="m-tab-bar-item" data-path="{{item.pagePath}}" data-index="{{index}}"
+        bindtap="switchTab" wx:if="{{index >= 2}}">
+        <image wx:if="{{selected === index}}" src="{{ item.selectedIconPath }}"></image>
+        <image wx:if="{{selected !== index}}" src="{{ item.iconPath }}"></image>
+        <view style="color: {{selected === index ? selectedColor : color}}">{{item.text}}</view>
+      </view>
+    </view>
+  </view>
+  <view class="scan-code-btn-view">
+    <image class="scan-code-btn" src="/static/tabs/scan.png" data-path="/pages/scan/scan" data-index="4"
+      bindtap="switchTab" />
+  </view>
+</view>

+ 94 - 0
custom-tab-bar/index.wxss

@@ -0,0 +1,94 @@
+.m-tab-bar {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  height: 62px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: flex-end;
+}
+
+.m-tab-list {
+  display: flex;
+  width: 100%;
+  flex-direction: row;
+}
+
+.bg-tab-bar {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  flex-direction: column;
+  z-index: -1;
+  display: flex;
+}
+
+.bg-bottom {
+  background: white;
+  padding-bottom: env(safe-area-inset-bottom);
+
+}
+
+.m-tab-box {
+  display: flex;
+  padding-top: 26px;
+  padding-bottom: env(safe-area-inset-bottom);
+  flex: 1;
+}
+
+.m-tab-box-l {
+  padding-right: 40px;
+}
+
+
+.m-tab-box-r {
+  padding-left: 40px;
+}
+
+/* .tab-bar-border {
+  background-color: rgba(0, 0, 0, 0.33);
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 1px;
+  transform: scaleY(0.5);
+} */
+
+.m-tab-bar-item {
+  flex: 1;
+  text-align: center;
+  display: flex;
+  padding: 13px 0 10px 0;
+  justify-content: center;
+  align-items: center;
+  flex-direction: column;
+}
+
+.m-tab-bar-item image {
+  width: 22px;
+  height: 22px;
+  display: block;
+}
+
+.m-tab-bar-item view {
+  font-size: 10px;
+}
+
+.scan-code-btn-view {
+  display: flex;
+  flex-direction: column;
+  position: fixed;
+  left: calc(50vw - 38px);
+  bottom: 100px;
+  padding-bottom: env(safe-area-inset-bottom);
+}
+
+.scan-code-btn {
+  width: 80px;
+  height: 80px;
+  position: fixed;
+}

+ 177 - 34
ec-canvas/ec-canvas.js

@@ -3,6 +3,31 @@ import * as echarts from './echarts';
 
 let ctx;
 
+function compareVersion(v1, v2) {
+  v1 = v1.split('.')
+  v2 = v2.split('.')
+  const len = Math.max(v1.length, v2.length)
+
+  while (v1.length < len) {
+    v1.push('0')
+  }
+  while (v2.length < len) {
+    v2.push('0')
+  }
+
+  for (let i = 0; i < len; i++) {
+    const num1 = parseInt(v1[i])
+    const num2 = parseInt(v2[i])
+
+    if (num1 > num2) {
+      return 1
+    } else if (num1 < num2) {
+      return -1
+    }
+  }
+  return 0
+}
+
 Component({
   properties: {
     canvasId: {
@@ -13,19 +38,33 @@ Component({
     ec: {
       type: Object
     },
-    tuData:{//这是新增的参数
-      type: Object
-    },
-    flag:{//这是新增的参数
-      type: Object
+
+    forceUseOldCanvas: {
+      type: Boolean,
+      value: false
     }
   },
 
   data: {
-
+    isUseNewCanvas: false
   },
 
   ready: function () {
+    // Disable prograssive because drawImage doesn't support DOM as parameter
+    // See https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html
+    echarts.registerPreprocessor(option => {
+      if (option && option.series) {
+        if (option.series.length > 0) {
+          option.series.forEach(series => {
+            series.progressive = 0;
+          });
+        }
+        else if (typeof option.series === 'object') {
+          option.series.progressive = 0;
+        }
+      }
+    });
+
     if (!this.data.ec) {
       console.warn('组件需绑定 ec 变量,例:<ec-canvas id="mychart-dom-bar" '
         + 'canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>');
@@ -39,50 +78,139 @@ Component({
 
   methods: {
     init: function (callback) {
-      const version = wx.version.version.split('.').map(n => parseInt(n, 10));
-      const isValid = version[0] > 1 || (version[0] === 1 && version[1] > 9)
-        || (version[0] === 1 && version[1] === 9 && version[2] >= 91);
-      if (!isValid) {
-        console.error('微信基础库版本过低,需大于等于 1.9.91。'
-          + '参见:https://github.com/ecomfe/echarts-for-weixin'
-          + '#%E5%BE%AE%E4%BF%A1%E7%89%88%E6%9C%AC%E8%A6%81%E6%B1%82');
-        return;
-      }
+      const version = wx.getSystemInfoSync().SDKVersion
 
-      ctx = wx.createCanvasContext(this.data.canvasId, this);
+      const canUseNewCanvas = compareVersion(version, '2.9.0') >= 0;
+      const forceUseOldCanvas = this.data.forceUseOldCanvas;
+      const isUseNewCanvas = canUseNewCanvas && !forceUseOldCanvas;
+      this.setData({ isUseNewCanvas });
 
-      const canvas = new WxCanvas(ctx, this.data.canvasId);
+      if (forceUseOldCanvas && canUseNewCanvas) {
+        console.warn('开发者强制使用旧canvas,建议关闭');
+      }
 
-      echarts.setCanvasCreator(() => {
-        return canvas;
-      });
+      if (isUseNewCanvas) {
+        // console.log('微信基础库版本大于2.9.0,开始使用<canvas type="2d"/>');
+        // 2.9.0 可以使用 <canvas type="2d"></canvas>
+        this.initByNewWay(callback);
+      } else {
+        const isValid = compareVersion(version, '1.9.91') >= 0
+        if (!isValid) {
+          console.error('微信基础库版本过低,需大于等于 1.9.91。'
+            + '参见:https://github.com/ecomfe/echarts-for-weixin'
+            + '#%E5%BE%AE%E4%BF%A1%E7%89%88%E6%9C%AC%E8%A6%81%E6%B1%82');
+          return;
+        } else {
+          console.warn('建议将微信基础库调整大于等于2.9.0版本。升级后绘图将有更好性能');
+          this.initByOldWay(callback);
+        }
+      }
+    },
+
+    initByOldWay(callback) {
+      // 1.9.91 <= version < 2.9.0:原来的方式初始化
+      ctx = wx.createCanvasContext(this.data.canvasId, this);
+      const canvas = new WxCanvas(ctx, this.data.canvasId, false);
 
+      if (echarts.setPlatformAPI) {
+        echarts.setPlatformAPI({
+          createCanvas: () => canvas,
+        });
+      } else {
+        echarts.setCanvasCreator(() => canvas);
+      };
+      // const canvasDpr = wx.getSystemInfoSync().pixelRatio // 微信旧的canvas不能传入dpr
+      const canvasDpr = 1
       var query = wx.createSelectorQuery().in(this);
       query.select('.ec-canvas').boundingClientRect(res => {
         if (typeof callback === 'function') {
-          this.chart = callback(canvas, res.width, res.height);
+          this.chart = callback(canvas, res.width, res.height, canvasDpr);
         }
         else if (this.data.ec && typeof this.data.ec.onInit === 'function') {
-          this.chart = this.data.ec.onInit(canvas, res.width, res.height,this.data.tuData,this.data.flag);
+          this.chart = this.data.ec.onInit(canvas, res.width, res.height, canvasDpr);
         }
         else {
           this.triggerEvent('init', {
             canvas: canvas,
             width: res.width,
-            height: res.height
+            height: res.height,
+            canvasDpr: canvasDpr // 增加了dpr,可方便外面echarts.init
           });
         }
       }).exec();
     },
 
+    initByNewWay(callback) {
+      // version >= 2.9.0:使用新的方式初始化
+      const query = wx.createSelectorQuery().in(this)
+      query
+        .select('.ec-canvas')
+        .fields({ node: true, size: true })
+        .exec(res => {
+          const canvasNode = res[0].node
+          this.canvasNode = canvasNode
+
+          const canvasDpr = wx.getSystemInfoSync().pixelRatio
+          const canvasWidth = res[0].width
+          const canvasHeight = res[0].height
+
+          const ctx = canvasNode.getContext('2d')
+
+          const canvas = new WxCanvas(ctx, this.data.canvasId, true, canvasNode)
+          if (echarts.setPlatformAPI) {
+            echarts.setPlatformAPI({
+              createCanvas: () => canvas,
+              loadImage: (src, onload, onerror) => {
+                if (canvasNode.createImage) {
+                  const image = canvasNode.createImage();
+                  image.onload = onload;
+                  image.onerror = onerror;
+                  image.src = src;
+                  return image;
+                }
+                console.error('加载图片依赖 `Canvas.createImage()` API,要求小程序基础库版本在 2.7.0 及以上。');
+                // PENDING fallback?
+              }
+            })
+          } else {
+            echarts.setCanvasCreator(() => canvas)
+          }
+
+          if (typeof callback === 'function') {
+            this.chart = callback(canvas, canvasWidth, canvasHeight, canvasDpr)
+          } else if (this.data.ec && typeof this.data.ec.onInit === 'function') {
+            this.chart = this.data.ec.onInit(canvas, canvasWidth, canvasHeight, canvasDpr)
+          } else {
+            this.triggerEvent('init', {
+              canvas: canvas,
+              width: canvasWidth,
+              height: canvasHeight,
+              dpr: canvasDpr
+            })
+          }
+        })
+    },
     canvasToTempFilePath(opt) {
-      if (!opt.canvasId) {
-        opt.canvasId = this.data.canvasId;
+      if (this.data.isUseNewCanvas) {
+        // 新版
+        const query = wx.createSelectorQuery().in(this)
+        query
+          .select('.ec-canvas')
+          .fields({ node: true, size: true })
+          .exec(res => {
+            const canvasNode = res[0].node
+            opt.canvas = canvasNode
+            wx.canvasToTempFilePath(opt)
+          })
+      } else {
+        // 旧的
+        if (!opt.canvasId) {
+          opt.canvasId = this.data.canvasId;
+        }
+        ctx.draw(true, () => {
+          wx.canvasToTempFilePath(opt, this);
+        });
       }
-
-      ctx.draw(true, () => {
-        wx.canvasToTempFilePath(opt, this);
-      });
     },
 
     touchStart(e) {
@@ -91,11 +219,17 @@ Component({
         var handler = this.chart.getZr().handler;
         handler.dispatch('mousedown', {
           zrX: touch.x,
-          zrY: touch.y
+          zrY: touch.y,
+          preventDefault: () => {},
+          stopImmediatePropagation: () => {},
+          stopPropagation: () => {}
         });
         handler.dispatch('mousemove', {
           zrX: touch.x,
-          zrY: touch.y
+          zrY: touch.y,
+          preventDefault: () => {},
+          stopImmediatePropagation: () => {},
+          stopPropagation: () => {}
         });
         handler.processGesture(wrapTouch(e), 'start');
       }
@@ -107,7 +241,10 @@ Component({
         var handler = this.chart.getZr().handler;
         handler.dispatch('mousemove', {
           zrX: touch.x,
-          zrY: touch.y
+          zrY: touch.y,
+          preventDefault: () => {},
+          stopImmediatePropagation: () => {},
+          stopPropagation: () => {}
         });
         handler.processGesture(wrapTouch(e), 'change');
       }
@@ -119,11 +256,17 @@ Component({
         var handler = this.chart.getZr().handler;
         handler.dispatch('mouseup', {
           zrX: touch.x,
-          zrY: touch.y
+          zrY: touch.y,
+          preventDefault: () => {},
+          stopImmediatePropagation: () => {},
+          stopPropagation: () => {}
         });
         handler.dispatch('click', {
           zrX: touch.x,
-          zrY: touch.y
+          zrY: touch.y,
+          preventDefault: () => {},
+          stopImmediatePropagation: () => {},
+          stopPropagation: () => {}
         });
         handler.processGesture(wrapTouch(e), 'end');
       }

+ 4 - 3
ec-canvas/ec-canvas.wxml

@@ -1,3 +1,4 @@
-<canvas class="ec-canvas" canvas-id="{{ canvasId }}"
-bindinit="init">
-</canvas>
+<!-- 新的:接口对其了H5 -->
+<canvas wx:if="{{isUseNewCanvas}}" type="2d" class="ec-canvas" canvas-id="{{ canvasId }}" bindinit="init" bindtouchstart="{{ ec.disableTouch ? '' : 'touchStart' }}" bindtouchmove="{{ ec.disableTouch ? '' : 'touchMove' }}" bindtouchend="{{ ec.disableTouch ? '' : 'touchEnd' }}"></canvas>
+<!-- 旧的 -->
+<canvas wx:else class="ec-canvas" canvas-id="{{ canvasId }}" bindinit="init" bindtouchstart="{{ ec.disableTouch ? '' : 'touchStart' }}" bindtouchmove="{{ ec.disableTouch ? '' : 'touchMove' }}" bindtouchend="{{ ec.disableTouch ? '' : 'touchEnd' }}"></canvas>

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 21
ec-canvas/echarts.js


+ 83 - 16
ec-canvas/wx-canvas.js

@@ -1,11 +1,18 @@
 export default class WxCanvas {
-  constructor(ctx, canvasId) {
+  constructor(ctx, canvasId, isNew, canvasNode) {
     this.ctx = ctx;
     this.canvasId = canvasId;
     this.chart = null;
+    this.isNew = isNew
+    if (isNew) {
+      this.canvasNode = canvasNode;
+    }
+    else {
+      this._initStyle(ctx);
+    }
 
     // this._initCanvas(zrender, ctx);
-    this._initStyle(ctx);
+
     this._initEvent();
   }
 
@@ -19,7 +26,6 @@ export default class WxCanvas {
   //   if (!opt.canvasId) {
   //     opt.canvasId = this.canvasId;
   //   }
-
   //   return wx.canvasToTempFilePath(opt, this);
   // }
 
@@ -27,7 +33,11 @@ export default class WxCanvas {
     this.chart = chart;
   }
 
-  attachEvent () {
+  addEventListener() {
+    // noop
+  }
+
+  attachEvent() {
     // noop
   }
 
@@ -47,22 +57,59 @@ export default class WxCanvas {
   }
 
   _initStyle(ctx) {
-    var styles = ['fillStyle', 'strokeStyle', 'globalAlpha', 
-      'textAlign', 'textBaseAlign', 'shadow', 'lineWidth',
-      'lineCap', 'lineJoin', 'lineDash', 'miterLimit', 'fontSize'];
+    var styles = [
+
+      "fillStyle",
+
+      "strokeStyle",
+
+      "globalAlpha",
+
+      "textAlign",
+
+      "textBaseAlign",
+
+      "shadow",
+
+      "lineWidth",
+
+      "lineCap",
+
+      "lineJoin",
+
+      "lineDash",
+
+      "miterLimit",
+
+      "fontSize",
+
+    ];
+
+
+
+    styles.forEach((style) => {
 
-    styles.forEach(style => {
       Object.defineProperty(ctx, style, {
-        set: value => {
-          if (style !== 'fillStyle' && style !== 'strokeStyle' 
-            || value !== 'none' && value !== null
+
+        set: (value) => {
+
+          if (
+
+            (style !== "fillStyle" && style !== "strokeStyle") ||
+
+            (value !== "none" && value !== null)
+
           ) {
-            ctx['set' + style.charAt(0).toUpperCase() + style.slice(1)](value);
+
+            ctx["set" + style.charAt(0).toUpperCase() + style.slice(1)](value);
+
           }
-        }
+
+        },
+
       });
-    });
 
+    });
     ctx.createRadialGradient = () => {
       return ctx.createCircularGradient(arguments);
     };
@@ -83,15 +130,35 @@ export default class WxCanvas {
       wxName: 'touchEnd',
       ecName: 'click'
     }];
-
     eventNames.forEach(name => {
       this.event[name.wxName] = e => {
         const touch = e.touches[0];
         this.chart.getZr().handler.dispatch(name.ecName, {
           zrX: name.wxName === 'tap' ? touch.clientX : touch.x,
-          zrY: name.wxName === 'tap' ? touch.clientY : touch.y
+          zrY: name.wxName === 'tap' ? touch.clientY : touch.y,
+          preventDefault: () => {},
+          stopImmediatePropagation: () => {},
+          stopPropagation: () => {}
         });
       };
     });
   }
+
+  set width(w) {
+    if (this.canvasNode) this.canvasNode.width = w
+  }
+  set height(h) {
+    if (this.canvasNode) this.canvasNode.height = h
+  }
+
+  get width() {
+    if (this.canvasNode)
+      return this.canvasNode.width
+    return 0
+  }
+  get height() {
+    if (this.canvasNode)
+      return this.canvasNode.height
+    return 0
+  }
 }

+ 6 - 0
jsconfig.json

@@ -0,0 +1,6 @@
+{
+	"compilerOptions": {
+		"target": "es2015",
+		"module": "commonjs"
+	}	
+}

+ 4270 - 3879
pages/data/data.js

@@ -1,3998 +1,4389 @@
 import * as echarts from '../../ec-canvas/echarts';
-let chart000;
-let chart00;
+
 let chart0;
 let chart;
-let chart1;
 let chart2;
 let chart3;
 let chart4;
 let chart5;
 let chart6;
-let chart7;
-let chart8;
 let chart81;
 let chart9;
 let chart10;
 let chart11;
-// pages/data/data.js
-function addZero(str) {
-  if (String(str).length == 1) {
-    return "0" + String(str);
-  } else {
-    return String(str);
-  }
-}
+// 渐变圆环
+let chartCircularProgressBar;//圈圈
+let chartOutOfBed;//离床
+let chartBodyMovementsLine;//体动
+let chartCardiacSystemLine;//心脏系统
+let chartRespiratoryLine;//平均呼吸率
+let chartSnoringLine;//打鼾
+let chartApneaLine;//呼吸暂停
+let chartTimeWaterfall;//深浅睡眠
 
-function flushChart000() {
-  var option = {  
-          series: [  
-			  {  
-				type: 'pie',  
-				radius: ['60%', '70%'], // 外环半径和内环半径,控制圆环宽度  
-				data: [  
-				  { value: 0, name: '暂无', itemStyle: {color: '#eaeaea'} }, // 进度数据  
-				  { value: 100, name: '暂无', itemStyle: {color: '#eaeaea'} } // 剩余数据,用于形成完整的圆环  
-				],  
-				label: {  
-				  show: true,  
-				  position: 'center',  
-				 //  formatter: function (params) {  
-					// // 这里假设进度数据在第一个数据项中  
-					// if (params.dataIndex === 0) {  
-					//   // return `第一行文字\n${params.percent.toFixed(2)}% 第二行文字`;
-					// 	return '<text class="text-line text-line-1">'+rscore_desc+'</text>'+'\n '+
-					// 	'<text class="text-line text-line-2">'+rscore_value+'</text>';
-					// }
-					// return ''; // 其他数据项不显示标签  
-				 //  },  
-				  rich: {  
-					// ... 如果需要设置富文本样式,可以在这里定义  
-				  },  
-				  textStyle: { // 设置标签文本样式  
-					fontSize: 16, // 根据需要调整字体大小  
-					color: '#333', // 根据需要调整字体颜色  
-					// ... 其他样式设置  
-				  },  
-				  alignTo: 'labelLine', // 文本水平居中到标签线  
-				  align: 'center' // 文本垂直居中对齐到标签线  
-				}, 
-				 
-				 label: {  
-				   show: true,  
-				   position: 'center',  
-				   // formatter: function (params) {  
-				   //   // 假设 params.percent 是进度百分比  
-				   //   return `{normal|`+rscore_desc+`}\n\n{bold|`+rscore_value+`}`;  
-				   // },  
-				   rich: {  
-				     bold: {  
-				       fontWeight: 'bold', // 加粗  
-				       fontSize: 18, // 字体大小,根据需要调整  
-				       color: '#333' // 字体颜色,根据需要调整  
-				       // 其他样式配置...  
-				     },  
-				     normal: {  
-				       fontWeight: 'normal', // 普通字体  
-				       fontSize: 14, // 字体大小,根据需要调整  
-				       color: '#666' // 字体颜色,根据需要调整  
-				       // 其他样式配置...  
-				     }  
-				     // 可以继续定义其他样式...  
-				   },  
-				   // 其他 label 配置...  
-				 }
-				// ... 其他配置项  
-			  }  
-			]   
-        };
-  chart000.setOption(option, true);
-}
+// 圈圈
+function setChartCircularProgressBarOption(chart, data = {}) {
+	var option = {
+		series: [
+			{
+				type: 'gauge',
+				startAngle: -270,
+				endAngle: 90,
+				legendHoverLink: true,
+				min: 0,
+				max: 100,
+				itemStyle: {
+					color: '#58D9F9',
+					shadowColor: 'rgba(0,138,255,0.45)',
+					shadowBlur: 5,
+					shadowOffsetX: 1,
+					shadowOffsetY: 1
+				},
+				progress: {
+					show: true,
+					roundCap: true,
+					width: 10,
+					itemStyle: {
+						// 进度条样式
+						color: {
+							// 自定义渐变色
+							type: 'linear',
+							x: 0.75,
+							y: 0.75,
+							x2: 0,
+							y2: 0.75,
+							colorStops: [
+								{
+									offset: 0,
+									color: '#8D25FF' // 0% 处的颜色
+								},
 
-function flushChart00(rscore_desc,rscore_value,that) {
-  var option = {  
-	      backgroundColor: 'white',
-          series: [  
-			  {  
-				type: 'pie',  
-				radius: ['60%', '70%'], // 外环半径和内环半径,控制圆环宽度  
-				data: [  
-				  // { value: rscore_value?rscore_value:0, name: '进度', itemStyle: {color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{offset: 0, color: '#874bff'}, {offset: 0.6, color: '#a87cff'},{offset: 0.9, color: '#f19cff'},{offset: 1, color: '#ff55ff'}])} }, // 进度数据  
-				  { value: rscore_value?rscore_value:0, name: '进度', itemStyle: {color: '#874bff'} },
-				  { value: 100-(rscore_value?rscore_value:0), name: '剩余', itemStyle: {color: '#eaeaea'} } // 剩余数据,用于形成完整的圆环  
-				],  
-				label: {  
-				  show: true,  
-				  position: 'center',  
-				  formatter: function (params) {  
-					// 这里假设进度数据在第一个数据项中  
-					if (params.dataIndex === 0) {  
-					  // return `第一行文字\n${params.percent.toFixed(2)}% 第二行文字`;
-						return '<text class="text-line text-line-1">'+rscore_desc+'</text>'+'\n '+
-						'<text class="text-line text-line-2">'+rscore_value+'</text>';
+								{
+									offset: 0.5,
+									color: '#A631FF' // 100% 处的颜色
+								},
+								{
+									offset: 1,
+									color: '#FF8FF0' // 100% 处的颜色
+								}
+							],
+							global: false // 缺省为 false
+						}
+					}
+				},
+				pointer: {
+					show: false,
+				},
+				axisLine: {
+					roundCap: true,
+					lineStyle: {
+						width: 10,
+					}
+				},
+				axisTick: {
+					show: false // 是否显示分隔线
+				},
+				splitLine: {
+					show: false // 是否显示分隔线
+				},
+				axisLabel: {
+					show: false,
+				},
+				title: {
+					color: '#6C6970',
+					offsetCenter: [0, '-36%'],
+					lineHeight: 15,
+					fontSize: 15,
+				},
+				detail: {
+					backgroundColor: '#fff',
+					width: '60%',
+					lineHeight: 40,
+					height: 40,
+					color: '#333333',
+					offsetCenter: [0, "24%"],
+					valueAnimation: true,
+					formatter: function (value) {
+						return '{value|' + value.toFixed(0) + '}';
+					},
+					rich: {
+						value: {
+							fontSize: 30,
+							fontWeight: 'bolder',
+							color: '#333333'
+						},
+					}
+				},
+				data: [
+					{
+						name: data?.rscore_desc || '无',
+						value: data?.rscore_value || 0
 					}
-					return ''; // 其他数据项不显示标签  
-				  },  
-				  rich: {  
-					// ... 如果需要设置富文本样式,可以在这里定义  
-				  },  
-				  textStyle: { // 设置标签文本样式  
-					fontSize: 16, // 根据需要调整字体大小  
-					color: '#333', // 根据需要调整字体颜色  
-					// ... 其他样式设置  
-				  },  
-				  alignTo: 'labelLine', // 文本水平居中到标签线  
-				  align: 'center' // 文本垂直居中对齐到标签线  
-				}, 
-				 
-				 label: {  
-				   show: true,  
-				   position: 'center',  
-				   formatter: function (params) {  
-				     // 假设 params.percent 是进度百分比  
-				     return `{normal|`+rscore_desc+`}\n\n{bold|`+rscore_value+`}`;  
-				   },  
-				   rich: {  
-				     bold: {  
-				       fontWeight: 'bold', // 加粗  
-				       fontSize: 18, // 字体大小,根据需要调整  
-				       color: '#333' // 字体颜色,根据需要调整  
-				       // 其他样式配置...  
-				     },  
-				     normal: {  
-				       fontWeight: 'normal', // 普通字体  
-				       fontSize: 14, // 字体大小,根据需要调整  
-				       color: '#666' // 字体颜色,根据需要调整  
-				       // 其他样式配置...  
-				     }  
-				     // 可以继续定义其他样式...  
-				   },  
-				   // 其他 label 配置...  
-				 }
-				// ... 其他配置项  
-			  }  
-			]   
-        };
+				]
+			}
+		]
+	};
+
+	chart.setOption(option, true);
+}
+
+
+function initChartHumidifier(canvas, width, height, dpr) {
+	// this.selectComponent('#mychart-dom-bar00').init((canvas, width, height, dpr) => {
+	// 获取组件的 canvas、width、height 后的回调函数
+	// 在这里初始化图表
+	const chart = echarts.init(canvas, null, {
+		width: width,
+		height: height,
+		devicePixelRatio: dpr // new
+	});
+	canvas.setChart(chart);
+	setChartCircularProgressBarOption(chart);
+
+	// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+	chartCircularProgressBar = chart;
+
+	// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+	return chart;
+	// });
+};
+
+function updateChartCircularProgressBarOption(rscore_desc, rscore_value, that) {
+	if (chartCircularProgressBar) {
+		setChartCircularProgressBarOption(chartCircularProgressBar, { rscore_desc, rscore_value });
 		that.setData({
-			flushChart00Flag:true
+			flushChart00Flag: true
 		});
-		console.log('that.data.flushChart00Flag='+that.data.flushChart00Flag);
-  chart00.setOption(option, true);
-}
+	} else {
+		that.selectComponent('#mychart-dom-CircularProgressBar').init((canvas, width, height, dpr) => {
+			const chart = echarts.init(canvas, null, {
+				width: width,
+				height: height,
+				devicePixelRatio: dpr // new
+			});
+			canvas.setChart(chart);
+			setChartCircularProgressBarOption(chart, { rscore_desc, rscore_value });
 
-function flushChart0(data) {
-  var option = {  
-          series: [  
-            {  
-              name: '进度',  
-              type: 'pie',  
-              radius: ['50%', '70%'],  
-              avoidLabelOverlap: false,  
-              label: {  
-                show: true,  
-                position: 'center'  
-              },  
-              emphasis: {  
-                label: {  
-                  show: true,  
-                  fontSize: '30',  
-                  fontWeight: 'bold'  
-                }  
-              },  
-              labelLine: {  
-                show: false  
-              },  
-              data: data
-            }  
-          ]  
-        };
-  chart0.setOption(option, true);
-}
+			// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+			chartCircularProgressBar = chart;
 
-function flushChart(data) {
-  var option = {
-    backgroundColor: '#0c1041',
-    // title: {
-    //   text: '当天睡眠时间曲线图',
-    //   left: 'center',
-    //   color: '#ffffff',
-    //   backgroundColor: '#ff0000'
-    // },
-    color: ["#62c4d9"],
-    legend: {
-      data: ['睡眠时间'],
-      top: 20,
-      left: 'right',
-      backgroundColor: '#0c1041',
-      textStyle:{
-        color:'#fff',
-      }
-    },
-    grid: {
-      containLabel: true
-    },
-    tooltip: {
-      show: true,
-      trigger: 'axis'
-    },
-    xAxis: {
-      type: 'category',
-      boundaryGap: false,
-      axisLine:{
-        lineStyle:{
-          color: '#fff',
-          width:1,//这里是为了突出显示加上的
-        }
-    }
-    },
-    yAxis: {
-      name: "时长" ,
-      x: 'center',
-      type: 'value',
-      axisLine:{
-        lineStyle:{
-          color: '#fff',
-          width:1,//这里是为了突出显示加上的
-        }
-      // splitLine: {
-      //   lineStyle: {
-      //     type: 'dashed'
-      //   }
-      }
-      // show: false
-    },
-    series: [{
-      name: '睡眠时间',
-      type: 'line',
-      smooth: true,
-      data: data,
-      color: '#62c4d9'
-    }]
-  };
-  chart.setOption(option, true);
+			// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+			return chart;
+		});
+	}
 }
+//离床
+
+function initChartOutOfBed(canvas, width, height, dpr) {
+	// this.selectComponent('#mychart-dom-bar00').init((canvas, width, height, dpr) => {
+	// 获取组件的 canvas、width、height 后的回调函数
+	// 在这里初始化图表
+	const chart = echarts.init(canvas, null, {
+		width: width,
+		height: height,
+		devicePixelRatio: dpr // new
+	});
+	canvas.setChart(chart);
+	setChartOutOfBedOption(chart);
+
+	// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+	chartOutOfBed = chart;
+
+	// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+	return chart;
+	// });
+};
+
 
-function flushChart1(data1,data2) {
-  var option = {
-	  // title: {
-	  //   text: '睡眠心率监测',
-	  //   left: 'center',
-	  //   textStyle: {  
-	  //               color: '#ffffff', // 字体颜色  
-	  //               fontStyle: 'normal', // 字体风格  
-	  //               // fontWeight: 'bold', // 字体粗细  
-	  //               fontFamily: 'sans-serif', // 字体族  
-	  //               fontSize: 18 // 字体大小  
-	  //             },
-	  //   backgroundColor: '#57f7ff'
-	  // },
-	  tooltip: {},
-	  xAxis: {
-		  axisLabel: {
-				  color: '#000' // 设置 x 轴标签颜色为白色  
-			  },
-		  splitLine: {
+
+function setChartOutOfBedOption(chart, data1 = [], data2 = [],) {
+	var option = option = {
+		tooltip: {
+			show: true,
+			trigger: 'axis',
+			formatter: function (param) {
+				return `${param[0] && param[0].value == 1 ? '在床' : '离床'}`
+			}
+		},
+		dataZoom: [
+			{ // 第一个 dataZoom 组件
+				type: 'inside',
+			},
+		],
+		grid: {
+			top: '10rpx',
+			left: 0,
+			right: '20rpx',
+			bottom: 0,
+			containLabel: true
+		},
+		xAxis: {
+			type: 'category',
+			axisLabel: {
+				color: '#6C6970',// 设置 x 轴标签颜色为白色  
+				fontSize: 10
+			},
+			boundaryGap: false,
+			splitLine: {
 				show: false, // 是否显示刻度线  
-			  }, 
-		  axisTick: {  
-			  // 不显示Y轴刻度线  
-			  show: false  
-		  }, 
-		  axisLine: {  
-			  // 不显示X轴轴线  
-			  show: false  
-		  },
-		  data: data1?data1:[]
-	  },
-	  yAxis: {
-		  // Y 轴配置
-		  type: 'value',
-		  // 设置 Y 轴名称
-		  name: '单位:次',
-		  // 设置 Y 轴名称的位置
-		  nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
-		  axisLine: {
-			// 不显示Y轴轴线  
-			show: false,
-		  },
-		  axisTick: {  
-			 // 不显示Y轴刻度线  
-			 show: false  
-		  },
-		  axisLabel: {
-			  color: '#000',
-		    },
-		  splitLine: {  
-			  show: false ,// 不显示纵坐标轴的刻度线  
-			  lineStyle: {
-				color: 'rgba(255, 0, 255, 0.8)', // 灰色并调整透明度  
-				width: 1, // 刻度线宽度  
-				type: 'solid' // 刻度线类型,默认为实线  
-			  }  
-			},
-	  },
-	  series: [{  
-				  type: 'line',  
-				  data: data2?data2:[],
-				  // lineStyle: {
-					 //  color: 'rgba(255, 85, 127, 0.1)' // 奶白色,80% 透明度  
-				  // },
-				  showSymbol: false, // 是否显示标记图形  
-				  smooth: true, // 使折线平滑
-				    markPoint: {  
-				  	  symbol: 'circle', // 标记的符号为圆圈  
-				  	  symbolSize: 10, // 标记的大小  
-				  	  itemStyle: {  
-				  			  color: 'rgba(255, 0, 255, 0.8)', 
-				  			  // borderColor: 'blue', 
-				  			  borderWidth: 1, // 设置边框宽度  
-				  			  fill: 'none' // 设置填充颜色为无,即空心  
-				  		  }, 
-				  	  data: [  
-				  		  // 假设 data[0] 和 data[data.length - 1] 分别是开始和结束的数据点  
-				  		  {coord: [data1?data1[0]:'', data2?data2[0]:''], name: '开始'},  
-				  		  {coord: [data1?data1[data1.length-1]:'', data2?data2[data2.length-1]:''], name: '结束'}  
-				  		  // 如果要添加拐角处的标记,需要手动计算并添加  
-				  	  ]  
-				    },
-				    areaStyle: { // 折线下方的区域样式  
-				  		color: new echarts.graphic.LinearGradient(  
-				  		  0, 0, 0, 1, // 渐变方向  
-				  		  [ // 渐变颜色  
-				  			{offset: 0, color: 'rgba(255, 0, 255, 0.8)'}, // 使用之前定义的渐变  
-				  			{offset: 0.9, color: 'rgba(255, 255, 255, 1)'} // 可选,结束颜色  
-				  		  ]  
-				  		),  
-				  		opacity: 0.3 // 区域的不透明度,可以根据需要调整  
-				  	  }, 
-				}]
-	  };
-  chart1.setOption(option, true);
-}
 
+			},
+			axisTick: {
+				// 不显示Y轴刻度线  
+				show: false
+			},
+			data: data1,
+			axisLine: {
+				// 不显示X轴轴线  
+				show: false
+			}
+		},
+		yAxis: {
+			// Y 轴配置
+			type: 'value',
+			show: false
+		},
+		series: [{
+			type: 'line',
+			name: '睡眠状态',
+			smooth: true,
+			lineStyle: {
+				width: 2,
+				color: '#54C68B'
+			},
+			showSymbol: false,
+			areaStyle: {
+				opacity: 0.8,
+				color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+					{
+						offset: 0,
+						color: '#B8EBD0'
+					},
+					{
+						offset: 1,
+						color: 'rgba(255, 255, 255, 0)'
+					}
+				])
+			},
+			data: data2,
+		}]
+	};
 
-function flushChart2(data) {
-  var option = {
-	  // title: {
-	  //   text: '睡眠状态监测',
-	  //   left: 'center',
-	  //   textStyle: {
-	  //               color: '#ffffff', // 字体颜色  
-	  //               fontStyle: 'normal', // 字体风格  
-	  //               // fontWeight: 'bold', // 字体粗细  
-	  //               fontFamily: 'sans-serif', // 字体族  
-	  //               fontSize: 18 // 字体大小  
-	  //             },
-	  //   backgroundColor: '#57f7ff'
-	  // },
-	  tooltip: {
-	  trigger: 'item'
-	  },
-	  legend: {
-	  orient: 'vertical',
-	  left: 'left',
-	  },
-	  series: [{  
-          type: 'pie',  
-          radius: '55%',  
-          data: data?data:[]
-        }],
-	    graphic: [{
-			type: 'text',  
-			left: '2%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
-			top: '84%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
-			style: {  
-			  text: '时长(分钟)分析', // 文本内容  
-			  textFill: '#333', // 文本颜色  
-			  textFontSize: 14, // 文本字体大小  
-			  textAlign: 'left', // 文本水平对齐方式  
-			  verticalAlign: 'middle' // 文本垂直对齐方式  
-			}  
-			}],
-	  };
-  chart2.setOption(option, true);
+	chart.setOption(option, true);
 }
 
-function flushChart3(data1,data2) {
-  var option = {
-	  // title: {
-	  //   text: '睡眠呼吸监测',
-	  //   left: 'center',
-	  //   textStyle: {
-	  //               color: '#ffffff', // 字体颜色  
-	  //               fontStyle: 'normal', // 字体风格  
-	  //               // fontWeight: 'bold', // 字体粗细  
-	  //               fontFamily: 'sans-serif', // 字体族  
-	  //               fontSize: 18 // 字体大小  
-	  //             },
-	  //   backgroundColor: '#57f7ff'
-	  // },
-	  tooltip: {},
-	  xAxis: {
-	  data: data1?data1:[]
-	  },
-	  yAxis: {
-		  // Y 轴配置
-		  type: 'value',
-		  // 设置 Y 轴名称
-		  name: '单位:次',
-		  // 设置 Y 轴名称的位置
-		  nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
-	  },
-	  series: [{  
-          type: 'line',  
-          data: data2?data2:[]  
-        }]
-	  };
-  chart3.setOption(option, true);
+
+function updateOutOfBed(data1, data2, startSleepTime, endSleepTime, that) {
+	if (chartOutOfBed) {
+		setChartOutOfBedOption(chartOutOfBed, data1, data2);
+	} else {
+		that.selectComponent('#chartOutOfBed-dom').init((canvas, width, height, dpr) => {
+			const chart = echarts.init(canvas, null, {
+				width: width,
+				height: height,
+				devicePixelRatio: dpr // new
+			});
+			canvas.setChart(chart);
+			setChartOutOfBedOption(chart, data1, data2);
+
+			// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+			chartOutOfBed = chart;
+
+			// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+			return chart;
+		});
+	}
 }
 
-function flushChart4(data) {
-  var option = {
-	  // title: {
-	  //   text: '睡眠与清醒时间',
-	  //   left: 'center',
-	  //   textStyle: {
-	  //               color: '#ffffff', // 字体颜色  
-	  //               fontStyle: 'normal', // 字体风格  
-	  //               // fontWeight: 'bold', // 字体粗细  
-	  //               fontFamily: 'sans-serif', // 字体族  
-	  //               fontSize: 18 // 字体大小  
-	  //             },
-	  //   backgroundColor: '#57f7ff'
-	  // },
-	  tooltip: {},
-	  series: [{
-	  type: 'gauge',
-	  // 设置刻度盘的最大值
-	  max: 24,
-	  // 设置刻度盘的最小值
-	  min: 0,
-	  pointer: {
-		  width: 5,
-		  // 可以调整第二个指针的样式以区分
-		  itemStyle: {
-			color: '#FF0000'
-		  }
+
+//体动
+
+function initChartBodyMovementsLine(canvas, width, height, dpr) {
+	// 在这里初始化图表
+	const chart = echarts.init(canvas, null, {
+		width: width,
+		height: height,
+		devicePixelRatio: dpr // new
+	});
+	canvas.setChart(chart);
+	setBodyMovementsOption(chart);
+
+	// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+	chartBodyMovementsLine = chart;
+
+	// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+	return chart;
+};
+
+
+function setBodyMovementsOption(chart, data1 = [], data2 = [],) {
+	var option = option = {
+		tooltip: {
+			show: true,
+			trigger: 'axis',
+			formatter: function (param) {
+				return `${param[0] && param[0].value == 1 ? '体动' : '否'}`
+			}
 		},
-	  // 刻度盘轴
-	  axisLine: {
-		textStyle: {
-		  fontSize: 14
+		dataZoom: [
+			{ // 第一个 dataZoom 组件
+				type: 'inside',
+			},
+		],
+		grid: {
+			top: '10rpx',
+			left: 0,
+			right: '20rpx',
+			bottom: 0,
+			containLabel: true
 		},
-		lineStyle: {
-		  width: 30,
-		  color: [[0.2, '#80FF80'], [0.8, '#FF8080'], [1, '#8080FF']] // 刻度盘颜色分区
+		xAxis: {
+			type: 'category',
+			axisLabel: {
+				color: '#6C6970',// 设置 x 轴标签颜色为白色  
+				fontSize: 10
+			},
+			boundaryGap: false,
+			splitLine: {
+				show: false, // 是否显示刻度线  
+
+			},
+			axisTick: {
+				// 不显示Y轴刻度线  
+				show: false
+			},
+			data: data1,
+			axisLine: {
+				// 不显示X轴轴线  
+				show: false
+			}
 		},
-		rich: {
-			// 为第一个刻度盘设置刻度颜色
-			  '0%': {
-				color: '#FF0000'
-			  },
-			  '50%': {
-				color: '#00FF00'
-			  },
-			  '100%': {
-				color: '#0000FF'
-			  }
-		}
-	  },
-	  detail: {formatter: '{value} 小时'},
-	  data: data?data:{}
-	  }
-	 //  ,{
-	 //  type: 'gauge',
-	 //  // 设置刻度盘的最大值
-	 //  max: 24,
-	 //  // 设置刻度盘的最小值
-	 //  min: 0,
-	 //  // 刻度盘轴
-	 //  axisLine: {
-		// textStyle: {
-		//   fontSize: 14
-		// },
-		// lineStyle: {
-		//   width: 30,
-		//   color: [[0.2, '#80FF80'], [0.8, '#FF8080'], [1, '#8080FF']] // 刻度盘颜色分区
-		// },
-		// rich: {
-		// 	// 为第二个刻度盘设置刻度颜色
-		// 	  '0%': {
-		// 		color: '#FFFF00'
-		// 	  },
-		// 	  '50%': {
-		// 		color: '#00FFFF'
-		// 	  },
-		// 	  '100%': {
-		// 		color: '#FF00FF'
-		// 	  }
-		// }
-	 //  },
-	 //  detail: {formatter: '{value} 小时'},
-	 //  data: data2?data2:{}
-	 //  },
-	  ]
+		yAxis: {
+			// Y 轴配置
+			type: 'value',
+			show: false
+		},
+		series: [{
+			name: '睡眠状态',
+			type: 'line',
+			smooth: true,
+			lineStyle: {
+				width: 2,
+				color: '#5582FF'
+			},
+			showSymbol: false,
+			areaStyle: {
+				opacity: 0.8,
+				color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+					{
+						offset: 0,
+						color: 'rgba(85, 130, 255, 0.5)'
+					},
+					{
+						offset: 1,
+						color: 'rgba(149, 177, 255, 0.3)'
+					}
+				])
+			},
+			data: data2,
+		}]
 	};
-  chart4.setOption(option, true);
-}
 
-function flushChart5(data1,data2,that) {
-  var option = {
-	  // title: {
-	  //   text: '睡眠状态监测',
-	  //   left: 'center',
-	  //   textStyle: {
-	  //               color: '#ffffff', // 字体颜色  
-	  //               fontStyle: 'normal', // 字体风格  
-	  //               // fontWeight: 'bold', // 字体粗细  
-	  //               fontFamily: 'sans-serif', // 字体族  
-	  //               fontSize: 18 // 字体大小  
-	  //             },
-	  //   backgroundColor: '#57f7ff'
-	  // },
-	  tooltip: {},
-	  xAxis: {
-	  data: data1?data1:[]
-	  },
-	  yAxis: {
-		  // Y 轴配置
-		  type: 'value',
-		  // 设置 Y 轴名称
-		  name: '单位:次',
-		  // 设置 Y 轴名称的位置
-		  nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
-		  axisLabel: {
-		    formatter: function (value) {
-		      return that.sleepStateChange(value);
-		    }
-		  },
-		},
-	  series: [{  
-				  type: 'line',  
-				  data: data2?data2:[]  
-				}]
-			};
-  chart5.setOption(option, true);
+	chart.setOption(option, true);
 }
 
-function flushChart6(data1,data2,startSleepTime,endSleepTime,that) {
-  var option = {
-	  backgroundColor: '#000000', // 设置背景色
-	  tooltip: {},
-	  xAxis: {
-	  data: data1?data1:[]
-	  },
-	  yAxis: {
-		// Y 轴配置
-		type: 'value',
-		// 设置 Y 轴名称
-		name: '睡眠状态',
-		// 设置 Y 轴名称的位置
-		nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
-		axisLabel: {
-		    formatter: function (value) {
-		      return that.sleepStateChange(value);
-		    }
-		  }
-	  },
-	  series: [{
-				  type: 'line',  
-				  data: data2?data2:[],
-				  lineStyle: { // 系列级个性化折线样式  
-					width: 10,
-					type: 'solid',
-					color: new echarts.graphic.LinearGradient(0, 0.4, 0.7, 1, [{
-					  offset: 0,
-					  color: '#ffb71b'
-					} , {
-					  offset: 0.4,
-					  color: '#b75cee'
-					}, {
-					  offset: 0.7,
-					  color: '#66acfc'
-					}, {
-					  offset: 1,
-					color: '#3843fa'
-				  }]),//线条渐变色  
-				  },
-			}
-			// {
-			// 	  name: '分类2',
-			// 	  type: 'line',  
-			// 	  data: data2,
-			// 	  lineStyle: {        // 系列级个性化折线样式  
-			// 		width: 4,
-			// 		type: 'solid',
-			// 		color: new echarts.graphic.LinearGradient(0, 0.4, 0.7, 1, [{
-			// 		  offset: 0,
-			// 		  color: '#ffb71b'
-			// 		} , {
-			// 		  offset: 0.4,
-			// 		  color: '#b75cee'
-			// 		}, {
-			// 		  offset: 0.7,
-			// 		  color: '#66acfc'
-			// 		}, {
-			// 		  offset: 1,
-			// 		color: '#3843fa'
-			// 	  }]),//线条渐变色  
-			// 	  },
-			// 	},
-			],
-			graphic: [{
-						type: 'text',  
-						left: '5%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
-						top: '90%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
-						style: {  
-						  text: '入睡时间:'+startSleepTime?startSleepTime:'', // 文本内容  
-						  textFill: '#333', // 文本颜色  
-						  textFontSize: 14, // 文本字体大小  
-						  textAlign: 'left', // 文本水平对齐方式  
-						  verticalAlign: 'middle' // 文本垂直对齐方式  
-						}  
-						}, {  
-						type: 'text',  
-						right: '5%', // 文本水平位置,这里设置为距离右侧 10% 的位置,作为右下方的文本  
-						top: '90%', // 文本垂直位置,这里设置为距离底部 10% 的位置  
-						style: {
-						  text: '醒来时间:'+endSleepTime?endSleepTime:'', // 文本内容  
-						  textFill: '#333', // 文本颜色  
-						  textFontSize: 14, // 文本字体大小  
-						  textAlign: 'right', // 文本水平对齐方式  
-						  verticalAlign: 'middle' // 文本垂直对齐方式  
-						}  
-					}],
-			};
-		
-		// var list0 = [];
-		// var list10 = [];
-		// var list20 = [];
-		// var list30 = [];
-		// if(data2){
-		// 	for (let i = 0; i < data2.length; i++) {
-		// 		if (data2[i] == '0') {
-		// 		  list0.push(data2[i]); 
-		// 		}else if (data2[i] == '10') {  
-		// 		  list10.push(data2[i]); 
-		// 		}else if (data2[i] == '20') {  
-		// 		  list20.push(data2[i]); 
-		// 		}else if (data2[i] == '30') {  
-		// 		  list30.push(data2[i]); 
-		// 		}else{
-		// 		}
-		// 	} 
-		// } 
-		// var option = {  
-		//         xAxis: {  
-		//           type: 'category',  
-		//           data: data1  
-		//         },  
-		//         yAxis: {  
-		//           type: 'value',  
-		//           axisLabel: {  
-		//             show: true,  
-		//             position: 'buttom' // 分类标签显示在顶部,相当于曲线下方位置  
-		//           }  
-		//         },  
-		//         series: [  
-		//           {  
-		//             name: '清醒',  
-		//             type: 'line',  
-		//             data: list0,  
-		//             itemStyle: {  
-		//               areaColor: new echarts.graphic.LinearGradient(  
-		//                 0, 0, 0, 1,  
-		//                 [{ offset: 0, color: 'rgba(255, 0, 0, 0.3)' }, { offset: 1, color: 'rgba(255, 0, 0, 0)' }]  
-		//               )  
-		//             },  
-		//             smooth: true,  
-		//             lineStyle: {  
-		//               color: 'red' // 线条颜色  
-		//             }  
-		//           },  
-		//           {  
-		//             name: '浅睡',  
-		//             type: 'line',  
-		//             data: list10,  
-		//             itemStyle: {  
-		//               areaColor: new echarts.graphic.LinearGradient(  
-		//                 0, 0, 0, 1,  
-		//                 [{ offset: 0, color: 'rgba(0, 255, 0, 0.3)' }, { offset: 1, color: 'rgba(0, 255, 0, 0)' }]  
-		//               )  
-		//             },  
-		//             smooth: true,  
-		//             lineStyle: {  
-		//               color: 'green' // 线条颜色  
-		//             }  
-		//           },  
-		//           {  
-		//             name: '中睡',  
-		//             type: 'line',  
-		//             data: list20,  
-		//             itemStyle: {  
-		//               areaColor: new echarts.graphic.LinearGradient(  
-		//                 0, 0, 0, 1,  
-		//                 [{ offset: 0, color: 'rgba(0, 255, 0, 0.3)' }, { offset: 1, color: 'rgba(0, 255, 0, 0)' }]  
-		//               )  
-		//             },  
-		//             smooth: true,  
-		//             lineStyle: {  
-		//               color: 'green' // 线条颜色  
-		//             }  
-		//           } ,  
-		//           {  
-		//             name: '深睡',  
-		//             type: 'line',  
-		//             data: list30,  
-		//             itemStyle: {  
-		//               areaColor: new echarts.graphic.LinearGradient(  
-		//                 0, 0, 0, 1,  
-		//                 [{ offset: 0, color: 'rgba(0, 255, 0, 0.3)' }, { offset: 1, color: 'rgba(0, 255, 0, 0)' }]  
-		//               )  
-		//             },  
-		//             smooth: true,  
-		//             lineStyle: {  
-		//               color: 'green' // 线条颜色  
-		//             }  
-		//           } 
-		//           // 如果有更多分类,继续添加...  
-		//         ],  
-		//         tooltip: {
-		//           trigger: 'axis',  
-		//           axisPointer: {  
-		//             type: 'cross',  
-		//             label: {  
-		//               backgroundColor: '#6a7985'  
-		//             }  
-		//           }  
-		//         },
-		// 		graphic: [{
-		// 				type: 'text',  
-		// 				left: '5%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
-		// 				top: '90%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
-		// 				style: {  
-		// 				  text: '入睡时间:'+startSleepTime, // 文本内容  
-		// 				  textFill: '#333', // 文本颜色  
-		// 				  textFontSize: 14, // 文本字体大小  
-		// 				  textAlign: 'left', // 文本水平对齐方式  
-		// 				  verticalAlign: 'middle' // 文本垂直对齐方式  
-		// 				}  
-		// 				}, {  
-		// 				type: 'text',  
-		// 				right: '5%', // 文本水平位置,这里设置为距离右侧 10% 的位置,作为右下方的文本  
-		// 				top: '90%', // 文本垂直位置,这里设置为距离底部 10% 的位置  
-		// 				style: {
-		// 				  text: '醒来时间:'+endSleepTime, // 文本内容  
-		// 				  textFill: '#333', // 文本颜色  
-		// 				  textFontSize: 14, // 文本字体大小  
-		// 				  textAlign: 'right', // 文本水平对齐方式  
-		// 				  verticalAlign: 'middle' // 文本垂直对齐方式  
-		// 				}  
-		// 			}],
-		//       }; 
-			  
-  chart6.setOption(option, true);
+function updateBodyMovements(data1, data2, startSleepTime, endSleepTime, that) {
+	if (chartBodyMovementsLine) {
+		setBodyMovementsOption(chartBodyMovementsLine, data1, data2);
+	} else {
+		that.selectComponent('#chartBodyMovementsLine-dom').init((canvas, width, height, dpr) => {
+			const chart = echarts.init(canvas, null, {
+				width: width,
+				height: height,
+				devicePixelRatio: dpr // new
+			});
+			canvas.setChart(chart);
+			setBodyMovementsOption(chart, data1, data2);
+
+			// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+			chartBodyMovementsLine = chart;
+
+			// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+			return chart;
+		});
+	}
 }
 
-function flushChart7(data1,data2,startSleepTime,endSleepTime,that) {
-	data1 = (!data1 || data1.length === 0)?['']:data1;
-	data2 = (!data2 || data2.length === 0)?['']:data2;
-  var option = {
-	  // backgroundColor: rgba(168, 115, 182, 0.5), // 设置背景色
-	  tooltip: {},
-	  xAxis: {
-		  axisLabel: {  
-				  color: '#a5a5a5' ,// 设置 x 轴标签颜色为白色  
-				  fontSize: 12,
-				  // interval: 0, // 设置为0表示全部显示,设置为非零值表示间隔显示
-				  // rotate: 45, // 旋转45度
-			  },
-		  splitLine: {
-		        show: false, // 是否显示刻度线  
-		        
-		      }, 
-		  axisTick: {  
-			  // 不显示Y轴刻度线  
-			  show: false  
-		  }, 
-		  data: data1,
-		  axisLine: {  
-		              // 不显示X轴轴线  
-		              show: false  
-		          }
-	  },
-	  yAxis: {
-		// Y 轴配置
-		type: 'value',
-		// inverse: true,// 设置 Y 轴逆序
-		// 设置 Y 轴名称
-		name: '离床次数',
-		// 设置 Y 轴名称的位置
-		nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
-		axisLine: {
-			// 不显示Y轴轴线  
-			show: false,
-		  },
-		axisLabel: {  
-			color: '#000',
+
+//心脏系统
+
+function initChartCardiacSystemLine(canvas, width, height, dpr) {
+	// 在这里初始化图表
+	const chart = echarts.init(canvas, null, {
+		width: width,
+		height: height,
+		devicePixelRatio: dpr // new
+	});
+	canvas.setChart(chart);
+	setCardiacSystemOption(chart);
+
+	// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+	chartCardiacSystemLine = chart;
+
+	// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+	return chart;
+};
+
+
+function setCardiacSystemOption(chart, data1 = [], data2 = [],) {
+	var option = option = {
+		tooltip: {
 			show: true,
-			fontSize: 12,
-			formatter: function (value) {
-				if(value == 0){
-					return '离床';
-				}else if(value == 1){
-					return '在床';
-				}else{
-					return '';
-				}
+			trigger: 'axis',
+			formatter: function (param) {
+				return `${(param[0].value || 0) + '次'}`
 			}
 		},
-		axisTick: {  
-			 // 不显示Y轴刻度线  
-			 show: false  
-		}, 
-		splitLine: {  
-		      show: false ,// 不显示纵坐标轴的刻度线  
-			  lineStyle: {
-			    color: 'rgba(222, 222, 222, 0.1)', // 灰色并调整透明度  
-			    width: 1, // 刻度线宽度  
-			    type: 'solid' // 刻度线类型,默认为实线  
-			  }  
-		    }, 
-	  },
-	  series: [{
-				  type: 'line',  
-				  data: data2,
-				  smooth: true, // 使折线平滑  
-				  markPoint: {  
-					  symbol: 'circle', // 标记的符号为圆圈  
-					  symbolSize: 10, // 标记的大小  
-					  itemStyle: {  
-							  color: 'rgba(85, 255, 127, 0.8)', 
-							  // borderColor: 'blue', 
-							  borderWidth: 1, // 设置边框宽度  
-							  fill: 'none' // 设置填充颜色为无,即空心  
-						  }, 
-					  data: [  
-						  // 假设 data[0] 和 data[data.length - 1] 分别是开始和结束的数据点  
-						  {coord: [data1?data1[0]:'', data2?data2[0]:''], name: '开始'},  
-						  {coord: [data1?data1[data1.length-1]:'', data2?data2[data2.length-1]:''], name: '结束'}  
-						  // 如果要添加拐角处的标记,需要手动计算并添加  
-					  ]  
-				  },
-				  areaStyle: { // 折线下方的区域样式  
-				        color: new echarts.graphic.LinearGradient(  
-				          0, 0, 0, 1, // 渐变方向  
-				          [ // 渐变颜色  
-				            {offset: 0, color: 'rgba(85, 255, 127, 0.8)'}, // 使用之前定义的渐变  
-				            {offset: 0.9, color: 'rgba(255, 255, 255, 1)'} // 可选,结束颜色  
-				          ]  
-				        ),  
-				        opacity: 0.3 // 区域的不透明度,可以根据需要调整  
-				      },  
-				      lineStyle: {  
-						  color: 'rgba(85, 255, 127, 0.8)' // 奶白色,80% 透明度  
-					  },
-				      showSymbol: false // 是否显示标记图形  
+		dataZoom: [
+			{ // 第一个 dataZoom 组件
+				type: 'inside',
+			},
+		],
+		grid: {
+			top: '20rpx',
+			left: '20rpx',
+			right: '20rpx',
+			bottom: '10rpx',
+			containLabel: true
+		},
+		xAxis: {
+			type: 'category',
+			axisLabel: {
+				color: '#6C6970',// 设置 x 轴标签颜色为白色  
+				fontSize: 10
+			},
+			boundaryGap: false,
+			splitLine: {
+				show: false, // 是否显示刻度线  
+
+			},
+			axisTick: {
+				// 不显示Y轴刻度线  
+				show: false
+			},
+			data: data1,
+			axisLine: {
+				// 不显示X轴轴线  
+				show: false
 			}
-			],
-			// graphic: {  
-			//         type: 'rect',  
-			//         left: 'center', // 相对于容器左侧的距离  
-			//         top: 'bottom', // 相对于容器上侧的距离  
-			//         width: 'auto', // 宽度自适应  
-			//         height: '10', // 设置你想要的渐变高度  
-			//         shape: {  
-			//             // 可以通过 shape 来调整矩形的形状以适应你的需求  
-			//         },  
-			//         style: {  
-			//             fill: {  
-			//                 type: 'linear',  
-			//                 x: 0,  
-			//                 y: 0,  
-			//                 x2: 0,  
-			//                 y2: 1,  
-			//                 colorStops: [{  
-			//                     offset: 0, color: 'rgba(0,0,0,0)' // 开始颜色,透明  
-			//                 }, {  
-			//                     offset: 1, color: 'rgba(255,0,0,0.3)' // 结束颜色,半透明红色  
-			//                 }],  
-			//                 global: false // 缺省为 false  
-			//             },  
-			//             // 其他样式配置  
-			//         },  
-			//         z: -1 // 设置层级,确保在折线图下方  
-			//     }  
-			// graphic: [{
-			// 			type: 'text',  
-			// 			left: '5%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
-			// 			top: '90%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
-			// 			style: {  
-			// 			  text: '入睡时间:'+startSleepTime?startSleepTime:'', // 文本内容  
-			// 			  textFill: '#333', // 文本颜色  
-			// 			  textFontSize: 14, // 文本字体大小  
-			// 			  textAlign: 'left', // 文本水平对齐方式  
-			// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
-			// 			}  
-			// 			}, {  
-			// 			type: 'text',  
-			// 			right: '5%', // 文本水平位置,这里设置为距离右侧 10% 的位置,作为右下方的文本  
-			// 			top: '90%', // 文本垂直位置,这里设置为距离底部 10% 的位置  
-			// 			style: {
-			// 			  text: '醒来时间:'+endSleepTime?endSleepTime:'', // 文本内容  
-			// 			  textFill: '#333', // 文本颜色  
-			// 			  textFontSize: 14, // 文本字体大小  
-			// 			  textAlign: 'right', // 文本水平对齐方式  
-			// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
-			// 			}  
-			// 		}],
-			};
-			  
-  chart7.setOption(option, true);
+		},
+		yAxis: {
+			type: 'value',
+			max: 100,
+			min: 0,
+			show: true,
+			offset: 10,
+			splitLine: {
+				show: false
+			},
+			axisLabel: {
+				hideOverlap: true,
+				fontSize: 10,
+			}
+		},
+		series: [{
+			type: 'line',
+			smooth: true,
+			lineStyle: {
+				width: 2,
+				color: '#F47893'
+			},
+			showSymbol: false,
+			areaStyle: {
+				opacity: 0.8,
+				color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+					{
+						offset: 0,
+						color: 'rgba(244, 120, 147, 0.5)'
+					},
+					{
+						offset: 1,
+						color: 'rgba(250, 140, 164, 0.3)'
+					}
+				])
+			},
+			data: data2,
+		}]
+	};
+
+	chart.setOption(option, true);
 }
 
-function flushChart8(data1,data2,startSleepTime,endSleepTime,that) {
-  var option = {
-  	  // backgroundColor: rgba(168, 115, 182, 0.5), // 设置背景色
-  	  tooltip: {},
-  	  xAxis: {
-		  axisLabel: {
-				  color: '#000' // 设置 x 轴标签颜色为白色  
-			  },
-		  splitLine: {
-				show: false, // 是否显示刻度线  
-			  }, 
-		  axisTick: {  
-			  // 不显示Y轴刻度线  
-			  show: false  
-		  }, 
-		  axisLine: {  
-			  // 不显示X轴轴线  
-			  show: false  
-		  },
-		  data: data1?data1:[]
-  	  },
-  	  yAxis: {
-  		// Y 轴配置
-  		type: 'value',
-  		// 设置 Y 轴名称
-  		name: '睡眠状态',
-  		// 设置 Y 轴名称的位置
-  		nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
-		axisLine: {
-			// 不显示Y轴轴线  
-			show: false,
-		  },
-		axisTick: {  
-			 // 不显示Y轴刻度线  
-			 show: false  
-		  },
-  		axisLabel: {
-			color: '#000',
-  		    formatter: function (value) {
-  		      return that.sleepRmove_arrChange(value);
-  		    }
-  		  },
-		  splitLine: {  
-			  show: false ,// 不显示纵坐标轴的刻度线  
-			  lineStyle: {
-				color: 'rgba(222, 222, 222, 0.1)', // 灰色并调整透明度  
-				width: 1, // 刻度线宽度  
-				type: 'solid' // 刻度线类型,默认为实线  
-			  }  
-			},
-  	  },
-  	  series: [{
-  				  type: 'line',  
-  				  data: data2?data2:[],
-				  lineStyle: {
-					  color: 'rgba(255, 255, 255, 0.8)' // 奶白色,80% 透明度  
-				  },
-				  showSymbol: false, // 是否显示标记图形  
-				  smooth: true, // 使折线平滑
-				    markPoint: {  
-				  	  symbol: 'circle', // 标记的符号为圆圈  
-				  	  symbolSize: 10, // 标记的大小  
-				  	  itemStyle: {  
-				  			  color: 'rgba(0, 170, 255, 0.8)', 
-				  			  // borderColor: 'blue', 
-				  			  borderWidth: 1, // 设置边框宽度  
-				  			  fill: 'none' // 设置填充颜色为无,即空心  
-				  		  }, 
-				  	  data: [  
-				  		  // 假设 data[0] 和 data[data.length - 1] 分别是开始和结束的数据点  
-				  		  {coord: [data1?data1[0]:'', data2?data2[0]:''], name: '开始'},  
-				  		  {coord: [data1?data1[data1.length-1]:'', data2?data2[data2.length-1]:''], name: '结束'}  
-				  		  // 如果要添加拐角处的标记,需要手动计算并添加  
-				  	  ]  
-				    },
-				    areaStyle: { // 折线下方的区域样式  
-				  		color: new echarts.graphic.LinearGradient(  
-				  		  0, 0, 0, 1, // 渐变方向  
-				  		  [ // 渐变颜色  
-				  			{offset: 0, color: 'rgba(0, 170, 255, 0.8)'}, // 使用之前定义的渐变  
-				  			{offset: 0.9, color: 'rgba(255, 255, 255, 1)'} // 可选,结束颜色  
-				  		  ]  
-				  		),  
-				  		opacity: 0.3 // 区域的不透明度,可以根据需要调整  
-				  	  }, 
-				},
-				
-  			],
-  			// graphic: [{
-  			// 			type: 'text',  
-  			// 			left: '5%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
-  			// 			top: '90%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
-  			// 			style: {  
-  			// 			  text: '入睡时间:'+startSleepTime?startSleepTime:'', // 文本内容  
-  			// 			  textFill: '#333', // 文本颜色  
-  			// 			  textFontSize: 14, // 文本字体大小  
-  			// 			  textAlign: 'left', // 文本水平对齐方式  
-  			// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
-  			// 			}  
-  			// 			}, {  
-  			// 			type: 'text',  
-  			// 			right: '5%', // 文本水平位置,这里设置为距离右侧 10% 的位置,作为右下方的文本  
-  			// 			top: '90%', // 文本垂直位置,这里设置为距离底部 10% 的位置  
-  			// 			style: {
-  			// 			  text: '醒来时间:'+endSleepTime?endSleepTime:'', // 文本内容  
-  			// 			  textFill: '#333', // 文本颜色  
-  			// 			  textFontSize: 14, // 文本字体大小  
-  			// 			  textAlign: 'right', // 文本水平对齐方式  
-  			// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
-  			// 			}  
-  			// 		}],
-  			};
-  			  
-  chart8.setOption(option, true);
+function updateCardiacSystem(data1, data2, that) {
+	if (chartCardiacSystemLine) {
+		setCardiacSystemOption(chartCardiacSystemLine, data1, data2);
+	} else {
+		that.selectComponent('#chartCardiacSystemLine-dom').init((canvas, width, height, dpr) => {
+			const chart = echarts.init(canvas, null, {
+				width: width,
+				height: height,
+				devicePixelRatio: dpr // new
+			});
+			canvas.setChart(chart);
+			setCardiacSystemOption(chart, data1, data2);
+
+			// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+			chartBodyMovementsLine = chart;
+
+			// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+			return chart;
+		});
+	}
 }
 
-function flushChart81(data1,data2,startSleepTime,endSleepTime,that) {
-  var option = {
-  	  // backgroundColor: rgba(168, 115, 182, 0.5), // 设置背景色
-  	  tooltip: {},
-  	  xAxis: {
-		  axisLabel: {
-				  color: '#000' // 设置 x 轴标签颜色为白色  
-			  },
-		  splitLine: {
+//平均呼吸率
+
+function initChartRespiratoryLine(canvas, width, height, dpr) {
+	// 在这里初始化图表
+	const chart = echarts.init(canvas, null, {
+		width: width,
+		height: height,
+		devicePixelRatio: dpr // new
+	});
+	canvas.setChart(chart);
+	setRespiratoryOption(chart);
+
+	// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+	chartRespiratoryLine = chart;
+
+	// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+	return chart;
+};
+
+
+function setRespiratoryOption(chart, data1 = [], data2 = [],) {
+	var option = option = {
+		tooltip: {
+			show: true,
+			trigger: 'axis',
+			formatter: function (param) {
+				return `${(param[0].value || 0) + '次'}`
+			}
+		},
+		dataZoom: [
+			{ // 第一个 dataZoom 组件
+				type: 'inside',
+			},
+		],
+		grid: {
+			top: '20rpx',
+			left: '20rpx',
+			right: '20rpx',
+			bottom: '10rpx',
+			containLabel: true
+		},
+		xAxis: {
+			type: 'category',
+			axisLabel: {
+				color: '#6C6970',// 设置 x 轴标签颜色为白色  
+				fontSize: 10
+			},
+			boundaryGap: false,
+			splitLine: {
 				show: false, // 是否显示刻度线  
-			  }, 
-		  axisTick: {  
-			  // 不显示Y轴刻度线  
-			  show: false  
-		  }, 
-		  axisLine: {  
-			  // 不显示X轴轴线  
-			  show: false  
-		  },
-		  data: data1?data1:[]
-  	  },
-  	  yAxis: {
-  		// Y 轴配置
-  		type: 'value',
-  		// 设置 Y 轴名称
-  		name: '呼吸平均值',
-  		// 设置 Y 轴名称的位置
-  		nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
-		axisLine: {
-			// 不显示Y轴轴线  
-			show: false,
-		  },
-		axisTick: {  
-			 // 不显示Y轴刻度线  
-			 show: false  
-		  },
-  		axisLabel: {
-			color: '#000',
-  		    // formatter: function (value) {
-  		    //   return that.sleepRmove_arrChange(value);
-  		    // }
-  		  },
-		  splitLine: {  
-			  show: false ,// 不显示纵坐标轴的刻度线  
-			  lineStyle: {
-				color: 'rgba(222, 222, 222, 0.1)', // 灰色并调整透明度  
-				width: 1, // 刻度线宽度  
-				type: 'solid' // 刻度线类型,默认为实线  
-			  }  
-			},
-  	  },
-  	  series: [{
-  				  type: 'line',  
-  				  data: data2?data2:[],
-				  lineStyle: {
-					  color: 'rgba(0, 182, 182, 0.8)' // 奶白色,80% 透明度  
-				  },
-				  showSymbol: false ,// 是否显示标记图形 
-				  smooth: true, // 使折线平滑
-					markPoint: {  
-					  symbol: 'circle', // 标记的符号为圆圈  
-					  symbolSize: 10, // 标记的大小  
-					  itemStyle: {  
-							  color: 'rgba(0, 182, 182, 0.8)', 
-							  // borderColor: 'blue', 
-							  borderWidth: 1, // 设置边框宽度  
-							  fill: 'none' // 设置填充颜色为无,即空心  
-						  }, 
-					  data: [  
-						  // 假设 data[0] 和 data[data.length - 1] 分别是开始和结束的数据点  
-						  {coord: [data1?data1[0]:'', data2?data2[0]:''], name: '开始'},  
-						  {coord: [data1?data1[data1.length-1]:'', data2?data2[data2.length-1]:''], name: '结束'}  
-						  // 如果要添加拐角处的标记,需要手动计算并添加  
-					  ]  
+
+			},
+			axisTick: {
+				// 不显示Y轴刻度线  
+				show: false
+			},
+			data: data1,
+			axisLine: {
+				// 不显示X轴轴线  
+				show: false
+			}
+		},
+		yAxis: {
+			type: 'value',
+			max: 24,
+			min: 0,
+			show: true,
+			offset: 10,
+			splitLine: {
+				show: false
+			},
+			axisLabel: {
+				hideOverlap: true,
+				fontSize: 10,
+			}
+		},
+		series: [{
+			type: 'line',
+			smooth: true,
+			lineStyle: {
+				width: 2,
+				color: '#06A9AD'
+			},
+			showSymbol: false,
+			areaStyle: {
+				opacity: 0.8,
+				color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+					{
+						offset: 0,
+						color: 'rgba(186, 246, 231, 1)'
 					},
-					areaStyle: { // 折线下方的区域样式  
-						color: new echarts.graphic.LinearGradient(  
-						  0, 0, 0, 1, // 渐变方向  
-						  [ // 渐变颜色  
-							{offset: 0, color: 'rgba(0, 182, 182, 0.8)'}, // 使用之前定义的渐变  
-							{offset: 0.9, color: 'rgba(255, 255, 255, 1)'} // 可选,结束颜色  
-						  ]  
-						),  
-						opacity: 0.3 // 区域的不透明度,可以根据需要调整  
-					  },
-				}
-  			],
-  			// graphic: [{
-  			// 			type: 'text',  
-  			// 			left: '5%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
-  			// 			top: '90%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
-  			// 			style: {  
-  			// 			  text: '入睡时间:'+startSleepTime?startSleepTime:'', // 文本内容  
-  			// 			  textFill: '#333', // 文本颜色  
-  			// 			  textFontSize: 14, // 文本字体大小  
-  			// 			  textAlign: 'left', // 文本水平对齐方式  
-  			// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
-  			// 			}  
-  			// 			}, {  
-  			// 			type: 'text',  
-  			// 			right: '5%', // 文本水平位置,这里设置为距离右侧 10% 的位置,作为右下方的文本  
-  			// 			top: '90%', // 文本垂直位置,这里设置为距离底部 10% 的位置  
-  			// 			style: {
-  			// 			  text: '醒来时间:'+endSleepTime?endSleepTime:'', // 文本内容  
-  			// 			  textFill: '#333', // 文本颜色  
-  			// 			  textFontSize: 14, // 文本字体大小  
-  			// 			  textAlign: 'right', // 文本水平对齐方式  
-  			// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
-  			// 			}  
-  			// 		}],
-  			};
-  			  
-  chart81.setOption(option, true);
+					{
+						offset: 1,
+						color: 'rgba(255, 255, 255, 0)'
+					}
+				])
+			},
+			data: data2,
+		}]
+	};
+
+	chart.setOption(option, true);
 }
 
-function flushChart9(data1,data2,startSleepTime,endSleepTime,that) {
-  var option = {
-  	  // backgroundColor: rgba(168, 115, 182, 0.5), // 设置背景色
-  	  tooltip: {},
-  	  xAxis: {
-		  axisLabel: {
-				  color: '#000' // 设置 x 轴标签颜色为白色  
-			  },
-		  splitLine: {
-				show: false, // 是否显示刻度线  
-			  }, 
-		  axisTick: {  
-			  // 不显示Y轴刻度线  
-			  show: false  
-		  }, 
-		  axisLine: {  
-			  // 不显示X轴轴线  
-			  show: false  
-		  },
-		  data: data1?data1:[]
-  	  },
-  	  yAxis: {
-  		// Y 轴配置
-  		type: 'value',
-  		// 设置 Y 轴名称
-  		name: '睡眠状态',
-  		// 设置 Y 轴名称的位置
-  		nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
-		axisLine: {
-			// 不显示Y轴轴线  
-			show: false,
-		  },
-		axisTick: {  
-			 // 不显示Y轴刻度线  
-			 show: false  
-		  },
-  		axisLabel: {
-			color: '#000',
-  		    formatter: function (value) {
-  		      return that.sleepRsnoring_arrChange(value);
-  		    }
-  		  },
-		  splitLine: {  
-			  show: false ,// 不显示纵坐标轴的刻度线  
-			  lineStyle: {
-				color: 'rgba(222, 222, 222, 0.1)', // 灰色并调整透明度  
-				width: 1, // 刻度线宽度  
-				type: 'solid' // 刻度线类型,默认为实线  
-			  }  
-			}, 
-  	  },
-  	  series: [{
-  				  type: 'line',  
-  				  data: data2?data2:[],
-				  lineStyle: {
-					  color: 'rgba(255, 170, 127, 0.8)' // 奶白色,80% 透明度  
-				  },
-				  showSymbol: false ,// 是否显示标记图形  
-				  smooth: true, // 使折线平滑
-					markPoint: {  
-					  symbol: 'circle', // 标记的符号为圆圈  
-					  symbolSize: 10, // 标记的大小  
-					  itemStyle: {  
-							  color: 'rgba(255, 170, 127, 0.8)', 
-							  // borderColor: 'blue', 
-							  borderWidth: 1, // 设置边框宽度  
-							  fill: 'none' // 设置填充颜色为无,即空心  
-						  }, 
-					  data: [  
-						  // 假设 data[0] 和 data[data.length - 1] 分别是开始和结束的数据点  
-						  {coord: [data1?data1[0]:'', data2?data2[0]:''], name: '开始'},  
-						  {coord: [data1?data1[data1.length-1]:'', data2?data2[data2.length-1]:''], name: '结束'}  
-						  // 如果要添加拐角处的标记,需要手动计算并添加  
-					  ]  
-					},
-					areaStyle: { // 折线下方的区域样式  
-						color: new echarts.graphic.LinearGradient(  
-						  0, 0, 0, 1, // 渐变方向  
-						  [ // 渐变颜色  
-							{offset: 0, color: 'rgba(255, 170, 127, 0.8)'}, // 使用之前定义的渐变  
-							{offset: 0.9, color: 'rgba(255, 255, 255, 1)'} // 可选,结束颜色  
-						  ]  
-						),  
-						opacity: 0.3 // 区域的不透明度,可以根据需要调整  
-					  }, 
-				}
-  			],
-  			// graphic: [{
-  			// 			type: 'text',  
-  			// 			left: '5%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
-  			// 			top: '90%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
-  			// 			style: {  
-  			// 			  text: '入睡时间:'+startSleepTime?startSleepTime:'', // 文本内容  
-  			// 			  textFill: '#333', // 文本颜色  
-  			// 			  textFontSize: 14, // 文本字体大小  
-  			// 			  textAlign: 'left', // 文本水平对齐方式  
-  			// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
-  			// 			}  
-  			// 			}, {  
-  			// 			type: 'text',  
-  			// 			right: '5%', // 文本水平位置,这里设置为距离右侧 10% 的位置,作为右下方的文本  
-  			// 			top: '90%', // 文本垂直位置,这里设置为距离底部 10% 的位置  
-  			// 			style: {
-  			// 			  text: '醒来时间:'+endSleepTime?endSleepTime:'', // 文本内容  
-  			// 			  textFill: '#333', // 文本颜色  
-  			// 			  textFontSize: 14, // 文本字体大小  
-  			// 			  textAlign: 'right', // 文本水平对齐方式  
-  			// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
-  			// 			}  
-  			// 		}],
-  			};
-  			  
-  chart9.setOption(option, true);
+function updateRespiratory(data1, data2, startSleepTime, endSleepTime, that) {
+	if (chartRespiratoryLine) {
+		setRespiratoryOption(chartRespiratoryLine, data1, data2);
+	} else {
+		that.selectComponent('#chartRespiratoryLine-dom').init((canvas, width, height, dpr) => {
+			const chart = echarts.init(canvas, null, {
+				width: width,
+				height: height,
+				devicePixelRatio: dpr // new
+			});
+			canvas.setChart(chart);
+			setRespiratoryOption(chart, data1, data2);
+
+			// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+			chartRespiratoryLine = chart;
+
+			// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+			return chart;
+		});
+	}
 }
 
-function flushChart10(data1,data2,startSleepTime,endSleepTime,that) {
-  var option = {
-  	  // backgroundColor: rgba(168, 115, 182, 0.5), // 设置背景色
-  	  tooltip: {},
-  	  xAxis: {
-		  axisLabel: {
-				  color: '#000' // 设置 x 轴标签颜色为白色  
-			  },
-		  splitLine: {
+//打鼾
+
+function initSnoringLine(canvas, width, height, dpr) {
+	// 在这里初始化图表
+	const chart = echarts.init(canvas, null, {
+		width: width,
+		height: height,
+		devicePixelRatio: dpr // new
+	});
+	canvas.setChart(chart);
+	setSnoringOption(chart);
+
+	// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+	chartSnoringLine = chart;
+
+	// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+	return chart;
+};
+
+
+function setSnoringOption(chart, data1 = [], data2 = [],) {
+	var option = option = {
+		tooltip: {
+			show: true,
+			trigger: 'axis',
+			formatter: function (param) {
+				return `${param[0] && param[0].value == 1 ? '打鼾' : '否'}`
+			}
+		},
+		dataZoom: [
+			{ // 第一个 dataZoom 组件
+				type: 'inside',
+			},
+		],
+		grid: {
+			top: '10rpx',
+			left: 0,
+			right: '20rpx',
+			bottom: 0,
+			containLabel: true
+		},
+		xAxis: {
+			type: 'category',
+			axisLabel: {
+				color: '#6C6970',// 设置 x 轴标签颜色为白色  
+				fontSize: 10
+			},
+			boundaryGap: false,
+			splitLine: {
 				show: false, // 是否显示刻度线  
-			  }, 
-		  axisTick: {  
-			  // 不显示Y轴刻度线  
-			  show: false  
-		  }, 
-		  axisLine: {  
-			  // 不显示X轴轴线  
-			  show: false  
-		  },  
-		  data: data1?data1:[]
-  	  },
-  	  yAxis: {
-  		// Y 轴配置
-  		type: 'value',
-  		// 设置 Y 轴名称
-  		name: '睡眠状态',
-  		// 设置 Y 轴名称的位置
-  		nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
-		axisLine: {
-			// 不显示Y轴轴线  
+
+			},
+			axisTick: {
+				// 不显示Y轴刻度线  
+				show: false
+			},
+			data: data1,
+			axisLine: {
+				// 不显示X轴轴线  
+				show: false
+			}
+		},
+		yAxis: {
+			type: 'value',
+			max: 24,
+			min: 0,
 			show: false,
-		  },
-		axisTick: {  
-			 // 不显示Y轴刻度线  
-			 show: false  
-		  },
-  		axisLabel: {
-			color: '#000',
-  		    formatter: function (value) {
-  		      return that.sleepRhxstop_arrChange(value);
-  		    }
-  		  },
-		  splitLine: {  
-			  show: false ,// 不显示纵坐标轴的刻度线  
-			  lineStyle: {
-				color: 'rgba(222, 222, 222, 0.1)', // 灰色并调整透明度  
-				width: 1, // 刻度线宽度  
-				type: 'solid' // 刻度线类型,默认为实线  
-			  }  
-			}, 
-  	  },
-  	  series: [{
-  				  type: 'line',  
-  				  data: data2?data2:[],
-				  lineStyle: {
-					  color: 'rgba(0, 85, 255, 0.8)' // 奶白色,80% 透明度  
-				  },
-				  showSymbol: false ,// 是否显示标记图形  
-				  smooth: true, // 使折线平滑
-					markPoint: {  
-					  symbol: 'circle', // 标记的符号为圆圈  
-					  symbolSize: 10, // 标记的大小  
-					  itemStyle: {  
-							  color: 'rgba(0, 85, 255, 0.8)', 
-							  // borderColor: 'blue', 
-							  borderWidth: 1, // 设置边框宽度  
-							  fill: 'none' // 设置填充颜色为无,即空心  
-						  }, 
-					  data: [  
-						  // 假设 data[0] 和 data[data.length - 1] 分别是开始和结束的数据点  
-						  {coord: [data1?data1[0]:'', data2?data2[0]:''], name: '开始'},  
-						  {coord: [data1?data1[data1.length-1]:'', data2?data2[data2.length-1]:''], name: '结束'}  
-						  // 如果要添加拐角处的标记,需要手动计算并添加  
-					  ]  
+		},
+		series: [{
+			type: 'line',
+			smooth: true,
+			lineStyle: {
+				width: 2,
+				color: '#EE8B52'
+			},
+			showSymbol: false,
+			areaStyle: {
+				opacity: 0.8,
+				color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+					{
+						offset: 0,
+						color: 'rgba(249, 211, 189, 1)'
 					},
-					areaStyle: { // 折线下方的区域样式  
-						color: new echarts.graphic.LinearGradient(  
-						  0, 0, 0, 1, // 渐变方向  
-						  [ // 渐变颜色  
-							{offset: 0, color: 'rgba(0, 85, 255, 0.8)'}, // 使用之前定义的渐变  
-							{offset: 0.9, color: 'rgba(255, 255, 255, 1)'} // 可选,结束颜色  
-						  ]  
-						),  
-						opacity: 0.3 // 区域的不透明度,可以根据需要调整  
-					  }, 
-				}
-  			],
-  			// graphic: [{
-  			// 			type: 'text',  
-  			// 			left: '5%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
-  			// 			top: '90%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
-  			// 			style: {  
-  			// 			  text: '入睡时间:'+startSleepTime?startSleepTime:'', // 文本内容  
-  			// 			  textFill: '#333', // 文本颜色  
-  			// 			  textFontSize: 14, // 文本字体大小  
-  			// 			  textAlign: 'left', // 文本水平对齐方式  
-  			// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
-  			// 			}  
-  			// 			}, {  
-  			// 			type: 'text',  
-  			// 			right: '5%', // 文本水平位置,这里设置为距离右侧 10% 的位置,作为右下方的文本  
-  			// 			top: '90%', // 文本垂直位置,这里设置为距离底部 10% 的位置  
-  			// 			style: {
-  			// 			  text: '醒来时间:'+endSleepTime?endSleepTime:'', // 文本内容  
-  			// 			  textFill: '#333', // 文本颜色  
-  			// 			  textFontSize: 14, // 文本字体大小  
-  			// 			  textAlign: 'right', // 文本水平对齐方式  
-  			// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
-  			// 			}  
-  			// 		}],
-  			};
-  			  
-  chart10.setOption(option, true);
-}
+					{
+						offset: 1,
+						color: 'rgba(255, 255, 255, 0)'
+					}
+				])
+			},
+			data: data2,
+		}]
+	};
 
-function flushChart11(data1,data2,that) {
-	// data2 = data2?data2.map(value => {
-	//     return value+10; 
-	// }):[]; 
-	let adjustedData = data2?data2.map(value => {  
-	    return 10; 
-	}):[]; 
-  // var option = {
-	 //  // title: {
-	 //  //   text: '睡眠呼吸监测',
-	 //  //   left: 'center',
-	 //  //   textStyle: {
-	 //  //               color: '#ffffff', // 字体颜色  
-	 //  //               fontStyle: 'normal', // 字体风格  
-	 //  //               // fontWeight: 'bold', // 字体粗细  
-	 //  //               fontFamily: 'sans-serif', // 字体族  
-	 //  //               fontSize: 18 // 字体大小  
-	 //  //             },
-	 //  //   backgroundColor: '#57f7ff'
-	 //  // },
-	 //  // grid: {   
-		//  //  top: '10%', 
-		//  //  height: '30%',   
-	 //  // },
-	 //  tooltip: {},
-	 //  xAxis: {
-		//   type: 'category',  
-		//   axisLabel: {
-		// 		  color: 'rgba(0, 0, 0, 0.8)' // 设置 x 轴标签颜色为白色  
-		// 	  },
-		//   axisTick: {  
-		// 	  // 不显示Y轴刻度线  
-		// 	  show: false  
-		//   }, 
-		//   axisLine: {  
-		// 	  // 不显示X轴轴线  
-		// 	  show: false  
-		//   },
-		//   splitLine: {
-		// 		show: false, // 是否显示刻度线  
-		// 	  },  
-		//   data: data1?data1:[]
-	 //  },
-	 //  yAxis: {
-		//   // Y 轴配置
-		//   type: 'value',
-		//   // 设置 Y 轴名称
-		//   name: '睡眠状态',
-		//   // 设置 Y 轴名称的位置
-		//   nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
-		//   axisLine: {
-		// 	// 不显示Y轴轴线  
-		// 	show: false,
-		//   },
-		//   axisTick: {  
-		// 	 // 不显示Y轴刻度线  
-		// 	 show: false  
-		//   },
-		//   axisLabel: {
-		// 	  color: '#000',
-		//       formatter: function (value) {
-		//         return that.sleepStateChange(value);
-		//       }
-		//     },
-		//   splitLine: {  
-		// 	  show: false ,// 不显示纵坐标轴的刻度线  
-		// 	  lineStyle: {
-		// 		color: 'rgba(0, 170, 255, 0.9)', // 灰色并调整透明度  
-		// 		width: 1, // 刻度线宽度  
-		// 		type: 'solid' // 刻度线类型,默认为实线  
-		// 	  }  
-		// 	}, 
-	 //  },
-	 //  series: [{  
-  //         type: 'bar',  
-  //         data: data2?data2:[],
-		//  //  barCategoryGap: '50%', // 类别间柱形距离
-		//  //  label: {  
-		// 	// show: true,  
-		// 	// position: 'top',  
-		// 	// formatter: '{b}: {c}'  
-		//  //  },
-		//  stack: 'stackGroup',
-		//  itemStyle: {  
-		// 	 color: 'rgba(0,0,0,0)' // 透明颜色  
-		//  },
-		//   // itemStyle: {  
-		// 	 //  color: function(params) {
-		// 		//   // 根据数据或其他条件返回颜色值  
-		// 		//   // 这里只是简单地返回了一个颜色数组中的颜色  
-		// 		//   // var colorList = ['#c23531','#2f4554','#61a0a8','#d48265','#91c7ae','#749f83','#ca8622','#bda29a','#6e7074','#546570','#c4ccd3'];  
-		// 		//   if(params.value == '0'){
-		// 		// 	  return '#e2e2e2'
-		// 		//   }else if(params.value == '10'){
-		// 		// 	  return '#8cc4ff'
-		// 		//   }else if(params.value == '20'){
-		// 		// 	  return '#a6b2ff'
-		// 		//   }else if(params.value == '30'){
-		// 		// 	  return '#9b79ff'
-		// 		//   }else{
-		// 		// 	  return '';
-		// 		//   }
-		// 		//   // return colorList[params.dataIndex % colorList.length];  
-		// 	 //  }
-		//   // }  
-  //       }]
-	 //  };
-	  
-  var option = {  
-      xAxis: {  
-          type: 'category',  
-          data: data1?data1:[]  
-      },  
-      yAxis: {  
-          type: 'value',  
-          min: 0, // 确保 Y 轴从 0 开始  
-          // max 可以根据需要设置,但通常不需要为了固定柱子高度而设置  
-		  axisLabel: {
-		  	  color: '#000',
-		        formatter: function (value) {
-		          return that.sleepStateChange(value);
-		        }
-		      },
-      },  
-      series: [  
-          // 透明柱子,占满整个柱子空间  
-          {  
-              data: data2?data2:[],  
-              type: 'bar',  
-              stack: 'stackGroup',  
-              itemStyle: {  
-                  color: 'rgba(0,0,0,0)' // 透明颜色  
-              },  
-              barGap: '-100%', // 设置柱子间距为负值,让柱子紧挨在一起  
-              barMaxWidth: '30px' // 根据需要调整柱子宽度  
-          },  
-          // 有色柱子,只显示上半部分(固定高度)  
-          {  
-              data: adjustedData, // 固定高度数据  
-              type: 'bar',  
-              stack: 'stackGroup', // 与透明系列使用相同的叠加组名  
-              itemStyle: {  
-                  color: function(params) {
-					  console.log('params='+JSON.stringify(params))
-					  if(data2 && data2[params.dataIndex] == 0){
-						  return '#e2e2e2'
-					  }else if(data2 && data2[params.dataIndex] == 10){
-						  return '#d8c6ff'
-					  }else if(data2 && data2[params.dataIndex] == 20){
-						  return '#c6b3ff'
-					  }else if(data2 && data2[params.dataIndex] == 30){
-						  return '#b090ff'
-					  }else{
-						  return '';
-					  }
-                  } 
-              },  
-              barGap: '-100%', // 保持与透明系列相同的柱子间距  
-              barMaxWidth: '30px' // 保持与透明系列相同的宽度  
-          }  
-      ]  
-  };
-  chart11.setOption(option, true);
+	chart.setOption(option, true);
 }
 
-var homeApi = "https://haold.aidsleep.cn";
-var homeApi_http = "http://haold.aidsleep.cn";
-var homeApi_http_port = "8123";
-var homeApi_https = "https://haold.aidsleep.cn";
-const aipushApi = "https://aipush.aidsleep.cn";
-const token_15 = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJiN2JlOGE0MDExZjY0NjA2OGUxYjJiZTE4M2Y2NzU0NSIsImlhdCI6MTcxMTYxNDY2NCwiZXhwIjoyMDI2OTc0NjY0fQ.XJ73cXAoEsouTgvgpNVobq9oKdwlJr88TiAFLYlaahE";
-var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJlZGVjOWI3YWQ0MTQ0ZTIxYWQ1NTE1Nzc5NTkzNjBjNiIsImlhdCI6MTcxMjEzNTM2MywiZXhwIjoyMDI3NDk1MzYzfQ.IfrvdiaVuhCKsdy69JvUYhJ64bnhMT8MI1hN8R38whc";
-const token_push = "b74fd5754c5ef24cf600c39194abdaeb";
+function updateSnoring(data1, data2, startSleepTime, endSleepTime, that) {
+	if (chartSnoringLine) {
+		setSnoringOption(chartSnoringLine, data1, data2);
+	} else {
+		that.selectComponent('#chartSnoringLine-dom').init((canvas, width, height, dpr) => {
+			const chart = echarts.init(canvas, null, {
+				width: width,
+				height: height,
+				devicePixelRatio: dpr // new
+			});
+			canvas.setChart(chart);
+			setSnoringOption(chart, data1, data2);
+
+			// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+			chartSnoringLine = chart;
+
+			// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+			return chart;
+		});
+	}
+}
+
+//呼吸暂停
+
+function initApneaLine(canvas, width, height, dpr) {
+	// 在这里初始化图表
+	const chart = echarts.init(canvas, null, {
+		width: width,
+		height: height,
+		devicePixelRatio: dpr // new
+	});
+	canvas.setChart(chart);
+	setApneaOption(chart);
+
+	// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+	chartApneaLine = chart;
+
+	// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+	return chart;
+};
+
+
+function setApneaOption(chart, data1 = [], data2 = [],) {
+	var option = option = {
+		tooltip: {
+			show: true,
+			trigger: 'axis',
+			formatter: function (param) {
+				return `${param[0] && param[0].value == 1 ? '停止' : '否'}`
+			}
+		},
+		dataZoom: [
+			{ // 第一个 dataZoom 组件
+				type: 'inside',
+			},
+		],
+		grid: {
+			top: '10rpx',
+			left: 0,
+			right: '20rpx',
+			bottom: 0,
+			containLabel: true
+		},
+		xAxis: {
+			type: 'category',
+			axisLabel: {
+				color: '#6C6970',// 设置 x 轴标签颜色为白色  
+				fontSize: 10
+			},
+			boundaryGap: false,
+			splitLine: {
+				show: false, // 是否显示刻度线  
+
+			},
+			axisTick: {
+				// 不显示Y轴刻度线  
+				show: false
+			},
+			data: data1,
+			axisLine: {
+				// 不显示X轴轴线  
+				show: false
+			}
+		},
+		yAxis: {
+			type: 'value',
+			max: 24,
+			min: 0,
+			show: false,
+		},
+		series: [{
+			type: 'line',
+			smooth: true,
+			lineStyle: {
+				width: 2,
+				color: '#6086EF'
+			},
+			showSymbol: false,
+			areaStyle: {
+				opacity: 0.8,
+				color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+					{
+						offset: 0,
+						color: 'rgba(96, 134, 239, 1)'
+					},
+					{
+						offset: 1,
+						color: 'rgba(255, 255, 255, 0)'
+					}
+				])
+			},
+			data: data2,
+		}]
+	};
+
+	chart.setOption(option, true);
+}
+
+function updateApnea(data1, data2, startSleepTime, endSleepTime, that) {
+	if (chartApneaLine) {
+		setApneaOption(chartApneaLine, data1, data2);
+	} else {
+		that.selectComponent('#chartApneaLine-dom').init((canvas, width, height, dpr) => {
+			const chart = echarts.init(canvas, null, {
+				width: width,
+				height: height,
+				devicePixelRatio: dpr // new
+			});
+			canvas.setChart(chart);
+			setApneaOption(chart, data1, data2);
+
+			// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+			chartApneaLine = chart;
+
+			// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+			return chart;
+		});
+	}
+}
+
+
+//深浅睡眠
+
+function initChartTimeWaterfall(canvas, width, height, dpr) {
+	// 在这里初始化图表
+	const chart = echarts.init(canvas, null, {
+		width: width,
+		height: height,
+		devicePixelRatio: dpr // new
+	});
+	canvas.setChart(chart);
+	setTimeWaterfallOption(chart);
+
+	// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+	chartTimeWaterfall = chart;
+
+	// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+	return chart;
+};
+
+
+function setTimeWaterfallOption(chart, data1 = [], data2 = []) {
+	var option = option = {
+		tooltip: {
+			show: true,
+			trigger: 'axis',
+			formatter: function (param) {
+				return `${param[0].value }`
+			}
+		},
+		dataZoom: [
+			{ // 第一个 dataZoom 组件
+				type: 'inside',
+			},
+		],
+		grid: {
+			top: '10rpx',
+			left: '10rpx',
+			right: '40rpx',
+			bottom: 0,
+			containLabel: true
+		},
+		xAxis: {
+			type: 'category',
+			data: data1,//字符串单位数组
+			axisLabel: {
+				color: '#6C6970',// 设置 x 轴标签颜色为白色  
+				fontSize: 12,
+				interval:0,
+				fontWeight: 'bolder',
+				rich: {
+					units: {//单位就富文本了
+						fontSize: 10,
+						fontWeight: 400,
+						color: '#6C6970'
+					},
+				}
+			},
+			boundaryGap: false,
+			splitLine: {
+				show: false, // 是否显示刻度线  
+
+			},
+			axisTick: {
+				// 不显示刻度线  
+				show: false
+			},
+			axisLine: {
+				// 不显示轴线  
+				show: false
+			}
+		},
+		yAxis: {
+			type: 'value',
+			min: 0,
+			show: false,
+		},
+		series: [{
+			barWidth:46,
+			itemStyle: {
+				color: function (params) {
+					// 假设我们有一个颜色数组  
+					var colorList = ['#FDEFA6', '#F1E9FE', '#D8C8FE', '#AB81FF']
+					// 根据数据索引选择颜色  
+					return colorList[params.dataIndex % colorList.length];
+				},
+				borderRadius: [2]
+			},
+			type: 'bar',
+			stack: 'a',
+			data: data2,//分钟数数组
+		}]
+	};
+
+	chart.setOption(option, true);
+}
+
+function updateTimeWaterfall(data1, data2, that) {
+	console.log("data1========>", data1);
+	if (chartTimeWaterfall) {
+		setTimeWaterfallOption(chartTimeWaterfall, data1, data2);
+	} else {
+		that.selectComponent('#chartTimeWaterfall-dom').init((canvas, width, height, dpr) => {
+			const chart = echarts.init(canvas, null, {
+				width: width,
+				height: height,
+				devicePixelRatio: dpr // new
+			});
+			canvas.setChart(chart);
+			setTimeWaterfallOption(chart, data1, data2);
+
+			// 将图表实例绑定到 this 上,可以在其他成员函数(如 dispose)中访问
+			chartTimeWaterfall = chart;
+
+			// 注意这里一定要返回 chart 实例,否则会影响事件处理等
+			return chart;
+		});
+	}
+}
+
+// subpages/data/data.js
+function addZero(str) {
+	if (String(str).length == 1) {
+		return "0" + String(str);
+	} else {
+		return String(str);
+	}
+}
+
+
+function flushChart0(data) {
+	var option = {
+		series: [
+			{
+				name: '进度',
+				type: 'pie',
+				radius: ['50%', '70%'],
+				avoidLabelOverlap: false,
+				label: {
+					show: true,
+					position: 'center'
+				},
+				emphasis: {
+					label: {
+						show: true,
+						fontSize: '30',
+						fontWeight: 'bold'
+					}
+				},
+				labelLine: {
+					show: false
+				},
+				data: data
+			}
+		]
+	};
+	chart0.setOption(option, true);
+}
+
+function flushChart(data) {
+	var option = {
+		backgroundColor: '#0c1041',
+		// title: {
+		//   text: '当天睡眠时间曲线图',
+		//   left: 'center',
+		//   color: '#ffffff',
+		//   backgroundColor: '#ff0000'
+		// },
+		color: ["#62c4d9"],
+		legend: {
+			data: ['睡眠时间'],
+			top: 20,
+			left: 'right',
+			backgroundColor: '#0c1041',
+			textStyle: {
+				color: '#fff',
+			}
+		},
+		grid: {
+			containLabel: true
+		},
+		tooltip: {
+			show: true,
+			trigger: 'axis'
+		},
+		xAxis: {
+			type: 'category',
+			boundaryGap: false,
+			axisLine: {
+				lineStyle: {
+					color: '#fff',
+					width: 1,//这里是为了突出显示加上的
+				}
+			}
+		},
+		yAxis: {
+			name: "时长",
+			x: 'center',
+			type: 'value',
+			axisLine: {
+				lineStyle: {
+					color: '#fff',
+					width: 1,//这里是为了突出显示加上的
+				}
+				// splitLine: {
+				//   lineStyle: {
+				//     type: 'dashed'
+				//   }
+			}
+			// show: false
+		},
+		series: [{
+			name: '睡眠时间',
+			type: 'line',
+			smooth: true,
+			data: data,
+			color: '#62c4d9'
+		}]
+	};
+	chart.setOption(option, true);
+}
+
+
+function flushChart2(data) {
+	var option = {
+		// title: {
+		//   text: '睡眠状态监测',
+		//   left: 'center',
+		//   textStyle: {
+		//               color: '#ffffff', // 字体颜色  
+		//               fontStyle: 'normal', // 字体风格  
+		//               // fontWeight: 'bold', // 字体粗细  
+		//               fontFamily: 'sans-serif', // 字体族  
+		//               fontSize: 18 // 字体大小  
+		//             },
+		//   backgroundColor: '#57f7ff'
+		// },
+		tooltip: {
+			trigger: 'item'
+		},
+		legend: {
+			orient: 'vertical',
+			left: 'left',
+		},
+		series: [{
+			type: 'pie',
+			radius: '55%',
+			data: data ? data : []
+		}],
+		graphic: [{
+			type: 'text',
+			left: '2%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
+			top: '84%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
+			style: {
+				text: '时长(分钟)分析', // 文本内容  
+				textFill: '#333', // 文本颜色  
+				textFontSize: 14, // 文本字体大小  
+				textAlign: 'left', // 文本水平对齐方式  
+				verticalAlign: 'middle' // 文本垂直对齐方式  
+			}
+		}],
+	};
+	chart2.setOption(option, true);
+}
+
+function flushChart3(data1, data2) {
+	var option = {
+		// title: {
+		//   text: '睡眠呼吸监测',
+		//   left: 'center',
+		//   textStyle: {
+		//               color: '#ffffff', // 字体颜色  
+		//               fontStyle: 'normal', // 字体风格  
+		//               // fontWeight: 'bold', // 字体粗细  
+		//               fontFamily: 'sans-serif', // 字体族  
+		//               fontSize: 18 // 字体大小  
+		//             },
+		//   backgroundColor: '#57f7ff'
+		// },
+		tooltip: {},
+		xAxis: {
+			data: data1 ? data1 : []
+		},
+		yAxis: {
+			// Y 轴配置
+			type: 'value',
+			// 设置 Y 轴名称
+			name: '单位:次',
+			// 设置 Y 轴名称的位置
+			nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
+		},
+		series: [{
+			type: 'line',
+			data: data2 ? data2 : []
+		}]
+	};
+	chart3.setOption(option, true);
+}
+
+function flushChart4(data) {
+	var option = {
+		// title: {
+		//   text: '睡眠与清醒时间',
+		//   left: 'center',
+		//   textStyle: {
+		//               color: '#ffffff', // 字体颜色  
+		//               fontStyle: 'normal', // 字体风格  
+		//               // fontWeight: 'bold', // 字体粗细  
+		//               fontFamily: 'sans-serif', // 字体族  
+		//               fontSize: 18 // 字体大小  
+		//             },
+		//   backgroundColor: '#57f7ff'
+		// },
+		tooltip: {},
+		series: [{
+			type: 'gauge',
+			// 设置刻度盘的最大值
+			max: 24,
+			// 设置刻度盘的最小值
+			min: 0,
+			pointer: {
+				width: 5,
+				// 可以调整第二个指针的样式以区分
+				itemStyle: {
+					color: '#FF0000'
+				}
+			},
+			// 刻度盘轴
+			axisLine: {
+				textStyle: {
+					fontSize: 14
+				},
+				lineStyle: {
+					width: 30,
+					color: [[0.2, '#80FF80'], [0.8, '#FF8080'], [1, '#8080FF']] // 刻度盘颜色分区
+				},
+				rich: {
+					// 为第一个刻度盘设置刻度颜色
+					'0%': {
+						color: '#FF0000'
+					},
+					'50%': {
+						color: '#00FF00'
+					},
+					'100%': {
+						color: '#0000FF'
+					}
+				}
+			},
+			detail: { formatter: '{value} 小时' },
+			data: data ? data : {}
+		}
+			//  ,{
+			//  type: 'gauge',
+			//  // 设置刻度盘的最大值
+			//  max: 24,
+			//  // 设置刻度盘的最小值
+			//  min: 0,
+			//  // 刻度盘轴
+			//  axisLine: {
+			// textStyle: {
+			//   fontSize: 14
+			// },
+			// lineStyle: {
+			//   width: 30,
+			//   color: [[0.2, '#80FF80'], [0.8, '#FF8080'], [1, '#8080FF']] // 刻度盘颜色分区
+			// },
+			// rich: {
+			// 	// 为第二个刻度盘设置刻度颜色
+			// 	  '0%': {
+			// 		color: '#FFFF00'
+			// 	  },
+			// 	  '50%': {
+			// 		color: '#00FFFF'
+			// 	  },
+			// 	  '100%': {
+			// 		color: '#FF00FF'
+			// 	  }
+			// }
+			//  },
+			//  detail: {formatter: '{value} 小时'},
+			//  data: data2?data2:{}
+			//  },
+		]
+	};
+	chart4.setOption(option, true);
+}
+
+function flushChart5(data1, data2, that) {
+	var option = {
+		// title: {
+		//   text: '睡眠状态监测',
+		//   left: 'center',
+		//   textStyle: {
+		//               color: '#ffffff', // 字体颜色  
+		//               fontStyle: 'normal', // 字体风格  
+		//               // fontWeight: 'bold', // 字体粗细  
+		//               fontFamily: 'sans-serif', // 字体族  
+		//               fontSize: 18 // 字体大小  
+		//             },
+		//   backgroundColor: '#57f7ff'
+		// },
+		tooltip: {},
+		xAxis: {
+			data: data1 ? data1 : []
+		},
+		yAxis: {
+			// Y 轴配置
+			type: 'value',
+			// 设置 Y 轴名称
+			name: '单位:次',
+			// 设置 Y 轴名称的位置
+			nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
+			axisLabel: {
+				formatter: function (value) {
+					return that.sleepStateChange(value);
+				}
+			},
+		},
+		series: [{
+			type: 'line',
+			data: data2 ? data2 : []
+		}]
+	};
+	chart5.setOption(option, true);
+}
+
+function flushChart6(data1, data2, startSleepTime, endSleepTime, that) {
+	var option = {
+		backgroundColor: '#000000', // 设置背景色
+		tooltip: {},
+		xAxis: {
+			data: data1 ? data1 : []
+		},
+		yAxis: {
+			// Y 轴配置
+			type: 'value',
+			// 设置 Y 轴名称
+			name: '睡眠状态',
+			// 设置 Y 轴名称的位置
+			nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
+			axisLabel: {
+				formatter: function (value) {
+					return that.sleepStateChange(value);
+				}
+			}
+		},
+		series: [{
+			type: 'line',
+			data: data2 ? data2 : [],
+			lineStyle: { // 系列级个性化折线样式  
+				width: 10,
+				type: 'solid',
+				color: new echarts.graphic.LinearGradient(0, 0.4, 0.7, 1, [{
+					offset: 0,
+					color: '#ffb71b'
+				}, {
+					offset: 0.4,
+					color: '#b75cee'
+				}, {
+					offset: 0.7,
+					color: '#66acfc'
+				}, {
+					offset: 1,
+					color: '#3843fa'
+				}]),//线条渐变色  
+			},
+		}
+			// {
+			// 	  name: '分类2',
+			// 	  type: 'line',  
+			// 	  data: data2,
+			// 	  lineStyle: {        // 系列级个性化折线样式  
+			// 		width: 4,
+			// 		type: 'solid',
+			// 		color: new echarts.graphic.LinearGradient(0, 0.4, 0.7, 1, [{
+			// 		  offset: 0,
+			// 		  color: '#ffb71b'
+			// 		} , {
+			// 		  offset: 0.4,
+			// 		  color: '#b75cee'
+			// 		}, {
+			// 		  offset: 0.7,
+			// 		  color: '#66acfc'
+			// 		}, {
+			// 		  offset: 1,
+			// 		color: '#3843fa'
+			// 	  }]),//线条渐变色  
+			// 	  },
+			// 	},
+		],
+		graphic: [{
+			type: 'text',
+			left: '5%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
+			top: '90%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
+			style: {
+				text: '入睡时间:' + startSleepTime ? startSleepTime : '', // 文本内容  
+				textFill: '#333', // 文本颜色  
+				textFontSize: 14, // 文本字体大小  
+				textAlign: 'left', // 文本水平对齐方式  
+				verticalAlign: 'middle' // 文本垂直对齐方式  
+			}
+		}, {
+			type: 'text',
+			right: '5%', // 文本水平位置,这里设置为距离右侧 10% 的位置,作为右下方的文本  
+			top: '90%', // 文本垂直位置,这里设置为距离底部 10% 的位置  
+			style: {
+				text: '醒来时间:' + endSleepTime ? endSleepTime : '', // 文本内容  
+				textFill: '#333', // 文本颜色  
+				textFontSize: 14, // 文本字体大小  
+				textAlign: 'right', // 文本水平对齐方式  
+				verticalAlign: 'middle' // 文本垂直对齐方式  
+			}
+		}],
+	};
+
+	// var list0 = [];
+	// var list10 = [];
+	// var list20 = [];
+	// var list30 = [];
+	// if(data2){
+	// 	for (let i = 0; i < data2.length; i++) {
+	// 		if (data2[i] == '0') {
+	// 		  list0.push(data2[i]); 
+	// 		}else if (data2[i] == '10') {  
+	// 		  list10.push(data2[i]); 
+	// 		}else if (data2[i] == '20') {  
+	// 		  list20.push(data2[i]); 
+	// 		}else if (data2[i] == '30') {  
+	// 		  list30.push(data2[i]); 
+	// 		}else{
+	// 		}
+	// 	} 
+	// } 
+	// var option = {  
+	//         xAxis: {  
+	//           type: 'category',  
+	//           data: data1  
+	//         },  
+	//         yAxis: {  
+	//           type: 'value',  
+	//           axisLabel: {  
+	//             show: true,  
+	//             position: 'buttom' // 分类标签显示在顶部,相当于曲线下方位置  
+	//           }  
+	//         },  
+	//         series: [  
+	//           {  
+	//             name: '清醒',  
+	//             type: 'line',  
+	//             data: list0,  
+	//             itemStyle: {  
+	//               areaColor: new echarts.graphic.LinearGradient(  
+	//                 0, 0, 0, 1,  
+	//                 [{ offset: 0, color: 'rgba(255, 0, 0, 0.3)' }, { offset: 1, color: 'rgba(255, 0, 0, 0)' }]  
+	//               )  
+	//             },  
+	//             smooth: true,  
+	//             lineStyle: {  
+	//               color: 'red' // 线条颜色  
+	//             }  
+	//           },  
+	//           {  
+	//             name: '浅睡',  
+	//             type: 'line',  
+	//             data: list10,  
+	//             itemStyle: {  
+	//               areaColor: new echarts.graphic.LinearGradient(  
+	//                 0, 0, 0, 1,  
+	//                 [{ offset: 0, color: 'rgba(0, 255, 0, 0.3)' }, { offset: 1, color: 'rgba(0, 255, 0, 0)' }]  
+	//               )  
+	//             },  
+	//             smooth: true,  
+	//             lineStyle: {  
+	//               color: 'green' // 线条颜色  
+	//             }  
+	//           },  
+	//           {  
+	//             name: '中睡',  
+	//             type: 'line',  
+	//             data: list20,  
+	//             itemStyle: {  
+	//               areaColor: new echarts.graphic.LinearGradient(  
+	//                 0, 0, 0, 1,  
+	//                 [{ offset: 0, color: 'rgba(0, 255, 0, 0.3)' }, { offset: 1, color: 'rgba(0, 255, 0, 0)' }]  
+	//               )  
+	//             },  
+	//             smooth: true,  
+	//             lineStyle: {  
+	//               color: 'green' // 线条颜色  
+	//             }  
+	//           } ,  
+	//           {  
+	//             name: '深睡',  
+	//             type: 'line',  
+	//             data: list30,  
+	//             itemStyle: {  
+	//               areaColor: new echarts.graphic.LinearGradient(  
+	//                 0, 0, 0, 1,  
+	//                 [{ offset: 0, color: 'rgba(0, 255, 0, 0.3)' }, { offset: 1, color: 'rgba(0, 255, 0, 0)' }]  
+	//               )  
+	//             },  
+	//             smooth: true,  
+	//             lineStyle: {  
+	//               color: 'green' // 线条颜色  
+	//             }  
+	//           } 
+	//           // 如果有更多分类,继续添加...  
+	//         ],  
+	//         tooltip: {
+	//           trigger: 'axis',  
+	//           axisPointer: {  
+	//             type: 'cross',  
+	//             label: {  
+	//               backgroundColor: '#6a7985'  
+	//             }  
+	//           }  
+	//         },
+	// 		graphic: [{
+	// 				type: 'text',  
+	// 				left: '5%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
+	// 				top: '90%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
+	// 				style: {  
+	// 				  text: '入睡时间:'+startSleepTime, // 文本内容  
+	// 				  textFill: '#333', // 文本颜色  
+	// 				  textFontSize: 14, // 文本字体大小  
+	// 				  textAlign: 'left', // 文本水平对齐方式  
+	// 				  verticalAlign: 'middle' // 文本垂直对齐方式  
+	// 				}  
+	// 				}, {  
+	// 				type: 'text',  
+	// 				right: '5%', // 文本水平位置,这里设置为距离右侧 10% 的位置,作为右下方的文本  
+	// 				top: '90%', // 文本垂直位置,这里设置为距离底部 10% 的位置  
+	// 				style: {
+	// 				  text: '醒来时间:'+endSleepTime, // 文本内容  
+	// 				  textFill: '#333', // 文本颜色  
+	// 				  textFontSize: 14, // 文本字体大小  
+	// 				  textAlign: 'right', // 文本水平对齐方式  
+	// 				  verticalAlign: 'middle' // 文本垂直对齐方式  
+	// 				}  
+	// 			}],
+	//       }; 
+
+	chart6.setOption(option, true);
+}
+
+function flushChart9(data1, data2, startSleepTime, endSleepTime, that) {
+	var option = {
+		// backgroundColor: rgba(168, 115, 182, 0.5), // 设置背景色
+		tooltip: {},
+		xAxis: {
+			axisLabel: {
+				color: '#000' // 设置 x 轴标签颜色为白色  
+			},
+			splitLine: {
+				show: false, // 是否显示刻度线  
+			},
+			axisTick: {
+				// 不显示Y轴刻度线  
+				show: false
+			},
+			axisLine: {
+				// 不显示X轴轴线  
+				show: false
+			},
+			data: data1 ? data1 : []
+		},
+		yAxis: {
+			// Y 轴配置
+			type: 'value',
+			// 设置 Y 轴名称
+			name: '睡眠状态',
+			// 设置 Y 轴名称的位置
+			nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
+			axisLine: {
+				// 不显示Y轴轴线  
+				show: false,
+			},
+			axisTick: {
+				// 不显示Y轴刻度线  
+				show: false
+			},
+			axisLabel: {
+				color: '#000',
+				formatter: function (value) {
+					return that.sleepRsnoring_arrChange(value);
+				}
+			},
+			splitLine: {
+				show: false,// 不显示纵坐标轴的刻度线  
+				lineStyle: {
+					color: 'rgba(222, 222, 222, 0.1)', // 灰色并调整透明度  
+					width: 1, // 刻度线宽度  
+					type: 'solid' // 刻度线类型,默认为实线  
+				}
+			},
+		},
+		series: [{
+			type: 'line',
+			data: data2 ? data2 : [],
+			lineStyle: {
+				color: 'rgba(255, 170, 127, 0.8)' // 奶白色,80% 透明度  
+			},
+			showSymbol: false,// 是否显示标记图形  
+			smooth: true, // 使折线平滑
+			markPoint: {
+				symbol: 'circle', // 标记的符号为圆圈  
+				symbolSize: 10, // 标记的大小  
+				itemStyle: {
+					color: 'rgba(255, 170, 127, 0.8)',
+					// borderColor: 'blue', 
+					borderWidth: 1, // 设置边框宽度  
+					fill: 'none' // 设置填充颜色为无,即空心  
+				},
+				data: [
+					// 假设 data[0] 和 data[data.length - 1] 分别是开始和结束的数据点  
+					{ coord: [data1 ? data1[0] : '', data2 ? data2[0] : ''], name: '开始' },
+					{ coord: [data1 ? data1[data1.length - 1] : '', data2 ? data2[data2.length - 1] : ''], name: '结束' }
+					// 如果要添加拐角处的标记,需要手动计算并添加  
+				]
+			},
+			areaStyle: { // 折线下方的区域样式  
+				color: new echarts.graphic.LinearGradient(
+					0, 0, 0, 1, // 渐变方向  
+					[ // 渐变颜色  
+						{ offset: 0, color: 'rgba(255, 170, 127, 0.8)' }, // 使用之前定义的渐变  
+						{ offset: 0.9, color: 'rgba(255, 255, 255, 1)' } // 可选,结束颜色  
+					]
+				),
+				opacity: 0.3 // 区域的不透明度,可以根据需要调整  
+			},
+		}
+		],
+		// graphic: [{
+		// 			type: 'text',  
+		// 			left: '5%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
+		// 			top: '90%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
+		// 			style: {  
+		// 			  text: '入睡时间:'+startSleepTime?startSleepTime:'', // 文本内容  
+		// 			  textFill: '#333', // 文本颜色  
+		// 			  textFontSize: 14, // 文本字体大小  
+		// 			  textAlign: 'left', // 文本水平对齐方式  
+		// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
+		// 			}  
+		// 			}, {  
+		// 			type: 'text',  
+		// 			right: '5%', // 文本水平位置,这里设置为距离右侧 10% 的位置,作为右下方的文本  
+		// 			top: '90%', // 文本垂直位置,这里设置为距离底部 10% 的位置  
+		// 			style: {
+		// 			  text: '醒来时间:'+endSleepTime?endSleepTime:'', // 文本内容  
+		// 			  textFill: '#333', // 文本颜色  
+		// 			  textFontSize: 14, // 文本字体大小  
+		// 			  textAlign: 'right', // 文本水平对齐方式  
+		// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
+		// 			}  
+		// 		}],
+	};
+
+	chart9.setOption(option, true);
+}
+
+function flushChart10(data1, data2, startSleepTime, endSleepTime, that) {
+	var option = {
+		// backgroundColor: rgba(168, 115, 182, 0.5), // 设置背景色
+		tooltip: {},
+		xAxis: {
+			axisLabel: {
+				color: '#000' // 设置 x 轴标签颜色为白色  
+			},
+			splitLine: {
+				show: false, // 是否显示刻度线  
+			},
+			axisTick: {
+				// 不显示Y轴刻度线  
+				show: false
+			},
+			axisLine: {
+				// 不显示X轴轴线  
+				show: false
+			},
+			data: data1 ? data1 : []
+		},
+		yAxis: {
+			// Y 轴配置
+			type: 'value',
+			// 设置 Y 轴名称
+			name: '睡眠状态',
+			// 设置 Y 轴名称的位置
+			nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
+			axisLine: {
+				// 不显示Y轴轴线  
+				show: false,
+			},
+			axisTick: {
+				// 不显示Y轴刻度线  
+				show: false
+			},
+			axisLabel: {
+				color: '#000',
+				formatter: function (value) {
+					return that.sleepRhxstop_arrChange(value);
+				}
+			},
+			splitLine: {
+				show: false,// 不显示纵坐标轴的刻度线  
+				lineStyle: {
+					color: 'rgba(222, 222, 222, 0.1)', // 灰色并调整透明度  
+					width: 1, // 刻度线宽度  
+					type: 'solid' // 刻度线类型,默认为实线  
+				}
+			},
+		},
+		series: [{
+			type: 'line',
+			data: data2 ? data2 : [],
+			lineStyle: {
+				color: 'rgba(0, 85, 255, 0.8)' // 奶白色,80% 透明度  
+			},
+			showSymbol: false,// 是否显示标记图形  
+			smooth: true, // 使折线平滑
+			markPoint: {
+				symbol: 'circle', // 标记的符号为圆圈  
+				symbolSize: 10, // 标记的大小  
+				itemStyle: {
+					color: 'rgba(0, 85, 255, 0.8)',
+					// borderColor: 'blue', 
+					borderWidth: 1, // 设置边框宽度  
+					fill: 'none' // 设置填充颜色为无,即空心  
+				},
+				data: [
+					// 假设 data[0] 和 data[data.length - 1] 分别是开始和结束的数据点  
+					{ coord: [data1 ? data1[0] : '', data2 ? data2[0] : ''], name: '开始' },
+					{ coord: [data1 ? data1[data1.length - 1] : '', data2 ? data2[data2.length - 1] : ''], name: '结束' }
+					// 如果要添加拐角处的标记,需要手动计算并添加  
+				]
+			},
+			areaStyle: { // 折线下方的区域样式  
+				color: new echarts.graphic.LinearGradient(
+					0, 0, 0, 1, // 渐变方向  
+					[ // 渐变颜色  
+						{ offset: 0, color: 'rgba(0, 85, 255, 0.8)' }, // 使用之前定义的渐变  
+						{ offset: 0.9, color: 'rgba(255, 255, 255, 1)' } // 可选,结束颜色  
+					]
+				),
+				opacity: 0.3 // 区域的不透明度,可以根据需要调整  
+			},
+		}
+		],
+		// graphic: [{
+		// 			type: 'text',  
+		// 			left: '5%', // 文本水平位置,这里设置为居中,你可以根据需要调整  
+		// 			top: '90%', // 文本垂直位置,这里设置为距离顶部 10% 的位置,作为左下方的文本  
+		// 			style: {  
+		// 			  text: '入睡时间:'+startSleepTime?startSleepTime:'', // 文本内容  
+		// 			  textFill: '#333', // 文本颜色  
+		// 			  textFontSize: 14, // 文本字体大小  
+		// 			  textAlign: 'left', // 文本水平对齐方式  
+		// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
+		// 			}  
+		// 			}, {  
+		// 			type: 'text',  
+		// 			right: '5%', // 文本水平位置,这里设置为距离右侧 10% 的位置,作为右下方的文本  
+		// 			top: '90%', // 文本垂直位置,这里设置为距离底部 10% 的位置  
+		// 			style: {
+		// 			  text: '醒来时间:'+endSleepTime?endSleepTime:'', // 文本内容  
+		// 			  textFill: '#333', // 文本颜色  
+		// 			  textFontSize: 14, // 文本字体大小  
+		// 			  textAlign: 'right', // 文本水平对齐方式  
+		// 			  verticalAlign: 'middle' // 文本垂直对齐方式  
+		// 			}  
+		// 		}],
+	};
+
+	chart10.setOption(option, true);
+}
+
+function flushChart11(data1, data2, that) {
+	// data2 = data2?data2.map(value => {
+	//     return value+10; 
+	// }):[]; 
+	let adjustedData = data2 ? data2.map(value => {
+		return 10;
+	}) : [];
+	// var option = {
+	//  // title: {
+	//  //   text: '睡眠呼吸监测',
+	//  //   left: 'center',
+	//  //   textStyle: {
+	//  //               color: '#ffffff', // 字体颜色  
+	//  //               fontStyle: 'normal', // 字体风格  
+	//  //               // fontWeight: 'bold', // 字体粗细  
+	//  //               fontFamily: 'sans-serif', // 字体族  
+	//  //               fontSize: 18 // 字体大小  
+	//  //             },
+	//  //   backgroundColor: '#57f7ff'
+	//  // },
+	//  // grid: {   
+	//  //  top: '10%', 
+	//  //  height: '30%',   
+	//  // },
+	//  tooltip: {},
+	//  xAxis: {
+	//   type: 'category',  
+	//   axisLabel: {
+	// 		  color: 'rgba(0, 0, 0, 0.8)' // 设置 x 轴标签颜色为白色  
+	// 	  },
+	//   axisTick: {  
+	// 	  // 不显示Y轴刻度线  
+	// 	  show: false  
+	//   }, 
+	//   axisLine: {  
+	// 	  // 不显示X轴轴线  
+	// 	  show: false  
+	//   },
+	//   splitLine: {
+	// 		show: false, // 是否显示刻度线  
+	// 	  },  
+	//   data: data1?data1:[]
+	//  },
+	//  yAxis: {
+	//   // Y 轴配置
+	//   type: 'value',
+	//   // 设置 Y 轴名称
+	//   name: '睡眠状态',
+	//   // 设置 Y 轴名称的位置
+	//   nameLocation: 'end', // 可以是 'start'、'middle' 或 'end'
+	//   axisLine: {
+	// 	// 不显示Y轴轴线  
+	// 	show: false,
+	//   },
+	//   axisTick: {  
+	// 	 // 不显示Y轴刻度线  
+	// 	 show: false  
+	//   },
+	//   axisLabel: {
+	// 	  color: '#000',
+	//       formatter: function (value) {
+	//         return that.sleepStateChange(value);
+	//       }
+	//     },
+	//   splitLine: {  
+	// 	  show: false ,// 不显示纵坐标轴的刻度线  
+	// 	  lineStyle: {
+	// 		color: 'rgba(0, 170, 255, 0.9)', // 灰色并调整透明度  
+	// 		width: 1, // 刻度线宽度  
+	// 		type: 'solid' // 刻度线类型,默认为实线  
+	// 	  }  
+	// 	}, 
+	//  },
+	//  series: [{  
+	//         type: 'bar',  
+	//         data: data2?data2:[],
+	//  //  barCategoryGap: '50%', // 类别间柱形距离
+	//  //  label: {  
+	// 	// show: true,  
+	// 	// position: 'top',  
+	// 	// formatter: '{b}: {c}'  
+	//  //  },
+	//  stack: 'stackGroup',
+	//  itemStyle: {  
+	// 	 color: 'rgba(0,0,0,0)' // 透明颜色  
+	//  },
+	//   // itemStyle: {  
+	// 	 //  color: function(params) {
+	// 		//   // 根据数据或其他条件返回颜色值  
+	// 		//   // 这里只是简单地返回了一个颜色数组中的颜色  
+	// 		//   // var colorList = ['#c23531','#2f4554','#61a0a8','#d48265','#91c7ae','#749f83','#ca8622','#bda29a','#6e7074','#546570','#c4ccd3'];  
+	// 		//   if(params.value == '0'){
+	// 		// 	  return '#e2e2e2'
+	// 		//   }else if(params.value == '10'){
+	// 		// 	  return '#8cc4ff'
+	// 		//   }else if(params.value == '20'){
+	// 		// 	  return '#a6b2ff'
+	// 		//   }else if(params.value == '30'){
+	// 		// 	  return '#9b79ff'
+	// 		//   }else{
+	// 		// 	  return '';
+	// 		//   }
+	// 		//   // return colorList[params.dataIndex % colorList.length];  
+	// 	 //  }
+	//   // }  
+	//       }]
+	//  };
+
+	var option = {
+		xAxis: {
+			type: 'category',
+			data: data1 ? data1 : []
+		},
+		yAxis: {
+			type: 'value',
+			min: 0, // 确保 Y 轴从 0 开始  
+			// max 可以根据需要设置,但通常不需要为了固定柱子高度而设置  
+			axisLabel: {
+				color: '#000',
+				formatter: function (value) {
+					return that.sleepStateChange(value);
+				}
+			},
+		},
+		series: [
+			// 透明柱子,占满整个柱子空间  
+			{
+				data: data2 ? data2 : [],
+				type: 'bar',
+				stack: 'stackGroup',
+				itemStyle: {
+					color: 'rgba(0,0,0,0)' // 透明颜色  
+				},
+				barGap: '-100%', // 设置柱子间距为负值,让柱子紧挨在一起  
+				barMaxWidth: '30px' // 根据需要调整柱子宽度  
+			},
+			// 有色柱子,只显示上半部分(固定高度)  
+			{
+				data: adjustedData, // 固定高度数据  
+				type: 'bar',
+				stack: 'stackGroup', // 与透明系列使用相同的叠加组名  
+				itemStyle: {
+					color: function (params) {
+						console.log('params=' + JSON.stringify(params))
+						if (data2 && data2[params.dataIndex] == 0) {
+							return '#e2e2e2'
+						} else if (data2 && data2[params.dataIndex] == 10) {
+							return '#d8c6ff'
+						} else if (data2 && data2[params.dataIndex] == 20) {
+							return '#c6b3ff'
+						} else if (data2 && data2[params.dataIndex] == 30) {
+							return '#b090ff'
+						} else {
+							return '';
+						}
+					}
+				},
+				barGap: '-100%', // 保持与透明系列相同的柱子间距  
+				barMaxWidth: '30px' // 保持与透明系列相同的宽度  
+			}
+		]
+	};
+	chart11.setOption(option, true);
+}
+
+var homeApi = "https://haold.aidsleep.cn";
+var homeApi_http = "http://haold.aidsleep.cn";
+var homeApi_http_port = "8123";
+var homeApi_https = "https://haold.aidsleep.cn";
+const aipushApi = "https://aipush.aidsleep.cn";
+const token_15 = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJiN2JlOGE0MDExZjY0NjA2OGUxYjJiZTE4M2Y2NzU0NSIsImlhdCI6MTcxMTYxNDY2NCwiZXhwIjoyMDI2OTc0NjY0fQ.XJ73cXAoEsouTgvgpNVobq9oKdwlJr88TiAFLYlaahE";
+var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJlZGVjOWI3YWQ0MTQ0ZTIxYWQ1NTE1Nzc5NTkzNjBjNiIsImlhdCI6MTcxMjEzNTM2MywiZXhwIjoyMDI3NDk1MzYzfQ.IfrvdiaVuhCKsdy69JvUYhJ64bnhMT8MI1hN8R38whc";
+const token_push = "b74fd5754c5ef24cf600c39194abdaeb";
 
 Page({
 
-  /**
-   * 页面的初始数据
-   */
-  data: {
-    header: false,
-    nowDate: [{ //日历的初始化数据
-      month: 'current',
-      day: new Date().getDate(),
-      color: '#ffd700',
-      background: 'white'
-    }],
-    total1: 0,
-    total2: 0,
-    total3: 0,
-    temArr: [],
-    humArr: [],
-    clickDate: "",
-    status: "",
-
-    isShow: false,
-    
-    year: addZero(new Date().getFullYear()),
-    month: addZero(new Date().getMonth()),
-    date: addZero(new Date().getDate()),
-    hours: addZero(new Date().getHours()),
-
-    moke_data: {
-      "20240414": [
-        {
-          sleepAllTime: 902,
-          sleepFeedback: "很好"
-        },
-        {
-          sleepAllTime: 222,
-          sleepFeedback: "疲惫"
-        }
-      ],
-      "20240415": [
-        {
-          sleepAllTime: 902,
-          sleepFeedback: "很好"
-        },
-        {
-          sleepAllTime: 222,
-          sleepFeedback: "疲惫"
-        },
-        {
-          sleepAllTime: 902,
-          sleepFeedback: "很好"
-        },
-        {
-          sleepAllTime: 222,
-          sleepFeedback: "疲惫"
-        },
-        {
-          sleepAllTime: 902,
-          sleepFeedback: "很好"
-        }
-      ]
-    },
-	rdt_arr: [],
-	rrh_arr: [],
-	rhx_arr: [],
-	rsnoring_arr: [],
-	routbed_arr: [],
-	rmove_arr: [],
-	rhxstop_arr: [],
-	rsleep_arr: [],
-	
-	rdt_arrNew:[],//睡眠时间轴数据集合
-	rrh_arrNew:[],//睡眠心率数据集合
-	rhx_arrNew:[],//睡眠呼吸数据集合
-	rmove_arrNew:[],//体动状态数据集合,0-否,1-体动状态
-	rsleep_arrNew:[],//睡眠状态数据集合,0-清醒,10-浅睡,20-中睡,30-深睡
-	rsleep_arr_all_New:[],//睡眠状态数据集合,0-清醒,10-浅睡,20-中睡,30-深睡
-	durationData:[], //睡眠时长
-	sleep_duration:[], //睡眠和清醒对比
-	
-	rdeep_duration: 0,
-	rlight_duration: 0,
-	rin_duration: 0,
-	rawake_duration: 0,
-	
-	rrs_duration: 0,//入睡时长
-	routbed_count_value: 0,//离床次数
-	rsleep_eff_value: '',//睡眠效率
-	
-	rdeep_durationFormat: '',
-	rlight_durationFormat: '',
-	rin_durationFormat: '',
-	rawake_durationFormat: '',
-	
-	ravg_hx_value: 0,
-	ravg_hx_desc: '',
-	ravg_rh_value: 0,
-	ravg_rh_desc: '',
-	rscore_value: 0,
-	rscore_desc: '',
-	
-	sleep_efficiency: '',//睡眠效率
-	
-    zdTime: ["00:00","01:00","02:00","03:00","04:00","05:00",
-			,"06:00","07:00","08:00","09:00","10:00","11:00"
-			,"12:00","13:00","14:00","15:00","16:00","17:00"
-			,"18:00","19:00","20:00","21:00","22:00","23:00"],
-	zdPoint: [],
-	percentage: 75, // 初始百分比值
-	
-	canvasWidth: 0,
-	canvasHeight: 0,
-	
-	rsn: '',
-	rdate: '',
-	rtotal_duration: 0,
-	rinbed_duration: 0,
-	rgobed_time: 0,
-	routbed_time: 0,
-	rgobed_routbed: 0,
-	sleepHourSub: 0,
-	routbed_count_value: 0,
-	isButtonClicked: false, // 用来控制按钮是否被点击的标记
-	home_room: [
-		'company_laboratory',
-	    '2802',
-		],
-	isButtonPressed: false, // 用来标记按钮是否被按下
-	reportDate: '',
-	currentDate: '',
-	currentTime: '',
-	rmove_arrFrequency: 0,//体动次数
-	routbed_arrFrequency: 0,//离床次数
-	rsnoring_arrFrequency: 0,//打鼾次数
-	rhxstop_arrFrequency: 0,//呼吸暂停次数
-	sleep_durationCountA: 0,//睡眠时间
-	sns: [],
-	tvEntityIds: [],
-	ifOneMoreTV: false,//数据推送是否有多于一台电视
-	selectedValue: '', // 用于存储选中的值  
-	tvEntityIdsValue: '', // 用于存储选中的值 
-	selectedIndex: 0, // 默认选中第一个选项
-	tvEntityIdsIndex: 0, // 默认选中第一个选项
-	hotelcode: '',//酒店编码
-	roomcode: '',//房间编码
-	
-	rdeep_duration_efficiency: '',//深睡比例
-	rlight_duration_efficiency: '',//浅睡比例
-	rin_duration_efficiency: '',//中睡比例
-	isLoading: false,
-	
-	ec7: '',
-	width7: '',
-	height7: '',
-	
-	ec8: '',
-	width8: '',
-	height8: '',
-	
-	ec1: '',
-	width1: '',
-	height1: '',
-	
-	ec81: '',
-	width81: '',
-	height81: '',
-	
-	ec9: '',
-	width9: '',
-	height9: '',
-	
-	ec10: '',
-	width10: '',
-	height10: '',
-	
-	ec11: '',
-	width11: '',
-	height11: '',
-	flushChart00Flag:false,
-	arrayFourth: [ [], []],//多级选择数组
-	valueFourth: [0, 0],//多级选择结果index
-	sourceFourth: [
-	  {
-		id: 1,
-		text: '2024-05-24',
-		children: [{
-		  id: 1,
-		  text: '01:01~01:20',
-		  reportId: '11111',
-		}, {
-		  id: 2,
-		  text: '03:05~04:20',
-		  reportId: '22222',
-		}, {
-		  id: 3,
-		  text: '05:21~07:20',
-		  reportId: '33333',
-		}]
-	  },
-	  {
-		id: 2,
-		text: '2024-05-23',
-		children: [{
-		  id: 3,
-		  text: '00:01~03:20',
-		  reportId: '454545',
-		}, {
-		  id: 4,
-		  text: '00:03~06:20',
-		  reportId: '66666',
-		}]
-	  },
-	],//后台读取的所及数据源
-	reportId: '',
-	hotelname: '',
-	roomname: '',
-	pushReportId: '',//推送用:reportId
-  },
-  //点击确定选择结果时,保存结果
-    bindMultiPickerChange: function (e) {
-      var result = e.detail.value;
-	  var data = this.data.sourceFourth;
-      console.info('result='+result);
-	  console.info('result[0]='+result[0]);
-	  console.info('data[result[0]].text='+data[Number(result[0])].text);
-	  console.info('data[result[0]].children[result[1]].text='+data[Number(result[0])].children[Number(result[1])].text);
-	  this.setData({
-	    reportDate: data[Number(result[0])].text,
-		rgobed_routbed: data[Number(result[0])].children[Number(result[1])].text,
-		reportId: data[Number(result[0])].children[Number(result[1])].reportId,
-	  });
-	  this.onPickerDateTimeChange(this.data.reportId);
-    },
-    //选择列变更时,处理下级数组变更
-    bindMultiPickerColumnChange: function (e) {
-      var column = e.detail.column;
-      var index = e.detail.value;
-      var array = this.data.arrayFourth;
-	  
-      if (column == 0) {
-        array[1] = array[column][index].children;
-        this.setData({
-          arrayFourth: array
-        });
-      } else if (column == 1) {
-        //最后一列不处理
-      }
-    },
-  drawCircle: function() {
-      // 创建 canvas 上下文  
-      const ctx = wx.createCanvasContext('myCanvas');  
-    
-      // 设置圆环的颜色和样式  
-      ctx.setStrokeStyle('green'); // 圆环的颜色  
-      ctx.setLineWidth(20); // 圆环的宽度  
-    
-      // 绘制外圆  
-      ctx.beginPath();  
-      ctx.arc(80, 80, 50, 0, 2 * Math.PI); // 圆心 (100, 100),半径 100  
-      ctx.stroke(); // 绘制外圆  
-    
-      // 绘制内圆(与外圆同圆心,但半径小20rpx,即80rpx)  
-      ctx.beginPath();  
-      ctx.arc(80, 80, 50, 0, 2 * Math.PI);  
-      ctx.setFillStyle('white'); // 设置内圆的填充颜色为白色(或者透明,取决于你希望的效果)  
-      ctx.fill(); // 填充内圆,这样圆环内部就是白色或透明的了  
-    
-      // 结束绘制并更新 canvas  
-      ctx.draw();  
-    },
-  startInterval: function () {
-    // 使用 setInterval 创建定时任务,每8秒执行一次 this.myMethod 方法 
-  	 var that = this;
-    this.intervalId = setInterval(() => {  
-		console.log(Date.now());
-    }, 6000);
-  },
-   clearInterval: function () {
-       // 清除定时任务  
-       if (this.intervalId) {  
-         clearInterval(this.intervalId);  
-         this.intervalId = null;  
-       }  
-     },
-	 tvEntityIdsChange: function(e) {
-	  var that = this;
-	  console.log('this.data.tvEntityIds_tv='+JSON.stringify(this.data.tvEntityIds))
-	  var selectedOption = this.data.tvEntityIds[e.detail.value]; 
-	  console.log('selectedOption_tv='+JSON.stringify(selectedOption))
-	  if(!this.data.tvEntityIds || !selectedOption){
-		  wx.showToast({
-		    title: '请选择需要推送的电视',  
-		    icon: 'none'  
-		  });  
-		  return;
-	  }
-	  this.setData({
-		tvEntityIdsIndex: e.detail.value,  
-		tvEntityIdsValue: selectedOption.friendly_name1,
-	  }); 
-	  this.telScreeProjection(selectedOption.entity_id);
+	/**
+	 * 页面的初始数据
+	 */
+	data: {
+		ecCircularProgressBar: {
+			// lazyLoad: true, // 懒加载
+			onInit: initChartHumidifier
+		},
+		ecOutOfBed: {
+			// lazyLoad: true, // 懒加载
+			onInit: initChartOutOfBed
+		},
+		ecBodyMovements: {
+			// lazyLoad: true, // 懒加载
+			onInit: initChartBodyMovementsLine
+		},
+		ecCardiacSystemLine: {
+			// lazyLoad: true, // 懒加载
+			onInit: initChartCardiacSystemLine
+		},
+		ecChartRespiratoryLine: {
+			// lazyLoad: true, // 懒加载
+			onInit: initChartRespiratoryLine
+		},
+		ecSnoringLine: {
+			// lazyLoad: true, // 懒加载
+			onInit: initSnoringLine
+		},
+		ecApneaLine: {
+			// lazyLoad: true, // 懒加载
+			onInit: initApneaLine
+		},
+		ecTimeWaterfall: {
+			// lazyLoad: true, // 懒加载
+			onInit: initChartTimeWaterfall
+		},
+		header: false,
+		nowDate: [{ //日历的初始化数据
+			month: 'current',
+			day: new Date().getDate(),
+			color: '#ffd700',
+			background: 'white'
+		}],
+		total1: 0,
+		total2: 0,
+		total3: 0,
+		temArr: [],
+		humArr: [],
+		clickDate: "",
+		status: "",
+
+		isShow: false,
+
+		year: addZero(new Date().getFullYear()),
+		month: addZero(new Date().getMonth()),
+		date: addZero(new Date().getDate()),
+		hours: addZero(new Date().getHours()),
+
+		moke_data: {
+			"20240414": [
+				{
+					sleepAllTime: 902,
+					sleepFeedback: "很好"
+				},
+				{
+					sleepAllTime: 222,
+					sleepFeedback: "疲惫"
+				}
+			],
+			"20240415": [
+				{
+					sleepAllTime: 902,
+					sleepFeedback: "很好"
+				},
+				{
+					sleepAllTime: 222,
+					sleepFeedback: "疲惫"
+				},
+				{
+					sleepAllTime: 902,
+					sleepFeedback: "很好"
+				},
+				{
+					sleepAllTime: 222,
+					sleepFeedback: "疲惫"
+				},
+				{
+					sleepAllTime: 902,
+					sleepFeedback: "很好"
+				}
+			]
+		},
+		rdt_arr: [],
+		rrh_arr: [],
+		rhx_arr: [],
+		rsnoring_arr: [],
+		routbed_arr: [],
+		rmove_arr: [],
+		rhxstop_arr: [],
+		rsleep_arr: [],
+
+		rdt_arrNew: [],//睡眠时间轴数据集合
+		rrh_arrNew: [],//睡眠心率数据集合
+		rhx_arrNew: [],//睡眠呼吸数据集合
+		rmove_arrNew: [],//体动状态数据集合,0-否,1-体动状态
+		rsleep_arrNew: [],//睡眠状态数据集合,0-清醒,10-浅睡,20-中睡,30-深睡
+		rsleep_arr_all_New: [],//睡眠状态数据集合,0-清醒,10-浅睡,20-中睡,30-深睡
+		durationData: [], //睡眠时长
+		sleep_duration: [], //睡眠和清醒对比
+		rdeep_durationFormatA:{},
+		rdeep_duration: 0,
+		rlight_duration: 0,
+		rin_duration: 0,
+		rawake_duration: 0,
+
+		rrs_duration: 0,//入睡时长
+		routbed_count_value: 0,//离床次数
+		rsleep_eff_value: '',//睡眠效率
+
+		rdeep_durationFormat: '',
+		rlight_durationFormat: '',
+		rin_durationFormat: '',
+		rawake_durationFormat: '',
+
+		ravg_hx_value: 0,
+		ravg_hx_desc: '',
+		ravg_rh_value: 0,
+		ravg_rh_desc: '',
+		rscore_value: 0,
+		rscore_desc: '',
+
+		sleep_efficiency: '',//睡眠效率
+
+		zdTime: ["00:00", "01:00", "02:00", "03:00", "04:00", "05:00",
+			, "06:00", "07:00", "08:00", "09:00", "10:00", "11:00"
+			, "12:00", "13:00", "14:00", "15:00", "16:00", "17:00"
+			, "18:00", "19:00", "20:00", "21:00", "22:00", "23:00"],
+		zdPoint: [],
+		percentage: 75, // 初始百分比值
+
+		canvasWidth: 0,
+		canvasHeight: 0,
+
+		rsn: '',
+		rdate: '',
+		rtotal_duration: 0,
+		rinbed_duration: 0,
+		rgobed_time: 0,
+		routbed_time: 0,
+		rgobed_routbed: 0,
+		sleepHourSub: 0,
+		routbed_count_value: 0,
+		isButtonClicked: false, // 用来控制按钮是否被点击的标记
+		home_room: [
+			'company_laboratory',
+			'2802',
+		],
+		isButtonPressed: false, // 用来标记按钮是否被按下
+		reportDate: '',
+		currentDate: '',
+		currentTime: '',
+		rmove_arrFrequency: 0,//体动次数
+		routbed_arrFrequency: 0,//离床次数
+		rsnoring_arrFrequency: 0,//打鼾次数
+		rhxstop_arrFrequency: 0,//呼吸暂停次数
+		sleep_durationCountA: 0,//睡眠时间
+		sns: [],
+		tvEntityIds: [],
+		ifOneMoreTV: false,//数据推送是否有多于一台电视
+		selectedValue: '', // 用于存储选中的值  
+		tvEntityIdsValue: '', // 用于存储选中的值 
+		selectedIndex: 0, // 默认选中第一个选项
+		tvEntityIdsIndex: 0, // 默认选中第一个选项
+		hotelcode: '',//酒店编码
+		roomcode: '',//房间编码
+
+		rdeep_duration_efficiency: '',//深睡比例
+		rlight_duration_efficiency: '',//浅睡比例
+		rin_duration_efficiency: '',//中睡比例
+		isLoading: false,
+
+		ec7: '',
+		width7: '',
+		height7: '',
+
+		ec8: '',
+		width8: '',
+		height8: '',
+
+		ec1: '',
+		width1: '',
+		height1: '',
+
+		ec81: '',
+		width81: '',
+		height81: '',
+
+		ec9: '',
+		width9: '',
+		height9: '',
+
+		ec10: '',
+		width10: '',
+		height10: '',
+
+		ec11: '',
+		width11: '',
+		height11: '',
+		flushChart00Flag: false,
+		arrayFourth: [[], []],//多级选择数组
+		valueFourth: [0, 0],//多级选择结果index
+		sourceFourth: [
+			{
+				id: 1,
+				text: '2024-05-24',
+				children: [{
+					id: 1,
+					text: '01:01~01:20',
+					reportId: '11111',
+				}, {
+					id: 2,
+					text: '03:05~04:20',
+					reportId: '22222',
+				}, {
+					id: 3,
+					text: '05:21~07:20',
+					reportId: '33333',
+				}]
+			},
+			{
+				id: 2,
+				text: '2024-05-23',
+				children: [{
+					id: 3,
+					text: '00:01~03:20',
+					reportId: '454545',
+				}, {
+					id: 4,
+					text: '00:03~06:20',
+					reportId: '66666',
+				}]
+			},
+		],//后台读取的所及数据源
+		reportId: '',
+		hotelname: '',
+		roomname: '',
+		pushReportId: '',//推送用:reportId
+	},
+	toWarmReminder(e) {
+		const tabName = e.currentTarget.dataset.index || 1;
+		wx.navigateTo({
+			url: '/subpages/warmReminder/warmReminder?id=' + tabName
+		})
+	},
+	//点击确定选择结果时,保存结果
+	bindMultiPickerChange: function (e) {
+		var result = e.detail.value;
+		var data = this.data.sourceFourth;
+		console.info('result=' + result);
+		console.info('result[0]=' + result[0]);
+		console.info('data[result[0]].text=' + data[Number(result[0])].text);
+		console.info('data[result[0]].children[result[1]].text=' + data[Number(result[0])].children[Number(result[1])].text);
+		this.setData({
+			reportDate: data[Number(result[0])].text,
+			rgobed_routbed: data[Number(result[0])].children[Number(result[1])].text,
+			reportId: data[Number(result[0])].children[Number(result[1])].reportId,
+		});
+		this.onPickerDateTimeChange(this.data.reportId);
+	},
+	//选择列变更时,处理下级数组变更
+	bindMultiPickerColumnChange: function (e) {
+		var column = e.detail.column;
+		var index = e.detail.value;
+		var array = this.data.arrayFourth;
+
+		if (column == 0) {
+			array[1] = array[column][index].children;
+			this.setData({
+				arrayFourth: array
+			});
+		} else if (column == 1) {
+			//最后一列不处理
+		}
+	},
+	drawCircle: function () {
+		// 创建 canvas 上下文  
+		const ctx = wx.createCanvasContext('myCanvas');
+
+		// 设置圆环的颜色和样式  
+		ctx.setStrokeStyle('green'); // 圆环的颜色  
+		ctx.setLineWidth(20); // 圆环的宽度  
+
+		// 绘制外圆  
+		ctx.beginPath();
+		ctx.arc(80, 80, 50, 0, 2 * Math.PI); // 圆心 (100, 100),半径 100  
+		ctx.stroke(); // 绘制外圆  
+
+		// 绘制内圆(与外圆同圆心,但半径小20rpx,即80rpx)  
+		ctx.beginPath();
+		ctx.arc(80, 80, 50, 0, 2 * Math.PI);
+		ctx.setFillStyle('white'); // 设置内圆的填充颜色为白色(或者透明,取决于你希望的效果)  
+		ctx.fill(); // 填充内圆,这样圆环内部就是白色或透明的了  
+
+		// 结束绘制并更新 canvas  
+		ctx.draw();
+	},
+	startInterval: function () {
+		// 使用 setInterval 创建定时任务,每8秒执行一次 this.myMethod 方法 
+		var that = this;
+		this.intervalId = setInterval(() => {
+			console.log(Date.now());
+		}, 6000);
+	},
+	clearInterval: function () {
+		// 清除定时任务  
+		if (this.intervalId) {
+			clearInterval(this.intervalId);
+			this.intervalId = null;
+		}
+	},
+	tvEntityIdsChange: function (e) {
+		var that = this;
+		console.log('this.data.tvEntityIds_tv=' + JSON.stringify(this.data.tvEntityIds))
+		var selectedOption = this.data.tvEntityIds[e.detail.value];
+		console.log('selectedOption_tv=' + JSON.stringify(selectedOption))
+		if (!this.data.tvEntityIds || !selectedOption) {
+			wx.showToast({
+				title: '请选择需要推送的电视',
+				icon: 'none'
+			});
+			return;
+		}
+		this.setData({
+			tvEntityIdsIndex: e.detail.value,
+			tvEntityIdsValue: selectedOption.friendly_name1,
+		});
+		this.telScreeProjection(selectedOption.entity_id);
+	},
+	tvEntityIdChange: function (e) {
+		this.telScreeProjection();
+	},
+	onPickerChange: function (e) {
+		var that = this;
+		var selectedOption = this.data.sns[e.detail.value];
+		this.setData({
+			selectedIndex: e.detail.value,
+			selectedValue: selectedOption.pos,
+			rsn: selectedOption.sn,
+		});
+		console.log("e.detail.value=" + e.detail.value);
+		console.log("selectedOption=" + JSON.stringify(selectedOption));
+		this.getData(selectedOption.sn, this.data.hotelcode, this.data.roomcode, null);
+
+		// this.selectComponent('#mychart-dom-bar00').init((canvas, width, height) => {
+		that.initChartCircle()
+		that.initOutOfBed()
+		that.initBodyMovements()
+		that.initCardiacSystem()
+		that.initChartRespiratory()
+		that.initChartSnoring()
+		that.initChartApnea()
+		that.initTimeWaterfall()
+		// });
+		// this.selectComponent('#mychart-dom-bar7').init((canvas, width, height) => {
+		// 	that.initChart7(canvas, width, height, null)
+		// });
+		// this.selectComponent('#mychart-dom-bar8').init((canvas, width, height) => {
+		// 	that.initChart8(canvas, width, height, null)
+		// });
+		// this.selectComponent('#mychart-dom-bar1').init((canvas, width, height) => {
+		// 	that.initChart1(canvas, width, height, null)
+		// });
+		// this.selectComponent('#mychart-dom-bar81').init((canvas, width, height) => {
+		// 	that.initChart81(canvas, width, height, null)
+		// });
+		// this.selectComponent('#mychart-dom-bar9').init((canvas, width, height) => {
+		// 	that.initChart9(canvas, width, height, null)
+		// });
+		// this.selectComponent('#mychart-dom-bar10').init((canvas, width, height) => {
+		// 	that.initChart10(canvas, width, height, null)
+		// });
+		// this.selectComponent('#mychart-dom-bar11').init((canvas, width, height) => {
+		// 	that.initChart11(canvas, width, height, null)
+		// });
+	},
+	onPickerDateTimeChange: function (reportId) {
+		var that = this;
+		// var selectedOption = this.data.sns[e.detail.value];  
+		//     this.setData({
+		//       selectedIndex: e.detail.value,  
+		//       selectedValue: selectedOption.pos,  
+		//    rsn: selectedOption.sn,
+		//     }); 
+		//  console.log("e.detail.value="+e.detail.value);
+		//  console.log("selectedOption="+JSON.stringify(selectedOption));
+		this.getData(that.data.sn, this.data.hotelcode, this.data.roomcode, reportId);
+		// this.selectComponent('#mychart-dom-bar00').init((canvas, width, height) => {
+		that.initChartCircle(reportId)
+		// });
+		// this.selectComponent('#mychart-dom-bar7').init((canvas, width, height) => {
+		that.initOutOfBed(reportId)
+		that.initBodyMovements(reportId)
+		that.initCardiacSystem(reportId)
+		that.initChartRespiratory(reportId)
+		that.initChartSnoring(reportId)
+		that.initChartApnea(reportId)
+		that.initTimeWaterfall(reportId)
+		// });
+		// this.selectComponent('#mychart-dom-bar8').init((canvas, width, height) => {
+		// 	that.initChart8(canvas, width, height, reportId)
+		// });
+		// this.selectComponent('#mychart-dom-bar1').init((canvas, width, height) => {
+		// 	that.initChart1(canvas, width, height, reportId)
+		// });
+		// this.selectComponent('#mychart-dom-bar81').init((canvas, width, height) => {
+		// 	that.initChart81(canvas, width, height, reportId)
+		// });
+		// this.selectComponent('#mychart-dom-bar9').init((canvas, width, height) => {
+		// 	that.initChart9(canvas, width, height, reportId)
+		// });
+		// this.selectComponent('#mychart-dom-bar10').init((canvas, width, height) => {
+		// 	that.initChart10(canvas, width, height, reportId)
+		// });
+		// this.selectComponent('#mychart-dom-bar11').init((canvas, width, height) => {
+		// 	that.initChart11(canvas, width, height, reportId)
+		// });
+	},
+	onButtonTap: function () {
+		// 切换按钮的样式类  
+		this.setData({
+			isButtonPressed: !this.data.isButtonPressed
+		});
+	},
+	dayClick(event) { //日历点击选择日期    
+		var that = this;
+		var clickDate = String(event.detail.year) + addZero(event.detail.month) + addZero(event.detail.day)
+		// that.getTargetData(clickDate)
+		console.log("change date", that.data.target_sleep_list)
+		flushChart(that.data.target_sleep_list)
+
+		that.setData({
+			nowDate: [{
+				month: 'current',
+				day: event.detail.day,
+				color: 'white',
+				background: '#82d5f8'
+			}, {
+				month: 'current',
+				day: new Date().getDate(),
+				color: '#ffd700',
+				background: 'white'
+			}],
+			clickDate: clickDate,
+			ec: {
+				onInit: that.construct_sleep_plot
+			}
+		})
+	},
+
+	getTargetData(date) {
+		var that = this;
+		var sleep_data = wx.getStorageSync("sleep_data")
+		console.log("find date is", date)
+		if (sleep_data || that.data.moke_data) {
+			if (date == "20240414" || date == "20240415") {
+				var parse_sleep_data = that.data.moke_data[date]
+			} else {
+				var parse_sleep_data = JSON.parse(sleep_data)[date]
+			}
+			var sleep_cnt = 0
+			if (parse_sleep_data) {
+				sleep_cnt = parse_sleep_data.length;
+			}
+			var sleep_time = 0.0;
+			var sleep_desc = "";
+			var sleep_tj_map = {
+				'早醒': 0,
+				'疲惫': 0,
+				'多梦': 0,
+				'很好': 0
+			};
+			var slepp_sugg = "";
+			var target_sleep_list = [];
+			for (var i in parse_sleep_data) {
+				var fix_sleep_tm = (parse_sleep_data[i].sleepAllTime / 60).toFixed(1);
+				sleep_time += parseFloat(fix_sleep_tm);
+				sleep_tj_map[parse_sleep_data[i].sleepFeedback] += 1
+				target_sleep_list.push(parseFloat(fix_sleep_tm))
+			}
+
+			for (var j in sleep_tj_map) {
+				if (sleep_tj_map[j] > 0) {
+					sleep_desc += j + String(sleep_tj_map[j]) + " 次."
+				}
+			}
+			switch (sleep_cnt) {
+				case 5:
+					slepp_sugg = "继续保持睡前良好状态";
+					break;
+				case 1:
+					slepp_sugg = "学会释放工作压力";
+					break;
+				case 2:
+					slepp_sugg = "睡前一小时不要进行有氧运动";
+					break;
+				case 3:
+					slepp_sugg = "睡前尽量不要摄入高热量餐饮";
+					break;
+				case 0:
+					slepp_sugg = "还未产生睡眠报告";
+					break;
+				case 4:
+					slepp_sugg = "做一些助眠工作";
+					break;
+			}
+			that.setData({
+				data_dispaly: true,
+				sleep_cnt: sleep_cnt,
+				sleep_time: sleep_time.toFixed(1),
+				sleep_desc: sleep_desc,
+				slepp_sugg: slepp_sugg,
+				target_sleep_list: target_sleep_list,
+				ec0: { onInit: target_sleep_list },
+				ec: { onInit: target_sleep_list },
+				ec1: { onInit: target_sleep_list },
+				ec2: { onInit: target_sleep_list },
+				ec3: { onInit: target_sleep_list },
+				ec4: { onInit: target_sleep_list },
+			})
+		}
+	},
+
+
+	initChartCircle(reportId) {
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				// "hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
+				// "roomcode":that.data.hotelcode?that.data.roomcode:"nuange",
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						console.log("res.data=sn=" + JSON.stringify(res.data));
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": that.data.rsn ? that.data.rsn : res.data[0].sn,
+								"rpids": reportId,
+								"token": token_push
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										let rscore_descTemp = [];
+										if (ress.data.results.rscore_desc) {
+											rscore_descTemp = ress.data.results.rscore_desc;
+										}
+										let rscore_valueTemp = [];
+										if (ress.data.results.rscore_value) {
+											rscore_valueTemp = ress.data.results.rscore_value;
+										}
+										that.setData({
+											rscore_desc: rscore_descTemp,
+											rscore_value: rscore_valueTemp,
+										});
+										updateChartCircularProgressBarOption(rscore_descTemp, rscore_valueTemp, that);
+									} catch (error) {
+										console.error(error);
+									}
+									// console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
+									// console.log("");
+								}
+							}
+
+						});
+					}
+
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
+	},
+	initChart(canvas, width, height) {
+		var that = this;
+		chart = echarts.init(canvas, null, {
+			width: width,
+			height: height
+		});
+		console.log("plot in ......")
+		canvas.setChart(chart);
+		flushChart(that.data.target_sleep_list)
+	},
+// 心脏 系统
+	initCardiacSystem(reportId) {
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				// "hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
+				// "roomcode":that.data.hotelcode?that.data.roomcode:"nuange",
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						console.log("res.data=sn=" + JSON.stringify(res.data));
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": that.data.rsn ? that.data.rsn : res.data[0].sn,
+								"token": token_push,
+								"rpids": reportId
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										let rdt_arrTemp = [];
+										if (ress.data.results.rrh_arr) {
+											rdt_arrTemp = that.splitN(ress.data.results.rdt_arr.split(","), 100);
+										}
+										if (ress.data.results.rdate) {
+											that.setData({
+												reportDate: ress.data.results.rdate
+											});
+										}
+										let rrh_arrTemp = [];
+										if (ress.data.results.rrh_arr) {
+											rrh_arrTemp = that.splitN(ress.data.results.rrh_arr.split(","), 100);
+										}
+										that.setData({
+											rdt_arrNew: rdt_arrTemp,
+											rrh_arrNew: rrh_arrTemp,
+										});
+										console.log("that.data.rdt_arrNew,that.data.rrh_arrNew=" + that.data.rdt_arrNew + "," + that.data.rrh_arrNew);
+										updateCardiacSystem(that.data.rdt_arrNew, that.data.rrh_arrNew, that);
+									} catch (error) {
+										console.error(error);
+									}
+									// console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
+									// console.log("");
+								}
+							}
+
+						});
+					}
+
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
+	},
+	initChart2(canvas, width, height) {
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": res.data[0].sn,
+								"token": token_push
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										let durationDataTemp = [];
+										let obj = {};
+										obj.name = '深睡';
+										obj.value = ress.data.results.rdeep_duration;
+										durationDataTemp.push(obj);
+										obj = {};
+										obj.name = '中睡';
+										obj.value = ress.data.results.rin_duration;
+										durationDataTemp.push(obj);
+										obj = {};
+										obj.name = '浅睡';
+										obj.value = ress.data.results.rlight_duration;
+										durationDataTemp.push(obj);
+										obj = {};
+										obj.name = '清醒';
+										obj.value = ress.data.results.rawake_duration;
+										durationDataTemp.push(obj);
+										console.log("durationDataTemp=" + JSON.stringify(durationDataTemp));
+										that.setData({
+											durationData: durationDataTemp,
+										});
+										chart2 = echarts.init(canvas, null, {
+											width: width,
+											height: height
+										});
+										// console.log("plot in ......")
+										canvas.setChart(chart2);
+										flushChart2(that.data.durationData)
+									} catch (error) {
+										console.error(error);
+									}
+									// console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
+									// console.log(""); 
+								}
+							},
+						});
+					}
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
+	},
+	initChart3(canvas, width, height) {
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": res.data[0].sn,
+								"token": token_push
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										let rdt_arrTemp = [];
+										if (ress.data.results.rrh_arr) {
+											rdt_arrTemp = that.splitN(ress.data.results.rdt_arr.split(","), 100);
+										}
+										let rhx_arrTemp = [];
+										if (ress.data.results.rhx_arr) {
+											rhx_arrTemp = that.splitN(ress.data.results.rhx_arr.split(","), 100);
+										}
+										that.setData({
+											rdt_arrNew: rdt_arrTemp,
+											rhx_arrNew: rhx_arrTemp,
+										});
+										chart3 = echarts.init(canvas, null, {
+											width: width,
+											height: height
+										});
+										console.log("plot in ......")
+										canvas.setChart(chart3);
+										flushChart3(that.data.rdt_arrNew, that.data.rhx_arrNew)
+									} catch (error) {
+										console.error(error);
+									}
+									// console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
+									// console.log("");
+								}
+							},
+						});
+					}
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
+	},
+	initTimeWaterfall(reportId) {
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": that.data.rsn ? that.data.rsn : res.data[0].sn,
+								"token": token_push,
+								"rpids": reportId
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									try {
+										let rdt_arrTemp = [];
+										if (ress.data.results.rrh_arr) {
+											rdt_arrTemp = that.splitN(ress.data.results.rdt_arr.split(","), 100);
+										}
+										// console.log('深浅睡眠11111=======' + JSON.stringify(rdt_arrTemp));
+										let rsleep_arr_Temp = [];
+										if (ress.data.results.rsleep_arr) {
+											rsleep_arr_Temp = that.splitN(ress.data.results.rsleep_arr.split(","), 100);
+										}
+										// console.log('深浅睡眠11111=======' + JSON.stringify(rsleep_arr_Temp));
+										that.setData({
+											rdt_arrNew: rdt_arrTemp,
+											rsleep_arr: rsleep_arr_Temp,
+											rdeep_duration: ress.data.results.rdeep_duration,
+											rlight_duration: ress.data.results.rlight_duration,
+											rin_duration: ress.data.results.rin_duration,
+											rawake_duration: ress.data.results.rawake_duration,
+											rdeep_durationFormat: that.convertTimeToHoursAndMinutes(ress.data.results.rdeep_duration, 1),
+											rlight_durationFormat: that.convertTimeToHoursAndMinutes(ress.data.results.rlight_duration, 1),
+											rin_durationFormat: that.convertTimeToHoursAndMinutes(ress.data.results.rin_duration, 1),
+											rawake_durationFormat: that.convertTimeToHoursAndMinutes(ress.data.results.rawake_duration, 1),
+										});
+
+										console.log('ress.data.results.rdeep_duration=' + ress.data.results.rdeep_duration);
+										console.log('ress.data.results.rlight_duration=' + ress.data.results.rlight_duration);
+										console.log('ress.data.results.rin_duration=' + ress.data.results.rin_duration);
+										console.log('ress.data.results.rawake_duration=' + ress.data.results.rawake_duration);
+
+									
+										updateTimeWaterfall([that.convertTimeToHoursAndMinutes(ress.data.results.rawake_duration, 2),
+											that.convertTimeToHoursAndMinutes(ress.data.results.rin_duration, 2),
+											that.convertTimeToHoursAndMinutes(ress.data.results.rlight_duration, 2),
+											that.convertTimeToHoursAndMinutes(ress.data.results.rdeep_duration, 2)],
+											[   ress.data.results.rawake_duration || 0,
+												ress.data.results.rin_duration || 0,
+												ress.data.results.rlight_duration || 0, 
+												ress.data.results.rdeep_duration || 0,
+											], that)
+									} catch (error) {
+										console.error(error);
+									}
+									console.log("that.data.rsleep_arr=" + that.data.rsleep_arr);
+									console.log("");
+								}
+							},
+						});
+					}
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
+	},
+	initChart4(canvas, width, height) {
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": res.data[0].sn,
+								"token": token_push
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										let sleep_durationCount = 0;
+										if (ress.data.results.rdeep_duration) {
+											sleep_durationCount += parseFloat(ress.data.results.rdeep_duration)
+										}
+										if (ress.data.results.rlight_duration) {
+											sleep_durationCount += parseFloat(ress.data.results.rlight_duration)
+										}
+										if (ress.data.results.rin_duration) {
+											sleep_durationCount += parseFloat(ress.data.results.rin_duration)
+										}
+										let sleep_durationTemp = [];
+										// let data1 = [];
+										let obj1 = {};
+										obj1.name = '睡眠时间';
+										obj1.value = Math.ceil(sleep_durationCount / 60);
+										sleep_durationTemp.push(obj1);
+										// data1.push(obj1);
+										// let data2 = [];
+										obj1 = {};
+										obj1.name = '清醒时间';
+										obj1.value = Math.ceil(parseFloat(ress.data.results.rawake_duration) / 60);
+										sleep_durationTemp.push(obj1);
+										// data2.push(obj1);
+										that.setData({
+											sleep_duration: sleep_durationTemp,
+										});
+										chart4 = echarts.init(canvas, null, {
+											width: width,
+											height: height
+										});
+										console.log("plot in ......")
+										canvas.setChart(chart4);
+										// console.log("that.data.sleep_duration="+JSON.stringify(that.data.sleep_duration))
+										flushChart4(that.data.sleep_duration)
+									} catch (error) {
+										console.error(error);
+									}
+									console.log("");
+								}
+							},
+						});
+					}
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
+	},
+	initChart5(canvas, width, height) {
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				if (res && res.data && res.data[0]) {
+					that.setData({
+						roomname: res.data[0].rn
+					});
+					try {
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": res.data[0].sn,
+								"token": token_push
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										let rdt_arrTemp = [];
+										if (ress.data.results.rrh_arr) {
+											rdt_arrTemp = that.splitN(ress.data.results.rdt_arr.split(","), 100);
+										}
+										let rsleep_arrTemp = [];
+										if (ress.data.results.rsleep_arr) {
+											rsleep_arrTemp = that.splitN(ress.data.results.rsleep_arr.split(","), 100);
+										}
+										that.setData({
+											rdt_arrNew: rdt_arrTemp,
+											rsleep_arrNew: rsleep_arrTemp,
+
+										});
+										chart5 = echarts.init(canvas, null, {
+											width: width,
+											height: height
+										});
+										console.log("plot in ......")
+										canvas.setChart(chart5);
+										flushChart5(that.data.rdt_arrNew, that.data.rsleep_arrNew, that)
+									} catch (error) {
+										console.error(error);
+									}
+									console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1=" + that.data.rdt_arrNew + "," + that.data.rrh_arrNew);
+									console.log("");
+								}
+							},
+						});
+					} catch (error) {
+						console.error(error);
+					}
+				}
+			},
+		})
+	},
+	initChart6(canvas, width, height) {
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": res.data[0].sn,
+								"token": token_push
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										var rsleep_arr_all_Temp = [];
+										if (ress.data.results.rsleep_arr) {
+											rsleep_arr_all_Temp = ress.data.results.rsleep_arr.split(",");
+										}
+
+										that.setData({
+											rdt_arr: that.splitN(ress.data.results.rdt_arr ? ress.data.results.rdt_arr.split(',') : [], 100),
+											rsleep_arr_all: that.splitN(rsleep_arr_all_Temp, 100),
+											rgobed_time: ress.data.results.rgobed_time,
+											routbed_time: ress.data.results.routbed_time,
+											rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
+										});
+										chart6 = echarts.init(canvas, null, {
+											width: width,
+											height: height
+										});
+										console.log("plot in ......")
+										canvas.setChart(chart6);
+										// var list = that.getRsleep_arr(ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(","):[])
+										flushChart6(that.data.rdt_arr, that.data.rsleep_arr_all, that.data.rgobed_time, that.data.routbed_time, that)
+									} catch (error) {
+										console.error(error);
+									}
+									console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1=" + that.data.rdt_arrNew + "," + that.data.rrh_arrNew);
+									console.log("");
+								}
+							},
+						});
+					}
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
+	},
+	initOutOfBed(reportId) {//离床次数
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": that.data.rsn ? that.data.rsn : res.data[0].sn,
+								"token": token_push,
+								"rpids": reportId || that.data.reportId
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										var routbed_arr_Temp = [];
+										if (ress.data.results.routbed_arr) {
+											routbed_arr_Temp = ress.data.results.routbed_arr.split(",");
+										}
+
+										that.setData({
+											// rdt_arr: that.splitN(ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],100),
+											// routbed_arr: that.splitN(routbed_arr_Temp,100),
+											rdt_arr: ress.data.results.rdt_arr ? ress.data.results.rdt_arr.split(',') : [],
+											routbed_arr: routbed_arr_Temp,
+											rgobed_time: ress.data.results.rgobed_time,
+											routbed_time: ress.data.results.routbed_time,
+											rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
+										});
+										updateOutOfBed(that.data.rdt_arr, that.data.routbed_arr, that.data.rgobed_time, that.data.routbed_time, that)
+									} catch (error) {
+										console.error(error);
+									}
+									console.log("that.data.routbed_arr=" + that.data.routbed_arr);
+									console.log("");
+								}
+							},
+						});
+					}
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
 	},
-	tvEntityIdChange: function(e) {
-	  this.telScreeProjection();
+	initBodyMovements(reportId) {//体动次数
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": that.data.rsn ? that.data.rsn : res.data[0].sn,
+								"token": token_push,
+								"rpids": reportId || that.data.reportId
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										var rmove_arr_Temp = [];
+										if (ress.data.results.rmove_arr) {
+											rmove_arr_Temp = ress.data.results.rmove_arr.split(",");
+										}
+
+										that.setData({
+											rdt_arr: that.splitN(ress.data.results.rdt_arr ? ress.data.results.rdt_arr.split(',') : [], 100),
+											rmove_arr: that.splitN(rmove_arr_Temp, 100),
+											rgobed_time: ress.data.results.rgobed_time,
+											routbed_time: ress.data.results.routbed_time,
+											rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
+										});
+										updateBodyMovements(that.data.rdt_arr, that.data.rmove_arr, that.data.rgobed_time, that.data.routbed_time, that)
+									} catch (error) {
+										console.error(error);
+									}
+									console.log("c8_that.data.rmove_arr=" + that.data.rmove_arr);
+									console.log("");
+								}
+							},
+						});
+					}
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
 	},
-	onPickerChange: function(e) {
-	 var that = this;
-	 var selectedOption = this.data.sns[e.detail.value];  
-	     this.setData({
-	       selectedIndex: e.detail.value,  
-	       selectedValue: selectedOption.pos,  
-		   rsn: selectedOption.sn,
-	     }); 
-		 console.log("e.detail.value="+e.detail.value);
-		 console.log("selectedOption="+JSON.stringify(selectedOption));
-		this.getData(selectedOption.sn,this.data.hotelcode,this.data.roomcode,null); 
-		
-		//-----
-		
-		//-----
-		
-		this.selectComponent('#mychart-dom-bar00').init((canvas, width, height) => {
-		        that.initChart00(canvas, width, height,null)
-		      });
-		this.selectComponent('#mychart-dom-bar7').init((canvas, width, height) => {
-		        that.initChart7(canvas, width, height,null)
-		      });
-		this.selectComponent('#mychart-dom-bar8').init((canvas, width, height) => {
-		        that.initChart8(canvas, width, height,null)
-		      });
-		this.selectComponent('#mychart-dom-bar1').init((canvas, width, height) => {
-		        that.initChart1(canvas, width, height,null)
-		      });
-		this.selectComponent('#mychart-dom-bar81').init((canvas, width, height) => {
-		        that.initChart81(canvas, width, height,null)
-		      });
-		this.selectComponent('#mychart-dom-bar9').init((canvas, width, height) => {
-		        that.initChart9(canvas, width, height,null)
-		      });
-		this.selectComponent('#mychart-dom-bar10').init((canvas, width, height) => {
-		        that.initChart10(canvas, width, height,null)
-		      });
-		this.selectComponent('#mychart-dom-bar11').init((canvas, width, height) => {
-		        that.initChart11(canvas, width, height,null)
-		      });
-	  }, 
-	  onPickerDateTimeChange: function(reportId) {
-	   var that = this;
-	   // var selectedOption = this.data.sns[e.detail.value];  
-	   //     this.setData({
-	   //       selectedIndex: e.detail.value,  
-	   //       selectedValue: selectedOption.pos,  
-	  	//    rsn: selectedOption.sn,
-	   //     }); 
-	  	//  console.log("e.detail.value="+e.detail.value);
-	  	//  console.log("selectedOption="+JSON.stringify(selectedOption));
-	  	this.getData(that.data.sn,this.data.hotelcode,this.data.roomcode,reportId);
-		 this.selectComponent('#mychart-dom-bar00').init((canvas, width, height) => {
-		         that.initChart00(canvas, width, height,reportId)
-		       });
-	  	this.selectComponent('#mychart-dom-bar7').init((canvas, width, height) => {
-	  	        that.initChart7(canvas, width, height,reportId)
-	  	      });
-	  	this.selectComponent('#mychart-dom-bar8').init((canvas, width, height) => {
-	  	        that.initChart8(canvas, width, height,reportId)
-	  	      });
-	  	this.selectComponent('#mychart-dom-bar1').init((canvas, width, height) => {
-	  	        that.initChart1(canvas, width, height,reportId)
-	  	      });
-	  	this.selectComponent('#mychart-dom-bar81').init((canvas, width, height) => {
-	  	        that.initChart81(canvas, width, height,reportId)
-	  	      });
-	  	this.selectComponent('#mychart-dom-bar9').init((canvas, width, height) => {
-	  	        that.initChart9(canvas, width, height,reportId)
-	  	      });
-	  	this.selectComponent('#mychart-dom-bar10').init((canvas, width, height) => {
-	  	        that.initChart10(canvas, width, height,reportId)
-	  	      });
-	  	this.selectComponent('#mychart-dom-bar11').init((canvas, width, height) => {
-	  	        that.initChart11(canvas, width, height,reportId)
-	  	      });
-	    }, 
-  onButtonTap: function() {
-      // 切换按钮的样式类  
-      this.setData({  
-        isButtonPressed: !this.data.isButtonPressed  
-      });  
-    },
-  dayClick(event) { //日历点击选择日期    
-    var that = this;
-    var clickDate = String(event.detail.year) + addZero(event.detail.month) + addZero(event.detail.day)
-    // that.getTargetData(clickDate)
-    console.log("change date", that.data.target_sleep_list)
-    flushChart(that.data.target_sleep_list)
-
-    that.setData({
-      nowDate: [{
-        month: 'current',
-        day: event.detail.day,
-        color: 'white',
-        background: '#82d5f8'
-      }, {
-        month: 'current',
-        day: new Date().getDate(),
-        color: '#ffd700',
-        background: 'white'
-      }],
-      clickDate: clickDate,
-      ec: {
-        onInit: that.construct_sleep_plot
-      }
-    })
-  },
-
-  getTargetData(date) {
-    var that = this;
-    var sleep_data = wx.getStorageSync("sleep_data")
-    console.log("find date is", date)
-    if (sleep_data || that.data.moke_data){
-      if (date == "20240414" || date == "20240415"){
-        var parse_sleep_data = that.data.moke_data[date]
-      }else{
-        var parse_sleep_data = JSON.parse(sleep_data)[date]
-      }
-      var sleep_cnt = 0
-      if (parse_sleep_data){
-        sleep_cnt = parse_sleep_data.length;
-      }
-      var sleep_time = 0.0;
-      var sleep_desc = "";
-      var sleep_tj_map = {
-        '早醒': 0,
-        '疲惫': 0,
-        '多梦': 0,
-        '很好': 0
-      };
-      var slepp_sugg = "";
-      var target_sleep_list = [];
-      for (var i in parse_sleep_data){
-        var fix_sleep_tm = (parse_sleep_data[i].sleepAllTime / 60).toFixed(1);
-        sleep_time += parseFloat(fix_sleep_tm);
-        sleep_tj_map[parse_sleep_data[i].sleepFeedback] += 1
-        target_sleep_list.push(parseFloat(fix_sleep_tm))
-      }
-      
-      for(var j in sleep_tj_map){
-        if (sleep_tj_map[j] > 0){
-          sleep_desc += j + String(sleep_tj_map[j]) + " 次."
-        }
-      }
-      switch (sleep_cnt) {
-        case 5:
-          slepp_sugg = "继续保持睡前良好状态";
-          break;
-        case 1:
-          slepp_sugg = "学会释放工作压力";
-          break;
-        case 2:
-          slepp_sugg = "睡前一小时不要进行有氧运动";
-          break;
-        case 3:
-          slepp_sugg = "睡前尽量不要摄入高热量餐饮";
-          break;
-        case 0:
-          slepp_sugg = "还未产生睡眠报告";
-          break;
-        case 4:
-          slepp_sugg = "做一些助眠工作";
-          break;
-      }
-      that.setData({
-        data_dispaly: true,
-        sleep_cnt: sleep_cnt,
-        sleep_time: sleep_time.toFixed(1),
-        sleep_desc: sleep_desc,
-        slepp_sugg: slepp_sugg,
-        target_sleep_list: target_sleep_list,
-		ec0: {onInit: target_sleep_list},
-        ec: {onInit: target_sleep_list},
-		ec1: {onInit: target_sleep_list},
-		ec2: {onInit: target_sleep_list},
-		ec3: {onInit: target_sleep_list},
-		ec4: {onInit: target_sleep_list},
-      })
-    }
-  },
-
-initChart000(canvas, width, height){
-	var that = this;
-	chart000 = echarts.init(canvas, null, {
-		width: width,
-		height: height
-	});
-	console.log("plot in ......")
-	canvas.setChart(chart000);
-	flushChart000();
-  },
-  
-initChart00(canvas, width, height,reportId){
+	initChartRespiratory(reportId) {//平均呼吸率
 		var that = this;
 		wx.request({
-		  url: `${aipushApi}`+'/getsn', 
-		  data: {
-					 // "hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-					 // "roomcode":that.data.hotelcode?that.data.roomcode:"nuange",
-					 "hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-					 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-					 "token":token_push},
-		  method: 'POST',
-		  success(res) {
-			try {
-					if(res && res.data && res.data[0]){
-					   that.setData({
-                             roomname: res.data[0].rn
-                           });
-						console.log("res.data=sn="+JSON.stringify(res.data));
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
 						wx.request({
-					  url: `${aipushApi}`+'/getsingle',
-					  data: {
-						  "sn":that.data.rsn?that.data.rsn:res.data[0].sn,
-						  "rpids":reportId,
-						  "token":token_push},
-					  method: 'POST',
-					  success(ress) {
-						  if(ress && ress.data){
-								// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-								try {
-									let rscore_descTemp = [];
-									if(ress.data.results.rscore_desc){
-										rscore_descTemp = ress.data.results.rscore_desc;
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": that.data.rsn ? that.data.rsn : res.data[0].sn,
+								"token": token_push,
+								"rpids": reportId
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										var rhx_arr_Temp = [];
+										if (ress.data.results.rhx_arr) {
+											rhx_arr_Temp = ress.data.results.rhx_arr.split(",");
+										}
+
+										that.setData({
+											rdt_arr: that.splitN(ress.data.results.rdt_arr ? ress.data.results.rdt_arr.split(',') : [], 100),
+											rhx_arr: that.splitN(rhx_arr_Temp, 100),
+											rgobed_time: ress.data.results.rgobed_time,
+											routbed_time: ress.data.results.routbed_time,
+											rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
+										});
+										updateRespiratory(that.data.rdt_arr, that.data.rhx_arr, that.data.rgobed_time, that.data.routbed_time, that)
+									} catch (error) {
+										console.error(error);
 									}
-									let rscore_valueTemp = [];
-									if(ress.data.results.rscore_value){
-										rscore_valueTemp = ress.data.results.rscore_value;
+									console.log("c81_that.data.ravg_hx_value=" + that.data.ravg_hx_value);
+									console.log("");
+								}
+							},
+						});
+					}
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
+	},
+	initChartSnoring(reportId) {//打鼾
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": that.data.rsn ? that.data.rsn : res.data[0].sn,
+								"token": token_push,
+								"rpids": reportId
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										var rsnoring_arr_Temp = [];
+										if (ress.data.results.rsnoring_arr) {
+											rsnoring_arr_Temp = ress.data.results.rsnoring_arr.split(",");
+										}
+
+										that.setData({
+											rdt_arr: that.splitN(ress.data.results.rdt_arr ? ress.data.results.rdt_arr.split(',') : [], 100),
+											rsnoring_arr: that.splitN(rsnoring_arr_Temp, 100),
+											rgobed_time: ress.data.results.rgobed_time,
+											routbed_time: ress.data.results.routbed_time,
+											rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
+										});
+										updateSnoring(that.data.rdt_arr, that.data.rsnoring_arr, that.data.rgobed_time, that.data.routbed_time, that)
+									} catch (error) {
+										console.error(error);
 									}
-									that.setData({
-										rscore_desc:rscore_descTemp,
-										rscore_value:rscore_valueTemp,
-									});
-								  chart00 = echarts.init(canvas, null, {
-									width: width,
-									height: height
-								  });
-								  console.log("plot in ......")
-								  canvas.setChart(chart00);
-								  flushChart00(rscore_descTemp,rscore_valueTemp,that);
-								  } catch (error) {
-								  console.error(error);
+									console.log("c8_that.data.rmove_arr=" + that.data.rmove_arr);
+									console.log("");
 								}
-								// console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
-								// console.log("");
-							  }
-						}
-						
-					});
+							},
+						});
+					}
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
+	},
+	initChartApnea(reportId) {//呼吸暂停
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": that.data.rsn ? that.data.rsn : res.data[0].sn,
+								"token": token_push,
+								"rpids": reportId
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										var rhxstop_arr_Temp = [];
+										if (ress.data.results.rhxstop_arr) {
+											rhxstop_arr_Temp = ress.data.results.rhxstop_arr.split(",");
+										}
+
+										that.setData({
+											rdt_arr: that.splitN(ress.data.results.rdt_arr ? ress.data.results.rdt_arr.split(',') : [], 100),
+											rhxstop_arr: that.splitN(rhxstop_arr_Temp, 100),
+											rgobed_time: ress.data.results.rgobed_time,
+											routbed_time: ress.data.results.routbed_time,
+											rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
+										});
+										updateApnea(that.data.rdt_arr, that.data.rhxstop_arr, that.data.rgobed_time, that.data.routbed_time, that)
+									} catch (error) {
+										console.error(error);
+									}
+									console.log("c8_that.data.rhxstop_arr=" + that.data.rhxstop_arr);
+									console.log("");
+								}
+							},
+						});
 					}
-					
-			} catch (error) {
-			  console.error(error);
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
+		})
+	},
+	getRsleep_arr(list) {
+		if (list) {
+			console.log("getRsleep_arr_list1==" + JSON.stringify(list));
+			for (let i = 0; i < list.length; i++) {
+				if (list[i] == '0') {
+					list[i] = '清醒';
+				} else if (list[i] == '10') {
+					list[i] = '浅睡';
+				} else if (list[i] == '20') {
+					list[i] = '中睡';
+				} else if (list[i] == '30') {
+					list[i] = '深睡';
+				} else {
+					list[i] = '其他';
+				}
+			}
+		}
+		console.log("getRsleep_arr_list2==" + JSON.stringify(list));
+	},
+	getFrequency(list) {//获取
+		if (list) {
+			console.log("getRsleep_arr_list1==" + JSON.stringify(list));
+			for (let i = 0; i < list.length; i++) {
+				if (list[i] == '0') {
+					list[i] = '清醒';
+				} else if (list[i] == '10') {
+					list[i] = '浅睡';
+				} else if (list[i] == '20') {
+					list[i] = '中睡';
+				} else if (list[i] == '30') {
+					list[i] = '深睡';
+				} else {
+					list[i] = '其他';
+				}
 			}
-		
-		  },
+		}
+		console.log("getRsleep_arr_list2==" + JSON.stringify(list));
+	},
+	initChart12(canvas, width, height) {//体动次数
+		var that = this;
+		wx.request({
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": that.data.hotelcode ? that.data.hotelcode : "club",
+				"roomcode": that.data.roomcode ? that.data.roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+				try {
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						wx.request({
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": res.data[0].sn,
+								"token": token_push
+							},
+							method: 'POST',
+							success(ress) {
+								if (ress && ress.data) {
+									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+									try {
+										var rsnoring_arr_Temp = [];
+										if (ress.data.results.rsnoring_arr) {
+											rsnoring_arr_Temp = ress.data.results.rsnoring_arr.split(",");
+										}
+
+										that.setData({
+											rdt_arr: that.splitN(ress.data.results.rdt_arr ? ress.data.results.rdt_arr.split(',') : [], 100),
+											rsnoring_arr: that.splitN(rsnoring_arr_Temp, 100),
+											rgobed_time: ress.data.results.rgobed_time,
+											routbed_time: ress.data.results.routbed_time,
+											rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
+										});
+										chart9 = echarts.init(canvas, null, {
+											width: width,
+											height: height
+										});
+										console.log("plot in ......")
+										canvas.setChart(chart9);
+										// var list = that.getRsleep_arr(ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(","):[])
+										flushChart9(that.data.rdt_arr, that.data.rsnoring_arr, that.data.rgobed_time, that.data.routbed_time, that)
+									} catch (error) {
+										console.error(error);
+									}
+									console.log("c8_that.data.rmove_arr=" + that.data.rmove_arr);
+									console.log("");
+								}
+							},
+						});
+					}
+				} catch (error) {
+					console.error(error);
+				}
+
+			},
 		})
-	  },
-	initChart0(canvas, width, height){
+	},
+	sleepStateChange(data) {
+		console.log("change-data==" + data)
+		switch (data) {
+			case 0:
+				return '清醒';
+			case 10:
+				return '浅睡';
+			case 20:
+				return '中睡';
+			case 30:
+				return '深睡';
+			default:
+				return '';
+		}
+	},
+	sleepRoutbed_arrChange(data) {
+		console.log("change-data==" + data)
+		switch (data) {
+			case 0:
+				return '离床';
+			case 1:
+				return '在床';
+			default:
+				return '';
+		}
+	},
+	sleepRmove_arrChange(data) {
+		console.log("change-data==" + data)
+		switch (data) {
+			case 0:
+				return '否';
+			case 1:
+				return '体动';
+			default:
+				return '';
+		}
+	},
+	sleepRsnoring_arrChange(data) {
+		console.log("change-data==" + data)
+		switch (data) {
+			case 0:
+				return '否';
+			case 1:
+				return '打鼾';
+			default:
+				return '';
+		}
+	},
+	sleepRhxstop_arrChange(data) {
+		console.log("change-data==" + data)
+		switch (data) {
+			case 0:
+				return '否';
+			case 1:
+				return '停止';
+			default:
+				return '';
+		}
+	},
+	splitN(originalArray, n) {
+		if (!originalArray) return [];
+		// 计算每份的大小  
+		let chunkSize = Math.ceil(originalArray.length / n);
+
+		// 分割数组并获取每份的最后一个元素  
+		let lastElements = [];
+		for (let i = 0; i < originalArray.length; i += chunkSize) {
+			let chunk = originalArray.slice(i, i + chunkSize);
+			lastElements.push(chunk[chunk.length - 1]);
+		}
+		// 输出每份的最后一个元素  
+		console.log('lastElements=' + lastElements);
+		return lastElements;
+	},
+	takePortionDateData(rdt_arrArray, originalArray, n) {
+		if (!rdt_arrArray || !originalArray) return [];
+		var portionDateData = [];
+		var portionData = [];
+		for (let i = 0; i < originalArray.length; i++) {
+			if (originalArray[i] == n) {
+				portionDateData.push(rdt_arrArray[i]);
+				portionData.push(originalArray[i]);
+			} else {
+
+			}
+		}
+		console.log('portionDateData=' + JSON.stringify(portionDateData));
+		return portionDateData;
+	},
+	takePortionData(originalArray, n) {
+		if (!originalArray) return [];
+		var portionData = [];
+		for (let i = 0; i < originalArray.length; i++) {
+			if (originalArray[i] == n) {
+				portionData.push(originalArray[i])
+			} else {
+
+			}
+		}
+		console.log('portionData=' + JSON.stringify(portionData));
+		return portionData;
+	},
+	getFrequency(list, o) {//获取次数
+		if (!list) return 0;
+		let frequency = 0;
+		for (let i = 0; i < list.length; i++) {
+			if (list[i] == o) frequency++;
+		}
+		console.log('frequency=' + frequency);
+		return frequency;
+	},
+	getTimeDiffInHours: function (startTimeStr, endTimeStr) {
+		// 假设两个时间都是同一天的,这里我们使用当前日期作为基准  
+		if (!startTimeStr || !endTimeStr) return null;
+		const now = new Date();
+		const startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate(), ...startTimeStr.split(':').map(Number));
+		const endDate = new Date(now.getFullYear(), now.getMonth(), now.getDate(), ...endTimeStr.split(':').map(Number));
+
+		// 处理跨天的情况  
+		if (endDate < startDate) {
+			endDate.setDate(endDate.getDate() + 1); // 将结束时间设置为第二天的同一时间  
+		}
+
+		// 计算时间差(毫秒)  
+		const diffInMs = endDate - startDate;
+
+		// 转换为小时  
+		const diffInHours = diffInMs / (1000 * 60 * 60);
+
+		return diffInHours;
+	},
+	drawProgressCircle: function () {
+		const ctx = wx.createCanvasContext('progressCircleCanvas');
+		// 假设屏幕的宽度为 windowWidth px  
+		const windowWidth = wx.getSystemInfoSync().windowWidth;
+
+		// 假设你有一个以 rpx 为单位的值  
+		const valueInRpx = 300;
+
+		// 计算对应的 px 值  
+		const valueInPx = (valueInRpx / 750) * windowWidth;
+
+		const radius = 60; // 圆的半径  
+		const centerX = valueInPx; // 圆心的x坐标  
+		const centerY = valueInPx / 2; // 圆心的y坐标  
+		const strokeWidth = 10; // 进度条的宽度  
+		const percentage = this.data.percentage; // 进度百分比  
+
+		// 绘制外圆  
+		ctx.beginPath();
+		ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI);
+		ctx.setStrokeStyle('#46ff81'); // 外圆颜色  
+		ctx.setLineWidth(strokeWidth * 2); // 外圆线宽  
+		ctx.stroke();
+
+		// 绘制内圆(进度条背景)  
+		ctx.beginPath();
+		ctx.arc(centerX, centerY, radius - strokeWidth, 0, 2 * Math.PI);
+		ctx.setStrokeStyle('#e0e0e0'); // 内圆颜色  
+		ctx.setLineWidth(strokeWidth); // 内圆线宽  
+		ctx.stroke();
+
+		// 绘制进度条  
+		ctx.beginPath();
+		ctx.arc(centerX, centerY, radius - strokeWidth, -0.5 * Math.PI, -0.5 * Math.PI + 2 * Math.PI * (percentage / 100));
+		ctx.setStrokeStyle('#007aff'); // 进度条颜色  
+		ctx.setLineWidth(strokeWidth);
+		ctx.setLineCap('round'); // 设置线条端点的样式为圆形  
+		ctx.stroke();
+
+		// 绘制中心圆点  
+		ctx.beginPath();
+		ctx.arc(centerX, centerY, 5, 0, 2 * Math.PI);
+		ctx.setFillStyle('#ffffff');
+		ctx.fill();
+
+		// 绘制完成,将内容渲染到canvas中  
+		ctx.draw();
+	},
+	// 假设你有一个方法来更新进度条的值  
+	updateProgress: function (newPercentage) {
+		this.setData({
+			percentage: newPercentage
+		});
+		this.drawProgressCircle(); // 重新绘制进度条  
+	},
+
+	buttonClicked: function () {
+		var that = this;
+		// 切换按钮的点击状态  
+		this.setData({
+			isButtonClicked: !that.data.isButtonClicked,
+		});
+
+		// 在这里可以添加其他点击后的逻辑,比如调用接口等  
+	},
+
+	telScreeProjection: function (tvEntityId) {
 		var that = this;
-		chart0 = echarts.init(canvas, null, {
-		  width: width,
-		  height: height
+		that.setData({
+			isLoading: true,
+		});
+		wx.request({
+			url: `${aipushApi}` + '/getbigreport',
+			method: 'POST',
+			header: {
+				'content-type': 'application/json', // 默认值
+				'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
+			},
+			data: {
+				"sn": that.data.rsn, "tokens": token_push
+			},
+			success(ress) {
+				console.log('wx.getStorageSync(tvEntityId)=' + wx.getStorageSync('tvEntityId'));
+				console.log('tvEntityId=' + JSON.stringify(tvEntityId));
+				let tvEntityIdss = tvEntityId ? tvEntityId : wx.getStorageSync('tvEntityId')
+				if (ress && ress.data && tvEntityIdss) {
+					console.log("ress.data==" + JSON.stringify(ress.data.url));
+					console.log("tvEntityIdss==" + tvEntityIdss);
+					wx.request({
+						// url: `${homeApi_http}`+':'+`${homeApi_http_port}`+'/api/services/media_player/play_media', //http 
+						// url: `${homeApi_https}`+'/api/services/media_player/play_media',  //https
+						url: `${homeApi_https}` + '/api/services/media_player/select_source',  //https
+						method: 'POST',
+						header: {
+							'content-type': 'application/json', // 默认值
+							'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
+						},
+						data: {
+							"entity_id": tvEntityIdss,
+							//     "media_content_id": ress.data.url,
+							// "media_content_id": 'https://alifei01.cfp.cn/creative/vcg/800/new/VCG41175510742.jpg',
+							// "media_content_id": 'https://alifei01.cfp.cn/creative/vcg/veer/1600water/veer-368621010.jpg',
+							//     "media_content_type": "image/jpeg/png",
+							"source": "X浏览器"
+						},
+						success(res) {
+							that.setData({
+								isLoading: false,
+							});
+							if (res && res.data) {
+								var resData = res.data
+								console.log('res-推送=' + JSON.stringify(res));
+								console.log('res.data-推送=' + JSON.stringify(resData));
+								wx.showToast({
+									title: "推送成功",
+									icon: "success",
+									mask: true,
+								});
+							} else {
+								wx.showToast({
+									title: '推送失败',
+									icon: 'none'
+								});
+							}
+						},
+						fail: function (error) {
+							// 请求失败后的回调函数  
+							console.error('推送失败', error);
+							// 在这里处理请求失败的情况,比如显示错误信息给用户  
+							that.setData({
+								isLoading: false,
+							});
+							wx.showToast({
+								title: '推送失败',
+								icon: 'none'
+							});
+						}
+					});
+				} else {
+					that.setData({
+						isLoading: false,
+					});
+					wx.showToast({
+						title: '找不到电视,推送失败',
+						icon: 'none'
+					});
+				}
+			},
 		});
-		console.log("plot in ......")
-		canvas.setChart(chart0);
-		var percentage = parseFloat(that.data.percentage)
-		var unPercentage = 100-percentage;
-		var percentages = []
-		var obj = {};
-		obj.name = '已完成';
-		obj.value = percentage;
-		percentages.push(obj);
-		obj = {};
-		obj.name = '未完成';
-		obj.value = unPercentage;
-		percentages.push(obj);
-		console.log("that.data.rdt_arrNew,that.data.rrh_arrNew="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
-		flushChart0(percentages);
-	  },
-	  
-  initChart(canvas, width, height){
-    var that = this;
-    chart = echarts.init(canvas, null, {
-      width: width,
-      height: height
-    });
-    console.log("plot in ......")
-    canvas.setChart(chart);
-    flushChart(that.data.target_sleep_list)
-  },
-
-	initChart1(canvas, width, height,reportId){
+	},
+	getData(sn, hotelcode, roomcode, reportId) {
 		var that = this;
 		wx.request({
-		  url: `${aipushApi}`+'/getsn', 
-		  data: {
-					 // "hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-					 // "roomcode":that.data.hotelcode?that.data.roomcode:"nuange",
-					 "hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-					 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-					 "token":token_push},
-		  method: 'POST',
-		  success(res) {
-			try {
-					if(res && res.data && res.data[0]){
-					    that.setData({
-                         roomname: res.data[0].rn
-                       });
-						console.log("res.data=sn="+JSON.stringify(res.data));
+			url: `${aipushApi}` + '/getsn',
+			data: {
+				"hotelcode": hotelcode ? hotelcode : "club",
+				"roomcode": roomcode ? roomcode : "nuange",
+				"token": token_push
+			},
+			method: 'POST',
+			success(res) {
+
+				try {
+					// that.setData({
+					//   airText: now.category, //空气质量
+					//   airValue: now.aqi //空气指数
+					// })
+					if (res && res.data && res.data[0]) {
+						that.setData({
+							roomname: res.data[0].rn
+						});
+						console.log("res.data-sn=" + JSON.stringify(res.data));
 						wx.request({
-					  url: `${aipushApi}`+'/getsingle',
-					  data: {
-						  "sn":that.data.rsn?that.data.rsn:res.data[0].sn,
-								 "token":token_push,
-								 "rpids":reportId},
-					  method: 'POST',
-					  success(ress) {
-						  if(ress && ress.data){
-								// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
+							url: `${aipushApi}` + '/getsingle',
+							data: {
+								"sn": sn ? sn : res.data[0].sn,
+								"token": token_push,
+								"rpids": reportId
+							},
+							method: 'POST',
+							success(ress) {
 								try {
-									let rdt_arrTemp = [];
-									if(ress.data.results.rrh_arr){
-										rdt_arrTemp = that.splitN(ress.data.results.rdt_arr.split(","),100);
-									}
-									if(ress.data.results.rdate){
-										that.setData({  
-										      reportDate: ress.data.results.rdate  
-										    });
-									}
-									let rrh_arrTemp = [];
-									if(ress.data.results.rrh_arr){
-										rrh_arrTemp = that.splitN(ress.data.results.rrh_arr.split(","),100);
-									}
-								   that.setData({
-									rdt_arrNew:rdt_arrTemp,
-									rrh_arrNew:rrh_arrTemp,
-								  });
-								  chart1 = echarts.init(canvas, null, {
-									  width: width,
-									  height: height
-									});
-									// console.log("plot in ......")
-									canvas.setChart(chart1);
-									console.log("that.data.rdt_arrNew,that.data.rrh_arrNew="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
-									flushChart1(that.data.rdt_arrNew,that.data.rrh_arrNew);
-								  } catch (error) {
-								  console.error(error);
-								}
-								// console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
-								// console.log("");
-							  }
-						}
-						
-					});
-					}
-					
-			} catch (error) {
-			  console.error(error);
-			}
-		
-		  },
-		})
-	  },
-	  initChart2(canvas, width, height){
-	  	var that = this;
-	  	wx.request({
-		  url: `${aipushApi}`+'/getsn', 
-		  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-					 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-					 "token":token_push},
-		  method: 'POST',
-		  success(res) {
-			try {
-					if(res && res.data && res.data[0]){
-                        that.setData({
-                         roomname: res.data[0].rn
-                       });
-						wx.request({
-						  url: `${aipushApi}`+'/getsingle',
-						  data: {"sn":res.data[0].sn,
-									 "token":token_push},
-						  method: 'POST',
-						  success(ress) {
-							  if(ress&&ress.data){
-									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-									try {
+									if (ress && ress.data) {
+										console.log('ress.data-getsingle=' + JSON.stringify(ress.data.results));
+										// that.setData({
+										//   airText: now.category, //空气质量
+										//   airValue: now.aqi //空气指数
+										// })
+										// rdt_arr = ress.data.results.rdt_arr //睡眠时间轴数据集合
+										// rrh_arr =  ress.data.results.rdt_arr//睡眠心率数据集合
+										// rhx_arr =  ress.data.results.rhx_arr//睡眠呼吸数据集合
+										// rsnoring_arr =  ress.data.results.rsnoring_arr//睡眠打鼾数据集合,0-否,1-打鼾状态
+										// routbed_arr =  ress.data.results.routbed_arr//离床状态数据集合,0-离床,1-在床
+										// rmove_arr =  ress.data.results.rmove_arr//体动状态数据集合,0-否,1-体动状态
+										// rhxstop_arr =  ress.data.results.rhxstop_arr//呼吸停止状态数据集合
+										// rsleep_arr =  ress.data.results.rsleep_arr//睡眠状态数据集合,0-清醒,10-浅睡,20-中睡,30-深睡
+
+										// rdeep_duration =  ress.data.results.rdeep_duration//深睡时长,单位分钟
+										// rlight_duration =  ress.data.results.rlight_duration//浅睡时长,单位分钟
+										// rin_duration =  ress.data.results.rin_duration//中睡时长,单位分钟
+										// rawake_duration =  ress.data.results.rawake_duration//清醒时长,单位分钟
+										// ravg_hx_value =  ress.data.results.ravg_hx_value//呼吸平均值
+										// ravg_hx_desc =  ress.data.results.ravg_hx_desc//呼吸平均值评分描述
+										// ravg_rh_value =  ress.data.results.ravg_rh_value//心率平均值
+										// ravg_rh_desc =  ress.data.results.ravg_rh_desc//心率平均值评分描述
+										// rscore_value =  ress.data.results.rscore_value//睡眠报告得分值
+										// rscore_desc =  ress.data.results.rscore_desc//睡眠报告得分评比描述
+
+
+										//  that.setData({
+										//    rdt_arr: ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],
+										// rrh_arr: ress.data.results.rrh_arr?ress.data.results.rrh_arr.split(','):[],
+										// rhx_arr: ress.data.results.rhx_arr?ress.data.results.rhx_arr.split(','):[],
+										// rsnoring_arr: ress.data.results.rsnoring_arr?ress.data.results.rsnoring_arr.split(','):[],
+										// routbed_arr: ress.data.results.routbed_arr?ress.data.results.routbed_arr.split(','):[],
+										// rmove_arr: ress.data.results.rmove_arr?ress.data.results.rmove_arr.split(','):[],
+										// rhxstop_arr: ress.data.results.rhxstop_arr?ress.data.results.rhxstop_arr.split(','):[],
+										// rsleep_arr: ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(','):[],
+
+										// rdeep_duration: ress.data.results.rdeep_duration,
+										// rlight_duration: ress.data.results.rlight_duration,
+										// rin_duration: ress.data.results.rin_duration,
+										// rawake_duration: ress.data.results.rawake_duration,
+										// ravg_hx_value: ress.data.results.ravg_hx_value,
+										// ravg_hx_desc: ress.data.results.ravg_hx_desc,
+										// ravg_rh_value: ress.data.results.ravg_rh_value,
+										// ravg_rh_desc: ress.data.results.ravg_rh_desc,
+										// rscore_value: ress.data.results.rscore_value,
+										// rscore_desc: ress.data.results.rscore_desc,
+
+										// rsn: ress.data.results.rsn,
+										// rdate: ress.data.results.rdate,
+										// rtotal_duration: ress.data.results.rtotal_duration,//睡眠总时长,单位分钟
+										// rinbed_duration: ress.data.results.rinbed_duration,//在床时长,单位分钟
+										// rgobed_time: ress.data.results.rgobed_time,//上床时间
+										// routbed_time: ress.data.results.routbed_time,//离床时间
+										// routbed_count_value: ress.data.results.routbed_count_value,//离床次数
+										// rsn: ress.data.results.rsn,
+
+										//  });
+
 										let durationDataTemp = [];
 										let obj = {};
 										obj.name = '深睡';
 										obj.value = ress.data.results.rdeep_duration;
 										durationDataTemp.push(obj);
 										obj = {};
-										obj.name = '中睡';
-										obj.value = ress.data.results.rin_duration;
-										durationDataTemp.push(obj);
-										obj = {};
 										obj.name = '浅睡';
 										obj.value = ress.data.results.rlight_duration;
 										durationDataTemp.push(obj);
 										obj = {};
+										obj.name = '中睡';
+										obj.value = ress.data.results.rin_duration;
+										durationDataTemp.push(obj);
+										obj = {};
 										obj.name = '清醒';
 										obj.value = ress.data.results.rawake_duration;
 										durationDataTemp.push(obj);
-									  console.log("durationDataTemp="+JSON.stringify(durationDataTemp));
-									   that.setData({
-										durationData:durationDataTemp,
-									  });
-									  chart2 = echarts.init(canvas, null, {
-										  width: width,
-										  height: height
-										});
-										// console.log("plot in ......")
-										canvas.setChart(chart2);
-										flushChart2(that.data.durationData)
-									  } catch (error) {
-									  console.error(error);
-									}
-									// console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
-									// console.log(""); 
-							  }
-						  },
-						});
-					}	
-			} catch (error) {
-			  console.error(error);
-			}
-		
-		  },
-		})
-	    },
-		initChart3(canvas, width, height){
-			var that = this;
-			wx.request({
-			  url: `${aipushApi}`+'/getsn', 
-			  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-						 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-						 "token":token_push},
-			  method: 'POST',
-			  success(res) {
-				try {
-						if(res && res.data && res.data[0]){
-						   that.setData({
-                            roomname: res.data[0].rn
-                          });
-							wx.request({
-							  url: `${aipushApi}`+'/getsingle',
-							  data: {"sn":res.data[0].sn,
-										 "token":token_push},
-							  method: 'POST',
-							  success(ress) {
-								  if(ress && ress.data){
-										// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-										try {
-											let rdt_arrTemp = [];
-											if(ress.data.results.rrh_arr){
-												rdt_arrTemp = that.splitN(ress.data.results.rdt_arr.split(","),100);
-											}
-											let rhx_arrTemp = [];
-											if(ress.data.results.rhx_arr){
-												rhx_arrTemp = that.splitN(ress.data.results.rhx_arr.split(","),100);
-											}
-										   that.setData({
-											rdt_arrNew:rdt_arrTemp,
-											rhx_arrNew:rhx_arrTemp,
-										  });
-										  chart3 = echarts.init(canvas, null, {
-											  width: width,
-											  height: height
-											});
-											console.log("plot in ......")
-											canvas.setChart(chart3);
-											flushChart3(that.data.rdt_arrNew,that.data.rhx_arrNew)
-										  } catch (error) {
-										  console.error(error);
+										console.log("durationDataTemp=" + JSON.stringify(durationDataTemp));
+
+										let sleep_durationCount = 0;
+										if (ress.data.results.rdeep_duration) {
+											sleep_durationCount += parseFloat(ress.data.results.rdeep_duration)
 										}
-										// console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
-										// console.log("");
-								  }
-							  },
-							});	
-						}	
-				} catch (error) {
-				  console.error(error);
-				}
-			
-			  },
-			})
-		  },
-		  initChart11(canvas, width, height,reportId){
-		  	var that = this;
-		  	wx.request({
-		  	  url: `${aipushApi}`+'/getsn', 
-		  	  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-		  				 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-		  				 "token":token_push},
-		  	  method: 'POST',
-		  	  success(res) {
-		  		try {
-		  				if(res && res.data && res.data[0]){
-		  				    that.setData({
-                             roomname: res.data[0].rn
-                           });
-		  					wx.request({
-		  					  url: `${aipushApi}`+'/getsingle',
-		  					  data: {"sn":that.data.rsn?that.data.rsn:res.data[0].sn,
-		  								 "token":token_push,
-										 "rpids":reportId},
-		  					  method: 'POST',
-		  					  success(ress) {
-		  						  if(ress && ress.data){
-		  								// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-		  								try {
-		  									let rdt_arrTemp = [];
-		  									if(ress.data.results.rrh_arr){
-		  										rdt_arrTemp = that.splitN(ress.data.results.rdt_arr.split(","),100);
-		  									}
-		  									let rsleep_arr_Temp = [];
-		  									if(ress.data.results.rsleep_arr){
-		  										rsleep_arr_Temp = that.splitN(ress.data.results.rsleep_arr.split(","),100);
-		  									}
-		  								   that.setData({
-		  									rdt_arrNew:rdt_arrTemp,
-		  									rsleep_arr:rsleep_arr_Temp,
-											rdeep_durationFormat: that.convertTimeToHoursAndMinutes(ress.data.results.rdeep_duration,1),
-											rlight_durationFormat: that.convertTimeToHoursAndMinutes(ress.data.results.rlight_duration,1),
-											rin_durationFormat: that.convertTimeToHoursAndMinutes(ress.data.results.rin_duration,1),
-											rawake_durationFormat: that.convertTimeToHoursAndMinutes(ress.data.results.rawake_duration,1),
-		  								  });
-										  
-										  console.log('ress.data.results.rdeep_duration='+ress.data.results.rdeep_duration);
-										  console.log('ress.data.results.rlight_duration='+ress.data.results.rlight_duration);
-										  console.log('ress.data.results.rin_duration='+ress.data.results.rin_duration);
-										  console.log('ress.data.results.rawake_duration='+ress.data.results.rawake_duration);
-										  
-		  								  chart11 = echarts.init(canvas, null, {
-		  									  width: width,
-		  									  height: height
-		  									});
-		  									console.log("plot in ......")
-		  									canvas.setChart(chart11);
-		  									flushChart11(that.data.rdt_arrNew,that.data.rsleep_arr,that)
-		  								  } catch (error) {
-		  								  console.error(error);
-		  								}
-		  								console.log("that.data.rsleep_arr="+that.data.rsleep_arr);
-		  								console.log("");
-		  						  }
-		  					  },
-		  					});	
-		  				}	
-		  		} catch (error) {
-		  		  console.error(error);
-		  		}
-		  	
-		  	  },
-		  	})
-		    },
-		  initChart4(canvas, width, height){
-		  	var that = this;
-		  	wx.request({
-			  url: `${aipushApi}`+'/getsn', 
-			  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-						 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-						 "token":token_push},
-			  method: 'POST',
-			  success(res) {
-				try {
-					if(res && res.data && res.data[0]){
-					    that.setData({
-                         roomname: res.data[0].rn
-                       });
-						wx.request({
-						  url: `${aipushApi}`+'/getsingle',
-						  data: {"sn":res.data[0].sn,
-									 "token":token_push},
-						  method: 'POST',
-						  success(ress) {
-							  if(ress && ress.data){
-									// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-									try {
-										  let sleep_durationCount = 0;
-										  if(ress.data.results.rdeep_duration){
-											  sleep_durationCount += parseFloat(ress.data.results.rdeep_duration)
-										  }
-										  if(ress.data.results.rlight_duration){
-											  sleep_durationCount += parseFloat(ress.data.results.rlight_duration)
-										  }
-										  if(ress.data.results.rin_duration){
-											  sleep_durationCount += parseFloat(ress.data.results.rin_duration)
-										  }
-										  let sleep_durationTemp = [];
-										  // let data1 = [];
-										  let obj1 = {};
-										  obj1.name = '睡眠时间';
-										  obj1.value = Math.ceil(sleep_durationCount / 60);
-										  sleep_durationTemp.push(obj1);
-										  // data1.push(obj1);
-										  // let data2 = [];
-										  obj1 = {};
-										  obj1.name = '清醒时间';
-										  obj1.value = Math.ceil(parseFloat(ress.data.results.rawake_duration) / 60);
-										  sleep_durationTemp.push(obj1);
-										  // data2.push(obj1);
-									   that.setData({
-										sleep_duration:sleep_durationTemp,
-									  });
-									  chart4 = echarts.init(canvas, null, {
-										  width: width,
-										  height: height
-										});
-										console.log("plot in ......")
-										canvas.setChart(chart4);
-										// console.log("that.data.sleep_duration="+JSON.stringify(that.data.sleep_duration))
-										flushChart4(that.data.sleep_duration)
-									  } catch (error) {
-									  console.error(error);
-									}
-									console.log("");
-							  }
-						  },
-						});
-					}		
-				} catch (error) {
-				  console.error(error);
-				}
-			
-			  },
-			})
-		    },
-			initChart5(canvas, width, height){
-				var that = this;
-				wx.request({
-				  url: `${aipushApi}`+'/getsn', 
-				  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-							 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-							 "token":token_push},
-				  method: 'POST',
-				  success(res) {
-					  if(res && res.data && res.data[0]){
-					   that.setData({
-                        roomname: res.data[0].rn
-                      });
-						try {
-							wx.request({
-							  url: `${aipushApi}`+'/getsingle',
-							  data: {"sn":res.data[0].sn,
-										 "token":token_push},
-							  method: 'POST',
-							  success(ress) {
-								  if(ress && ress.data){
-										// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-										try {
-											  let rdt_arrTemp = [];
-											  if(ress.data.results.rrh_arr){
-												rdt_arrTemp = that.splitN(ress.data.results.rdt_arr.split(","),100);
-											  }
-											  let rsleep_arrTemp = [];
-											  if(ress.data.results.rsleep_arr){
-												rsleep_arrTemp = that.splitN(ress.data.results.rsleep_arr.split(","),100);
-											  }
-										   that.setData({
-											rdt_arrNew:rdt_arrTemp,
-											rsleep_arrNew:rsleep_arrTemp,
-											
-										  });
-										  chart5 = echarts.init(canvas, null, {
-										  width: width,
-										  height: height
-										});
-										console.log("plot in ......")
-										canvas.setChart(chart5);
-										flushChart5(that.data.rdt_arrNew,that.data.rsleep_arrNew,that)
-										  } catch (error) {
-										  console.error(error);
+										if (ress.data.results.rlight_duration) {
+											sleep_durationCount += parseFloat(ress.data.results.rlight_duration)
 										}
-										console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
-										console.log("");
-								  }
-							  },
-							});	
-						} catch (error) {
-						  console.error(error);
-						}  
-					  }
-				  },
-				})
-			  },
-			initChart6(canvas, width, height){
-				var that = this;	
-				wx.request({
-				  url: `${aipushApi}`+'/getsn', 
-				  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-							 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-							 "token":token_push},
-				  method: 'POST',
-				  success(res) {
-					try {
-							if(res && res.data && res.data[0]){
-							that.setData({
-                                roomname: res.data[0].rn
-                              });
-								wx.request({
-							  url: `${aipushApi}`+'/getsingle',
-							  data: {"sn":res.data[0].sn,
-										 "token":token_push},
-							  method: 'POST',
-							  success(ress) {
-								  if(ress && ress.data){
-										// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-										try {
-											var rsleep_arr_all_Temp = [];
-											if(ress.data.results.rsleep_arr){
-												rsleep_arr_all_Temp = ress.data.results.rsleep_arr.split(",");
-											}
-										  
-										   that.setData({
-											rdt_arr: that.splitN(ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],100),
-											rsleep_arr_all: that.splitN(rsleep_arr_all_Temp,100),
-											rgobed_time: ress.data.results.rgobed_time,
-											routbed_time: ress.data.results.routbed_time,
+										if (ress.data.results.rin_duration) {
+											sleep_durationCount += parseFloat(ress.data.results.rin_duration)
+										}
+
+										let sleep_efficiency_temp = ress.data.results.rtotal_duration ? (Math.ceil((sleep_durationCount / ress.data.results.rtotal_duration) * 100) + '%') : '%'
+
+										let rdeep_duration_efficiency_temp = ress.data.results.rtotal_duration ? (Math.ceil(((ress.data.results.rdeep_duration ? parseFloat(ress.data.results.rdeep_duration) : 0) / ress.data.results.rtotal_duration) * 100) + '%') : '%'
+										let rlight_duration_efficiency_temp = ress.data.results.rtotal_duration ? (Math.ceil(((ress.data.results.rlight_duration ? parseFloat(ress.data.results.rlight_duration) : 0) / ress.data.results.rtotal_duration) * 100) + '%') : '%'
+										let rin_duration_efficiency_temp = ress.data.results.rtotal_duration ? (Math.ceil(((ress.data.results.rin_duration ? parseFloat(ress.data.results.rin_duration) : 0) / ress.data.results.rtotal_duration) * 100) + '%') : '%'
+
+
+										let sleep_durationTemp = [];
+										let obj1 = {};
+										obj1.name = '睡眠时间';
+										obj1.value = Math.ceil(sleep_durationCount / 60);
+										sleep_durationTemp.push(obj1);
+										obj1 = {};
+										obj1.name = '清醒时间';
+										obj1.value = Math.ceil(parseFloat(ress.data.results.rawake_duration) / 60);
+										sleep_durationTemp.push(obj1);
+
+										let zdPointTemp = [];
+										let rdt_arrTemp = [];
+
+										let rrh_arrTemp = [];
+
+										let rhx_arrTemp = [];
+
+
+										let rmove_arrTemp = [];
+
+										let rsleep_arrTemp = [];
+
+										let rsleep_arr_all_Temp = [];
+
+										if (ress.data.results.rrh_arr) {
+											rdt_arrTemp = that.splitN(ress.data.results.rdt_arr.split(","), 100);
+										}
+
+										if (ress.data.results.rrh_arr) {
+											rrh_arrTemp = that.splitN(ress.data.results.rrh_arr.split(","), 100);
+										}
+										if (ress.data.results.rhx_arr) {
+											rhx_arrTemp = that.splitN(ress.data.results.rhx_arr.split(","), 100);
+										}
+										if (ress.data.results.rmove_arr) {
+											rmove_arrTemp = that.splitN(ress.data.results.rmove_arr.split(","), 100);
+										}
+										if (ress.data.results.rsleep_arr) {
+											rsleep_arrTemp = that.splitN(ress.data.results.rsleep_arr.split(","), 100);
+										}
+
+										if (ress.data.results.rsleep_arr) {
+											rsleep_arr_all_Temp = ress.data.results.rsleep_arr.split(",");
+										}
+
+										console.log("rdt_arrTemp=" + JSON.stringify(rdt_arrTemp));
+										console.log("rrh_arrTemp=" + JSON.stringify(rrh_arrTemp));
+										console.log("rhx_arrTemp=" + JSON.stringify(rhx_arrTemp));
+										console.log("rmove_arrTemp=" + JSON.stringify(rmove_arrTemp));
+										console.log("rsleep_arrTemp=" + JSON.stringify(rsleep_arrTemp));
+										console.log("rsleep_arr_all_Temp=" + JSON.stringify(rsleep_arr_all_Temp));
+										console.log("sleep_durationTemp=" + JSON.stringify(sleep_durationTemp));
+
+
+
+										that.setData({
+
+											rdt_arr: ress.data.results.rdt_arr ? ress.data.results.rdt_arr.split(',') : [],
+											rrh_arr: ress.data.results.rrh_arr ? ress.data.results.rrh_arr.split(',') : [],
+											rhx_arr: ress.data.results.rhx_arr ? ress.data.results.rhx_arr.split(',') : [],
+											rsnoring_arr: ress.data.results.rsnoring_arr ? ress.data.results.rsnoring_arr.split(',') : [],
+											routbed_arr: ress.data.results.routbed_arr ? ress.data.results.routbed_arr.split(',') : [],
+											rmove_arr: ress.data.results.rmove_arr ? ress.data.results.rmove_arr.split(',') : [],
+											rhxstop_arr: ress.data.results.rhxstop_arr ? ress.data.results.rhxstop_arr.split(',') : [],
+											rsleep_arr: ress.data.results.rsleep_arr ? ress.data.results.rsleep_arr.split(',') : [],
+
+											rsnoring_arrFrequency: that.getFrequency(ress.data.results.rsnoring_arr ? ress.data.results.rsnoring_arr.split(',') : [], 1),
+											routbed_arrFrequency: that.getFrequency(ress.data.results.routbed_arr ? ress.data.results.routbed_arr.split(',') : [], 0),
+											rmove_arrFrequency: that.getFrequency(ress.data.results.rmove_arr ? ress.data.results.rmove_arr.split(',') : [], 1),
+											rhxstop_arrFrequency: that.getFrequency(ress.data.results.rhxstop_arr ? ress.data.results.rhxstop_arr.split(',') : [], 1),
+
+											rdeep_durationFormatA: that.convertTimeToHoursAndMinutes(ress.data.results.rdeep_duration),
+											rlight_duration: ress.data.results.rlight_duration,
+											rin_duration: ress.data.results.rin_duration,
+											rawake_duration: ress.data.results.rawake_duration,
+											ravg_hx_value: ress.data.results.ravg_hx_value,
+											ravg_hx_desc: ress.data.results.ravg_hx_desc,
+											ravg_rh_value: ress.data.results.ravg_rh_value,
+											ravg_rh_desc: ress.data.results.ravg_rh_desc,
+											rscore_value: ress.data.results.rscore_value,
+											rscore_desc: ress.data.results.rscore_desc,
+
+											rsn: ress.data.results.rsn,
+											rdate: ress.data.results.rdate,
+											rtotal_duration: that.convertTimeToHoursAndMinutes(ress.data.results.rtotal_duration),//睡眠总时长,单位小时分钟
+											rinbed_duration: that.convertTimeToHoursAndMinutes(ress.data.results.rinbed_duration),//在床时长,单位小时分钟
+											rgobed_time: ress.data.results.rgobed_time,//上床时间
+											routbed_time: ress.data.results.routbed_time,//离床时间
 											rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
-										  });
-										  chart6 = echarts.init(canvas, null, {
-											  width: width,
-											  height: height
+											sleepHourSub: that.getTimeDiffInHours(ress.data.results.rgobed_time, ress.data.results.routbed_time),
+											routbed_count_value: ress.data.results.routbed_count_value,//离床次数
+											rsn: ress.data.results.rsn,
+											zdPointT: zdPointTemp,
+											rdt_arrNew: rdt_arrTemp,
+											rrh_arrNew: rrh_arrTemp,
+											rhx_arrNew: rhx_arrTemp,
+											rmove_arrNew: rmove_arrTemp,
+											rsleep_arrNew: rsleep_arrTemp,
+											rsleep_arr_all_New: rsleep_arr_all_Temp,
+											durationData: durationDataTemp,
+											sleep_duration: sleep_durationTemp,
+											sleep_efficiency: sleep_efficiency_temp,
+											sleep_durationCountA: that.convertTimeToHoursAndMinutes(sleep_durationCount ? sleep_durationCount.toString() : '0'),
+											sns: res.data,
+											tvEntityIds: wx.getStorageSync('tvEntityIds'),
+											ifOneMoreTV: (wx.getStorageSync('tvEntityIds') && wx.getStorageSync('tvEntityIds').length > 1),
+											hotelname: res.data[0].hn,
+											rdeep_duration_efficiency: rdeep_duration_efficiency_temp,
+											rlight_duration_efficiency: rlight_duration_efficiency_temp,
+											rin_duration_efficiency: rin_duration_efficiency_temp,
+											pushReportId: ress.data.results.rdid,
+
+											rrs_duration: that.convertTimeToHoursAndMinutes(ress.data.results.rrs_duration ? ress.data.results.rrs_duration.toString() : '0'),
+											routbed_count_value: ress.data.results.routbed_count_value,
+											rsleep_eff_value: ress.data.results.rsleep_eff_value,
+										});
+
+										that.getDateTimeJsonData(sn ? sn : res.data[0].sn);
+										// resolve(ress.data); // 请求成功,使用 resolve 返回数据
+										console.log('ress.data.results-' + ress.data.results)
+										if (!ress.data.results || ress.data.results == '') {
+											wx.showModal({
+												title: '提示',
+												content: '无数据',
+												showCancel: false
 											});
-											console.log("plot in ......")
-											canvas.setChart(chart6);
-											// var list = that.getRsleep_arr(ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(","):[])
-											flushChart6(that.data.rdt_arr,that.data.rsleep_arr_all,that.data.rgobed_time,that.data.routbed_time,that)
-										  } catch (error) {
-										  console.error(error);
+											return;
 										}
-										console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
-										console.log("");
-								  }
-							  },
-							});
-							}		
-					} catch (error) {
-					  console.error(error);
-					}
-				
-				  },
-				})
-			  },
-			  initChart7(canvas, width, height,reportId){//离床次数
-			  	var that = this;	
-			  	wx.request({
-			  	  url: `${aipushApi}`+'/getsn', 
-			  	  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-			  				 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-			  				 "token":token_push},
-			  	  method: 'POST',
-			  	  success(res) {
-			  		try {
-			  				if(res && res.data && res.data[0]){
-			  				that.setData({
-                                roomname: res.data[0].rn
-                              });
-			  					wx.request({
-			  				  url: `${aipushApi}`+'/getsingle',
-			  				  data: {"sn":that.data.rsn?that.data.rsn:res.data[0].sn,
-			  							 "token":token_push,
-										 "rpids":reportId},
-			  				  method: 'POST',
-			  				  success(ress) {
-			  					  if(ress && ress.data){
-			  							// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-			  							try {
-			  								var routbed_arr_Temp = [];
-			  								if(ress.data.results.routbed_arr){
-			  									routbed_arr_Temp = ress.data.results.routbed_arr.split(",");
-			  								}
-			  							  
-			  							   that.setData({
-			  								// rdt_arr: that.splitN(ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],100),
-			  								// routbed_arr: that.splitN(routbed_arr_Temp,100),
-											rdt_arr: ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],
-											routbed_arr: routbed_arr_Temp,
-			  								rgobed_time: ress.data.results.rgobed_time,
-			  								routbed_time: ress.data.results.routbed_time,
-											rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
-			  							  });
-			  							  chart7 = echarts.init(canvas, null, {
-			  								  width: width,
-			  								  height: height
-			  								});
-			  								console.log("plot in ......")
-			  								canvas.setChart(chart7);
-			  								// var list = that.getRsleep_arr(ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(","):[])
-			  								// flushChart7(that.takePortionDateData(that.data.rdt_arr,that.data.routbed_arr,0),that.takePortionData(that.data.routbed_arr,0),that.data.routbed_time,that)
-											flushChart7(that.data.rdt_arr,that.data.routbed_arr,that.data.routbed_time,that)
-										  } catch (error) {
-			  							  console.error(error);
-			  							}
-			  							console.log("that.data.routbed_arr="+that.data.routbed_arr);
-			  							console.log("");
-			  					  }
-			  				  },
-			  				});
-			  				}		
-			  		} catch (error) {
-			  		  console.error(error);
-			  		}
-			  	
-			  	  },
-			  	})
-			    },
-				initChart8(canvas, width, height,reportId){//体动次数
-					var that = this;	
-					wx.request({
-					  url: `${aipushApi}`+'/getsn', 
-					  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-								 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-								 "token":token_push},
-					  method: 'POST',
-					  success(res) {
-						try {
-								if(res && res.data && res.data[0]){
-								that.setData({
-                                    roomname: res.data[0].rn
-                                  });
-									wx.request({
-								  url: `${aipushApi}`+'/getsingle',
-								  data: {"sn":that.data.rsn?that.data.rsn:res.data[0].sn,
-											 "token":token_push,
-											 "rpids":reportId},
-								  method: 'POST',
-								  success(ress) {
-									  if(ress && ress.data){
-											// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-											try {
-												var rmove_arr_Temp = [];
-												if(ress.data.results.rmove_arr){
-													rmove_arr_Temp = ress.data.results.rmove_arr.split(",");
-												}
-											  
-											   that.setData({
-												rdt_arr: that.splitN(ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],100),
-												rmove_arr: that.splitN(rmove_arr_Temp,100),
-												rgobed_time: ress.data.results.rgobed_time,
-												routbed_time: ress.data.results.routbed_time,
-												rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
-											  });
-											  chart8 = echarts.init(canvas, null, {
-												  width: width,
-												  height: height
-												});
-												console.log("plot in ......")
-												canvas.setChart(chart8);
-												// var list = that.getRsleep_arr(ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(","):[])
-												flushChart8(that.data.rdt_arr,that.data.rmove_arr,that.data.rgobed_time,that.data.routbed_time,that)
-											  } catch (error) {
-											  console.error(error);
-											}
-											console.log("c8_that.data.rmove_arr="+that.data.rmove_arr);
-											console.log("");
-									  }
-								  },
+
+									} else {
+										wx.showModal({
+											title: '提示',
+											content: '无数据',
+											showCancel: false
+										});
+									}
+								} catch (error) {
+									console.error(error);
+								}
+								console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1=" + that.data.rdt_arrNew + "," + that.data.rrh_arrNew);
+								console.log("");
+							},
+							fail: function (error) {
+								wx.showToast({
+									title: "无数据",
+									icon: "error",
+									mask: true,
 								});
-								}		
-						} catch (error) {
-						  console.error(error);
-						}
-					
-					  },
-					})
-				  },
-				  initChart81(canvas, width, height,reportId){//平均呼吸率
-				  	var that = this;	
-				  	wx.request({
-				  	  url: `${aipushApi}`+'/getsn', 
-				  	  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-				  				 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-				  				 "token":token_push},
-				  	  method: 'POST',
-				  	  success(res) {
-				  		try {
-				  				if(res && res.data && res.data[0]){
-				  				that.setData({
-                                    roomname: res.data[0].rn
-                                  });
-				  					wx.request({
-				  				  url: `${aipushApi}`+'/getsingle',
-				  				  data: {"sn":that.data.rsn?that.data.rsn:res.data[0].sn,
-				  							 "token":token_push,
-											 "rpids":reportId},
-				  				  method: 'POST',
-				  				  success(ress) {
-				  					  if(ress && ress.data){
-				  							// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-				  							try {
-				  								var rhx_arr_Temp = [];
-				  								if(ress.data.results.rhx_arr){
-				  									rhx_arr_Temp = ress.data.results.rhx_arr.split(",");
-				  								}
-				  							  
-				  							   that.setData({
-				  								rdt_arr: that.splitN(ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],100),
-				  								rhx_arr: that.splitN(rhx_arr_Temp,100),
-				  								rgobed_time: ress.data.results.rgobed_time,
-				  								routbed_time: ress.data.results.routbed_time,
-												rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
-				  							  });
-				  							  chart81 = echarts.init(canvas, null, {
-				  								  width: width,
-				  								  height: height
-				  								});
-				  								console.log("plot in ......")
-				  								canvas.setChart(chart81);
-				  								// var list = that.getRsleep_arr(ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(","):[])
-				  								flushChart81(that.data.rdt_arr,that.data.rhx_arr,that.data.rgobed_time,that.data.routbed_time,that)
-				  							  } catch (error) {
-				  							  console.error(error);
-				  							}
-				  							console.log("c81_that.data.ravg_hx_value="+that.data.ravg_hx_value);
-				  							console.log("");
-				  					  }
-				  				  },
-				  				});
-				  				}		
-				  		} catch (error) {
-				  		  console.error(error);
-				  		}
-				  	
-				  	  },
-				  	})
-				    },
-				  initChart9(canvas, width, height,reportId){//体动次数
-				  	var that = this;	
-				  	wx.request({
-				  	  url: `${aipushApi}`+'/getsn', 
-				  	  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-				  				 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-				  				 "token":token_push},
-				  	  method: 'POST',
-				  	  success(res) {
-				  		try {
-				  				if(res && res.data && res.data[0]){
-				  				that.setData({
-                                    roomname: res.data[0].rn
-                                  });
-				  					wx.request({
-				  				  url: `${aipushApi}`+'/getsingle',
-				  				  data: {"sn":that.data.rsn?that.data.rsn:res.data[0].sn,
-				  							 "token":token_push,
-											 "rpids":reportId},
-				  				  method: 'POST',
-				  				  success(ress) {
-				  					  if(ress && ress.data){
-				  							// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-				  							try {
-				  								var rsnoring_arr_Temp = [];
-				  								if(ress.data.results.rsnoring_arr){
-				  									rsnoring_arr_Temp = ress.data.results.rsnoring_arr.split(",");
-				  								}
-				  							  
-				  							   that.setData({
-				  								rdt_arr: that.splitN(ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],100),
-				  								rsnoring_arr: that.splitN(rsnoring_arr_Temp,100),
-				  								rgobed_time: ress.data.results.rgobed_time,
-				  								routbed_time: ress.data.results.routbed_time,
-												rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
-				  							  });
-				  							  chart9 = echarts.init(canvas, null, {
-				  								  width: width,
-				  								  height: height
-				  								});
-				  								console.log("plot in ......")
-				  								canvas.setChart(chart9);
-				  								// var list = that.getRsleep_arr(ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(","):[])
-				  								flushChart9(that.data.rdt_arr,that.data.rsnoring_arr,that.data.rgobed_time,that.data.routbed_time,that)
-				  							  } catch (error) {
-				  							  console.error(error);
-				  							}
-				  							console.log("c8_that.data.rmove_arr="+that.data.rmove_arr);
-				  							console.log("");
-				  					  }
-				  				  },
-				  				});
-				  				}		
-				  		} catch (error) {
-				  		  console.error(error);
-				  		}
-				  	
-				  	  },
-				  	})
-				    },
-					initChart10(canvas, width, height,reportId){//体动次数
-						var that = this;	
-						wx.request({
-						  url: `${aipushApi}`+'/getsn', 
-						  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-									 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-									 "token":token_push},
-						  method: 'POST',
-						  success(res) {
-							try {
-									if(res && res.data && res.data[0]){
-									that.setData({
-                                        roomname: res.data[0].rn
-                                      });
-										wx.request({
-									  url: `${aipushApi}`+'/getsingle',
-									  data: {"sn":that.data.rsn?that.data.rsn:res.data[0].sn,
-												 "token":token_push,
-											     "rpids":reportId},
-									  method: 'POST',
-									  success(ress) {
-										  if(ress && ress.data){
-												// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-												try {
-													var rhxstop_arr_Temp = [];
-													if(ress.data.results.rhxstop_arr){
-														rhxstop_arr_Temp = ress.data.results.rhxstop_arr.split(",");
-													}
-												  
-												   that.setData({
-													rdt_arr: that.splitN(ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],100),
-													rhxstop_arr: that.splitN(rhxstop_arr_Temp,100),
-													rgobed_time: ress.data.results.rgobed_time,
-													routbed_time: ress.data.results.routbed_time,
-													rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
-												  });
-												  chart10 = echarts.init(canvas, null, {
-													  width: width,
-													  height: height
-													});
-													console.log("plot in ......")
-													canvas.setChart(chart10);
-													// var list = that.getRsleep_arr(ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(","):[])
-													flushChart10(that.data.rdt_arr,that.data.rhxstop_arr,that.data.rgobed_time,that.data.routbed_time,that)
-												  } catch (error) {
-												  console.error(error);
-												}
-												console.log("c8_that.data.rhxstop_arr="+that.data.rhxstop_arr);
-												console.log("");
-										  }
-									  },
-									});
-									}		
-							} catch (error) {
-							  console.error(error);
 							}
-						
-						  },
-						})
-					  },
-			  getRsleep_arr(list){
-				  if(list){
-					   console.log("getRsleep_arr_list1=="+JSON.stringify(list));
-					for (let i = 0; i < list.length; i++) {
-					if (list[i] == '0') {
-					  list[i] = '清醒'; 
-					}else if (list[i] == '10') {  
-					  list[i] = '浅睡'; 
-					}else if (list[i] == '20') {  
-					  list[i] = '中睡'; 
-					}else if (list[i] == '30') {  
-					  list[i] = '深睡'; 
-					}else{
-					  list[i] = '其他';
+						});
 					}
-				  }  
-				  }
-				  console.log("getRsleep_arr_list2=="+JSON.stringify(list));
-			  },
-			  getFrequency(list){//获取
-			  				  if(list){
-			  					   console.log("getRsleep_arr_list1=="+JSON.stringify(list));
-			  					for (let i = 0; i < list.length; i++) {
-			  					if (list[i] == '0') {
-			  					  list[i] = '清醒'; 
-			  					}else if (list[i] == '10') {  
-			  					  list[i] = '浅睡'; 
-			  					}else if (list[i] == '20') {  
-			  					  list[i] = '中睡'; 
-			  					}else if (list[i] == '30') {  
-			  					  list[i] = '深睡'; 
-			  					}else{
-			  					  list[i] = '其他';
-			  					}
-			  				  }  
-			  				  }
-			  				  console.log("getRsleep_arr_list2=="+JSON.stringify(list));
-			  },
-			  initChart12(canvas, width, height){//体动次数
-			  	var that = this;	
-			  	wx.request({
-			  	  url: `${aipushApi}`+'/getsn', 
-			  	  data: {"hotelcode":that.data.hotelcode?that.data.hotelcode:"club",
-			  				 "roomcode":that.data.roomcode?that.data.roomcode:"nuange",
-			  				 "token":token_push},
-			  	  method: 'POST',
-			  	  success(res) {
-			  		try {
-			  				if(res && res.data && res.data[0]){
-			  				that.setData({
-                                roomname: res.data[0].rn
-                              });
-			  					wx.request({
-			  				  url: `${aipushApi}`+'/getsingle',
-			  				  data: {"sn":res.data[0].sn,
-			  							 "token":token_push},
-			  				  method: 'POST',
-			  				  success(ress) {
-			  					  if(ress && ress.data){
-			  							// console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-			  							try {
-			  								var rsnoring_arr_Temp = [];
-			  								if(ress.data.results.rsnoring_arr){
-			  									rsnoring_arr_Temp = ress.data.results.rsnoring_arr.split(",");
-			  								}
-			  							  
-			  							   that.setData({
-			  								rdt_arr: that.splitN(ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],100),
-			  								rsnoring_arr: that.splitN(rsnoring_arr_Temp,100),
-			  								rgobed_time: ress.data.results.rgobed_time,
-			  								routbed_time: ress.data.results.routbed_time,
-											rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
-			  							  });
-			  							  chart9 = echarts.init(canvas, null, {
-			  								  width: width,
-			  								  height: height
-			  								});
-			  								console.log("plot in ......")
-			  								canvas.setChart(chart9);
-			  								// var list = that.getRsleep_arr(ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(","):[])
-			  								flushChart9(that.data.rdt_arr,that.data.rsnoring_arr,that.data.rgobed_time,that.data.routbed_time,that)
-			  							  } catch (error) {
-			  							  console.error(error);
-			  							}
-			  							console.log("c8_that.data.rmove_arr="+that.data.rmove_arr);
-			  							console.log("");
-			  					  }
-			  				  },
-			  				});
-			  				}		
-			  		} catch (error) {
-			  		  console.error(error);
-			  		}
-			  	
-			  	  },
-			  	})
-			    },
-			sleepStateChange(data){
-				console.log("change-data=="+data)
-				switch(data) {
-				        case 0:
-				            return '清醒';
-				        case 10:
-				            return '浅睡';
-				        case 20:
-				            return '中睡';
-				        case 30:
-				            return '深睡';
-				        default:
-				            return '';
-				        }
-			  },
-			  sleepRoutbed_arrChange(data){
-			  	console.log("change-data=="+data)
-			  	switch(data) {
-			  	        case 0:
-			  	            return '离床';
-			  	        case 1:
-			  	            return '在床';
-			  	        default:
-			  	            return '';
-			  	        }
-			    },
-				sleepRmove_arrChange(data){
-					console.log("change-data=="+data)
-					switch(data) {
-					        case 0:
-					            return '否';
-					        case 1:
-					            return '体动';
-					        default:
-					            return '';
-					        }
-				  },
-				  sleepRsnoring_arrChange(data){
-				  	console.log("change-data=="+data)
-				  	switch(data) {
-				  	        case 0:
-				  	            return '否';
-				  	        case 1:
-				  	            return '打鼾';
-				  	        default:
-				  	            return '';
-				  	        }
-				    },
-					sleepRhxstop_arrChange(data){
-						console.log("change-data=="+data)
-						switch(data) {
-						        case 0:
-						            return '否';
-						        case 1:
-						            return '停止';
-						        default:
-						            return '';
-						        }
-					  },
-			splitN(originalArray,n){
-				if(!originalArray) return [];
-				// 计算每份的大小  
-				let chunkSize = Math.ceil(originalArray.length / n);  
-				  
-				// 分割数组并获取每份的最后一个元素  
-				let lastElements = [];  
-				for (let i = 0; i < originalArray.length; i += chunkSize) {  
-				  let chunk = originalArray.slice(i, i + chunkSize);  
-				  lastElements.push(chunk[chunk.length - 1]);  
+					// that.startInterval();
+				} catch (error) {
+					console.error(error);
+				}
+			},
+		});
+
+
+		wx.request({
+			url: `${aipushApi}/getha`, //
+			method: 'POST',
+			//   header: {
+			// 	  'content-type': 'application/json', // 默认值
+			// 	  'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
+			// },
+			data: {
+				"locations": hotelcode, "room": (hotelcode && hotelcode.includes('hotel')) ? roomcode : "", "token": token_push
+			},
+			success(res) {
+				if (!res || !res.data) {
+					that.setData({
+						isLoading: false,
+					});
+					return;
 				}
-				// 输出每份的最后一个元素  
-				console.log('lastElements='+lastElements);
-				return lastElements;
-			},
-			takePortionDateData(rdt_arrArray,originalArray,n){
-				if(!rdt_arrArray || !originalArray) return [];
-				var portionDateData = [];
-				var portionData = [];
-				for (let i = 0; i < originalArray.length; i ++) {  
-				  if(originalArray[i] == n){
-					  portionDateData.push(rdt_arrArray[i]);
-					  portionData.push(originalArray[i]);
-				  } else{
-					  
-				  }
+
+				var resData = res.data
+				console.log('res.data.睡眠报告.ha=' + JSON.stringify(resData));
+				if (res.data.code == "400") {
+					console.error("400错误!");
+					return;
 				}
-				console.log('portionDateData='+JSON.stringify(portionDateData));
-				return portionDateData;
-			},
-			takePortionData(originalArray,n){
-				if(!originalArray) return [];
-				var portionData = [];
-				for (let i = 0; i < originalArray.length; i ++) {  
-				  if(originalArray[i] == n){
-					  portionData.push(originalArray[i])
-				  } else{
-					  
-				  }
+				if (res.data.code == "401") {
+					console.error("401错误!");
+					return;
 				}
-				console.log('portionData='+JSON.stringify(portionData));
-				return portionData;
-			},
-			getFrequency(list,o){//获取次数
-				if(!list) return 0;
-				let frequency = 0;
-				for (let i = 0; i < list.length; i++) {  
-				  if(list[i] == o) frequency++;
+
+				homeApi_https = resData.loc;
+				token = resData.token;
+			},
+			fail: function (error) {
+				console.error('error', error);
+				that.setData({
+					isLoading: false,
+				});
+			}
+		});
+
+	},
+	convertTimeToHoursAndMinutes: function (timeWithText, flag = 0) {
+		if (!timeWithText) return;
+		// 移除'分钟'两个字  
+		var minutesStr = timeWithText.replace('分钟', '');
+		var minutes = parseInt(minutesStr); // 将字符串转换为整数  
+
+		if (isNaN(minutes)) {
+			// 如果转换失败,则可能是输入的不是有效的数字  
+			console.error('Invalid minutes format');
+			return;
+		}
+
+		var hours = Math.floor(minutes / 60); // 整除60得到小时数  
+		var remainingMinutes = minutes % 60; // 取余得到剩余的分钟数  
+
+		// 如果小时数或分钟数小于10,前面补0  
+		// var formattedHours = hours < 10 ? '0' + hours : hours;  
+		var formattedHours = hours;
+		// var formattedMinutes = remainingMinutes < 10 ? '0' + remainingMinutes : remainingMinutes;
+		var formattedMinutes = remainingMinutes;
+
+		// 拼接小时和分钟,形成HH:mm格式 
+		var formattedTime = '';
+		if (flag == 1) {
+			formattedTime = formattedHours + 'H ' + formattedMinutes + 'M';
+		} else if(flag == 2) {
+			formattedTime = formattedHours + '{units|小时}' + formattedMinutes + '{units|分钟}';
+		} else {
+			formattedTime = {
+				formattedHours,
+				formattedMinutes
+			};
+		}
+
+		// 更新数据  
+		// this.setData({  
+		//   formattedTime: formattedTime  
+		// });  
+		return formattedTime;
+	},
+	getDateTimeJsonData: function (sn) {
+		var that = this;
+		var sourceFourthTemp = [];
+		wx.request({
+			url: `${aipushApi}/getdatefromsn`, //
+			method: 'POST',
+			//   header: {
+			// 	  'content-type': 'application/json', // 默认值
+			// 	  'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
+			// },
+			data: {
+				"sn": sn, "token": token_push
+			},
+			success(res) {
+				if (!res || !res.data || !res.data.results) {
+					return;
 				}
-				console.log('frequency='+frequency);
-				return frequency;
-			},
-			getTimeDiffInHours: function(startTimeStr, endTimeStr) {  
-				// 假设两个时间都是同一天的,这里我们使用当前日期作为基准  
-				if(!startTimeStr || !endTimeStr) return null;
-				const now = new Date();  
-				const startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate(), ...startTimeStr.split(':').map(Number));  
-				const endDate = new Date(now.getFullYear(), now.getMonth(), now.getDate(), ...endTimeStr.split(':').map(Number));  
-			  
-				// 处理跨天的情况  
-				if (endDate < startDate) {  
-					endDate.setDate(endDate.getDate() + 1); // 将结束时间设置为第二天的同一时间  
-				}  
-			  
-				// 计算时间差(毫秒)  
-				const diffInMs = endDate - startDate;  
-			  
-				// 转换为小时  
-				const diffInHours = diffInMs / (1000 * 60 * 60);  
-			  
-				return diffInHours;  
-			},
-			drawProgressCircle: function() {
-			    const ctx = wx.createCanvasContext('progressCircleCanvas');  
-				// 假设屏幕的宽度为 windowWidth px  
-				const windowWidth = wx.getSystemInfoSync().windowWidth;  
-				  
-				// 假设你有一个以 rpx 为单位的值  
-				const valueInRpx = 300;  
-				  
-				// 计算对应的 px 值  
-				const valueInPx = (valueInRpx / 750) * windowWidth;
-				
-			    const radius = 60; // 圆的半径  
-			    const centerX = valueInPx; // 圆心的x坐标  
-			    const centerY = valueInPx/2; // 圆心的y坐标  
-			    const strokeWidth = 10; // 进度条的宽度  
-			    const percentage = this.data.percentage; // 进度百分比  
-			      
-			    // 绘制外圆  
-			    ctx.beginPath();  
-			    ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI);  
-			    ctx.setStrokeStyle('#46ff81'); // 外圆颜色  
-			    ctx.setLineWidth(strokeWidth * 2); // 外圆线宽  
-			    ctx.stroke();  
-			      
-			    // 绘制内圆(进度条背景)  
-			    ctx.beginPath();  
-			    ctx.arc(centerX, centerY, radius - strokeWidth, 0, 2 * Math.PI);  
-			    ctx.setStrokeStyle('#e0e0e0'); // 内圆颜色  
-			    ctx.setLineWidth(strokeWidth); // 内圆线宽  
-			    ctx.stroke();  
-			      
-			    // 绘制进度条  
-			    ctx.beginPath();  
-			    ctx.arc(centerX, centerY, radius - strokeWidth, -0.5 * Math.PI, -0.5 * Math.PI + 2 * Math.PI * (percentage / 100));  
-			    ctx.setStrokeStyle('#007aff'); // 进度条颜色  
-			    ctx.setLineWidth(strokeWidth);  
-			    ctx.setLineCap('round'); // 设置线条端点的样式为圆形  
-			    ctx.stroke();  
-			      
-			    // 绘制中心圆点  
-			    ctx.beginPath();  
-			    ctx.arc(centerX, centerY, 5, 0, 2 * Math.PI);  
-			    ctx.setFillStyle('#ffffff');  
-			    ctx.fill();  
-			      
-			    // 绘制完成,将内容渲染到canvas中  
-			    ctx.draw();  
-			  },  
-			    // 假设你有一个方法来更新进度条的值  
-			    updateProgress: function(newPercentage) {
-			      this.setData({  
-			        percentage: newPercentage  
-			      });  
-			      this.drawProgressCircle(); // 重新绘制进度条  
-			    },
-				
-				buttonClicked: function() {
-					var that = this;
-				    // 切换按钮的点击状态  
-				    this.setData({  
-				      isButtonClicked: !that.data.isButtonClicked,  
-				    });  
-				      
-				    // 在这里可以添加其他点击后的逻辑,比如调用接口等  
-				  },
-				  
-				  telScreeProjection: function(tvEntityId) {
-					  var that = this;
-					  that.setData({
-						isLoading: true,  
-					  });
-				      wx.request({
-						url: `${aipushApi}`+'/getbigreport', 
+
+				var resDataSn = res.data.results
+				console.log('resDataSn====' + JSON.stringify(resDataSn))
+				var tt = 0;
+				resDataSn.forEach(function (item, index) {
+					wx.request({
+						url: `${aipushApi}/getimefromsn`, //
 						method: 'POST',
-						 header: {
-								  'content-type': 'application/json', // 默认值
-								  'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
-						  },
-						data:{
-						    "sn":that.data.rsn,"tokens":token_push
+						//   header: {
+						// 	  'content-type': 'application/json', // 默认值
+						// 	  'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
+						// },
+						data: {
+							"sn": sn, "date": item.rdate, "token": token_push
 						},
 						success(ress) {
-							console.log('wx.getStorageSync(tvEntityId)='+wx.getStorageSync('tvEntityId'));
-							console.log('tvEntityId='+JSON.stringify(tvEntityId));
-							let tvEntityIdss = tvEntityId?tvEntityId:wx.getStorageSync('tvEntityId')
-							if(ress && ress.data && tvEntityIdss){
-								console.log("ress.data=="+JSON.stringify(ress.data.url));
-								console.log("tvEntityIdss=="+tvEntityIdss);
-								wx.request({
-									// url: `${homeApi_http}`+':'+`${homeApi_http_port}`+'/api/services/media_player/play_media', //http 
-									// url: `${homeApi_https}`+'/api/services/media_player/play_media',  //https
-									url: `${homeApi_https}`+'/api/services/media_player/select_source',  //https
-									method: 'POST',
-									 header: {
-											  'content-type': 'application/json', // 默认值
-											  'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
-									  },
-									data:{
-									    "entity_id": tvEntityIdss,
-									//     "media_content_id": ress.data.url,
-										// "media_content_id": 'https://alifei01.cfp.cn/creative/vcg/800/new/VCG41175510742.jpg',
-										// "media_content_id": 'https://alifei01.cfp.cn/creative/vcg/veer/1600water/veer-368621010.jpg',
-									//     "media_content_type": "image/jpeg/png",
-										"source": "X浏览器"
-									},
-									success(res) {
-									that.setData({
-										isLoading: false,  
-									});
-									if(res && res.data){
-										var resData = res.data
-										console.log('res-推送='+JSON.stringify(res));
-										console.log('res.data-推送='+JSON.stringify(resData));
-										wx.showToast({
-									    title: "推送成功",
-									    icon: "success",
-									    mask: true,
-									  });
-									}else{
-										wx.showToast({
-										  title: '推送失败',  
-										  icon: 'none'  
-										}); 
+							if (!ress || !ress.data || !ress.data.results) {
+								return;
+							}
+							var resDataItem = ress.data.results;
+							resDataItem.forEach(function (item_item, index) {
+								item_item.text = item_item.durations;
+								item_item.reportId = item_item.rpids;
+							});
+							var json = {};
+							json.text = item.rdate;
+							json.children = resDataItem;
+							sourceFourthTemp.push(json);
+							console.log('sourceFourthTemp0=' + JSON.stringify(sourceFourthTemp));
+							if (tt == (resDataSn.length - 1)) {
+								console.log('sourceFourthTemp=' + JSON.stringify(sourceFourthTemp));
+
+								// 使用 sort 方法进行排序
+								sourceFourthTemp.sort(function (a, b) {
+									// 将字符串转换为 Date 对象  
+									let dateA = new Date(a.text);
+									let dateB = new Date(b.text);
+									if (dateA < dateB) {
+										return 1;
 									}
-									},
-									fail: function (error) {  
-									    // 请求失败后的回调函数  
-									    console.error('推送失败', error);  
-									    // 在这里处理请求失败的情况,比如显示错误信息给用户  
-										that.setData({
-											isLoading: false,  
-										});
-									    wx.showToast({  
-									      title: '推送失败',  
-									      icon: 'none'  
-									    });  
-									  }
+									if (dateA > dateB) {
+										return -1;
+									}
+									// 如果日期相等,返回 0  
+									return 0;
 								});
-							}else{
+								console.log('sourceFourthTemp1=' + JSON.stringify(sourceFourthTemp));
+								//初始化弹出面板
+								var array = that.data.arrayFourth;
+								array[0] = sourceFourthTemp;
+								array[1] = array[0][0].children;
+
 								that.setData({
-									isLoading: false,  
-								});
-								wx.showToast({
-								  title: '找不到电视,推送失败',  
-								  icon: 'none'  
-								}); 
+									valueFourth: [0, 0],
+									sourceFourth: sourceFourthTemp,
+									arrayFourth: array,
+								})
+								tt = 0;
 							}
+							tt++
 						},
-						});
-				    },
-					getData(sn,hotelcode,roomcode,reportId){
-							var that = this;
-							wx.request({
-							  url: `${aipushApi}`+'/getsn', 
-							  data: {"hotelcode":hotelcode?hotelcode:"club",
-										 "roomcode":roomcode?roomcode:"nuange",
-										 "token":token_push},
-							  method: 'POST',
-							  success(res) {
-								
-								try {
-								  // that.setData({
-								  //   airText: now.category, //空气质量
-								  //   airValue: now.aqi //空气指数
-								  // })
-									if(res && res.data && res.data[0]){
-									that.setData({
-                                        roomname: res.data[0].rn
-                                      });
-										console.log("res.data-sn="+JSON.stringify(res.data));
-										wx.request({
-										  url: `${aipushApi}`+'/getsingle',
-										  data: {"sn":sn?sn:res.data[0].sn,
-													 "token":token_push,
-													 "rpids":reportId},
-										  method: 'POST',
-										  success(ress) {
-											try {
-												if(ress && ress.data){
-													console.log('ress.data-getsingle='+JSON.stringify(ress.data.results));
-												  // that.setData({
-												  //   airText: now.category, //空气质量
-												  //   airValue: now.aqi //空气指数
-												  // })
-												  // rdt_arr = ress.data.results.rdt_arr //睡眠时间轴数据集合
-												  // rrh_arr =  ress.data.results.rdt_arr//睡眠心率数据集合
-												  // rhx_arr =  ress.data.results.rhx_arr//睡眠呼吸数据集合
-												  // rsnoring_arr =  ress.data.results.rsnoring_arr//睡眠打鼾数据集合,0-否,1-打鼾状态
-												  // routbed_arr =  ress.data.results.routbed_arr//离床状态数据集合,0-离床,1-在床
-												  // rmove_arr =  ress.data.results.rmove_arr//体动状态数据集合,0-否,1-体动状态
-												  // rhxstop_arr =  ress.data.results.rhxstop_arr//呼吸停止状态数据集合
-												  // rsleep_arr =  ress.data.results.rsleep_arr//睡眠状态数据集合,0-清醒,10-浅睡,20-中睡,30-深睡
-												  
-												  // rdeep_duration =  ress.data.results.rdeep_duration//深睡时长,单位分钟
-												  // rlight_duration =  ress.data.results.rlight_duration//浅睡时长,单位分钟
-												  // rin_duration =  ress.data.results.rin_duration//中睡时长,单位分钟
-												  // rawake_duration =  ress.data.results.rawake_duration//清醒时长,单位分钟
-												  // ravg_hx_value =  ress.data.results.ravg_hx_value//呼吸平均值
-												  // ravg_hx_desc =  ress.data.results.ravg_hx_desc//呼吸平均值评分描述
-												  // ravg_rh_value =  ress.data.results.ravg_rh_value//心率平均值
-												  // ravg_rh_desc =  ress.data.results.ravg_rh_desc//心率平均值评分描述
-												  // rscore_value =  ress.data.results.rscore_value//睡眠报告得分值
-												  // rscore_desc =  ress.data.results.rscore_desc//睡眠报告得分评比描述
-												  
-												  
-												 //  that.setData({
-												 //    rdt_arr: ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],
-													// rrh_arr: ress.data.results.rrh_arr?ress.data.results.rrh_arr.split(','):[],
-													// rhx_arr: ress.data.results.rhx_arr?ress.data.results.rhx_arr.split(','):[],
-													// rsnoring_arr: ress.data.results.rsnoring_arr?ress.data.results.rsnoring_arr.split(','):[],
-													// routbed_arr: ress.data.results.routbed_arr?ress.data.results.routbed_arr.split(','):[],
-													// rmove_arr: ress.data.results.rmove_arr?ress.data.results.rmove_arr.split(','):[],
-													// rhxstop_arr: ress.data.results.rhxstop_arr?ress.data.results.rhxstop_arr.split(','):[],
-													// rsleep_arr: ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(','):[],
-													
-													// rdeep_duration: ress.data.results.rdeep_duration,
-													// rlight_duration: ress.data.results.rlight_duration,
-													// rin_duration: ress.data.results.rin_duration,
-													// rawake_duration: ress.data.results.rawake_duration,
-													// ravg_hx_value: ress.data.results.ravg_hx_value,
-													// ravg_hx_desc: ress.data.results.ravg_hx_desc,
-													// ravg_rh_value: ress.data.results.ravg_rh_value,
-													// ravg_rh_desc: ress.data.results.ravg_rh_desc,
-													// rscore_value: ress.data.results.rscore_value,
-													// rscore_desc: ress.data.results.rscore_desc,
-													
-													// rsn: ress.data.results.rsn,
-													// rdate: ress.data.results.rdate,
-													// rtotal_duration: ress.data.results.rtotal_duration,//睡眠总时长,单位分钟
-													// rinbed_duration: ress.data.results.rinbed_duration,//在床时长,单位分钟
-													// rgobed_time: ress.data.results.rgobed_time,//上床时间
-													// routbed_time: ress.data.results.routbed_time,//离床时间
-													// routbed_count_value: ress.data.results.routbed_count_value,//离床次数
-													// rsn: ress.data.results.rsn,
-													
-												 //  });
-												  
-													let durationDataTemp = [];
-													let obj = {};
-													obj.name = '深睡';
-													obj.value = ress.data.results.rdeep_duration;
-													durationDataTemp.push(obj);
-													obj = {};
-													obj.name = '浅睡';
-													obj.value = ress.data.results.rlight_duration;
-													durationDataTemp.push(obj);
-													obj = {};
-													obj.name = '中睡';
-													obj.value = ress.data.results.rin_duration;
-													durationDataTemp.push(obj);
-													obj = {};
-													obj.name = '清醒';
-													obj.value = ress.data.results.rawake_duration;
-													durationDataTemp.push(obj);
-												  console.log("durationDataTemp="+JSON.stringify(durationDataTemp));
-												  
-												  let sleep_durationCount = 0;
-												  if(ress.data.results.rdeep_duration){
-													  sleep_durationCount += parseFloat(ress.data.results.rdeep_duration)
-												  }
-												  if(ress.data.results.rlight_duration){
-													  sleep_durationCount += parseFloat(ress.data.results.rlight_duration)
-												  }
-												  if(ress.data.results.rin_duration){
-													  sleep_durationCount += parseFloat(ress.data.results.rin_duration)
-												  }
-												  
-												  let sleep_efficiency_temp = ress.data.results.rtotal_duration?(Math.ceil((sleep_durationCount / ress.data.results.rtotal_duration)*100)+'%'):'%'
-												  
-												  let rdeep_duration_efficiency_temp = ress.data.results.rtotal_duration?(Math.ceil(((ress.data.results.rdeep_duration?parseFloat(ress.data.results.rdeep_duration):0) / ress.data.results.rtotal_duration)*100)+'%'):'%'
-												  let rlight_duration_efficiency_temp = ress.data.results.rtotal_duration?(Math.ceil(((ress.data.results.rlight_duration?parseFloat(ress.data.results.rlight_duration):0) / ress.data.results.rtotal_duration)*100)+'%'):'%'
-												  let rin_duration_efficiency_temp = ress.data.results.rtotal_duration?(Math.ceil(((ress.data.results.rin_duration?parseFloat(ress.data.results.rin_duration):0) / ress.data.results.rtotal_duration)*100)+'%'):'%'
-												  
-												  
-												  let sleep_durationTemp = [];
-												  let obj1 = {};
-												  obj1.name = '睡眠时间';
-												  obj1.value = Math.ceil(sleep_durationCount / 60);
-												  sleep_durationTemp.push(obj1);
-												  obj1 = {};
-												  obj1.name = '清醒时间';
-												  obj1.value = Math.ceil(parseFloat(ress.data.results.rawake_duration) / 60);
-												  sleep_durationTemp.push(obj1);
-												  
-												  let zdPointTemp = [];
-													let rdt_arrTemp = [];
-													  
-													let rrh_arrTemp = [];
-								
-													let rhx_arrTemp = [];
-								
-													
-													let rmove_arrTemp = [];
-													
-													let rsleep_arrTemp = [];	
-													
-													let rsleep_arr_all_Temp = [];
-													
-													if(ress.data.results.rrh_arr){
-														rdt_arrTemp = that.splitN(ress.data.results.rdt_arr.split(","),100);
-													}
-													
-													if(ress.data.results.rrh_arr){
-														rrh_arrTemp = that.splitN(ress.data.results.rrh_arr.split(","),100);
-													}
-													if(ress.data.results.rhx_arr){
-														rhx_arrTemp = that.splitN(ress.data.results.rhx_arr.split(","),100);
-													}
-													if(ress.data.results.rmove_arr){
-														rmove_arrTemp = that.splitN(ress.data.results.rmove_arr.split(","),100);
-													}
-													if(ress.data.results.rsleep_arr){
-														rsleep_arrTemp = that.splitN(ress.data.results.rsleep_arr.split(","),100);
-													}
-													
-													if(ress.data.results.rsleep_arr){
-														rsleep_arr_all_Temp = ress.data.results.rsleep_arr.split(",");
-													}
-													
-													console.log("rdt_arrTemp="+JSON.stringify(rdt_arrTemp));
-													console.log("rrh_arrTemp="+JSON.stringify(rrh_arrTemp));
-													console.log("rhx_arrTemp="+JSON.stringify(rhx_arrTemp));
-													console.log("rmove_arrTemp="+JSON.stringify(rmove_arrTemp));
-													console.log("rsleep_arrTemp="+JSON.stringify(rsleep_arrTemp));
-													console.log("rsleep_arr_all_Temp="+JSON.stringify(rsleep_arr_all_Temp));
-													console.log("sleep_durationTemp="+JSON.stringify(sleep_durationTemp));
-													
-													
-													
-													that.setData({
-														
-														rdt_arr: ress.data.results.rdt_arr?ress.data.results.rdt_arr.split(','):[],
-														rrh_arr: ress.data.results.rrh_arr?ress.data.results.rrh_arr.split(','):[],
-														rhx_arr: ress.data.results.rhx_arr?ress.data.results.rhx_arr.split(','):[],
-														rsnoring_arr: ress.data.results.rsnoring_arr?ress.data.results.rsnoring_arr.split(','):[],
-														routbed_arr: ress.data.results.routbed_arr?ress.data.results.routbed_arr.split(','):[],
-														rmove_arr: ress.data.results.rmove_arr?ress.data.results.rmove_arr.split(','):[],
-														rhxstop_arr: ress.data.results.rhxstop_arr?ress.data.results.rhxstop_arr.split(','):[],
-														rsleep_arr: ress.data.results.rsleep_arr?ress.data.results.rsleep_arr.split(','):[],
-														
-														rsnoring_arrFrequency: that.getFrequency(ress.data.results.rsnoring_arr?ress.data.results.rsnoring_arr.split(','):[],1),
-														routbed_arrFrequency: that.getFrequency(ress.data.results.routbed_arr?ress.data.results.routbed_arr.split(','):[],0),
-														rmove_arrFrequency: that.getFrequency(ress.data.results.rmove_arr?ress.data.results.rmove_arr.split(','):[],1),
-														rhxstop_arrFrequency: that.getFrequency(ress.data.results.rhxstop_arr?ress.data.results.rhxstop_arr.split(','):[],1),
-														
-														rdeep_duration: that.convertTimeToHoursAndMinutes(ress.data.results.rdeep_duration),
-														rlight_duration: ress.data.results.rlight_duration,
-														rin_duration: ress.data.results.rin_duration,
-														rawake_duration: ress.data.results.rawake_duration,
-														ravg_hx_value: ress.data.results.ravg_hx_value,
-														ravg_hx_desc: ress.data.results.ravg_hx_desc,
-														ravg_rh_value: ress.data.results.ravg_rh_value,
-														ravg_rh_desc: ress.data.results.ravg_rh_desc,
-														rscore_value: ress.data.results.rscore_value,
-														rscore_desc: ress.data.results.rscore_desc,
-														
-														rsn: ress.data.results.rsn,
-														rdate: ress.data.results.rdate,
-														rtotal_duration: that.convertTimeToHoursAndMinutes(ress.data.results.rtotal_duration),//睡眠总时长,单位小时分钟
-														rinbed_duration: that.convertTimeToHoursAndMinutes(ress.data.results.rinbed_duration),//在床时长,单位小时分钟
-														rgobed_time: ress.data.results.rgobed_time,//上床时间
-														routbed_time: ress.data.results.routbed_time,//离床时间
-														rgobed_routbed: ress.data.results.rgobed_time + '~' + ress.data.results.routbed_time,
-														sleepHourSub: that.getTimeDiffInHours(ress.data.results.rgobed_time,ress.data.results.routbed_time),
-														routbed_count_value: ress.data.results.routbed_count_value,//离床次数
-														rsn: ress.data.results.rsn,
-														zdPointT:zdPointTemp,
-														rdt_arrNew:rdt_arrTemp,
-														rrh_arrNew:rrh_arrTemp,
-														rhx_arrNew:rhx_arrTemp,
-														rmove_arrNew:rmove_arrTemp,
-														rsleep_arrNew:rsleep_arrTemp,
-														rsleep_arr_all_New:rsleep_arr_all_Temp,
-														durationData:durationDataTemp,
-														sleep_duration:sleep_durationTemp,
-														sleep_efficiency:sleep_efficiency_temp,
-														sleep_durationCountA:that.convertTimeToHoursAndMinutes(sleep_durationCount?sleep_durationCount.toString():'0'),
-														sns:res.data,
-														tvEntityIds:wx.getStorageSync('tvEntityIds'),
-														ifOneMoreTV:(wx.getStorageSync('tvEntityIds') && wx.getStorageSync('tvEntityIds').length>1),
-														hotelname:res.data[0].hn,
-														rdeep_duration_efficiency:rdeep_duration_efficiency_temp,
-														rlight_duration_efficiency:rlight_duration_efficiency_temp,
-														rin_duration_efficiency:rin_duration_efficiency_temp,
-														pushReportId:ress.data.results.rdid,
-														
-														rrs_duration:that.convertTimeToHoursAndMinutes(ress.data.results.rrs_duration?ress.data.results.rrs_duration.toString():'0'),
-														routbed_count_value:ress.data.results.routbed_count_value,
-														rsleep_eff_value:ress.data.results.rsleep_eff_value,
-														});
-														
-														that.getDateTimeJsonData(sn?sn:res.data[0].sn);
-														// resolve(ress.data); // 请求成功,使用 resolve 返回数据
-														console.log('ress.data.results-'+ress.data.results)
-														if(!ress.data.results || ress.data.results == ''){
-															wx.showModal({
-															  title: '提示',
-															  content: '无数据',
-															  showCancel: false
-															});
-															return;
-														}
-														
-													}else{
-														wx.showModal({
-														  title: '提示',
-														  content: '无数据',
-														  showCancel: false
-														});
-													}
-											  } catch (error) {
-											  console.error(error);
-											}
-											console.log("that.data.rdt_arrNew1,that.data.rrh_arrNew1="+that.data.rdt_arrNew+","+that.data.rrh_arrNew);
-											console.log("");
-										  },
-										  fail: function (error) {
-											  wx.showToast({
-											    title: "无数据",
-											    icon: "error",
-											    mask: true,
-											  });
-											} 
-										});
-									}		
-									// that.startInterval();
-								} catch (error) {
-								  console.error(error);
-								}
-							  },
-							});
-							
-							
-							wx.request({
-							  url: `${aipushApi}/getha`, //
-							  method: 'POST',
-							 //   header: {
-								// 	  'content-type': 'application/json', // 默认值
-								// 	  'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
-								// },
-								data:{
-								     "locations":hotelcode,"room":(hotelcode && hotelcode.includes('hotel'))?roomcode:"","token":token_push
-								 },
-							  success(res) {
-								  if(!res || !res.data){
-									  that.setData({
-										isLoading: false,  
-									  });
-									  return;
-								  }
-								  
-								var resData = res.data
-								console.log('res.data.睡眠报告.ha='+JSON.stringify(resData));
-								if (res.data.code == "400") {
-								  console.error("400错误!");
-								  return;
-								}
-								if (res.data.code == "401") {
-								  console.error("401错误!");
-								  return;
-								}
-								
-								homeApi_https = resData.loc;
-								token = resData.token;
-							  },
-							  fail: function (error) {
-								  console.error('error', error);  
-								  that.setData({
-									isLoading: false,  
-								  });
-								} 
-							});
-										
-					},
-					convertTimeToHoursAndMinutes: function(timeWithText,flag) {
-						if(!timeWithText) return;
-					    // 移除'分钟'两个字  
-					    var minutesStr = timeWithText.replace('分钟', '');  
-					    var minutes = parseInt(minutesStr); // 将字符串转换为整数  
-					      
-					    if (isNaN(minutes)) {  
-					      // 如果转换失败,则可能是输入的不是有效的数字  
-					      console.error('Invalid minutes format');  
-					      return;  
-					    }  
-					      
-					    var hours = Math.floor(minutes / 60); // 整除60得到小时数  
-					    var remainingMinutes = minutes % 60; // 取余得到剩余的分钟数  
-					      
-					    // 如果小时数或分钟数小于10,前面补0  
-					    // var formattedHours = hours < 10 ? '0' + hours : hours;  
-						var formattedHours = hours;
-					    // var formattedMinutes = remainingMinutes < 10 ? '0' + remainingMinutes : remainingMinutes;
-						var formattedMinutes = remainingMinutes;
-					      
-					    // 拼接小时和分钟,形成HH:mm格式 
-						 var formattedTime = '';
-						if(flag){
-							formattedTime = formattedHours + 'H ' + formattedMinutes + 'M';
-						}else{
-							formattedTime = formattedHours + '小时' + formattedMinutes;
+						fail: function (error) {
+
+							console.error('error', error);
 						}
-					      
-					    // 更新数据  
-					    // this.setData({  
-					    //   formattedTime: formattedTime  
-					    // });  
-						return formattedTime;
-					  }, 
-	getDateTimeJsonData: function(sn) {
-		var that = this;
-		var sourceFourthTemp = [];  
-		wx.request({
-		  url: `${aipushApi}/getdatefromsn`, //
-		  method: 'POST',
-		 //   header: {
-			// 	  'content-type': 'application/json', // 默认值
-			// 	  'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
-			// },
-			data:{
-			     "sn":sn,"token":token_push
-			 },
-		  success(res) {
-			  if(!res || !res.data || !res.data.results){
-				  return;
-			  }
-			
-			var resDataSn = res.data.results
-			console.log('resDataSn===='+JSON.stringify(resDataSn))
-			var tt = 0;
-			resDataSn.forEach(function(item, index) {  
-			  wx.request({
-				  url: `${aipushApi}/getimefromsn`, //
-				  method: 'POST',
-				 //   header: {
-					// 	  'content-type': 'application/json', // 默认值
-					// 	  'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
-					// },
-					data:{
-					     "sn":sn,"date":item.rdate,"token":token_push
-					 },
-				  success(ress) {
-					  if(!ress || !ress.data || !ress.data.results){
-						  return;
-					  }
-					var resDataItem = ress.data.results;
-					resDataItem.forEach(function(item_item, index) {  
-					  item_item.text = item_item.durations;
-					  item_item.reportId = item_item.rpids;
 					});
-					var json = {};
-					json.text = item.rdate;
-					json.children = resDataItem;
-					sourceFourthTemp.push(json);
-					console.log('sourceFourthTemp0='+JSON.stringify(sourceFourthTemp));
-					if (tt == (resDataSn.length - 1)) {
-						console.log('sourceFourthTemp='+JSON.stringify(sourceFourthTemp));
-						
-						// 使用 sort 方法进行排序
-						sourceFourthTemp.sort(function(a, b) {  
-						  // 将字符串转换为 Date 对象  
-						  let dateA = new Date(a.text);  
-						  let dateB = new Date(b.text);  
-						  if (dateA < dateB) {  
-						    return 1;  
-						  }  
-						  if (dateA > dateB) {  
-						    return -1;  
-						  }  
-						  // 如果日期相等,返回 0  
-						  return 0;  
-						});
-						console.log('sourceFourthTemp1='+JSON.stringify(sourceFourthTemp));
-						//初始化弹出面板
-						var array = that.data.arrayFourth;
-						array[0] = sourceFourthTemp;
-						array[1] = array[0][0].children;
-						 
-						that.setData({
-							valueFourth: [0, 0],
-							sourceFourth: sourceFourthTemp, 
-							arrayFourth: array,
-						})
-						tt = 0;
-					}
-					tt++
-				  },
-				  fail: function (error) {
-				
-					  console.error('error', error);  
-					} 
 				});
-			});
-			
-		  },
-		  fail: function (error) {
-			  console.error('error', error);  
-			} ,
-		  complete: function (e) {
-		  }
-		});		
+
+			},
+			fail: function (error) {
+				console.error('error', error);
+			},
+			complete: function (e) {
+			}
+		});
 	},
 	// 在全局或者组件中定义函数  
-	fontSize: function(res) {  
-	  const clientWidth = wx.getSystemInfoSync().windowWidth; // 获取屏幕宽度  
-	  if (!clientWidth) return;  
-	  let fontSize = clientWidth / 1920; // 假设以1920为基准宽度  
-	  return res * fontSize;  
+	fontSize: function (res) {
+		const clientWidth = wx.getSystemInfoSync().windowWidth; // 获取屏幕宽度  
+		if (!clientWidth) return;
+		let fontSize = clientWidth / 1920; // 假设以1920为基准宽度  
+		return res * fontSize;
 	},
-  /**			
-   * 生命周期函数--监听页面加载
-   */
-  onShow: function(options) {
-    var that = this;
-	console.log("that.data.month + 1", that.data.month + 1)
-	var clickDate = String(that.data.year) + String(that.data.month) + String(that.data.date)
-	clickDate = String(parseInt(clickDate) + 100)
-	// that.getTargetData(clickDate)
-	that.setData({
-	  clickDate: clickDate,
-	  // ec000: {
-	  //   onInit: that.initChart000
-	  // },
-	  ec00: {
-	    onInit: that.initChart00
-	  },
-	  ec0: {
-	    onInit: that.initChart0
-	  },
-	  ec: {
-	    onInit: that.initChart
-	  },
-	  ec1: {
-	    onInit: that.initChart1
-	  },
-	  ec2: {
-	    onInit: that.initChart2
-	  },
-	  ec3: {
-	    onInit: that.initChart3
-	  },
-	  ec4: {
-	    onInit: that.initChart4
-	  },
-	  ec5: {
-	    onInit: that.initChart5
-	  },
-	  ec6: {
-	    onInit: that.initChart6
-	  },
-	  ec7: {
-	    onInit: that.initChart7
-	  },
-	  ec8: {
-	    onInit: that.initChart8
-	  },
-	  ec81: {
-	    onInit: that.initChart81
-	  },
-	  ec9: {
-	    onInit: that.initChart9
-	  },
-	  ec10: {
-	    onInit: that.initChart10
-	  },
-	  ec11: {
-	    onInit: that.initChart11
-	  },
-	});
-	
-	
-
-  },
-onLoad(option){
-	var that = this;
-	console.log("data页面");
-  // wx.clearStorage();
-  console.log('option.res='+JSON.stringify(wx.getStorageSync('res')));
-  if(!wx.getStorageSync('res') || !wx.getStorageSync('res').result){
-	  wx.showModal({
-	    title: '提示',
-	    content: '请先扫描房间二维码',
-	    showCancel: false
-	  });
-
-	  setTimeout(function() {
-	      wx.reLaunch({
-	      		url: '/pages/scan/scan',
-	      })
-	    }, 2000) // 设置延时时间,单位为毫秒
-  }else if(wx.getStorageSync('res').result.split('|').length != 2){
-	  wx.showModal({
-	    title: '提示',
-	    content: '房间二维码不正确,请重新扫码',
-	    showCancel: false
-	  });
-	  
-	  setTimeout(function() {
-	      wx.reLaunch({
-	      		url: '/pages/scan/scan',
-	      })
-	    }, 2000) // 设置延时时间,单位为毫秒
-  }else{
-	  // const expiresAt = wx.getStorageSync('scanResultExpiresAt');
-	  // const now = Date.now() 
-	  // if (expiresAt || expiresAt < now) {
-	  //   // 扫码结果已过期  
-	  //   wx.showToast({
-	  //     title: '扫码结果失效或已过期,请重新扫码',  
-	  //     icon: 'none'  
-	  //   });
-	  //   // 清除过期的扫码结果  
-	  //   wx.removeStorageSync('scanResultExpiresAt');  
-	  //   setTimeout(function() {
-	  //       wx.reLaunch({
-	  //       		url: '/pages/scan/scan',
-	  //       })
-	  //     }, 2000) // 设置延时时间,单位为毫秒
-	  	
-	  // }else{
-	  // 	//续期
-	  // 	wx.setStorageSync('scanResultExpiresAt', Date.now() + 2 * 60 * 60 * 1000)
-	  // }
-	  
-	  let hotelcodeTemp = '';
-	  let roomcodeTemp = '';
-	  
-	  hotelcodeTemp = wx.getStorageSync('res').result.split('|')[0];
-	  roomcodeTemp = wx.getStorageSync('res').result.split('|')[1];
-	  this.getData(null,hotelcodeTemp,roomcodeTemp,null);
-	  // const result = await this.getData();
-	  // console.log('result='+JSON.stringify(result));
-	  	this.drawProgressCircle(); 
-	  	// 获取系统信息  
-	  	const systemInfo = wx.getSystemInfoSync();  
-	  	const windowWidth = systemInfo.windowWidth; // 窗口宽度  
-	  	  
-	  	// 计算canvas的宽度和高度  
-	  	const canvasWidth = windowWidth; // 可以根据需求调整canvas的宽度  
-	  	const canvasHeight = windowWidth * 0.5; // 假设高度是宽度的一半,可以根据需求调整  
-	  	  
-	  	  
-	  	// var now = new Date(); // 创建一个Date对象,表示当前的日期和时间  
-	  	// var year = now.getFullYear(); // 获取年份  
-	  	// var month = now.getMonth() + 1; // 获取月份(注意月份是从0开始的,所以需要+1)  
-	  	// var date = now.getDate(); // 获取日期  
-	  	// var hours = now.getHours(); // 获取小时  
-	  	// var minutes = now.getMinutes(); // 获取分钟  
-	  	// var seconds = now.getSeconds(); // 获取秒  
-	  
-	  	// month = month < 10 ? '0' + month : month;  
-	  	// date = date < 10 ? '0' + date : date;  
-	  	// hours = hours < 10 ? '0' + hours : hours;  
-	  	// minutes = minutes < 10 ? '0' + minutes : minutes;  
-	  	// seconds = seconds < 10 ? '0' + seconds : seconds;  
-	  
-	  	// // 拼接日期和时间字符串  
-	  	// var currentDateTime = year + '-' + month + '-' + date + ' ' + hours + ':' + minutes + ':' + seconds;  
-	  
-	  	// console.log(currentDateTime); 
-	  	// var currentDate = year + '-' + month + '-' + date;  
-	  	// var currentTime = hours + ':' + minutes + ':' + seconds;  
-	  	
-		// this.selectComponent('#mychart-dom-bar00').init((canvas, width, height) => {
-		// 	that.initChart00(canvas, width, height)
-		//   });
-		
-	  	// 设置canvas的宽高  
-	  	this.setData({  
-	  	  // currentDate: currentDate,
-	  	  // currentTime: currentTime,
-	  	  canvasWidth: canvasWidth,  
-	  	  canvasHeight: canvasHeight,
-	  	  hotelcode: hotelcodeTemp,
-	  	  roomcode: roomcodeTemp,
-//		  roomname: wx.getStorageSync('roomname'),
-		  
-		  // arrayFourth: array,
-	  	}); 
-  }
-  
-  // else if(!this.data.home_room.includes(wx.getStorageSync('res').result)){
-  // 	  wx.showModal({
-  // 	    title: '提示',
-  // 	    content: '房间二维码不正确,请重新扫描',
-  // 	    showCancel: false
-  // 	  });
-  
-  // 	  setTimeout(function() {
-  // 	      wx.reLaunch({
-  // 	      		url: '/pages/scan/scan',
-  // 	      })
-  // 	    }, 2000) // 设置延时时间,单位为毫秒
-		
-  // }
-  // else if(this.data.home_room.includes(wx.getStorageSync('res').result) && wx.getStorageSync('res').result.includes('辰悦颐养斋')){
-	// else if(wx.getStorageSync('res').result.includes('辰悦颐养斋')){
-
-	//   homeApi = "http://zhh.aidsleep.cn";
-	//   homeApi_http = "http://zhh.aidsleep.cn";
-	//   homeApi_http_port = "9123";
-	//   homeApi_https = "https://zhh.aidsleep.cn";
- //  }
-  
-	 this.drawCircle(); 
-		
+	onReady() {
+		var that = this;
+		that.initChartCircle();
+		that.initOutOfBed();
+		that.initBodyMovements();
+		that.initCardiacSystem();
+		that.initChartRespiratory();
+		that.initChartSnoring();
+		that.initChartApnea();
+		that.initTimeWaterfall();
 },
-mounted() {
+	/**			
+	 * 生命周期函数--监听页面加载
+	 */
+	onShow: function (options) {
+		const app = getApp();
+		app.globalData.selectedTabIndex = 2;
+		this.getTabBar().setData({
+			selected: 2
+		})
+		var that = this;
+		console.log("that.data.month + 1", that.data.month + 1)
+		var clickDate = String(that.data.year) + String(that.data.month) + String(that.data.date)
+		clickDate = String(parseInt(clickDate) + 100)
+		// that.getTargetData(clickDate)
 	
-},
-  /**
-   * 生命周期函数--监听页面隐藏
-   */
-  onHide: function() {
-	// wx.clearStorage();
-	// this.clearInterval();
-  },
-  /**
-   * 生命周期函数--监听页面卸载
-   */
-  onUnload: function() {
-	// wx.clearStorage();
-	// this.clearInterval();
-  },
-
-  /**
-   * 页面相关事件处理函数--监听用户下拉动作
-   */
-  onPullDownRefresh: function() {
-
-  },
-
-  /**
-   * 页面上拉触底事件的处理函数
-   */
-  onReachBottom: function() {
-
-  },
-
-  /**
-   * 用户点击右上角分享
-   */
-  onShareAppMessage: function() {
-
-  }
+		that.setData({
+			clickDate: clickDate,
+		});
+
+
+
+	},
+	onLoad(option) {
+		var that = this;
+		console.log("data页面");
+		// wx.clearStorage();
+		console.log('option.res=' + JSON.stringify(wx.getStorageSync('res')));
+		if (!wx.getStorageSync('res') || !wx.getStorageSync('res').result) {
+			wx.showModal({
+				title: '提示',
+				content: '请先扫描房间二维码',
+				showCancel: false
+			});
+
+			setTimeout(function () {
+				wx.reLaunch({
+					url: '/pages/scan/scan',
+				})
+			}, 2000) // 设置延时时间,单位为毫秒
+		} else if (wx.getStorageSync('res').result.split('|').length != 2) {
+			wx.showModal({
+				title: '提示',
+				content: '房间二维码不正确,请重新扫码',
+				showCancel: false
+			});
+
+			setTimeout(function () {
+				wx.reLaunch({
+					url: '/pages/scan/scan',
+				})
+			}, 2000) // 设置延时时间,单位为毫秒
+		} else {
+			// const expiresAt = wx.getStorageSync('scanResultExpiresAt');
+			// const now = Date.now() 
+			// if (expiresAt || expiresAt < now) {
+			//   // 扫码结果已过期  
+			//   wx.showToast({
+			//     title: '扫码结果失效或已过期,请重新扫码',  
+			//     icon: 'none'  
+			//   });
+			//   // 清除过期的扫码结果  
+			//   wx.removeStorageSync('scanResultExpiresAt');  
+			//   setTimeout(function() {
+			//       wx.reLaunch({
+			//       		url: '/pages/scan/scan',
+			//       })
+			//     }, 2000) // 设置延时时间,单位为毫秒
+
+			// }else{
+			// 	//续期
+			// 	wx.setStorageSync('scanResultExpiresAt', Date.now() + 2 * 60 * 60 * 1000)
+			// }
+
+			let hotelcodeTemp = '';
+			let roomcodeTemp = '';
+
+			hotelcodeTemp = wx.getStorageSync('res').result.split('|')[0];
+			roomcodeTemp = wx.getStorageSync('res').result.split('|')[1];
+			this.getData(null, hotelcodeTemp, roomcodeTemp, null);
+			// const result = await this.getData();
+			// console.log('result='+JSON.stringify(result));
+			this.drawProgressCircle();
+			// 获取系统信息  
+			const systemInfo = wx.getSystemInfoSync();
+			const windowWidth = systemInfo.windowWidth; // 窗口宽度  
+
+			// 计算canvas的宽度和高度  
+			const canvasWidth = windowWidth; // 可以根据需求调整canvas的宽度  
+			const canvasHeight = windowWidth * 0.5; // 假设高度是宽度的一半,可以根据需求调整  
+
+
+			// var now = new Date(); // 创建一个Date对象,表示当前的日期和时间  
+			// var year = now.getFullYear(); // 获取年份  
+			// var month = now.getMonth() + 1; // 获取月份(注意月份是从0开始的,所以需要+1)  
+			// var date = now.getDate(); // 获取日期  
+			// var hours = now.getHours(); // 获取小时  
+			// var minutes = now.getMinutes(); // 获取分钟  
+			// var seconds = now.getSeconds(); // 获取秒  
+
+			// month = month < 10 ? '0' + month : month;  
+			// date = date < 10 ? '0' + date : date;  
+			// hours = hours < 10 ? '0' + hours : hours;  
+			// minutes = minutes < 10 ? '0' + minutes : minutes;  
+			// seconds = seconds < 10 ? '0' + seconds : seconds;  
+
+			// // 拼接日期和时间字符串  
+			// var currentDateTime = year + '-' + month + '-' + date + ' ' + hours + ':' + minutes + ':' + seconds;  
+
+			// console.log(currentDateTime); 
+			// var currentDate = year + '-' + month + '-' + date;  
+			// var currentTime = hours + ':' + minutes + ':' + seconds;  
+
+			// this.selectComponent('#mychart-dom-bar00').init((canvas, width, height) => {
+			// 	that.initChart00(canvas, width, height)
+			//   });
+
+			// 设置canvas的宽高  
+			this.setData({
+				// currentDate: currentDate,
+				// currentTime: currentTime,
+				canvasWidth: canvasWidth,
+				canvasHeight: canvasHeight,
+				hotelcode: hotelcodeTemp,
+				roomcode: roomcodeTemp,
+				//		  roomname: wx.getStorageSync('roomname'),
+
+				// arrayFourth: array,
+			});
+		}
+
+		// else if(!this.data.home_room.includes(wx.getStorageSync('res').result)){
+		// 	  wx.showModal({
+		// 	    title: '提示',
+		// 	    content: '房间二维码不正确,请重新扫描',
+		// 	    showCancel: false
+		// 	  });
+
+		// 	  setTimeout(function() {
+		// 	      wx.reLaunch({
+		// 	      		url: '/pages/scan/scan',
+		// 	      })
+		// 	    }, 2000) // 设置延时时间,单位为毫秒
+
+		// }
+		// else if(this.data.home_room.includes(wx.getStorageSync('res').result) && wx.getStorageSync('res').result.includes('辰悦颐养斋')){
+		// else if(wx.getStorageSync('res').result.includes('辰悦颐养斋')){
+
+		//   homeApi = "http://zhh.aidsleep.cn";
+		//   homeApi_http = "http://zhh.aidsleep.cn";
+		//   homeApi_http_port = "9123";
+		//   homeApi_https = "https://zhh.aidsleep.cn";
+		//  }
+
+		this.drawCircle();
+
+	},
+	mounted() {
+
+	},
+	/**
+	 * 生命周期函数--监听页面隐藏
+	 */
+	onHide: function () {
+		// wx.clearStorage();
+		// this.clearInterval();
+	},
+	/**
+	 * 生命周期函数--监听页面卸载
+	 */
+	onUnload: function () {
+		// wx.clearStorage();
+		// this.clearInterval();
+	},
+
+	/**
+	 * 页面相关事件处理函数--监听用户下拉动作
+	 */
+	onPullDownRefresh: function () {
+
+	},
+
+	/**
+	 * 页面上拉触底事件的处理函数
+	 */
+	onReachBottom: function () {
+
+	},
+
+	/**
+	 * 用户点击右上角分享
+	 */
+	onShareAppMessage: function () {
+
+	}
 })

+ 4 - 2
pages/data/data.json

@@ -1,6 +1,8 @@
 {
   "usingComponents": {
-    "calendar": "plugin://calendar/calendar",
     "ec-canvas": "../../ec-canvas/ec-canvas"
-  }
+  },
+  "navigationBarBackgroundColor":"#ffffff",
+  "navigationBarTextStyle": "black",
+  "navigationBarTitleText": "舒眠睡眠测试"
 }

+ 527 - 416
pages/data/data.wxml

@@ -5,127 +5,113 @@
 	  <text>{{reportDate}}</text>
 	  <text>用户号:12345| SN:{{rsn}}</text>
 	</view> -->
-	
+
 	<view wx:if="{{isLoading}}" class="loading-container">
-	  <text class="loading-text">数据正在推送,请稍候...</text>  
+		<text class="loading-text">数据正在推送,请稍候...</text>
 	</view>
 	<view class="picker-row">
+
 		<view class="picker-row_view">
-		  <image class="data-image_c00_0" src="/static/images/report/hotel&room.png" mode="aspectFit"></image>
-		  <text class="data-text_c00_0">{{hotelname?(hotelname+'·'):''}}{{roomname?(roomname):''}}</text>
-	    </view>
-	  <!-- <picker mode="date" bindchange="bindDateChange" class="picker" style="width: 40%;">  
+			<picker mode="selector" range-key="pos" range="{{sns}}" value="{{selectedIndex}}"
+				bindchange="onPickerChange">
+				<view class="picker-row_view">
+					<image class="data-image_c00_0" src="/static/images/report/hotel&room.png" mode="aspectFit"></image>
+					<text
+						class="data-text_c00_0">{{hotelname?(hotelname+'·'):''}}{{roomname?(roomname+'·'):''}}{{sns[selectedIndex].pos}}床</text>
+					<image class="data-image_c00_01" style="margin-right: 6rpx;"
+						src="/static/images/report/arrow_new.png" mode="aspectFit"></image>
+				</view>
+			</picker>
+		</view>
+		<!-- <picker mode="date" bindchange="bindDateChange" class="picker" style="width: 40%;">  
 	    <view class="picker-placeholder">{{reportDate}}</view>  
 	  </picker>  
 	  <picker mode="time" bindchange="bindTimeChange" class="picker" style="width: 40%; margin-left: 4%;">  
 	    <view class="picker-placeholder">{{rgobed_time}}~{{routbed_time}}</view>  
 	  </picker>  -->
-	  <view class="picker_out">
-	  <picker style="margin-left:5rpx;" range="{{arrayFourth}}" value="{{valueFourth}}" range-key="text" mode="multiSelector"
-	  bindchange="bindMultiPickerChange" 
-	  bindcolumnchange="bindMultiPickerColumnChange">
-		<view class="{{reportDate?'picker-placeholder':'picker-placeholder1'}}">{{reportDate?reportDate:'无数据'}}<image class="data-image_c00_01" src="/static/images/report/arrow_new.png" mode="aspectFit"></image></view>
-	  </picker>
-	  <picker style="margin-right:5rpx;" range="{{arrayFourth}}" value="{{valueFourth}}" range-key="text" mode="multiSelector"
-	  bindchange="bindMultiPickerChange" 
-	  bindcolumnchange="bindMultiPickerColumnChange">
-	  	<view class="{{rgobed_time?'picker-placeholder':'picker-placeholder2'}}">{{rgobed_time?rgobed_time:'无数据'}}~{{routbed_time?routbed_time:'无数据'}}<image class="data-image_c00_01" src="/static/images/report/arrow_new.png" mode="aspectFit"></image></view> 
-	  </picker>
-	  </view>
-	</view> 
-	
-	
-  <!-- <view class='canvas5'>
-	  <view class="image-container">  
-	    <image src="/static/images/report/vortex.png" class="background-image" mode="aspectFit" />  
-	     
-	      	    <view class="picker-row">  
-	      	      <picker mode="date" bindchange="bindDateChange" class="picker" style="width: 40%;">  
-	      	        <view class="picker-placeholder">{{reportDate}}</view>  
-	      	      </picker>  
-	      	      <picker mode="time" bindchange="bindTimeChange" class="picker" style="width: 40%; margin-left: 4%;">  
-	      	        <view class="picker-placeholder">{{rgobed_time}}~{{routbed_time}}</view>  
-	      	      </picker>  
-	      	    </view> 
-	      	    <view class="button-group">  
-	      	      <button class="small-button">月报</button>  
-	      	      <button class="small-button">周报</button>  
-	      	      <button class="small-button" bindtap="telScreeProjection">推送电视</button>
-				</view>  
-				
-				<view class="select-group">
-				   <picker class="small-button" mode="selector" range-key="pos" range="{{sns}}" value="{{selectedIndex}}" bindchange="onPickerChange">
-						<view class="picker-view">请选择:{{sns[selectedIndex].pos}}床</view>  
-				   </picker>
-				</view> 
-				
-	    <view class="centered-text">  
-	      <text class="text-line text-line-1">{{rscore_desc}}</text>  
-	      <text class="text-line text-line-2">{{rscore_value}}</text>  
-	      <text class="text-line text-line-3">香睡指数</text>  
-	    </view>  
-	  </view>
-  </view> -->
-  
-  
-  
-  <view class="container_00">  
-    <view class="data-row_c00">  
-      <view class="data-item_c00 left_c00">  
-        <image class="data-image_c00" src="/static/images/report/zhoubao_new.png" mode="aspectFit"></image>  
-        <text class="data-text_c00">周报  </text>
-  		<image class="data-image_c00" src="/static/images/report/yuebao_new.png" mode="aspectFit"></image>
-  		<text class="data-text_c00">月报  </text>
-  		<image class="data-image_c00" src="/static/images/report/tuisong_new.png" mode="aspectFit"></image>
-		<picker mode="selector" range-key="friendly_name1" range="{{tvEntityIds}}" value="{{tvEntityIdsIndex}}" bindchange="tvEntityIdsChange" wx:if="{{ifOneMoreTV}}">
-			<text class="data-text_c00">推送电视  </text>  
-		</picker>
-		<text class="data-text_c00" bindtap="tvEntityIdChange" wx:else>推送电视  </text>
-      </view>  
-      <view class="data-item_c00 right_c00">   
-        <picker mode="selector" range-key="pos" range="{{sns}}" value="{{selectedIndex}}" bindchange="onPickerChange">
-  			<view class="data-text_c002">请选择:{{sns[selectedIndex].pos}}床</view>  
-        </picker>  
-      </view>  
-    </view>  
-    <view class="separator_c00"></view>   
-  	 
-  	 <view class="circle-container-yh">
-  	 		  <view class="text-container-yh left-text-yh">  
-  	 			<view class="text-row-yh">
-  	 			  <view class="blue-dot"></view>  
-  	 			  <text class="text-content-yh">睡眠总时长</text>  
-  	 			</view>  
-  	 			<view class="text-row-yh">    
-  	 			  <text class="text-content-yh_1">{{rtotal_duration}}分钟</text>  
-  	 			</view>   
-  	 		  </view>
-	<view class="echarts-container_c00">
-		<ec-canvas id="mychart-dom-bar00" canvas-id="mychart-bar" ec="{{ ec00 }}"></ec-canvas>
+		<view class="picker_out">
+			<picker style="margin-left:0;" range="{{arrayFourth}}" value="{{valueFourth}}" range-key="text"
+				mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange">
+				<view class="{{reportDate?'picker-placeholder':'picker-placeholder1'}}">{{reportDate?reportDate:'无数据'}}
+					<image class="data-image_c00_01" src="/static/images/report/arrow_new.png" mode="aspectFit"></image>
+				</view>
+			</picker>
+			<picker style="margin-right:0;" range="{{arrayFourth}}" value="{{valueFourth}}" range-key="text"
+				mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange">
+				<view class="{{rgobed_time?'picker-placeholder':'picker-placeholder2'}}">
+					{{rgobed_time?rgobed_time:'无数据'}}~{{routbed_time?routbed_time:'无数据'}}<image
+						class="data-image_c00_01" src="/static/images/report/arrow_new.png" style="margin-right: 20rpx;"
+						mode="aspectFit"></image>
+				</view>
+			</picker>
+		</view>
 	</view>
-  	   <view class="text-container-yh right-text-yh">  
-  	     <view class="text-row-yh">
-  	       <view class="blue-dot"></view>   
-  	       <text class="text-content-yh">睡眠时间</text>  
-  	     </view>  
-  	     <view class="text-row-yh">   
-  	       <text class="text-content-yh_1">{{rgobed_time}}~{{routbed_time}}</text>  
-  	     </view>   
-  	   </view>  
-  	 </view> 
-  	 
-	 
-	 <view class="centered-text">
-	   <text class="text-line text-line-3">香睡指数</text>  
-	 </view> 
-	 
-  </view>
-  
-  
-  
-  
-  
-  <!-- <view class="container_1">  
+
+
+
+
+
+
+	<view class="container_00">
+		<view class="data-row_c00">
+			<view class="data-item_c00 left_c00">
+				<!-- <image class="data-image_c00" src="/static/images/report/zhoubao_new.png" mode="aspectFit"></image>
+				<text class="data-text_c00">周报 </text>
+				<image class="data-image_c00" src="/static/images/report/yuebao_new.png" mode="aspectFit"></image>
+				<text class="data-text_c00">月报 </text> -->
+				<image class="data-image_c00" src="/static/images/report/tuisong_new.png" mode="aspectFit"></image>
+				<picker mode="selector" range-key="friendly_name1" range="{{tvEntityIds}}" value="{{tvEntityIdsIndex}}"
+					bindchange="tvEntityIdsChange" wx:if="{{ifOneMoreTV}}">
+					<text class="data-text_c00">推送电视 </text>
+				</picker>
+				<text class="data-text_c00" bindtap="tvEntityIdChange" wx:else>推送电视 </text>
+			</view>
+		</view>
+		<view class="separator_c00"></view>
+
+		<view class="circle-container-yh">
+			<view class="text-container-yh left-text-yh">
+				<view class="text-row-yh">
+					<view class="blue-dot" style="background: #8D32F1;margin-left: 0;"></view>
+					<text class="text-content-yh">睡眠总时长</text>
+				</view>
+				<view class="text-row-yh">
+					<text class="text-content-yh_1">{{rtotal_duration.formattedHours}}<text
+							class="text-content-yh_1-units">小时</text>{{rtotal_duration.formattedMinutes}}<text
+							class="text-content-yh_1-units">分钟</text></text>
+				</view>
+			</view>
+			<view class="echarts-container_c00">
+				<ec-canvas id="mychart-dom-CircularProgressBar" canvas-id="ecCircularProgressBar"
+					ec="{{ ecCircularProgressBar }}"></ec-canvas>
+			</view>
+			<view class="text-container-yh right-text-yh">
+				<view class="text-row-yh">
+					<view class="blue-dot" style="background: #0BC38F;margin-left: 0;"></view>
+					<text class="text-content-yh">睡眠时间</text>
+				</view>
+				<view class="text-row-yh">
+					<text class="text-content-yh_1">{{rgobed_time}}~{{routbed_time}}</text>
+
+					<!-- <text class="text-content-yh_1">{{rinbed_duration.formattedHours}}<text
+							class="text-content-yh_1-units">小时</text>{{rinbed_duration.formattedMinutes}}<text
+							class="text-content-yh_1-units">分钟</text></text> -->
+				</view>
+			</view>
+		</view>
+
+
+		<view class="centered-text">
+			<text class="text-line text-line-3">香睡指数</text>
+		</view>
+
+	</view>
+
+
+
+
+
+	<!-- <view class="container_1">  
     <view class="item_c1">  
       <image class="image_c1" src="/static/images/report/c_11.png" mode="aspectFit"></image>  
       <view class="text-container_c1">  
@@ -141,110 +127,133 @@
       </view>  
     </view>  
   </view> -->
-  
-  <view class="title-container_2">  
-    <text class="big-title_c2">各项睡眠监测数据统计</text>  
-  </view>
-  
-  
- 
- <view class="container_3">  
-   <view class="row_c3">  
-     <view class="cell_c3" style="background-image: url('/static/images/report/shangchuang_shijian_new.png');width: 100%; height: 150rpx;background-size: contain;background-repeat: no-repeat;background-position: center;">  
-	 <!-- <image class="image_c4" src="/static/images/report/shangchuang_shijian_new.png" /> -->
-       <view class="purple-dot-up"></view>    
-       <view class="cell-text_c3">  
-         <view><text class="text-line_c3">上床时间</text></view> 
-         <view><text class="text-line_c31">{{rgobed_time}}</text></view>  
-       </view>  
-     </view>  
-     <view class="cell_c3" style="background-image: url('/static/images/report/zaichuang_shijian_new.png');width: 100%; height: 150rpx;background-size: contain;background-repeat: no-repeat;background-position: center;">  
-       <view class="organize-dot-up"></view>
-       <view class="cell-text_c3">  
-         <view><text class="text-line_c3">在床时间</text></view>  
-         <view><text class="text-line_c31">{{rinbed_duration}}分钟</text></view>  
-       </view>  
-     </view>  
-   </view>  
-   
-	 
-<view class="row_c3">  
-     <view class="cell_c3" style="background-image: url('/static/images/report/shenshui_shichang_new.png');width: 100%; height: 150rpx;background-size: contain;background-repeat: no-repeat;background-position: center;">  
-       <view class="purple-dot-up"></view>     
-       <view class="cell-text_c3">  
-         <view><text class="text-line_c3">深睡时长</text></view> 
-         <view><text class="text-line_c31">{{rdeep_duration}}分钟</text></view>
-       </view>  
-     </view>  
-     <view class="cell_c3" style="background-image: url('/static/images/report/shuimian_xiaolv_big_new.png');width: 100%; height: 150rpx;background-size: contain;background-repeat: no-repeat;background-position: center;">  
-       <view class="green-dot-up"></view>   
-       <view class="cell-text_c3">  
-         <view><text class="text-line_c3">睡眠效率</text></view>
-         <view><text class="text-line_c31">{{rsleep_eff_value}}</text></view>
-       </view>  
-     </view>  
-   </view>  
-   
-   <view class="row_c3">
-     <view class="cell_c3" style="background-image: url('/static/images/report/pingjun_huxilv_new.png');width: 100%; height: 150rpx;background-size: contain;background-repeat: no-repeat;background-position: center;">  
-       <view class="organize-dot-up"></view> 
-       <view class="cell-text_c3">  
-         <view><text class="text-line_c3">平均呼吸率</text></view>
-         <view><text class="text-line_c31">{{ravg_hx_value}}次/分钟</text></view>
-       </view>  
-     </view>  
-     <view class="cell_c3" style="background-image: url('/static/images/report/pingjun_xinlv_new.png');width: 100%; height: 150rpx;background-size: contain;background-repeat: no-repeat;background-position: center;">  
-       <view class="blue-dot-up"></view>  
-       <view class="cell-text_c3">  
-         <view><text class="text-line_c3">平均心率</text></view>
-         <view><text class="text-line_c31">{{ravg_rh_value}}次/分钟</text></view>
-       </view>  
-     </view>  
-   </view>  
- </view>
- 
-  <view class="container_4">  
-    <view class="left-panel_c4"> 
-	 <view class="text-container_c4_top_left">
-	   <text class="text_c4_left_top">温馨提醒</text>  
-	 </view> 
-	  <image class="image_c4" src="/static/images/report/left_background_c4_new.png" />  
-	    <view class="text-container_c4">  
-	      <text class="text_c4">本次睡眠,睡眠报告得分评比描述:<text class="text_c4_1">{{rscore_desc}}</text></text>  
-	    </view> 
-    </view>  
-    <view class="right-panel_c4">  
-      <view class="cell_c4">  
-        <view class="green-dot"></view>  
-        <view class="cell-text_c4">  
-          <text class="text-line_c4" style="float:left">体动次数</text>  
-          <text class="text-line_c41" style="float:right;margin-right:5rpx">{{rmove_arrFrequency}}次</text>  
-        </view>  
-      </view>  
-      <view class="cell_c4">  
-        <view class="organize-dot"></view>   
-        <view class="cell-text_c4">  
-          <text class="text-line_c4" style="float:left">离床次数</text>  
-          <text class="text-line_c41" style="float:right;margin-right:5rpx">{{routbed_count_value}}次</text>  
-        </view>  
-      </view>  
-      <view class="cell_c4">  
-        <view class="blue-dot"></view>    
-        <view class="cell-text_c4">  
-          <text class="text-line_c4" style="float:left">打鼾次数</text>  
-          <text class="text-line_c41" style="float:right;margin-right:5rpx">{{rsnoring_arrFrequency}}次</text>  
-        </view>  
-      </view>  
-    </view>  
-  </view>
-  
-  <view class="container_5">  
-    <view class="header_c5">  
-      <image class="header-image_c5" src="/static/images/report/shuimian_xiguan_new.png" mode="aspectFit"></image>  
-      <text class="header-title_c5">睡眠习惯</text>  
-	  <image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"></image>
-    </view>  
-    <!-- <view class="data-row_c5">  
+
+	<view class="big-title_c2-box">
+		<text class="big-title_c2">各项睡眠监测数据统计</text>
+		<view class="big-title_c2-line"></view>
+	</view>
+
+
+
+	<view class="container_3">
+		<view class="row_c3">
+			<view class="cell_c3">
+				<image class="image_c5" src="/static/images/report/shangchuang_shijian_new.png" mode="widthFix" />
+
+				<view class="purple-dot-up" style="background: #AC63FC;"></view>
+				<view class="cell-text_c3">
+					<view><text class="text-line_c3">上床时间</text></view>
+					<view style="margin-top: 15rpx;"><text class="text-line_c31">{{rgobed_time}}</text></view>
+				</view>
+			</view>
+			<view class="cell_c3">
+				<image class="image_c5" src="/static/images/report/zaichuang_shijian_new.png" mode="widthFix" />
+
+				<view class="organize-dot-up"></view>
+				<view class="cell-text_c3">
+					<view><text class="text-line_c3">在床时间</text></view>
+					<view style="margin-top: 15rpx;"><text class="text-line_c31">{{rinbed_duration.formattedHours}}<text
+								class="text-line_c31-units">小时</text>{{rinbed_duration.formattedMinutes}}<text
+								class="text-line_c31-units">分钟</text></text>
+					</view>
+				</view>
+			</view>
+		</view>
+
+
+		<view class="row_c3">
+			<view class="cell_c3">
+				<image class="image_c5" src="/static/images/report/shenshui_shichang_new.png" mode="widthFix" />
+				<view class="purple-dot-up" style="background: #8D32F1;"></view>
+				<view class="cell-text_c3">
+					<view><text class="text-line_c3">深睡时长</text></view>
+					<view style="margin-top: 15rpx;"><text
+							class="text-line_c31">{{rdeep_durationFormatA.formattedHours}}<text
+								class="text-line_c31-units">小时</text>{{rdeep_durationFormatA.formattedMinutes}}<text
+								class="text-line_c31-units">分钟</text></text>
+					</view>
+
+				</view>
+			</view>
+			<view class="cell_c3">
+				<image class="image_c5" src="/static/images/report/shuimian_xiaolv_big_new.png" mode="widthFix" />
+				<view class="green-dot-up" style="background: #60C38D;"></view>
+				<view class="cell-text_c3">
+					<view><text class="text-line_c3">睡眠效率</text></view>
+					<view style="margin-top: 15rpx;"><text class="text-line_c31">{{rsleep_eff_value}}</text></view>
+				</view>
+			</view>
+		</view>
+
+		<view class="row_c3">
+			<view class="cell_c3">
+				<image class="image_c5" src="/static/images/report/shuimian_xiaolv_big_new.png" mode="widthFix" />
+				<view class="organize-dot-up" style="background: #FB717B;"></view>
+				<view class="cell-text_c3">
+					<view><text class="text-line_c3">平均呼吸率</text></view>
+					<view style="margin-top: 15rpx;"><text class="text-line_c31">{{ravg_hx_value}}次<text
+								class="text-line_c31-units">/分</text></text></view>
+				</view>
+			</view>
+			<view class="cell_c3">
+				<image class="image_c5" src="/static/images/report/pingjun_xinlv_new.png" mode="widthFix" />
+				<view class="blue-dot-up" style="background: #F681BA;"></view>
+				<view class="cell-text_c3">
+					<view><text class="text-line_c3">平均心率</text></view>
+					<view style="margin-top: 15rpx;"><text class="text-line_c31">{{ravg_rh_value}}次<text
+								class="text-line_c31-units">/分</text></text></view>
+				</view>
+			</view>
+		</view>
+	</view>
+
+	<view class="container_4">
+		<view class="left-panel_c4">
+			<view class="text-container_c4_top_left">
+				<text class="text_c4_left_top">温馨提醒</text>
+			</view>
+			<image class="image_c4" src="/static/images/report/left_background_c4_new.png" />
+			<view class="text-container_c4">
+				<text class="text_c4">本次睡眠,睡眠报告得分评比描述:<text class="text_c4_1">{{rscore_desc}}</text></text>
+			</view>
+		</view>
+		<view class="right-panel_c4">
+			<view class="cell_c4">
+				<view class="green-dot"></view>
+				<view class="cell-text_c4">
+					<text class="text-line_c4" style="float:left">体动次数</text>
+					<text class="text-line_c41" style="float:right;margin-right:5rpx">{{rmove_arrFrequency}}<text
+							style="font-size: 24rpx;">次</text></text>
+				</view>
+			</view>
+			<view class="cell_c4">
+				<view class="organize-dot"></view>
+				<view class="cell-text_c4">
+					<text class="text-line_c4" style="float:left">离床次数</text>
+					<text class="text-line_c41" style="float:right;margin-right:5rpx">{{routbed_count_value}}<text
+							style="font-size: 24rpx;">次</text></text>
+				</view>
+			</view>
+			<view class="cell_c4">
+				<view class="blue-dot"></view>
+				<view class="cell-text_c4">
+					<text class="text-line_c4" style="float:left">打鼾次数</text>
+					<text class="text-line_c41" style="float:right;margin-right:5rpx">{{rsnoring_arrFrequency}}<text
+							style="font-size: 24rpx;">次</text></text>
+				</view>
+			</view>
+		</view>
+	</view>
+
+	<view class="container_5">
+		<view class="header_c5">
+			<image class="header-image_c5" src="/static/images/report/shuimian_xiguan_new.png" mode="aspectFit"></image>
+			<text class="header-title_c5">睡眠习惯</text>
+			<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit" data-index="1"
+				data-subIndex="1" bindtap="toWarmReminder">
+			</image>
+		</view>
+		<!-- <view class="data-row_c5">  
       <view class="data-item_c5 left_c5">  
         <image class="data-image_c5" src="/static/images/report/c_52.png" mode="aspectFit"></image>  
         <text class="data-text_c5">周报  </text>
@@ -259,54 +268,59 @@
 			<view>请选择:{{sns[selectedIndex].pos}}床</view>  
         </picker>  
       </view>  
-    </view> -->  
-    <view class="separator_c5"></view>
-	  <view class="data-row_c5">
-	    <view class="data-item_c5 left_c5">  
-	      <view class="dot_c51"></view>  
-	      <text class="data-text_c5">上床时间 </text>
-	  	<text class="data-text_c51">就寝目标23:00</text>
-	    </view>  
-	    <view class="data-item_c5 right_c5">   
-	      <text class="data-text_c5">{{rgobed_time}}</text>  
-	    </view>  
-	  </view> 
-    <view class="data-row_c5_down">  
-      <view class="data-item_c5 left_c5">  
-        <view class="dot_c51_1"></view>  
-        <text class="data-text_c5">起床时间 </text>
-		<text class="data-text_c51_1">起床时间8:00</text>
-      </view>  
-      <view class="data-item_c5 right_c5">   
-        <text class="data-text_c5">{{routbed_time}}</text>  
-      </view>  
-    </view> 
-	 
-	 <view class="title-row_c6">
-	   <view class="title-left_c6">  
-	     <image class="title-image_c6" src="/static/images/report/shuimian_xiaolv_new.png" mode="aspectFit"></image>  
-	     <text class="title-text_c6">睡眠效率</text> 
-	 	 <image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"></image>  
-	   </view>  
-	   <view class="title-right_c6">  
-	     <text class="title-text-right_c6">{{sleep_efficiency}}</text>  
-	   </view>  
-	 </view>
-	 
-	 <view class="title-row_c6">
-	   <view class="title-left_c6">  
-	     <image class="title-image_c6" src="/static/images/report/anwendu_new.png" mode="aspectFit"></image>  
-	     <text class="title-text_c6">安稳度</text>
-	 	<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"></image>
-	   </view>  
-	   <view class="title-right_c6">  
-	     <!-- <text class="title-text-right_c6">右侧文本</text>  -->
-		 <text class="title-text-right_c6_1">入睡时长</text>  
-		 <text class="title-text-right_c6">{{rrs_duration}}分钟</text>  
-	   </view>  
-	 </view>
-	 
-	 <!-- <view class="circle-container-yh">
+    </view> -->
+		<view class="separator_c5"></view>
+		<view class="data-row_c5">
+			<view class="data-item_c5 left_c5">
+				<view class="dot_c51"></view>
+				<text class="data-text_c5">上床时间 </text>
+				<!-- <text class="data-text_c51">就寝目标23:00</text> -->
+			</view>
+			<view class="data-item_c5 right_c5">
+				<text class="data-text_c5">{{rgobed_time}}</text>
+			</view>
+		</view>
+		<view class="data-row_c5_down">
+			<view class="data-item_c5 left_c5">
+				<view class="dot_c51_1"></view>
+				<text class="data-text_c5">起床时间 </text>
+				<!-- <text class="data-text_c51_1">起床时间08:00</text> -->
+			</view>
+			<view class="data-item_c5 right_c5">
+				<text class="data-text_c5">{{routbed_time}}</text>
+			</view>
+		</view>
+
+		<view class="title-row_c6">
+			<view class="title-left_c6">
+				<image class="title-image_c6" src="/static/images/report/shuimian_xiaolv_new.png" mode="aspectFit">
+				</image>
+				<text class="title-text_c6">睡眠效率</text>
+				<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"
+					data-index="2" data-subIndex="1" bindtap="toWarmReminder"></image>
+			</view>
+			<view class="title-right_c6">
+				<text class="title-text-right_c6">{{sleep_efficiency}}</text>
+			</view>
+		</view>
+
+		<view class="title-row_c6">
+			<view class="title-left_c6">
+				<image class="title-image_c6" src="/static/images/report/anwendu_new.png" mode="aspectFit"></image>
+				<text class="title-text_c6">安稳度</text>
+				<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"
+					data-index="4" data-subIndex="1" bindtap="toWarmReminder"></image>
+			</view>
+			<view class="title-right_c6">
+				<!-- <text class="title-text-right_c6">右侧文本</text>  -->
+				<text class="title-text-right_c6_1">入睡时长</text>
+				<text class="title-text-right_c6">{{rrs_duration.formattedHours}}<text
+						class="text-line_c31-units">小时</text>{{rrs_duration.formattedMinutes}}<text
+						class="text-line_c31-units">分钟</text></text>
+			</view>
+		</view>
+
+		<!-- <view class="circle-container-yh">
 	 		  <view class="text-container-yh left-text-yh">  
 	 			<view class="text-row-yh">
 	 			  <view class="blue-dot"></view>  
@@ -328,12 +342,12 @@
 	       <text class="text-content-yh">7小时30分</text>  
 	     </view>   
 	   </view>  
-	 </view> --> 
-	 
-  </view>
-  
-  
-  <!-- <view class="container_6">
+	 </view> -->
+
+	</view>
+
+
+	<!-- <view class="container_6">
     <view class="title-row_c6">  
       <view class="title-left_c6">  
         <image class="title-image_c6" src="/static/images/report/c6_sm_1.png" mode="aspectFit"></image>  
@@ -345,161 +359,258 @@
       </view>  
     </view>
   </view> -->
-  
-  <view class="container_6">  
-    <view class="title-row_c6">  
-      <view class="title-left_c6">  
-        <image class="title-image_c6" src="/static/images/report/lichuang_cishu_new.png" mode="aspectFit"></image>  
-        <text class="title-text_c6">离床次数</text>
-		<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"></image>
-      </view>  
-      <view class="title-right_c6">  
-		<text class="title-text-right_c6">{{routbed_count_value}}次</text>
-      </view>  
-    </view>  
-    <!-- <view class="data-row_c6">  
-      <view class="data-item_c6 left_c60">入睡时长</view>  
-      <view class="data-item_c6 right_c6">{{sleep_durationCountA}}分钟</view>  
-    </view>  
-    <view class="separator_c6"></view>  -->
-    <!-- <view class="data-row_c6">  
-      <view class="data-item_c6 left_c61">离床次数</view>  
-      <view class="data-item_c6 right_c6">{{routbed_arrFrequency}}次</view>  
-    </view>  -->
-    <view class="echarts-container_c6">  
-      <!-- 在这里使用ec-canvas或canvas组件来承载echarts图表 -->  
-      <ec-canvas id="mychart-dom-bar7" canvas-id="mychart-bar" ec="{{ ec7 }}"></ec-canvas>  
-    </view>  
-	
-	<!-- <view class="data-row_c6">
-	  <view class="data-item_c6 left_c61">体动次数</view>  
-	  <view class="data-item_c6 right_c6">{{rmove_arrFrequency}}次</view>  
-	</view>  -->
-	
-	<view class="title-row_c6">
-	  <view class="title-left_c6">  
-	    <image class="title-image_c6" src="/static/images/report/tidong_cishu_new.png" mode="aspectFit"></image>  
-	    <text class="title-text_c6">体动次数</text>
-		<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"></image>
-	  </view>  
-	  <view class="title-right_c6">  
-		<text class="title-text-right_c6">{{rmove_arrFrequency}}次</text>
-	  </view>  
+
+	<view class="container_6">
+		<view class="title-row_c6">
+			<view class="title-left_c6">
+				<image class="title-image_c6" src="/static/images/report/lichuang_cishu_new.png" mode="aspectFit">
+				</image>
+				<text class="title-text_c6">离床次数</text>
+				<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"
+					data-index="4" data-subIndex="2" bindtap="toWarmReminder"></image>
+			</view>
+			<view class="title-right_c6">
+				<text class="title-text-right_c6">{{routbed_count_value}}<text
+						class="text-line_c31-units">次</text></text>
+			</view>
+		</view>
+		<text class="sub-title">睡眠状态</text>
+
+		<view class="card-h">
+
+			<view class="chart-left-box">
+				<view class="chart-left-title-box">
+					<view class="dot" style="background: #6086EF"></view>
+					<text class="left-title">在床</text>
+				</view>
+				<view class="chart-left-title-box">
+					<view class="dot" style=" background: #EE8B52"></view>
+					<text class="left-title">离床</text>
+				</view>
+			</view>
+			<view class="echarts-container_c6" style="flex: 1;">
+				<ec-canvas id="chartOutOfBed-dom" canvas-id="mychart-out-of-bed" ec="{{ ecOutOfBed }}"></ec-canvas>
+			</view>
+		</view>
+
+
+		<view class="title-row_c6">
+			<view class="title-left_c6">
+				<image class="title-image_c6" src="/static/images/report/tidong_cishu_new.png" mode="aspectFit"></image>
+				<text class="title-text_c6">体动次数</text>
+				<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"
+					data-index="4" data-subIndex="3" bindtap="toWarmReminder"></image>
+			</view>
+			<view class="title-right_c6">
+				<text class="title-text-right_c6">{{rmove_arrFrequency}}<text
+						class="text-line_c31-units">次</text></text>
+			</view>
+		</view>
+		<text class="sub-title">睡眠状态</text>
+		<view class="card-h">
+
+			<view class="chart-left-box">
+				<view class="chart-left-title-box">
+					<view class="dot" style="background: #EE8B52"></view>
+					<text class="left-title">体动</text>
+				</view>
+				<view class="chart-left-title-box">
+					<view class="dot" style=" background: #60C38D"></view>
+					<text class="left-title">否</text>
+				</view>
+			</view>
+			<view class="echarts-container_c6" style="flex: 1;">
+				<ec-canvas id="chartBodyMovementsLine-dom" canvas-id="mychart-body-movements-line"
+					ec="{{ ecBodyMovements }}"></ec-canvas>
+			</view>
+		</view>
+
 	</view>
-	
-	<view class="echarts-container_c6">  
-	  <!-- 在这里使用ec-canvas或canvas组件来承载echarts图表 -->  
-	  <ec-canvas id="mychart-dom-bar8" canvas-id="mychart-bar" ec="{{ ec8 }}"></ec-canvas>  
-	</view>  
-	
-  </view>
 
-  <view class="container_6">
-    <view class="title-row_c6">  
-      <view class="title-left_c6">  
-        <image class="title-image_c6" src="/static/images/report/xinzang_xiting_new.png" mode="aspectFit"></image>  
-        <text class="title-text_c6">心脏系统</text>
-		<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"></image>
-      </view>  
-      <!-- <view class="title-right_c6">  
+	<view class="container_6">
+		<view class="title-row_c6">
+			<view class="title-left_c6">
+				<image class="title-image_c6" src="/static/images/report/xinzang_xiting_new.png" mode="aspectFit">
+				</image>
+				<text class="title-text_c6">心脏系统</text>
+				<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"
+					data-index="5" data-subIndex="1" bindtap="toWarmReminder"></image>
+			</view>
+			<!-- <view class="title-right_c6">  
         <text class="title-text-right_c6">右侧文本</text>  
-      </view> --> 
-    </view>  
+      </view> -->
+		</view>
 
-  	<view class="data-row_c6">
-  	  <view class="data-item_c6 left_c61">平均心率</view>  
-  	  <view class="data-item_c6 right_c6">{{ravg_rh_value}}次/分</view>  
-  	</view>  
-  	<view class="echarts-container_c6">  
-  	  <!-- 在这里使用ec-canvas或canvas组件来承载echarts图表 -->  
-  	  <ec-canvas id="mychart-dom-bar1" canvas-id="mychart-bar" ec="{{ ec1 }}"></ec-canvas>  
-  	</view>  
-  	
-  </view>
-  
-  
-  <view class="container_6">
-    <view class="title-row_c6">  
-      <view class="title-left_c6">  
-        <image class="title-image_c6" src="/static/images/report/huxi_xitong_new.png" mode="aspectFit"></image>  
-        <text class="title-text_c6">呼吸系统</text>  
-		<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"></image>
-      </view>  
-      <!-- <view class="title-right_c6">  
-        <text class="title-text-right_c6">右侧文本</text>  
-      </view> --> 
-    </view>  
-  
-  	<view class="data-row_c6">
-  	  <view class="data-item_c6 left_c61">平均呼吸率</view>  
-  	  <view class="data-item_c6 right_c6">{{ravg_hx_value}}次/分</view>  
-  	</view>  
-  	<view class="echarts-container_c6">  
-  	  <!-- 在这里使用ec-canvas或canvas组件来承载echarts图表 -->  
-  	  <ec-canvas id="mychart-dom-bar81" canvas-id="mychart-bar" ec="{{ ec81 }}"></ec-canvas>  
-  	</view>  
-  	
-	<view class="data-row_c6">
-	  <view class="data-item_c6 left_c61">打鼾</view>  
-	  <view class="data-item_c6 right_c6">{{rsnoring_arrFrequency}}次</view>  
-	</view>  
-	<view class="echarts-container_c6">  
-	  <!-- 在这里使用ec-canvas或canvas组件来承载echarts图表 -->  
-	  <ec-canvas id="mychart-dom-bar9" canvas-id="mychart-bar" ec="{{ ec9 }}"></ec-canvas>  
-	</view>  
-	
-	<view class="data-row_c6">
-	  <view class="data-item_c6 left_c61">呼吸暂停</view>  
-	  <view class="data-item_c6 right_c6">{{rhxstop_arrFrequency}}次</view>  
-	</view>  
-	<view class="echarts-container_c6">  
-	  <!-- 在这里使用ec-canvas或canvas组件来承载echarts图表 -->  
-	  <ec-canvas id="mychart-dom-bar10" canvas-id="mychart-bar" ec="{{ ec10 }}"></ec-canvas>  
-	</view>  
-	<view class="data-row_c6">
-	  <view class="data-item_c6 {{(sleepHourSub && rhxstop_arrFrequency>=sleepHourSub*5)?'left_c62_1':'left_c62'}}"><image class="header-image_comma" style="margin-right:10rpx;" src="/static/images/report/fengxian_yujing_new.png" mode="aspectFit"></image>风险预警: {{(sleepHourSub && rhxstop_arrFrequency>=5*sleepHourSub)?'根据呼吸暂停指数(AHI),您的呼吸暂停次数已达到5次/每小时':'无'}}</view>  
-	  <!-- <view class="data-item_c6 right_c6">0次</view>  -->
-	</view>  
-  </view>
-  
-  
-  <view class="container_6">
-    <view class="title-row_c6">  
-      <view class="title-left_c6">  
-        <image class="title-image_c6" src="/static/images/report/shenqian_shuimian_new.png" mode="aspectFit"></image>  
-        <text class="title-text_c6">深浅睡眠</text>  
-		<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"></image>
-      </view>  
-      <!-- <view class="title-right_c6">  
+		<view class="data-row_c6">
+			<view class="data-item_c6 left_c61">平均心率</view>
+			<view class="right_c6">{{ravg_rh_value}}<text class="text-line_c31-units">次/分</text></view>
+		</view>
+		<view class="echarts-container_c6">
+			<!-- 在这里使用ec-canvas或canvas组件来承载echarts图表 -->
+			<ec-canvas id="chartCardiacSystemLine-dom" canvas-id="mychart-cardiac-system-line"
+				ec="{{ ecCardiacSystemLine }}"></ec-canvas>
+		</view>
+
+	</view>
+
+
+	<view class="container_6">
+		<view class="title-row_c6">
+			<view class="title-left_c6">
+				<image class="title-image_c6" src="/static/images/report/huxi_xitong_new.png" mode="aspectFit"></image>
+				<text class="title-text_c6">呼吸系统</text>
+				<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"
+					data-index="6" data-subIndex="1" bindtap="toWarmReminder"></image>
+			</view>
+
+		</view>
+
+		<view class="data-row_c6">
+			<view class="data-item_c6 left_c61">平均呼吸率</view>
+			<view class=" right_c6">{{ravg_hx_value}}<text class="text-line_c31-units">次/分</text></view>
+		</view>
+		<view class="echarts-container_c6">
+			<!-- 在这里使用ec-canvas或canvas组件来承载echarts图表 -->
+			<ec-canvas id="chartRespiratoryLine-dom" canvas-id="mychart-chart-respiratory-line"
+				ec="{{ ecChartRespiratoryLine }}"></ec-canvas>
+		</view>
+
+		<view class="data-row_c6">
+			<view class="data-item_c6 left_c61">打鼾</view>
+			<view class=" right_c6">{{rsnoring_arrFrequency}}<text class="text-line_c31-units">次</text></view>
+		</view>
+		<!-- <view class="echarts-container_c6">
+			<ec-canvas id="mychart-dom-bar9" canvas-id="mychart-bar" ec="{{ ec9 }}"></ec-canvas>
+		</view> -->
+
+
+		<text class="sub-title">睡眠状态</text>
+		<view class="card-h">
+			<view class="chart-left-box">
+				<view class="chart-left-title-box">
+					<view class="dot" style="background: #EE8B52"></view>
+					<text class="left-title">打鼾</text>
+				</view>
+				<view class="chart-left-title-box">
+					<view class="dot" style=" background: #60C38D"></view>
+					<text class="left-title">否</text>
+				</view>
+			</view>
+			<view class="echarts-container_c6" style="flex: 1;">
+				<ec-canvas id="chartSnoringLine-dom" canvas-id="mychart-chart-snoring-line"
+					ec="{{ ecSnoringLine }}"></ec-canvas>
+			</view>
+		</view>
+
+		<view class="data-row_c6">
+			<view class="data-item_c6 left_c61">呼吸暂停</view>
+			<view class=" right_c6">{{rhxstop_arrFrequency}}<text class="text-line_c31-units">次</text></view>
+		</view>
+		<!-- <view class="echarts-container_c6">
+			<ec-canvas id="mychart-dom-bar10" canvas-id="mychart-bar" ec="{{ ec10 }}"></ec-canvas>
+		</view> -->
+		<text class="sub-title">睡眠状态</text>
+		<view class="card-h">
+			<view class="chart-left-box">
+				<view class="chart-left-title-box">
+					<view class="dot" style="background: #F46785"></view>
+					<text class="left-title">停止</text>
+				</view>
+				<view class="chart-left-title-box">
+					<view class="dot" style=" background: #6086EF"></view>
+					<text class="left-title">否</text>
+				</view>
+			</view>
+			<view class="echarts-container_c6" style="flex: 1;">
+				<ec-canvas id="chartApneaLine-dom" canvas-id="mychart-chart-apnea-line"
+					ec="{{ ecApneaLine }}"></ec-canvas>
+			</view>
+		</view>
+		<view class="data-row_c6" style="margin-top: 30rpx;">
+			<view
+				class="data-item_c6 {{(sleepHourSub && rhxstop_arrFrequency>=sleepHourSub*5)?'left_c62_1':'left_c62'}}">
+				<image class="header-image_comma" style="margin-right:10rpx;width: 36rpx;height: 36rpx;"
+					src="/static/images/report/fengxian_yujing_new.png" mode="aspectFit"></image>
+				<text>风险预警: {{(sleepHourSub
+					&& rhxstop_arrFrequency>=5*sleepHourSub)?'根据呼吸暂停指数(AHI),您的呼吸暂停次数已达到5次/每小时':'无'}}</text>
+			</view>
+			<!-- <view class="data-item_c6 right_c6">0次</view>  -->
+		</view>
+	</view>
+
+
+	<view class="container_6">
+		<view class="title-row_c6">
+			<view class="title-left_c6">
+				<image class="title-image_c6" src="/static/images/report/shenqian_shuimian_new.png" mode="aspectFit">
+				</image>
+				<text class="title-text_c6">深浅睡眠</text>
+				<image class="header-image_comma" src="/static/images/report/comma_new.png" mode="aspectFit"
+					data-index="3" data-subIndex="1" bindtap="toWarmReminder"></image>
+			</view>
+			<!-- <view class="title-right_c6">  
         <text class="title-text-right_c6">右侧文本</text>  
-      </view> -->  
-    </view>  
-  <view class="data-row_c6_0">
-  	<view class="data-row_c6_1">
-  	  <view class="data-item_c6 left_c6">清醒</view>  
-  	  <view class="data-item_c6 left_c6">REM({{rin_duration_efficiency}})</view>  
-	  <view class="data-item_c6 left_c6">浅睡({{rlight_duration_efficiency}})</view>
-	  <view class="data-item_c6 left_c6">深睡({{rdeep_duration_efficiency}})</view>
-  	</view>   
-  	<view class="data-row_c6_2">  
-  	  <view class="data-item_c6 left_c6">{{rawake_durationFormat}}</view>  
-  	  <view class="data-item_c6 left_c6">{{rin_durationFormat}}</view>  
-	  <view class="data-item_c6 left_c6">{{rlight_durationFormat}}</view> 
-	  <view class="data-item_c6 left_c6">{{rdeep_durationFormat}}</view> 
-  	</view> 
+      </view> -->
+		</view>
+
+		<view class="card5-h">
+
+			<view class="card-v">
+				<text class="card-t1">清醒</text>
+				<text class="card-t2">{{rawake_durationFormat || '0H 0M'}}</text>
+			</view>
+
+			<view class="card-v">
+				<text class="card-t1">REM({{rin_duration_efficiency}})</text>
+				<text class="card-t2">{{rin_durationFormat || '0H 0M'}}</text>
+			</view>
+
+			<view class="card-v">
+				<text class="card-t1">浅睡({{rlight_duration_efficiency}})</text>
+				<text class="card-t2">{{rlight_durationFormat || '0H 0M'}}</text>
+			</view>
+
+			<view class="card-v">
+				<text class="card-t1">深睡({{rdeep_duration_efficiency}})</text>
+				<text class="card-t2">{{rdeep_durationFormat || '0H 0M'}}</text>
+			</view>
+		</view>
+		<!-- <view class="echarts-container_c6">
+			<ec-canvas id="mychart-dom-bar11" canvas-id="mychart-bar" ec="{{ ec11 }}"></ec-canvas>
+		</view> -->
+		<view class="card-h" style="margin-top: 30rpx;">
+			<view class="chart-left-box">
+				<view class="chart-left-title-box">
+					<view class="dot" style="background: #AB81FF;border-radius: 4rpx;"></view>
+					<text class="left-title">深睡</text>
+				</view>
+				<view class="chart-left-title-box">
+					<view class="dot" style=" background: #D8C8FE;border-radius: 4rpx;"></view>
+					<text class="left-title">浅睡</text>
+				</view>
+				<view class="chart-left-title-box">
+					<view class="dot" style=" background: #F1E9FE;border-radius: 4rpx;"></view>
+					<text class="left-title">REM</text>
+				</view>
+				<view class="chart-left-title-box">
+					<view class="dot" style=" background: #FDEFA6;border-radius: 4rpx;"></view>
+					<text class="left-title">清醒</text>
+				</view>
+			</view>
+			<view class="echarts-container_c6" style="flex:1">
+				<ec-canvas id="chartTimeWaterfall-dom" canvas-id="mychart-time-waterfall"
+					ec="{{ ecTimeWaterfall }}"></ec-canvas>
+			</view>
+		</view>
+
 	</view>
-  	<view class="echarts-container_c6">  
-  	  <ec-canvas id="mychart-dom-bar11" canvas-id="mychart-bar" ec="{{ ec11 }}"></ec-canvas>  
-  	</view>  
-  	
-  </view>
 
-  <!-- <view class="container1">
+	<!-- <view class="container1">
     <button class="{{isButtonClicked ? 'gradient-button gradient-button-clicked' : 'gradient-button'}}" bindtap="telScreeProjection">生成报告并推送到电视</button>  
   </view> -->
-  
-  
-  <!-- <view class='canvas5'>
+
+
+	<!-- <view class='canvas5'>
     <ec-canvas id="mychart-dom-line6" canvas-id="mychart-line6" ec="{{ ec6 }}" class="canvas5"></ec-canvas>
   </view>
   <view class='container'>
@@ -600,5 +711,5 @@
   <view class='canvas5'>
     <ec-canvas id="mychart-dom-line" canvas-id="mychart-line" ec="{{ ec5 }}" class="canvas5"></ec-canvas>
   </view> -->
-  
+
 </view>

Datei-Diff unterdrückt, da er zu groß ist
+ 1395 - 1143
pages/data/data.wxss


Datei-Diff unterdrückt, da er zu groß ist
+ 756 - 961
pages/index/index.js


+ 4 - 3
pages/index/index.json

@@ -1,6 +1,7 @@
 {
   "usingComponents": {
-	"gauge":"../../dist/index",
-    "ec-canvas": "../../ec-canvas/ec-canvas"
-  }
+  "ec-canvas": "../../ec-canvas/ec-canvas"
+  },
+  "navigationBarRightButton": {"hide": true},
+  "navigationStyle": "custom"
 }

+ 347 - 284
pages/index/index.wxml

@@ -1,307 +1,370 @@
-<!--index.wxml-->
-<view class="{{!status_light ? 'wrapper' : 'wrapper-dark' }}"  style="width: max-content; height: fit-content; display: block; box-sizing: border-box">
-<!-- 天气的面板 -->
-  <view class="header-wrapper" wx:if="{{!status_fire}}">
-    <!-- <view class="header-title">
-      <text>空气质量-{{ airText }}</text>
-      <text>{{ area }}-{{ city }}</text>
+<!-- index.wxml -->
+<view>
+  <image src="/static/images/ic_top_bg.png" mode="widthFix"
+    style="width: 100%;display: block;position: absolute; z-index: -1;top:0" />
+  <view class="container">
+    <van-nav-bar title="" left-text="" left=""></van-nav-bar>
+    <!-- 天气的面板 -->
+    <view class="header-wrapper" wx:if="{{!status_fire}}">
+      <view class="weather-box">
+        <text class="weather-title">空气质量-{{ airText }}</text>
+        <text class="weather-value">{{ airValue }}</text>
+      </view>
+      <view class="weather-box" style="align-items: flex-end;">
+        <text class="weather-title">{{ area }}-{{ city }}</text>
+        <text class="weather-desc">{{ weather }}</text>
+      </view>
     </view>
-    <view class="header-text">
-      <text>{{ airValue }}</text>
-      <text>{{ weather }}</text>
-    </view> -->
-	
-	<view class="header-title">
-	  <text>空气质量-{{ airText }}</text>
-	  <text>{{ area }}-{{ city }}</text>
-	</view>
-	<view class="header-text">
-	  <text>{{ airValue }}</text>
-	  <text>{{ weather }}</text>
-	</view>
-	
-  </view>
 
-<view wx:if="{{isLoading}}" class="loading-container">  
-  <text class="loading-text">数据正在加载,请耐心等待...</text>  
-</view>
 
-<view class="data-container sliderList">
-  <!--温度-->
-    <view class="data-card">
-      <image class="data-card__icon"src="/static/images/temp.png"/>
-      <view class="data-card__text">
-        <view class="data-card__title">
-        温度
-        </view>
-        <view class="data-card__value">
-        {{w_temp}}℃
-        </view>
+
+    <view class="contentArea">
+      <view class="menu-tab">
+        <view
+          class="{{!modelList1.length ? 'menu-tab-disenable' : currentMenuTabIndex == 0 ? 'menu-tab-item-active' :  'menu-tab-item'}}"
+          data-index="0" bindtap="checkMenuTap">起床模式</view>
+        <view
+          class="{{!modelList2.length ? 'menu-tab-disenable' : currentMenuTabIndex == 1 ? 'menu-tab-item-active' : 'menu-tab-item'}}"
+          data-index="1" bindtap="checkMenuTap">观影模式</view>
+        <view
+          class="{{!modelList3.length ? 'menu-tab-disenable' : currentMenuTabIndex == 2 ? 'menu-tab-item-active' :  'menu-tab-item'}}"
+          data-index="2" bindtap="checkMenuTap">睡眠模式</view>
       </view>
-    </view>
-  <!--湿度-->
-    <view class="data-card">
-      <image class="data-card__icon"src="/static/images/hum.png"/>
-      <view class="data-card__text">
-        <view class="data-card__title">
-        湿度
-        </view>
-        <view class="data-card__value">
-        {{w_humidity}}%
-        </view>
+
+      <view class="theFirstRow">
+        <image src="/static/icons/ic_temperature.svg" mode="widthFix" />
+        <text class="theFirstRow-title">温度</text>
+        <text class="theFirstRow-value">{{w_temp}}<text class="theFirstRow-unit">℃</text></text>
+
+        <view style="margin-left: 30rpx;width: 2rpx; background: #e8e8e8; height: 24rpx;" />
+        <image src="/static/icons/ic_humidity.svg" mode="widthFix" />
+        <text class="theFirstRow-title">湿度</text>
+        <text class="theFirstRow-value">{{w_humidity}}<text class="theFirstRow-unit">%</text></text>
+
       </view>
-    </view>
-  <!--光照度-->
-    <!-- <view class="data-card">
-      <image class="data-card__icon"src="/static/images/light.png"/>
-      <view class="data-card__text">
-        <view class="data-card__title">
-        光照度
-        </view>
-        <view class="data-card__value">
-        100 LX
-        </view>
+      <view wx:if="{{isLoading}}" class="loading-container">
+        <text class="loading-text">数据正在加载,请耐心等待...</text>
       </view>
-    </view> -->
-  <!--客厅灯-->
-    <!-- <view class="data-card">
-      <image class="data-card__icon"src="/static/images/led.png"/>
-      <view class="data-card__text">
-        <view class="data-card__title">
-        客厅灯
-        </view>
-        <view class="data-card__value">
-        <switch checked="{{Led}}" bindchange="onLedChange" color="#3d7ef9"/>
+      <view class="data-container sliderList">
+
+        <!-- 普通的-->
+        <view wx:for="{{listSwitch}}" wx:for-index="index" wx:for-item="item" class="sliderItem">
+          <view class="data-card" style="{{item.state=='on' ? 'background: #0BC3AA;' : item.bg}}">
+            <image class="data-card__icon" src="{{item.state=='on' ? item.selectedImgSrc : item.imgSrc}}" />
+            <view class="data-card__text">
+              <text class="data-card__title1"
+                style="{{item.state=='on' ? 'color: #ffffff' :  ''}}">{{item.friendly_name}}</text>
+
+              <view class="data-card__value">
+                <van-switch size="22px" active-color="#2CCEB8" inactive-color="#E8EAEB" checked="{{item.state=='on'}}"
+                  bind:change="onSelect_All" data-param0="{{index}}" data-param1="/services"
+                  data-param2="/{{item.domain}}" data-param3='{{item.state=="on"?"/turn_off":"/turn_on"}}'
+                  data-param4='{{item.state=="on"?"0":"1"}}' data-param5="{{item.entity_id}}"
+                  custom-class="customSwitch" />
+              </view>
+            </view>
+          </view>
         </view>
-      </view>
-    </view> -->
-  <!--报警器-->
-    <!-- <view class="data-card">
-      <image class="data-card__icon"src="/static/images/alarm.png"/>
-      <view class="data-card__text">
-        <view class="data-card__title">
-        报警器
+
+
+        <!-- cover  -->
+        <view wx:for="{{listCover}}" wx:for-index="index" wx:for-item="item" class="sliderItem">
+          <view class="data-card">
+            <image class="data-card__icon" src="{{item.imgSrc}}" />
+            <view class="data-card__text">
+              <view class="data-card__title">
+                <text class="text-content">{{item.friendly_name}}</text>
+              </view>
+              <view class="data-card__value">
+                <van-switch size="22px" active-color="#2CCEB8" inactive-color="#E8EAEB" checked="{{item.state=='open'}}"
+                  bindchange="onSelect_Cover" data-param0="{{index}}" data-param1="/services"
+                  data-param2="/{{item.domain}}" data-param3='{{item.state=="open"?"/open_cover":"/close_cover"}}'
+                  data-param4='{{item.state=="open"?"0":"1"}}' data-param5="{{item.entity_id}}" />
+              </view>
+            </view>
+          </view>
         </view>
-        <view class="data-card__value">
-        <switch checked="{{Beep}}" bindchange="onBeepChange" color="#3d7ef9"/>
+        <!-- 电视 card-->
+        <view wx:for="{{listMitvMediaPlayer}}" wx:for-index="index" wx:for-item="item" class="sliderItem">
+          <view class="data-card" style="{{item.bg}}">
+            <image class="data-card__icon" src="{{item.imgSrc}}" />
+            <view class="data-card__text">
+              <view class="data-card__title">
+                <text class="text-content">{{item.friendly_name}}</text>
+              </view>
+              <view class="data-card__value">
+                <view class="tv_button-container">
+                  <text
+                    class=" {{(item.app_id=='com.xiaomi.mitv.tvplayer'||item.app_name=='模拟电视')?'tv_disabled-button':'tv_custom-button'}}"
+                    bindtap="tvFanChange" data-id="{{item.entity_id}}" data-fan="当贝桌面">电视模式</text>
+                  <text
+                    class=" {{(item.app_id=='com.xiaomi.mitv.tvplayer'||item.app_name=='模拟电视')?'tv_custom-button':'tv_disabled-button'}}"
+                    bindtap="tvFanChange" data-id="{{item.entity_id}}" data-fan="HDMI1">机顶盒模式</text>
+                </view>
+              </view>
+            </view>
+          </view>
         </view>
       </view>
-    </view> -->
-	
-	<view wx:for="{{listSwitch}}" wx:for-index="index" wx:for-item="item" class="sliderItem">
-		<view class="data-card">
-		  <image class="data-card__icon" src="{{item.imgSrc}}"/>
-		  <view class="data-card__text">
-			<view class="data-card__title1">
-			{{item.friendly_name}}
-			</view>
-			<view class="data-card__value" wx:if="{{item.isAromlight}}">
-				<image class="control-button_media_2 play {{isClickedToggleAromlight ? 'clicked' : ''}}" src="/static/images/start.png" bindtap="onSelect_All_aromlight" data-param0='{{index}}' data-param1='/services'  data-param2='/{{item.domain}}'
-				data-param3='/turn_on'  data-param4='{{item.state=="on"?"0":"1"}}'  data-param5='{{item.entity_id}}'/> 
-			</view>
-			<view class="data-card__value" wx:else>
-				<switch checked="{{item.state=='on'}}" bindchange="onSelect_All"  data-param0='{{index}}' data-param1='/services'  data-param2='/{{item.domain}}'
-			     data-param3='{{item.state=="on"?"/turn_off":"/turn_on"}}'  data-param4='{{item.state=="on"?"0":"1"}}'  data-param5='{{item.entity_id}}'/>
-			</view>
-		  </view>
-		</view>
-	</view>
-	
-	<view wx:for="{{listCover}}" wx:for-index="index" wx:for-item="item" class="sliderItem">
-		<view class="data-card">
-		  <image class="data-card__icon" src="{{item.imgSrc}}"/>
-		  <view class="data-card__text">
-			<view class="data-card__title">
-				<text class="text-content">{{item.friendly_name}}</text>
-			</view>
-			<view class="data-card__value">
-				<switch checked="{{item.state=='open'}}" bindchange="onSelect_Cover"  data-param0='{{index}}' data-param1='/services'  data-param2='/{{item.domain}}'
-                  data-param3='{{item.state=="open"?"/open_cover":"/close_cover"}}'  data-param4='{{item.state=="open"?"0":"1"}}'  data-param5='{{item.entity_id}}'/>
-			</view>
-		  </view>
-		</view>
-	</view>
-	
-	<view wx:for="{{listMitvMediaPlayer}}" wx:for-index="index" wx:for-item="item" class="sliderItem">
-		<view class="data-card">
-		  <image class="data-card__icon" src="{{item.imgSrc}}"/>
-		  <view class="data-card__text">
-			<view class="data-card__title">
-				<text class="text-content">{{item.friendly_name}}</text>
-			</view>
-			<view class="data-card__value">
-				<view class="tv_button-container">
-				  <button class=" {{(item.app_id=='com.xiaomi.mitv.tvplayer'||item.app_name=='模拟电视')?'tv_disabled-button':'tv_custom-button'}}" bindtap="tvFanChange" data-id="{{item.entity_id}}" data-fan="当贝桌面">电视模式</button>  
-				  <button class=" {{(item.app_id=='com.xiaomi.mitv.tvplayer'||item.app_name=='模拟电视')?'tv_custom-button':'tv_disabled-button'}}" bindtap="tvFanChange" data-id="{{item.entity_id}}" data-fan="HDMI1">机顶盒模式</button>  
-				</view>
-			</view>
-		  </view>
-		</view>
-	</view>
-	
-  </view>
 
-  <view class="body-wrapper" style="width: 694rpx; height: 800rpx; display: block; box-sizing: border-box">
-    <view class="body" style="width: 694rpx; height: 800rpx; display: block; box-sizing: border-box; left: 0rpx; top: 0rpx">
+      <view class="body-wrapper" style="margin-top:40rpx; display: flex;flex-direction: column;align-items: center;">
+        <view class="body">
 
+          <!-- 香薰机 -->
+          <view class="test" class="sliderItem" wx:for="{{listAromatherapyMachine}}" wx:for-index="index"
+            wx:for-item="item" wx:if="{{item.isAromatherapy}}">
 
-<!-- 定时功能弹窗 -->
+            <view class="center-view">
+              <view class="title-line"></view>
+              <text class="gray-text">{{item.friendly_name}}</text>
+            </view>
+            <view class="data-media-player" style="flex-direction: row;">
 
+              <view class="data-media-1">
+                <text class="sub-title">香薰机灯光</text>
+                <view class="btn-pos-view" bindtap="onSelect_All_aromlight" data-param0="{{index}}"
+                  data-param1="/services" data-param2="/{{item.domain}}" data-param3="/turn_on"
+                  data-param4='{{item.state=="on"?"0":"1"}}' data-param5="{{item.entity_id}}">
+                  <image src="/static/images/ic_light_button_bg.png"></image>
+                  <text>灯光切换</text>
+                </view>
+              </view>
+              <view class="card-line-v"></view>
+              <view class="data-media-1">
+                <view class="card-data" wx:for="{{listAromatherapyMachine}}" wx:for-index="index2" wx:for-item="item2"
+                  wx:if="{{item2.isAromatherapy}}">
+                  <image class="data-card__icon" src="{{item2.imgSrc}}" />
+                  <text class="data-card__title1">{{item2.friendly_name}}</text>
+                  <view class="data-card__value">
+                    <van-switch size="22px" active-color="#2CCEB8" inactive-color="#E8EAEB"
+                      checked="{{item2.state=='on'}}" bindtap="onTap_All" data-param0="{{index2}}"
+                      data-param1="/services" data-param2="/{{item2.domain}}"
+                      data-param3='{{item2.state=="on"?"/turn_off":"/turn_on"}}'
+                      data-param4='{{item2.state=="on"?"0":"1"}}' data-param5="{{item2.entity_id}}"
+                      custom-class="customSwitch" />
+                  </view>
+                </view>
+                <view class="card-data" wx:for="{{listAromatherapyMachine}}" wx:for-index="index2" wx:for-item="item2"
+                  wx:if="{{item2.isAromAtomization}}" style="height: 230rpx;">
+                  <image class="data-card__icon" src="{{item2.imgSrc}}" />
+                  <text class="data-card__title1">{{item2.friendly_name}}</text>
+                  <view class="data-card__value">
+                    <image class="power-btn-small"
+                      src="{{item.state=='on'? '/static/icons/ic_power.svg' : '/static/icons/ic_power_off.svg'}}"
+                      data-param0="{{index}}" data-param1="/services" data-param2="/{{item.domain}}"
+                      data-param3='{{item.state=="on"?"/turn_off":"/turn_on"}}'
+                      data-param4='{{item.state=="on"?"0":"1"}}' data-param5="{{item.entity_id}}" bindtap="onTap_All">
+                    </image>
+                  </view>
+                </view>
 
-<!-- 各设备控制弹窗 结束行-->
+              </view>
 
-<view class='test' wx:for="{{listHumidifier}}" wx:for-index="index" wx:for-item="item" class="sliderItem">
-	<view class="data-media-player">
-	  <view class="center-view">
-		<text class="gray-text">{{item.friendly_name}}</text>  
-	  </view>
+            </view>
+          </view>
 
-	  <view class="data-container data-card">
-		  <!-- <view class="data-card">
-			<image class="data-card__icon" src="/static/images/hum.png"/>
-			<view class="data-card__text">
-			  <view class="data-card__title">
-			  湿度
-			  </view>
-			  <view class="data-card__value">
-			  {{item.humidity}}%
-			  </view>
-			</view>
-		  </view> -->
-		  <view class="data-card">
-		  			<image class="data-card__icon"src="/static/images/hum.png"/>
-		  			<view class="data-card__text">
-		  			  <view class="data-card__title">
-		  			  开关
-		  			  </view>
-		  			  <view class="data-card__value">
-		  			  <switch checked="{{item.state=='on'}}" bindchange="onSelect_All"  data-param0='{{index}}' data-param1='/services'  data-param2='/{{item.domain}}'
-		  			  data-param3='{{item.state=="on"?"/turn_off":"/turn_on"}}'  data-param4='{{item.state=="on"?"0":"1"}}'  data-param5='{{item.entity_id}}'/>
-		  			  </view>
-		  			</view>
-		  </view>
-		  <view class="data-card">
-		  			<image class="data-card__icon"src="/static/images/hum.png"/>
-		  			<view class="data-card__text">
-		  			  <view class="data-card__title">
-		  			  湿度:{{item.humidity}}%
-		  			  </view>
-		  			  <view class="data-card__value1">
-		  			  <!-- <button class="{{isButtonPressedHumidityUp ? 'round-gradient-button-pressed' : 'round-gradient-button'}} {{isClickedOnHumidifierUp ? 'clicked' : ''}}" bindtap="onHumidifierUp" style="width: 120rpx;height: 70rpx;" data-state='{{item.state}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}' data-min='{{item.min}}' data-max='{{item.max}}' data-humidity='{{item.humidity}}'>增加+</button>
-		  			  -->
-					  <slider style="width:100%;margin:20rpx 20rpx 0rpx 0rpx" bindtouchend="handleTouchEndHumidifier" bindchanging="handleChangingHumidifier" bindchange="changeHumidity" step="1" min="{{item.min}}" max="{{item.max}}" data-id="{{item.entity_id}}" data-index='{{index}}' data-domain='{{item.domain}}' value="{{item.humidity}}" min="{{item.min}}" max="{{item.max}}"  data-humidity='{{item.humidity}}'>
-						<text style="color:white">{{sliderValueHumidifier}}</text>
-					  </slider>	
-					  </view>
-		  			</view>
-		  </view>
-		  <!-- <view class="data-card">
-		  			<image class="data-card__icon"src="/static/images/hum.png"/>
-		  			<view class="data-card__text">
-		  			  <view class="data-card__title">
-		  			  湿度-
-		  			  </view>
-		  			  <view class="data-card__value">
-		  			  <button class="{{isButtonPressedHumidityDown ? 'round-gradient-button-pressed' : 'round-gradient-button'}} {{isClickedOnHumidifierDown ? 'clicked' : ''}}" bindtap="onHumidifierDown" style="width: 120rpx;height: 60rpx;" data-state='{{item.state}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}' data-min='{{item.min}}' data-max='{{item.max}}' data-humidity='{{item.humidity}}'>减少-</button>
-		  			  </view>
-		  			</view>
-		  </view> -->
-		  <view style="margin-top: 10rpx;">
-		  </view>
-	  </view>
-	  
-	</view>
-</view>
+          <!-- 加湿器 -->
+          <view class="test" wx:for="{{listHumidifier}}" wx:for-index="index" wx:for-item="item" class="sliderItem">
 
-<view class='test sliderItem' wx:for="{{listClimate}}" wx:for-index="index" wx:for-item="item">
-	<view class="data-media-player">
-	  <view class="center-view">
-		<text class="gray-text">{{item.friendly_name}}</text>  
-	  </view>
-	  <view class="value-display">{{temperatureHumidifyName}}:{{item.temperature}}°C</view>
-	      <view class="button-row">  
-	  	  <!-- <button class="{{isButtonPressedClimateUp ? 'round-gradient-button-pressed' : 'round-gradient-button'}} {{isClickedOnClimateAuto ? 'clicked' : ''}}" bindtap="onClimateUp" data-state='{{item.state}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}' data-min='{{item.min}}' data-max='{{item.max}}' data-temperature='{{item.temperature}}' data-fanMode='{{item.fan_mode}}'>增加+</button>
-	  	  <button class="{{isButtonPressedClimateDown ? 'round-gradient-button-pressed' : 'round-gradient-button'}}" bindtap="onClimateDown" data-state='{{item.state}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}' data-min='{{item.min}}' data-max='{{item.max}}' data-temperature='{{item.temperature}}' data-fanMode='{{item.fan_mode}}'>减少-</button> -->
-		  
-		  <slider class="tui-slider-box" bindtouchend="handleTouchEndClimate" bindchanging="handleChangingClimate" bindchange="changeClimate" min="{{item.min_temp}}" max="{{item.max_temp}}" step="1" value="{{item.temperature}}" data-state='{{item.state}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}' data-min='{{item.min_temp}}' data-max='{{item.max_temp}}' data-temperature='{{item.temperature}}' data-fanMode='{{item.fan_mode}}'>
-			<text style="color:white">{{sliderValueClimate}}</text>
-		  </slider>
-		  
-	      </view> 
-	  <view class="air-conditioner-controls">
-	  		<button class="{{item.state=='auto'?'control-button_1':'control-button'}} {{isClickedOnClimateAuto ? 'clicked' : ''}}" bindtap="onClimateAuto" data-state='{{item.state}}' data-temperature='{{item.temperature}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}'>  
-	  		  <image class="control-icon" />  
-	  		  <text class="control-text">自动</text>  
-	  		</button>  
-	  		<button class="{{item.state=='heat'?'control-button_1':'control-button'}}" bindtap="onClimateHeat" data-state='{{item.state}}' data-temperature='{{item.temperature}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}' data-flag='onHeat'>  
-	  		  <image class="control-icon" />  
-	  		  <text class="control-text_zr">制热</text>  
-	  		</button>  
-	  		<button class="{{item.state=='cool'?'control-button_1':'control-button'}}" bindtap="onClimateCool" data-state='{{item.state}}' data-temperature='{{item.temperature}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}' data-flag='onCool'>  
-	  		  <image class="control-icon" />  
-	  		  <text class="control-text_zl">制冷</text>  
-	  		</button>  
-	  		<button class="{{item.state=='dry'?'control-button_1':'control-button'}}" bindtap="onClimateDehumidify" data-state='{{item.state}}' data-temperature='{{item.temperature}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}' data-flag='onDehumidify'>  
-	  		  <image class="control-icon" />  
-	  		  <text class="control-text_cs">除湿</text>  
-	  		</button>  
-	  		<button class="{{item.state=='fan_only'?'control-button_1':'control-button'}}" bindtap="onClimateAirSupply" data-state='{{item.state}}' data-temperature='{{item.temperature}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}' data-flag='onAirSupply'>  
-	  		  <image class="control-icon" />  
-	  		  <text class="control-text_sf">送风</text>  
-	  		</button>  
-	  		<button class="{{item.state=='off'?'control-button_1':'control-button'}}" bindtap="onClimateOff" data-state='{{item.state}}' data-temperature='{{item.temperature}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}'>  
-	  		  <image class="control-icon" />  
-	  		  <text class="control-text">关闭</text>  
-	  		</button>  
-	  </view>
-	</view>
-</view>
+            <view class="center-view">
+              <view class="title-line"></view>
+              <text class="gray-text">{{item.friendly_name}}</text>
+            </view>
+            <view class="data-media-player">
+              <image class="power-btn"
+                src="{{item.state=='on'? '/static/icons/ic_power.svg' : '/static/icons/ic_power_off.svg'}}"
+                data-param0="{{index}}" data-param1="/services" data-param2="/{{item.domain}}"
+                data-param3='{{item.state=="on"?"/turn_off":"/turn_on"}}' data-param4='{{item.state=="on"?"0":"1"}}'
+                data-param5="{{item.entity_id}}" bindtap="onTap_All">
+              </image>
+              <view class="data-card-v" style="width: 100%;">
+                <view class="echarts-container_humidityDial">
+                  <ec-canvas id="mychart-dom-gauge" canvas-id="mychart-gauge" ec="{{ ecHumidifier }}"></ec-canvas>
+                </view>
 
-<!-- <view wx:for="{{listMitvMediaPlayer}}" wx:for-index="index" wx:for-item="item" class="sliderItem">
-		 <view class="data-media-player" style="{{item.entity_picture}}  ">
-			 <view class="center-view">
-			   <text class="gray-text">{{item.friendly_name}}</text>  
-			 </view>
-			  
-			  <view class="tv_button-container">  
-			    <button class="tv_custom-button" bindtap="tvFanChange" data-id="{{item.entity_id}}" data-fan="TV" disabled="{{item.device_class!='tv'}}">电视模式</button>  
-			    <button class="tv_custom-button tv_disabled-button" bindtap="tvFanChange" data-id="{{item.entity_id}}" data-fan="HDMI1" disabled="{{item.device_class!='hdmi1'}}">机顶盒模式</button>  
-			  </view>
-			  
-		  </view>
-	</view> -->
-	
+                <view class="button-row" style="width: 100%;height: 112rpx;margin-left: 15rpx;">
+                  <image src="/static/icons/ic_minus.svg" style="width: 112rpx;height: 112rpx;"
+                    bindtap="onHumidifierDown" data-state='{{item.state}}' data-id="{{item.entity_id}}"
+                    data-domain='{{item.domain}}' data-min='{{item.min}}' data-max='{{item.max}}'
+                    data-humidity='{{item.humidity}}'></image>
+                  <van-slider bar-height="52rpx" active-color="#0BC3AA" class="tui-slider-box"
+                    bind:drag-end="handleTouchEndHumidifier" bind:drag="handleChangingHumidifier"
+                    bind:change="changeHumidity" step="1" min="{{item.min}}" max="{{item.max}}"
+                    data-id="{{item.entity_id}}" data-index="{{index}}" data-domain="{{item.domain}}"
+                    value="{{item.humidity}}" min="{{item.min}}" max="{{item.max}}" data-humidity="{{item.humidity}}">
+                  </van-slider>
+                  <image src="/static/icons/ic_add.svg" style="width: 112rpx;height: 112rpx;" bindtap="onHumidifierUp"
+                    data-state='{{item.state}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}'
+                    data-min='{{item.min}}' data-max='{{item.max}}' data-humidity='{{item.humidity}}'>
+                  </image>
+                </view>
+                <text
+                  style="{{'margin-left:'+humidityMarginLeft+'rpx;margin-top: -50rpx;min-height:50rpx'}}">{{sliderValueHumidifier
+                  ?
+                  sliderValueHumidifier +
+                  '%' : ''}}</text>
+              </view>
 
-	<view wx:for="{{listMiotMediaPlayer}}" wx:for-index="index" wx:for-item="item" class="sliderItem">
-		 <!-- 一行 -->
-		 <view class="data-media-player" style="{{item.entity_picture}}  ">
-			 <view class="center-view">
-			   <text class="gray-text">{{item.friendly_name}}</text>  
-			 </view>
-			  
-			  <view class="audio-player">  
-				<view class="controls">  
-				  <image class="control-button_media prev {{isClickedPrevSong ? 'clicked' : ''}}" src="/static/images/prev.png" bindtap="prevSong" wx:if="{{canPrev}}" data-state='{{item.state}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}'/>  
-				  <image class="control-button_media play {{isClickedTogglePlayPause ? 'clicked' : ''}}" src="{{item.state=='playing' ? '/static/images/pause.png' : '/static/images/play.png'}}" bindtap="togglePlayPause" data-state='{{item.state}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}'/>  
-				  <image class="control-button_media next {{isClickedNextSong ? 'clicked' : ''}}" src="/static/images/next.png" bindtap="nextSong" wx:if="{{canNext}}" data-state='{{item.state}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}' bindload="imageLoad"/>  
-				</view>  
-				<view class="progress">  
-				  <slider class="progress-bar" value="{{item.media_position}}" min="0" max="{{item.media_duration}}" bindchange="sliderChange" data-state='{{item.state}}' data-id="{{item.entity_id}}" data-domain='{{item.domain}}' />  
-				</view>  
-				<view class="info">  
-				  <text class="song-title">歌曲名称:{{item.media_title}}</text>  
-				  <text class="song-artist">演唱者:{{item.media_artist}}</text> 
-				   <!-- <text class="song-artist">歌曲名称:{{item.media_album_name}}</text> -->
-				</view>  
-			  </view>
-			  
-		  </view>
-	   <!-- 一行结束 -->
-	</view>
-		<!-- 一行结束 -->
-    </view>
-  </view>
-</view>
 
+            </view>
+          </view>
+          <!-- 空调 -->
+          <view class="test sliderItem" wx:for="{{listClimate}}" wx:for-index="index" wx:for-item="item">
+            <view class="center-view">
+              <view class="title-line"></view>
+              <text class="gray-text">{{item.friendly_name}}</text>
+            </view>
+            <view class="data-media-player">
+
+              <text class="value-display">
+                {{item.temperature}}<text class="value-display_unit">°C</text>
+              </text>
+              <view class="button-row" style="margin-left: 15rpx;">
+                <image src="/static/icons/ic_minus.svg" style="width: 112rpx;height: 112rpx;" bindtap="minusClimate"
+                  min="{{item.min_temp}}" max="{{item.max_temp}}" step="1" data-value="{{item.temperature}}"
+                  data-state="{{item.state}}" data-id="{{item.entity_id}}" data-domain="{{item.domain}}"
+                  data-min="{{item.min_temp}}" data-max="{{item.max_temp}}" data-temperature="{{item.temperature}}"
+                  data-fanMode="{{item.fan_mode}}"></image>
+                <van-slider bar-height="52rpx" active-color="#3A87FD" class="tui-slider-box" bind:change="changeClimate"
+                  min="{{item.min_temp}}" max="{{item.max_temp}}" step="1" value="{{item.temperature}}"
+                  data-state="{{item.state}}" data-id="{{item.entity_id}}" data-domain="{{item.domain}}"
+                  data-min="{{item.min_temp}}" data-max="{{item.max_temp}}" data-temperature="{{item.temperature}}"
+                  data-fanMode="{{item.fan_mode}}">
+                  <!-- <text style="color:black">{{sliderValueClimate}}</text> -->
+                </van-slider>
+                <image src="/static/icons/ic_add.svg" style="width: 112rpx;height: 112rpx;" bindtap="addClimate"
+                  min="{{item.min_temp}}" max="{{item.max_temp}}" step="1" data-value="{{item.temperature}}"
+                  data-state="{{item.state}}" data-id="{{item.entity_id}}" data-domain="{{item.domain}}"
+                  data-min="{{item.min_temp}}" data-max="{{item.max_temp}}" data-temperature="{{item.temperature}}"
+                  data-fanMode="{{item.fan_mode}}"></image>
 
+              </view>
+              <view class="air-conditioner-controls">
+                <view
+                  class="{{item.state=='auto'?'control-button_1':'control-button'}} {{isClickedOnClimateAuto ? 'clicked' : ''}}"
+                  bindtap="onClimateAuto" data-state="{{item.state}}" data-temperature="{{item.temperature}}"
+                  data-id="{{item.entity_id}}" data-domain="{{item.domain}}">
+                  <image class="control-icon" src="/static/icons/ic_auto_1.svg" />
+                  <text class="{{item.state=='auto'? 'control-text_select' :'control-text'}}">自动</text>
+                </view>
+                <view class="{{item.state=='heat'?'control-button_1':'control-button'}}" bindtap="onClimateHeat"
+                  data-state="{{item.state}}" data-temperature="{{item.temperature}}" data-id="{{item.entity_id}}"
+                  data-domain="{{item.domain}}" data-flag="onHeat">
+                  <image class="control-icon" src="/static/icons/ic_hot_1.svg" />
+                  <text class="{{item.state=='heat'? 'control-text_select' :'control-text'}}">制热</text>
+                </view>
+                <view class="{{item.state=='cool'?'control-button_1':'control-button'}}" bindtap="onClimateCool"
+                  data-state="{{item.state}}" data-temperature="{{item.temperature}}" data-id="{{item.entity_id}}"
+                  data-domain="{{item.domain}}" data-flag="onCool">
+                  <image class="control-icon" src="/static/icons/ic_cold_1.svg" />
+                  <text class="{{item.state=='cool'? 'control-text_select' :'control-text'}}">制冷</text>
+                </view>
+                <view class="{{item.state=='dry'?'control-button_1':'control-button'}}" bindtap="onClimateDehumidify"
+                  data-state="{{item.state}}" data-temperature="{{item.temperature}}" data-id="{{item.entity_id}}"
+                  data-domain="{{item.domain}}" data-flag="onDehumidify">
+                  <image class="control-icon" src="/static/icons/ic_moisture_1.svg" />
+                  <text class="{{item.state=='dry'? 'control-text_select' :'control-text'}}">除湿</text>
+                </view>
+                <view class="{{item.state=='fan_only'?'control-button_1':'control-button'}}"
+                  bindtap="onClimateAirSupply" data-state="{{item.state}}" data-temperature="{{item.temperature}}"
+                  data-id="{{item.entity_id}}" data-domain="{{item.domain}}" data-flag="onAirSupply">
+                  <image class="control-icon" src="/static/icons/ic_wind_1.svg" />
+                  <text class="{{item.state=='fan_only'? 'control-text_select' :'control-text'}}">送风</text>
+                </view>
+                <!-- 关闭要单独拿出来 -->
+                <!-- <view class="{{item.state=='off'?'control-button_1':'control-button'}}" bindtap="onClimateOff"
+                  data-state="{{item.state}}" data-temperature="{{item.temperature}}" data-id="{{item.entity_id}}"
+                  data-domain="{{item.domain}}">
+                  <image class="control-icon" />
+                  <text class="{{item.state=='off'? 'control-text_select' :'control-text'}}">关闭</text>
+                </view> -->
+              </view>
+              <view class="airConditioning-title">
+                <image src="/static/icons/ic_output_air.svg"></image>
+                <text>{{temperatureHumidifyName}}:{{item.temperature}}°C</text>
+              </view>
+              <image class="power-btn"
+                src="{{item.state=='off'? '/static/icons/ic_power_off.svg' : '/static/icons/ic_power.svg'}}"
+                bindtap="onClimateOff" data-state="{{item.state}}" data-temperature="{{item.temperature}}"
+                data-id="{{item.entity_id}}" data-domain="{{item.domain}}"></image>
 
+            </view>
+          </view>
+          <view wx:for="{{listMiotMediaPlayer}}" wx:for-index="index" wx:for-item="item" class="sliderItem">
+            <!-- 一行 -->
+            <view class="data-media-player" style="{{item.entity_picture}}">
+              <!-- 标题 -->
+              <view class="center-view">
+                <view class="title-line"></view>
+                <text class="gray-text">{{item.friendly_name}}</text>
+              </view>
+              <view class="audio-player">
+                <view class="controls">
+                  <image class="control-button_media prev {{isClickedPrevSong ? 'clicked' : ''}}"
+                    src="/static/images/prev.png" bindtap="prevSong" wx:if="{{canPrev}}" data-state="{{item.state}}"
+                    data-id="{{item.entity_id}}" data-domain="{{item.domain}}" />
+                  <image class="control-button_media play {{isClickedTogglePlayPause ? 'clicked' : ''}}"
+                    src="{{item.state=='playing' ? '/static/images/pause.png' : '/static/images/play.png'}}"
+                    bindtap="togglePlayPause" data-state="{{item.state}}" data-id="{{item.entity_id}}"
+                    data-domain="{{item.domain}}" />
+                  <image class="control-button_media next {{isClickedNextSong ? 'clicked' : ''}}"
+                    src="/static/images/next.png" bindtap="nextSong" wx:if="{{canNext}}" data-state="{{item.state}}"
+                    data-id="{{item.entity_id}}" data-domain="{{item.domain}}" bindload="imageLoad" />
+                </view>
+                <view class="progress">
+                  <slider class="progress-bar" value="{{item.media_position}}" min="0" max="{{item.media_duration}}"
+                    bindchange="sliderChange" data-state="{{item.state}}" data-id="{{item.entity_id}}"
+                    data-domain="{{item.domain}}" />
+                </view>
+                <view class="info">
+                  <text class="song-title">歌曲名称:{{item.media_title}}</text>
+                  <text class="song-artist">演唱者:{{item.media_artist}}</text>
+                  <!-- <text class="song-artist">歌曲名称:{{item.media_album_name}}</text> -->
+                </view>
+              </view>
+            </view>
+            <!-- 一行结束 -->
+          </view>
+          <!-- 一行结束 -->
+        </view>
+      </view>
+    </view>
+  </view>
+  <van-overlay show="{{ menuTabDialogShow }}" z-index="10086">
+    <view style="height: 100vh;display: flex;flex-direction: column;justify-content: center;">
+      <view style="position: relative;">
+        <image wx:if="{{currentDialogIndex == 0}}" src="/static/bg/ic_qcms_bg.png"
+          style="display: block;width: 620rpx;height: 380rpx; margin: 0 auto;" />
+
+        <view wx:if="{{currentDialogIndex == 0}}" class="dialog-content">
+          <view class="dialog-h">
+            <image class="dialog-icon" src="/static/bg/ic_qcms.png" />
+            <text class="dialog-title">起床模式</text>
+          </view>
+          <text class="dialog-desc">自动调节灯光、窗帘、播放轻柔音乐等, 营造一个舒适温馨的起床环境。</text>
+        </view>
+        <image wx:if="{{currentDialogIndex == 1}}" src="/static/bg/ic_gyms_bg.png"
+          style="display: block;width: 620rpx;height: 380rpx; margin: 0 auto;" />
+        <view wx:if="{{currentDialogIndex == 1}}" class="dialog-content">
+          <view class="dialog-h">
+            <image class="dialog-icon" src="/static/bg/ic_gyms.png" />
+            <text class="dialog-title">观影模式</text>
+          </view>
+          <text class="dialog-desc">一键切换至最佳视听环境,自动调节灯光、窗帘及电视等设置,为您打造沉浸式的观影体验。</text>
+        </view>
+        <image wx:if="{{currentDialogIndex == 2}}" src="/static/bg/ic_smms_bg.png"
+          style="display: block;width: 620rpx;height: 380rpx; margin: 0 auto;" />
+        <view wx:if="{{currentDialogIndex == 2}}" class="dialog-content">
+          <view class="dialog-h">
+            <image class="dialog-icon" src="/static/bg/ic_smms.png" />
+            <text class="dialog-title" style="color: #FDFFC5;">睡眠模式</text>
+          </view>
+          <text class="dialog-desc" style="color: white;">自动调暗灯光、关闭窗帘、播放睡眠视频、音乐及调节室内温度、湿度,营造一个安静舒适的睡眠环境。</text>
+        </view>
+        <text class="dialog-sure-btn" bindtap="onClickHideSureMenuTabDialog">确定</text>
+      </view>
+      <image src="/static/icons/ic_dialog_close.svg"
+        style="display: block;width: 56rpx;height: 56rpx; margin: 30rpx auto;" bindtap="onClickHideMenuTabDialog" />
+    </view>
+  </van-overlay>
+</view>

Datei-Diff unterdrückt, da er zu groß ist
+ 573 - 364
pages/index/index.wxss


+ 2 - 1
pages/scan/scan.json

@@ -1,4 +1,5 @@
 {
   "navigationBarTitleText": "扫描二维码",
-  "usingComponents": {}
+  "usingComponents": {},
+  "navigationStyle": "custom"
 }

+ 13 - 7
pages/scan/scan.wxml

@@ -1,9 +1,15 @@
 <view class="container">
-  <!-- <image class="top-image" src="/static/images/scan.png" mode="widthFix"></image> -->
-  <text class="scan-tip-top">舒眠大健康</text> 
-  <view class="scan-button" bindtap="tapScan">  
-    <image class="scan-icon"></image>  
-    <text class="scan-text">点击扫码</text>  
-  </view>  
-  <text class="scan-tip">扫描成功后将跳转至睡眠控制主页</text>  
+  <image class="bg-image" src="/static/images/ic_scan_bg.png" mode="widthFix"></image>
+  <view class="scan-body">
+    <van-nav-bar title="扫描二维码" left-text="" left="" custom-class="nav-bar"></van-nav-bar>
+    <view class="scan-content">
+      <image class="bg-phone-image" src="/static/images/ic_phone_bg.png" mode="widthFix"></image>
+      <text class="scan-tips">扫描成功后将跳转至睡眠控制主页</text>
+      <view class="scan-btn-box" bindtap="tapScan">
+        <image src="/static/icons/ic_scan.svg"></image>
+        <text>点击扫码</text>
+      </view>
+    </view>
+
+  </view>
 </view>

+ 87 - 61
pages/scan/scan.wxss

@@ -4,68 +4,94 @@
   -moz-background-size: 100% 100%;
   background-color: #333;
 } */
-.container {  
-  display: flex;  
-  flex-direction: column;  
-  align-items: center;  
-  justify-content: center;  
-  height: 100vh; 
-  /* background-color: #f0f4f8; */
-  /* background-color: #ffffff; */
-  padding: 10px;  
-  background: -webkit-linear-gradient(bottom,rgb(145, 145, 253),rgb(72, 0, 240),rgb(70, 0, 221));
-  /* background-image: url("../../static/images/s.png");
-  background-size: 100% 100%;
-  background-repeat: no-repeat; */
-}  
-  
-.scan-button {  
-  display: flex;  
-  flex-direction: column;  
-  align-items: center;  
-  justify-content: center;  
-  width: 400rpx;  
-  height: 400rpx;  
-  border-radius: 50%; /* 圆形按钮 */ 
-   /* border: 5rpx solid #ff5500; */
-  /* background: -webkit-linear-gradient(bottom,rgb(157, 146, 168),rgb(125, 96, 168),rgb(112, 56, 168, 0.9)); */
-  box-shadow: 0 8rpx 20rpx rgba(170, 255, 255, 0.1), 0 8px 20px rgba(85, 255, 127, 0.1); /* 阴影效果 */  
-  margin-bottom: 40rpx;  
-}  
-  
-.scan-icon {  
-  width: 160rpx;  
-  height: 160rpx;  
-}  
-  
-.scan-text {  
-  font-size: 45rpx;  
-  color: #30aa30; /* 文字颜色 */  
-  text-align: center;  
-  margin-top: 10px;  
-}  
-  
-.scan-tip {  
-  font-size: 30rpx;  
-  color: #c6c6c6; /* 提示文字颜色 */  
-  text-align: center;  
+.container {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  width: 100%;
+  height: 100vh;
+  overflow: hidden;
+  position: relative;
+}
+
+.bg-image {
+  width: 100vw;
+  display: block;
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: -1;
+}
+
+.scan-body {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  width: 100%;
+  height: 100vh;
 }
-.scan-tip-top {
-  font-size: 60rpx;
-  margin:0rpx 0 150rpx 0;
-  font-weight: 900;
-  color: transparent; /* 文本颜色设置为透明,以便显示渐变背景 */  
-  background-clip: text; /* 背景裁剪为文本 */  
-  -webkit-background-clip: text; /* 兼容 Safari */
-  background-image: linear-gradient(to right, #91a4ea, #9e7fec); /* 应用渐变背景 */
-  text-align: center;  
+
+.nav-bar {
+  width: 100vw;
+  background-color: transparent !important;
+  background: transparent !important;
+  position: sticky;
+  top: 0;
+  left: 0;
+}
+
+.scan-content {
+  display: flex;
+  flex: 1;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  width: 100%;
+  position: relative;
+}
+
+.bg-phone-image {
+  width: 480rpx;
+  display: block;
+}
+
+.scan-tips {
+  font-size: 24rpx;
+  color: #6C6970;
+  width: 480rpx;
+  text-align: center;
+  position: absolute;
+  left: 135rpx;
+  top: 740rpx;
+}
+
+
+.scan-btn-box {
+  position: absolute;
+  left: 60rpx;
+  bottom: 250rpx;
+  width: 630rpx;
+  height: 90rpx;
+  display: flex;
+  border-radius: 45rpx;
+  flex-direction: row;
+  align-items: center;
+  justify-content: center;
+  background: linear-gradient(315deg, #0ABCA4 0%, rgba(11, 195, 170, 0.8) 100%);
+}
+
+.scan-btn-box image {
+  width: 40rpx;
+  height: 40rpx;
+  display: block;
+}
+
+.scan-btn-box text {
+  font-size: 32rpx;
+  margin-left: 20rpx;
+  color: #FFFFFF;
 }
 
-.top-image {  
-  width: 100%; /* 宽度为屏幕宽度 */  
-  height: 100%; /* 高度为100rpx */  
-  position: fixed; /* 固定在屏幕顶部 */  
-  top: 0; /* 距离顶部0rpx */  
-  left: 0; /* 距离左侧0rpx */  
-  z-index: 999; /* 设置较高的z-index以确保在其他内容之上 */  
+.scan-btn-box:active {
+  opacity: 0.7;
 }

+ 66 - 0
pages/shop/shop.js

@@ -0,0 +1,66 @@
+// pages/shop/shop.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage() {
+
+  }
+})

+ 3 - 0
pages/shop/shop.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 2 - 0
pages/shop/shop.wxml

@@ -0,0 +1,2 @@
+<!--pages/shop/shop.wxml-->
+<text class="test">pages/shop/shop.wxml</text>

+ 4 - 0
pages/shop/shop.wxss

@@ -0,0 +1,4 @@
+/* pages/shop/shop.wxss */
+.test{
+  font-size: 26rpx;
+}

+ 0 - 428
pages/sleepEvaluation/sleepEvaluation.js

@@ -1,428 +0,0 @@
-Page({  
-  data: {  
-    gender: '',  
-    ageOptions: [
-      { value: '0', label: '20岁以下' },  
-      { value: '1', label: '20-29岁' },
-	  { value: '2', label: '30-39岁' },
-	  { value: '3', label: '40-49岁' },
-	  { value: '4', label: '50岁以上' },
-    ],
-	careerOptions: [
-	  { value: '0', label: '学生' },  
-	  { value: '1', label: '上班族' },
-	  { value: '2', label: '自由职业者' },
-	  { value: '3', label: '企业经营者' },
-	  { value: '4', label: '政府、事业等单位人员' },
-	  { value: '5', label: '其他(请注明)' },
-	], 
-	noSatisfiedOptions: [
-	  { value: '0', label: '设备操作有困难' },  
-	  { value: '1', label: '对睡眠帮助较小' },
-	  { value: '2', label: '其他原因(请详细说明)' },
-	],
-	career:'',
-	careerInput:'',
-    stayExperOptions: [  
-      { value: '0', label: '非常好' },  
-      { value: '1', label: '较好' },  
-      { value: '2', label: '一般' }, 
-	  { value: '3', label: '较差' }, 
-	  { value: '4', label: '非常差' }, 
-    ],  
-	stayExper:'',
-    comfortOptions: [  
-      { value: '0', label: '非常舒适' },  
-      { value: '1', label: '舒适' },  
-      // ... 其他选项  
-    ],  
-    improvementOptions: [  
-      { value: '0', label: '舒适度' },  
-      { value: '1', label: '功能性' },  
-      // ... 其他选项  
-    ], 
-	 //哪些方式来帮助改善睡眠
-	improvementSleepOptions: [
-	  { value: '0', label: '调整作息时间' },  
-	  { value: '1', label: '锻炼' },  
-	  { value: '2', label: '使用助眠产品(如香薰、耳塞、眼罩等)' },
-	  { value: '3', label: '冥想或深呼吸' },
-	  { value: '4', label: '寻求医疗帮助' },
-	  { value: '5', label: '不采取措施' },
-	],
-	//哪些方面让您比较满意
-	satisfiedOptions: [
-	  { value: '0', label: '便捷的设备操作' },  
-	  { value: '1', label: '适宜的睡眠环境' },  
-	  { value: '2', label: '人性化的睡眠监测' }, 
-	  { value: '3', label: '体贴的睡眠辅助设施(如助眠视频、音乐等)' }, 
-	  
-	],  
-	wayImprovementSleepOptions: [
-	  { value: '0', label: '监测睡眠质量和提供反馈' },  
-	  { value: '1', label: '自动调整睡眠环境(如温度、光线)' },  
-	  { value: '2', label: '提供个性化的睡眠建议' }, 
-	  { value: '3', label: '远程医疗咨询或诊断' }, 
-	  { value: '4', label: '其他[请在此区域内作答]' }, 
-	],
-	getSleepHealthOptions: [
-	  { value: '0', label: '互联网' },  
-	  { value: '1', label: '社交媒体' },  
-	  { value: '2', label: '书籍或杂志' }, 
-	  { value: '3', label: '医疗专业人士' }, 
-	  { value: '4', label: '朋友或家人' }, 
-	  { value: '5', label: '其他[请在此区域内作答]' },
-	],
-	influenceSleepOptions: [
-	  { value: '0', label: '工作压力' },  
-	  { value: '1', label: '生活压力' },  
-	  { value: '2', label: '环境噪音' }, 
-	  { value: '3', label: '光线过亮' }, 
-	  { value: '4', label: '身体不适(如疼痛、消化不良等)' }, 
-	  { value: '5', label: '心理问题(如焦虑、抑郁等)' },
-	  { value: '6', label: '其他(请注明)' },
-	],
-	improvSleepMethodsOptions: [
-	  { value: '0', label: '听轻音乐' },  
-	  { value: '1', label: '喝热牛奶' },  
-	  { value: '2', label: '进行放松训练(如深呼吸、冥想等)' }, 
-	  { value: '3', label: '使用助眠药物' }, 
-	  { value: '4', label: '其他(请注明)' }, 
-	],
-    sleepEnvironmentComfort: '',  
-    productComfort: '',  
-	improvementAreas: [], // 使用数组来存储多选答案  
-	ImprovementSleep: [],//哪些方式来帮助改善睡眠
-	satisfied: [],// 哪些方面让您比较满意
-    suggestion: '', // 文本输入的建议
-	thirdPlatformsInput: '',//填写第三方平台
-	noSatisfied: '',//体验不满意的原因
-	wayImprovementSleep: '',//哪些方式来帮助改善睡眠
-	wayImprovementSleepInput: '',//请填写帮助改善睡眠方式文本
-	getSleepHealth: [],// 从哪里获取关于睡眠健康的信息
-	getSleepHealthInput: '',//您通常从哪里获取关于睡眠健康的信息文本
-	influenceSleep: [],//您认为以下哪些因素会影响您的睡眠
-	influenceSleepInput: '',//您认为以下哪些因素会影响您的睡眠文本
-	improvSleepMethods: [],//您认为以下哪些因素会影响您的睡眠
-	improvSleepMethodsInput: '',//您认为以下哪些因素会影响您的睡眠文本
-	age: '',//您的年龄
-	noSatisfiedInput: '',//让您对本次睡眠房入住体验不满意的原因是文本
-	channel: '',//您是通过什么渠道预定到的本酒店睡眠房?
-	hotel: '',//酒店
-	room: '',//房间
-  },  
-  
-    // 处理性别选择  
-    bindGenderChange: function(e) {  
-      this.setData({  
-        gender: e.detail.value  
-      });  
-    },  
-    
-    // 处理入住体验的选择  
-    bindStayExperOptions: function(e) {  
-      this.setData({  
-        stayExper: e.detail.value  
-      });  
-    },  
-    
-    // 处理睡眠环境舒适度(温度、湿度)的选择  
-    bindSleepEnvironmentComfort: function(e) {  
-      this.setData({  
-        sleepEnvironmentComfort: e.detail.value  
-      });  
-    },  
-    
-    // 处理睡眠产品舒适度的选择  
-    bindProductComfort: function(e) {  
-      this.setData({  
-        productComfort: e.detail.value  
-      });  
-    },  
-    
-    // 处理改进空间的多选问题  
-    bindImprovementAreas: function(e) {  
-      this.setData({  
-        improvementAreas: e.detail.value   
-      });  
-    },  
-    bindChannelChange: function(e) {  
-	  this.setData({  
-	    channel: e.detail.value   
-	  });  
-	},
-	// 改善睡眠
-	bindImprovementSleep: function(e) {  
-	  this.setData({  
-	    improvementSleep: e.detail.value   
-	  });  
-	}, 
-	
-	// 改善睡眠
-	bindGetSleepHealth: function(e) {  
-	  this.setData({  
-	    getSleepHealth: e.detail.value   
-	  });  
-	}, 
-	
-	//您认为以下哪些因素会影响您的睡眠
-	bindInfluenceSleep: function(e) {
-	  this.setData({  
-	    influenceSleep: e.detail.value   
-	  });  
-	}, 
-	
-	//您通常使用什么方法来改善睡眠质量
-	bindImprovSleepMethods: function(e) {
-	  this.setData({  
-	    improvSleepMethods: e.detail.value   
-	  });  
-	},
-	
-	// 体验不满意的原因
-	bindNoSatisfiedChange: function(e) {  
-	  this.setData({  
-	    noSatisfied: e.detail.value  
-	  });  
-	},  
-	
-	bindCareerChange: function(e) {  
-	  this.setData({  
-	    career: e.detail.value  
-	  });  
-	},
-	bindAgeChange: function(e) {  
-	  this.setData({  
-	    age: e.detail.value  
-	  });  
-	},
-	
-	// 哪些方面的多选问题
-	bindSatisfied: function(e) {  
-	  this.setData({
-	    satisfied: e.detail.value   
-	  });  
-	},
-	
-	// 哪些方式来帮助改善睡眠
-	bindWayImprovementSleep: function(e) {  
-	  this.setData({  
-	    wayImprovementSleep: e.detail.value  
-	  });  
-	},  
-	bindNoSatisfiedInput: function(e) {  
-      this.setData({  
-        noSatisfiedInput: e.detail.value  
-      });  
-    }, 
-    bindCareerInputInput: function(e) {  
-      this.setData({  
-        careerInput: e.detail.value  
-      });  
-    },  
-	
-	bindGetSleepHealthInput: function(e) {  
-	  this.setData({  
-	    getSleepHealthInput: e.detail.value  
-	  });  
-	},  
-	
-	
-	bindInfluenceSleepInput: function(e) {  
-	  this.setData({  
-	    influenceSleepInput: e.detail.value  
-	  });  
-	}, 
-	
-	bindImprovSleepMethodsInput: function(e) {  
-	  this.setData({  
-	    improvSleepMethodsInput: e.detail.value  
-	  });  
-	}, 
-	
-	// 方式来帮助改善睡眠文本输入
-	bindWayImprovementSleepInput: function(e) {  
-	  this.setData({  
-	    wayImprovementSleepInput: e.detail.value  
-	  });  
-	}, 
-	
-	bindThirdPlatformsInputInput: function(e) {
-	  this.setData({  
-	    thirdPlatformsInput: e.detail.value  
-	  });  
-	}, 
-	
-	// 职业填写
-	bindSuggestionInput: function(e) {  
-	  this.setData({  
-	    suggestion: e.detail.value  
-	  }); 
-    },
-    // 提交问卷的函数  
-    submitSurvey: function() {
-		
-      let surveyData = {
-		hotel: this.data.hotel,
-		room: this.data.room,
-        gender: this.data.gender,  
-        stayExper: this.data.stayExper,  
-        sleepEnvironmentComfort: this.data.sleepEnvironmentComfort,  
-        productComfort: this.data.productComfort,  
-        improvementAreas: this.data.improvementAreas, 
-		satisfied: this.data.satisfied, 
-        suggestion: this.data.suggestion,  
-		career: this.data.career,
-		careerInput: this.data.careerInput, 
-		thirdPlatformsInput: this.data.thirdPlatformsInput, 
-		noSatisfied: this.data.noSatisfied,
-		noSatisfiedInput: this.data.noSatisfiedInput,
-		improvementSleep: this.data.improvementSleep,
-		wayImprovementSleep: this.data.wayImprovementSleep,
-		wayImprovementSleepInput: this.data.wayImprovementSleepInput,
-		getSleepHealth: this.data.getSleepHealth,
-		bindGetSleepHealthInput: this.data.bindGetSleepHealthInput,
-		influenceSleep: this.data.influenceSleep,
-		influenceSleepInput: this.data.influenceSleepInput,
-		improvSleepMethods: this.data.improvSleepMethods,
-		improvSleepMethodsInput: this.data.improvSleepMethodsInput,
-		age: this.data.age,
-		channel: this.data.channel,
-      };  
-    
-      // 将surveyData发送到服务器  
-      console.log('提交的问卷数据:', surveyData); 
-	   
-	    //后边会提交到数据库
-	    //   wx.request({
-		//   url: `${aipushApi}/getdatefromsn`, //
-		//   method: 'POST',
-		// 	header: {
-		// 		  'content-type': 'application/json', // 默认值
-		// 		  'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
-		// 	 },
-		// 	data:{
-		// 	     "surveyData":surveyData,"token":"token_push"
-		// 	 },
-		//   success(res) {
-		// 	wx.showToast({
-		// 	  title: '问卷提交成功',  
-		// 	  icon: 'success',  
-		// 	  duration: 2000  
-		// 	}); 
-			
-		//   },
-		//   fail: function (error) {
-		// 	  console.error('error', error);  
-		// 	} ,
-		//   complete: function (e) {
-		//   }
-		// });	
-			
-    
-      wx.showToast({  
-        title: '问卷提交成功',  
-        icon: 'success',  
-        duration: 2000  
-      });  
-    
-	  // 清空表单:  
-      // this.setData({  
-		  // gender: '', 
-		  // careerInput:'',
-		  // stayExper:'',
-		  // sleepEnvironmentComfort: '',  
-		  // productComfort: '',  
-		  // improvementAreas: [], // 使用数组来存储多选答案  
-		  // ImprovementSleep: [],//哪些方式来帮助改善睡眠
-		  // satisfied: [],// 哪些方面让您比较满意
-		  // suggestion: '', // 文本输入的建议
-		  // thirdPlatformsInput: '',//填写第三方平台
-		  // noSatisfied: '',//体验不满意的原因
-		  // wayImprovementSleep: '',//哪些方式来帮助改善睡眠
-		  // wayImprovementSleepInput: '',//请填写帮助改善睡眠方式文本
-		  // getSleepHealth: [],// 从哪里获取关于睡眠健康的信息
-		  // getSleepHealthInput: '',//您通常从哪里获取关于睡眠健康的信息文本
-		  // influenceSleep: [],//您认为以下哪些因素会影响您的睡眠
-		  // influenceSleepInput: '',//您认为以下哪些因素会影响您的睡眠文本
-		  // improvSleepMethods: [],//您认为以下哪些因素会影响您的睡眠
-		  // improvSleepMethodsInput: '',//您认为以下哪些因素会影响您的睡眠文本
-		  // age: '',//您的年龄
-		  // noSatisfiedInput: '',//让您对本次睡眠房入住体验不满意的原因文本
-		  // channel: '',
-      // });  
-    },  
-    onLoad(option){
-    	var that = this;
-    	console.log("sleepEvaluation页面");
-      // wx.clearStorage();
-      console.log('option.res='+JSON.stringify(wx.getStorageSync('res')));
-      if(!wx.getStorageSync('res') || !wx.getStorageSync('res').result){
-    	  wx.showModal({
-    	    title: '提示',
-    	    content: '请先扫描房间二维码',
-    	    showCancel: false
-    	  });
-    
-    	  setTimeout(function() {
-    	      wx.reLaunch({
-    	      		url: '/pages/scan/scan',
-    	      })
-    	    }, 2000) // 设置延时时间,单位为毫秒
-      }else if(wx.getStorageSync('res').result.split('|').length != 2){
-    	  wx.showModal({
-    	    title: '提示',
-    	    content: '房间二维码不正确,请重新扫码',
-    	    showCancel: false
-    	  });
-    	  
-    	  setTimeout(function() {
-    	      wx.reLaunch({
-    	      		url: '/pages/scan/scan',
-    	      })
-    	    }, 2000) // 设置延时时间,单位为毫秒
-      }else{
-		  // const expiresAt = wx.getStorageSync('scanResultExpiresAt');
-		  // const now = Date.now() 
-		  // if (expiresAt || expiresAt < now) {
-		  //   // 扫码结果已过期  
-		  //   wx.showToast({  
-		  //     title: '扫码结果失效或已过期,请重新扫码',  
-		  //     icon: 'none'  
-		  //   });  
-		  //   // 清除过期的扫码结果  
-		  //   wx.removeStorageSync('scanResultExpiresAt');  
-		  //   setTimeout(function() {
-		  //       wx.reLaunch({
-		  //       		url: '/pages/scan/scan',
-		  //       })
-		  //     }, 2000) // 设置延时时间,单位为毫秒
-		  	
-		  // }else{
-		  // 	//续期
-		  // 	wx.setStorageSync('scanResultExpiresAt', Date.now() + 2 * 60 * 60 * 1000)
-		  // }
-		  
-    	  let hotelTemp = '';
-    	  let roomTemp = '';
-    	  
-    	  hotelTemp = wx.getStorageSync('res').result.split('|')[0];
-    	  roomTemp = wx.getStorageSync('res').result.split('|')[1];
-		  this.setData({
-		    hotel: hotelTemp,
-		    room: roomTemp,
-		  }); 
-		}
-    },
-	/**
-	 * 生命周期函数--监听页面隐藏
-	 */
-	onHide: function() {
-	},
-	/**
-	 * 生命周期函数--监听页面卸载
-	 */
-	onUnload: function() {
-		
-	},
-});

+ 0 - 4
pages/sleepEvaluation/sleepEvaluation.json

@@ -1,4 +0,0 @@
-{
-  "usingComponents": {
-  }
-}

+ 0 - 151
pages/sleepEvaluation/sleepEvaluation.wxml

@@ -1,151 +0,0 @@
-<view class="container">  
-  <!-- 基本信息 -->  
-  <view class='title'>服务满意度调查问卷</view>
-  <view class="section">
-    <text style="font-weight:600">指导语:</text>  
-    <text>您好!非常感谢您在百忙之中填写这份问卷。为了更好地了解您的入住体验,并根据您的建议进行持续完善。我们特此开展此次调查。请您根据自己的实际情况如实回答,所有数据将严格保密,仅用于研究分析。本问卷大约需要5-10分钟时间,请您耐心完成。您的意见对于我们而言至关重要。</text> 
-  </view> 
-  <view class='title_1'>一、基本信息</view>
-  <view class="section">
-    <text>1.您的年龄:</text>  
-    <radio-group bindchange="bindAgeChange">
-      <block wx:for="{{ageOptions}}" wx:key="index">  
-        <label><radio value="{{item.value}}">{{item.label}}</radio></label>  
-      </block>  
-    </radio-group> 
-  </view>
-  <view class="section">
-    <text>2.您的职业:</text>  
-    <radio-group bindchange="bindCareerChange">
-      <block wx:for="{{careerOptions}}" wx:key="index">  
-        <label wx:if="{{index<5}}"><radio value="{{item.value}}">{{item.label}}</radio></label>
-		<label wx:else><radio value="{{item.value}}">{{item.label}}</radio>
-			<input type="text" placeholder="请填写您的职业" bindinput="bindCareerInputInput" />
-		</label>
-      </block>  
-    </radio-group> 
-  </view>
-  <view class="section_age">  
-    <text>3.您的性别:</text>  
-    <radio-group bindchange="bindGenderChange">  
-      <label><radio value="0">男</radio></label>  
-      <label><radio value="1">女</radio></label> 
-	  <label><radio value="2">不愿透露</radio></label>
-    </radio-group>
-  </view> 
-   
-   <view class="section">
-     <text>4、您是通过什么渠道预定到的本酒店睡眠房?</text>  
-     <radio-group bindchange="bindChannelChange">  
-       <label><radio value="0">酒店散客</radio></label>  
-	   <label><radio value="1">朋友推荐</radio></label>
-       <label><radio value="2">第三方平台(如携程、去哪儿网、飞猪、同程等)</radio>
-		<input class="custom-input" type="text" placeholder="请填写第三方平台" bindinput="bindThirdPlatformsInputInput" />
-	   </label> 
-     </radio-group>
-   </view>
-  <view class='title_1'>二、用户体验</view>
-  <!-- 睡眠环境评价 -->  
-  <view class="section_stayExper">  
-    <text>5、睡眠房的入住体验怎么样?</text>  
-    <radio-group bindchange="bindStayExperOptions">  
-      <block wx:for="{{stayExperOptions}}" wx:key="index">  
-        <label><radio value="{{item.value}}">{{item.label}}</radio></label>  
-      </block>  
-    </radio-group>  
-  </view>  
-  
-  <view class="section">  
-    <text>6、入住之后,您觉得哪些方面让您比较满意?(多选)</text>  
-    <checkbox-group bindchange="bindSatisfied">  
-      <block wx:for="{{satisfiedOptions}}" wx:key="index">  
-        <label><checkbox value="{{item.value}}">{{item.label}}</checkbox></label>  
-      </block>  
-    </checkbox-group>  
-  </view> 
-  
-  <view class="section">
-    <text>7、让您对本次睡眠房入住体验不满意的原因是?</text>  
-    <radio-group bindchange="bindNoSatisfiedChange">
-      <block wx:for="{{noSatisfiedOptions}}" wx:key="index">  
-        <label wx:if="{{index<2}}"><radio value="{{item.value}}">{{item.label}}</radio></label>
-  		<label wx:else><radio value="{{item.value}}">{{item.label}}</radio>
-  			<input class="custom-input" type="text" placeholder="请填写体验不满意的原因" bindinput="bindNoSatisfiedInput" />
-  		</label>
-      </block>  
-    </radio-group> 
-  </view>
-  
-  <view class="section">  
-    <text>8、您通常采取什么措施来改善睡眠?(多选)</text>  
-    <checkbox-group bindchange="bindImprovementSleep">  
-      <block wx:for="{{improvementSleepOptions}}" wx:key="index">  
-        <label><checkbox value="{{item.value}}">{{item.label}}</checkbox></label>  
-      </block>  
-    </checkbox-group>  
-  </view>  
-  
-  <view class="section">
-    <text>9、您倾向于下面哪些方式来帮助改善睡眠?</text>  
-    <radio-group bindchange="bindWayImprovementSleep">
-      <block wx:for="{{wayImprovementSleepOptions}}" wx:key="index">  
-        <label wx:if="{{index<4}}"><radio value="{{item.value}}">{{item.label}}</radio></label>
-  		<label wx:else><radio value="{{item.value}}">{{item.label}}</radio>
-  			<input class="custom-input" type="text" placeholder="请填写帮助改善睡眠方式" bindinput="bindWayImprovementSleepInput" />
-  		</label>
-      </block>  
-    </radio-group> 
-  </view>
-  
-  
-  <view class="section">
-    <text>10、您通常从哪里获取关于睡眠健康的信息?(多选)</text>  
-    <checkbox-group bindchange="bindGetSleepHealth">  
-      <block wx:for="{{getSleepHealthOptions}}" wx:key="index">  
-        <label wx:if="{{index<5}}"><checkbox value="{{item.value}}">{{item.label}}</checkbox></label> 
-		 <label wx:else><checkbox value="{{item.value}}">{{item.label}}</checkbox>
-		 	<input class="custom-input" type="text" placeholder="请填写从哪里获取关于睡眠健康的信息" bindinput="bindGetSleepHealthInput" />
-		 </label>
-      </block>  
-    </checkbox-group>  
-  </view>  
-  <view class='title_1'>三、影响睡眠的因素</view>
-  <view class="section">
-    <text>11、您认为以下哪些因素会影响您的睡眠?(多选)</text>  
-    <checkbox-group bindchange="bindInfluenceSleep">  
-      <block wx:for="{{influenceSleepOptions}}" wx:key="index">  
-        <label wx:if="{{index<6}}"><checkbox value="{{item.value}}">{{item.label}}</checkbox></label> 
-  		 <label wx:else><checkbox value="{{item.value}}">{{item.label}}</checkbox>
-  		 	<input class="custom-input" type="text" placeholder="请填写影响您的睡眠因素" bindinput="bindInfluenceSleepInput" />
-  		 </label>
-      </block>  
-    </checkbox-group>  
-  </view>  
-	
-  <view class="section">
-    <text>12、您通常使用什么方法来改善睡眠质量?(多选)</text>  
-    <checkbox-group bindchange="bindImprovSleepMethods">  
-      <block wx:for="{{improvSleepMethodsOptions}}" wx:key="index">  
-        <label wx:if="{{index<4}}"><checkbox value="{{item.value}}">{{item.label}}</checkbox></label> 
-  		 <label wx:else><checkbox value="{{item.value}}">{{item.label}}</checkbox>
-  		 	<input class="custom-input" type="text" placeholder="请填写改善睡眠质量方法" bindinput="bindImprovSleepMethodsInput" />
-  		 </label>
-      </block>  
-    </checkbox-group>  
-  </view> 	
-  <view class='title_1'>四、其他意见和建议</view>
-  <!-- 文本输入问题示例 -->  
-  <view class="section">  
-    <text>13. 关于本次睡眠房的入住体验,您最希望哪些方面可以进行改善优化</text>  
-    <textarea class="full-width-textarea" type="text" placeholder="请填写您的建议" bindinput="bindSuggestionInput" />  
-  </view>  
-  
-  <!-- 提交按钮 -->  
-  <button style="margin-top:30rpx;" bindtap="submitSurvey">提交问卷</button>  
-  
-  <view class="section">
-    <text style="font-weight:600">感谢您的参与和支持!</text>  
-    <text>通过这份问卷,我们可以更好地了解受访者的睡眠状况及其影响因素,从而为他们提供更有效的改善建议。希望您能如实填写,以便我们为您提供更好的服务。</text> 
-  </view> 
-  
-</view>

+ 0 - 118
pages/sleepEvaluation/sleepEvaluation.wxss

@@ -1,118 +0,0 @@
-/* pages/survey/survey.wxss */  
-  
-/* 通用样式 */  
-.container {  
-  width: 100%;  
-  padding: 20rpx;
-  text-align: left; 
-}  
-
-.section {  
-  margin-bottom: 15rpx;  
-  margin-top: 25rpx;  
-}
-.section_age {  
-  margin-bottom: 15rpx;  
-  margin-top: 25rpx; 
-  margin-right:355rpx;
-}
-.section_stayExper {  
-  margin-bottom: 15rpx;  
-  margin-top: 25rpx; 
-  margin-right:60rpx;
-}
-
-.title {
-  text-align: center;
-  font-size: 38rpx;
-  color: #000000;
-  font-weight: bold;
-  margin: auto;
-  margin-top: 10rpx;
-}
-
-.title_1 {
-  text-align: left;
-  font-size: 30rpx;
-  color: #000000;
-  font-weight: bold;
-  margin: auto;
-  margin-top: 10rpx;
-}
-
-/* 标题样式 */  
-/* .title {  
-  font-size: 18px;  
-  font-weight: bold;  
-  margin-bottom: 10px;  
-} */ 
-  
-/* 输入框和选择器的样式 */  
-.input-area, .picker-area {  
-  margin-bottom: 20px;  
-}  
-  
-.input-area input, .picker-area picker {  
-  width: 100%;  
-  padding: 10px;  
-  box-sizing: border-box; /* 包括内边距和边框在总宽度内 */  
-  border: 1px solid #ccc;  
-  border-radius: 4px;  
-  font-size: 16px;  
-}  
-  
-/* 特别是针对选择器的样式(微信小程序中没有原生的<picker>标签,这里仅作为示例) */  
-/* 实际上,您可能会使用微信小程序的picker组件,并通过自定义类来样式化它周围的容器 */  
-.picker-container {  
-  position: relative;  
-}  
-  
-.picker-container picker {  
-  /* 注意:这里的picker是假设的,微信小程序中picker组件的样式需要通过其他方式控制,如自定义模态框 */  
-  /* 实际上,您可能不需要直接对picker进行样式化,而是样式化触发picker的按钮或容器 */  
-}  
-  
-/* 提交按钮的样式 */  
-.submit-btn {  
-  display: block;  
-  width: 100%;  
-  padding: 10px;  
-  background-color: #007aff;  
-  color: white;  
-  font-size: 16px;  
-  border: none;  
-  border-radius: 4px;  
-  cursor: pointer;  
-  margin-top: 20px;  
-}  
-  
-.submit-btn:hover { /* 注意:微信小程序中不支持:hover伪类,这里仅作为Web开发的参考 */  
-  background-color: #0056b3;  
-}  
-  
-/* 如果有多选问题,可能需要为checkbox或radio列表添加样式 */  
-.checkbox-group, .radio-group {  
-  margin-bottom: 20px;  
-}  
-  
-.checkbox-group label, .radio-group label {  
-  display: block;  
-  margin-bottom: 10px;  
-}  
-  
-.full-width-textarea {  
-  width: 100%; /* 使textarea宽度占满其父容器的宽度 */  
-  border: 1px solid rgba(0, 0, 0, 0.1);   
-  border-radius: 2px; /* 可选:添加轻微的边框圆角 */  
-  padding: 10px; /* 可选:添加内边距,让文本不紧贴边框 */  
-  box-sizing: border-box; /* 确保padding不会增加textarea的总宽度 */  
-}
-
-.custom-input {  
-  width: 100%; /* 使input宽度占满其父容器的宽度 */  
-  border: none; /* 移除默认的边框 */  
-  border-bottom: 1px solid rgba(0, 0, 0, 0.1); /* 只设置底部边框为半透明细线 */  
-  padding: 10px 0; /* 只在垂直方向上添加内边距,避免底部边框被内边距遮挡 */  
-  background-color: transparent; /* 移除背景色 */  
-  box-shadow: none; /* 移除可能的阴影效果(如果默认有的话) */  
-}

+ 0 - 66
pages/test/test.js

@@ -1,66 +0,0 @@
-// pages/test/test.js
-Page({
-
-    /**
-     * 页面的初始数据
-     */
-    data: {
-
-    },
-
-    /**
-     * 生命周期函数--监听页面加载
-     */
-    onLoad: function (options) {
-
-    },
-
-    /**
-     * 生命周期函数--监听页面初次渲染完成
-     */
-    onReady: function () {
-
-    },
-
-    /**
-     * 生命周期函数--监听页面显示
-     */
-    onShow: function () {
-
-    },
-
-    /**
-     * 生命周期函数--监听页面隐藏
-     */
-    onHide: function () {
-
-    },
-
-    /**
-     * 生命周期函数--监听页面卸载
-     */
-    onUnload: function () {
-
-    },
-
-    /**
-     * 页面相关事件处理函数--监听用户下拉动作
-     */
-    onPullDownRefresh: function () {
-
-    },
-
-    /**
-     * 页面上拉触底事件的处理函数
-     */
-    onReachBottom: function () {
-
-    },
-
-    /**
-     * 用户点击右上角分享
-     */
-    onShareAppMessage: function () {
-
-    }
-})

+ 0 - 2
pages/test/test.wxml

@@ -1,2 +0,0 @@
-<!--pages/test/test.wxml-->
-<text>pages/test/test.wxml</text>

+ 16 - 666
pages/testSAS/testSAS.js

@@ -1,721 +1,71 @@
 // miniprogram/pages/testSAS/testSAS.js
 // const db = wx.cloud.database()
-const qnaire = require("./sas.js")
-var ans = new Array(24)
-var ansJson = []
 Page({
-  data: {
-    qnaire: qnaire.qnaire,
-    answer: ans,
-	answerJson: [],
-    id: 0,
-	inputValue: '' ,// 初始值为空字符串
-	BMI: null,
-	weight: 0,  
-	height: 0,
-	promptTextMessage: [],
-	totalAll: 0,
-	isPrivacyAgreed: false, // 隐私条款是否勾选  
-	privacyDetailShow: false ,// 隐私条款弹出页是否显示  
-	checkboxes: [  
-	      { name: 'checkbox1', checked: false },   
-	    ],
-	changeValue:'',//
-	comScore: 0,
-	comScoreStatus: '',
-	input1Value: '',
-	input2Value: '',
-	input3Value: '',
-	input4Value: '',
-	input5Value: '',
-	input6Value: '',
-  },
-  // drawCircle: function() {  
-  //     // 创建 canvas 上下文  
-  //     const ctx = wx.createCanvasContext('myCanvas');  
-    
-  //     // 设置圆环的颜色和样式  
-  //     ctx.setStrokeStyle('green'); // 圆环的颜色  
-  //     ctx.setLineWidth(20); // 圆环的宽度  
-    
-  //     // 绘制外圆  
-  //     ctx.beginPath();  
-  //     ctx.arc(90, 80, 80, 0, 2 * Math.PI); // 圆心 (100, 100),半径 100  
-  //     ctx.stroke(); // 绘制外圆  
-    
-  //     // 绘制内圆(与外圆同圆心,但半径小20rpx,即80rpx)  
-  //     ctx.beginPath();  
-  //     ctx.arc(90, 80, 80, 0, 2 * Math.PI);  
-  //     ctx.setFillStyle('white'); // 设置内圆的填充颜色为白色(或者透明,取决于你希望的效果)  
-  //     ctx.fill(); // 填充内圆,这样圆环内部就是白色或透明的了  
-    
-  //     // 结束绘制并更新 canvas  
-  //     ctx.draw();  
-  //   },
-  handleTouchMove: function() {  
-      return false; // 阻止手动滑动  
-    }, 
-    hideModal: function() {  
-      this.setData({  
-        privacyDetailShow: false
-      });  
-    },
-  checkboxChange: function(e) {  
-      // e.detail.value 是一个数组,包含了所有被选中的 checkbox 的 value  
-      const checkedValues = e.detail.value;  
-    
-      // 遍历 checkboxes 数组,根据 checkedValues 更新 checked 属性  
-      const updatedCheckboxes = this.data.checkboxes.map(checkbox => {  
-        return {  
-          ...checkbox,  
-          // 如果 checkbox 的 name 在 checkedValues 中,则设为 true,否则设为 false  
-          checked: checkedValues.includes(checkbox.name)  
-        };  
-      });  
-    
-      // 更新 data 中的 checkboxes 数组  
-      this.setData({  
-        checkboxes: updatedCheckboxes  
-      });  
-    },
-    
-    showPrivacyDetail: function() {
-      this.setData({  
-        privacyDetailShow: true
-      });
-      // 这里可以添加代码来显示隐私条款弹出页,比如使用 wx.showModal 或自定义组件  
-    },
-	hidePrivacyPolicy() {
-	    this.setData({
-	      privacyDetailShow: false
-	    });
-	  },
- //  otherButtonTap: function() {
-	// if (!this.data.isPrivacyAgreed) {
-	//   wx.showToast({  
-	// 	title: '请勾选隐私条款',  
-	// 	icon: 'none'  
-	//   });  
-	//   return;  
-	// }  
-	// // 如果隐私条款已勾选,执行其他操作  
- //  },  
-  
-  handleInputChange: function(e) {
-    this.setData({  
-      height: e.detail.value
-    });  
-	if(this.data.id == 1){
-		this.setData({
-		  weight: e.detail.value
-		});
-	}
-	if(this.data.id == 3){
-		this.setData({
-		  weight: e.detail.value
-		});
-		if (this.data.weight >= 0 || this.data.height >= 0) { 
-			var bmi = this.data.weight / (this.data.height * this.data.height);
-			this.setData({
-			  BMI: bmi
-			}); 
-		}
-	}
-  },
-  radioChange: function (e) {
-    console.log(e.detail.value)
-	this.setData({
-	  changeValue: e.detail.value
-	}); 
-  },
-bindInput1: function(e) {  
-    // 你可以通过 e.detail.value 获取到输入框的值  
-    // 使用 this.setData() 方法更新数据  
-    this.setData({  
-      input1Value: e.detail.value  
-    })
-}, 
-bindInput2: function(e) {  
-	// 你可以通过 e.detail.value 获取到输入框的值  
-	// 使用 this.setData() 方法更新数据  
-	this.setData({  
-	  input2Value: e.detail.value  
-	})
-},
-bindInput3: function(e) {  
-    // 你可以通过 e.detail.value 获取到输入框的值  
-    // 使用 this.setData() 方法更新数据  
-    this.setData({  
-      input3Value: e.detail.value  
-    })
-}, 
-bindInput4: function(e) {  
-	// 你可以通过 e.detail.value 获取到输入框的值  
-	// 使用 this.setData() 方法更新数据  
-	this.setData({  
-	  input4Value: e.detail.value  
-	})
-},
-bindInput5: function(e) {  
-    // 你可以通过 e.detail.value 获取到输入框的值  
-    // 使用 this.setData() 方法更新数据  
-    this.setData({  
-      input5Value: e.detail.value  
-    })
-}, 
-bindInput6: function(e) {  
-	// 你可以通过 e.detail.value 获取到输入框的值  
-	// 使用 this.setData() 方法更新数据  
-	this.setData({  
-	  input6Value: e.detail.value  
-	})
-},
-  nextq: function (e) {
-	if (!this.data.checkboxes[0].checked) {
-		 wx.showToast({  
-		 title: '请勾选隐私条款',  
-		 icon: 'none'  
-		 });  
-		 return;  
-	} 
-	let idInput = e.currentTarget.dataset.id;
-	console.log('idInput====='+idInput)
-	console.log('input1Value=='+this.data.input1Value);
-	console.log('input2Value=='+this.data.input2Value);
-	console.log('input3Value=='+this.data.input3Value);
-	console.log('input4Value=='+this.data.input4Value);
-	console.log('input5Value=='+this.data.input5Value);
-	console.log('input6Value=='+this.data.input6Value);
-	let input1 = this.data.input1Value;
-	let input2 = this.data.input2Value;
-	let input3 = this.data.input3Value;
-	let input4 = this.data.input4Value;
-	let input5 = this.data.input5Value;
-	let input6 = this.data.input6Value;
-	if(idInput == 0){
-		if(!input1 || !input2){
-			wx.showToast({
-			title: '输入框不能为空',  
-			icon: 'none'  
-			});  
-			return;
-		}
-		if(input1){
-			if(!(input1>=0 && input1<=24) || !(input2>=0 && input2<=60)){
-				wx.showToast({
-				title: '输入框时间填写错误',  
-				icon: 'none'  
-				});  
-				return;
-			}
-		}
-	}
-	
-	if(idInput == 2){
-		if(!input3 || !input4){
-			wx.showToast({
-			title: '输入框不能为空',  
-			icon: 'none'  
-			});  
-			return;
-		}
-		if(input1){
-			if(!(input3>=0 && input3<=24) || !(input4>=0 && input4<=60)){
-				wx.showToast({
-				title: '输入框时间填写错误',  
-				icon: 'none'  
-				});  
-				return;
-			}
-		}
-	}
-	if(idInput == 3){
-		if(!input5 || !input6){
-			wx.showToast({
-			title: '输入框不能为空',  
-			icon: 'none'  
-			});  
-			return;
-		}
-		if(input1){
-			if(!(input5>=0 && input5<=24) || !(input6>=0 && input6<=60)){
-				wx.showToast({
-				title: '输入框时间填写错误',  
-				icon: 'none'  
-				});  
-				return;
-			}
-		}
-	}
-	
-    if (this.data.id < 23) {
-      this.setData({
-        id: this.data.id + 1,
-      })
-    }
-  },
-
-  lastq: function (e) {
-	if (!this.data.checkboxes[0].checked) {
-		 wx.showToast({  
-		 title: '请勾选隐私条款',  
-		 icon: 'none'  
-		 });  
-		 return;  
-	} 
-    if (this.data.id != 0) {
-      this.setData({
-        id: this.data.id - 1,
-      })
-    }
-  },
 
-	calculateTotalHours: function (hoursInput,minutesInput) {
-  
-        // 获取小时和分钟的值,如果为空或不是数字,则设置为0  
-        let hours = parseFloat(hoursInput.value) || 0;  
-        let minutes = parseFloat(minutesInput.value) || 0;  
-  
-        // 将分钟转换为小时的小数部分  
-        // let minutesInHours = minutes / 60;  
-  
-        // 计算总时间(小时)  
-        // let totalHours = hours + minutesInHours;  
-  
-        // 显示结果  
-        // document.getElementById('result').textContent = `总时间: ${totalHours.toFixed(2)} 小时`;  
-		// return totalHours.toFixed(2);
-		return hours*60 + minutes;
-    },
-  submit: function (e) {
-	if (!this.data.checkboxes[0].checked) {
-	  	return;  
-	} 
-	// let input1 = e.detail.value.input1;
-	// let input2 = e.detail.value.input2;
-	let input1 = this.data.input1Value;
-	let input2 = this.data.input2Value;
-	let input3 = this.data.input3Value;
-	let input4 = this.data.input4Value;
-	let input5 = this.data.input5Value;
-	let input6 = this.data.input6Value;
-	// if(!input1 || !input2){
-	// 	wx.showToast({
-	// 	title: '输入框不能为空',  
-	// 	icon: 'none'  
-	// 	});  
-	// 	return;
-	// }
-	
-    var a = "";
-	let _id = e.currentTarget.dataset.id;
-	var id = this.data.id-1;
-	console.log('id==+=='+id);
-	if(e.detail.value.answer){
-		a = e.detail.value.answer;
-	}else{
-		if(id == 0){
-			if(input1 && input2){
-				a = input1+":"+input2
-			}else{
-				// a = "";
-			}
-		}
-		if(id == 2){
-			if(input3 && input4){
-				a = input3+":"+input4
-			}else{
-				// a = "";
-			}
-		}
-		if(id == 3){
-			if(input5 && input6){
-				a = input5+":"+input6
-			}else{
-				// a = "";
-			}
-		}
-	}
+  /**
+   * 页面的初始数据
+   */
+  data: {
     
-	var obj = {};
-	obj.type = e.detail.value.answer?'answer':'input'
-	obj.value = a
-    ans[id] = a;
-	ansJson[id] = obj;
-    this.setData({
-      answer: ans,
-	  answerJson: ansJson,
-    })
-    console.log("submit-answer="+this.data.answer);
-    console.log("e.detail.value.answer="+e.detail.value.answer);
-	console.log("e.detail.value.input="+e.detail.value.input);
   },
 
-  formSubmit: function() {
-	if (!this.data.checkboxes[0].checked) {
-	  	return;  
-	}
-	
-	var a = this.data.changeValue;
-	var id = 23;
-	var obj = {};
-	obj.type = 'answer'
-	obj.value = a
-	ans[id] = a;
-	ansJson[id] = obj;
-	this.setData({
-	  answer: ans,
-	  answerJson: ansJson,
-	})
-	
-    var finish;
-    var i = 0;
-    var _this = this;
-    while(i<24) {
-      if(ans[i]=="") {
-        finish='false';
-        break;
-      } else {
-        finish='true';
-      }
-      i++;
-    }
-    if(finish=='false') {
-	// if('true'=='false') {
-      wx.showModal({
-        title: '无法提交',
-        content: '您还有部分题目未完成,请检查后重新提交',
-        showCancel: false,
-        confirmColor: '#fcbe39',
-        confirmText: "好的",
-        success (res) {
-          _this.setData({
-            id: i,
-          })
-        }
-      })
-    } else{
-      wx.showLoading({
-        title: '加载中',
-      })
-      setTimeout(function () {
-        wx.hideLoading({
-          success (res) {
-            _this.answer2db(_this.data.answerJson);
-            wx.navigateBack({
-              delta: i
-            })
-          }
-        })
-      }, 2000)
-    }
-  },
-
-  answer2db: function(answerJson) {
-    // db.collection('SAS').add({
-    //   data: {
-    //     answer: this.data.answer
-    //   },
-    //   success (res) {
-    //     console.log(res._id);
-    //   },
-    //   fail (res) {
-    //     wx.showToast({
-    //       icon: 'none',
-    //       title: '新增记录失败'
-    //     })
-    //     console.error('[数据库] [新增记录] 失败:', err)
-    //   }
-    // })
-	console.log('answerJson='+JSON.stringify(answerJson))
-	let totalAllTemp = 0;
-	let value1 = answerJson[0].value;
-	let value2 = answerJson[1].value;
-	let value3 = answerJson[2].value;
-	let value4 = answerJson[3].value;
-	let value5a = answerJson[4].value;
-	let value5b = answerJson[5].value;
-	let value5c = answerJson[6].value;
-	let value5d = answerJson[7].value;
-	let value5e = answerJson[8].value;
-	let value5f = answerJson[9].value;
-	let value5g = answerJson[10].value;
-	let value5h = answerJson[11].value;
-	let value5i = answerJson[12].value;
-	let value5j = answerJson[13].value;
-	let value6 = answerJson[14].value;
-	let value7 = answerJson[15].value;
-	let value8 = answerJson[16].value;
-	let value9 = answerJson[17].value;
-	let value10 = answerJson[18].value;
-	let value11 = answerJson[19].value;
-	let value12 = answerJson[20].value;
-	let value13 = answerJson[21].value;
-	let value14 = answerJson[22].value;
-	let value15 = answerJson[23].value;
-	
-	//计算规则  https://mp.weixin.qq.com/s/QyTzuPoNErMjc2KcA1M61g
-	let comA = 0;//条目6
-	let comB = 0;
-	let comB1 = 0;
-	let comC = 0;
-	let comD = 0;
-	let comE = 0;
-	let comF = 0;
-	let comG = 0;
-	
-	comA = this.resultABCD(value6);
-	comB1 = this.resultABCD(value2) + this.resultABCD(value5a);
-	console.log("comB1="+comB1);
-	if(comB1 == 0){
-		comB = 0;
-	}else if(comB1>=1 && comB1<=2){
-		comB = 1;
-	} else if(comB1>=3 && comB1<=4){
-		comB = 2;
-	} else if(comB1>=5 && comB1<=6){
-		comB = 3;
-	}
-	let value41 = Number(value4.split(':')[0]) || 0;
-	let value42 = Number(value4.split(':')[1]) || 0;
-	let value43 = value41*60 + value42
-	console.log("value43="+value43);
-	if(value43 > 420){
-		comC = 0;
-	}else if(value43>=360 && value43<=420){
-		comC = 1;
-	} else if(value43>=300 && value43<360){
-		comC = 2;
-	} else if(value43<300){
-		comC = 3;
-	}
-	
-	
-	let datediff = this.calculateTimeDifference(value1,value3);
-	console.log("datediff="+datediff);
-	let sleepRate = datediff?((value43/datediff)*100):0;
-	console.log("sleepRate="+sleepRate);
-	if(sleepRate >= 85){
-		comD = 0;
-	}else if(sleepRate>=75 && sleepRate<=84){
-		comD = 1;
-	} else if(sleepRate>=65 && sleepRate<74){
-		comD = 2;
-	} else if(sleepRate<65){
-		comD = 3;
-	}
-	
-	let value5All = this.resultABCD(value5b)
-					+ this.resultABCD(value5c) 
-					+ this.resultABCD(value5d) 
-					+ this.resultABCD(value5e) 
-					+ this.resultABCD(value5f)
-					+ this.resultABCD(value5g)
-					+ this.resultABCD(value5h)
-					+ this.resultABCD(value5i)
-					+ this.resultABCD(value5j);
-	console.log("value5All="+value5All);
-	if(value5All == 0){
-		comE = 0;
-	}else if(value5All>=1 && value5All<=9){
-		comE = 1;
-	} else if(value5All>=10 && value5All<=18){
-		comE = 2;
-	} else if(value5All>=19 && value5All<=27){
-		comE = 3;
-	}
-	
-	comF = this.resultABCD(value7);
-	console.log("comF="+comF);
-	let valueGAll = this.resultABCD(value8) + this.resultABCD(value9);
-	console.log("valueGAll="+valueGAll);
-	if(valueGAll == 0){
-		comG = 0;
-	}else if(valueGAll>=1 && valueGAll<=2){
-		comG = 1;
-	} else if(valueGAll>=3 && valueGAll<=4){
-		comG = 2;
-	} else if(valueGAll>=5 && valueGAll<=6){
-		comG = 3;
-	}
-	
-	console.log('comA='+comA);
-	console.log('comB='+comB);
-	console.log('comC='+comC);
-	console.log('comD='+comD);
-	console.log('comE='+comE);
-	console.log('comF='+comF);
-	console.log('comG='+comG);
-	
-	let comAll = comA + comB + comC + comD + comE + comF + comG;
-	let _comScoreStatus = "";
-	if(comAll >= 0 && comAll<=5){
-		_comScoreStatus = "很好";
-	}else if(comAll>=6 && comAll<=10){
-		_comScoreStatus = "较好";
-	} else if(comAll>=11 && comAll<=15){
-		_comScoreStatus = "一般";
-	} else if(comAll>=16 && comAll<=21){
-		_comScoreStatus = "差";
-	}
-	
-	let promptTextMessageTemp = []
-	promptTextMessageTemp.push('sucess');
-	console.log('comAll='+comAll+',comScoreStatus='+_comScoreStatus);
-	this.setData({
-      comScore: comAll,
-	  comScoreStatus: _comScoreStatus,
-	  promptTextMessage: promptTextMessageTemp,
-    })
-  },
-  resultABCD:function(a){
-	  if(a == 'A'){
-		  return 0;
-	  }else if(a == 'B'){
-		  return 1;
-	  } else if(a == 'C'){
-		  return 2;
-	  } else if(a == 'D'){
-		  return 3;
-	  }
-  },
- sleepState:function(a,b){
-	 console.log('a='+a+',b='+b);
-	 if(a=='A'){
-	 	if(b>=1 && b<=9){
-	 		return '不足';
-	 	}else if(b>=10 && b<=12){
-	 		return '适中';
-	 	}else if(b>=13){
-	 		return '过长';
-	 	}else{
-	 		return '未知';
-	 	}
-	 }else if(a=='B'){
-	 	if(b>=1 && b<=9){
-	 		return '不足';
-	 	}else if(b>=10 && b<=12){
-	 		return '适中';
-	 	}else if(b>=13){
-	 		return '过长';
-	 	}else{
-	 		return '未知';
-	 	}
-	 }else if(a=='C'){
-	 	if(b>=1 && b<=9){
-	 		return '不足';
-	 	}else if(b>=10 && b<=12){
-	 		return '适中';
-	 	}else if(b>=13){
-	 		return '过长';
-	 	}else{
-	 		return '未知';
-	 	}
-	 }else if(a=='D'){
-	 	if(b>=1 && b<=9){
-	 		return '不足';
-	 	}else if(b>=10 && b<=12){
-	 		return '适中';
-	 	}else if(b>=13){
-	 		return '过长';
-	 	}else{
-	 		return '未知';
-	 	}
-	 }else{
-	 	return '未知';
-	 }
- },
- // 将时间字符串转换为分钟数  
- timeStringToMinutes:function(timeStr) {  
-   var parts = timeStr.split(":");  
-   return parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10);  
- },
-   
- // 将分钟数转换回时间字符串格式 HH:mm  
- minutesToTimeString:function(minutes) {  
-   var hours = Math.floor(minutes / 60);  
-   var mins = minutes % 60;  
-   var minsStr = mins < 10 ? "0" + mins : mins.toString();  
-   return hours.toString() + ":" + minsStr;  
- },
-   
- // 计算时间差(分钟)  
- calculateTimeDifference:function(sleepTimeStr, wakeUpTimeStr) {  
-   // 将时间字符串转换为分钟  
-   var sleepTimeMinutes = this.timeStringToMinutes(sleepTimeStr);  
-   var wakeUpTimeMinutes = this.timeStringToMinutes("24:00") + this.timeStringToMinutes(wakeUpTimeStr); // 加上第二天的0点到起床时间的分钟数  
-   
-   // 计算时间差  
-   var diffInMinutes = wakeUpTimeMinutes - sleepTimeMinutes;  
-   
-   // 将分钟数转换回时间字符串格式 HH:mm  
-   var diffInHours = Math.floor(diffInMinutes / 60);  
-   var diffInMins = diffInMinutes % 60;  
-   
-   // 返回时间差字符串  
-   console.log("diffInMinutes=="+diffInMinutes)
-   return diffInMinutes;  
- },
   /**
    * 生命周期函数--监听页面加载
    */
   onLoad: function (options) {
-    for(var i=0; i<24; i++) {
-      ans[i] = "";
-    }
-	this.setData({
-	  privacyDetailShow: false 
-	});
-	// 绘制圆环  
-    // this.drawCircle(); 
+    
   },
 
   /**
    * 生命周期函数--监听页面初次渲染完成
    */
   onReady: function () {
-
+    
   },
 
   /**
    * 生命周期函数--监听页面显示
    */
   onShow: function () {
-
+    const app = getApp();
+    app.globalData.selectedTabIndex = 3;
+    this.getTabBar().setData({
+      selected: 3
+    })
   },
 
   /**
    * 生命周期函数--监听页面隐藏
    */
   onHide: function () {
-
+    
   },
 
   /**
    * 生命周期函数--监听页面卸载
    */
   onUnload: function () {
-
+    
   },
 
   /**
    * 页面相关事件处理函数--监听用户下拉动作
    */
   onPullDownRefresh: function () {
-
+    
   },
 
   /**
    * 页面上拉触底事件的处理函数
    */
   onReachBottom: function () {
-
+    
   },
 
   /**
    * 用户点击右上角分享
    */
   onShareAppMessage: function () {
-
+    
   }
 })

+ 4 - 1
pages/testSAS/testSAS.json

@@ -1,4 +1,7 @@
 {
   "usingComponents": {
-  }
+  },
+  "navigationBarBackgroundColor": "#ffffff",
+  "navigationBarTextStyle": "black",
+  "navigationBarTitleText": "舒眠大健康"
 }

+ 15 - 174
pages/testSAS/testSAS.wxml

@@ -1,176 +1,17 @@
 <!--miniprogram/pages/testSAS/testSAS.wxml-->
 <view class='container'>
-	<!-- <canvas canvas-id="myCanvas" style="width: 350rpx; height: 350rpx;margin-top:20rpx;"></canvas> -->
-	<!-- <view class="container-yh">  
-	  <view class="top-text-yh">  
-	    <view class="text-left-yh">
-	      <image class="icon-yh" src="/static/images/report/c_11.png" mode="aspectFit"></image>  
-	      <text class="text-content-yh">左边文字内容</text>  
-	    </view>  
-	    <view class="text-right-yh">  
-	      <image class="icon-yh" src="/static/images/report/c_11.png" mode="aspectFit"></image>  
-	      <text class="text-content-yh">右边文字内容</text>  
-	    </view>  
-	  </view>  
-	  
-	  <view class="circle-container-yh">  
-		  <view class="text-container-yh left-text-yh">  
-			<view class="text-row-yh">
-			  <image class="icon-yh" src="/static/images/report/c_11.png" mode="aspectFit"></image>  
-			  <text class="text-content-yh">左侧第一行文字内容</text>  
-			</view>  
-			<view class="text-row-yh">  
-			  <image class="icon-yh" src="/static/images/report/c_11.png" mode="aspectFit"></image>  
-			  <text class="text-content-yh">左侧第二行文字内容</text>  
-			</view>   
-		  </view>
-	    <image class="circle-image-yh" src="/static/images/report/vortex.png" mode="aspectFit"></image>  
-	    <view class="text-container-yh right-text-yh">  
-	      <view class="text-row-yh">
-	        <image class="icon-yh" src="/static/images/report/c_11.png" mode="aspectFit"></image>  
-	        <text class="text-content-yh">右侧第一行文字内容</text>  
-	      </view>  
-	      <view class="text-row-yh">  
-	        <image class="icon-yh" src="/static/images/report/c_11.png" mode="aspectFit"></image>  
-	        <text class="text-content-yh">右侧第二行文字内容</text>  
-	      </view>   
-	    </view>  
-	  </view>  
-	  
-	  <view class="centered-text-yh">
-	    <text class="text-line-yh text-line-yh-1">良好</text>  
-	    <text class="text-line-yh text-line-yh-2">78</text>  
-	    <text class="text-line-yh text-line-yh-3">香睡指数</text>  
-	  </view> 
-	  
-	</view> -->
-	
-	
-	<view class='idX'>睡眠调查问卷</view>
-    <swiper class='sheet' current='{{id}}'>
-      <block wx:for="{{qnaire}}">
-        <swiper-item catchtouchmove="handleTouchMove">
-          <form bindsubmit='submit'>
-            <view class='naire' wx:if="{{item.type == 'radio'}}">
-              <view class='question'>{{item.question}}</view>
-	      <view class='question_1' wx:if="{{item.question_1 != ''}}">{{item.question_1}}  <input name='input' wx:if="{{id==13 || id==23}}" style="border: none;border-bottom: 1px solid #000000;" class="input-underline" placeholder=""/>  </view>
-              <!--view class='border' /-->
-              <radio-group class="radio-group-1" name='answer' bindchange='radioChange'>
-                <label class='radio'><radio value="A" color='#fcbe39'  wx:if="{{item.option.a != '' && item.option.a != null}}"/>{{item.option.a}}</label>
-                <label class='radio'><radio value="B" color='#fcbe39'  wx:if="{{item.option.b != '' && item.option.b != null}}"/>{{item.option.b}}</label>
-                <label class='radio'><radio value="C" color='#fcbe39'  wx:if="{{item.option.c != '' && item.option.c != null}}"/>{{item.option.c}}</label>
-                <label class='radio'><radio value="D" color='#fcbe39'  wx:if="{{item.option.d != '' && item.option.d != null}}"/>{{item.option.d}}</label>
-				<label class='radio'><radio value="E" color='#fcbe39'  wx:if="{{item.option.e != '' && item.option.e != null}}"/>{{item.option.e}}</label>
-				<label class='radio'><radio value="F" color='#fcbe39'  wx:if="{{item.option.f != '' && item.option.f != null}}"/>{{item.option.f}}</label>
-				<label class='radio'><radio value="G" color='#fcbe39'  wx:if="{{item.option.g != '' && item.option.g != null}}"/>{{item.option.g}}</label>
-				<label class='radio'><radio value="H" color='#fcbe39'  wx:if="{{item.option.h != '' && item.option.h != null}}"/>{{item.option.h}}</label>
-				<label class='radio'><radio value="I" color='#fcbe39'  wx:if="{{item.option.i != '' && item.option.i != null}}"/>{{item.option.i}}</label>
-				<label class='radio'><radio value="J" color='#fcbe39'  wx:if="{{item.option.j != '' && item.option.j != null}}"/>{{item.option.j}}</label>
-			  </radio-group>
-            </view>
-			<view class='naire' wx:else>
-				<view class='question'>{{item.question}}</view>
-			    <view class="sleep-time-container">  
-			      <text>{{item.option.a}}</text>  
-			      <input wx:if="{{id == 0}}" name='input1' type="number" style="border: none;border-bottom: 1px solid #000000;width:30rpx;" class="input-underline" placeholder=""  value="{{input1Value}}"  data-id="{{id}}" bindinput="bindInput1"/>  
-			      <text wx:if="{{id == 0 && item.option.b != '' && item.option.b != null}}">{{item.option.b}}</text>  
-				  <input wx:if="{{id == 0}}" name='input2' type="number" style="border: none;border-bottom: 1px solid #000000;width:30rpx;" class="input-underline" placeholder=""  value="{{input2Value}}"  data-id="{{id}}" bindinput="bindInput2"/>
-				  <text wx:if="{{id == 0 && item.option.c != '' && item.option.c != null}}">{{item.option.c}}</text>  
-				  
-				  <input wx:if="{{id == 2}}" name='input3' type="number" style="border: none;border-bottom: 1px solid #000000;width:30rpx;" class="input-underline" placeholder=""  value="{{input3Value}}"  data-id="{{id}}" bindinput="bindInput3"/>
-				  <text wx:if="{{id == 2 && item.option.b != '' && item.option.b != null}}">{{item.option.b}}</text>  
-				  <input wx:if="{{id == 2}}" name='input4' type="number" style="border: none;border-bottom: 1px solid #000000;width:30rpx;" class="input-underline" placeholder=""  value="{{input4Value}}"  data-id="{{id}}" bindinput="bindInput4"/>
-				  <text wx:if="{{id == 2 && item.option.c != '' && item.option.c != null}}">{{item.option.c}}</text>  
-				  
-				  <input wx:if="{{id == 3}}" name='input5' type="number" style="border: none;border-bottom: 1px solid #000000;width:30rpx;" class="input-underline" placeholder=""  value="{{input5Value}}"  data-id="{{id}}" bindinput="bindInput5"/>
-				  <text wx:if="{{id == 3 && item.option.b != '' && item.option.b != null}}">{{item.option.b}}</text>  
-				  <input wx:if="{{id == 3}}" name='input6' type="number" style="border: none;border-bottom: 1px solid #000000;width:30rpx;" class="input-underline" placeholder=""  value="{{input6Value}}"  data-id="{{id}}" bindinput="bindInput6"/>
-				  <text wx:if="{{id == 3 && item.option.c != '' && item.option.c != null}}">{{item.option.c}}</text>  
-				  
-				</view>
-				<!-- <view class='question_2' wx:if="{{id==3 && BMI != null}}">体重:{{item.BMI}}</view> -->
-			</view>
-            <view class='button-group'>
-              <button class='button' hover-class='none' bindtap='lastq' disabled='{{id==0}}'>上一题</button>
-              <button wx:if="{{id<23}}" class='button' hover-class='none' form-type='submit' bindtap='nextq' data-id="{{id}}">下一题</button>
-              <button wx:else class='button' hover-class='none' form-type='submit' bindtap='formSubmit' data-id="{{id}}">提交</button>
-            </view>
-          </form> 
-        </swiper-item>
-      </block>
-    </swiper>
-	<!-- <view class='button-group'>
-	  <button class='button' hover-class='none' bindtap='lastq' disabled='{{id==0}}'>上一题</button>
-	  <button wx:if="{{id<23}}" class='button' hover-class='none' form-type='submit' bindtap='nextq'>下一题</button>
-	  <button wx:else class='button' hover-class='none' form-type='submit' bindtap='formSubmit'>提交</button>
-	</view> -->
-	<view class='id'>{{id+1}}/{{qnaire.length}}</view>
-
-	<view class="prompt" wx:if="{{promptTextMessage != null && promptTextMessage.length > 0}}">
-		<view class='idR'>睡眠情况统计</view>
-		<!-- <block wx:for="{{promptTextMessage}}">
-			<view><text class="small-red-text">{{item}}</text></view>
-		</block> -->
-		<view class="large-text-container">  
-		    <text class="large-text">睡眠得分:{{comScore}}分</text>
-		    <text class="large-text">睡眠质量:{{comScoreStatus}}</text>
-		  </view>
-	  </view>
-	  <view class='prompt' wx:else>
-		  <!-- <view class='idR'>温馨提示</view> -->
-		  <view><text class="small-red-text_ts">温馨提示:问卷提交后,会根据提您提交的答案,给出相应的睡眠质量得分。</text></view>
-	  </view>
-	  
-	   
-		 <!-- 弹出框 -->  
-		 <view class="modal" wx:if="{{privacyDetailShow}}">  
-		   <scroll-view class="modal-content" scroll-y="true">  
-			 <!-- 这里是800字的内容,为了示例只显示部分内容 -->  
-			 <view><text style="font-size:50rpx;font-weight:700rpx;">微信小程序调查问卷隐私条款</text></view>
-			 <view><text style="font-weight:400rpx;">一、前言</text></view>
-			 <view><text style="font-weight:400rpx;">我们非常重视用户的隐私和个人信息保护。为了保障用户在使用本微信小程序(以下简称“小程序”)进行调查问卷时的权益,我们制定了本隐私条款。本隐私条款详细说明了我们在收集、使用、存储和保护用户信息时的原则、范围、方式和目的。请用户在使用本小程序前,仔细阅读并理解本隐私条款。</text></view>
-			 <view><text style="font-weight:400rpx;">二、信息收集</text></view>
-			 <view><text style="font-weight:400rpx;">在用户参与调查问卷时,我们可能会收集用户的一些基本信息,如姓名、联系方式、电子邮箱等。这些信息将仅用于统计分析、改进服务质量和联系用户。</text></view>
-			 <view><text style="font-weight:400rpx;">我们可能会收集用户在使用小程序过程中产生的日志信息,包括但不限于设备型号、操作系统版本、IP地址、访问时间等。这些信息将用于优化小程序的性能和功能。</text></view>
-			 <view><text style="font-weight:400rpx;">三、信息使用</text></view>
-			 <view><text style="font-weight:400rpx;">我们将按照本隐私条款的规定,合法、正当地使用用户信息,不会将其用于与调查问卷无关的目的。</text></view>
-			 <view><text style="font-weight:400rpx;">我们可能会将用户信息用于以下用途:统计分析调查问卷结果,为改进服务质量和制定政策提供参考;</text></view>
-			 <view><text style="font-weight:400rpx;">在用户同意的前提下,向用户推荐相关的服务或产品。</text></view>
-			 <view><text style="font-weight:400rpx;">我们不会将用户信息泄露给任何第三方,除非得到用户的明确同意或法律法规另有规定。</text></view>
-			 <view><text style="font-weight:400rpx;">四、信息安全</text></view>
-			 <view><text style="font-weight:400rpx;">我们将采取合理的技术和管理措施,保障用户信息的安全,防止信息泄露、丢失、被篡改或非法获取。</text></view>
-			 <view><text style="font-weight:400rpx;">我们将定期对用户信息进行备份,以防止数据丢失。</text></view>
-			 <view><text style="font-weight:400rpx;">五、用户权利</text></view>
-			 <view><text style="font-weight:400rpx;">用户有权了解我们收集、使用其信息的情况,并可以要求我们提供相关的解释和说明。</text></view>
-			 <view><text style="font-weight:400rpx;">用户有权要求我们更正、删除其提供的不准确或不完整的个人信息。</text></view>
-			 <view><text style="font-weight:400rpx;">用户有权拒绝我们收集、使用其个人信息,但可能会影响其使用小程序的部分功能。</text></view>
-			 <view><text style="font-weight:400rpx;">六、隐私条款的修改</text></view>
-			 <view><text style="font-weight:400rpx;">我们可能会根据法律法规的变化、技术的进步或业务发展的需要,对本隐私条款进行修改。修改后的隐私条款将通过小程序内公告或其他适当的方式通知用户。请用户定期查看并了解最新的隐私条款内容。</text></view>
-			 <view><text style="font-weight:400rpx;">七、联系方式</text></view>
-			 <view><text style="font-weight:400rpx;">如果您对本隐私条款有任何疑问或建议,请通过以下方式与我们联系:[您的联系方式]。我们将尽快回复您并为您解答问题。</text></view>
-			 <view><text style="font-weight:400rpx;">八、法律适用和争议解决</text></view>
-			 <view><text style="font-weight:400rpx;">本隐私条款的解释、适用和争议解决均适用中华人民共和国法律。如双方因本隐私条款产生争议,应首先通过友好协商解决;协商不成的,任何一方均有权向有管辖权的人民法院提起诉讼。</text></view>
-			 <button class="close-btn" bindtap="hideModal">关闭</button>
-		   </scroll-view>  
-		   <!-- 关闭图标 -->
-		   <view class="modal-close" bindtap="hideModal">  
-		     <image src="/static/images/close.png" alt="关闭" />  
-		   </view> 
-		 </view>  
-	   
-	<!-- 隐私条款单选按钮和文本 -->  
-	  <view class="privacy-section" wx:if="{{promptTextMessage == null || promptTextMessage.length <= 0}}">  
-		<!-- <checkbox class="privacy-checkbox" checked="{{isPrivacyAgreed}}" bindchange="checkboxChange">
-		  <text class="privacy-detail-btn" bindtap="showPrivacyDetail">隐私条款</text> 
-		</checkbox> -->
-		
-		<radio-group class="radio-group-2" bindchange="checkboxChange">
-		    <label class="checkbox-item" wx:for="{{checkboxes}}" wx:key="name">   
-		      <radio value="{{item.name}}" checked="{{item.checked}}"/>
-				  
-		    </label>  
-		</radio-group>
-		<text class="privacy-detail-btn">我已阅读并同意</text>
-		<text class="privacy-detail-btn_tk" bindtap="showPrivacyDetail">《舒眠调查问卷隐私条款》</text> 
-	  </view>	
-</view>
+    <navigator url="/subpages/sleepQualityIndexAssessment/sleepQualityIndexAssessment" class="card-item">
+        <image class="card-bg" src="/static/images/ic_test_abg.png"></image>
+        <view class="card-content">
+            <image class="card-icon" src="/static/images/ic_test_a.png"></image>
+            <text>睡眠质量指数测评</text>
+        </view>
+    </navigator>
+    <navigator url="/subpages/sleepEvaluation/sleepEvaluation" class="card-item">
+        <image class="card-bg" src="/static/images/ic_test_bbg.png"></image>
+        <view class="card-content">
+            <image class="card-icon" src="/static/images/ic_test_b.png"></image>
+            <text>六感熟眠客房\n满意度调查</text>
+        </view>
+    </navigator>
+</view>

+ 36 - 368
pages/testSAS/testSAS.wxss

@@ -1,388 +1,56 @@
 /* miniprogram/pages/testSAS/testSAS.wxss */
 page {
-  background: rgb(211, 226, 249);
+  width: 100vw;
   display: flex;
   flex-direction: column;
-  justify-content: flex-start;
+  background: #F8F9FA;
+  padding-bottom: 120px;
 }
 
-.sheet {
-  background: #fff;
-  border-radius: 36rpx;
-  margin-top: 80rpx;
-  width: 95%;
-  height: 580rpx;
+.container {
   display: flex;
-  flex-direction: column;
-  justify-content: flex-start;
-}
-.naire {
-  height: 450rpx;
+  padding-right: 30rpx;
+  flex-direction: row;
 }
-.question {
-  font-size: 32rpx;
-  font-weight: bold;
+
+.card-item {
+  width: 327rpx;
+  margin-left: 30rpx;
+  height: 336rpx;
   margin-top: 40rpx;
-  margin-left: 32rpx;
-}
-.question_1 {
-  display: flex; 
-  font-size: 28rpx;
-  font-weight: 500;
-  margin-top: 20rpx;
-  margin-left: 32rpx;
-}
-.question_2 {
-  font-size: 20rpx;
-  margin-top: 20rpx;
-  margin-left: 32rpx;
-  color:red;
+  position: relative;
 }
-.border {
-  height: 2rpx;
-  width: 90%;
-  background-color: #d4d4d4;
-  margin: 16rpx auto;
-}
-.radio-group-1 {
-  display: flex;
-  flex-direction: column;
-  font-size: 30rpx;
-  text-indent: 14rpx;
-  margin-top: 40rpx;
+
+.card-bg {
+  display: block;
+  width: 327rpx;
+  height: 336rpx;
 }
 
-.radio-group-2 {
+.card-content {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 327rpx;
+  height: 336rpx;
   display: flex;
   flex-direction: column;
-  font-size: 30rpx;
-  text-indent: 14rpx;
-}
-
-.radio {
-  margin-bottom: 14rpx;
+  justify-content: center;
+  align-items: center;
 }
 
-.button-group {
-  display: flex;
-  flex-direction: row;
-  width: 80%;
-  margin: auto;
-  justify-content: space-between;
-  margin-top:20rpx;
-}
-.button {
-  background: #fcbe39;
-  border-radius: 100rpx;
-  font-size: 30rpx;
-  line-height: 52rpx;
-  height: 52rpx;
-  width: 172rpx;
-  font-weight: bold;
-  color: #fff;
-}
-.button::after {
-  border: 0;
-}
-.idX {
-  text-align: center;
-  font-size: 38rpx;
-  color: #ffffff;
-  font-weight: bold;
-  margin: auto;
-  margin-top: 10rpx;
-}
-.id {
-  text-align: center;
-  font-size: 24rpx;
-  color: #000000;
-  margin: auto;
-  margin-top: 20rpx;
+.card-icon {
+  display: block;
+  width: 56rpx;
+  height: 56rpx;
 }
 
-.idR {
+.card-content text {
+  width: 260rpx;
   text-align: center;
-  font-size: 24rpx;
-  color: #000000;
-  margin: auto;
-  margin-top: 2rpx;
-  font-weight:700
-}
-
-form {
-	width: 84%;
-}
-
-
-/* 睡眠时间容器样式 */  
-.sleep-time-container {  
-  display: flex;  
-  align-items: center;  
-  margin-top: 20px; /* 你可以根据需要调整 */  
-}  
-  
-/* 文本样式 */  
-.sleep-time-container text {  
-  margin-right: 10px; /* 输入框前的文本与输入框之间的间距 */  
-  font-size: 16px; /* 字体大小 */  
-  color: #333; /* 字体颜色 */  
-  margin:20rpx;
-}  
-  
-/* 输入框样式 */  
-.sleep-time-container input {  
-  flex: 1; /* 让输入框自动填充剩余空间 */  
-  height: 30px; /* 输入框高度 */  
-  padding: 0 5px; /* 输入框内边距 */  
-  font-size: 16px; /* 字体大小 */  
-  border: 1px solid #ccc; /* 边框 */  
-  width:30rpx;
-}  
-  
-/* "点钟"文本样式 */  
-.sleep-time-container text:last-child {  
-  margin-left: 10px; /* 输入框后的文本与输入框之间的间距 */  
-}
-
-.prompt {  
-  /* 其他样式,如 padding, margin 等 */ 
- margin-top:10rpx;
- padding:10rpx;
-}  
-  
-.small-red-text {  
-  font-size: 12px; /* 你可以根据需要调整字体大小 */  
-  color: #000000; /* 红色字体 */  
-  /* 如果需要处理多行文本,可以添加如下样式 */  
-  word-wrap: break-word; /* 防止单词被截断 */  
-  white-space: normal; /* 正常的空格处理 */
-}
-
-.small-red-text_ts {  
-  font-size: 12px; /* 你可以根据需要调整字体大小 */  
-  color: #6f6f6f;  
-  /* 如果需要处理多行文本,可以添加如下样式 */  
-  word-wrap: break-word; /* 防止单词被截断 */  
-  white-space: normal; /* 正常的空格处理 */
-  font-weight: 600;
-}
-
-.privacy-section {  
-  /* 页脚样式 */  
-    position: fixed;  
-    bottom: 0;  
-    left: 0;  
-    right: 0;  
-    height: 50rpx;  
-    /* background-color: #f0f0f0; */
-    display: flex;  
-    align-items: center;  
-    justify-content: center;  
-}  
-  
-.privacy-checkbox {  
-  /* 单选按钮样式 */  
-}  
-  
-.checkbox-text {  
-  /* 单选按钮旁边的文本样式 */  
-}  
-  
-.privacy-text {  
-  /* 隐私条款文本样式 */  
-  font-size: 12rpx; /* 字体大小根据需要调整 */  
-}  
-  
-.privacy-detail-btn {  
-  /* 查看隐私条款按钮样式 */  
-  font-size: 25rpx;
-  color: #6f6f6f;
-}
-
-.privacy-detail-btn_tk {  
-  /* 查看隐私条款按钮样式 */  
-  font-size: 25rpx;
-  color: #3385ff;
-}  
-  
-.other-btn {  
-  /* 其他操作按钮样式 */  
-}
-
-.checkbox-item {
-  display: block;  
-  margin-bottom: 5rpx;  
-}
-
-checkbox {
-	width:15rpx;
-	height:15rpx;
-}
-
-.container_tk {  
-  display: flex;  
-  flex-direction: column;  
-  align-items: center;  
-  justify-content: center;  
-  height: 100vh;  
-}  
-  
-.modal {  
-  position: fixed;  
-  top: 0;  
-  left: 0;  
-  right: 0;  
-  bottom: 0;  
-  background-color: rgba(0, 0, 0, 0.5);  
-  display: flex;  
-  justify-content: center;  
-  align-items: center;  
-  z-index: 1000;  
-  background-color: #fff;
-  width: 100%; /* 根据需要调整 */  
-  margin-bottom: 10rpx;
-}  
-  
-.modal-content {  
-  background-color: #fff;  
-  padding: 1px;  
-  border-radius: 10px;  
-  width: 90%; /* 根据需要调整 */  
-  height:90%;
-  max-width: 600px; /* 限定最大宽度 */  
-  box-sizing: border-box;  
-  position: relative;  
-  z-index: 1001;  
-}  
-  
-.modal-close {  
-  position: absolute;  
-  top: 0px;  
-  right: 0px;  
-  font-size: 24px;  
-  cursor: pointer;  
-}  
-  
-.modal-close image {  
-  width: 20px;  
-  height: 20px;  
-}
-
-.container-yh {  
-  display: flex;  
-  flex-direction: column;  
-  align-items: center;  
-  justify-content: flex-start;  
-  height: 500rpx;   
-  padding: 20rpx;  
-}  
-  
-.circle-container-yh {  
-  display: flex;  
-  align-items: center;  
-  justify-content: space-between; /* 让左右文本分布在图片两侧 */  
-  width: 100%; /* 根据需要调整,确保足够宽以容纳图片和文本 */  
-}  
-  
-.circle-image-yh {  
-  width: 200rpx; /* 假设圆环图片宽度 */  
-  height: 200rpx; /* 假设圆环图片高度 */  
-}  
-  
-.text-container-yh {  
-  display: flex;  
-  flex-direction: column; /* 文本内容垂直排列 */  
-  align-items: flex-start; /* 文本内容从顶部开始排列 */  
-}  
-  
-.left-text-yh, .right-text-yh {  
-  /* 根据需要添加样式,如内边距、字体大小等 */  
-  display: flex;  
-  align-items: center; 
-}  
-
-.icon-yh {  
-  width: 30rpx; /* 假设小图片的宽度 */  
-  height: 30rpx; /* 假设小图片的高度 */  
-  margin-right: 10rpx; /* 小图片与文字的间距 */  
-}
-
-.top-text-yh {  
-  /* 上方文字的样式 */  
-  display: flex;  
-  justify-content: space-between; /* 让左右文本分布在水平方向上 */  
-  align-items: center;  
-  margin-top: 20rpx; /* 与圆环图片的间距 */  
-}
-
-.text-row-yh {  
-  display: flex;  
-  align-items: center;  
-  margin-bottom: 10rpx; /* 行与行之间的间距 */  
-}
-
-.centered-text-yh {  
-  position: absolute;  
-  top: 85rpx; /* 垂直居中 */  
-  left: 0;  
-  right: 0;  
-  transform: translateY(-50%); /* 垂直居中 */  
-  text-align: center; /* 水平居中 */  
-}  
-  
-.text-line-yh {  
-  display: block;  
-  margin-bottom: 20rpx; /* 行间距 */  
-}  
-  
-.text-line-yh-1 {  
-  color: white; /* 第一行文字颜色 */  
-  font-size: 40rpx; /* 第一行文字大小 */  
-}  
-  
-.text-line-yh-2 {  
-  color: #99ff62; /* 第二行文字颜色 */  
-  font-size: 120rpx; /* 第二行文字大小 */  
-}  
-  
-.text-line-yh-3 {  
-  color: white; /* 第三行文字颜色 */  
-  font-size: 32rpx; /* 第三行文字大小 */  
-} 
-
-.close-btn {  
-  background-color: #ccc;
-  color: #333;
-  border: none;
-  padding: 5rpx 20rpx;
-  margin-top: 20rpx;
-  /* margin-bottom: 5rpx; */
-  height: 100rpx;
-  width: 50%;
-}
-
-.large-text-container {  
-  display: flex;  
-  flex-direction: column;  
-  align-items: center; 
-  justify-content: center; 
-  text-align: center; 
-  margin-top: 20rpx; 
-}  
-  
-.large-text {  
-  font-size: 25px; 
-  margin-bottom: 10rpx;  
-  font-weight: 600;
-  color: #FFCC00;
-}  
-
-.large-text-1 {  
-  font-size: 25px;   
-  margin-bottom: 10rpx;   
-} 
-  
-/* 最后一行文字不需要 margin-bottom */  
-.large-text:last-child {  
-  margin-bottom: 0;  
+  white-space: wrap;
+  margin-top: 30rpx;
+  font-size: 32rpx;
+  line-height: 40rpx;
+  color: #FFFFFF;
 }

+ 0 - 1
project.config.json

@@ -52,7 +52,6 @@
     "tabIndent": "insertSpaces",
     "tabSize": 2
   },
-  "isGameTourist": false,
   "condition": {
     "miniprogram": {
       "list": [

+ 53 - 7
project.private.config.json

@@ -1,33 +1,79 @@
 {
   "projectname": "xiaobaiWeapp_Native",
   "setting": {
-    "compileHotReLoad": true
+    "compileHotReLoad": true,
+    "skylineRenderEnable": false,
+    "bigPackageSizeSupport": true,
+    "preloadBackgroundData": false
   },
   "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
   "condition": {
     "miniprogram": {
       "list": [
         {
-          "name": "pages/index/index",
-          "pathName": "pages/index/index",
+          "name": "subpages/sleepEvaluation/sleepEvaluation",
+          "pathName": "subpages/sleepEvaluation/sleepEvaluation",
           "query": "",
+          "launchMode": "default",
           "scene": null
         },
         {
-          "name": "",
-          "pathName": "pages/test/test",
+          "name": "subpages/sleepQualityIndexAssessment/sleepQualityIndexAssessment",
+          "pathName": "subpages/sleepQualityIndexAssessment/sleepQualityIndexAssessment",
           "query": "",
           "launchMode": "default",
           "scene": null
         },
         {
-          "name": "",
+          "name": "subpages/sleepQualityIndexAssessment/sleepQualityIndexAssessment",
+          "pathName": "subpages/sleepQualityIndexAssessment/sleepQualityIndexAssessment",
+          "query": "",
+          "launchMode": "default",
+          "scene": null
+        },
+        {
+          "name": "subpages/sleepEvaluation/sleepEvaluation",
+          "pathName": "subpages/sleepEvaluation/sleepEvaluation",
+          "query": "",
+          "launchMode": "default",
+          "scene": null
+        },
+        {
+          "name": "pages/data/data",
           "pathName": "pages/data/data",
           "query": "",
           "launchMode": "default",
           "scene": null
+        },
+        {
+          "name": "pages/testSAS/testSAS",
+          "pathName": "pages/testSAS/testSAS",
+          "query": "",
+          "launchMode": "default",
+          "scene": null
+        },
+        {
+          "name": "pages/scan/scan",
+          "pathName": "pages/scan/scan",
+          "query": "",
+          "launchMode": "default",
+          "scene": null
+        },
+        {
+          "name": "pages/index/index",
+          "pathName": "pages/index/index",
+          "query": "",
+          "scene": null
+        },
+        {
+          "name": "",
+          "pathName": "pages/shop/shop",
+          "query": "",
+          "launchMode": "default",
+          "scene": null
         }
       ]
     }
-  }
+  },
+  "libVersion": "3.5.3"
 }

BIN
static/bg/ic_gyms.png


BIN
static/bg/ic_gyms_bg.png


BIN
static/bg/ic_qcms.png


BIN
static/bg/ic_qcms_bg.png


BIN
static/bg/ic_smms.png


BIN
static/bg/ic_smms_bg.png


+ 41 - 0
static/icons/ic_add.svg

@@ -0,0 +1,41 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="56"
+    height="56" viewBox="0 0 56 56">
+    <defs>
+        <filter id="master_svg0_1082_00751" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB" x="-18"
+            y="-15" width="56" height="56">
+            <feFlood flood-opacity="0" result="BackgroundImageFix" />
+            <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" />
+            <feOffset dy="3" dx="0" />
+            <feGaussianBlur stdDeviation="4.5" />
+            <feColorMatrix type="matrix"
+                values="0 0 0 0 0.8908554315567017 0 0 0 0 0.8940095901489258 0 0 0 0 0.898809552192688 0 0 0 1 0" />
+            <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow" />
+            <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow" result="shape" />
+        </filter>
+        <linearGradient x1="0.18832923471927643" y1="-0.03713463246822357" x2="0.9376662969589233"
+            y2="0.8779844641685486" id="master_svg1_36_5042">
+            <stop offset="0%" stop-color="#FA6974" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FCA5AD" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="0.18832923471927643" y1="-0.03713463246822357" x2="0.9376662969589233"
+            y2="0.8779844641685486" id="master_svg2_36_5042">
+            <stop offset="0%" stop-color="#FA6974" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FCA5AD" stop-opacity="1" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g filter="url(#master_svg0_1082_00751)">
+            <rect x="11" y="9" width="26" height="26" rx="13" fill="#FFFFFF" fill-opacity="1" />
+            <rect x="11" y="9" width="26" height="26" rx="13" fill-opacity="0" stroke-opacity="1" stroke="#000000"
+                fill="none" stroke-width="0" />
+        </g>
+        <g>
+            <g transform="matrix(1,0,0,-1,0,46)">
+                <rect x="18" y="23" width="12" height="2" rx="1" fill="#666666" fill-opacity="1" />
+            </g>
+            <g transform="matrix(0,-1,-1,0,53,53)">
+                <rect x="25" y="28" width="12" height="2" rx="1" fill="#666666" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 17 - 0
static/icons/ic_auto_1.svg

@@ -0,0 +1,17 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="22"
+    height="21.999755859375" viewBox="0 0 22 21.999755859375">
+    <g>
+        <g>
+            <g>
+                <path
+                    d="M11,0C4.92567,0,0,4.92422,0,10.9997C0,17.0752,4.92567,21.9997,11,21.9997C17.0743,21.9997,22,17.074,22,10.9997C22,4.92538,17.074,0,11,0ZM11,20.5331C5.73512,20.5331,1.4669,16.2649,1.4669,11C1.4669,5.73512,5.73483,1.46661,11,1.46661C16.2652,1.46661,20.5331,5.73483,20.5331,10.9997C20.5331,16.2646,16.2649,20.5328,11,20.5328L11,20.5331Z"
+                    fill="#666666" fill-opacity="1" />
+            </g>
+        </g>
+        <g>
+            <path
+                d="M15.540476984558106,15.7308Q15.644566984558105,16.058,15.495856984558106,16.2885Q15.347156984558106,16.519,15.020006984558105,16.519L14.960526984558106,16.519Q14.633376984558106,16.519,14.440066984558106,16.3331Q14.246746984558104,16.147199999999998,14.127786984558107,15.7903L10.707596984558105,6.77885L11.287546984558105,6.77885L7.882226984558105,15.7903Q7.748396984558106,16.147199999999998,7.555076984558106,16.3331Q7.361761984558106,16.519,7.0346139845581055,16.519L6.9751319845581055,16.519Q6.647983984558105,16.519,6.499280284558106,16.2885Q6.350576384558106,16.058,6.469539484558106,15.7308L10.127656984558104,6.065075Q10.350706984558105,5.5,10.975266984558106,5.5L11.019876984558106,5.5Q11.659306984558105,5.5,11.867486984558106,6.065075L15.540476984558106,15.7308ZM13.592456984558105,11.95375L13.592456984558105,13.24747L8.402686984558105,13.24747L8.402686984558105,11.95375L13.592456984558105,11.95375Z"
+                fill="#666666" fill-opacity="1" />
+        </g>
+    </g>
+</svg>

+ 17 - 0
static/icons/ic_auto_2.svg

@@ -0,0 +1,17 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="22"
+    height="21.999755859375" viewBox="0 0 22 21.999755859375">
+    <g>
+        <g>
+            <g>
+                <path
+                    d="M11,0C4.92567,0,0,4.92422,0,10.9997C0,17.0752,4.92567,21.9997,11,21.9997C17.0743,21.9997,22,17.074,22,10.9997C22,4.92538,17.074,0,11,0ZM11,20.5331C5.73512,20.5331,1.4669,16.2649,1.4669,11C1.4669,5.73512,5.73483,1.46661,11,1.46661C16.2652,1.46661,20.5331,5.73483,20.5331,10.9997C20.5331,16.2646,16.2649,20.5328,11,20.5328L11,20.5331Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </g>
+        <g>
+            <path
+                d="M15.540476984558106,15.7308Q15.644566984558105,16.058,15.495856984558106,16.2885Q15.347156984558106,16.519,15.020006984558105,16.519L14.960526984558106,16.519Q14.633376984558106,16.519,14.440066984558106,16.3331Q14.246746984558104,16.147199999999998,14.127786984558107,15.7903L10.707596984558105,6.77885L11.287546984558105,6.77885L7.882226984558105,15.7903Q7.748396984558106,16.147199999999998,7.555076984558106,16.3331Q7.361761984558106,16.519,7.0346139845581055,16.519L6.9751319845581055,16.519Q6.647983984558105,16.519,6.499280284558106,16.2885Q6.350576384558106,16.058,6.469539484558106,15.7308L10.127656984558104,6.065075Q10.350706984558105,5.5,10.975266984558106,5.5L11.019876984558106,5.5Q11.659306984558105,5.5,11.867486984558106,6.065075L15.540476984558106,15.7308ZM13.592456984558105,11.95375L13.592456984558105,13.24747L8.402686984558105,13.24747L8.402686984558105,11.95375L13.592456984558105,11.95375Z"
+                fill="#FFFFFF" fill-opacity="1" />
+        </g>
+    </g>
+</svg>

Datei-Diff unterdrückt, da er zu groß ist
+ 64 - 0
static/icons/ic_cl_1.svg


Datei-Diff unterdrückt, da er zu groß ist
+ 17 - 0
static/icons/ic_cl_2.svg


Datei-Diff unterdrückt, da er zu groß ist
+ 17 - 0
static/icons/ic_cold_1.svg


Datei-Diff unterdrückt, da er zu groß ist
+ 17 - 0
static/icons/ic_cold_2.svg


+ 34 - 0
static/icons/ic_dd_1.svg

@@ -0,0 +1,34 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <defs>
+        <linearGradient x1="0.2784382104873657" y1="-0.10447634756565094" x2="0.8000474572181702" y2="1"
+            id="master_svg0_821_5051">
+            <stop offset="50.45957565307617%" stop-color="#0ABEA5" stop-opacity="1" />
+            <stop offset="100%" stop-color="#5AEEDA" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="0.2784382104873657" y1="-0.10447634756565094" x2="0.8000474572181702" y2="1"
+            id="master_svg1_821_5048">
+            <stop offset="0%" stop-color="#0BC3AA" stop-opacity="1" />
+            <stop offset="100%" stop-color="#73F4E3" stop-opacity="1" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g>
+            <ellipse cx="22" cy="22" rx="22" ry="22" fill="#E7FFFB" fill-opacity="1" />
+        </g>
+        <g>
+            <g>
+                <g>
+                    <path
+                        d="M23.9264,21.7177L23.9264,19.1966C23.9264,18.4384,23.398400000000002,17.79278,22.659,17.54773C22.6583,17.54773,22.657899999999998,17.54708,22.657899999999998,17.546419999999998L22.657899999999998,8.614742C22.657899999999998,8.289116,22.380200000000002,8.0111831,22.0229,8.000328922C21.6657,7.9894747,21.3428,8.261158,21.3428,8.598953999999999L21.3428,17.54675Q21.342399999999998,17.54773,21.3417,17.54806C20.602359999999997,17.79311,20.074289999999998,18.4388,20.074289999999998,19.1969L20.074289999999998,21.7167Q20.07393,21.718,20.072850000000003,21.718C15.12304,22.5163,11.303765,26.3334,11,30.9984C11,30.999,11.000722389,31,11.00144478,31L32.998599999999996,31Q33,30.9994,33,30.9984C32.696600000000004,26.333,28.8766,22.516,23.926099999999998,21.7177L23.9264,21.7177Z"
+                        fill="url(#master_svg0_821_5051)" fill-opacity="1" />
+                </g>
+                <g>
+                    <path
+                        d="M22.00017646636963,35.121682890625C24.30098646636963,35.121682890625,26.32584646636963,33.917102890625,27.47732646636963,32.105712890625L16.52302646636963,32.105712890625C17.674516466369628,33.917102890625,19.69937646636963,35.121682890625,22.00017646636963,35.121682890625Z"
+                        fill="url(#master_svg1_821_5048)" fill-opacity="1" />
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 22 - 0
static/icons/ic_dd_2.svg

@@ -0,0 +1,22 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <g>
+        <g>
+            <ellipse cx="22" cy="22" rx="22" ry="22" fill="#2CCEB8" fill-opacity="1" />
+        </g>
+        <g>
+            <g>
+                <g>
+                    <path
+                        d="M23.9264,21.7177L23.9264,19.1966C23.9264,18.4384,23.398400000000002,17.79278,22.659,17.54773C22.6583,17.54773,22.657899999999998,17.54708,22.657899999999998,17.546419999999998L22.657899999999998,8.614742C22.657899999999998,8.289116,22.380200000000002,8.0111831,22.0229,8.000328922C21.6657,7.9894747,21.3428,8.261158,21.3428,8.598953999999999L21.3428,17.54675Q21.342399999999998,17.54773,21.3417,17.54806C20.602359999999997,17.79311,20.074289999999998,18.4388,20.074289999999998,19.1969L20.074289999999998,21.7167Q20.07393,21.718,20.072850000000003,21.718C15.12304,22.5163,11.303765,26.3334,11,30.9984C11,30.999,11.000722389,31,11.00144478,31L32.998599999999996,31Q33,30.9994,33,30.9984C32.696600000000004,26.333,28.8766,22.516,23.926099999999998,21.7177L23.9264,21.7177Z"
+                        fill="#FFFFFF" fill-opacity="1" />
+                </g>
+                <g>
+                    <path
+                        d="M22.00017646636963,35.121682890625C24.30098646636963,35.121682890625,26.32584646636963,33.917102890625,27.47732646636963,32.105712890625L16.52302646636963,32.105712890625C17.674516466369628,33.917102890625,19.69937646636963,35.121682890625,22.00017646636963,35.121682890625Z"
+                        fill="#FFFFFF" fill-opacity="1" />
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 38 - 0
static/icons/ic_dialog_close.svg

@@ -0,0 +1,38 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="28"
+    height="28" viewBox="0 0 28 28">
+    <defs>
+        <mask id="master_svg0_1153_18124" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="28" height="28" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+        <mask id="master_svg1_1153_18120" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="28" height="28" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+    </defs>
+    <g>
+        <g>
+            <g mask="url(#master_svg0_1153_18124)">
+                <g>
+                    <path
+                        d="M26.1212215423584,22.188078927661135L26.123323132358397,22.188078927661135L26.123323132358397,22.175905227661133L26.1212215423584,22.188078927661135Z"
+                        fill="#EEEEEE" fill-opacity="1" />
+                </g>
+            </g>
+            <g mask="url(#master_svg1_1153_18120)">
+                <g>
+                    <path
+                        d="M27.97265495483279,13.993707811444997C27.97265495483279,6.2917678114449975,21.69675495483279,0.027707811444997787,13.984054954832793,0.027707811444997787C6.271284954832792,0.027707811444997787,-0.005045045167207718,6.2917678114449975,-0.005045045167207718,13.993707811444997C-0.005045045167207718,21.695607811444997,6.269594954832792,27.959707811444996,13.984054954832793,27.959707811444996C21.69845495483279,27.959707811444996,27.97265495483279,21.694807811445,27.97265495483279,13.993707811444997ZM13.984054954832793,25.955907811444998C7.378024954832792,25.955907811444998,2.0024049548327922,20.588207811445,2.0024049548327922,13.993707811444997C2.0024049548327922,7.399247811444998,7.378024954832792,2.0319078114449978,13.984054954832793,2.0319078114449978C20.59005495483279,2.0319078114449978,25.964354954832793,7.398407811444998,25.964354954832793,13.993707811444997C25.964354954832793,20.589007811444997,20.588754954832794,25.955907811444998,13.984054954832793,25.955907811444998Z"
+                        fill="#EEEEEE" fill-opacity="1" />
+                </g>
+            </g>
+        </g>
+        <g>
+            <path
+                d="M19.715397393798828,18.36730585784912L15.389737393798828,14.03610585784912L19.711197393798827,9.769945857849121C20.103497393798825,9.38329585784912,20.10639739379883,8.751051857849122,19.71919739379883,8.359363857849122C19.331897393798826,7.967256357849121,18.69779739379883,7.964317357849121,18.30549739379883,8.351806857849121L13.97980739379883,12.62342585784912L9.718927393798829,8.356005857849121C9.328707393798828,7.965997557849121,8.696697393798829,7.964317957849121,8.305215393798829,8.353906857849122C7.914995193798828,8.743914857849122,7.914995193798828,9.37531585784912,8.303113393798828,9.76490585784912L12.559377393798828,14.026455857849122L8.269473393798828,18.262805857849123C7.877150793798828,18.65030585784912,7.873366493798828,19.28040585784912,8.261484393798828,19.67210585784912C8.457435393798828,19.86990585784912,8.713517393798828,19.968905857849123,8.970861393798828,19.968905857849123C9.228207393798828,19.968905857849123,9.480077393798828,19.87200585784912,9.674347393798827,19.68140585784912L13.97013739379883,15.43913585784912L18.299597393798827,19.77750585784912C18.49469739379883,19.972305857849122,18.751197393798826,20.07010585784912,19.00769739379883,20.07010585784912C19.264197393798828,20.07010585784912,19.51779739379883,19.972305857849122,19.712897393798826,19.77920585784912C20.103097393798826,19.39040585784912,20.10429739379883,18.75940585784912,19.71499739379883,18.36780585784912"
+                fill="#EEEEEE" fill-opacity="1" />
+        </g>
+    </g>
+</svg>

+ 35 - 0
static/icons/ic_ds_1.svg

@@ -0,0 +1,35 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <defs>
+        <linearGradient x1="0" y1="0" x2="1" y2="1" id="master_svg0_1082_00883">
+            <stop offset="0%" stop-color="#FDA64A" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FCB973" stop-opacity="0.7200000286102295" />
+        </linearGradient>
+        <linearGradient x1="0" y1="0" x2="1" y2="1" id="master_svg1_1082_00883">
+            <stop offset="0%" stop-color="#FDA64A" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FCB973" stop-opacity="0.7200000286102295" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g>
+            <g>
+                <ellipse cx="22" cy="22" rx="22" ry="22" fill="#FFF7E8" fill-opacity="1" />
+            </g>
+        </g>
+        <g>
+            <g>
+                <g>
+                    <path
+                        d="M25.873669780032635,30.44400172973633L18.005993780032636,30.44400172973633C17.722948780032635,30.44400172973633,17.494839780032635,30.20342372973633,17.494839780032635,29.90487272973633C17.494839780032635,29.60632172973633,17.722948780032635,29.365741729736328,18.005993780032636,29.365741729736328L25.873669780032635,29.365741729736328C26.156719780032635,29.365741729736328,26.384829780032632,29.606585729736327,26.384829780032632,29.90487272973633C26.384829780032632,30.203159729736328,26.156719780032635,30.44400172973633,25.873669780032635,30.44400172973633Z"
+                        fill="url(#master_svg0_1082_00883)" fill-opacity="1" />
+                </g>
+                <g></g>
+            </g>
+            <g>
+                <path
+                    d="M13.50737,27.595729294192793L30.3726,27.595729294192793C31.7653,27.595729294192793,32.8904,26.46242929419279,32.8797,25.059329294192793L32.8797,15.550719294192792C32.8797,14.158359294192792,31.7548,13.025029294192791,30.3726,13.025029294192791L13.50737,13.025029294192791C12.12511,13.025029294192791,11,14.158359294192792,11,15.550719294192792L11,25.07012929419279C11,26.46242929419279,12.12511,27.595729294192793,13.50737,27.595729294192793ZM16.28014,16.51998929419279L13.64014,16.51998929419279L13.64014,17.399989294192792L16.28014,17.399989294192792L16.28014,16.51998929419279Z"
+                    fill-rule="evenodd" fill="url(#master_svg1_1082_00883)" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 66 - 0
static/icons/ic_hot_1.svg

@@ -0,0 +1,66 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="22"
+    height="22" viewBox="0 0 22 22">
+    <defs>
+        <mask id="master_svg0_1082_00668" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="22" height="22" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+        <mask id="master_svg1_1082_00664" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="22" height="22" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+    </defs>
+    <g>
+        <g>
+            <path
+                d="M10.988194245910645,6.770595013427735C8.653324245910644,6.770595013427735,6.760684245910644,8.661195013427735,6.760684245910644,10.993565013427734C6.760684245910644,13.325935013427735,8.653324245910644,15.216295013427734,10.988194245910645,15.216295013427734C13.323064245910645,15.216295013427734,15.215744245910644,13.325665013427734,15.215744245910644,10.993565013427734C15.215744245910644,8.661465013427733,13.323064245910645,6.770595013427735,10.988194245910645,6.770595013427735ZM10.988194245910645,5.081295013427734C14.256904245910645,5.081295013427734,16.906544245910645,7.728365013427734,16.906544245910645,10.993565013427734C16.906544245910645,14.258775013427734,14.256904245910645,16.905595013427735,10.988194245910645,16.905595013427735C7.719484245910644,16.905595013427735,5.0698442459106445,14.258775013427734,5.0698442459106445,10.993565013427734C5.0698442459106445,7.728365013427734,7.719754245910645,5.081295831473734,10.988194245910645,5.081295013427734Z"
+                fill="#FF8800" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M10.988194206481934,3.3922840573582054C10.763857206481934,3.3922840573582054,10.548913206481934,3.3032840573582054,10.390321206481934,3.1448640573582054C10.231729006481933,2.9864440573582054,10.142638206481934,2.771724057358205,10.142638206481934,2.5476340573582053L10.142638206481934,0.8586030573582053C10.142638206481934,0.3921830573582053,10.521273206481933,0.013954057358205318,10.988194206481934,0.013954057358205318C11.455118206481934,0.013954057358205318,11.833748206481934,0.3921830573582053,11.833748206481934,0.8586030573582053L11.833748206481934,2.5479040573582052C11.833748206481934,2.771994057358205,11.744658206481933,2.9867140573582054,11.586068206481933,3.1451340573582054C11.427478206481933,3.3035540573582054,11.212528206481934,3.3925440573582053,10.988194206481934,3.3925440573582053L10.988194206481934,3.3922840573582054Z"
+                fill="#FF8800" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M10.988194206481934,21.973197706298826C10.521273206481933,21.973197706298826,10.142638206481934,21.594967706298828,10.142638206481934,21.12854770629883L10.142638206481934,19.43951670629883C10.142638206481934,19.21542070629883,10.231729006481933,19.00070670629883,10.390321206481934,18.84228370629883C10.548913206481934,18.683862906298828,10.763857206481934,18.594867706298828,10.988194206481934,18.594867706298828C11.212528206481934,18.594867706298828,11.427478206481933,18.683862906298828,11.586068206481933,18.84228370629883C11.744658206481933,19.000705706298827,11.833748206481934,19.215419706298828,11.833748206481934,19.43951670629883L11.833748206481934,21.12854770629883C11.833748206481934,21.594967706298828,11.455118206481934,21.973197706298826,10.988194206481934,21.973197706298826Z"
+                fill="#FF8800" fill-opacity="1" />
+        </g>
+        <g>
+            <g mask="url(#master_svg0_1082_00668)">
+                <g>
+                    <path
+                        d="M18.597654342651367,10.993566198181153C18.597654342651367,10.769470198181152,18.686745142651368,10.554756198181153,18.84533634265137,10.396334198181153C19.003927342651366,10.237912398181152,19.218872342651366,10.148917198181152,19.443210342651366,10.148917198181152L21.134054342651368,10.148917198181152C21.600974342651366,10.148917198181152,21.979604342651367,10.526878198181151,21.979604342651367,10.993566198181153C21.979604342651367,11.460257198181152,21.601244342651366,11.838217198181152,21.134054342651368,11.838217198181152L19.443210342651366,11.838217198181152C19.218873342651367,11.838217198181152,19.003929342651368,11.749217198181153,18.84533634265137,11.590797198181152C18.686745142651368,11.432377198181152,18.597654342651367,11.217657198181152,18.597654342651367,10.993566198181153Z"
+                        fill="#FF8800" fill-opacity="1" />
+                </g>
+            </g>
+            <g>
+                <path
+                    d="M-0.003220140468329191,10.993566198181153C-0.003220140468329191,10.527146198181152,0.3754148595316708,10.148917198181152,0.8423348595316708,10.148917198181152L2.533179859531671,10.148917198181152C2.757509859531671,10.148917198181152,2.972459859531671,10.237912398181152,3.1310498595316707,10.396334198181153C3.289639859531671,10.554756198181153,3.3787298595316706,10.769470198181152,3.3787298595316706,10.993566198181153C3.3787298595316706,11.217657198181152,3.289639859531671,11.432377198181152,3.1310498595316707,11.590797198181152C2.972459859531671,11.749217198181153,2.757509859531671,11.838217198181152,2.533179859531671,11.838217198181152L0.8423348595316708,11.838217198181152C0.3754148595316708,11.838217198181152,-0.003220140468329191,11.459987198181153,-0.003220140468329191,10.993566198181153Z"
+                    fill="#FF8800" fill-opacity="1" />
+            </g>
+        </g>
+        <g>
+            <path
+                d="M16.615927592895506,16.61526486437988C16.945991592895506,16.285554964379884,17.48133959289551,16.285554964379884,17.81139959289551,16.61526486437988L19.008489592895508,17.80946286437988C19.16761959289551,17.967882864379884,19.256979592895508,18.183132864379882,19.256979592895508,18.407492864379883C19.256979592895508,18.631862864379883,19.16761959289551,18.846842864379884,19.008489592895508,19.005262864379883C18.849899592895508,19.164222864379884,18.634419592895508,19.253482864379883,18.410079592895507,19.253482864379883C18.185749592895508,19.253482864379883,17.96999959289551,19.164222864379884,17.81139959289551,19.005262864379883L16.615927592895506,17.80946286437988C16.28586319289551,17.479482864379882,16.28586319289551,16.944974864379883,16.615927592895506,16.61526486437988Z"
+                fill="#FF8800" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M2.9678971197357176,2.981869715698242C3.2979611197357177,2.652159015698242,3.833308119735718,2.652159015698242,4.163378119735718,2.981869715698242L5.360728119735718,4.1760667156982425C5.5198581197357175,4.334486715698242,5.608948119735718,4.549736715698242,5.608948119735718,4.774096715698242C5.608948119735718,4.9984667156982425,5.519588119735718,5.213716715698242,5.360728119735718,5.372136715698242C5.202138119735718,5.530826715698242,4.986658119735718,5.620086715698243,4.762048119735718,5.620086715698243C4.537448119735718,5.620086715698243,4.321968119735718,5.530826715698242,4.163378119735718,5.372136715698242L2.9678971197357176,4.1760667156982425C2.6378321197357177,3.846356715698242,2.6378321197357177,3.311579715698242,2.9678971197357176,2.981869715698242Z"
+                fill="#FF8800" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M5.360729227371216,16.61526486437988C5.690799227371215,16.944974864379883,5.690799227371215,17.479752864379883,5.360729227371216,17.80946286437988L4.165249227371216,19.005262864379883C4.006659227371216,19.164222864379884,3.7911792273712157,19.253482864379883,3.5665742273712158,19.253482864379883C3.341970227371216,19.253482864379883,3.126488227371216,19.164222864379884,2.967897227371216,19.005262864379883C2.808768227371216,18.846842864379884,2.719409227371216,18.631592864379883,2.719409227371216,18.407492864379883C2.719409227371216,18.183402864379882,2.808768227371216,17.967882864379884,2.967897227371216,17.80946286437988L4.164979227371216,16.61526486437988C4.495049227371216,16.285554964379884,5.030399227371216,16.285554964379884,5.360459227371216,16.61526486437988L5.360729227371216,16.61526486437988Z"
+                fill="#FF8800" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M19.0084873626709,2.981869238861084C19.338557362670898,3.311580238861084,19.338557362670898,3.846356238861084,19.0084873626709,4.176066238861084L17.8130073626709,5.372136238861084C17.6544173626709,5.530826238861084,17.4389373626709,5.620086238861084,17.214334362670897,5.620086238861084C16.9897293626709,5.620086238861084,16.774516362670898,5.530826238861084,16.615925362670897,5.372136238861084C16.4570653626709,5.213716238861084,16.3674373626709,4.998466238861084,16.3674373626709,4.774096238861084C16.3674373626709,4.549736238861084,16.456796762670898,4.334486238861084,16.615925362670897,4.176066238861084L17.8130073626709,2.981869238861084C18.143077362670898,2.6521585388610838,18.6784273626709,2.6521585388610838,19.0084873626709,2.981869238861084Z"
+                fill="#FF8800" fill-opacity="1" />
+        </g>
+    </g>
+</svg>

+ 66 - 0
static/icons/ic_hot_2.svg

@@ -0,0 +1,66 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="22"
+    height="22" viewBox="0 0 22 22">
+    <defs>
+        <mask id="master_svg0_1082_00668" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="22" height="22" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+        <mask id="master_svg1_1082_00664" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="22" height="22" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+    </defs>
+    <g>
+        <g>
+            <path
+                d="M10.988194245910645,6.770595013427735C8.653324245910644,6.770595013427735,6.760684245910644,8.661195013427735,6.760684245910644,10.993565013427734C6.760684245910644,13.325935013427735,8.653324245910644,15.216295013427734,10.988194245910645,15.216295013427734C13.323064245910645,15.216295013427734,15.215744245910644,13.325665013427734,15.215744245910644,10.993565013427734C15.215744245910644,8.661465013427733,13.323064245910645,6.770595013427735,10.988194245910645,6.770595013427735ZM10.988194245910645,5.081295013427734C14.256904245910645,5.081295013427734,16.906544245910645,7.728365013427734,16.906544245910645,10.993565013427734C16.906544245910645,14.258775013427734,14.256904245910645,16.905595013427735,10.988194245910645,16.905595013427735C7.719484245910644,16.905595013427735,5.0698442459106445,14.258775013427734,5.0698442459106445,10.993565013427734C5.0698442459106445,7.728365013427734,7.719754245910645,5.081295831473734,10.988194245910645,5.081295013427734Z"
+                fill="#FFFFFF" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M10.988194206481934,3.3922840573582054C10.763857206481934,3.3922840573582054,10.548913206481934,3.3032840573582054,10.390321206481934,3.1448640573582054C10.231729006481933,2.9864440573582054,10.142638206481934,2.771724057358205,10.142638206481934,2.5476340573582053L10.142638206481934,0.8586030573582053C10.142638206481934,0.3921830573582053,10.521273206481933,0.013954057358205318,10.988194206481934,0.013954057358205318C11.455118206481934,0.013954057358205318,11.833748206481934,0.3921830573582053,11.833748206481934,0.8586030573582053L11.833748206481934,2.5479040573582052C11.833748206481934,2.771994057358205,11.744658206481933,2.9867140573582054,11.586068206481933,3.1451340573582054C11.427478206481933,3.3035540573582054,11.212528206481934,3.3925440573582053,10.988194206481934,3.3925440573582053L10.988194206481934,3.3922840573582054Z"
+                fill="#FFFFFF" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M10.988194206481934,21.973197706298826C10.521273206481933,21.973197706298826,10.142638206481934,21.594967706298828,10.142638206481934,21.12854770629883L10.142638206481934,19.43951670629883C10.142638206481934,19.21542070629883,10.231729006481933,19.00070670629883,10.390321206481934,18.84228370629883C10.548913206481934,18.683862906298828,10.763857206481934,18.594867706298828,10.988194206481934,18.594867706298828C11.212528206481934,18.594867706298828,11.427478206481933,18.683862906298828,11.586068206481933,18.84228370629883C11.744658206481933,19.000705706298827,11.833748206481934,19.215419706298828,11.833748206481934,19.43951670629883L11.833748206481934,21.12854770629883C11.833748206481934,21.594967706298828,11.455118206481934,21.973197706298826,10.988194206481934,21.973197706298826Z"
+                fill="#FFFFFF" fill-opacity="1" />
+        </g>
+        <g>
+            <g mask="url(#master_svg0_1082_00668)">
+                <g>
+                    <path
+                        d="M18.597654342651367,10.993566198181153C18.597654342651367,10.769470198181152,18.686745142651368,10.554756198181153,18.84533634265137,10.396334198181153C19.003927342651366,10.237912398181152,19.218872342651366,10.148917198181152,19.443210342651366,10.148917198181152L21.134054342651368,10.148917198181152C21.600974342651366,10.148917198181152,21.979604342651367,10.526878198181151,21.979604342651367,10.993566198181153C21.979604342651367,11.460257198181152,21.601244342651366,11.838217198181152,21.134054342651368,11.838217198181152L19.443210342651366,11.838217198181152C19.218873342651367,11.838217198181152,19.003929342651368,11.749217198181153,18.84533634265137,11.590797198181152C18.686745142651368,11.432377198181152,18.597654342651367,11.217657198181152,18.597654342651367,10.993566198181153Z"
+                        fill="#FFFFFF" fill-opacity="1" />
+                </g>
+            </g>
+            <g>
+                <path
+                    d="M-0.003220140468329191,10.993566198181153C-0.003220140468329191,10.527146198181152,0.3754148595316708,10.148917198181152,0.8423348595316708,10.148917198181152L2.533179859531671,10.148917198181152C2.757509859531671,10.148917198181152,2.972459859531671,10.237912398181152,3.1310498595316707,10.396334198181153C3.289639859531671,10.554756198181153,3.3787298595316706,10.769470198181152,3.3787298595316706,10.993566198181153C3.3787298595316706,11.217657198181152,3.289639859531671,11.432377198181152,3.1310498595316707,11.590797198181152C2.972459859531671,11.749217198181153,2.757509859531671,11.838217198181152,2.533179859531671,11.838217198181152L0.8423348595316708,11.838217198181152C0.3754148595316708,11.838217198181152,-0.003220140468329191,11.459987198181153,-0.003220140468329191,10.993566198181153Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </g>
+        <g>
+            <path
+                d="M16.615927592895506,16.61526486437988C16.945991592895506,16.285554964379884,17.48133959289551,16.285554964379884,17.81139959289551,16.61526486437988L19.008489592895508,17.80946286437988C19.16761959289551,17.967882864379884,19.256979592895508,18.183132864379882,19.256979592895508,18.407492864379883C19.256979592895508,18.631862864379883,19.16761959289551,18.846842864379884,19.008489592895508,19.005262864379883C18.849899592895508,19.164222864379884,18.634419592895508,19.253482864379883,18.410079592895507,19.253482864379883C18.185749592895508,19.253482864379883,17.96999959289551,19.164222864379884,17.81139959289551,19.005262864379883L16.615927592895506,17.80946286437988C16.28586319289551,17.479482864379882,16.28586319289551,16.944974864379883,16.615927592895506,16.61526486437988Z"
+                fill="#FFFFFF" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M2.9678971197357176,2.981869715698242C3.2979611197357177,2.652159015698242,3.833308119735718,2.652159015698242,4.163378119735718,2.981869715698242L5.360728119735718,4.1760667156982425C5.5198581197357175,4.334486715698242,5.608948119735718,4.549736715698242,5.608948119735718,4.774096715698242C5.608948119735718,4.9984667156982425,5.519588119735718,5.213716715698242,5.360728119735718,5.372136715698242C5.202138119735718,5.530826715698242,4.986658119735718,5.620086715698243,4.762048119735718,5.620086715698243C4.537448119735718,5.620086715698243,4.321968119735718,5.530826715698242,4.163378119735718,5.372136715698242L2.9678971197357176,4.1760667156982425C2.6378321197357177,3.846356715698242,2.6378321197357177,3.311579715698242,2.9678971197357176,2.981869715698242Z"
+                fill="#FFFFFF" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M5.360729227371216,16.61526486437988C5.690799227371215,16.944974864379883,5.690799227371215,17.479752864379883,5.360729227371216,17.80946286437988L4.165249227371216,19.005262864379883C4.006659227371216,19.164222864379884,3.7911792273712157,19.253482864379883,3.5665742273712158,19.253482864379883C3.341970227371216,19.253482864379883,3.126488227371216,19.164222864379884,2.967897227371216,19.005262864379883C2.808768227371216,18.846842864379884,2.719409227371216,18.631592864379883,2.719409227371216,18.407492864379883C2.719409227371216,18.183402864379882,2.808768227371216,17.967882864379884,2.967897227371216,17.80946286437988L4.164979227371216,16.61526486437988C4.495049227371216,16.285554964379884,5.030399227371216,16.285554964379884,5.360459227371216,16.61526486437988L5.360729227371216,16.61526486437988Z"
+                fill="#FFFFFF" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M19.0084873626709,2.981869238861084C19.338557362670898,3.311580238861084,19.338557362670898,3.846356238861084,19.0084873626709,4.176066238861084L17.8130073626709,5.372136238861084C17.6544173626709,5.530826238861084,17.4389373626709,5.620086238861084,17.214334362670897,5.620086238861084C16.9897293626709,5.620086238861084,16.774516362670898,5.530826238861084,16.615925362670897,5.372136238861084C16.4570653626709,5.213716238861084,16.3674373626709,4.998466238861084,16.3674373626709,4.774096238861084C16.3674373626709,4.549736238861084,16.456796762670898,4.334486238861084,16.615925362670897,4.176066238861084L17.8130073626709,2.981869238861084C18.143077362670898,2.6521585388610838,18.6784273626709,2.6521585388610838,19.0084873626709,2.981869238861084Z"
+                fill="#FFFFFF" fill-opacity="1" />
+        </g>
+    </g>
+</svg>

+ 42 - 0
static/icons/ic_humidity.svg

@@ -0,0 +1,42 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="15"
+    height="15" viewBox="0 0 15 15">
+    <defs>
+        <mask id="master_svg0_1082_00452" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="15" height="15.000000953674316" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+        <mask id="master_svg1_1082_00447" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="1" width="14" height="14" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+        <linearGradient x1="0.23119913041591644" y1="0" x2="1" y2="0.8981599807739258" id="master_svg2_821_4680">
+            <stop offset="0%" stop-color="#4C86F9" stop-opacity="1" />
+            <stop offset="100%" stop-color="#98BBFF" stop-opacity="1" />
+        </linearGradient>
+        <mask id="master_svg3_1082_00450" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="1" width="14" height="14" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+        <linearGradient x1="0.23119913041591644" y1="0" x2="1" y2="0.8981599807739258" id="master_svg4_821_4680">
+            <stop offset="0%" stop-color="#4C86F9" stop-opacity="1" />
+            <stop offset="100%" stop-color="#98BBFF" stop-opacity="1" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g>
+            <g>
+                <path
+                    d="M11.021791157531737,4.498426804818726C10.962191157531738,4.436189104818726,10.879311157531738,4.401224030818725,10.792901157531738,4.402098210518726C10.706321157531738,4.402972389818726,10.624141157531739,4.439510804818726,10.565951157531739,4.502972204818725L10.559251157531738,4.496853404818726C9.827621157531738,5.175000204818725,7.590741157531738,7.4541922048187255,7.590741157531738,9.980422204818726C7.590741157531738,11.731472204818726,9.022271157531739,13.151402204818726,10.788321157531739,13.151402204818726C12.554361157531737,13.151402204818726,13.985541157531738,11.731642204818726,13.985541157531738,9.980422204818726C13.985541157531738,7.424472204818725,11.758191157531737,5.172902204818725,11.021791157531737,4.498426804818726ZM11.09250115753174,11.462412204818726L11.02990115753174,11.462412204818726C10.488891157531738,11.461892204818724,9.979441157531738,11.208912204818725,9.655331157531737,10.779372204818726C9.331221157531738,10.349822204818725,9.230001157531738,9.794052204818726,9.382181157531738,9.279372204818726L9.389761157531739,9.279372204818726C9.468941157531738,9.073422204818726,9.684961157531738,8.952972204818725,9.903441157531738,8.992662204818725C10.121931157531739,9.032522204818726,10.280631157531738,9.221332204818726,10.280631157531738,9.441612204818725C10.280631157531738,9.483922204818725,10.249421157531739,9.582172204818725,10.249421157531739,9.758912204818726C10.249421157531739,9.975002204818725,10.340411157531738,10.181292204818725,10.50053115753174,10.327802204818726C10.660651157531738,10.474302204818725,10.87525115753174,10.547902204818726,11.09250115753174,10.530592204818726L11.09250115753174,10.533212204818724C11.351371157531737,10.533212204818724,11.561041157531738,10.741262204818725,11.561041157531738,10.997732204818725C11.561041157531738,11.254192204818725,11.351371157531737,11.462242204818725,11.09250115753174,11.462242204818725L11.09250115753174,11.462412204818726Z"
+                    fill="url(#master_svg2_821_4680)" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M6.6251,10.063253196428269C6.6251,8.142973196428269,7.71965,6.343673196428269,8.73007,5.0915731964282696C7.60979,3.2073131964282693,6.1578,1.7669281964282693,5.48489,1.1504941964282691C5.38966,1.051018696428269,5.25705,0.9952494164282691,5.1188,0.9964731964282691C4.98055,0.9978717964282692,4.849,1.056263396428269,4.7559,1.1576621964282692L4.74514,1.1478721964282692C3.57565,2.231963196428269,0,5.875493196428269,0,9.91360319642827C0,12.713073196428269,2.28837,14.98247319642827,5.1114,14.98247319642827C6.54963,14.98247319642827,7.8489,14.392973196428269,8.77751,13.444773196428269C7.50469,12.842673196428269,6.62492,11.55487319642827,6.62492,10.063253196428269L6.6251,10.063253196428269ZM5.68327,13.024273196428268L5.68327,13.02517319642827C5.49476,13.059073196428269,5.30343,13.07617319642827,5.11193,13.075973196428269C3.35875,13.075973196428269,1.93763,11.666573196428269,1.93763,9.928113196428269C1.93763,9.687033196428269,1.96549,9.446473196428268,2.02068,9.21168319642827C2.0392,9.04000319642827,2.15082,8.89227319642827,2.31164,8.82619319642827C2.47247,8.760283196428269,2.65692,8.786503196428269,2.79252,8.89472319642827C2.92813,9.00311319642827,2.9932,9.176013196428269,2.96234,9.34594319642827L2.96869,9.34594319642827C2.786,10.008883196428268,2.92548,10.718323196428269,3.34588,11.26467319642827C3.7661,11.810773196428269,4.41926,12.131573196428269,5.1121,12.13197319642827C5.26675,12.13197319642827,5.42123,12.11587319642827,5.57253,12.084273196428269L5.57253,12.08707319642827C5.83351,12.056773196428269,6.06998,12.24177319642827,6.10084,12.50067319642827C6.13153,12.759573196428269,5.94478,12.99397319642827,5.68362,13.02447319642827L5.68327,13.024273196428268Z"
+                    fill="url(#master_svg4_821_4680)" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 32 - 0
static/icons/ic_kqjhq_1.svg

@@ -0,0 +1,32 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <defs>
+        <linearGradient x1="0" y1="-0.07172658294439316" x2="0.5" y2="1" id="master_svg0_1082_01533">
+            <stop offset="0%" stop-color="#34BBFF" stop-opacity="1" />
+            <stop offset="100%" stop-color="#3EBEFF" stop-opacity="0.949999988079071" />
+        </linearGradient>
+        <linearGradient x1="-0.04629126936197281" y1="0" x2="1" y2="1" id="master_svg1_1082_01530">
+            <stop offset="0%" stop-color="#34BBFF" stop-opacity="1" />
+            <stop offset="100%" stop-color="#4FC4FF" stop-opacity="0.46000000834465027" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g>
+            <g>
+                <ellipse cx="22" cy="22" rx="22" ry="22" fill="#EAFAFF" fill-opacity="1" />
+            </g>
+        </g>
+        <g>
+            <g>
+                <path
+                    d="M29.145991552734372,10L15.010551552734375,10C14.452553552734376,10,14.000091552734375,10.464081,14.000091552734375,11.03692L14.000091552734375,21.2377C16.188501552734376,23.029400000000003,18.823561552734375,22.9107,21.916571552734375,20.8794C24.702691552734375,19.04796,27.450691552734376,18.77299,30.156391552734377,20.051000000000002L30.156391552734377,11.03692C30.156391552734377,10.464081,29.703991552734376,10,29.145991552734372,10ZM17.730161552734376,15.97496L17.730161552734376,15.976569999999999C16.617721552734373,15.976569999999999,15.717641552734374,15.07584,15.717641552734374,13.96405C15.717641552734374,12.85226,16.618051552734375,11.95153,17.730161552734376,11.95153C18.842281552734377,11.95153,19.742681552734375,12.85226,19.742681552734375,13.96405C19.742681552734375,15.07584,18.842601552734376,15.97528,17.730161552734376,15.97528L17.730161552734376,15.97496Z"
+                    fill="url(#master_svg0_1082_01533)" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M21.91687,22.365616057128907C18.68121,24.386526057128908,16.04164,24.514326057128905,14.0000683991,22.747406057128906L14.0000683991,28.317016057128907C13.99361387,28.881136057128906,14.444785,29.344256057128906,15.00923,29.352326057128906L18.44304,29.352326057128906L18.44304,31.426146057128907L16.42342,31.426146057128907C15.86543,31.426146057128907,15.41296,31.890246057128905,15.41296,32.463046057128906C15.40941,32.734446057128906,15.51398,32.99624605712891,15.70342,33.19084605712891C15.89286,33.3854460571289,16.15201,33.49644605712891,16.42342,33.500046057128905L28.5408,33.500046057128905C29.0988,33.500046057128905,29.551299999999998,33.03594605712891,29.551299999999998,32.463046057128906C29.551299999999998,31.890246057128905,29.0988,31.426146057128907,28.5408,31.426146057128907L26.1175,31.426146057128907L26.1175,29.352326057128906L29.145899999999997,29.352326057128906C29.7039,29.352326057128906,30.1564,28.889856057128906,30.1564,28.317016057128907L30.1564,21.506198057128906C27.5714,20.262088057128906,24.8233,20.549959057128905,21.91655,22.365296057128905L21.91687,22.365616057128907ZM24.0979,31.426446057128906L20.46266,31.426446057128906L20.46266,29.352646057128908L24.0979,29.352646057128908L24.0979,31.426446057128906Z"
+                    fill="url(#master_svg1_1082_01530)" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 22 - 0
static/icons/ic_kqjhq_2.svg

@@ -0,0 +1,22 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <g>
+        <g>
+            <g>
+                <ellipse cx="22" cy="22" rx="22" ry="22" fill="#2CCEB8" fill-opacity="1" />
+            </g>
+        </g>
+        <g>
+            <g>
+                <path
+                    d="M29.145991552734372,10L15.010551552734375,10C14.452553552734376,10,14.000091552734375,10.464081,14.000091552734375,11.03692L14.000091552734375,21.2377C16.188501552734376,23.029400000000003,18.823561552734375,22.9107,21.916571552734375,20.8794C24.702691552734375,19.04796,27.450691552734376,18.77299,30.156391552734377,20.051000000000002L30.156391552734377,11.03692C30.156391552734377,10.464081,29.703991552734376,10,29.145991552734372,10ZM17.730161552734376,15.97496L17.730161552734376,15.976569999999999C16.617721552734373,15.976569999999999,15.717641552734374,15.07584,15.717641552734374,13.96405C15.717641552734374,12.85226,16.618051552734375,11.95153,17.730161552734376,11.95153C18.842281552734377,11.95153,19.742681552734375,12.85226,19.742681552734375,13.96405C19.742681552734375,15.07584,18.842601552734376,15.97528,17.730161552734376,15.97528L17.730161552734376,15.97496Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M21.91687,22.365616057128907C18.68121,24.386526057128908,16.04164,24.514326057128905,14.0000683991,22.747406057128906L14.0000683991,28.317016057128907C13.99361387,28.881136057128906,14.444785,29.344256057128906,15.00923,29.352326057128906L18.44304,29.352326057128906L18.44304,31.426146057128907L16.42342,31.426146057128907C15.86543,31.426146057128907,15.41296,31.890246057128905,15.41296,32.463046057128906C15.40941,32.734446057128906,15.51398,32.99624605712891,15.70342,33.19084605712891C15.89286,33.3854460571289,16.15201,33.49644605712891,16.42342,33.500046057128905L28.5408,33.500046057128905C29.0988,33.500046057128905,29.551299999999998,33.03594605712891,29.551299999999998,32.463046057128906C29.551299999999998,31.890246057128905,29.0988,31.426146057128907,28.5408,31.426146057128907L26.1175,31.426146057128907L26.1175,29.352326057128906L29.145899999999997,29.352326057128906C29.7039,29.352326057128906,30.1564,28.889856057128906,30.1564,28.317016057128907L30.1564,21.506198057128906C27.5714,20.262088057128906,24.8233,20.549959057128905,21.91655,22.365296057128905L21.91687,22.365616057128907ZM24.0979,31.426446057128906L20.46266,31.426446057128906L20.46266,29.352646057128908L24.0979,29.352646057128908L24.0979,31.426446057128906Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 38 - 0
static/icons/ic_minus.svg

@@ -0,0 +1,38 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="56"
+    height="56" viewBox="0 0 56 56">
+    <defs>
+        <filter id="master_svg0_1082_00712" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB" x="-18"
+            y="-15" width="56" height="56">
+            <feFlood flood-opacity="0" result="BackgroundImageFix" />
+            <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" />
+            <feOffset dy="3" dx="0" />
+            <feGaussianBlur stdDeviation="4.5" />
+            <feColorMatrix type="matrix"
+                values="0 0 0 0 0.8908554315567017 0 0 0 0 0.8940095901489258 0 0 0 0 0.898809552192688 0 0 0 1 0" />
+            <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow" />
+            <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow" result="shape" />
+        </filter>
+        <linearGradient x1="0.18832923471927643" y1="-0.03713463246822357" x2="0.9376662969589233"
+            y2="0.8779844641685486" id="master_svg1_36_5042">
+            <stop offset="0%" stop-color="#FA6974" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FCA5AD" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="0.18832923471927643" y1="-0.03713463246822357" x2="0.9376662969589233"
+            y2="0.8779844641685486" id="master_svg2_36_5042">
+            <stop offset="0%" stop-color="#FA6974" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FCA5AD" stop-opacity="1" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g filter="url(#master_svg0_1082_00712)">
+            <rect x="11" y="9" width="26" height="26" rx="13" fill="#FFFFFF" fill-opacity="1" />
+            <rect x="11" y="9" width="26" height="26" rx="13" fill-opacity="0" stroke-opacity="1" stroke="#000000"
+                fill="none" stroke-width="0" />
+        </g>
+        <g>
+            <g transform="matrix(1,0,0,-1,0,46)">
+                <rect x="18" y="23" width="12" height="2" rx="1" fill="#666666" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 34 - 0
static/icons/ic_moisture_1.svg

@@ -0,0 +1,34 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="22"
+    height="22" viewBox="0 0 22 22">
+    <defs>
+        <mask id="master_svg0_1082_01398" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="22" height="22" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+        <mask id="master_svg1_1082_01396" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="2" y="-1" width="18" height="23" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+        <mask id="master_svg2_1082_01394" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="2" y="-1" width="18" height="23" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+    </defs>
+    <g>
+        <g>
+            <g>
+                <path
+                    d="M12.219804975814819,13.98398836151123C9.40311497581482,13.91808836151123,6.690194975814819,12.94260836151123,4.51376197581482,11.21332836151123C4.260771975814819,11.90642736151123,4.134874505814819,12.63709836151123,4.141752369814819,13.37210836151123C4.156106575814819,15.15225836151123,4.9016209758148195,16.85378836151123,6.214124975814819,18.10268836151123C7.526624975814819,19.35130836151123,9.29875497581482,20.04498836151123,11.140554975814819,20.030828361511233C14.327784975814819,19.94440836151123,17.07298497581482,17.83388836151123,17.87678497581482,14.85194836151123Q16.24098497581482,13.65998836151123,12.22010497581482,13.98427836151123L12.219804975814819,13.98398836151123Z"
+                    fill="#FDBF52" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M19.0631,10.3315C18.4494,9.05915,17.7411,7.82806,16.942999999999998,6.64653C15.5468,4.57442,14.0357,2.57041,12.4163,0.642257C12.0766,0.236971,11.55358,0,10.9994,0C10.44522,0,9.92187,0.237247,9.58254,0.642257C7.9628,2.57014,6.45197,4.57442,5.055759999999999,6.64653C4.2577,7.82806,3.5491200000000003,9.05914,2.935698,10.3315C2.386907,11.3768,2.0688233,12.5129,2,13.6734C2,16.6483,3.7152000000000003,19.397,6.49985,20.8844C9.284500000000001,22.3719,12.7155,22.3719,15.5001,20.8844C18.2848,19.397,20.0003,16.648,20,13.6734C19.9306,12.5129,19.6122,11.3768,19.0634,10.3315L19.0631,10.3315ZM10.99761,20.5229C6.91099,20.5187,3.59909,17.4547,3.5946100000000003,13.674C3.5946100000000003,12.7654,4.08415,10.9438,6.41487,7.42111C7.78086,5.39496,9.25877,3.43525,10.8429,1.55028C10.88001,1.50571,10.93746,1.47968,10.9979,1.47968C11.05835,1.47968,11.1158,1.50571,11.15291,1.55028C12.737,3.43552,14.2152,5.39496,15.5809,7.42111C17.912,10.9438,18.4012,12.7657,18.4012,13.674C18.3967,17.455,15.0845,20.519,10.99761,20.5229Z"
+                    fill="#FDBF52" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 34 - 0
static/icons/ic_moisture_2.svg

@@ -0,0 +1,34 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="22"
+    height="22" viewBox="0 0 22 22">
+    <defs>
+        <mask id="master_svg0_1082_01398" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="22" height="22" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+        <mask id="master_svg1_1082_01396" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="2" y="-1" width="18" height="23" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+        <mask id="master_svg2_1082_01394" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="2" y="-1" width="18" height="23" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+    </defs>
+    <g>
+        <g>
+            <g>
+                <path
+                    d="M12.219804975814819,13.98398836151123C9.40311497581482,13.91808836151123,6.690194975814819,12.94260836151123,4.51376197581482,11.21332836151123C4.260771975814819,11.90642736151123,4.134874505814819,12.63709836151123,4.141752369814819,13.37210836151123C4.156106575814819,15.15225836151123,4.9016209758148195,16.85378836151123,6.214124975814819,18.10268836151123C7.526624975814819,19.35130836151123,9.29875497581482,20.04498836151123,11.140554975814819,20.030828361511233C14.327784975814819,19.94440836151123,17.07298497581482,17.83388836151123,17.87678497581482,14.85194836151123Q16.24098497581482,13.65998836151123,12.22010497581482,13.98427836151123L12.219804975814819,13.98398836151123Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M19.0631,10.3315C18.4494,9.05915,17.7411,7.82806,16.942999999999998,6.64653C15.5468,4.57442,14.0357,2.57041,12.4163,0.642257C12.0766,0.236971,11.55358,0,10.9994,0C10.44522,0,9.92187,0.237247,9.58254,0.642257C7.9628,2.57014,6.45197,4.57442,5.055759999999999,6.64653C4.2577,7.82806,3.5491200000000003,9.05914,2.935698,10.3315C2.386907,11.3768,2.0688233,12.5129,2,13.6734C2,16.6483,3.7152000000000003,19.397,6.49985,20.8844C9.284500000000001,22.3719,12.7155,22.3719,15.5001,20.8844C18.2848,19.397,20.0003,16.648,20,13.6734C19.9306,12.5129,19.6122,11.3768,19.0634,10.3315L19.0631,10.3315ZM10.99761,20.5229C6.91099,20.5187,3.59909,17.4547,3.5946100000000003,13.674C3.5946100000000003,12.7654,4.08415,10.9438,6.41487,7.42111C7.78086,5.39496,9.25877,3.43525,10.8429,1.55028C10.88001,1.50571,10.93746,1.47968,10.9979,1.47968C11.05835,1.47968,11.1158,1.50571,11.15291,1.55028C12.737,3.43552,14.2152,5.39496,15.5809,7.42111C17.912,10.9438,18.4012,12.7657,18.4012,13.674C18.3967,17.455,15.0845,20.519,10.99761,20.5229Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

Datei-Diff unterdrückt, da er zu groß ist
+ 10 - 0
static/icons/ic_output_air.svg


+ 36 - 0
static/icons/ic_power.svg

@@ -0,0 +1,36 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="50"
+    height="50" viewBox="0 0 50 50">
+    <defs>
+        <linearGradient x1="0.18832923471927643" y1="-0.03713463246822357" x2="0.9376662969589233"
+            y2="0.8779844641685486" id="master_svg0_36_5042">
+            <stop offset="0%" stop-color="#FA6974" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FCA5AD" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="0.18832923471927643" y1="-0.03713463246822357" x2="0.9376662969589233"
+            y2="0.8779844641685486" id="master_svg1_36_5042">
+            <stop offset="0%" stop-color="#FA6974" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FCA5AD" stop-opacity="1" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g>
+            <g>
+                <ellipse cx="25" cy="25" rx="25" ry="25" fill="#FFFFFF" fill-opacity="1" />
+                <ellipse cx="25" cy="25" rx="24.5" ry="24.5" fill-opacity="0" stroke-opacity="1" stroke="#F6F9FD"
+                    fill="none" stroke-width="1" />
+            </g>
+            <g>
+                <g>
+                    <path
+                        d="M23.24104404449463,14.74391C23.24104404449463,13.780785999999999,24.04247704449463,13,25.03173404449463,13C26.02098404449463,13,26.822924044494627,13.780785999999999,26.822924044494627,14.74391L26.822924044494627,25.9622C26.822924044494627,26.924300000000002,26.02149404449463,27.7051,25.03173404449463,27.7051C24.04196604449463,27.7051,23.24104404449463,26.924799999999998,23.24104404449463,25.9622L23.24104404449463,14.74391Z"
+                        fill="url(#master_svg0_36_5042)" fill-opacity="1" />
+                </g>
+                <g>
+                    <path
+                        d="M25.000500000000002,36.64695497589111C18.92477,36.645954975891115,14.00102368,31.853154975891115,14.000000136403,25.937774975891113C13.999488366,22.751254975891115,15.4391,19.876944975891114,17.70983,17.921081975891113L17.70983,17.92212097589111C18.45036,17.283673975891112,19.58137,17.350167975891114,20.23746,18.071212975891115C20.89304,18.791214975891112,20.82497,19.893564975891113,20.08444,20.531494975891114C18.54657,21.861374975891113,17.58239,23.781394975891114,17.581879999999998,25.93829497589111C17.588540000000002,29.92685497589111,20.90379,33.15395497589111,25.000500000000002,33.16065497589111C29.0972,33.15445497589111,32.412,29.92685497589111,32.4186,25.93829497589111C32.418099999999995,23.79178497589111,31.4637,21.878514975891115,29.9371,20.549154975891113C29.1991,19.908114975891113,29.1346,18.806284975891113,29.7927,18.087836975891115C30.4514,17.368869975891112,31.5834,17.307050975891112,32.3209,17.947575975891112C34.574200000000005,19.90187497589111,36.0005,22.765284975891113,36,25.937774975891113C35.998999999999995,31.85365497589111,31.0752,36.64645497589112,25,36.64745497589111L25.000500000000002,36.64695497589111Z"
+                        fill="url(#master_svg1_36_5042)" fill-opacity="1" />
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 34 - 0
static/icons/ic_power_off.svg

@@ -0,0 +1,34 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="50"
+    height="50" viewBox="0 0 50 50">
+    <defs>
+        <linearGradient x1="0.18832923471927643" y1="-0.03713463246822357" x2="0.9376662969589233"
+            y2="0.8779844641685486" id="master_svg0_1158_03777">
+            <stop offset="0%" stop-color="#CCCCCC" stop-opacity="1" />
+            <stop offset="100%" stop-color="#EDEDED" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="0.18832923471927643" y1="-0.03713463246822357" x2="0.9376662969589233"
+            y2="0.8779844641685486" id="master_svg1_1158_03777">
+            <stop offset="0%" stop-color="#CCCCCC" stop-opacity="1" />
+            <stop offset="100%" stop-color="#EDEDED" stop-opacity="1" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g>
+            <ellipse cx="25" cy="25" rx="25" ry="25" fill="#FFFFFF" fill-opacity="1" />
+            <ellipse cx="25" cy="25" rx="24.5" ry="24.5" fill-opacity="0" stroke-opacity="1" stroke="#F6F9FD"
+                fill="none" stroke-width="1" />
+        </g>
+        <g>
+            <g>
+                <path
+                    d="M23.24104404449463,14.74391C23.24104404449463,13.780785999999999,24.04247704449463,13,25.03173404449463,13C26.02098404449463,13,26.822924044494627,13.780785999999999,26.822924044494627,14.74391L26.822924044494627,25.9622C26.822924044494627,26.924300000000002,26.02149404449463,27.7051,25.03173404449463,27.7051C24.04196604449463,27.7051,23.24104404449463,26.924799999999998,23.24104404449463,25.9622L23.24104404449463,14.74391Z"
+                    fill="url(#master_svg0_1158_03777)" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M25.000500000000002,36.64695497589111C18.92477,36.645954975891115,14.00102368,31.853154975891115,14.000000136403,25.937774975891113C13.999488366,22.751254975891115,15.4391,19.876944975891114,17.70983,17.921081975891113L17.70983,17.92212097589111C18.45036,17.283673975891112,19.58137,17.350167975891114,20.23746,18.071212975891115C20.89304,18.791214975891112,20.82497,19.893564975891113,20.08444,20.531494975891114C18.54657,21.861374975891113,17.58239,23.781394975891114,17.581879999999998,25.93829497589111C17.588540000000002,29.92685497589111,20.90379,33.15395497589111,25.000500000000002,33.16065497589111C29.0972,33.15445497589111,32.412,29.92685497589111,32.4186,25.93829497589111C32.418099999999995,23.79178497589111,31.4637,21.878514975891115,29.9371,20.549154975891113C29.1991,19.908114975891113,29.1346,18.806284975891113,29.7927,18.087836975891115C30.4514,17.368869975891112,31.5834,17.307050975891112,32.3209,17.947575975891112C34.574200000000005,19.90187497589111,36.0005,22.765284975891113,36,25.937774975891113C35.998999999999995,31.85365497589111,31.0752,36.64645497589112,25,36.64745497589111L25.000500000000002,36.64695497589111Z"
+                    fill="url(#master_svg1_1158_03777)" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

Datei-Diff unterdrückt, da er zu groß ist
+ 20 - 0
static/icons/ic_pqs_1.svg


Datei-Diff unterdrückt, da er zu groß ist
+ 17 - 0
static/icons/ic_pqs_2.svg


+ 17 - 0
static/icons/ic_scan.svg

@@ -0,0 +1,17 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="20"
+    height="20" viewBox="0 0 20 20">
+    <defs>
+        <mask id="master_svg0_1116_01089" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="20" height="20" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+    </defs>
+    <g mask="url(#master_svg0_1116_01089)">
+        <g>
+            <path
+                d="M19.2857,11L0.714286,11C0.320033,11,0,10.67997,0,10.28571C0,9.89146,0.320033,9.57143,0.714286,9.57143L19.2857,9.57143C19.6808,9.57143,20,9.89146,20,10.28571C20,10.67997,19.6805,11,19.2857,11ZM17.1429,19.5714L12.8571,19.5714C12.4621,19.5714,12.1429,19.252,12.1429,18.8571C12.1429,18.4623,12.4623,18.1429,12.8571,18.1429L17.1429,18.1429C17.5371,18.1429,17.8571,17.8228,17.8571,17.4286L17.8571,13.8571C17.8571,13.4621,18.1763,13.1429,18.5714,13.1429C18.9665,13.1429,19.2857,13.4623,19.2857,13.8571L19.2857,17.4286C19.2857,18.6099,18.3242,19.5714,17.1429,19.5714ZM6.42857,19.5714L2.85714,19.5714C1.67578,19.5714,0.714286,18.6099,0.714286,17.4286L0.714286,13.8571C0.714286,13.4621,1.03432,13.1429,1.42857,13.1429C1.82282,13.1429,2.14286,13.4623,2.14286,13.8571L2.14286,17.4286C2.14286,17.8228,2.46345,18.1429,2.85714,18.1429L6.42857,18.1429C6.82282,18.1429,7.14286,18.4623,7.14286,18.8571C7.14286,19.2519,6.82282,19.5714,6.42857,19.5714ZM1.42857,7.42857C1.03432,7.42857,0.714286,7.10854,0.714286,6.71429L0.714286,3.14286C0.714286,1.961496,1.67578,1,2.85714,1L6.42857,1C6.82282,1,7.14286,1.320033,7.14286,1.714286C7.14286,2.10854,6.82282,2.4285699999999997,6.42857,2.4285699999999997L2.85714,2.4285699999999997C2.46345,2.4285699999999997,2.14286,2.74944,2.14286,3.14286L2.14286,6.71429C2.14286,7.10854,1.82282,7.42857,1.42857,7.42857ZM18.5714,7.42857C18.1763,7.42857,17.8571,7.10854,17.8571,6.71429L17.8571,3.14286C17.8571,2.74916,17.5371,2.4285699999999997,17.1429,2.4285699999999997L12.8571,2.4285699999999997C12.4621,2.4285699999999997,12.1429,2.10854,12.1429,1.714286C12.1429,1.320034,12.4623,1,12.8571,1L17.1429,1C18.3242,1,19.2857,1.961496,19.2857,3.14286L19.2857,6.71429C19.2857,7.10854,18.9665,7.42857,18.5714,7.42857Z"
+                fill="#FFFFFF" fill-opacity="1" />
+        </g>
+    </g>
+</svg>

+ 19 - 0
static/icons/ic_td_1.svg

@@ -0,0 +1,19 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <defs>
+        <linearGradient x1="0.23119913041591644" y1="0" x2="1" y2="0.8981599807739258" id="master_svg0_1082_01197">
+            <stop offset="0%" stop-color="#568EFF" stop-opacity="1" />
+            <stop offset="100%" stop-color="#98BBFF" stop-opacity="1" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g>
+            <ellipse cx="22" cy="22" rx="22" ry="22" fill="#F1F5FF" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M26.778100000000002,25.7774C28.3039,24.2516,28.8125,22.090600000000002,28.3015,20.142899999999997L30.0781,18.36629C30.725,17.71941,30.5914,16.63657,29.8062,16.16547L19.863860000000003,10.200514C19.31073,9.867695,18.602899999999998,9.9567591,18.14586,10.411455L11.412143,17.14518C10.9551035,17.60222,10.868383,18.31004,11.201202,18.86318L17.1685,28.8079C17.6396,29.5931,18.72244,29.7267,19.369320000000002,29.0798L21.145899999999997,27.3032C23.0913,27.8118,25.2499,27.3032,26.778100000000002,25.7774ZM22.4772,25.9672L26.965600000000002,21.4789C26.9679,21.5304,26.9679,21.582,26.9679,21.6359C26.9679,22.7937,26.517899999999997,23.8836,25.6976,24.7016C24.8796,25.5196,23.7897,25.971899999999998,22.6319,25.971899999999998C22.582700000000003,25.9696,22.5288,25.9672,22.4772,25.9672ZM26.3726,29.9845C26.2648,29.579,25.8452,29.3376,25.439799999999998,29.4454C25.0343,29.5532,24.7929,29.9728,24.9007,30.3782L25.7187,33.4345C25.8265,33.84,26.246000000000002,34.0814,26.6515,33.973600000000005C27.057,33.8658,27.2984,33.4463,27.1906,33.040800000000004L26.3726,29.9845ZM29.1804,27.1016C28.8851,26.8063,28.4,26.8063,28.1023,27.1016C27.807,27.3969,27.807,27.8821,28.1023,28.1798L31.9977,32.0751C32.293,32.3705,32.7782,32.3705,33.0758,32.0751C33.3712,31.7798,33.3712,31.2947,33.0758,30.997L29.1804,27.1016ZM34.435199999999995,24.7203L31.3789,23.9023C30.9734,23.7945,30.5539,24.035899999999998,30.4461,24.4414C30.3383,24.846899999999998,30.5797,25.2664,30.9852,25.374200000000002L34.0415,26.1922C34.447,26.3,34.8665,26.0586,34.9743,25.653100000000002C35.0821,25.247700000000002,34.8407,24.8281,34.435199999999995,24.7203Z"
+                fill="url(#master_svg0_1082_01197)" fill-opacity="1" />
+        </g>
+    </g>
+</svg>

+ 13 - 0
static/icons/ic_td_2.svg

@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <g>
+        <g>
+            <ellipse cx="22" cy="22" rx="22" ry="22" fill="#2CCEB8" fill-opacity="1" />
+        </g>
+        <g>
+            <path
+                d="M26.778100000000002,25.7774C28.3039,24.2516,28.8125,22.090600000000002,28.3015,20.142899999999997L30.0781,18.36629C30.725,17.71941,30.5914,16.63657,29.8062,16.16547L19.863860000000003,10.200514C19.31073,9.867695,18.602899999999998,9.9567591,18.14586,10.411455L11.412143,17.14518C10.9551035,17.60222,10.868383,18.31004,11.201202,18.86318L17.1685,28.8079C17.6396,29.5931,18.72244,29.7267,19.369320000000002,29.0798L21.145899999999997,27.3032C23.0913,27.8118,25.2499,27.3032,26.778100000000002,25.7774ZM22.4772,25.9672L26.965600000000002,21.4789C26.9679,21.5304,26.9679,21.582,26.9679,21.6359C26.9679,22.7937,26.517899999999997,23.8836,25.6976,24.7016C24.8796,25.5196,23.7897,25.971899999999998,22.6319,25.971899999999998C22.582700000000003,25.9696,22.5288,25.9672,22.4772,25.9672ZM26.3726,29.9845C26.2648,29.579,25.8452,29.3376,25.439799999999998,29.4454C25.0343,29.5532,24.7929,29.9728,24.9007,30.3782L25.7187,33.4345C25.8265,33.84,26.246000000000002,34.0814,26.6515,33.973600000000005C27.057,33.8658,27.2984,33.4463,27.1906,33.040800000000004L26.3726,29.9845ZM29.1804,27.1016C28.8851,26.8063,28.4,26.8063,28.1023,27.1016C27.807,27.3969,27.807,27.8821,28.1023,28.1798L31.9977,32.0751C32.293,32.3705,32.7782,32.3705,33.0758,32.0751C33.3712,31.7798,33.3712,31.2947,33.0758,30.997L29.1804,27.1016ZM34.435199999999995,24.7203L31.3789,23.9023C30.9734,23.7945,30.5539,24.035899999999998,30.4461,24.4414C30.3383,24.846899999999998,30.5797,25.2664,30.9852,25.374200000000002L34.0415,26.1922C34.447,26.3,34.8665,26.0586,34.9743,25.653100000000002C35.0821,25.247700000000002,34.8407,24.8281,34.435199999999995,24.7203Z"
+                fill="#FFFFFF" fill-opacity="1" />
+        </g>
+    </g>
+</svg>

+ 19 - 0
static/icons/ic_temperature.svg

@@ -0,0 +1,19 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="15"
+    height="15" viewBox="0 0 15 15">
+    <defs>
+        <mask id="master_svg0_1082_00745" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="15" height="15.000000953674316" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+        <linearGradient x1="0.23119913041591644" y1="0" x2="1" y2="0.8981599807739258" id="master_svg1_36_4938">
+            <stop offset="0%" stop-color="#23C577" stop-opacity="1" />
+            <stop offset="100%" stop-color="#77E7AA" stop-opacity="1" />
+        </linearGradient>
+    </defs>
+    <g>
+        <path
+            d="M7.17974,11.901C7.60758,10.3044,6.9098,8.61926,5.47834,7.7929L5.47865,7.7929L5.47865,1.82615C5.47865,1.17361,5.1307,0.570696,4.56554,0.244584C4.00038,-0.081528,3.30447,-0.081528,2.73931,0.244584C2.17416,0.571008,1.8262,1.17361,1.8262,1.82615L1.8262,7.7929C0.394739,8.61926,-0.303046,10.3044,0.1248,11.901C0.552646,13.4975,1.99909,14.6079,3.65211,14.6079C5.30514,14.6079,6.75189,13.4975,7.17974,11.901ZM13.3915,0.608768L8.52195,0.608768C8.18585,0.608768,7.91341,0.880892,7.91341,1.2173C7.91341,1.55371,8.18585,1.82615,8.52195,1.82615L13.3915,1.82615C13.7276,1.82615,14,1.5534,14,1.2173C14,0.881204,13.7276,0.608768,13.3915,0.608768ZM12.1741,3.65206L8.52195,3.65206C8.18585,3.65206,7.91341,3.92481,7.91341,4.26091C7.91341,4.59701,8.18585,4.86944,8.52195,4.86944L12.1741,4.86944C12.5102,4.86944,12.7826,4.59732,12.7826,4.26091C12.7826,3.9245,12.5102,3.65206,12.1741,3.65206ZM10.9567,6.69536L8.52195,6.69536C8.18585,6.69536,7.91341,6.96842,7.91341,7.3042C7.91341,7.63999,8.18585,7.91274,8.52195,7.91274L10.9567,7.91274C11.2928,7.91274,11.5652,7.64061,11.5652,7.3042C11.5652,6.96779,11.2928,6.69536,10.9567,6.69536ZM1.82667,11.1083C1.57452,11.1083,1.37012,11.3127,1.37012,11.5649C1.37012,12.4892,2.11971,13.2388,3.04405,13.2388C3.29621,13.2388,3.50061,13.0344,3.50061,12.7823C3.50061,12.5301,3.29621,12.3257,3.04405,12.3257C2.62401,12.3257,2.28323,11.9849,2.28323,11.5649C2.28323,11.3127,2.07883,11.1083,1.82667,11.1083Z"
+            fill-rule="evenodd" fill="url(#master_svg1_36_4938)" fill-opacity="1" />
+    </g>
+</svg>

+ 15 - 0
static/icons/ic_wind_1.svg

@@ -0,0 +1,15 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="22"
+    height="22" viewBox="0 0 22 22">
+    <defs>
+        <mask id="master_svg0_1082_00765" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="22" height="22" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+    </defs>
+    <g>
+        <path
+            d="M16.705399999999997,5.30728C19.1506,5.77788,21,7.90947,21,10.47373C21,12.6359,19.6841,14.4917,17.8051,15.301C17.4893,17.9241,15.1915,19.9472,12.4197,19.9472L6.26329,19.9472C5.68197,19.9472,5.21075,19.4759,5.21075,18.8946C5.21075,18.3133,5.68197,17.8421,6.26329,17.8421L12.42,17.8421C13.8694,17.8421,15.0937,16.9601,15.5474,15.7367L2.05253,15.7367C1.471528,15.7367,1,15.2655,1,14.6842C1,14.1029,1.47122,13.6316,2.05253,13.6316L15.6864,13.6316C17.4612,13.6316,18.8949,12.2146,18.8949,10.47373C18.8949,9.06316,17.955,7.86753,16.656,7.46323C16.1265,9.78757,14.0908,11.5263,11.6509,11.5263L2.05253,11.5263C1.47122,11.5263,1,11.055,1,10.47373C1,9.89242,1.47122,9.4212,2.05253,9.4212L11.6505,9.4212C13.2273,9.4212,14.5337,8.16451,14.6715,6.54762C14.6194,6.36166,14.6194,6.16491,14.6715,5.97926C14.5337,4.36237,13.2273,3.10569,11.6505,3.10569C9.98216,3.10569,8.615680000000001,4.51318,8.615680000000001,6.2636C8.615680000000001,6.63983,8.415230000000001,6.98708,8.08926,7.1752C7.7636,7.36332,7.36239,7.36332,7.03673,7.1752C6.71107,6.98708,6.51031,6.63983,6.51031,6.2636C6.51062,3.36319,8.805340000000001,1,11.6505,1C14.176,1,16.2665,2.86113,16.705399999999997,5.30728Z"
+            fill="#0BC3AA" fill-opacity="1" />
+    </g>
+</svg>

+ 15 - 0
static/icons/ic_wind_2.svg

@@ -0,0 +1,15 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="22"
+    height="22" viewBox="0 0 22 22">
+    <defs>
+        <mask id="master_svg0_1082_00765" style="mask-type:alpha" maskUnits="userSpaceOnUse">
+            <g>
+                <rect x="0" y="0" width="22" height="22" rx="0" fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </mask>
+    </defs>
+    <g>
+        <path
+            d="M16.705399999999997,5.30728C19.1506,5.77788,21,7.90947,21,10.47373C21,12.6359,19.6841,14.4917,17.8051,15.301C17.4893,17.9241,15.1915,19.9472,12.4197,19.9472L6.26329,19.9472C5.68197,19.9472,5.21075,19.4759,5.21075,18.8946C5.21075,18.3133,5.68197,17.8421,6.26329,17.8421L12.42,17.8421C13.8694,17.8421,15.0937,16.9601,15.5474,15.7367L2.05253,15.7367C1.471528,15.7367,1,15.2655,1,14.6842C1,14.1029,1.47122,13.6316,2.05253,13.6316L15.6864,13.6316C17.4612,13.6316,18.8949,12.2146,18.8949,10.47373C18.8949,9.06316,17.955,7.86753,16.656,7.46323C16.1265,9.78757,14.0908,11.5263,11.6509,11.5263L2.05253,11.5263C1.47122,11.5263,1,11.055,1,10.47373C1,9.89242,1.47122,9.4212,2.05253,9.4212L11.6505,9.4212C13.2273,9.4212,14.5337,8.16451,14.6715,6.54762C14.6194,6.36166,14.6194,6.16491,14.6715,5.97926C14.5337,4.36237,13.2273,3.10569,11.6505,3.10569C9.98216,3.10569,8.615680000000001,4.51318,8.615680000000001,6.2636C8.615680000000001,6.63983,8.415230000000001,6.98708,8.08926,7.1752C7.7636,7.36332,7.36239,7.36332,7.03673,7.1752C6.71107,6.98708,6.51031,6.63983,6.51031,6.2636C6.51062,3.36319,8.805340000000001,1,11.6505,1C14.176,1,16.2665,2.86113,16.705399999999997,5.30728Z"
+            fill="#FFFFFF" fill-opacity="1" />
+    </g>
+</svg>

Datei-Diff unterdrückt, da er zu groß ist
+ 23 - 0
static/icons/ic_xxj.svg


+ 53 - 0
static/icons/ic_xxjwh.svg

@@ -0,0 +1,53 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <defs>
+        <linearGradient x1="0" y1="0" x2="1" y2="1.0304654836654663" id="master_svg0_1082_00818">
+            <stop offset="0%" stop-color="#3BCA75" stop-opacity="1" />
+            <stop offset="100%" stop-color="#68F4B5" stop-opacity="0.8899999856948853" />
+        </linearGradient>
+        <linearGradient x1="0" y1="0" x2="1" y2="1.0304654836654663" id="master_svg1_1082_00818">
+            <stop offset="0%" stop-color="#3BCA75" stop-opacity="1" />
+            <stop offset="100%" stop-color="#68F4B5" stop-opacity="0.8899999856948853" />
+        </linearGradient>
+        <linearGradient x1="0" y1="0" x2="1" y2="1.0304654836654663" id="master_svg2_1082_00818">
+            <stop offset="0%" stop-color="#3BCA75" stop-opacity="1" />
+            <stop offset="100%" stop-color="#68F4B5" stop-opacity="0.8899999856948853" />
+        </linearGradient>
+        <linearGradient x1="0" y1="0" x2="1" y2="1.0304654836654663" id="master_svg3_1082_00818">
+            <stop offset="0%" stop-color="#3BCA75" stop-opacity="1" />
+            <stop offset="100%" stop-color="#68F4B5" stop-opacity="0.8899999856948853" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g>
+            <g>
+                <ellipse cx="22" cy="22" rx="22" ry="22" fill="#E4FFED" fill-opacity="1" />
+            </g>
+        </g>
+        <g>
+            <g>
+                <g>
+                    <path
+                        d="M21.139886136112214,7.032276807421875C21.340126136112215,7.080005007421875,21.481176136112214,7.377018607421875,21.32828613611221,7.602954607421875C21.172016136112212,7.8340416074218755,20.064929136112212,8.760787607421875,20.009456136112213,10.076237607421875C19.977322136112214,10.839887607421876,21.566756136112215,11.791707607421875,21.517026136112214,12.929967607421876C21.459526136112213,14.244037607421875,20.205976136112213,15.602057607421875,20.009456136112213,15.783697607421875C19.868068136112214,15.914527607421874,19.652266136112214,15.973927607421874,19.444243136112213,15.973927607421874C19.236220136112212,15.973927607421874,19.133731336112213,15.641547607421876,19.255839136112215,15.403247607421875C19.432405136112212,15.058507607421875,20.362926136112215,14.259837607421876,20.574666136112214,13.120197607421876C20.749206136112214,12.181767607421875,19.000799736112214,11.045567607421875,19.067434706112213,10.075897607421876C19.161467736112215,8.704477607421875,20.176216136112213,7.624587607421875,20.386266136112212,7.412385607421875C20.680876136112214,7.115029207421875,20.875376136112212,6.969097707421875,21.139886136112214,7.031934107421875L21.139886136112214,7.032276807421875Z"
+                        fill="url(#master_svg0_1082_00818)" fill-opacity="1" />
+                </g>
+                <g>
+                    <path
+                        d="M23.15449308877945,7.032276807421875C23.35473308877945,7.080005007421875,23.49578308877945,7.377018607421875,23.342893088779448,7.602954607421875C23.18628308877945,7.8340416074218755,22.07953808877945,8.760787607421875,22.024065088779448,10.076237607421875C21.99193108877945,10.839887607421876,23.58102308877945,11.791707607421875,23.53130308877945,12.929967607421876C23.47379308877945,14.244037607421875,22.22025308877945,15.602057607421875,22.024065088779448,15.783697607421875C21.88267708877945,15.914527607421874,21.66687508877945,15.973927607421874,21.458852088779448,15.973927607421874C21.25083008877945,15.973927607421874,21.14834058877945,15.641547607421876,21.27044808877945,15.403247607421875C21.44701308877945,15.058507607421875,22.37719308877945,14.259837607421876,22.58927308877945,13.120197607421876C22.76381308877945,12.181767607421875,21.01540878877945,11.045567607421875,21.08204371877945,10.075897607421876C21.17641478877945,8.704477607421875,22.19082308877945,7.624587607421875,22.40087308877945,7.412385607421875C22.69515308877945,7.115029207421875,22.88998308877945,6.969097707421875,23.15449308877945,7.031934107421875L23.15449308877945,7.032276807421875Z"
+                        fill="url(#master_svg1_1082_00818)" fill-opacity="1" />
+                </g>
+                <g>
+                    <path
+                        d="M25.168765301761628,7.032276807421875C25.36900530176163,7.080005007421875,25.510395301761626,7.377018607421875,25.357165301761626,7.602954607421875C25.200895301761626,7.8340416074218755,24.093808301761626,8.760787607421875,24.038335301761627,10.076237607421875C24.006201301761628,10.839887607421876,25.595295301761627,11.791707607421875,25.545565301761627,12.929967607421876C25.488405301761627,14.244037607421875,24.234855301761627,15.602057607421875,24.038335301761627,15.783697607421875C23.896948301761626,15.914527607421874,23.681145301761628,15.973927607421874,23.47312330176163,15.973927607421874C23.265100301761628,15.973927607421874,23.162611301761626,15.641547607421876,23.28471830176163,15.403247607421875C23.461284301761626,15.058507607421875,24.39180530176163,14.259837607421876,24.603545301761628,13.120197607421876C24.778085301761628,12.181767607421875,23.029678901761628,11.045567607421875,23.096313871761627,10.075897607421876C23.190684901761628,8.704477607421875,24.205095301761627,7.624587607421875,24.415145301761626,7.412385607421875C24.709415301761627,7.115029207421875,24.904255301761626,6.969097707421875,25.168765301761628,7.031934107421875L25.168765301761628,7.032276807421875Z"
+                        fill="url(#master_svg2_1082_00818)" fill-opacity="1" />
+                </g>
+                <g></g>
+            </g>
+            <g>
+                <path
+                    d="M25.363799999999998,17.481112480163574L19.24848,17.481112480163574C18.67974,17.481112480163574,18.1947,17.839916480163573,18.10317,18.328759480163573L15.0153717,34.82761248016357C14.9003712,35.44201248016357,15.445254,36.000012480163576,16.16068,36.000012480163576L28.4516,36.000012480163576C29.167099999999998,36.000012480163576,29.712,35.44201248016357,29.597,34.82761248016357L26.5092,18.328759480163573C26.418,17.839916480163573,25.933,17.481112480163574,25.363799999999998,17.481112480163574ZM23.34968,32.09341248016357L21.26221,32.09341248016357L21.26221,33.659012480163575L23.34968,33.659012480163575L23.34968,32.09341248016357Z"
+                    fill-rule="evenodd" fill="url(#master_svg3_1082_00818)" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 30 - 0
static/icons/ic_zd_1.svg

@@ -0,0 +1,30 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <defs>
+        <linearGradient x1="0" y1="0" x2="1" y2="1.0663894414901733" id="master_svg0_821_5181">
+            <stop offset="9.285714477300644%" stop-color="#8E28FF" stop-opacity="1" />
+            <stop offset="85.00000238418579%" stop-color="#C38DFF" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="0" y1="0" x2="1" y2="1.0663894414901733" id="master_svg1_1082_01415">
+            <stop offset="9.285714477300644%" stop-color="#9D45FF" stop-opacity="1" />
+            <stop offset="85.00000238418579%" stop-color="#C38DFF" stop-opacity="1" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g>
+            <ellipse cx="22" cy="22" rx="22" ry="22" fill="#F4EFFF" fill-opacity="1" />
+        </g>
+        <g>
+            <g>
+                <path
+                    d="M24.38305371749878,32.57570838928223C24.82147371749878,32.57570838928223,25.17740371749878,32.948590389282224,25.17740371749878,33.407346389282225C25.17740371749878,33.866108389282225,24.82147371749878,34.24067838928222,24.38305371749878,34.24067838928222L19.61864471749878,34.24067838928222C19.18135571749878,34.24067838928222,18.82542371749878,33.86779838928223,18.82542371749878,33.407346389282225C18.82542371749878,32.946895389282226,19.18022571749878,32.57570838928223,19.61864471749878,32.57570838928223L24.38305371749878,32.57570838928223Z"
+                    fill="url(#master_svg0_821_5181)" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M22.00057,11C26.970599999999997,11,31,15.00678,31,19.94802C31,23.3689,29.0718,26.3407,26.235599999999998,27.8475L26.235599999999998,29.9503C26.235599999999998,30.5316,25.7621,31.0034,25.1774,31.0034L22.79379,31.0034L22.79379,25.359299999999998L25.5565,22.613L25.6107,22.5531C25.867800000000003,22.235599999999998,25.8446,21.7887,25.5565,21.496000000000002C25.4107,21.3492,25.2073,21.265,24.9949,21.264400000000002C24.7819,21.2655,24.5785,21.3492,24.4328,21.496000000000002L21.99887,23.9158L19.566670000000002,21.496000000000002L19.50621,21.4424C19.35085,21.313000000000002,19.14746,21.247999999999998,18.94068,21.2633C18.73446,21.2785,18.5435,21.3718,18.41073,21.5215C18.12599,21.8396,18.13955,22.310200000000002,18.44294,22.6124L21.20565,25.358800000000002L21.20565,31.0028L18.82373,31.0028C18.238419999999998,31.0028,17.764400000000002,30.5311,17.764400000000002,29.9497L17.764400000000002,27.8469C14.92994,26.3407,13,23.3684,13,19.94802C13,15.00678,17.02938,11,21.99944,11L22.00057,11Z"
+                    fill="url(#master_svg1_1082_01415)" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 20 - 0
static/icons/ic_zd_2.svg

@@ -0,0 +1,20 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <g>
+        <g>
+            <ellipse cx="22" cy="22" rx="22" ry="22" fill="#2CCEB8" fill-opacity="1" />
+        </g>
+        <g>
+            <g>
+                <path
+                    d="M24.38305371749878,32.57570838928223C24.82147371749878,32.57570838928223,25.17740371749878,32.948590389282224,25.17740371749878,33.407346389282225C25.17740371749878,33.866108389282225,24.82147371749878,34.24067838928222,24.38305371749878,34.24067838928222L19.61864471749878,34.24067838928222C19.18135571749878,34.24067838928222,18.82542371749878,33.86779838928223,18.82542371749878,33.407346389282225C18.82542371749878,32.946895389282226,19.18022571749878,32.57570838928223,19.61864471749878,32.57570838928223L24.38305371749878,32.57570838928223Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M22.00057,11C26.970599999999997,11,31,15.00678,31,19.94802C31,23.3689,29.0718,26.3407,26.235599999999998,27.8475L26.235599999999998,29.9503C26.235599999999998,30.5316,25.7621,31.0034,25.1774,31.0034L22.79379,31.0034L22.79379,25.359299999999998L25.5565,22.613L25.6107,22.5531C25.867800000000003,22.235599999999998,25.8446,21.7887,25.5565,21.496000000000002C25.4107,21.3492,25.2073,21.265,24.9949,21.264400000000002C24.7819,21.2655,24.5785,21.3492,24.4328,21.496000000000002L21.99887,23.9158L19.566670000000002,21.496000000000002L19.50621,21.4424C19.35085,21.313000000000002,19.14746,21.247999999999998,18.94068,21.2633C18.73446,21.2785,18.5435,21.3718,18.41073,21.5215C18.12599,21.8396,18.13955,22.310200000000002,18.44294,22.6124L21.20565,25.358800000000002L21.20565,31.0028L18.82373,31.0028C18.238419999999998,31.0028,17.764400000000002,30.5311,17.764400000000002,29.9497L17.764400000000002,27.8469C14.92994,26.3407,13,23.3684,13,19.94802C13,15.00678,17.02938,11,21.99944,11L22.00057,11Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 82 - 0
static/icons/ic_zld_1.svg

@@ -0,0 +1,82 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <defs>
+        <linearGradient x1="-0.003283270401880145" y1="-0.05817992985248566" x2="0.7155508995056152"
+            y2="0.9959850907325745" id="master_svg0_36_5433">
+            <stop offset="0%" stop-color="#EE56A0" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FA92CC" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="-0.003283270401880145" y1="-0.05817992985248566" x2="0.7155508995056152"
+            y2="0.9959850907325745" id="master_svg1_36_5433">
+            <stop offset="0%" stop-color="#EE56A0" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FA92CC" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="-0.003283270401880145" y1="-0.05817992985248566" x2="0.7155508995056152"
+            y2="0.9959850907325745" id="master_svg2_36_5433">
+            <stop offset="0%" stop-color="#EE56A0" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FA92CC" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="-0.003283270401880145" y1="-0.05817992985248566" x2="0.7155508995056152"
+            y2="0.9959850907325745" id="master_svg3_36_5433">
+            <stop offset="0%" stop-color="#EE56A0" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FA92CC" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="-0.003283270401880145" y1="-0.05817992985248566" x2="0.7155508995056152"
+            y2="0.9959850907325745" id="master_svg4_36_5433">
+            <stop offset="0%" stop-color="#EE56A0" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FA92CC" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="-0.003283270401880145" y1="-0.05817992985248566" x2="0.7155508995056152"
+            y2="0.9959850907325745" id="master_svg5_36_5433">
+            <stop offset="0%" stop-color="#EE56A0" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FA92CC" stop-opacity="1" />
+        </linearGradient>
+        <linearGradient x1="-0.003283270401880145" y1="-0.05817992985248566" x2="0.7155508995056152"
+            y2="0.9959850907325745" id="master_svg6_36_5433">
+            <stop offset="0%" stop-color="#EE56A0" stop-opacity="1" />
+            <stop offset="100%" stop-color="#FA92CC" stop-opacity="1" />
+        </linearGradient>
+    </defs>
+    <g>
+        <g>
+            <ellipse cx="22" cy="22" rx="22" ry="22" fill="#FFF0FA" fill-opacity="1" />
+        </g>
+        <g>
+            <g>
+                <path
+                    d="M22.000151809387205,24.03057386390686C26.67882180938721,24.03057386390686,30.47162180938721,20.87385386390686,30.47162180938721,16.97972586390686L30.47162180938721,16.97600586390686C30.47162180938721,16.77049686390686,30.300521809387206,16.60590386390686,30.095021809387205,16.60590386390686L13.905022809387207,16.60590386390686C13.699514809387207,16.60590386390686,13.528721809387207,16.77049686390686,13.528721809387207,16.97600586390686L13.528721809387207,16.97972586390686C13.528721809387207,20.87385386390686,17.321491809387208,24.03057386390686,22.000151809387205,24.03057386390686ZM14.660101809387207,18.20751386390686C14.592221809387206,17.96263386390686,14.735741809387207,17.709083863906862,14.980611809387208,17.64119386390686C15.224871809387206,17.57362486390686,15.479041809387207,17.71652386390686,15.546921809387207,17.96170386390686C15.668121809387207,18.39876386390686,15.878281809387207,18.82186386390686,16.17151180938721,19.21924386390686C16.322461809387207,19.42382386390686,16.279071809387208,19.71209386390686,16.074801809387207,19.86305386390686C15.992351809387207,19.923803863906862,15.896571809387208,19.95294386390686,15.801721809387207,19.95294386390686C15.660681809387206,19.95294386390686,15.521511809387206,19.88846386390686,15.431001809387206,19.76603386390686C15.070811809387207,19.27783386390686,14.811681809387206,18.75367386390686,14.660101809387207,18.20751386390686Z"
+                    fill="url(#master_svg0_36_5433)" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M32.2415,14L11.758492,14C11.341275,14,11,14.341275,11,14.758492C11,15.17571,11.341275,15.51729,11.758492,15.51729L32.2415,15.51729C32.658699999999996,15.51729,33,15.17602,33,14.758492C33,14.340965,32.658699999999996,13.9999999408782,32.2415,14Z"
+                    fill="url(#master_svg1_36_5433)" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M22.000154779907227,25.724862098693848C21.491806779907225,25.724862098693848,21.079858779907227,26.136810098693847,21.079858779907227,26.645158098693848L21.079858779907227,30.377482098693847C21.079858779907227,30.885832098693847,21.491806779907225,31.297782098693848,22.000154779907227,31.297782098693848C22.508498779907228,31.297782098693848,22.920448779907225,30.885832098693847,22.920448779907225,30.377482098693847L22.920448779907225,26.645157098693847C22.920448779907225,26.13680909869385,22.508498779907228,25.72486115274585,22.000154779907227,25.724862098693848Z"
+                    fill="url(#master_svg2_36_5433)" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M29.756182680053712,23.07091392102051C29.397232680053712,22.711350321020507,28.81418568005371,22.711350321020507,28.45493368005371,23.07091392102051C28.09537108005371,23.430166921020508,28.09537108005371,24.01291092102051,28.45493368005371,24.372470921020508L31.094002680053713,27.011540921020508C31.27378268005371,27.19132092102051,31.509362680053712,27.28121092102051,31.74493268005371,27.28121092102051C31.98051268005371,27.28121092102051,32.21609268005371,27.19132092102051,32.395562680053715,27.011540921020508C32.75512268005371,26.65229092102051,32.75512268005371,26.069550921020507,32.395562680053715,25.71029092102051L29.756182680053712,23.071223921020508L29.756182680053712,23.07091392102051Z"
+                    fill="url(#master_svg3_36_5433)" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M15.442156614351273,23.15398467602539C15.082906614351273,22.79442107602539,14.500166614351272,22.79442107602539,14.140906614351273,23.15398467602539L11.501528614351272,25.79336167602539C11.141965814351273,26.15262167602539,11.141965814351273,26.73536167602539,11.501528614351272,27.09492167602539C11.681310614351272,27.27470167602539,11.916886614351272,27.36459167602539,12.152462614351272,27.36459167602539C12.388036614351272,27.36459167602539,12.623306614351273,27.27470167602539,12.803086614351272,27.09492167602539L15.442156614351273,24.45585167602539C15.801716614351273,24.09660167602539,15.801716614351273,23.513857676025392,15.442156614351273,23.15429467602539L15.442156614351273,23.15398467602539Z"
+                    fill="url(#master_svg4_36_5433)" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M18.37507437225342,25.102755177941894C17.90640437225342,24.904376077941894,17.366744372253418,25.123523477941895,17.168674372253417,25.591575077941894L15.713997472253418,29.029122077941896C15.515618372253417,29.497172077941894,15.734765372253419,30.037452077941893,16.202817372253417,30.235212077941895C16.319985372253417,30.284802077941894,16.44149337225342,30.308362077941894,16.561141372253417,30.308362077941894C16.919774372253418,30.308362077941894,17.260734372253417,30.097582077941894,17.40921437225342,29.746392077941895L18.86389437225342,26.309152077941896C19.061964372253417,25.840788077941895,18.843124372253417,25.300823077941896,18.37507437225342,25.102755177941894Z"
+                    fill="url(#master_svg5_36_5433)" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M26.51391144622803,25.62226239300537C26.327621446228026,25.14956139300537,25.793551446228026,24.91739539300537,25.319915446228027,25.103375993005372C24.847214446228026,25.28997639300537,24.615048446228027,25.82436239300537,24.80133834622803,26.297369393005372L26.170471446228028,29.76963939300537C26.31336144622803,30.13167939300537,26.66022144622803,30.35268939300537,27.027221446228026,30.35268939300537C27.139741446228026,30.35268939300537,27.253811446228028,30.33191939300537,27.364461446228027,30.28821939300537C27.837171446228027,30.101609393005372,28.069331446228027,29.56722939300537,27.883041446228027,29.09421939300537L26.51391144622803,25.621952393005373L26.51391144622803,25.62226239300537Z"
+                    fill="url(#master_svg6_36_5433)" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 45 - 0
static/icons/ic_zld_2.svg

@@ -0,0 +1,45 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="44"
+    height="44" viewBox="0 0 44 44">
+    <g>
+        <g>
+            <ellipse cx="22" cy="22" rx="22" ry="22" fill="#2CCEB8" fill-opacity="1" />
+        </g>
+        <g>
+            <g>
+                <path
+                    d="M22.000151809387205,24.03057386390686C26.67882180938721,24.03057386390686,30.47162180938721,20.87385386390686,30.47162180938721,16.97972586390686L30.47162180938721,16.97600586390686C30.47162180938721,16.77049686390686,30.300521809387206,16.60590386390686,30.095021809387205,16.60590386390686L13.905022809387207,16.60590386390686C13.699514809387207,16.60590386390686,13.528721809387207,16.77049686390686,13.528721809387207,16.97600586390686L13.528721809387207,16.97972586390686C13.528721809387207,20.87385386390686,17.321491809387208,24.03057386390686,22.000151809387205,24.03057386390686ZM14.660101809387207,18.20751386390686C14.592221809387206,17.96263386390686,14.735741809387207,17.709083863906862,14.980611809387208,17.64119386390686C15.224871809387206,17.57362486390686,15.479041809387207,17.71652386390686,15.546921809387207,17.96170386390686C15.668121809387207,18.39876386390686,15.878281809387207,18.82186386390686,16.17151180938721,19.21924386390686C16.322461809387207,19.42382386390686,16.279071809387208,19.71209386390686,16.074801809387207,19.86305386390686C15.992351809387207,19.923803863906862,15.896571809387208,19.95294386390686,15.801721809387207,19.95294386390686C15.660681809387206,19.95294386390686,15.521511809387206,19.88846386390686,15.431001809387206,19.76603386390686C15.070811809387207,19.27783386390686,14.811681809387206,18.75367386390686,14.660101809387207,18.20751386390686Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M32.2415,14L11.758492,14C11.341275,14,11,14.341275,11,14.758492C11,15.17571,11.341275,15.51729,11.758492,15.51729L32.2415,15.51729C32.658699999999996,15.51729,33,15.17602,33,14.758492C33,14.340965,32.658699999999996,13.9999999408782,32.2415,14Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M22.000154779907227,25.724862098693848C21.491806779907225,25.724862098693848,21.079858779907227,26.136810098693847,21.079858779907227,26.645158098693848L21.079858779907227,30.377482098693847C21.079858779907227,30.885832098693847,21.491806779907225,31.297782098693848,22.000154779907227,31.297782098693848C22.508498779907228,31.297782098693848,22.920448779907225,30.885832098693847,22.920448779907225,30.377482098693847L22.920448779907225,26.645157098693847C22.920448779907225,26.13680909869385,22.508498779907228,25.72486115274585,22.000154779907227,25.724862098693848Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M29.756182680053712,23.07091392102051C29.397232680053712,22.711350321020507,28.81418568005371,22.711350321020507,28.45493368005371,23.07091392102051C28.09537108005371,23.430166921020508,28.09537108005371,24.01291092102051,28.45493368005371,24.372470921020508L31.094002680053713,27.011540921020508C31.27378268005371,27.19132092102051,31.509362680053712,27.28121092102051,31.74493268005371,27.28121092102051C31.98051268005371,27.28121092102051,32.21609268005371,27.19132092102051,32.395562680053715,27.011540921020508C32.75512268005371,26.65229092102051,32.75512268005371,26.069550921020507,32.395562680053715,25.71029092102051L29.756182680053712,23.071223921020508L29.756182680053712,23.07091392102051Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M15.442156614351273,23.15398467602539C15.082906614351273,22.79442107602539,14.500166614351272,22.79442107602539,14.140906614351273,23.15398467602539L11.501528614351272,25.79336167602539C11.141965814351273,26.15262167602539,11.141965814351273,26.73536167602539,11.501528614351272,27.09492167602539C11.681310614351272,27.27470167602539,11.916886614351272,27.36459167602539,12.152462614351272,27.36459167602539C12.388036614351272,27.36459167602539,12.623306614351273,27.27470167602539,12.803086614351272,27.09492167602539L15.442156614351273,24.45585167602539C15.801716614351273,24.09660167602539,15.801716614351273,23.513857676025392,15.442156614351273,23.15429467602539L15.442156614351273,23.15398467602539Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M18.37507437225342,25.102755177941894C17.90640437225342,24.904376077941894,17.366744372253418,25.123523477941895,17.168674372253417,25.591575077941894L15.713997472253418,29.029122077941896C15.515618372253417,29.497172077941894,15.734765372253419,30.037452077941893,16.202817372253417,30.235212077941895C16.319985372253417,30.284802077941894,16.44149337225342,30.308362077941894,16.561141372253417,30.308362077941894C16.919774372253418,30.308362077941894,17.260734372253417,30.097582077941894,17.40921437225342,29.746392077941895L18.86389437225342,26.309152077941896C19.061964372253417,25.840788077941895,18.843124372253417,25.300823077941896,18.37507437225342,25.102755177941894Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+            <g>
+                <path
+                    d="M26.51391144622803,25.62226239300537C26.327621446228026,25.14956139300537,25.793551446228026,24.91739539300537,25.319915446228027,25.103375993005372C24.847214446228026,25.28997639300537,24.615048446228027,25.82436239300537,24.80133834622803,26.297369393005372L26.170471446228028,29.76963939300537C26.31336144622803,30.13167939300537,26.66022144622803,30.35268939300537,27.027221446228026,30.35268939300537C27.139741446228026,30.35268939300537,27.253811446228028,30.33191939300537,27.364461446228027,30.28821939300537C27.837171446228027,30.101609393005372,28.069331446228027,29.56722939300537,27.883041446228027,29.09421939300537L26.51391144622803,25.621952393005373L26.51391144622803,25.62226239300537Z"
+                    fill="#FFFFFF" fill-opacity="1" />
+            </g>
+        </g>
+    </g>
+</svg>

BIN
static/images/alarm.png


BIN
static/images/hum.png


BIN
static/images/ic_light_button_bg.png


BIN
static/images/ic_phone_bg.png


BIN
static/images/ic_scan_bg.png


BIN
static/images/ic_test_a.png


BIN
static/images/ic_test_abg.png


BIN
static/images/ic_test_b.png


BIN
static/images/ic_test_bbg.png


BIN
static/images/ic_top_bg.png


BIN
static/images/led.png


BIN
static/images/light.png


BIN
static/images/report/pingjun_huxilv_new.png


BIN
static/images/report/pingjun_xinlv_new.png


BIN
static/images/report/shangchuang_shijian_new.png


BIN
static/images/report/shenshui_shichang_new.png


BIN
static/images/report/shuimian_xiaolv_big_new.png


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.