Переглянути джерело

Merge branch 'master' of git.beswell.com:duanchangpeng/flyLong

duanchangpeng 4 роки тому
батько
коміт
2dddd8c0ca
38 змінених файлів з 3301 додано та 3 видалено
  1. 22 2
      pc/src/api/Navs.js
  2. 69 0
      pc/src/assets/css/bg.css
  3. BIN
      pc/src/assets/img/birth/birthCrow.png
  4. BIN
      pc/src/assets/img/birth/birthText.png
  5. 1 0
      pc/src/components/Navside.vue
  6. 243 0
      pc/src/components/levelIcon.vue
  7. 35 0
      pc/src/components/power.vue
  8. 21 0
      pc/src/libs/rem.js
  9. 16 0
      pc/src/router/index.js
  10. BIN
      pc/src/static/img/bg/bg2_1.png
  11. BIN
      pc/src/static/img/bg/bg2_2.png
  12. BIN
      pc/src/static/img/bg/bg2_3.png
  13. BIN
      pc/src/static/img/bg/bg2_4.png
  14. BIN
      pc/src/static/img/bg/bg_1.png
  15. BIN
      pc/src/static/img/bg/bg_2.png
  16. BIN
      pc/src/static/img/bg/bg_3.png
  17. BIN
      pc/src/static/img/bg/bg_4.png
  18. 9 0
      pc/src/static/img/ck.svg
  19. BIN
      pc/src/static/img/heart.png
  20. 3 0
      pc/src/static/img/heart.svg
  21. BIN
      pc/src/static/img/people/flyhead.png
  22. 6 0
      pc/src/static/img/power/power_full.svg
  23. 6 0
      pc/src/static/img/power/power_half.svg
  24. 6 0
      pc/src/static/img/power/power_low.svg
  25. 6 0
      pc/src/static/img/power/power_none.svg
  26. 4 0
      pc/src/static/img/privateSign.svg
  27. 3 0
      pc/src/static/img/s1.svg
  28. 14 0
      pc/src/static/img/s2.svg
  29. 6 0
      pc/src/static/img/t1.svg
  30. 10 0
      pc/src/static/img/t2.svg
  31. 10 0
      pc/src/static/img/t3.svg
  32. 6 0
      pc/src/static/img/t4.svg
  33. 10 0
      pc/src/static/img/t5.svg
  34. 10 0
      pc/src/static/img/t6.svg
  35. 0 1
      pc/src/views/cost.vue
  36. 664 0
      pc/src/views/demoDevice.vue
  37. 4 0
      pc/src/views/heartLog.vue
  38. 2117 0
      pc/src/views/online.vue

+ 22 - 2
pc/src/api/Navs.js

@@ -28,8 +28,19 @@ let navs = [
         "show": 3,
         "grouplist": "2,5",
         "icon": "el-icon-user-solid",
-    },{
+    }
+    , {
         "clmid": "3",
+        "clmcode": "region",
+        "clmname": "在线上课",
+        "clmurl": "/online",
+        "prname": "",
+        "show": 3,//2
+        "grouplist": "2,5",
+        "icon": "el-icon-video-camera",
+    },
+    {
+        "clmid": "13",
         "clmcode": "lesson",
         "clmname": "课目管理",
         "clmurl": "/lesson",
@@ -180,6 +191,15 @@ let navs = [
         "show": 2,
         "grouplist": "2,5",
         "icon": "el-icon-s-claim",
+    }, {
+        "clmid": "15",
+        "clmcode": "demoDevice",
+        "clmname": "演示设备",
+        "clmurl": "/demoDevice",
+        "prname": "",
+        "show": 2,
+        "grouplist": "2,5",
+        "icon": "el-icon-video-camera",
     }, {
         "clmid": "22",
         "clmcode": "setting",
@@ -219,7 +239,7 @@ let navs = [
         "grouplist": "2,5",
         "icon": "el-icon-user-solid",
     },
-  {
+    {
         "clmid": "3",
         "clmcode": "lesson",
         "clmname": "课目管理",

+ 69 - 0
pc/src/assets/css/bg.css

@@ -0,0 +1,69 @@
+.bgStyle1 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg_1.png");
+    background-size: 100%  100%;
+    background-repeat: no-repeat;
+}
+
+.bgStyle2 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg_2.png");
+    background-size: 100%  100%;
+    background-repeat: no-repeat;
+}
+
+.bgStyle3 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg_3.png");
+    background-size: 100%  100%;
+    background-repeat: no-repeat;
+}
+
+.bgStyle4 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg_4.png");
+    background-size: 100%  100%;
+    background-repeat: no-repeat;
+}
+
+
+/*bg2*/
+.bg2Style1 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg2_1.png");
+    background-size: 100%  100%;
+    background-repeat: no-repeat;
+}
+
+.bg2Style2 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg2_2.png");
+    background-size: 100%  100%;
+    background-repeat: no-repeat;
+}
+
+.bg2Style3 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg2_3.png");
+    background-size: 100%  100%;
+    background-repeat: no-repeat;
+}
+
+.bg2Style4 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg2_4.png");
+    background-size: 100%  100%;
+    background-repeat: no-repeat;
+}
+
+ul, li {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+}
+
+s, em, i {
+    font-style: normal;
+    text-decoration: none;
+}
+

BIN
pc/src/assets/img/birth/birthCrow.png


BIN
pc/src/assets/img/birth/birthText.png


+ 1 - 0
pc/src/components/Navside.vue

@@ -286,6 +286,7 @@
         border-radius: 250px;
         font-style: normal;
         margin-top: 8px;
+        font-size: 16px;
     }
 
     /deep/ .el-menu {

+ 243 - 0
pc/src/components/levelIcon.vue

@@ -0,0 +1,243 @@
+<template>
+    <div  :class="[{'levelIconTV':true},{'levelIconTest':true},{'levelIcon':true}]">
+        <ul>
+            <li>
+          <span class="cube">
+             <div>
+                  0%-<br>
+            39%
+             </div>
+          </span>
+                <em>激活放松</em>
+            </li>
+            <li>
+          <span class="cube">
+             <div>
+             40%-<br>54%  </div>
+          </span>
+                <em>动态热身</em>
+            </li>
+            <li>
+          <span class="cube">
+             <div>
+             55%-<br>69%  </div>
+          </span>
+                <em>脂肪燃烧</em>
+            </li>
+            <li>
+          <span class="cube">
+             <div>
+             70%-<br>79%  </div>
+          </span>
+                <em>糖分消耗</em>
+            </li>
+            <li>
+          <span class="cube">
+             <div>
+             80%-<br>89%  </div>
+          </span>
+                <em>心肺训练</em>
+            </li>
+            <li>
+          <span class="cube">
+             <div>
+             ≥90%  </div>
+          </span>
+                <em>峰值锻炼</em>
+            </li>
+        </ul>
+    </div>
+</template>
+
+<style scoped>
+    ul,li {
+        list-style: none;
+        margin: 0;
+        padding: 0;
+    }
+    .levelIcon {
+      width: 100%;
+      overflow: hidden;
+      display: block;
+      margin: 0 auto;
+      height: 5rem;
+    }
+    .levelIconTest {
+
+    }
+    .levelIconTV {
+      /*position: absolute;*/
+      /*bottom: 0.1rem;*/
+      /*padding-bottom: 5px;*/
+    }
+
+    .levelIcon ul {
+        width: 96%;
+        height: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0;
+        margin-left: 2%;
+    }
+
+    .levelIcon li {
+        width: 14.666666666667%;
+        height: 100%;
+        float: left;
+        padding-left: 2.4%;
+    }
+
+    .levelIcon li:nth-child(1) {
+        padding-left: 0;
+    }
+
+    .levelIcon li span {
+        width: 5rem;
+        height: 4rem;
+        overflow: hidden;
+        float: left;
+        background: url("../static/img/t1.svg");
+        background-repeat: no-repeat;
+        background-size: 100% 100%;
+        background-position: top center;
+        font-family: vista;
+        font-weight: normal;
+        font-size: 1.2rem;
+        letter-spacing: -0.05em;
+        text-align: center;
+        color: #fff;
+        line-height: 0.4rem;
+    }
+
+    .levelIcon li span div {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-top: 17%;
+    }
+
+    .levelIcon li:nth-child(2) span {
+        background: url("../static/img/t2.svg");
+        background-size: 100% 100%;
+        background-position: top center;
+    }
+
+    .levelIcon li:nth-child(3) span {
+        background: url("../static/img/t3.svg");
+        background-size: 100% 100%;
+        background-position: top center;
+    }
+
+    .levelIcon li:nth-child(4) span {
+        background: url("../static/img/t4.svg");
+        background-size: 100% 100%;
+        background-position: top center;
+    }
+
+    .levelIcon li:nth-child(5) span {
+        background: url("../static/img/t5.svg");
+        background-size: 100% 100%;
+        background-position: top center;
+    }
+
+    .levelIcon li:nth-child(6) span {
+        background: url("../static/img/t6.svg");
+        background-size: 100% 100%;
+        background-position: top center;
+    }
+
+    .levelIcon li:nth-child(6) span div {
+        margin-top: 13%;
+    }
+
+    .levelIcon li em {
+        float: right;
+        width: 4rem;
+        height: 42px;
+        border-radius: 21px;
+        background: rgba(2, 143, 225, 0.16);
+        border: 1px solid #028fe1;
+        box-shadow: 0px 0px 5px #028fe1;
+        font-family: vista;
+        font-weight: normal;
+        font-size: 24px;
+        text-align: center;
+        color: #fff;
+        font-style: normal;
+        line-height: 42px;
+        margin-top: 15%;
+        margin-left: 1%;
+    }
+
+    .levelIcon li:nth-child(2) em {
+        background: rgba(109, 38, 250, 0.16);
+        border: 1px solid #6d26fa;
+        box-shadow: 0px 0px 5px #6d26fa;
+    }
+
+    .levelIcon li:nth-child(3) em {
+        background: rgba(10, 177, 5, 0.16);
+        border: 1px solid #0ab105;
+        box-shadow: 0px 0px 5px #0ab105;
+
+    }
+
+    .levelIcon li:nth-child(4) em {
+        background: rgba(186, 204, 1, 0.16);
+        border: 1px solid #DFB200 ;
+        box-shadow: 0px 0px 5px #DFB200 ;
+    }
+
+    .levelIcon li:nth-child(5) em {
+        background: rgba(234, 136, 19, 0.16);
+        border: 1px solid #ea8813;
+        box-shadow: 0px 0px 5px #ea8813;
+    }
+
+    .levelIcon li:nth-child(6) em {
+        background: rgba(209, 17, 34, 0.16);
+        border: 1px solid #d11122;
+        box-shadow: 0px 0px 5px #d11122;
+    }
+
+    .levelIcon {
+        height: 70px;
+    }
+
+    .levelIcon li span {
+        width: 70px;
+        height: 70px;
+        font-size: 0.2rem;
+    }
+
+    .levelIcon li span div {
+        font-size: 16px;
+        padding-top: 0.19rem;
+        line-height: 22px;
+    }
+
+    .levelIcon ul {
+        width: 98%;
+    }
+
+    .levelIcon li em {
+        width: 45%;
+        height: 30px;
+        line-height: 30px;
+        font-size: 0.2rem;
+        margin-top: 11%;
+        margin-left: 3%;
+        float: left;
+    }
+    /*pc part */
+    .levelIcon {
+        padding-top: 10px;
+        padding-bottom: 10px;
+        background: #666;
+    }
+    .levelIcon li span div {
+        padding-top: 15px;
+    }
+    /*pc part */
+</style>

+ 35 - 0
pc/src/components/power.vue

@@ -0,0 +1,35 @@
+<template>
+    <div class="powerContainer" v-if="parseInt(curPower) > 0">
+        <img src="../static/img/power/power_full.svg" alt="" v-if="parseInt(curPower) >= 81">
+        <img src="../static/img/power/power_half.svg" alt="" v-if="parseInt(curPower) >= 41 && parseInt(curPower) < 81">
+        <img src="../static/img/power/power_low.svg" alt=""  v-if="parseInt(curPower) >= 21 && parseInt(curPower) < 40">
+        <img src="../static/img/power/power_none.svg" alt="" v-if="parseInt(curPower) <= 20">
+    </div>
+</template>
+
+<script>
+    export default {
+        props: ['curPower'],
+    }
+</script>
+
+<style scoped>
+    .powerContainer {
+        float: right!important;
+        color: #fff;
+        font-size: 0.23rem;
+        width: 0.55rem!important;
+        overflow: hidden;
+    }
+    .powerContainer img {
+        width: 0.33rem;
+        line-height: 0.3rem;
+    }
+    .powerContainer span {
+        display: inline-block;
+        line-height: 0.2rem;
+    }
+    .powerContainer em {
+        font-size: 0.15rem;
+    }
+</style>

+ 21 - 0
pc/src/libs/rem.js

@@ -0,0 +1,21 @@
+// 设置 rem 函数
+function setRem() {
+
+    // 320 默认大小16px; 320px = 20rem ;每个元素px基础上/16
+    let htmlWidth = document.documentElement.clientWidth || document.body.clientWidth;
+
+    console.log('htmlWidth:' + htmlWidth);
+
+    //得到html的Dom元素
+    let htmlDom = document.getElementsByTagName('html')[0];
+    //设置根元素字体大小
+    htmlDom.style.fontSize = htmlWidth / 20 + 'px';
+}
+
+// 初始化
+setRem();
+// 改变窗口大小时重新设置 rem
+window.onresize = function () {
+    setRem()
+};
+

+ 16 - 0
pc/src/router/index.js

@@ -93,6 +93,14 @@ const routes = [
                     title: "操作日志",
                     clmid: "14",
                 }
+            }, {
+                path: '/demoDevice',
+                name: 'demoDevice',
+                component: () => import('@/views/demoDevice.vue'),
+                meta: {
+                    title: "演示设备",
+                    clmid: "15",
+                }
             }, {
                 path: '/shopManage',
                 name: 'ShopManage',
@@ -285,6 +293,14 @@ const routes = [
                     title: "跨店会员",
                     clmid: "11",
                 }
+            },{
+                path: '/online',
+                name: 'online',
+                component: () => import('@/views/online.vue'),
+                meta: {
+                    title: "在线上课",
+                    clmid: "3",
+                }
             },{
                 path: '/versionControlMefisto',
                 name: 'versionControlMefisto',

BIN
pc/src/static/img/bg/bg2_1.png


BIN
pc/src/static/img/bg/bg2_2.png


BIN
pc/src/static/img/bg/bg2_3.png


BIN
pc/src/static/img/bg/bg2_4.png


BIN
pc/src/static/img/bg/bg_1.png


BIN
pc/src/static/img/bg/bg_2.png


BIN
pc/src/static/img/bg/bg_3.png


BIN
pc/src/static/img/bg/bg_4.png


+ 9 - 0
pc/src/static/img/ck.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="305" height="305" viewBox="0 0 305 305">
+  <g id="组_83" data-name="组 83" transform="translate(-4212 -943)">
+    <g id="椭圆_17" data-name="椭圆 17" transform="translate(4212 943)" fill="none" stroke="#fff" stroke-width="22">
+      <circle cx="152.5" cy="152.5" r="152.5" stroke="none"/>
+      <circle cx="152.5" cy="152.5" r="141.5" fill="none"/>
+    </g>
+    <text id="CK" transform="translate(4360 1151)" fill="#fff" font-size="149" font-family="Arial-BoldMT, Arial" font-weight="700"><tspan x="-107.603" y="0">CK</tspan></text>
+  </g>
+</svg>

BIN
pc/src/static/img/heart.png


+ 3 - 0
pc/src/static/img/heart.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="302.916" height="272.861" viewBox="0 0 302.916 272.861">
+  <path id="路径_64" data-name="路径 64" d="M295.7,155.954A86.33,86.33,0,0,0,173.631,34.4a82.615,82.615,0,0,0-8.029,9.324,82.616,82.616,0,0,0-8.029-9.41A86.33,86.33,0,0,0,35.5,155.954L165,285.449Z" transform="translate(-13.979 -12.589)" fill="#fff"/>
+</svg>

BIN
pc/src/static/img/people/flyhead.png


+ 6 - 0
pc/src/static/img/power/power_full.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="27" height="18" viewBox="0 0 27 18">
+  <g id="电量" transform="translate(-554 -108)">
+    <path id="路径_15" data-name="路径 15" d="M4.571,7.571V20.429h18V7.571ZM3.286,5H23.857a1.286,1.286,0,0,1,1.286,1.286V21.714A1.286,1.286,0,0,1,23.857,23H3.286A1.286,1.286,0,0,1,2,21.714V6.286A1.286,1.286,0,0,1,3.286,5Zm23.143,5.143H29v7.714H26.429Z" transform="translate(552 103)" fill="#fff"/>
+    <rect id="矩形_118" data-name="矩形 118" width="15" height="10" transform="translate(558 112)" fill="#fff"/>
+  </g>
+</svg>

+ 6 - 0
pc/src/static/img/power/power_half.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="27" height="18" viewBox="0 0 27 18">
+  <g id="电量" transform="translate(-554 -108)">
+    <path id="路径_15" data-name="路径 15" d="M4.571,7.571V20.429h18V7.571ZM3.286,5H23.857a1.286,1.286,0,0,1,1.286,1.286V21.714A1.286,1.286,0,0,1,23.857,23H3.286A1.286,1.286,0,0,1,2,21.714V6.286A1.286,1.286,0,0,1,3.286,5Zm23.143,5.143H29v7.714H26.429Z" transform="translate(552 103)" fill="#fff"/>
+    <rect id="矩形_118" data-name="矩形 118" width="12" height="10" transform="translate(558 112)" fill="#fff"/>
+  </g>
+</svg>

+ 6 - 0
pc/src/static/img/power/power_low.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="27" height="18" viewBox="0 0 27 18">
+  <g id="电量" transform="translate(-554 -108)">
+    <path id="路径_15" data-name="路径 15" d="M4.571,7.571V20.429h18V7.571ZM3.286,5H23.857a1.286,1.286,0,0,1,1.286,1.286V21.714A1.286,1.286,0,0,1,23.857,23H3.286A1.286,1.286,0,0,1,2,21.714V6.286A1.286,1.286,0,0,1,3.286,5Zm23.143,5.143H29v7.714H26.429Z" transform="translate(552 103)" fill="#fff"/>
+    <rect id="矩形_118" data-name="矩形 118" width="7.5" height="10" transform="translate(558 112)" fill="#fff"/>
+  </g>
+</svg>

+ 6 - 0
pc/src/static/img/power/power_none.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="27" height="18" viewBox="0 0 27 18">
+  <g id="电量" transform="translate(-554 -108)">
+    <path id="路径_15" data-name="路径 15" d="M4.571,7.571V20.429h18V7.571ZM3.286,5H23.857a1.286,1.286,0,0,1,1.286,1.286V21.714A1.286,1.286,0,0,1,23.857,23H3.286A1.286,1.286,0,0,1,2,21.714V6.286A1.286,1.286,0,0,1,3.286,5Zm23.143,5.143H29v7.714H26.429Z" transform="translate(552 103)" fill="#fff"/>
+    <rect id="矩形_118" data-name="矩形 118" width="3" height="10" transform="translate(558 112)" fill="#ff0017"/>
+  </g>
+</svg>

Різницю між файлами не показано, бо вона завелика
+ 4 - 0
pc/src/static/img/privateSign.svg


+ 3 - 0
pc/src/static/img/s1.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="240.328" height="297.042" viewBox="0 0 240.328 297.042">
+  <path id="路径_63" data-name="路径 63" d="M3648.438,820.634s11.715,34.329,2.852,66.417-41.154,59.9-41.154,59.9-2.546-1.834-6.519-7.742-9.372-15.891-9.372-15.891-38.709,60.3-20.781,122.239,66.009,72.121,66.009,72.121-7.844-27.606,0-55.415,31.375-55.823,31.375-55.823,3.423,21.729,10.594,37.079a81,81,0,0,0,17.521,24.448s11.959,8.525,17.114,19.558,4.074,24.448,4.074,24.448,66.824,1.222,85.568-81.9S3758.046,911.5,3758.046,911.5s-1.731,10.8-6.927,19.151-13.854,14.261-13.854,14.261,7.334-43.6-19.558-78.641S3648.438,820.634,3648.438,820.634Z" transform="translate(-3568.725 -820.634)" fill="#fff"/>
+</svg>

+ 14 - 0
pc/src/static/img/s2.svg

@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="306.328" height="363.042" viewBox="0 0 306.328 363.042">
+  <defs>
+    <filter id="路径_62" x="0" y="0" width="306.328" height="363.042" filterUnits="userSpaceOnUse">
+      <feOffset input="SourceAlpha"/>
+      <feGaussianBlur stdDeviation="11" result="blur"/>
+      <feFlood flood-color="#fff"/>
+      <feComposite operator="in" in2="blur"/>
+      <feComposite in="SourceGraphic"/>
+    </filter>
+  </defs>
+  <g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#路径_62)">
+    <path id="路径_62-2" data-name="路径 62" d="M3648.438,820.634s11.715,34.329,2.852,66.417-41.154,59.9-41.154,59.9-2.546-1.834-6.519-7.742-9.372-15.891-9.372-15.891-38.709,60.3-20.781,122.239,66.009,72.121,66.009,72.121-7.844-27.606,0-55.415,31.375-55.823,31.375-55.823,3.423,21.729,10.594,37.079a81,81,0,0,0,17.521,24.448s11.959,8.525,17.114,19.558,4.074,24.448,4.074,24.448,66.824,1.222,85.568-81.9S3758.046,911.5,3758.046,911.5s-1.731,10.8-6.927,19.151-13.854,14.261-13.854,14.261,7.334-43.6-19.558-78.641S3648.438,820.634,3648.438,820.634Z" transform="translate(-3535.72 -787.63)" fill="red"/>
+  </g>
+</svg>

+ 6 - 0
pc/src/static/img/t1.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="139" height="139.002" viewBox="0 0 139 139.002">
+  <g id="_01" data-name="01" transform="translate(-282.002 -157.997)">
+    <path id="路径_38" data-name="路径 38" d="M-15669,1794a68.561,68.561,0,0,1-26.857-5.422,68.776,68.776,0,0,1-21.933-14.787,68.781,68.781,0,0,1-14.788-21.932A68.569,68.569,0,0,1-15738,1725a68.569,68.569,0,0,1,5.422-26.858,68.781,68.781,0,0,1,14.788-21.932,68.776,68.776,0,0,1,21.933-14.787A68.561,68.561,0,0,1-15669,1656a68.564,68.564,0,0,1,26.857,5.422,68.776,68.776,0,0,1,21.933,14.787,68.762,68.762,0,0,1,14.787,21.932A68.553,68.553,0,0,1-15600,1725a68.552,68.552,0,0,1-5.423,26.858,68.762,68.762,0,0,1-14.787,21.932,68.776,68.776,0,0,1-21.933,14.787A68.564,68.564,0,0,1-15669,1794Zm0-118.284a49.341,49.341,0,0,0-49.285,49.285,49.341,49.341,0,0,0,49.285,49.285,49.341,49.341,0,0,0,49.284-49.285A49.341,49.341,0,0,0-15669,1675.714Z" transform="translate(16020.004 -1496.999)" fill="#028fe1" opacity="0.36"/>
+    <path id="路径_36" data-name="路径 36" d="M-15601.073,1779.552h0l-12.873-15.342a49.932,49.932,0,0,0,17.783-38.21,50.054,50.054,0,0,0-50-50v-20a69.5,69.5,0,0,1,27.245,5.5,69.746,69.746,0,0,1,22.253,15,69.881,69.881,0,0,1,15,22.249,69.6,69.6,0,0,1,5.5,27.249,69.558,69.558,0,0,1-5.5,27.245,69.855,69.855,0,0,1-15,22.253c-1.417,1.416-2.9,2.78-4.411,4.055Z" transform="translate(15997.16 -1498.001)" fill="#028fe1"/>
+  </g>
+</svg>

+ 10 - 0
pc/src/static/img/t2.svg

@@ -0,0 +1,10 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="142.371" height="142.932" viewBox="0 0 142.371 142.932">
+  <g id="指标" transform="translate(2.548 -871.209)">
+    <g id="yuan" transform="translate(-166.044 27.55)">
+      <g id="_02" data-name="02" transform="translate(-116.926 687.244)">
+        <path id="路径_38" data-name="路径 38" d="M-15669,1794a68.561,68.561,0,0,1-26.857-5.422,68.776,68.776,0,0,1-21.933-14.787,68.781,68.781,0,0,1-14.788-21.932A68.569,68.569,0,0,1-15738,1725a68.569,68.569,0,0,1,5.422-26.858,68.781,68.781,0,0,1,14.788-21.932,68.776,68.776,0,0,1,21.933-14.787A68.561,68.561,0,0,1-15669,1656a68.564,68.564,0,0,1,26.857,5.422,68.776,68.776,0,0,1,21.933,14.787,68.762,68.762,0,0,1,14.787,21.932A68.553,68.553,0,0,1-15600,1725a68.552,68.552,0,0,1-5.423,26.858,68.762,68.762,0,0,1-14.787,21.932,68.776,68.776,0,0,1-21.933,14.787A68.564,68.564,0,0,1-15669,1794Zm0-118.284a49.341,49.341,0,0,0-49.285,49.285,49.341,49.341,0,0,0,49.285,49.285,49.341,49.341,0,0,0,49.284-49.285A49.341,49.341,0,0,0-15669,1675.714Z" transform="translate(16020.004 -1496.999)" fill="#6d26fa" opacity="0.36"/>
+        <path id="路径_51" data-name="路径 51" d="M-15981,1794.172l4.846-19.424a49.97,49.97,0,0,0,11.138,1.251,50.057,50.057,0,0,0,50-50,49.66,49.66,0,0,0-14.663-35.334,49.645,49.645,0,0,0-35.338-14.663v-20a69.54,69.54,0,0,1,27.248,5.5,69.782,69.782,0,0,1,22.252,15,69.82,69.82,0,0,1,15,22.251,69.6,69.6,0,0,1,5.5,27.245,69.619,69.619,0,0,1-5.5,27.249,69.777,69.777,0,0,1-15,22.251,69.8,69.8,0,0,1-22.252,15,69.54,69.54,0,0,1-27.248,5.5A70.181,70.181,0,0,1-15981,1794.172Z" transform="translate(16316.017 -1498)" fill="#6d26fa"/>
+      </g>
+    </g>
+  </g>
+</svg>

+ 10 - 0
pc/src/static/img/t3.svg

@@ -0,0 +1,10 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="142.372" height="142.931" viewBox="0 0 142.372 142.931">
+  <g id="指标" transform="translate(3.47 -871.21)">
+    <g id="yuan" transform="translate(-166.044 27.55)">
+      <g id="_03" data-name="03" transform="translate(-117.825 687.244)">
+        <path id="路径_38" data-name="路径 38" d="M-15669,1794a68.561,68.561,0,0,1-26.857-5.422,68.776,68.776,0,0,1-21.933-14.787,68.781,68.781,0,0,1-14.788-21.932A68.569,68.569,0,0,1-15738,1725a68.569,68.569,0,0,1,5.422-26.858,68.781,68.781,0,0,1,14.788-21.932,68.776,68.776,0,0,1,21.933-14.787A68.561,68.561,0,0,1-15669,1656a68.564,68.564,0,0,1,26.857,5.422,68.776,68.776,0,0,1,21.933,14.787,68.762,68.762,0,0,1,14.787,21.932A68.553,68.553,0,0,1-15600,1725a68.552,68.552,0,0,1-5.423,26.858,68.762,68.762,0,0,1-14.787,21.932,68.776,68.776,0,0,1-21.933,14.787A68.564,68.564,0,0,1-15669,1794Zm0-118.284a49.341,49.341,0,0,0-49.285,49.285,49.341,49.341,0,0,0,49.285,49.285,49.341,49.341,0,0,0,49.284-49.285A49.341,49.341,0,0,0-15669,1675.714Z" transform="translate(16020.004 -1496.999)" fill="#0ab105" opacity="0.36"/>
+        <path id="路径_44" data-name="路径 44" d="M-16067.585,1790.5a69.732,69.732,0,0,1-22.254-15,69.824,69.824,0,0,1-15-22.25c-.056-.125-.108-.255-.161-.38l18.56-7.5a50.079,50.079,0,0,0,46.1,30.633,50.056,50.056,0,0,0,50-50,50.06,50.06,0,0,0-50-50v-20a69.566,69.566,0,0,1,27.246,5.5,69.788,69.788,0,0,1,22.254,15,69.805,69.805,0,0,1,15,22.25,69.57,69.57,0,0,1,5.5,27.25,69.55,69.55,0,0,1-5.5,27.246,69.805,69.805,0,0,1-15,22.25,69.732,69.732,0,0,1-22.254,15,69.566,69.566,0,0,1-27.246,5.5A69.559,69.559,0,0,1-16067.585,1790.5Z" transform="translate(16391.34 -1497.998)" fill="#0ab105"/>
+      </g>
+    </g>
+  </g>
+</svg>

+ 6 - 0
pc/src/static/img/t4.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="140" height="139.999" viewBox="0 0 140 139.999">
+  <g id="_04" data-name="04" transform="translate(-282.002 -158.002)">
+    <path id="路径_38" data-name="路径 38" d="M-15669,1794a68.561,68.561,0,0,1-26.857-5.422,68.776,68.776,0,0,1-21.933-14.787,68.781,68.781,0,0,1-14.788-21.932A68.569,68.569,0,0,1-15738,1725a68.569,68.569,0,0,1,5.422-26.858,68.781,68.781,0,0,1,14.788-21.932,68.776,68.776,0,0,1,21.933-14.787A68.561,68.561,0,0,1-15669,1656a68.564,68.564,0,0,1,26.857,5.422,68.776,68.776,0,0,1,21.933,14.787,68.762,68.762,0,0,1,14.787,21.932A68.553,68.553,0,0,1-15600,1725a68.552,68.552,0,0,1-5.423,26.858,68.762,68.762,0,0,1-14.787,21.932,68.776,68.776,0,0,1-21.933,14.787A68.564,68.564,0,0,1-15669,1794Zm0-118.284a49.341,49.341,0,0,0-49.285,49.285,49.341,49.341,0,0,0,49.285,49.285,49.341,49.341,0,0,0,49.284-49.285A49.341,49.341,0,0,0-15669,1675.714Z" transform="translate(16020.004 -1496.999)" fill="rgba(223,178,0,0.16)"/>
+    <path id="路径_54" data-name="路径 54" d="M-16231,1796h0a69.562,69.562,0,0,1-27.242-5.5,69.742,69.742,0,0,1-22.256-15.006,69.844,69.844,0,0,1-15-22.247A69.589,69.589,0,0,1-16301,1726a70.121,70.121,0,0,1,1.968-16.577l19.421,4.844A49.958,49.958,0,0,0-16281,1726a50.057,50.057,0,0,0,50,50,50.053,50.053,0,0,0,50-50,50.061,50.061,0,0,0-50-50v-20a69.564,69.564,0,0,1,27.246,5.5,69.846,69.846,0,0,1,22.255,15,69.724,69.724,0,0,1,15,22.251,69.584,69.584,0,0,1,5.5,27.25,69.593,69.593,0,0,1-5.5,27.246,69.753,69.753,0,0,1-15,22.247,69.792,69.792,0,0,1-22.255,15.006A69.562,69.562,0,0,1-16231,1796h0Z" transform="translate(16583.004 -1497.998)" fill="#dfb200"/>
+  </g>
+</svg>

+ 10 - 0
pc/src/static/img/t5.svg

@@ -0,0 +1,10 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="143.4" height="142.933" viewBox="0 0 143.4 142.933">
+  <g id="指标" transform="translate(4.5 -871.212)">
+    <g id="yuan" transform="translate(-166.044 27.55)">
+      <g id="_05" data-name="05" transform="translate(-117.823 687.244)">
+        <path id="路径_38" data-name="路径 38" d="M-15669,1794a68.561,68.561,0,0,1-26.857-5.422,68.776,68.776,0,0,1-21.933-14.787,68.781,68.781,0,0,1-14.788-21.932A68.569,68.569,0,0,1-15738,1725a68.569,68.569,0,0,1,5.422-26.858,68.781,68.781,0,0,1,14.788-21.932,68.776,68.776,0,0,1,21.933-14.787A68.561,68.561,0,0,1-15669,1656a68.564,68.564,0,0,1,26.857,5.422,68.776,68.776,0,0,1,21.933,14.787,68.762,68.762,0,0,1,14.787,21.932A68.553,68.553,0,0,1-15600,1725a68.552,68.552,0,0,1-5.423,26.858,68.762,68.762,0,0,1-14.787,21.932,68.776,68.776,0,0,1-21.933,14.787A68.564,68.564,0,0,1-15669,1794Zm0-118.284a49.341,49.341,0,0,0-49.285,49.285,49.341,49.341,0,0,0,49.285,49.285,49.341,49.341,0,0,0,49.284-49.285A49.341,49.341,0,0,0-15669,1675.714Z" transform="translate(16020.004 -1496.999)" fill="#ea8813" opacity="0.36"/>
+        <path id="路径_52" data-name="路径 52" d="M-16462.246,1790.5a69.769,69.769,0,0,1-22.256-15,69.9,69.9,0,0,1-15-22.252A69.545,69.545,0,0,1-16505,1726a69.559,69.559,0,0,1,5.5-27.247,69.9,69.9,0,0,1,15-22.252q2.133-2.131,4.412-4.055l12.873,15.343A49.92,49.92,0,0,0-16485,1726a50.056,50.056,0,0,0,50,50v0a50.057,50.057,0,0,0,50-50,50.06,50.06,0,0,0-50-50v-20a69.566,69.566,0,0,1,27.248,5.5,69.8,69.8,0,0,1,22.256,15,69.84,69.84,0,0,1,15,22.248A69.627,69.627,0,0,1-16365,1726a69.607,69.607,0,0,1-5.5,27.247,69.84,69.84,0,0,1-15,22.248,69.744,69.744,0,0,1-22.256,15A69.566,69.566,0,0,1-16435,1796v0A69.561,69.561,0,0,1-16462.246,1790.5Z" transform="translate(16786 -1497.998)" fill="#ea8813"/>
+      </g>
+    </g>
+  </g>
+</svg>

+ 10 - 0
pc/src/static/img/t6.svg

@@ -0,0 +1,10 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="143.4" height="142.936" viewBox="0 0 143.4 142.936">
+  <g id="指标" transform="translate(4.496 -871.212)">
+    <g id="yuan" transform="translate(-166.044 27.55)">
+      <g id="_06" data-name="06" transform="translate(-117.82 687.246)">
+        <path id="路径_38" data-name="路径 38" d="M-15669,1794a68.561,68.561,0,0,1-26.857-5.422,68.776,68.776,0,0,1-21.933-14.787,68.781,68.781,0,0,1-14.788-21.932A68.569,68.569,0,0,1-15738,1725a68.569,68.569,0,0,1,5.422-26.858,68.781,68.781,0,0,1,14.788-21.932,68.776,68.776,0,0,1,21.933-14.787A68.561,68.561,0,0,1-15669,1656a68.564,68.564,0,0,1,26.857,5.422,68.776,68.776,0,0,1,21.933,14.787,68.762,68.762,0,0,1,14.787,21.932A68.553,68.553,0,0,1-15600,1725a68.552,68.552,0,0,1-5.423,26.858,68.762,68.762,0,0,1-14.787,21.932,68.776,68.776,0,0,1-21.933,14.787A68.564,68.564,0,0,1-15669,1794Zm0-118.284a49.341,49.341,0,0,0-49.285,49.285,49.341,49.341,0,0,0,49.285,49.285,49.341,49.341,0,0,0,49.284-49.285A49.341,49.341,0,0,0-15669,1675.714Z" transform="translate(16019.97 -1497.016)" fill="#d11122" opacity="0.36"/>
+        <path id="路径_50" data-name="路径 50" d="M-16673.248,1790.5a69.692,69.692,0,0,1-22.252-15,69.9,69.9,0,0,1-15-22.251A69.65,69.65,0,0,1-16716,1726a69.676,69.676,0,0,1,5.5-27.252,69.9,69.9,0,0,1,15-22.251,69.747,69.747,0,0,1,22.252-15q2.763-1.171,5.588-2.089l6.184,19.038A50.086,50.086,0,0,0-16696,1726a50.052,50.052,0,0,0,50,49.994,50.056,50.056,0,0,0,50-50,50.062,50.062,0,0,0-50-50v-20a69.558,69.558,0,0,1,27.246,5.5,69.747,69.747,0,0,1,22.252,15,69.775,69.775,0,0,1,15,22.251A69.566,69.566,0,0,1-16576,1726a69.551,69.551,0,0,1-5.5,27.248,69.822,69.822,0,0,1-15,22.251,69.759,69.759,0,0,1-22.252,15A69.554,69.554,0,0,1-16646,1796v0A69.582,69.582,0,0,1-16673.248,1790.5Z" transform="translate(16997 -1497.998)" fill="#d11122"/>
+      </g>
+    </g>
+  </g>
+</svg>

+ 0 - 1
pc/src/views/cost.vue

@@ -177,7 +177,6 @@
             label="消费明细"
             min-width="110dp"
             align="center"
-            sortable
         >
           <template slot-scope="scope">
             <span v-if="scope.row.AcrossConsume  == 1" style="color:red;">

+ 664 - 0
pc/src/views/demoDevice.vue

@@ -0,0 +1,664 @@
+<template>
+  <div class="context">
+    <el-page-header @back="goBack" content="演示设备"></el-page-header>
+    <div class="panel">
+      <br>
+      <h5> {{regionName}}</h5>
+    </div>
+    <div class="change">
+      <el-button @click="addMember" type="primary">新增演示设备</el-button>
+      <el-button @click="editList">编辑演示设备</el-button>
+      <!--<el-button @click="delList" type="danger">删除区域设备</el-button>-->
+    </div>
+    <div class="table">
+      <el-table
+          :data="tableData"
+          border
+          is-horizontal-resize
+          :default-sort="{prop: 'date', order: 'descending'}"
+          element-loading-background="rgba(0, 0, 0, 0.8)"
+          class=""
+          @selection-change="handleSelectionChange" @current-change="clickChange"
+
+      >
+        <el-table-column label="选择" width="55">
+          <template slot-scope="scope">
+            <el-radio v-model="tableRadio" :label="scope.row"><i></i></el-radio>
+          </template>
+        </el-table-column>
+        <el-table-column
+            type="index"
+            label="序号"
+            align="center"
+            width="50">
+        </el-table-column>
+        <el-table-column
+            prop="EqSn"
+            label="序列号"
+        >
+        </el-table-column>
+        <el-table-column
+            prop="Version"
+            label="版本"
+            sortable
+        >
+        </el-table-column>
+        <el-table-column
+            prop="EquipType"
+            label="类型"
+            sortable
+        >
+          <template slot-scope="scope">
+            <span v-if="scope.row.EquipType == 1">TVBox</span>
+            <span v-if="scope.row.EquipType == 2">BLEHub</span>
+            <span v-if="scope.row.EquipType == 3">演示设备</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+            prop="Status"
+            label="状态"
+            sortable
+        >
+          <!--1:启用  8:暂停  9:删除-->
+          <template slot-scope="scope">
+            <span v-if="scope.row.Status == 1" style="color: yellowgreen">启用</span>
+            <span v-if="scope.row.Status == 8" style="color: yellow">暂停</span>
+            <span v-if="scope.row.Status == 9" style="color: red">删除</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+            prop="address"
+            label="操作">
+          <template slot-scope="scope">
+            <!--<el-button type="success" @click="run(scope.row)" v-if="scope.row.Status == 8">开启</el-button>-->
+            <!--<el-button type="danger" @click="pause(scope.row)" v-if="scope.row.Status == 1">暂停</el-button>-->
+            <span v-if="scope.row.EquipType != 3" style="color: red">
+                        <el-button type="danger"  size="mini"
+                                   @click="pauseRowDel(scope.row)">
+                            删除
+                        </el-button>
+                      </span>
+          </template>
+        </el-table-column>
+      </el-table>
+      <br>
+      <el-pagination
+          background
+          :total="pageination.total"
+          :page-size="pageination.pageItem"
+          @current-change="pageChange"
+      ></el-pagination>
+    </div>
+    <el-dialog :title="dialogTitle" :visible.sync="dialogMemberVisible" width="650px">
+      <div class="dialogContent">
+        <div class="">
+          <el-form ref="form" :model="form" label-width="160px">
+            <el-form-item label="设备序列号">
+              <el-input v-model="form.eqSn "></el-input>
+            </el-form-item>
+            <el-form-item label="版本号">
+              <el-input v-model="form.version"></el-input>
+            </el-form-item>
+            <el-form-item label="设备类型">
+              <el-select v-model="form.equipType " placeholder="请选择">
+                <el-option
+                    v-for="item in options"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-form>
+        </div>
+      </div>
+      <div class="dialogFooter">
+        <el-button type="primary" size="small" v-if="form.btnType == 0" @click="confirmMember">确定</el-button>
+        <el-button type="primary" size="small" v-if="form.btnType == 1" @click="confirmEditMember">确定
+        </el-button>
+        <el-button size="small" @click="dialogMemberVisible = false">取消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Global from '../Global.js'
+import {
+  testTable,
+  ShopManagerStatusEdit,
+  QueryVenueEquip,
+  AddShopVenueEquip,
+  EditShopVenueEquip,
+  ShopVenueEquipEditStatus
+} from "../api/getApiRes";
+
+let qs = require('qs');
+export default {
+  data() {
+    return {
+      regionName: '',
+      dialogVisible: false,
+      dialogMemberVisible: false,
+      dialogTitle: '新增区域设备',
+      // panel 配置项目
+      multipleSelection: [],
+      tableRadio: [],
+      pageination: {
+        pageItem: 100,
+        pageoptions: pageOptions(),
+        total: 100,
+        pageIndex: 1,
+      },
+      form: {
+        eqId: '',
+        eqSn: '',
+        name: '',
+        version: '',
+        userCode: '',
+        shopId: '',
+        btnType: 0,
+        equipType: 1,
+      },
+      options: [
+        {value: 1, label: 'TVBox'},
+        {value: 2, label: 'BLEHub'},
+        {value: 3, label: '演示设备'},
+      ],
+      shops: [],
+      tableData: [],
+      serachBtnStatus: false,
+    }
+  },
+  mounted() {
+    this.regionName = this.$route.query.name;
+    this.getTableQuery();
+  },
+  methods: {
+    goBack() {
+      this.$router.push({
+        path: '/region', query: {}
+      });
+    },
+    // 删除
+    pauseRowDel(row) {
+      let that = this;
+      let param = {
+        key: localStorage.ServiceKey,
+        shopId: localStorage.ServiceId,
+        svId: row.SvId,
+        eqId: row.EqId,
+        status: 9,//1:启用 8:暂停 9:删除
+      };
+      let postdata = qs.stringify(param);
+      this.$confirm('此操作将永久删除该区域设备, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        ShopVenueEquipEditStatus(postdata).then(res => {
+          let json = res;
+          if (json.Code == 0) {
+            that.$message({
+              showClose: true,
+              message: '选中的区域设备已删除!',
+              type: 'success'
+            });
+            // 重载列表
+            that.getTableQuery();
+          } else {
+            that.$message.error(json.Memo + ' 错误码:' + json.Code);
+          }
+        });
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        });
+      });
+    },
+    clearForm() {
+      // clear
+      this.form.name = '';
+      this.form.userCode = '';
+      this.form.shopId = '';
+      this.form.eqSn = '';
+      this.form.version = '';
+      this.form.equipType = 1;
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+    // 新增区域设备
+    addMember() {
+      this.clearForm();
+      this.dialogMemberVisible = true;
+      this.btnType = 0;
+      this.dialogTitle = '新增区域设备'
+    },
+    clickChange(item) {
+      this.tableRadio = item
+    },
+    // 删除
+    delList() {
+      let that = this;
+      if (this.tableRadio.length == 0) {
+        this.$message.error("请先选中一条记录");
+        return false
+      }
+      let userId = this.tableRadio.Id;
+
+      let param = {
+        key: localStorage.ServiceKey,
+        shopId: localStorage.ServiceId,
+        svId: this.$route.query.svId,
+        eqId: this.tableRadio.EqId,
+        status: 9,//1:启用 8:暂停 9:删除
+      };
+      let postdata = qs.stringify(param);
+
+      this.$confirm('此操作将永久删除该区域设备, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        ShopVenueEquipEditStatus(postdata).then(res => {
+          let json = res;
+          if (json.Code == 0) {
+            that.$message({
+              showClose: true,
+              message: '选中的区域设备已删除!',
+              type: 'success'
+            });
+            // 重载列表
+            that.getTableQuery();
+          } else {
+            that.$message.error(json.Memo + ' 错误码:' + json.Code);
+          }
+        });
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        });
+      });
+    },
+    // 编辑
+    editList() {
+      let that = this;
+      this.clearForm();
+      if (this.tableRadio.length == 0) {
+        this.$message.error("请先选中一条记录");
+        return false
+      }
+      let row = this.tableRadio;
+      this.form.shopid = row.ShopId;
+      this.form.userId = row.Id;
+      this.form.name = row.Name;
+      this.form.userCode = row.Usercode;
+      this.form.password = '';
+      this.form.phone = row.Phone;
+      this.form.eqId = row.EqId;
+      this.form.eqSn = row.EqSn.trim();
+      this.form.version = row.Version.trim();
+      this.form.equipType = row.EquipType;
+      this.form.memo = row.Memo;
+      this.form.adminType = row.AdminType;
+      this.dialogVisible = true;
+      this.dialogTitle = '编辑区域设备';
+      this.form.btnType = 1;
+      this.dialogMemberVisible = true
+    },
+    // 确认提交新增区域设备
+    confirmMember() {
+      let that = this;
+      // checkNum
+      if (!that.form.eqSn) {
+        this.$message.error('错了哦,设备序列号不能为空');
+        return false
+      }
+      if (that.form.version.length > 10) {
+        this.$message.error('错了哦,版本号字符不能超过10位');
+        return false
+      }
+
+      let param = {
+        key: localStorage.ServiceKey,
+        shopId: localStorage.ServiceId,
+        svId: this.$route.query.svId,
+        eqSn: this.form.eqSn,
+        version: this.form.version,
+        equipType: this.form.equipType,
+      };
+      let postdata = qs.stringify(param);
+      AddShopVenueEquip(postdata).then(res => {
+        let json = res;
+        if (json.Code == 0) {
+          // 关闭弹窗
+          that.dialogMemberVisible = false;
+          // 重载列表
+          that.getTableQuery();
+          that.$message({
+            showClose: true,
+            message: '所属设备添加成功!',
+            type: 'success'
+          });
+        } else {
+          that.$message.error(json.Memo + ' 错误码:' + json.Code);
+        }
+      })
+    },
+    confirmEditMember() {
+      let that = this;
+      console.log(that.form.version.length);
+      // checkNum
+      if (!that.form.eqSn) {
+        this.$message.error('错了哦,设备序列号不能为空');
+        return false
+      }
+      if (that.form.version.length > 10) {
+        this.$message.error('错了哦,版本号字符不能超过10位');
+        return false
+      }
+      let param = {
+        key: localStorage.ServiceKey,
+        shopId: localStorage.ServiceId,
+        svId: this.$route.query.svId,
+        eqId: this.form.eqId,
+        eqSn: this.form.eqSn,
+        version: this.form.version,
+        equipType: this.form.equipType,
+      };
+      let postdata = qs.stringify(param);
+      EditShopVenueEquip(postdata).then(res => {
+        let json = res;
+        if (json.Code == 0) {
+          // 关闭弹窗
+          that.dialogMemberVisible = false;
+          // 重载列表
+          that.getTableQuery();
+          that.$message({
+            showClose: true,
+            message: '区域设备信息编辑成功!',
+            type: 'success'
+          });
+        } else {
+          that.$message.error(json.Memo + ' 错误码:' + json.Code);
+        }
+      })
+    },
+    // 查询按钮
+    query() {
+      // 按钮倒计时
+      let that = this;
+      that.serachBtnStatus = true;
+      let totalTime = 2;
+      let clock = window.setInterval(() => {
+        totalTime--;
+        if (totalTime < 0) {
+          totalTime = 2;
+          that.serachBtnStatus = false;
+        }
+      }, 1000);
+
+      this.getTableQuery();
+      this.$message.success('查询完毕');
+    },
+    // 页面数据查询
+    getTableQuery() {
+      let that = this;
+      that.loading = true;
+      let param = {
+        key: localStorage.ServiceKey,
+        shopId: localStorage.ServiceId,
+        svId: this.$route.query.svId,
+      };
+      let postdata = qs.stringify(param);
+      QueryVenueEquip(postdata).then(res => {
+        let json = res;
+        if (json.Code == 0) {
+          that.loading = false;
+          if (json.Rs) {
+            that.allTableData = json.Rs;
+            that.recordsTotal = json.Rs.length;
+          } else {
+            that.allTableData = [];
+            that.recordsTotal = 0;
+          }
+          // 设置分页数据
+          that.setPaginations();
+        } else {
+          that.$message.error(json.Memo + ' 错误码:' + json.Code);
+        }
+      })
+    },
+    // 设置分页数据
+    setPaginations() {
+      // 分页属性
+      let that = this;
+      that.pageination.total = that.recordsTotal;
+      // 默认分页
+      that.tableData = that.allTableData.filter((item, index) => {
+        return index < that.pageination.pageItem;
+      });
+    },
+    // 每页显示数量
+    handleSizeChange() {
+      let that = this;
+      that.tableData = that.allTableData.filter((item, index) => {
+        return index < that.pageination.pageItem;
+      });
+      that.draw = that.pageination.pageItem;
+      that.getTableQuery();
+    },
+    // 翻页
+    pageChange(pageIndex) {
+      let that = this;
+      // 获取当前页
+      let index = that.pageination.pageItem * (pageIndex - 1);
+      // 数据总数
+      let nums = that.pageination.pageItem * pageIndex;
+      // 容器
+      let tables = [];
+      for (var i = index; i < nums; i++) {
+        if (that.allTableData[i]) {
+          tables.push(that.allTableData[i])
+        }
+        this.tableData = tables;
+      }
+      that.start = index * that.draw;
+      // that.getTableQuery();
+    },
+    // 自动排序
+    sortChange(params) {
+      console.log(params)
+    },
+    // 过滤时间
+    filterFmtDate(value, row, column) {
+      let that = this;
+      return nonTfmtDate(column, 11);
+    },
+    // 暂停
+    pause(row) {
+      let that = this;
+      console.log(row);
+      this.$confirm('是否暂停设备' + row.EqSn + '?', '暂停操作', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+
+        let param = {
+          key: localStorage.ServiceKey,
+          shopId: localStorage.ServiceId,
+          svId: this.$route.query.svId,
+          eqId: row.EqId,
+          status: 8,//1:启用 8:暂停 9:删除
+        };
+
+        let postdata = qs.stringify(param);
+        ShopVenueEquipEditStatus(postdata).then(res => {
+          let json = res;
+          if (json.Code == 0) {
+            that.$message({
+              showClose: true,
+              message: row.EqSn + '暂停成功!',
+              type: 'success'
+            });
+            // table 重载
+            that.getTableQuery();
+          } else {
+            that.$message.error(json.Memo + ' 错误码:' + json.Code);
+          }
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消暂停'
+        });
+      });
+    },
+    // 开启
+    run(row) {
+      let that = this;
+      this.$confirm('是否开启设备' + row.EqSn + '?', '开启操作', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+
+        let param = {
+          key: localStorage.ServiceKey,
+          shopId: localStorage.ServiceId,
+          svId: this.$route.query.svId,
+          eqId: row.EqId,
+          status: 1,//1:启用 8:暂停 9:删除
+        };
+
+        let postdata = qs.stringify(param);
+        ShopVenueEquipEditStatus(postdata).then(res => {
+          let json = res;
+          if (json.Code == 0) {
+            that.$message({
+              showClose: true,
+              message: row.EqSn + '开启成功!',
+              type: 'success'
+            });
+            // table 重载
+            that.getTableQuery();
+          } else {
+            that.$message.error(json.Memo + ' 错误码:' + json.Code);
+          }
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消开启'
+        });
+      });
+    },
+  },
+  watch: {
+    $route(to) {
+      if (to.name == 'heartLog') {
+        this.regionName = this.$route.query.name;
+        this.getTableQuery();
+      }
+    },
+  },
+}
+</script>
+
+<style scoped>
+@import "../assets/css/panel.css";
+
+.context {
+  height: 770px;
+  overflow-y: scroll;
+
+  display: block;
+  margin: 0 auto;
+  background-color: #fff !important;
+  padding: 30px;
+  padding-bottom: 60px;
+}
+
+.panel-body {
+  padding: 20px;
+  background: #F0F2F5;
+}
+
+.change {
+  width: 100%;
+  overflow: hidden;
+  display: block;
+  margin: 0 auto;
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+
+.change button {
+  float: left;
+}
+
+.change button.pull-right {
+  float: right;
+}
+
+.dialogTitle {
+  width: 100%;
+  overflow: hidden;
+  display: block;
+  margin: 0 auto;
+  color: #000000;
+  font-size: 18px;
+  text-align: center;
+}
+
+.dialogTitle em {
+  float: none;
+  font-style: normal;
+  color: #3799FF;
+  margin: 0;
+}
+
+/deep/ .el-transfer-panel__item .el-checkbox__input {
+  left: 40px;
+}
+
+.dialogFooter {
+  width: 90%;
+  overflow: hidden;
+  display: block;
+  margin: 0 auto;
+  margin-top: 10px;
+}
+
+.dialogFooter button {
+  float: right;
+  margin-left: 10px;
+}
+
+/deep/ .el-date-editor .el-range__icon {
+  line-height: 22px;
+}
+
+.panel /deep/ .el-date-editor .el-range-separator {
+  line-height: 22px;
+}
+
+/deep/ .el-select {
+  width: 100%;
+}
+.panel h5 {
+  font-size: 24px;
+}
+
+/*ipad only*/
+@media only screen and (max-width: 1366px) {
+  .panel /deep/ .el-date-editor--daterange {
+    width: 100%;
+  }
+}
+
+</style>

+ 4 - 0
pc/src/views/heartLog.vue

@@ -51,6 +51,7 @@
                     <template slot-scope="scope">
                         <span v-if="scope.row.EquipType == 1">TVBox</span>
                         <span v-if="scope.row.EquipType == 2">BLEHub</span>
+                        <span v-if="scope.row.EquipType == 3">演示设备</span>
                     </template>
                 </el-table-column>
                 <el-table-column
@@ -71,10 +72,12 @@
                     <template slot-scope="scope">
                         <!--<el-button type="success" @click="run(scope.row)" v-if="scope.row.Status == 8">开启</el-button>-->
                         <!--<el-button type="danger" @click="pause(scope.row)" v-if="scope.row.Status == 1">暂停</el-button>-->
+                      <span v-if="scope.row.EquipType != 3" style="color: red">
                         <el-button type="danger"  size="mini"
                                    @click="pauseRowDel(scope.row)">
                             删除
                         </el-button>
+                      </span>
                     </template>
                 </el-table-column>
             </el-table>
@@ -160,6 +163,7 @@
                 options: [
                     {value: 1, label: 'TVBox'},
                     {value: 2, label: 'BLEHub'},
+                    {value: 3, label: '演示设备'},
                 ],
                 shops: [],
                 tableData: [],

+ 2117 - 0
pc/src/views/online.vue

@@ -0,0 +1,2117 @@
+<template>
+    <div class="context bgStyle1" id="online">
+        <div class="change">
+            <div class="basicInfo">
+                <em>课程名:{{classInfo.name}} </em>
+                <em>学员数:{{classInfo.len}} </em>
+                <em>(在线:{{classInfo.online}}人 离线:{{classInfo.offline}}人) </em>
+                <em>当前时间:{{classInfo.time}} </em>
+            </div>
+            <el-button @click="full_screen" v-if="!screen_full" icon="el-icon-full-screen" type="primary">全屏</el-button>
+            <el-button @click="cancle_screen" v-else icon="el-icon-full-screen" type="primary">缩小</el-button>
+            <el-button v-if="classState == 0" @click="" type="success">上课</el-button>
+            <el-button v-else @click="" type="danger">下课</el-button>
+            <el-button @click="" type="warning">排行版</el-button>
+            <!--<el-button @click="">隐藏信息 todo</el-button>-->
+        </div>
+        <div class="userList">
+
+            <ul>
+                <li v-for="(s,i) in students" :class="studentsClassName[i].name"  v-show="students" v-if="students.length > 0">
+                    <div class="centerLi">
+                        <div class="topLi">
+                            <div class="human">
+                                <span class="name">
+                                    <div class="nameLt">
+                                        <i class="el-icon-male" v-if="s.Sex == 1"></i>
+                                        <i class="el-icon-female" v-if="s.Sex == 2"></i>
+                                    </div>
+                                    <div class="nameMd">{{ s.Name }}</div>
+                                    <div class="namert" v-if="s.RealHr != 0">
+                                        <power :cur-power="s.PowerPercent"></power>
+                                    </div>
+                                </span>
+                                <div class="head">
+                                    <img :src="s.Head" alt="" v-if="s.Head">
+                                    <img src="../static/img/people/flyhead.png" alt="" v-if="!s.Head">
+
+                                    <!-- 生日快乐 -->
+                                    <div class="birth" v-if="s.IsBirthday == 1">
+                                        <img src="../assets/img/birth/birthCrow.png" class="birthCrow"/>
+                                        <img src="../assets/img/birth/birthText.png" class="birthText"/>
+                                    </div>
+                                    <!--私有心率带-->
+                                    <div class="isPrivate" v-if="s.IsPrivate == 1">
+                                        <i></i>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="cla">
+                                <em v-if="s.RealHr != 0">{{ s.ActivePercent |max100 }}</em>
+                                <em class="plus" v-if="s.ActivePercent == 0 && s.RealHr == 0">
+                                    ---
+                                </em>
+                            </div>
+                            <div class="lcla">
+                                <span>%</span>
+                            </div>
+                            <!--fastJump-->
+                            <!--heartJump-->
+                            <div>
+                                <div class="lhj">
+                                    <div :class="[{'heartJump':true}]">
+                                        <span class="fastJump" v-if="s.RealHr != 0"
+                                              v-show="parseInt(s.ActivePercent) > 90">{{ s.RealHr }}</span>
+                                        <span class="normalJump" v-if="s.RealHr != 0"
+                                              v-show="parseInt(s.ActivePercent) <= 90 && parseInt(s.ActivePercent) > 30">
+                                            {{ s.RealHr }}</span>
+                                        <span class="slowJump" v-if="s.RealHr != 0"
+                                              v-show="parseInt(s.ActivePercent) <= 30">{{ s.RealHr }}</span>
+                                        <span class="plus" v-if="s.RealHr == 0">
+                                        ---
+                                    </span>
+                                    </div>
+                                </div>
+                                <div class="rhj">
+                                    <img src="../static/img/heart.svg" class=""/>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="bottomLi">
+                            <div class="btcla">
+                                <img src="../static/img/s1.svg"/>
+                                <span>{{ s.Cle |fmtInt }}</span>
+                            </div>
+                            <div class="btck">
+                                <img src="../static/img/s2.svg"/>
+                                <span>{{ s.PureCalorieNoVo2   |fmtInt }}</span>
+                            </div>
+                            <div class="step">
+                                <img src="../static/img/ck.svg"/>
+                                <span>{{ s.Ck  |fmtFloat }}</span>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+            </ul>
+        </div>
+        <!--图示-->
+        <levelIcon></levelIcon>
+    </div>
+</template>
+
+<script>
+    import levelIcon from '@/components/levelIcon'
+    import power from '@/components/power'
+    export default {
+        data() {
+            return {
+                classInfo: {
+                    name: '',
+                    len: '',
+                    online: 0,
+                    offline: 0,
+                    time: '00:00:00',
+                },
+                classState: 0,//0 下课 1上课
+                students: [],
+                studentsClassName: [],
+                screen_full: false,
+            };
+        },
+        mounted() {
+            this.getList(6);
+
+        },
+        watch: {
+            $route(to) {
+                console.log(to);
+                if (to.name != 'online') {
+                    this.clearRem()
+                }else{
+                    this.setRem();
+                }
+            },
+        },
+        methods: {
+            clearRem(){
+                console.log(123);
+                //得到html的Dom元素
+                let htmlDom = document.getElementsByTagName('html')[0];
+                htmlDom.style.fontSize = '14px'
+            },
+            setRem(){
+                // 320 默认大小16px; 320px = 20rem ;每个元素px基础上/16
+                let htmlWidth = document.documentElement.clientWidth || document.body.clientWidth;
+                //得到html的Dom元素
+                let htmlDom = document.getElementsByTagName('html')[0];
+                //设置根元素字体大小
+                htmlDom.style.fontSize = htmlWidth / 20 + 'px';
+            },
+            // 全屏显示
+            full_screen() {
+                let that = this;
+                this.screen_full = true;
+                let elem = document.getElementById("online");
+                this.full_state = true;
+                if (elem.webkitRequestFullScreen) {
+                    elem.webkitRequestFullScreen();
+                    that.full_rule();
+                } else if (elem.mozRequestFullScreen) {
+                    elem.mozRequestFullScreen();
+                    that.full_rule();
+                } else if (elem.requestFullScreen) {
+                    elem.requestFullscreen();
+                    that.full_rule();
+                } else {
+                    this.screen_full = false;
+                    notice.notice_show("浏览器不支持全屏API或已被禁用", null, null, null, true, true);
+                }
+            },
+            // 取消全屏
+            cancle_screen() {
+                let that = this;
+                this.screen_full = false;
+                this.full_state = false;
+                var elem = document;
+                if (elem.webkitCancelFullScreen) {
+                    elem.webkitCancelFullScreen();
+                    that.cancle_full_rule();
+                } else if (elem.mozCancelFullScreen) {
+                    elem.mozCancelFullScreen();
+                    that.cancle_full_rule();
+                } else if (elem.cancelFullScreen) {
+                    elem.cancelFullScreen();
+                    that.cancle_full_rule();
+                } else if (elem.exitFullscreen) {
+                    elem.exitFullscreen();
+                    that.cancle_full_rule();
+                } else {
+                    this.screen_full = true;
+                    notice.notice_show("浏览器不支持全屏API或已被禁用", null, null, null, true, true);
+                }
+            },
+            getList(len) {
+                let rs = {};
+                for (var i = 0; i < len; i++) {
+                    rs = {
+                        Age: 13,
+                        AvgHr: 0,
+                        BeginTime: 1608188579,
+                        Ck: "99",
+                        Cle: "159",
+                        DuId: 119,
+                        EndTime: 0,
+                        GroupNo: 1,
+                        Head: "http://192.168.0.2/gc.png",
+                        Height: 160,
+                        HrId: 41,
+                        IsBirthday: 0,
+                        IsBreaking: 0,
+                        IsNewUser: 0,
+                        MaxHr: 80,
+                        PowerPercent: "80",
+                        Name: "西门吹雪",
+                        PkSucessnum: '1',//胜场数
+                        PkTotalnum: '1',//总场数
+                        PlanId: 60,
+                        PureCalorieNoVo2: "500",
+                        Sex: 1,
+                        Sn: "22735",
+                        StaticHr: 60,
+                        Steps: "1280",
+                        SvId: 20,
+                        UserId: 104,
+                        UserMd5: "55661a861f8fae20dd505b2b4575dc0e",
+                        Weight: 50,
+                        ActivePercent: 70,
+                        bmrMSjRmrcb: 66.00000000000001,
+                        FormatCk: "12",
+                        isAlive: true,
+                        isFinish: false,
+                        isOver: false,
+                        IsPrivate: 1,
+                        lastPushDataTime: 1608188947175,
+                        lastUpdateTime: 1608188945184,
+                        queuePushData: [],
+                        RealHr: "100",
+                        vo2Max: "123"
+                    };
+                    this.students.push(rs)
+                }
+                this.giveClassName( this.students);
+            },
+            // 给每一个数据加类名,一次遍历全部赋值
+            giveClassName(res) {
+                let that = this;
+                let numberClass = '';
+                let colorClass = '';
+                for (let i = 0; i < parseInt(res.length); i++) {
+                    switch (true) {
+                        case  parseInt(res.length) == 1:
+                            numberClass = 'max';
+                            break;
+                        case  parseInt(res.length) == 2:
+                            numberClass = 'two';
+                            break;
+                        case  parseInt(res.length) <= 4 && parseInt(res.length) > 2:
+                            numberClass = 'three';
+                            break;
+                        case  parseInt(res.length) <= 6 && parseInt(res.length) > 4:
+                            numberClass = 'six';
+                            break;
+                        case  parseInt(res.length) <= 9 && parseInt(res.length) > 6:
+                            numberClass = 'nine';
+                            break;
+                        case parseInt(res.length) <= 12 && parseInt(res.length) > 9:
+                            numberClass = 'ten';
+                            break;
+                        case parseInt(res.length) <= 15 && parseInt(res.length) > 12:
+                            numberClass = 'twelve';
+                            break;
+                        case parseInt(res.length) <= 20 && parseInt(res.length) > 15:
+                            numberClass = 'sixteen';
+                            break;
+                        case parseInt(res.length) <= 24 && parseInt(res.length) > 20:
+                            numberClass = 'twenty';
+                            break;
+                        case parseInt(res.length) <= 30 && parseInt(res.length) > 24:
+                            numberClass = 'twentyFour';
+                            break;
+                        case parseInt(res.length) >= 31:
+                            numberClass = 'twentyFour';
+                            break;
+                    }
+                    let per = parseInt(res[i].ActivePercent);
+                    switch (true) {
+                        case per >= 90:
+                            colorClass = 'red';
+                            break;
+                        case per <= 89 && per > 79:
+                            colorClass = 'brown';
+                            break;
+                        case per <= 79 && per > 69:
+                            colorClass = 'yellow';
+                            break;
+                        case per <= 69 && per > 54:
+                            colorClass = 'green';
+                            break;
+                        case per <= 54 && per > 39:
+                            colorClass = 'violet';
+                            break;
+                        case per <= 39:
+                            colorClass = 'blue';
+                            break
+                    }
+
+                    that.studentsClassName[i] = {
+                        name: numberClass + ' ' + colorClass,
+                    }
+                }
+            },
+        },
+        filters: {
+            fmtNum(val) {
+                if (val == 0) {
+                    return '--'
+                } else {
+                    if (parseInt(val) < 0) return 0;
+                    if (parseInt(val) > 0) return val
+                }
+            },
+            fmtFloat(val) {
+                if (val == 0) {
+                    return '0.0'
+                } else {
+                    return parseFloat(val).toFixed(1);
+                }
+            },
+            fmtInt(val) {
+                if (val == 0) {
+                    return '0'
+                } else {
+                    return parseInt(val);
+                }
+            },
+            max100(val) {
+                if (val <= 100) {
+                    return val
+                } else {
+                    return 100
+                }
+            }
+        },
+        components: {
+            levelIcon, power
+        }
+    }
+</script>
+
+<style scoped>
+    @import "../assets/css/bg.css";
+    .context {
+        border-radius: 12px;
+        height: 770px;
+        overflow-y: scroll;
+        display: block;
+        margin: 0 auto;
+        background-color: #fff !important;
+        padding: 30px;
+        padding-bottom: 30px;
+    }
+
+    .panel /deep/ h5 {
+        margin: 0;
+        text-align: left;
+        font-size: 18px;
+        font-weight: normal;
+        padding-bottom: 10px;
+        border-bottom: 1px solid #F0F2F5;
+        margin-bottom: 10px;
+    }
+
+    .change {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-top: 0px;
+        padding-bottom: 0px;
+    }
+
+    .el-button--primary {
+        margin-right: 10px;
+        margin-left: 10px;
+    }
+
+    .change button {
+        float: right;
+        margin-right: 10px;
+        cursor: pointer;
+    }
+
+    .basicInfo {
+        float: left;
+        font-size: 0.2rem;
+        line-height: 0.6rem;
+    }
+    .userList {
+        margin-top: 0.1rem;
+    }
+
+    em {
+        font-style: normal;
+    }
+
+    ul, li {
+        list-style: none;
+        margin: 0;
+        padding: 0;
+    }
+
+    ul {
+        /*position: absolute;*/
+        /*top: 190px;*/
+        /*left: 60px;*/
+        /*right: 0;*/
+        /*bottom: 0;*/
+        width: 100%;
+        /*height: 100%;*/
+        overflow: hidden;
+        overflow-y: scroll;
+        margin: 0 auto;
+        display: inline-flex;
+        /*align-content:center;*/
+        align-items: center;
+        justify-content: center;
+        flex-wrap: wrap;
+    }
+
+
+    .blue .centerLi {
+        background: #028FE1;
+    }
+
+    .violet .centerLi {
+        background: #6D26FA;
+    }
+
+    .green .centerLi {
+        background: #059F00;
+    }
+
+    .yellow .centerLi {
+        background: #DFB200;
+    }
+
+    .brown .centerLi {
+        background: #EA8813;
+    }
+
+    .red .centerLi {
+        background: #CF1122;
+    }
+
+
+    .slowJump {
+        animation: mymove 3s infinite;
+        -webkit-animation: mymove 3s infinite; /*Safari and Chrome*/
+        animation-direction: alternate; /*轮流反向播放动画。*/
+        animation-timing-function: ease-in-out; /*动画的速度曲线*/
+        /* Safari 和 Chrome */
+        -webkit-animation-direction: alternate; /*轮流反向播放动画。*/
+        -webkit-animation-timing-function: ease-in-out; /*动画的速度曲线*/
+    }
+
+    .normalJump {
+        animation: mymove 2s infinite;
+        -webkit-animation: mymove 2s infinite; /*Safari and Chrome*/
+        animation-direction: alternate; /*轮流反向播放动画。*/
+        animation-timing-function: ease-in-out; /*动画的速度曲线*/
+        /* Safari 和 Chrome */
+        -webkit-animation-direction: alternate; /*轮流反向播放动画。*/
+        -webkit-animation-timing-function: ease-in-out; /*动画的速度曲线*/
+    }
+
+    .fastJump {
+        animation: mymove 1s infinite;
+        -webkit-animation: mymove 1s infinite; /*Safari and Chrome*/
+        animation-direction: alternate; /*轮流反向播放动画。*/
+        animation-timing-function: ease-in-out; /*动画的速度曲线*/
+        /* Safari 和 Chrome */
+        -webkit-animation-direction: alternate; /*轮流反向播放动画。*/
+        -webkit-animation-timing-function: ease-in-out; /*动画的速度曲线*/
+    }
+
+    @keyframes mymove {
+        0% {
+            transform: scale(1); /*开始为原始大小*/
+        }
+        25% {
+            transform: scale(1.1); /*放大1.1倍*/
+        }
+        50% {
+            transform: scale(1);
+        }
+        75% {
+            transform: scale(1.1);
+        }
+
+    }
+
+    @-webkit-keyframes mymove /*Safari and Chrome*/
+    {
+        0% {
+            transform: scale(1); /*开始为原始大小*/
+        }
+        25% {
+            transform: scale(1.1); /*放大1.1倍*/
+        }
+        50% {
+            transform: scale(1);
+        }
+        75% {
+            transform: scale(1.1);
+        }
+    }
+
+    .userList li {
+        display: block;
+        z-index: 666;
+    }
+
+    .centerLi {
+        width: 99.8%;
+        overflow: hidden;
+        float: left;
+        color: #fff;
+
+    }
+
+    .human img {
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border: 2px solid #fff;
+        border-radius: 33rem;
+        /*box-shadow: 0px 0px 5px #fff;*/
+    }
+
+    s {
+        text-decoration: none;
+    }
+
+    em {
+        font-style: normal;
+    }
+
+    .cla {
+        position: relative;
+        float: left;
+        text-align: right;
+    }
+
+    .centerLi .human {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding: 0;
+    }
+
+    .human .name {
+        width: 100%;
+        display: block;
+        margin: 0 auto;
+        overflow: hidden;
+    }
+
+    .human .name div {
+        float: left;
+        width: 20%;
+        text-align: left;
+        text-indent: 0.1rem;
+    }
+
+    .human .name .nameMd {
+        width: 60%;
+        text-align: center;
+        text-indent: 0;
+    }
+
+    .lcla span {
+        position: relative;
+        float: left;
+    }
+
+    .cla em {
+        text-align: right;
+    }
+
+    .heartJump {
+        position: relative;
+    }
+
+    .lhj span {
+        position: relative;
+        text-align: right;
+        float: left;
+    }
+
+    .rhj {
+        float: right;
+    }
+
+    .rhj img {
+        position: relative;
+        float: right;
+    }
+
+    .bottomLi {
+        width: 96%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 0.3rem;
+        font-weight: normal !important;
+        color: #fff;
+        text-align: left;
+        line-height: 0.7rem;
+    }
+
+    .bottomLi img {
+        float: left;
+        margin-left: 10%;
+    }
+
+    .bottomLi .btcla {
+        width: 33.333%;
+        float: left;
+    }
+
+    .bottomLi .btck {
+        width: 33.333%;
+        float: left;
+    }
+
+    .bottomLi .step {
+        width: 33.333%;
+        float: right;
+    }
+
+    .bottomLi span {
+        float: left;
+        text-align: left;
+    }
+
+    .topLi {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        overflow: hidden;
+    }
+
+    /*max*/
+    .max {
+        width: 12rem;
+        height: 5.6rem;
+        display: block;
+        margin: 0 auto;
+        margin-top: 1rem;
+    }
+
+    .max .centerLi {
+        width: 90%;
+        height: 100%;
+    }
+
+
+    .max .human .name {
+        font-size: 0.5rem;
+        height: 1rem;
+        line-height: 1rem;
+    }
+
+    .max .human img {
+        width: 3rem;
+        height: 3rem;
+    }
+
+    .max .cla {
+        width: 3rem;
+        height: 2rem;
+        top: -2.4rem;
+        left: 0;
+        font-size: 0.55rem;
+    }
+
+    .max .lcla span {
+        font-size: 0.7rem;
+        top: -2.4rem;
+        float: left;
+        left: 0;
+    }
+
+    .max .cla em {
+        font-size: 1.5rem;
+        left: 1rem;
+    }
+
+    .max .lhj span {
+        width: 3rem;
+        height: 2rem;
+        top: -2.4rem;
+        left: 3.4rem;
+        font-size: 1.5rem;
+    }
+
+    .max .rhj img {
+        width: 0.5rem;
+        top: -2.3rem;
+        right: 0.3rem;
+    }
+
+    .max .longIcon {
+        position: absolute;
+        width: 1.96rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        bottom: 2rem;
+        right: 3.5rem;
+    }
+
+    .max .topLi {
+        height: 4.5rem;
+    }
+
+    .max .bottomLi {
+        font-size: 0.5rem;
+        text-align: center;
+    }
+
+    .max .bottomLi .btck {
+        /*text-indent: 1.6rem;*/
+    }
+
+    .max .bottomLi img {
+        width: 0.5rem;
+        height: 0.5rem;
+        margin-top: 0.1rem;
+    }
+
+    .max .bottomLi span {
+        line-height: 0.8rem;
+        text-indent: 0.2rem;
+    }
+
+    .max .bottomLi .btck {
+        width: 29%;
+        padding-left: 1%;
+    }
+
+    .max .bottomLi .step {
+        width: 24%;
+        padding-right: 2%;
+    }
+
+    .max .cla em.plus {
+        position: relative;
+        left: -0.5rem
+    }
+
+    .max .lhj span.plus {
+        position: relative;
+        left: 2.75rem
+    }
+
+    .max .bottomLi .btcla img {
+        width: 0.5rem;
+        height: 0.5rem;
+    }
+
+    .max .bottomLi .btcla span {
+        text-indent: 0.1rem;
+    }
+
+    .max .bottomLi .btck span {
+        text-indent: 0.1rem;
+    }
+
+    .max .bottomLi .btck img {
+        width: 0.6rem;
+        height: 0.6rem;
+        margin-top: 0.05rem;
+    }
+
+
+    /*two*/
+    .two {
+        width: 49%;
+        height: 5.33rem;
+        float: left;
+        overflow: hidden;
+        margin-top: 6%
+    }
+
+    .two .centerLi {
+        /*border: 1px solid #fff;*/
+    }
+
+    .two:nth-child(2) {
+        float: right;
+    }
+
+    .two .human .name {
+        width: 100%;
+        height: 1rem;
+        font-size: 0.5rem;
+        line-height: 1rem;
+    }
+
+    .two .human img {
+        width: 2.8rem;
+        height: 2.8rem;
+    }
+
+    .two .cla {
+        width: 2.9rem;
+        height: 2rem;
+        top: -2.4rem;
+        left: 0;
+        font-size: 0.5rem;
+    }
+
+    .two .lcla span {
+        font-size: 0.55rem;
+        top: -2.3rem;
+        float: left;
+        left: 0;
+    }
+
+    .two .cla em {
+        font-size: 1.3rem;
+        left: 1rem;
+    }
+
+    .two .lhj span {
+        width: 3rem;
+        height: 2rem;
+        top: -2.4rem;
+        left: 2.4rem;
+        font-size: 1.2rem;
+    }
+
+    .two .rhj img {
+        width: 0.45rem;
+        top: -2.2rem;
+        right: 0.3rem;
+    }
+
+    .two .topLi {
+        height: 4.2rem;
+    }
+
+    .two .bottomLi {
+        font-size: 0.4rem;
+        text-align: center;
+    }
+
+    .two .bottomLi img {
+        width: 0.5rem;
+        height: 0.5rem;
+        margin-top: 0.1rem;
+    }
+
+    .two .bottomLi span {
+        line-height: 0.8rem;
+        text-indent: 0.2rem;
+    }
+
+    .two .bottomLi .btck {
+        width: 29%;
+        padding-left: 0%;
+    }
+
+    .two .bottomLi .step {
+        width: 26%;
+        padding-right: 1%;
+    }
+
+    .two .cla em.plus {
+        position: relative;
+        left: -0.5rem
+    }
+
+    .two .lhj span.plus {
+        position: relative;
+        left: 2.2rem
+    }
+
+    .two .bottomLi .btck img {
+        width: 0.6rem;
+        height: 0.6rem;
+        margin-top: 0.05rem;
+    }
+
+    .two .bottomLi .btck span {
+        text-indent: 0.1rem;
+    }
+
+
+    /*three*/
+    .three {
+        width: 50%;
+        height: 4rem;
+        float: left;
+        overflow: hidden;
+        margin-bottom: 1%
+    }
+
+    .three .centerLi {
+        width: 96%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        /*border: 1px solid #fff;*/
+        float: none;
+    }
+
+    .three .human .name {
+        width: 100%;
+        height: 0.8rem;
+        font-size: 0.4rem;
+        line-height: 0.8rem;
+    }
+
+    .three .human img {
+        width: 2.1rem;
+        height: 2.1rem;
+        margin-top: 0.1rem;
+    }
+
+    .three .cla {
+        width: 2.9rem;
+        height: 2rem;
+        top: -1.8rem;
+        left: 0;
+        font-size: 0.4rem;
+    }
+
+    .three .lcla span {
+        font-size: 0.45rem;
+        top: -1.8rem;
+        float: left;
+        left: 0;
+    }
+
+    .three .cla em {
+        font-size: 1.2rem;
+        left: 1rem;
+    }
+
+    .three .lhj span {
+        width: 3rem;
+        height: 2rem;
+        top: -1.70rem;
+        left: 2.3rem;
+        font-size: 1.1rem;
+    }
+
+    .three .rhj img {
+        width: 0.4rem;
+        top: -1.7rem;
+        right: 0.4rem;
+    }
+
+    .three .topLi {
+        /*height: 3.26rem;*/
+        height: 3.18rem;
+    }
+
+    .three .bottomLi {
+        font-size: 0.4rem;
+        margin-top: 0rem;
+        text-align: center;
+    }
+
+
+    .three .bottomLi img {
+        width: 0.5rem;
+        height: 0.5rem;
+        margin-top: 0.1rem;
+    }
+
+    .three .bottomLi span {
+        line-height: 0.8rem;
+        text-indent: 0.2rem;
+    }
+
+    .three .bottomLi .btck {
+        width: 30%;
+        padding-left: 2%;
+    }
+
+    .three .bottomLi .step {
+        width: 25%;
+        padding-right: 2%;
+    }
+
+    .three .cla em.plus {
+        position: relative;
+        left: -0.5rem
+    }
+
+    .three .lhj span.plus {
+        position: relative;
+        left: 1.9rem
+    }
+
+    .three .bottomLi .btck img {
+        width: 0.6rem;
+        height: 0.6rem;
+        margin-top: 0.05rem;
+    }
+
+    .three .bottomLi .btck span {
+        text-indent: 0.1rem;
+    }
+
+    /*six*/
+    .six {
+        width: 33.3333%;
+        height: 3.6rem;
+        float: left;
+        overflow: hidden;
+        margin-bottom: 1%
+    }
+
+    .six .centerLi {
+        width: 98%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        /*border: 1px solid #fff;*/
+        float: none;
+    }
+
+    .six .human .name {
+        width: 100%;
+        height: 0.8rem;
+        font-size: 0.35rem;
+        line-height: 0.8rem;
+    }
+
+    .six .human img {
+        width: 1.6rem;
+        height: 1.6rem;
+        margin-top: 0.1rem;
+    }
+
+    .six .cla {
+        width: 2rem;
+        height: 2rem;
+        top: -1.3rem;
+        left: 0;
+        font-size: 0.3rem;
+    }
+
+    .six .lcla span {
+        font-size: 0.4rem;
+        top: -1.4rem;
+        float: left;
+        left: -0.05rem;
+    }
+
+    .six .cla em {
+        font-size: 0.9rem;
+        left: 1rem;
+    }
+
+    .six .lhj span {
+        width: 2rem;
+        height: 2rem;
+        top: -1.3rem;
+        left: 1.6rem;
+        font-size: 0.85rem;
+    }
+
+    .six .rhj img {
+        width: 0.3rem;
+        top: -1.3rem;
+        right: 0.2rem;
+    }
+
+    .six .topLi {
+        height: 2.6rem;
+    }
+
+    .six .bottomLi {
+        width: 98%;
+        font-size: 0.325rem;
+        margin-top: 0.3rem;
+        text-align: center;
+    }
+
+    .six .bottomLi img {
+        width: 0.4rem;
+        margin-top: 0.15rem;
+    }
+
+    .six .bottomLi .btcla img {
+        width: 0.3rem;
+        /*margin-top: 0.1rem;*/
+    }
+
+    .six .bottomLi .btck img {
+        width: 0.4rem;
+        margin-top: 0.1rem;
+    }
+
+    .six .bottomLi span {
+        line-height: 0.8rem;
+        text-indent: 0.1rem;
+    }
+
+    .six .bottomLi .btcla {
+        width: 30%;
+    }
+
+    .six .bottomLi .btck {
+        width: 33%;
+        padding-left: 3%;
+    }
+
+    .six .bottomLi .step {
+        width: 28%;
+        padding-right: 0%;
+    }
+
+    .six .cla em.plus {
+        position: relative;
+        left: -0.3rem
+    }
+
+    .six .lhj span.plus {
+        position: relative;
+        left: 1.3rem
+    }
+
+    .six .bottomLi .btck img {
+        width: 0.5rem;
+        height: 0.5rem;
+        margin-top: 0.12rem;
+    }
+
+
+    /*nine*/
+    .nine {
+        width: 33.3333%;
+        height: 2.7rem;
+        float: left;
+        overflow: hidden;
+        margin-bottom: 0.1rem
+    }
+
+    .nine .centerLi {
+        width: 98%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        /*border: 1px solid #fff;*/
+        float: none;
+    }
+
+    .nine .human .name {
+        width: 100%;
+        height: 0.6rem;
+        font-size: 0.3rem;
+        line-height: 0.6rem;
+    }
+
+    .nine .human img {
+        width: 1.2rem;
+        height: 1.2rem;
+        margin-top: 0.1rem;
+    }
+
+    .nine .cla {
+        width: 1.9rem;
+        height: 2rem;
+        top: -1.1rem;
+        left: 0;
+        font-size: 0.25rem;
+    }
+
+    .nine .lcla span {
+        font-size: 0.35rem;
+        top: -1.1rem;
+        float: left;
+        left: 0.05rem;
+    }
+
+    .nine .cla em {
+        font-size: 0.7rem;
+        left: 1rem;
+    }
+
+    .nine .lhj span {
+        width: 1.9rem;
+        height: 2rem;
+        top: -1.1rem;
+        left: 1.6rem;
+        font-size: 0.7rem;
+    }
+
+    .nine .rhj img {
+        width: 0.25rem;
+        top: -1.0rem;
+        right: 0.4rem;
+    }
+
+    .nine .topLi {
+        height: 2rem;
+    }
+
+    .nine .bottomLi {
+        width: 98%;
+        font-size: 0.3rem;
+        margin-top: 0.05rem;
+        text-align: center;
+    }
+
+
+    .nine .bottomLi img {
+        width: 0.35rem;
+        height: 0.35rem;
+        margin-top: 0.2rem;
+    }
+
+    .nine .bottomLi span {
+        line-height: 0.8rem;
+        text-indent: 0.1rem;
+    }
+
+    .nine .bottomLi .btcla {
+        width: 30%;
+    }
+
+    .nine .bottomLi .btck {
+        width: 32%;
+        padding-left: 5%;
+    }
+
+    .nine .bottomLi .step {
+        width: 28%;
+        padding-right: 0%;
+    }
+
+    .nine .cla em.plus {
+        position: relative;
+        left: -0.3rem
+    }
+
+    .nine .lhj span.plus {
+        position: relative;
+        left: 1.3rem
+    }
+
+    .nine .bottomLi .btck img {
+        width: 0.45rem;
+        height: 0.45rem;
+        margin-top: 0.15rem;
+    }
+
+    /*ten*/
+    .ten {
+        width: 25%;
+        height: 2.6rem;
+        float: left;
+        overflow: hidden;
+        margin-bottom: 0.2rem
+    }
+
+    .ten .centerLi {
+        width: 98%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        /*border: 1px solid #fff;*/
+        float: none;
+    }
+
+    .ten .human .name {
+        width: 100%;
+        height: 0.5rem;
+        font-size: 0.3rem;
+        line-height: 0.55rem;
+        margin-bottom: 0.1rem;
+    }
+
+    .ten .human img {
+        width: 1.1rem;
+        height: 1.1rem;
+        margin-top: 0.2rem;
+    }
+
+    .ten .cla {
+        width: 1.4rem;
+        height: 1.5rem;
+        top: -0.95rem;
+        left: 0;
+        font-size: 0.2rem;
+    }
+
+    .ten .lcla span {
+        font-size: 0.3rem;
+        top: -0.95rem;
+        float: left;
+        left: -0rem;
+    }
+
+    .ten .cla em {
+        font-size: 0.6rem;
+        left: 0.5rem;
+    }
+
+    .ten .lhj span {
+        width: 1.4rem;
+        height: 2.1rem;
+        top: -0.9rem;
+        left: 1.4rem;
+        font-size: 0.6rem;
+    }
+
+    .ten .rhj img {
+        width: 0.2rem;
+        top: -0.9rem;
+        right: 0.15rem;
+    }
+
+    .ten .topLi {
+        height: 1.85rem;
+    }
+
+    .ten .bottomLi {
+        width: 98%;
+        font-size: 0.25rem;
+        margin-top: 0.1rem;
+        text-align: center;
+    }
+
+    .ten .bottomLi img {
+        width: 0.3rem;
+        height: 0.3rem;
+        margin-top: 0.25rem;
+    }
+
+    .ten .bottomLi span {
+        line-height: 0.8rem;
+        text-indent: 0.1rem;
+    }
+
+    .ten .bottomLi .btcla {
+        width: 30%;
+    }
+
+    .ten .bottomLi .btck {
+        width: 32%;
+        padding-left: 3%;
+    }
+
+    .ten .bottomLi .step {
+        width: 29%;
+        padding-right: 0%;
+    }
+
+    .ten .cla em.plus {
+        position: relative;
+        left: -0.3rem
+    }
+
+    .ten .lhj span.plus {
+        position: relative;
+        left: 1.2rem;
+        line-height: 0.75rem;
+    }
+
+    .ten .btck img {
+        width: 0.4rem;
+        height: 0.4rem;
+        margin-top: 0.18rem;
+    }
+
+    /*twelve*/
+    .twelve {
+        width: 20%;
+        height: 2.4rem;
+        float: left;
+        overflow: hidden;
+        margin-bottom: 0.3rem
+    }
+
+    .twelve .centerLi {
+        width: 98%;
+        height: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        /*border: 1px solid #fff;*/
+        float: none;
+    }
+
+    .twelve .human .name {
+        width: 100%;
+        height: 0.5rem;
+        font-size: 0.25rem;
+        line-height: 0.7rem;
+        margin-bottom: 0.2rem;
+    }
+
+    .twelve .human img {
+        width: 0.9rem;
+        height: 0.9rem;
+    }
+
+    .twelve .cla {
+        width: 1.2rem;
+        height: 1.2rem;
+        top: -0.8rem;
+        left: -0.1rem;
+        font-size: 0.2rem;
+    }
+
+    .twelve .lcla span {
+        font-size: 0.25rem;
+        top: -0.8rem;
+        float: left;
+        left: -0.07rem;
+    }
+
+    .twelve .cla em {
+        font-size: 0.5rem;
+        left: 0.5rem;
+    }
+
+    .twelve .lhj span {
+        width: 1.2rem;
+        height: 1.2rem;
+        top: -0.8rem;
+        left: 0.9rem;
+        font-size: 0.5rem;
+    }
+
+    .twelve .rhj img {
+        width: 0.18rem;
+        top: -0.75rem;
+        right: 0.15rem;
+    }
+
+    .twelve .topLi {
+        height: 1.65rem;
+    }
+
+    .twelve .bottomLi {
+        width: 98%;
+        font-size: 0.225rem;
+        margin-top: 0.1rem;
+        text-align: center;
+    }
+
+    .twelve .bottomLi img {
+        width: 0.25rem;
+        height: 0.25rem;
+        margin-top: 0.25rem;
+    }
+
+    .twelve .bottomLi span {
+        line-height: 0.8rem;
+        text-indent: 0.1rem;
+    }
+
+    .twelve .bottomLi .btcla {
+        width: 30%;
+    }
+
+    .twelve .bottomLi .btck {
+        width: 32%;
+        padding-left: 2%;
+    }
+
+    .twelve .bottomLi .step {
+        width: 27%;
+        padding-right: 1%;
+    }
+
+    .twelve .cla em.plus {
+        position: relative;
+        left: -0.2rem
+    }
+
+    .twelve .lhj span.plus {
+        position: relative;
+        left: 0.8rem
+    }
+
+    .twelve .btck img {
+        width: 0.3rem;
+        height: 0.3rem;
+    }
+
+    .twelve .btck img {
+        width: 0.35rem;
+        height: 0.35rem;
+        margin-top: 0.22rem;
+    }
+
+
+    /*sixteen*/
+    .sixteen {
+        width: 20%;
+        height: 1.95rem;
+        float: left;
+        overflow: hidden;
+        margin-bottom: 0.1rem
+    }
+
+    .sixteen .centerLi {
+        width: 98%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        /*border: 1px solid #fff;*/
+        float: none;
+    }
+
+    .sixteen .human .name {
+        width: 100%;
+        height: 0.4rem;
+        font-size: 0.22rem;
+        line-height: 0.45rem;
+        margin-top: 0.1rem;
+        margin-bottom: 0.1rem;
+
+    }
+
+    .sixteen .human img {
+        width: 0.75rem;
+        height: 0.75rem;
+    }
+
+    .sixteen .cla {
+        width: 1.2rem;
+        height: 1.4rem;
+        top: -0.7rem;
+        left: 0;
+        font-size: 0.15rem;
+    }
+
+    .sixteen .lcla span {
+        font-size: 0.275rem;
+        top: -0.7rem;
+        float: left;
+        left: -0rem;
+    }
+
+    .sixteen .cla em {
+        font-size: 0.5rem;
+        left: 0.2rem;
+    }
+
+    .sixteen .lhj span {
+        width: 1rem;
+        height: 1.8rem;
+        top: -0.7rem;
+        left: 1rem;
+        font-size: 0.5rem;
+    }
+
+    .sixteen .rhj img {
+        width: 0.17rem;
+        top: -0.65rem;
+        right: 0.15rem;
+    }
+
+    .sixteen .topLi {
+        height: 1.4rem;
+    }
+
+    .sixteen .bottomLi {
+        width: 98%;
+        font-size: 0.2rem;
+        margin-top: -0.05rem;
+        text-align: center;
+    }
+
+    .sixteen .bottomLi img {
+        width: 0.25rem;
+        height: 0.25rem;
+        margin-top: 0.25rem;
+    }
+
+    .sixteen .bottomLi span {
+        line-height: 0.8rem;
+        text-indent: 0.1rem;
+    }
+
+    .sixteen .bottomLi .btcla {
+        width: 30%;
+    }
+
+    .sixteen .bottomLi .btck {
+        width: 32%;
+        padding-left: 3%;
+    }
+
+    .sixteen .bottomLi .step {
+        width: 27%;
+        padding-right: 2%;
+        /*text-align: center;*/
+    }
+
+    .sixteen .cla em.plus {
+        position: relative;
+        left: -0.2rem
+    }
+
+    .sixteen .lhj span.plus {
+        position: relative;
+        left: 0.9rem
+    }
+
+    .sixteen .btck img {
+        width: 0.3rem;
+        height: 0.3rem;
+    }
+
+
+    /*twenty*/
+    .twenty {
+        width: 16.66667%;
+        height: 1.85rem;
+        float: left;
+        overflow: hidden;
+        margin-bottom: 0.1rem
+    }
+
+    .twenty .centerLi {
+        width: 98%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        /*border: 1px solid #fff;*/
+        float: none;
+    }
+
+    .twenty .human .name {
+        width: 100%;
+        height: 0.4rem;
+        font-size: 0.22rem;
+        line-height: 0.5rem;
+        margin-bottom: 0.1rem;
+    }
+
+    .twenty .human img {
+        width: 0.75rem;
+        height: 0.75rem;
+        margin-top: 0.15rem;
+    }
+
+    .twenty .cla {
+        width: 0.95rem;
+        height: 1.4rem;
+        top: -0.69rem;
+        left: 0;
+        font-size: 0.15rem;
+    }
+
+    .twenty .lcla span {
+        font-size: 0.225rem;
+        top: -0.65rem;
+        float: left;
+        left: 0rem;
+    }
+
+    .twenty .cla em {
+        font-size: 0.4rem;
+        left: 0.2rem;
+    }
+
+    .twenty .lhj span {
+        width: 0.85rem;
+        height: 2rem;
+        top: -0.65rem;
+        left: 0.9rem;
+        font-size: 0.4rem;
+    }
+
+    .twenty .rhj img {
+        width: 0.15rem;
+        top: -0.6rem;
+        right: 0.1rem;
+    }
+
+    .twenty .topLi {
+        height: 1.35rem;
+    }
+
+    .twenty .bottomLi {
+        width: 98%;
+        font-size: 0.2rem;
+        margin-top: -0.1rem;
+        text-align: center;
+    }
+
+    .twenty .bottomLi img {
+        width: 0.2rem;
+        height: 0.2rem;
+        margin-top: 0.275rem;
+    }
+
+    .twenty .bottomLi span {
+        line-height: 0.8rem;
+        text-indent: 0.05rem;
+    }
+
+    .twenty .bottomLi .btcla {
+        width: 30%;
+    }
+
+    .twenty .bottomLi .btck {
+        width: 32%;
+        padding-left: 3%;
+    }
+
+    .twenty .bottomLi .step {
+        width: 28%;
+        padding-right: 2%;
+    }
+
+    .twenty .cla em.plus {
+        position: relative;
+        left: -0.2rem
+    }
+
+    .twenty .lhj span.plus {
+        position: relative;
+        left: 0.8rem
+    }
+
+
+    /*twentyFour*/
+    .twentyFour {
+        width: 16.6667%;
+        height: 1.6rem;
+        float: left;
+        overflow: hidden;
+        margin-bottom: 0.1rem
+    }
+
+    .twentyFour .centerLi {
+        width: 96%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        /*border: 1px solid #fff;*/
+        /*border: 0.03rem solid rgba(255,255,255,0.1);*/
+        /*box-shadow:inset 0 0 6px rgba(0,0,0,0.4);*/
+        float: none;
+    }
+
+    .twentyFour .human .name {
+        width: 100%;
+        height: 0.4rem;
+        font-size: 0.2rem;
+        line-height: 0.4rem;
+    }
+
+    .twentyFour .human img {
+        width: 0.7rem;
+        height: 0.7rem;
+        margin-top: 0.05rem;
+    }
+
+    .twentyFour .cla {
+        width: 0.9rem;
+        height: 1.4rem;
+        top: -0.6rem;
+        left: 0;
+        font-size: 0.15rem;
+    }
+
+    .twentyFour .lcla span {
+        font-size: 0.2rem;
+        top: -0.65rem;
+        float: left;
+        left: -0rem;
+    }
+
+    .twentyFour .cla em {
+        font-size: 0.4rem;
+        left: 0.2rem;
+    }
+
+    .twentyFour .lhj span {
+        width: 0.75rem;
+        height: 2rem;
+        top: -0.57rem;
+        left: 1rem;
+        font-size: 0.4rem;
+    }
+
+    .twentyFour .rhj img {
+        width: 0.15rem;
+        top: -0.6rem;
+        right: 0.15rem;
+    }
+
+    .twentyFour .topLi {
+        height: 1.19rem;
+    }
+
+    .twentyFour .bottomLi {
+        width: 98%;
+        font-size: 0.17rem;
+        margin-top: 0rem;
+        text-align: center;
+    }
+
+    .twentyFour .bottomLi img {
+        width: 0.2rem;
+        height: 0.2rem;
+        margin-top: 0.15rem;
+    }
+
+    .twentyFour .bottomLi span {
+        line-height: 0.55rem;
+        text-indent: 0.05rem;
+    }
+
+    .twentyFour .bottomLi .btcla {
+        width: 30%;
+    }
+
+    .twentyFour .bottomLi .btck {
+        width: 32%;
+        padding-left: 2%;
+    }
+
+    .twentyFour .bottomLi .step {
+        width: 28%;
+        padding-right: 0%;
+    }
+
+    .twentyFour .cla em.plus {
+        position: relative;
+        left: -0.2rem
+    }
+
+    .twentyFour .lhj span.plus {
+        position: relative;
+        left: 0.8rem;
+        line-height: 0.45rem;
+    }
+
+    .twentyFour .btck img {
+        width: 0.25rem;
+        height: 0.25rem;
+        margin-top: 0.12rem;
+    }
+
+    .twentyFour .bottomLi .step img {
+        margin-top: 0.16rem;
+    }
+
+    .birth {
+        position: relative;
+        top: -3.3rem;
+        width: 40%;
+        height: 1px;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .birth img.birthCrow {
+        position: relative;
+        top: -0.1rem;
+        width: 1.2rem;
+        height: 0.7rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border: none;
+    }
+
+    .birth img.birthText {
+        position: relative;
+        top: 1.8rem;
+        width: 1.8rem;
+        height: 0.8rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border: none;
+    }
+
+    .two .birth img.birthCrow {
+        top: 0.1rem;
+    }
+
+    .three .birth img.birthCrow {
+        top: 0.8rem;
+    }
+
+    .six .birth {
+        top: -3.1rem;
+    }
+
+    .six .birth img.birthCrow {
+        width: 0.8rem;
+        height: 0.5rem;
+        top: 1.2rem;
+    }
+
+    .six .birth img.birthText {
+        top: 2rem;
+        width: 1.5rem;
+        height: 0.6rem;
+    }
+
+    .nine .birth {
+        top: -3.1rem;
+    }
+
+    .nine .birth img.birthCrow {
+        width: 0.8rem;
+        height: 0.5rem;
+        top: 1.6rem;
+    }
+
+    .nine .birth img.birthText {
+        top: 2.1rem;
+        width: 1.2rem;
+        height: 0.5rem;
+    }
+
+    .ten .birth {
+        top: -3.1rem;
+    }
+
+    .ten .birth img.birthCrow {
+        width: 0.8rem;
+        height: 0.5rem;
+        top: 1.6rem;
+    }
+
+    .ten .birth img.birthText {
+        top: 2.1rem;
+        width: 1.2rem;
+        height: 0.5rem;
+    }
+
+    .twelve .birth {
+        top: -3.1rem;
+    }
+
+    .twelve .birth img.birthCrow {
+        width: 0.6rem;
+        height: 0.3rem;
+        top: 2rem;
+    }
+
+    .twelve .birth img.birthText {
+        top: 2.4rem;
+        width: 1rem;
+        height: 0.4rem;
+    }
+
+    .sixteen .birth {
+        top: -3.1rem;
+    }
+
+    .sixteen .birth img.birthCrow {
+        width: 0.6rem;
+        height: 0.3rem;
+        top: 2.1rem;
+    }
+
+    .sixteen .birth img.birthText {
+        top: 2.45rem;
+        width: 1rem;
+        height: 0.4rem;
+    }
+
+    .twenty .birth {
+        top: -3.1rem;
+    }
+
+    .twenty .birth img.birthCrow {
+        width: 0.6rem;
+        height: 0.3rem;
+        top: 2.1rem;
+    }
+
+    .twenty .birth img.birthText {
+        top: 2.45rem;
+        width: 1rem;
+        height: 0.4rem;
+    }
+
+    .twentyFour .birth {
+        top: -3.1rem;
+    }
+
+    .twentyFour .birth img.birthCrow {
+        width: 0.6rem;
+        height: 0.3rem;
+        top: 2.2rem;
+    }
+
+    .twentyFour .birth img.birthText {
+        top: 2.5rem;
+        width: 0.8rem;
+        height: 0.3rem;
+    }
+
+    /*isPrivate*/
+    .isPrivate {
+        position: relative;
+        float: right;
+        top: -3.3rem;
+        width: 75%;
+        height: 1px;
+        display: block;
+        margin: 0 auto;
+        overflow: visible;
+    }
+
+    .isPrivate i {
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 0.1rem;
+        width: 1rem !important;
+        height: 1rem !important;
+        border: none !important;
+        background: url("../static/img/privateSign.svg");
+        background-size: 100% 100%;
+        background-position: top center;
+    }
+
+    .two .isPrivate {
+        top: -3.1rem;
+    }
+
+    .three .isPrivate {
+        top: -2.4rem;
+        left: -0.1rem;
+    }
+
+    .six .isPrivate {
+        top: -1.9rem;
+    }
+
+    .six .isPrivate i {
+        width: 0.8rem !important;
+        height: 0.8rem !important;
+    }
+
+    .nine .isPrivate {
+        top: -1.4rem;
+        left: -0.1rem;
+    }
+
+    .nine .isPrivate i {
+        width: 0.6rem !important;
+        height: 0.6rem !important;
+    }
+
+    .ten .isPrivate {
+        top: -1.4rem;
+    }
+
+    .ten .isPrivate i {
+        width: 0.6rem !important;
+        height: 0.6rem !important;
+    }
+
+    .twelve .isPrivate {
+        top: -1.15rem;
+    }
+
+    .twelve .isPrivate i {
+        width: 0.5rem !important;
+        height: 0.5rem !important;
+    }
+
+    .sixteen .isPrivate {
+        top: -1rem;
+        left: -0.1rem;
+    }
+
+    .sixteen .isPrivate i {
+        width: 0.4rem !important;
+        height: 0.4rem !important;
+    }
+
+    .twenty .isPrivate {
+        top: -1rem;
+    }
+
+    .twenty .isPrivate i {
+        width: 0.4rem !important;
+        height: 0.4rem !important;
+    }
+
+    .twentyFour .isPrivate {
+        top: -0.92rem;
+    }
+
+    .twentyFour .isPrivate i {
+        width: 0.4rem !important;
+        height: 0.4rem !important;
+    }
+
+
+</style>

Деякі файли не було показано, через те що забагато файлів було змінено