Explorar el Código

feature: 分包处理

332777428@qq.com hace 6 meses
padre
commit
ccc2007cb0
Se han modificado 56 ficheros con 5072 adiciones y 0 borrados
  1. 1142 0
      components/image-cropper/image-cropper.js
  2. 3 0
      components/image-cropper/image-cropper.json
  3. 24 0
      components/image-cropper/image-cropper.wxml
  4. 143 0
      components/image-cropper/image-cropper.wxss
  5. 45 0
      components/navbar/navbar.js
  6. 4 0
      components/navbar/navbar.json
  7. 9 0
      components/navbar/navbar.wxml
  8. 33 0
      components/navbar/navbar.wxss
  9. 62 0
      components/toast/toast.js
  10. 4 0
      components/toast/toast.json
  11. 15 0
      components/toast/toast.wxml
  12. 61 0
      components/toast/toast.wxss
  13. 87 0
      pages/deviceList/deviceList.js
  14. 5 0
      pages/deviceList/deviceList.json
  15. 9 0
      pages/deviceList/deviceList.wxml
  16. 38 0
      pages/deviceList/deviceList.wxss
  17. 1066 0
      pages/index/index.js
  18. 5 0
      pages/index/index.json
  19. 211 0
      pages/index/index.wxml
  20. 847 0
      pages/index/index.wxss
  21. 94 0
      pages/login/login.js
  22. 5 0
      pages/login/login.json
  23. 17 0
      pages/login/login.wxml
  24. 55 0
      pages/login/login.wxss
  25. 66 0
      pages/packageA/about/about.js
  26. 2 0
      pages/packageA/about/about.wxml
  27. 66 0
      pages/packageA/about/connectBle.js
  28. 2 0
      pages/packageA/about/connectBle.wxml
  29. 66 0
      pages/packageA/about/deviceConMode.js
  30. 2 0
      pages/packageA/about/deviceConMode.wxml
  31. 66 0
      pages/packageA/about/deviceConnect0.js
  32. 2 0
      pages/packageA/about/deviceConnect0.wxml
  33. 66 0
      pages/packageA/about/deviceConnect1.js
  34. 2 0
      pages/packageA/about/deviceConnect1.wxml
  35. 66 0
      pages/packageA/about/deviceConnect2.js
  36. 2 0
      pages/packageA/about/deviceConnect2.wxml
  37. 66 0
      pages/packageA/about/deviceConnect3.js
  38. 2 0
      pages/packageA/about/deviceConnect3.wxml
  39. 66 0
      pages/packageB/aboutInfo/aboutInfo.js
  40. 2 0
      pages/packageB/aboutInfo/aboutInfo.wxml
  41. 66 0
      pages/packageB/channelDetail/channelDetail.js
  42. 2 0
      pages/packageB/channelDetail/channelDetail.wxml
  43. 66 0
      pages/packageB/deviceDetail/deviceDetail.js
  44. 2 0
      pages/packageB/deviceDetail/deviceDetail.wxml
  45. 66 0
      pages/packageB/deviceWake/deviceWake.js
  46. 2 0
      pages/packageB/deviceWake/deviceWake.wxml
  47. 66 0
      pages/packageB/wakeList/wakeList.js
  48. 2 0
      pages/packageB/wakeList/wakeList.wxml
  49. 66 0
      pages/packageC/download/download.js
  50. 2 0
      pages/packageC/download/download.wxml
  51. 66 0
      pages/packageC/ota/ota.js
  52. 2 0
      pages/packageC/ota/ota.wxml
  53. 66 0
      pages/packageC/repeat/repeat.js
  54. 2 0
      pages/packageC/repeat/repeat.wxml
  55. 66 0
      pages/packageC/setWifi/setWifi.js
  56. 2 0
      pages/packageC/setWifi/setWifi.wxml

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1142 - 0
components/image-cropper/image-cropper.js


+ 3 - 0
components/image-cropper/image-cropper.json

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

+ 24 - 0
components/image-cropper/image-cropper.wxml

@@ -0,0 +1,24 @@
+<view class='image-cropper' catchtouchmove='_preventTouchMove'>
+    <view class='main' bindtouchend="_cutTouchEnd" bindtouchstart="_cutTouchStart" bindtouchmove="_cutTouchMove" bindtap="_click">
+        <view class='content'>
+            <view class='content_top bg_gray {{_flag_bright?"":"bg_black"}}' style="height:{{cut_top}}px;transition-property:{{_cut_animation?'':'background'}}"></view>
+            <view class='content_middle' style="height:{{height}}px;">
+                <view class='content_middle_left bg_gray {{_flag_bright?"":"bg_black"}}' style="width:{{cut_left}}px;transition-property:{{_cut_animation?'':'background'}}"></view>
+                <view class='content_middle_middle' style="width:{{width}}px;height:{{height}}px;transition-duration: .3s;transition-property:{{_cut_animation?'':'background'}};">
+                    <view class="border border-top-left"></view>
+                    <view class="border border-top-right"></view>
+                    <view class="border border-right-top"></view>
+                    <view class="border border-right-bottom"></view>
+                    <view class="border border-bottom-right"></view>
+                    <view class="border border-bottom-left"></view>
+                    <view class="border border-left-bottom"></view>
+                    <view class="border border-left-top"></view>
+                </view>
+                <view class='content_middle_right bg_gray {{_flag_bright?"":"bg_black"}}' style="transition-property:{{_cut_animation?'':'background'}}"></view>
+            </view>
+            <view class='content_bottom bg_gray {{_flag_bright?"":"bg_black"}}' style="transition-property:{{_cut_animation?'':'background'}}"></view>
+        </view>
+        <image bindload="imageLoad" bindtouchstart="_start" bindtouchmove="_move" bindtouchend="_end" style="width:{{img_width ? img_width + 'px' : 'auto'}};height:{{img_height ? img_height + 'px' : 'auto'}};transform:translate3d({{_img_left-img_width/2}}px,{{_img_top-img_height/2}}px,0) scale({{scale}}) rotate({{angle}}deg);transition-duration:{{_cut_animation?.4:0}}s;" class='img' src='{{imgSrc}}'></image>
+    </view>
+    <canvas canvas-id='image-cropper' disable-scroll="true" style="width:{{_canvas_width * export_scale}}px;height:{{_canvas_height * export_scale}}px;left:{{canvas_left}}px;top:{{canvas_top}}px" class='image-cropper-canvas'></canvas>
+</view>

+ 143 - 0
components/image-cropper/image-cropper.wxss

@@ -0,0 +1,143 @@
+.image-cropper {
+    background: rgba(14, 13, 13, .8);
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100vw;
+    height: 100vh;
+    z-index: 1;
+}
+
+.image-cropper .main {
+    position: absolute;
+    width: 100vw;
+    height: 100vh;
+    overflow: hidden;
+}
+
+.image-cropper .content {
+    z-index: 9;
+    position: absolute;
+    width: 100vw;
+    height: 100vh;
+    display: flex;
+    flex-direction: column;
+    pointer-events: none;
+}
+
+.image-cropper .bg_black {
+    background: rgba(0, 0, 0, 0.8) !important;
+}
+
+.image-cropper .bg_gray {
+    background: rgba(0, 0, 0, 0.45);
+    transition-duration: .35s;
+}
+
+.image-cropper .content>.content_top {
+    pointer-events: none;
+}
+
+.image-cropper .content>.content_middle {
+    display: flex;
+    height: 200px;
+    width: 100%;
+}
+
+.image-cropper .content_middle_middle {
+    width: 200px;
+    box-sizing: border-box;
+    position: relative;
+    transition-duration: .3s;
+}
+
+.image-cropper .content_middle_right {
+    flex: auto;
+}
+
+.image-cropper .content>.content_bottom {
+    flex: auto;
+}
+
+.image-cropper .img {
+    z-index: 2;
+    top: 0;
+    left: 0;
+    position: absolute;
+    border: none;
+    width: 100%;
+    backface-visibility: hidden;
+    transform-origin: center;
+}
+
+.image-cropper .image-cropper-canvas {
+    position: fixed;
+    background: white;
+    width: 150px;
+    height: 150px;
+    z-index: 10;
+    top: -200%;
+    pointer-events: none;
+}
+
+.image-cropper .border {
+    background: white;
+    pointer-events: auto;
+    position: absolute;
+}
+
+.image-cropper .border-top-left {
+    left: -2.5px;
+    top: -2.5px;
+    height: 2.5px;
+    width: 33rpx;
+}
+
+.image-cropper .border-top-right {
+    right: -2.5px;
+    top: -2.5px;
+    height: 2.5px;
+    width: 33rpx;
+}
+
+.image-cropper .border-right-top {
+    top: -1px;
+    width: 2.5px;
+    height: 30rpx;
+    right: -2.5px;
+}
+
+.image-cropper .border-right-bottom {
+    width: 2.5px;
+    height: 30rpx;
+    right: -2.5px;
+    bottom: -1px;
+}
+
+.image-cropper .border-bottom-left {
+    height: 2.5px;
+    width: 33rpx;
+    bottom: -2.5px;
+    left: -2.5px;
+}
+
+.image-cropper .border-bottom-right {
+    height: 2.5px;
+    width: 33rpx;
+    bottom: -2.5px;
+    right: -2.5px;
+}
+
+.image-cropper .border-left-top {
+    top: -1px;
+    width: 2.5px;
+    height: 30rpx;
+    left: -2.5px;
+}
+
+.image-cropper .border-left-bottom {
+    width: 2.5px;
+    height: 30rpx;
+    left: -2.5px;
+    bottom: -1px;
+}

+ 45 - 0
components/navbar/navbar.js

@@ -0,0 +1,45 @@
+// components/navbar/navbar.ts
+// 获取应用实例
+const app = getApp();
+Component({
+  /**
+   * 组件的属性列表
+   */
+  properties: {
+    navbarData: { // 由父页面传递的数据
+      type: Object,
+      value: {},
+    },
+    callback: {
+      type: Boolean,
+      value: false
+    },
+  },
+  externalClasses: ['nav-bgc-class', 'nav-title-class'],
+  options: {
+    multipleSlots: true,
+  },
+  /**
+   * 组件的初始数据
+   */
+  data: {
+    navBarHeight: app.globalData.navBarHeight,
+    MenuButtonHeight: app.globalData.MenuButtonHeight,
+    MenuButtonTop: app.globalData.MenuButtonTop,
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+    _navback() {
+      if (this.properties.callback) {
+        this.triggerEvent('callback',); // 触发确定事件  
+        return;
+      };
+      wx.navigateBack({
+        delta: 1
+      });
+    }
+  },
+})

+ 4 - 0
components/navbar/navbar.json

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

+ 9 - 0
components/navbar/navbar.wxml

@@ -0,0 +1,9 @@
+<view class='nav-wrap nav-bgc-class' style='height: calc({{navBarHeight}}px - {{MenuButtonTop}}px); padding-top: {{MenuButtonTop}}px;'>
+     <view class="nav-info" style="height: {{ MenuButtonHeight }}px;">
+        <view  bindtap='_navback' style="height: {{ MenuButtonHeight }}px;" class="device-pic">
+          <image wx:if='{{navbarData.showCapsule}}' bindtap=""  mode="heightFix"  
+          src="./../../img/goback.png"></image>
+        </view>
+        <text class="nav-title-class" style="height: {{ MenuButtonHeight }}px; line-height: {{ MenuButtonHeight }}px;">{{navbarData.title}}</text>
+     </view>
+  </view>

+ 33 - 0
components/navbar/navbar.wxss

@@ -0,0 +1,33 @@
+/* components/navbar/navbar.wxss */
+.nav-wrap {
+  border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.nav-wrap .nav-info {
+  display: flex;
+  align-items: center;
+  position: relative;
+}
+
+.nav-wrap .nav-info .device-pic {
+  margin-right: 12rpx;
+  position: absolute;
+  top: 0;
+  left: 34rpx;
+  display: flex;
+  align-items: center;
+  z-index: 999;
+  width: 40rpx;
+}
+
+.nav-wrap .nav-info .device-pic image {
+  height: 36rpx;
+}
+
+.nav-wrap .nav-info text {
+  width: 100%;
+  text-align: center;
+  font-size: 35rpx;
+  color: #000;
+  font-weight: bold;
+}

+ 62 - 0
components/toast/toast.js

@@ -0,0 +1,62 @@
+// pages/components/toast/toast.js
+const app = getApp();
+Component({
+  /**
+   * 组件的属性列表
+   */
+  properties: {
+    toastData: {
+      type: Object,
+      value: {
+        titlePicUrl: "",
+        titlePicUrlWidth: 0,
+        title: [""],
+        info: [""],
+        isShowOneBut: false,
+        isShowTwoBut: false,
+        oneButText: "",
+        twoButText: "",
+        footTop: 0
+      }
+    },
+    oneButCallback: {
+      type: ()=> {},
+      value: ()=> {}
+    },
+    twoButCallback: {
+      type: ()=> {},
+      value: ()=> {}
+    },
+    visible: {
+      type: Boolean,
+      value: false
+    },
+  },
+
+  /**
+   * 组件的初始数据
+   */
+  data: {
+    navBarHeight: app.globalData.navBarHeight,
+    MenuButtonHeight: app.globalData.MenuButtonHeight,
+    MenuButtonTop: app.globalData.MenuButtonTop,
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+    oneButCallback(){
+      if(this.properties.oneButCallback) {
+        this.properties.oneButCallback();
+        return;
+      };
+    },
+    twoButCallback(){
+      if(this.properties.twoButCallback) {
+        this.properties.twoButCallback();
+        return;
+      };
+    },
+  }
+})

+ 4 - 0
components/toast/toast.json

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

+ 15 - 0
components/toast/toast.wxml

@@ -0,0 +1,15 @@
+<view wx:if="{{visible}}" style="height: calc(100vh - {{navBarHeight}}px);" class="toast">
+  <view class="toast-view">
+    <image mode="widthFix" src="{{toastData.titlePicUrl}}" style="width: {{toastData.titlePicUrlWidth}}rpx;"></image>
+    <view class="title">
+      <text wx:for="{{toastData.title}}">{{item}}</text>
+    </view>
+    <view class="info">
+      <text wx:for="{{toastData.info}}">{{item}}</text>
+    </view>
+    <view class="foot" style="margin-top: {{toastData.footTop}}rpx;">
+      <view wx:if="{{toastData.isShowOneBut}}" class="onBut" bindtap="oneButCallback">{{toastData.oneButText}}</view>
+      <view wx:if="{{toastData.isShowTwoBut}}" class="twoBut" bindtap="twoButCallback">{{toastData.twoButText}}</view>
+    </view>
+  </view>
+</view>

+ 61 - 0
components/toast/toast.wxss

@@ -0,0 +1,61 @@
+/* pages/components/toast/toast.wxss */
+
+.toast{
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  width: 100vw;
+  background-color: rgba(0, 0, 0, 0.6);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.toast-view{
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+  padding: 14rpx 50rpx 34rpx;
+  width: 520rpx;
+  background: #FFFFFF;
+  border-radius: 18rpx;
+}
+.toast-view>view>text{
+  display: block;
+}
+.toast-view .title{
+  margin-bottom: 14rpx;
+  font-size: 30rpx;
+  font-weight: bold;
+  color: #353535;
+  line-height: 38rpx;
+  text-align: center;
+}
+.toast-view .info{
+  margin-bottom: 14rpx;
+  font-size: 28rpx;
+  color: #999;
+  line-height: 38rpx;
+  text-align: center;
+}
+.foot{
+  display: flex;
+  justify-content: center;
+}
+.foot>view{
+  width: 226rpx;
+  height: 80rpx;
+  text-align: center;
+  line-height: 80rpx;
+  border-radius: 40rpx;
+  font-size: 30rpx;
+  font-weight: bold;
+  margin: 0 10rpx;
+}
+.foot>view.onBut{
+  background-color: rgba(153, 153, 153, 1);
+  color: #fff;
+}
+.foot>view.twoBut{
+  background-color: rgba(101, 71, 163, 1);
+  color: #fff;
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 87 - 0
pages/deviceList/deviceList.js


+ 5 - 0
pages/deviceList/deviceList.json

@@ -0,0 +1,5 @@
+{
+  "usingComponents": {
+    "nav-bar": "../../components/navbar/navbar"
+  }
+}

+ 9 - 0
pages/deviceList/deviceList.wxml

@@ -0,0 +1,9 @@
+<nav-bar bind:goBack="_goBack" nav-bgc-class="ex-nav-bgc-class" nav-title-class="ex-nav-title-class" ex-back-pre="ex-back-pre" navbar-data='{{nvabarData}}'></nav-bar>
+<view class="container grid-container">
+  <block wx:for="{{deviceList}}" wx:key="index" wx:for-item="item" wx:for-index="index">
+    <view class="cell" bind:tap="deviceTap" data-device="{{item}}">
+      <image class="device_img" src="{{item.img}}" mode="aspectFill" />
+      <text class="device_text main_black">{{item.name}}</text>
+    </view>
+  </block>
+</view>

+ 38 - 0
pages/deviceList/deviceList.wxss

@@ -0,0 +1,38 @@
+.container {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.grid-container {
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  grid-column-gap: 32rpx;
+  /* grid-row: 32rpx; */
+  padding-inline: 32rpx;
+  padding-top: 16rpx;
+}
+
+.cell {
+  overflow: hidden;
+  /* margin-bottom: 16rpx; */
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+
+}
+
+.device_img {
+  width: 100%;
+  height: 300rpx;
+  border-radius: 16rpx;
+  background-color: #F2F5F7;
+}
+
+.device_text {
+  margin-top: 16rpx;
+  text-align: center;
+  width: 100%;
+  font-size: 28rpx;
+  margin-bottom: 72rpx;
+
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1066 - 0
pages/index/index.js


+ 5 - 0
pages/index/index.json

@@ -0,0 +1,5 @@
+{
+  "usingComponents": {
+    "nav-bar": "../../components/navbar/navbar"
+  }
+}

+ 211 - 0
pages/index/index.wxml

@@ -0,0 +1,211 @@
+<!-- index.wxml -->
+<view class="container" style="flex-direction: column; display: flex;">
+  <nav-bar bind:goBack="_goBack" nav-bgc-class="ex-nav-bgc-class" nav-title-class="ex-nav-title-class" ex-back-pre="ex-back-pre" navbar-data='{{nvabarData}}'></nav-bar>
+
+  <view style="height: calc(100vh - 22rpx - {{navBarHeight}}px);">
+
+    <view wx:if="{{indexPage==0}}" class="mair" style="flex-direction: column; display: flex; height: calc(100vh - 105rpx - {{safeBottomHeight}}rpx - 22rpx - {{navBarHeight}}px);">
+      <view style="font-size: 32rpx; color: #333333; margin-top: 14rpx;">{{greeting}}</view>
+
+      <!-- banner -->
+      <view wx:if="{{bannerList.length>0}}" class="banner_container">
+        <swiper class="swiper" indicator-dots="{{bannerList.length>1}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}" circular="{{circular}}" indicator-active-color="#FFFFFF" indicator-color="#999999">
+          <block wx:for="{{bannerList}}" wx:key="index">
+            <swiper-item>
+              <image mode="widthFix" class="swiper_image" src="{{item.pic}}" data-item="{{item}}" bind:tap="onTapBanner" />
+            </swiper-item>
+          </block>
+        </swiper>
+      </view>
+
+      <view class="add_device_public" bind:tap="jumpToAddDevice">
+        <image mode="heightFix" src="./../../img/add_device.png" style="width: 48rpx;height: 48rpx;"></image>
+        <view style="color: white; margin-left: 8rpx; font-size: 32rpx;">添加设备</view>
+      </view>
+
+      <scroll-view scroll-y="true" style="height: calc(100vh - 152rpx - 296rpx - 46rpx - 105rpx - {{safeBottomHeight}}rpx - 5rpx - {{navBarHeight}}px);">
+        <block wx:key="key" wx:for-item="item" wx:for-index="index" wx:for="{{deviceList}}">
+
+          <view class="item_public" style="border: {{item.state && item.state === 'online'&&deviceListSelect === index  ? '6rpx solid #6546A3' : item.state && item.state === 'online'?'2rpx solid #6546A3':'2rpx solid #F2F5F7'}};  flex-direction: row; display: flex; margin-top: 10rpx; margin-bottom: {{index==0?deviceList.length-1:0}}rpx; " data-item="{{item}}" data-index="{{index}}" bind:tap="onTapItem">
+
+            <view style="width: 264rpx; height: 200rpx;">
+              <image class="item_public_image" src="{{item.imageUrl}}" style="opacity: {{item.state && item.state === 'online' ? '1' : '0.5'}};" mode="aspectFit" lazy-load="true" webp="true"></image>
+            </view>
+
+            <view class="item_public_right" style="flex: 1; margin-right: 25rpx; opacity: {{item.state && item.state === 'online' ? '1' : '0.5'}};">
+              <view style="height: 190rpx; margin-top: 37rpx; margin-left: 32rpx; flex-direction: column; display: flex;">
+
+                <view style="flex: 1;flex-direction: column; display: flex;">
+                  <view style="display: flex; width: calc(100vw - 64rpx - 268rpx);">
+
+                    <view style="width: calc(100vw - 64rpx - 268rpx - 53rpx - 30rpx); color: #333333; font-size: 28rpx;padding-right: 5rpx; white-space: nowrap; overflow: hidden;  text-overflow: ellipsis;">
+                      <text>{{item.devName}}</text>
+                    </view>
+
+                    <view style="width: 48rpx; height: 48rpx;">
+                      <image mode="aspectFit" src="./../../img/add_device_arrow.png" style="width: 48rpx; height: 48rpx; opacity: {{item.state && item.state === 'online'&&deviceListSelect === index ? '1' : '0'}}; "></image>
+                    </view>
+
+                  </view>
+
+                  <view style="color: #666666; font-size: 24rpx;display: flex; flex-direction: row; align-items: center;">
+                    <image mode="heightFix" src="{{item.connectType==3?'../../../images/device/wifi_black.png':'../../../images/device/blue_black.png'}}" style="width: 28rpx;height: 28rpx; padding-right: 10rpx; opacity: {{item.state && item.state === 'online' ? '1' : '0.7'}};"></image>
+                    <view style="white-space: nowrap;"> {{item.state && item.state === "online" ? (item.connectType==3?"Wifi在线":"蓝牙在线") : "离线"}} </view>
+                  </view>
+
+                </view>
+                <view style="align-items: center; justify-content: center; vertical-align: middle;width: 280rpx;height: 64rpx;background-color: #F2F5F7;  border-radius: 52rpx; text-align: center; justify-content: center;  display: flex;" data-index="{{index}}" catchtap="deleteDevice">
+                  <view style="color: #666666; font-size: 28rpx; ">删除</view>
+                </view>
+              </view>
+            </view>
+          </view>
+
+        </block>
+      </scroll-view>
+    </view>
+
+    <view wx:else>
+
+      <!-- 频道 -->
+      <view wx:if="{{indexPage==1&&deviceListSelect!=null&&deviceList.length>deviceListSelect&&deviceList[deviceListSelect].connectType===3}}" class="mair" style="height: calc(100vh - 105rpx - {{safeBottomHeight}}rpx - 22rpx - {{navBarHeight}}px);">
+        <view class="play-info">
+          <view class="info">
+            <image src="./../../img/blak.png" class="black" mode="scaleToFill"></image>
+            <image src="./../../img/mm.png" class="mode" mode="widthFix"></image>
+            <image class="logo" mode="heightFix" src="./../../img/logo.png"></image>
+            <view wx:if="{{actionIndex !== null}}" style="opacity: 0.8; text-shadow:0px 0px 4px #6D00FF;" class="fm">
+              FM.{{actionIndex !== null ? (actionIndex + 1 < 10 ? "0" + (actionIndex + 1) : actionIndex + 1) : 00}} </view>
+                <view wx:if="{{actionIndex !== null}}" style="opacity: 1;" class="fm">
+                  FM.{{actionIndex !== null ? (actionIndex + 1 < 10 ? "0" + (actionIndex + 1) : actionIndex + 1) : 00}} <image class="gochnnalList" mode="heightFix" src="./../../img/a6.png">
+                    </image>
+                </view>
+                <view class="fmMod" bindtap="onTapToChannel"></view>
+                <view wx:if="{{actionIndex !== null}}" class="thisMusic">
+                  <text>当前播放:</text>
+                  <view class="scroll-box">
+                    <view class="scroll-wrap">
+                      <view class="scroll-item">{{channelData[actionIndex].channelName}}</view>
+                    </view>
+                  </view>
+                </view>
+                <image src="{{'./../../img/dl' + battery + '.png'}}" class="battery" mode="scaleToFill"></image>
+            </view>
+            <view class="wakeMode" bindtap="goWake">
+              <image src="./../../img/woak.png" class="mode" mode="scaleToFill"></image>
+              <image class="wake" mode="heightFix" src="{{isSetWake ? './../../img/n24.png' : './../../img/n23.png' }}"></image>
+              <text>定时</text>
+            </view>
+          </view>
+          <scroll-view class="pd" scroll-y="true">
+            <view class="conm" wx:if="{{channelData && channelData.length > 0}}">
+              <image mode="scaleToFill" class="cz" src="./../../img/cz.png"></image>
+              <view class="musicList">
+                <view wx:for="{{channelData}}" class="li {{index === actionIndex ? 'action' : ' '}}">
+                  <image mode="scaleToFill" wx:if="{{index === actionIndex}}" class="zz" src="./../../img/zz.png"></image>
+                  <text class="lm">{{luoma[index]}}</text>
+                  <view class="musicInfo" data-index="{{index}}" bindtap="onTapChannelIndex">
+                    <image mode="scaleToFill" class="pic" src="{{item.channelPic ? item.channelPic : './../../img/head_pic.png'}}"></image>
+                    <text>{{item.channelName}}</text>
+                    <image mode="scaleToFill" wx:if="{{index === actionIndex}}" class="svg" src="../../../svg/audio.svg"></image>
+                  </view>
+                </view>
+              </view>
+            </view>
+          </scroll-view>
+          <!-- 登录启用以下版本 -->
+          <view class="gologin" wx:if="{{showLogin}}">
+            <view class="model">
+              <view bindtap="goLogin" style="position: none; height: auto;" class="loginPic">
+                <image style="margin: 20rpx 0 20rpx 0; width: 100vw;" mode="widthFix" src="./../../img/BG_long.png"></image>
+              </view>
+              <view style="position: none; height: calc(100% - 224rpx); overflow: auto;" class="BG_PD">
+                <view>
+                  <image style="margin: 0; width: 100vw;" mode="widthFix" src="./../../img/BG_PD.png"></image>
+                </view>
+              </view>
+            </view>
+          </view>
+          <view class="gologin goruter" wx:if="{{!showLogin && deviceList && deviceList.length === 0}}">
+            <view class="model">
+              <view bindtap="goDeviceConnect" style="position: none; height: auto;" class="loginPic">
+                <image style="margin: 20rpx 0 20rpx 0; width: 100vw;" mode="widthFix" src="./../../img/BG_LJ.png"></image>
+              </view>
+              <view style="position: none; height: calc(100% - 224rpx); overflow: auto;" class="BG_PD">
+                <view>
+                  <image style="margin: 0; width: 100vw;" mode="widthFix" src="./../../img/BG_PD.png"></image>
+                </view>
+              </view>
+            </view>
+          </view>
+        </view>
+
+        <!-- 我的 -->
+        <view wx:elif="{{indexPage==2}}" class="me" style="height: calc(100vh - 105rpx - {{safeBottomHeight}}rpx - 22rpx - {{navBarHeight}}px); display: flex; flex-direction: column;">
+
+          <view class="head-logo" bind:tap="{{isLogin?'':'onTapLogin'}}">
+            <image mode="scaleToFill" src="{{userPic}}"></image>
+            <text class="nick_name" wx:if="{{nickName}}">{{nickName}}</text>
+          </view>
+
+          <view class="br"></view>
+          <view class="list">
+            <view class="li">
+              <view class="icon">
+                <image mode="widthFix" style="width: 40rpx; height: 40rpx;" src="./../../img/o.png"></image>
+              </view>
+              <view class="button">
+                <button class="between_text" open-type="feedback">建议与反馈</button>
+                <button class="between_image" open-type="feedback">
+                  <image class="j" src="./../../img/b.png"></image>
+                </button>
+              </view>
+            </view>
+            <view class="li">
+              <view class="icon">
+                <image mode="widthFix" style="width: 40rpx; height: 40rpx;" src="./../../img/q.png"></image>
+              </view>
+              <view class="button" bindtap="jumpToAboutUs">
+                <text>关于我们</text>
+                <image class="j" src="./../../img/b.png"></image>
+              </view>
+            </view>
+          </view>
+          <view wx:if="{{isLogin}}" style="flex: 1;display: flex;">
+            <view class="login">
+              <view bindtap="onTapLogin" class="{{!isLogin ? 'action' : ''}}">
+                {{isLogin ? '退出登录' : "登录"}}
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <view style="height: calc(105rpx + {{safeBottomHeight}}rpx); flex-direction: column; display: flex;background-color: white;">
+      <view class="line"></view>
+      <view style="flex: 1; text-align: center; display: flex;align-items: center;">
+        <!-- 首页 -->
+        <view class="bottom_view" data-index="0" bind:tap="onTapIndex">
+          <image class="bottom_image" mode="widthFix" src="{{indexPage==0?'./../../img/index_action.png':'./../../img/index_unaction.png'}}"></image>
+          <view style="font-size: 20rpx;color: {{indexPage==0?'#A4D099':'black'}}; padding-top: 0rpx;margin-top: 0rpx;">
+            首页
+          </view>
+        </view>
+
+        <!-- 频道 -->
+        <view wx:if="{{deviceListSelect!=null&&deviceList.length>deviceListSelect&&deviceList[deviceListSelect].connectType===3}}" class="bottom_view" data-index="1" bind:tap="onTapIndex">
+          <image class="bottom_image" mode="widthFix" src="{{indexPage==1?'./../../img/channel_action.png':'./../../img/channel_unaction.png'}}"></image>
+          <view style="font-size: 20rpx;color: {{indexPage==1?'#A4D099':'black'}};">频道</view>
+        </view>
+
+        <!-- 我的 -->
+        <view class="bottom_view" data-index="2" bind:tap="onTapIndex">
+          <image class="bottom_image" mode="widthFix" src="{{indexPage==2?'./../../img/me_action.png':'./../../img/me_unaction.png'}}"></image>
+          <view style="font-size: 20rpx;color: {{indexPage==2?'#A4D099':'black'}};">我的</view>
+        </view>
+      </view>
+      <view style="height: {{safeBottomHeight}}rpx;"></view>
+    </view>
+
+  </view>

+ 847 - 0
pages/index/index.wxss

@@ -0,0 +1,847 @@
+/* 假设你的页面容器有一个类名为.page-container */
+.container {
+  display: flex;
+  flex-direction: column;
+  height: 100vh;
+  width: 100vw;
+}
+
+/* 隐藏滚动条 */
+.tab_page_container {
+  flex: block;
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+
+/* 隐藏滚动条 */
+::-webkit-scrollbar {
+  width: 0;
+  height: 0;
+  color: transparent;
+  display: none;
+}
+
+/************************ 首页 ************************/
+
+.nav-wrap {
+  backdrop-filter: blur(10rpx);
+  border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.nav-wrap .nav-info {
+  padding-left: 32rpx;
+  display: flex;
+  align-items: center;
+}
+
+.nav-wrap .nav-info .device-pic {
+  height: 36rpx;
+  margin-right: 12rpx;
+}
+
+.nav-wrap .nav-info .z {
+  height: 24rpx;
+  margin-right: 12rpx;
+}
+
+.nav-wrap .nav-info text {
+  font-size: 28rpx;
+  color: #353535;
+  font-weight: bold;
+  margin-right: 24rpx;
+}
+
+.nav-wrap .nav-info .j {
+  height: 16rpx;
+}
+
+.mair {
+  width: calc(100vw - 64rpx);
+  padding: 20rpx 32rpx 0;
+  position: relative;
+  overflow: hidden;
+}
+
+.mair .play-info {
+  width: 100%;
+  padding: 16rpx 0;
+  background: linear-gradient(167deg, #D8D8D8 0%, rgba(238, 238, 238, 0.5) 100%);
+  border-radius: 12rpx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.mair .play-info .info {
+  width: 550rpx;
+  height: 152rpx;
+  position: relative;
+}
+
+.mair .play-info .wakeMode {
+  width: 96rpx;
+  height: 152rpx;
+  background: linear-gradient(180deg, #000000 0%, #000000 100%);
+  box-shadow: inset 2rpx 6rpx 10rpx 0px rgba(255, 255, 255, 0.61), inset 0px -2rpx 4rpx 0px rgba(255, 255, 255, 0.3);
+  border-radius: 12rpx;
+  margin-left: 8rpx;
+  position: relative;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-direction: column;
+}
+
+.mair .play-info .wakeMode text {
+  height: 28rpx;
+  font-size: 20rpx;
+  font-weight: 500;
+  color: #FFFFFF;
+  line-height: 28rpx;
+  font-weight: 500;
+  margin-top: 20rpx;
+}
+
+.mair .play-info .wakeMode .mode {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 96rpx;
+  height: 148rpx;
+  z-index: 999;
+}
+
+.mair .play-info .info .logo {
+  position: absolute;
+  top: 14rpx;
+  left: 20rpx;
+  height: 48rpx;
+}
+
+.mair .play-info .info .battery {
+  position: absolute;
+  top: 8rpx;
+  right: 16rpx;
+  height: 56rpx;
+  width: 56rpx;
+}
+
+.mair .play-info .info .fm {
+  color: #fff;
+}
+
+.mair .play-info .info .black {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 550rpx;
+  height: 152rpx;
+}
+
+.mair .play-info .info .mode {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 550rpx;
+  height: 152rpx;
+  z-index: 999;
+}
+
+.mair .play-info .info .fm {
+  position: absolute;
+  top: 22rpx;
+  left: 50%;
+  transform: translateX(-50%);
+  font-size: 48rpx;
+  font-weight: 600;
+  color: #6D00FF;
+  line-height: 66rpx;
+}
+
+.mair .play-info .info .fmMod {
+  position: absolute;
+  top: 22rpx;
+  left: 50%;
+  transform: translateX(-50%);
+  width: 200rpx;
+  height: 66rpx;
+  z-index: 1000;
+}
+
+.mair .play-info .info .fm .gochnnalList {
+  width: 50rpx;
+  height: 50rpx;
+  position: absolute;
+  top: 8rpx;
+  left: 100%;
+}
+
+.mair .play-info .info .thisMusic {
+  position: absolute;
+  bottom: 26rpx;
+  left: 50%;
+  transform: translateX(-50%);
+  width: 488rpx;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.mair .play-info .info .thisMusic>text {
+  width: 100rpx;
+  display: inline-block;
+  color: #fff;
+  font-size: 20rpx;
+}
+
+.mair .play-info .info .thisMusic .scroll-box {
+  position: relative;
+  max-width: 388rpx;
+  display: flex;
+  align-items: center;
+}
+
+.thisMusic .scroll-box .scroll-wrap {
+  max-width: 100%;
+  display: inline-block;
+  vertical-align: top;
+  overflow: hidden;
+  white-space: nowrap;
+}
+
+.thisMusic .scroll-box .scroll-item {
+  /* animation: scroll linear 4s alternate infinite; */
+  float: left;
+  color: #fff;
+  font-size: 20rpx;
+}
+
+@keyframes scroll {
+  0% {
+    margin-left: 0;
+    transform: translateX(0);
+  }
+
+  10% {
+    margin-left: 0;
+    transform: translateX(0);
+  }
+
+  90% {
+    margin-left: 100%;
+    transform: translateX(-100%);
+  }
+
+  100% {
+    margin-left: 100%;
+    transform: translateX(-100%);
+  }
+}
+
+.mair .gologin {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100vw;
+  height: 100%;
+  background-color: rgba(0, 0, 0, 0.6);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  z-index: 9999;
+}
+
+.mair .gologin .model {
+  width: 100%;
+  height: 100%;
+  position: relative;
+  background-color: #fff;
+}
+
+.mair .gologin .model>image {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+
+.mair .gologin .model>view {
+  /* position: absolute;
+  top: 0;
+  left: 0; */
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+}
+
+.mair .gologin .model>view>image {
+  display: block;
+  height: 44rpx;
+  margin: 398rpx auto 18rpx;
+}
+
+.mair .gologin .model>view text {
+  display: block;
+  width: 100%;
+  font-size: 30rpx;
+  color: #353535;
+  font-weight: bold;
+  text-align: center;
+  margin-bottom: 66rpx;
+}
+
+.mair .goruter .model {
+  background: #fff;
+  height: 100%;
+  width: 100%;
+}
+
+.mair .goruter .model>view>image {
+  display: block;
+  height: 176rpx;
+  margin: 318rpx auto 18rpx;
+}
+
+.pd {
+  position: relative;
+  width: 120vw;
+  height: calc(100% - 204rpx);
+  padding-top: 20rpx;
+  margin-left: -24rpx;
+}
+
+.pd .conm {
+  padding-left: 24rpx;
+  width: calc(100vw - 52rpx);
+}
+
+.pd .cz {
+  width: 22rpx;
+  height: 1664rpx;
+  position: absolute;
+  top: 24rpx;
+  left: 24rpx;
+}
+
+.pd .musicList {
+  padding: 0 0 20rpx 44rpx;
+  position: relative;
+}
+
+.pd .musicList .li {
+  height: 98rpx;
+  display: flex;
+  align-items: center;
+  margin-bottom: 52rpx;
+  color: #353535;
+  position: relative;
+}
+
+.pd .musicList .li .zz {
+  width: 236rpx;
+  height: 22rpx;
+  position: absolute;
+  top: 48rpx;
+  left: -70rpx;
+  z-index: 999;
+}
+
+.pd .musicList .li .lm {
+  transform: rotate(90deg);
+}
+
+.pd .musicList .li .musicInfo {
+  width: 606rpx;
+  height: 98rpx;
+  display: flex;
+  align-items: center;
+  margin-left: 22rpx;
+  position: relative;
+}
+
+.pd .musicList .li .musicInfo .pic {
+  width: 86rpx;
+  height: 86rpx;
+  border-radius: 50%;
+  margin-right: 24rpx;
+  border: 2rpx solid #979797;
+}
+
+.pd .musicList .li .musicInfo text {
+  font-size: 30rpx;
+  font-weight: bold;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  width: calc(100% - 200rpx);
+}
+
+.pd .musicList .li .musicInfo .svg {
+  position: absolute;
+  top: 34rpx;
+  right: 50rpx;
+  width: 34rpx;
+  height: 30rpx;
+}
+
+.pd .musicList .li:last-child {
+  margin: 0;
+}
+
+.pd .musicList .li.action {
+  color: #6547A3;
+}
+
+.pd .musicList .li.action .musicInfo {
+  border-radius: 49rpx;
+  background-color: #D8D8D8;
+}
+
+.mair .mz {
+  width: calc(100% - 72rpx);
+  padding: 32rpx 36rpx;
+  background: #FFFFFF;
+  border-radius: 0px 0px 18rpx 18rpx;
+  overflow: hidden;
+}
+
+.mair .deviceList {
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, 0.6);
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 9999;
+}
+
+.mair .mz .li-view {
+  height: 160rpx;
+  float: left;
+  width: calc(100% / 2 - 8rpx);
+  margin-bottom: 36rpx;
+  display: flex;
+  align-items: center;
+}
+
+.mair .mz .li-view:nth-child(2n) {
+  margin-left: 14rpx;
+}
+
+.mair .mz .li {
+  position: relative;
+  width: calc(100% - 44rpx);
+  height: 160rpx;
+  display: flex;
+  align-items: center;
+  border: 2rpx solid #353535;
+  border-radius: 16rpx;
+  padding: 0 20rpx;
+  background-color: #fff;
+}
+
+.mair .mz .li image {
+  width: 96rpx;
+}
+
+.mair .mz .li .delete {
+  position: absolute;
+  top: -6rpx;
+  right: -6rpx;
+  width: 36rpx;
+}
+
+.mair .mz .li .deviceName {
+  font-size: 28rpx;
+  color: #353535;
+  font-weight: 500;
+  margin-left: 18rpx;
+}
+
+.mair .mz .li .onli {
+  position: absolute;
+  bottom: 14rpx;
+  right: 24rpx;
+  font-size: 24rex;
+  color: #353535;
+}
+
+.mair .mz .li.action {
+  border: 4rpx solid #6547A3;
+  box-shadow: 0px 4rpx 8rpx 0px rgba(0, 0, 0, 0.5);
+  width: calc(100% - 48rpx);
+  height: 156rpx;
+}
+
+.mair .mz .li.action .onli {
+  color: #6547A3;
+}
+
+.mair .mz .li.offline {
+  opacity: 0.6;
+}
+
+.mair .mz .but {
+  float: left;
+  width: 100%;
+  display: flex;
+  justify-content: center;
+
+}
+
+.mair .mz .but text {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: 226rpx;
+  height: 80rpx;
+  background: #6547A3;
+  border-radius: 45rpx;
+  color: #fff;
+  margin: 0 20rpx;
+}
+
+.wake {
+  height: 48rpx;
+  width: 48rpx;
+  z-index: 1000;
+}
+
+/* .updataminiwx {
+   position: fixed;
+   top: 0;
+   left: 0;
+   width: 100vw;
+   height: 100vh;
+   display: flex;
+   align-items: center;
+   justify-content: center;
+   background: rgba(0, 0, 0, 0.6);
+   z-index: 9999;
+ }
+
+ .updataminiwx .mode {
+   width: 520rpx;
+   height: 410rpx;
+   position: relative;
+ }
+
+ .updataminiwx .mode .bg {
+   width: 520rpx;
+   height: 410rpx;
+ }
+
+ .updataminiwx .mode .updata-view {
+   width: 520rpx;
+   height: 410rpx;
+   position: absolute;
+   top: 0;
+   left: 0;
+ }
+
+ .updataminiwx .mode .updata-view image {
+   width: 124rpx;
+   height: 124rpx;
+   margin: 24rpx auto 14rpx;
+   display: block;
+ }
+
+ .updataminiwx .mode .updata-view .title {
+   height: 38rpx;
+   font-size: 30rpx;
+   font-weight: bold;
+   color: #353535;
+   line-height: 38rpx;
+   display: block;
+   text-align: center;
+   margin-bottom: 16rpx;
+ }
+
+ .updataminiwx .mode .updata-view .tip {
+   height: 38rpx;
+   font-size: 30rpx;
+   font-weight: 500;
+   color: #999;
+   line-height: 38rpx;
+   display: block;
+   text-align: center;
+   margin-bottom: 40rpx;
+ }
+
+ .updataminiwx .mode .updata-view>view {
+   display: flex;
+   justify-content: center;
+ }
+
+ .updataminiwx .mode .updata-view>view text {
+   width: 226rpx;
+   height: 80rpx;
+   text-align: center;
+   line-height: 80rpx;
+   border-radius: 40rpx;
+   font-size: 30rpx;
+   font-weight: bold;
+   margin: 0 10rpx;
+ }
+
+ .updataminiwx .mode .updata-view>view .onBut {
+   background-color: rgba(153, 153, 153, 1);
+   color: #fff;
+ }
+
+ .updataminiwx .mode .updata-view>view .twoBut {
+   background-color: rgba(101, 71, 163, 1);
+   color: #fff;
+ } */
+
+
+/************************ 我的 ************************/
+
+/* pages/me/me.wxss */
+.me .head-logo {
+  padding: 38rpx 0 28rpx;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+}
+
+.me .head-logo image {
+  width: 240rpx;
+  height: 240rpx;
+  border-radius: 50%;
+  border: 10rpx solid rgba(101, 71, 163, 0.2);
+  margin-bottom: 28rpx;
+}
+
+.me .head-logo text {
+  font-size: 36rpx;
+  font-weight: bold;
+}
+
+.me .head-logo .goLogin {
+  color: #999;
+}
+
+.me .head-logo .nick_name {
+  color: #353535;
+}
+
+.me .br {
+  height: 20rpx;
+  background: #999999;
+  opacity: 0.05;
+}
+
+.me .list {
+  padding: 0 30rpx;
+}
+
+.me .list .li {
+  height: 102rpx;
+  display: flex;
+}
+
+.me .list .li .icon {
+  height: 102rpx;
+  display: flex;
+  align-items: center;
+  margin-right: 20rpx;
+}
+
+.me .list .li image {
+  width: 40rpx;
+}
+
+.me .list .li .button {
+  width: calc(100% - 60rpx);
+  border-bottom: 1rpx solid #E0DCD7;
+  position: relative;
+  display: flex;
+  align-items: center;
+}
+
+
+.between_text {
+  height: 105rpx;
+  display: flex;
+  align-items: center;
+  font-size: 30rpx;
+  background-color: transparent;
+}
+
+.between_image {
+  height: 105rpx;
+  display: flex;
+  align-items: center;
+  background-color: transparent;
+  justify-content: flex-end;
+}
+
+.me .list .li .button button,
+.me .list .li .button text {
+  margin: 0;
+  background: none;
+  text-align: left;
+  padding: 0;
+  line-height: 102rpx;
+  font-size: 30rpx;
+  color: #353535;
+  font-weight: 400;
+}
+
+.me .list .li .button image.j {
+  height: 22rpx;
+  width: 12rpx;
+  position: absolute;
+  top: 40rpx;
+  right: 0rpx;
+}
+
+/* position: fixed; display: flex; */
+.login {
+  display: flex;
+  width: 100vw;
+  align-items: flex-end;
+  margin-bottom: 50rpx;
+  justify-content: center;
+}
+
+.login>view {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: 520rpx;
+  height: 80rpx;
+  background: #999999;
+  border-radius: 45rpx;
+  font-size: 36rpx;
+  font-weight: 400;
+  color: #FFFFFF;
+}
+
+.login>view.action {
+  background: #6547A3;
+}
+
+/************************ 底部选择按钮 ************************/
+
+.line {
+  height: 1rpx;
+  background-color: #999999;
+}
+
+.bottom_view {
+  flex: 1;
+}
+
+.bottom_image {
+  width: 44rpx;
+  height: 44rpx;
+}
+
+/************************ banner ************************/
+
+.banner_container {
+  width: 100%;
+  height: 264rpx;
+  margin-top: 32rpx;
+  /* 根据需要调整高度 */
+  overflow: hidden;
+  position: relative;
+  border-radius: 16rpx;
+}
+
+.swiper {
+  width: 100%;
+  height: 264rpx;
+}
+
+.swiper_image {
+  width: 100%;
+  display: block;
+}
+
+/* .banner_container {
+  margin-top: 24rpx;
+  height: 270rpx;
+  background-color: transparent;
+}
+
+.banner_item {
+  height: 270rpx;
+  background-color: transparent;
+} */
+
+/* 设置指示点的大小和颜色 */
+.swiper_dot {
+  width: 10px;
+  /* 指示点的宽度 */
+  height: 10px;
+  /* 指示点的高度 */
+  background-color: rgba(21, 128, 56, 0.5);
+  /* 指示点的颜色,这里使用了半透明的白色 */
+  border-radius: 50%;
+  /* 使指示点成为圆形 */
+  margin: 0 4px;
+  /* 指示点之间的间距 */
+  display: inline-block;
+  /* 使指示点成为行内块元素 */
+}
+
+/* 设置当前选中指示点的样式(可选) */
+.swiper_dot_active {
+  background-color: red;
+  /* 当前选中指示点的颜色 */
+  width: 12px;
+  /* 当前选中指示点的宽度(可以比未选中时稍大) */
+  height: 12px;
+  /* 当前选中指示点的高度(可以比未选中时稍大) */
+}
+
+.add_device_public {
+  background-color: #6546A3;
+  width: 80vw;
+  height: 88rpx;
+  margin-top: 32rpx;
+  margin-left: 5%;
+  border-radius: 72rpx;
+  display: flex;
+  text-align: center;
+  justify-content: center;
+  align-items: center;
+}
+
+.scoll_content {
+  flex: 1;
+  /* 占据剩余空间 */
+  overflow-y: auto;
+  /* 允许垂直滚动 */
+  -webkit-overflow-scrolling: touch;
+  /* 改善iOS上的滚动性能 */
+  background-color: #fff;
+  /* 背景色仅用于示例 */
+}
+
+.item_public {
+  height: 264rpx;
+  border: 2rpx solid #6546A3;
+  border-radius: 24rpx;
+  display: flex;
+  margin-bottom: 10rpx;
+}
+
+.item_public_image {
+  height: 200rpx;
+  width: 200rpx;
+  margin-left: 32rpx;
+  margin-top: 32rpx;
+}
+
+.item_public_right {
+  flex: 1;
+}

+ 94 - 0
pages/login/login.js

@@ -0,0 +1,94 @@
+const {
+  login,
+  register
+} = require('../../utils/api.js')
+import route_constant from '../../utils/route_constant.js';
+import route_util from '../../utils/route_util.js';
+
+Page({
+
+  data: {
+    nvabarData: {
+      showCapsule: 1, //是否显示左上角图标   1表示显示    0表示不显示
+      title: '', //导航栏 中间的标题
+    },
+    isYs: false,
+    isAgree: false,
+  },
+
+  onLoad(options) {},
+
+  egree() {
+    this.setData({
+      isAgree: !this.data.isAgree
+    });
+  },
+
+  goabout(e) {
+    var param = '?type=' + e.currentTarget.dataset.index;
+    route_util.jumpParam(route_constant.aboutInfo, param);
+  },
+
+  getPhoneNumber(e) {
+    if (e.detail.errMsg != "getPhoneNumber:ok") {
+      wx.showToast({
+        title: "获取手机号失败",
+        icon: 'fail',
+        duration: 2000
+      });
+      return;
+    }
+
+    var phoneCode = e.detail.code;
+    if (phoneCode) {
+      wx.login({
+        success: res1 => {
+          wx.showLoading({
+            title: '加载中',
+          });
+          // {"openid":"oZHPJ5JcNem2och3ToaocggmUENw","unionid":null,"userId":null,"deviceUid":null,"accessToken":null,"phone":null,"headUrl":"","nickname":"","isNewUser":true}
+          login({
+            code: res1.code,
+            unShowLoad: true,
+          }).then((res2) => {
+            register({
+              openid: res2.openid,
+              code: phoneCode,
+              unShowLoad: true,
+            }).then((res3) => {
+              var phone = res3.phone;
+              getCurrentPages()[0].loginReset(phone, function () {
+                wx.showToast({
+                  title: "登录成功",
+                  icon: 'success',
+                  duration: 2000
+                });
+              }, function () {
+                setTimeout(() => {
+                  route_util.redirectTo(route_constant.deviceList);
+                }, 2000);
+              }, function () {
+                wx.hideLoading();
+              });
+            });
+          });
+        },
+        fail(fail1) {
+          wx.hideLoading();
+        },
+      });
+    }
+  },
+
+  notlogin() {
+    wx.showToast({
+      title: '请同意协议',
+      icon: "none"
+    })
+  }
+})
+
+// 需要用授权登录
+// if ((res.isNewUser && res.isNewUser === true) || !phone) {
+//   return;
+// };

+ 5 - 0
pages/login/login.json

@@ -0,0 +1,5 @@
+{
+  "usingComponents": {
+    "nav-bar": "../../components/navbar/navbar"
+  }
+}

+ 17 - 0
pages/login/login.wxml

@@ -0,0 +1,17 @@
+<view class="login">
+  <nav-bar bind:goBack="_goBack" nav-bgc-class="ex-nav-bgc-class" nav-title-class="ex-nav-title-class" ex-back-pre="ex-back-pre" navbar-data='{{nvabarData}}'>
+  </nav-bar>
+  <view class="mair">
+    <image mode="widthFix" src="./../../img/k.png"></image>
+    <view class="loginbut">
+      <view class="mode" wx:if="{{!isAgree}}" catchtap="notlogin"></view>
+      <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">手机号快速登录</button>
+    </view>
+    <view class="ys">
+      <image style="margin-top: 5rpx;" bindtap="egree" mode="aspectFill" src="./../../img/login_agree_{{isAgree ? 'sel' : 'nor'}}.png"></image>
+      <view>我已阅读并同意<text data-index="0" bindtap="goabout">《猫王妙播用户服务协议》</text>
+        <text data-index="1" bindtap="goabout">《猫王妙播用户隐私协议》</text>
+      </view>
+    </view>
+  </view>
+</view>

+ 55 - 0
pages/login/login.wxss

@@ -0,0 +1,55 @@
+
+.login{
+  width: 100vw;
+  height: 100vh;
+  background: #6547A3;
+}
+.mair {
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+  overflow: hidden;
+}
+.mair>image{
+  width: 400rpx;
+  margin-top: 260rpx;
+}
+.mair .loginbut{
+  margin-top: 100rpx;
+  position: relative;
+}
+.mair .loginbut button{
+  width: 520rpx;
+  height: 80rpx;
+  background: #FFFFFF;
+  border-radius: 45rpx;
+  font-size: 36rpx;
+  color: #6547A3;
+}
+.mair .loginbut .mode {
+  width: 520rpx;
+  height: 80rpx;
+  background: #FFFFFF;
+  opacity: 0.4;
+  position: absolute;
+  top: 0;
+  left: calc((100% - 520rpx) / 2);
+  z-index: 1;
+  border-radius: 45rpx;
+}
+.mair .ys{
+  margin-top: 40rpx;
+  display: flex;
+  justify-content: center;
+}
+.mair .ys>image{
+  width: 28rpx;
+  height: 28rpx;
+  margin-right: 10rpx;
+}
+.mair .ys view{
+  font-size: 24rpx;
+  color: #fff;
+  width: 65vw;
+  line-height: 34rpx;
+}

+ 66 - 0
pages/packageA/about/about.js

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

+ 2 - 0
pages/packageA/about/about.wxml

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

+ 66 - 0
pages/packageA/about/connectBle.js

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

+ 2 - 0
pages/packageA/about/connectBle.wxml

@@ -0,0 +1,2 @@
+<!--pages/packageA/about/connectBle.wxml-->
+<text>pages/packageA/about/connectBle.wxml</text>

+ 66 - 0
pages/packageA/about/deviceConMode.js

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

+ 2 - 0
pages/packageA/about/deviceConMode.wxml

@@ -0,0 +1,2 @@
+<!--pages/packageA/about/deviceConMode.wxml-->
+<text>pages/packageA/about/deviceConMode.wxml</text>

+ 66 - 0
pages/packageA/about/deviceConnect0.js

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

+ 2 - 0
pages/packageA/about/deviceConnect0.wxml

@@ -0,0 +1,2 @@
+<!--pages/packageA/about/deviceConnect0.wxml-->
+<text>pages/packageA/about/deviceConnect0.wxml</text>

+ 66 - 0
pages/packageA/about/deviceConnect1.js

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

+ 2 - 0
pages/packageA/about/deviceConnect1.wxml

@@ -0,0 +1,2 @@
+<!--pages/packageA/about/deviceConnect1.wxml-->
+<text>pages/packageA/about/deviceConnect1.wxml</text>

+ 66 - 0
pages/packageA/about/deviceConnect2.js

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

+ 2 - 0
pages/packageA/about/deviceConnect2.wxml

@@ -0,0 +1,2 @@
+<!--pages/packageA/about/deviceConnect2.wxml-->
+<text>pages/packageA/about/deviceConnect2.wxml</text>

+ 66 - 0
pages/packageA/about/deviceConnect3.js

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

+ 2 - 0
pages/packageA/about/deviceConnect3.wxml

@@ -0,0 +1,2 @@
+<!--pages/packageA/about/deviceConnect3.wxml-->
+<text>pages/packageA/about/deviceConnect3.wxml</text>

+ 66 - 0
pages/packageB/aboutInfo/aboutInfo.js

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

+ 2 - 0
pages/packageB/aboutInfo/aboutInfo.wxml

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

+ 66 - 0
pages/packageB/channelDetail/channelDetail.js

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

+ 2 - 0
pages/packageB/channelDetail/channelDetail.wxml

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

+ 66 - 0
pages/packageB/deviceDetail/deviceDetail.js

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

+ 2 - 0
pages/packageB/deviceDetail/deviceDetail.wxml

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

+ 66 - 0
pages/packageB/deviceWake/deviceWake.js

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

+ 2 - 0
pages/packageB/deviceWake/deviceWake.wxml

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

+ 66 - 0
pages/packageB/wakeList/wakeList.js

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

+ 2 - 0
pages/packageB/wakeList/wakeList.wxml

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

+ 66 - 0
pages/packageC/download/download.js

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

+ 2 - 0
pages/packageC/download/download.wxml

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

+ 66 - 0
pages/packageC/ota/ota.js

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

+ 2 - 0
pages/packageC/ota/ota.wxml

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

+ 66 - 0
pages/packageC/repeat/repeat.js

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

+ 2 - 0
pages/packageC/repeat/repeat.wxml

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

+ 66 - 0
pages/packageC/setWifi/setWifi.js

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

+ 2 - 0
pages/packageC/setWifi/setWifi.wxml

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