wzx 4 年之前
父节点
当前提交
90d6090ff3
共有 39 个文件被更改,包括 813 次插入203 次删除
  1. 5 6
      src/Global.js
  2. 6 4
      src/Mock/index.js
  3. 6 2
      src/api/getApiRes.js
  4. 二进制
      src/assets/imgs/3pkRank/blueTitle.png
  5. 21 38
      src/assets/imgs/levelIcon/i39.svg
  6. 40 0
      src/assets/imgs/levelIcon/i39_old.svg
  7. 21 38
      src/assets/imgs/levelIcon/i90.svg
  8. 40 0
      src/assets/imgs/levelIcon/i90_old.svg
  9. 二进制
      src/assets/imgs/logo.png
  10. 二进制
      src/assets/imgs/pk/blueFlag.png
  11. 二进制
      src/assets/imgs/pk/icons.png
  12. 二进制
      src/assets/imgs/pkRank/trophy.png
  13. 11 0
      src/assets/imgs/rank/ei.svg
  14. 二进制
      src/assets/imgs/rank/redTitel.png
  15. 二进制
      src/assets/imgs/rank/row.png
  16. 二进制
      src/assets/imgs/rank/titleBg.png
  17. 二进制
      src/assets/imgs/rank/titleBg2.png
  18. 二进制
      src/assets/imgs/splash.png
  19. 二进制
      src/assets/imgs/student/birthday.png
  20. 3 0
      src/assets/imgs/student/ei.svg
  21. 3 0
      src/assets/imgs/student/ei2.svg
  22. 二进制
      src/assets/imgs/student/fakePart.png
  23. 二进制
      src/assets/imgs/three/blueFlag.png
  24. 二进制
      src/assets/imgs/three/redFlag.png
  25. 二进制
      src/assets/imgs/three/yellowFlag.png
  26. 二进制
      src/assets/imgs/wait/title.png
  27. 二进制
      src/assets/pk.png
  28. 13 6
      src/components/Headside.vue
  29. 4 4
      src/components/newRecord.vue
  30. 9 8
      src/components/newStudent.vue
  31. 5 2
      src/components/power.vue
  32. 29 16
      src/components/student.vue
  33. 5 4
      src/main.js
  34. 8 3
      src/views/Index.vue
  35. 23 15
      src/views/Main.vue
  36. 4 4
      src/views/Rank.vue
  37. 491 0
      src/views/Rank_old.vue
  38. 65 52
      src/views/Wait.vue
  39. 1 1
      vue.config.js

+ 5 - 6
src/Global.js

@@ -6,17 +6,16 @@ companyInfo = {
 };
 
 // 当前版本   演示版
-runVersion = 'test';
+// runVersion = 'test';
 // 户外版本
 // runVersion = 'outDoor';
 // normal
-// runVersion = 'normal';
+runVersion = 'normal';
 
 // headapi = process.env.NODE_ENV === 'development' ? '/api/' : '../';
-// headapi = 'http://192.168.0.110:8080/';//从郑伟那里获得数据源
-// headapi = '';//从郑伟那里获得数据源
-// headapi = 'http://192.168.0.63:8080/';//从郑伟那里获得数据源
-headapi = 'http://192.168.0.10:8080/';//实际场馆默认数据源
+// headapi = 'http://192.168.0.62:9000/';//从郑伟那里获得数据源
+headapi = 'http://192.168.0.3:9000/';//从郑伟那里获得数据源
+// headapi = 'http://192.168.0.10:8080/';//实际场馆默认数据源
 
 // 七牛云imgsrc
 imgUrl = "http://qjzpcd34v.hb-bkt.clouddn.com";

+ 6 - 4
src/Mock/index.js

@@ -131,6 +131,7 @@ let testStudent = function (num, team, mustbeTeamOne) {
             BeginTime: 1608188579,
             Ck: "@float(1,99,0,1)",
             Cle: "@float(1,9999,0,1)",
+            EI: "@float(1,99999,0,1)",
             DuId: 119,
             EndTime: 0,
             GroupNo: group,
@@ -391,7 +392,8 @@ if (t == 1) {
     Mock.mock('/api/testTable', 'post', testTable());
     Mock.mock('/api/getUserList', 'post', getUserList());
 
-    let Mockapi = 'http://192.168.0.10:8080/';
+    // let Mockapi = 'http://192.168.0.10:8080/';
+    let Mockapi = 'http://192.168.0.62:9000/';
 
     // if (runVersion == 'test') {
     let curheadapi = 'http://cal.beswell.com:85/DataTransfer/';
@@ -401,7 +403,7 @@ if (t == 1) {
     // }
 
     // 0: 下课 团课/私教/PK 的排名
-    let LessonClass = 0;
+    let LessonClass = 1;
     let LessonDp = 0;
     // 1:团课/私教
     // 2:竞技课2PK
@@ -413,7 +415,7 @@ if (t == 1) {
         Mock.mock(curheadapi + 'ClassStatQuery', 'post', getClassStat(1, 1));
         Mock.mock(Mockapi + 'ClassStatQuery', 'post', getClassStat(1, 1));
         Mock.mock(curheadapi + 'UserListInfo', 'post', testStudent(1, 1));//true
-        Mock.mock(Mockapi + 'UserListInfo', 'post', testStudent(25, 2)); //
+        Mock.mock(Mockapi + 'UserListInfo', 'post', testStudent(6, 2)); //
     } else if (LessonClass == 2) {
         // 上2队PK课
         Mock.mock(curheadapi + 'ClassStatQuery', 'post', getClassStat(1, 2));
@@ -469,7 +471,7 @@ if (t == 1) {
     Mock.mock(Mockapi + 'UserRankingQuery', 'post', UserRankingQuery(8));
     // 新同学 0 999
     Mock.mock(curheadapi + 'getNewUser', 'post', getNewUser(999, 2));
-    Mock.mock(Mockapi + 'getNewUser', 'post', getNewUser(999, 2));
+    Mock.mock(Mockapi + 'getNewUser', 'post', getNewUser(999, 1));
     // 彩蛋 0 999
     Mock.mock(curheadapi + 'getRecordBreak', 'post', getRecordBreak(999));
     Mock.mock(Mockapi + 'getRecordBreak', 'post', getRecordBreak(999));

+ 6 - 2
src/api/getApiRes.js

@@ -45,6 +45,7 @@ export function getHello(postdata) {
 // 3:私教课
 export function getClassStat(postdata) {
     let url = headapi + 'ClassStatQuery';
+    // console.log("url="+url);
     return getApiBasic(url, postdata);
 }
 
@@ -102,18 +103,21 @@ export function UserRankingQuery(postdata) {
 // 课堂记录排名 下课后查询当堂课程人员排名
 export function ClassUserRank(postdata) {
     let url = headapi + 'ClassUserRank';
+    // console.log(url);
     return getApiBasic(url, postdata);
 }
 
 
 // 用查询最新wgt 般本
 export function QueryVueFramework(postdata) {
-    let url = 'http://cal.beswell.com:85/v1/Sensors/QueryVueFramework';
+    // let url = 'http://cal.beswell.com:85/v1/Sensors/QueryVueFrameworkV2';
+    let url = 'http://192.168.0.3:19096/v1/Sensors/QueryVueFrameworkV2';
     return getApiBasic(url, postdata);
 }
 // 下载最新wgt 般本
 export function DownloadVueFramework(postdata) {
-    let url = 'http://cal.beswell.com:85/v1/Sensors/DownloadVueFramework';
+    // let url = 'http://cal.beswell.com:85/v1/Sensors/DownloadVueFrameworkV2';
+    let url = 'http://192.168.0.3:19096/v1/Sensors/DownloadVueFrameworkV2';
     return getApiBasic(url, postdata);
 }
 

二进制
src/assets/imgs/3pkRank/blueTitle.png


+ 21 - 38
src/assets/imgs/levelIcon/i39.svg

@@ -1,40 +1,23 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="155" height="92"
-     viewBox="0 0 155 92">
-    <defs>
-        <linearGradient id="linear-gradient" x1="0.379" y1="0.034" x2="0.881" y2="0.845"
-                        gradientUnits="objectBoundingBox">
-            <stop offset="0" stop-color="#83d1ff"/>
-            <stop offset="0.103" stop-color="#028fe1"/>
-            <stop offset="0.823" stop-color="#028fe1"/>
-            <stop offset="1" stop-color="#6fc6f8"/>
-        </linearGradient>
-    </defs>
-    <g id="激活放松" transform="translate(-78 -420)">
-        <rect id="矩形_114" data-name="矩形 114" width="155" height="92" rx="12" transform="translate(78 420)" fill="#fff"
-              opacity="0.101"/>
-        <g id="组_522" data-name="组 522" transform="translate(-257 -517)">
-            <g id="矩形_122" data-name="矩形 122" transform="translate(410 966)" fill="none" stroke="#028fe1"
-               stroke-width="2">
-                <path d="M0,0H56.5A16.5,16.5,0,0,1,73,16.5v0A16.5,16.5,0,0,1,56.5,33H0a0,0,0,0,1,0,0V0A0,0,0,0,1,0,0Z"
-                      stroke="none"/>
-                <path d="M1.174,1H56.5A15.5,15.5,0,0,1,72,16.5v0A15.5,15.5,0,0,1,56.5,32H1.174A.174.174,0,0,1,1,31.826V1.174A.174.174,0,0,1,1.174,1Z"
-                      fill="none"/>
-            </g>
-            <text id="激活放松-2" data-name="激活放松" transform="translate(446 987)" fill="#fff" font-size="14"
-                  font-family="PingFangSC-Medium, PingFang SC" font-weight="500">
-                <tspan x="-28" y="0">激活放松</tspan>
-            </text>
-        </g>
-        <g id="组_520" data-name="组 520" transform="translate(-256.383 -516.365)">
-            <path id="排除_5" data-name="排除 5"
-                  d="M34.216,73.426a17.026,17.026,0,0,1-8.5-2.277l-17.2-9.931a17,17,0,0,1-8.5-14.709L0,26.731A17,17,0,0,1,8.512,11.988L25.648,2.113a17,17,0,0,1,16.988.007l17.2,9.93a17,17,0,0,1,8.5,14.709l.016,19.778A17,17,0,0,1,59.84,61.28L42.7,71.156A17.026,17.026,0,0,1,34.216,73.426ZM33.744,9.658a17.033,17.033,0,0,0-8.338,2.186l-8.53,4.8a16.994,16.994,0,0,0-8.662,15l.107,9.787a17,17,0,0,0,8.5,14.536l9.288,5.362a17,17,0,0,0,16.837.093l8.53-4.8a17,17,0,0,0,8.662-15l-.107-9.788a17,17,0,0,0-8.5-14.535l-9.288-5.363A17.021,17.021,0,0,0,33.744,9.658Z"
-                  transform="translate(344.383 945.523)" fill="url(#linear-gradient)"/>
-            <text id="_39_" data-name="≤
-39%" transform="translate(379 978)" fill="#58c2ff" font-size="16" font-family="PingFangSC-Medium, PingFang SC"
-                  font-weight="500">
-                <tspan x="-6.28" y="0">≤</tspan>
-                <tspan x="-17.52" y="16">39%</tspan>
-            </text>
-        </g>
+<svg id="激活放松-图例" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="155" height="92" viewBox="0 0 155 92">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.379" y1="0.034" x2="0.881" y2="0.845" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#83d1ff"/>
+      <stop offset="0.103" stop-color="#028fe1"/>
+      <stop offset="0.823" stop-color="#028fe1"/>
+      <stop offset="1" stop-color="#6fc6f8"/>
+    </linearGradient>
+  </defs>
+  <rect id="矩形_114" data-name="矩形 114" width="155" height="92" rx="12" fill="#fff" opacity="0.101"/>
+  <g id="组_522" data-name="组 522" transform="translate(-335 -937)">
+    <g id="矩形_122" data-name="矩形 122" transform="translate(410 966)" fill="none" stroke="#028fe1" stroke-width="2">
+      <path d="M0,0H56.5A16.5,16.5,0,0,1,73,16.5v0A16.5,16.5,0,0,1,56.5,33H0a0,0,0,0,1,0,0V0A0,0,0,0,1,0,0Z" stroke="none"/>
+      <path d="M1.174,1H56.5A15.5,15.5,0,0,1,72,16.5v0A15.5,15.5,0,0,1,56.5,32H1.174A.174.174,0,0,1,1,31.826V1.174A.174.174,0,0,1,1.174,1Z" fill="none"/>
     </g>
+    <text id="激活放松" transform="translate(446 987)" fill="#fff" font-size="14" font-family="PingFangSC-Medium, PingFang SC" font-weight="500"><tspan x="-28" y="0">激活放松</tspan></text>
+  </g>
+  <g id="组_520" data-name="组 520" transform="translate(-334.383 -936.365)">
+    <path id="排除_5" data-name="排除 5" d="M34.216,73.426a17.026,17.026,0,0,1-8.5-2.277l-17.2-9.931a17,17,0,0,1-8.5-14.709L0,26.731A17,17,0,0,1,8.512,11.988L25.648,2.113a17,17,0,0,1,16.988.007l17.2,9.93a17,17,0,0,1,8.5,14.709l.016,19.778A17,17,0,0,1,59.84,61.28L42.7,71.156A17.026,17.026,0,0,1,34.216,73.426ZM33.744,9.658a17.033,17.033,0,0,0-8.338,2.186l-8.53,4.8a16.994,16.994,0,0,0-8.662,15l.107,9.787a17,17,0,0,0,8.5,14.536l9.288,5.362a17,17,0,0,0,16.837.093l8.53-4.8a17,17,0,0,0,8.662-15l-.107-9.788a17,17,0,0,0-8.5-14.535l-9.288-5.363A17.021,17.021,0,0,0,33.744,9.658Z" transform="translate(344.383 945.523)" fill="url(#linear-gradient)"/>
+    <text id="_39_" data-name="≤
+39%" transform="translate(379 978)" fill="#58c2ff" font-size="18" font-family="PingFangSC-Medium, PingFang SC" font-weight="500"><tspan x="-7.065" y="0">≤</tspan><tspan font-size="16"><tspan x="-17.52" y="16">39%</tspan></tspan></text>
+  </g>
 </svg>

+ 40 - 0
src/assets/imgs/levelIcon/i39_old.svg

@@ -0,0 +1,40 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="155" height="92"
+     viewBox="0 0 155 92">
+    <defs>
+        <linearGradient id="linear-gradient" x1="0.379" y1="0.034" x2="0.881" y2="0.845"
+                        gradientUnits="objectBoundingBox">
+            <stop offset="0" stop-color="#83d1ff"/>
+            <stop offset="0.103" stop-color="#028fe1"/>
+            <stop offset="0.823" stop-color="#028fe1"/>
+            <stop offset="1" stop-color="#6fc6f8"/>
+        </linearGradient>
+    </defs>
+    <g id="激活放松" transform="translate(-78 -420)">
+        <rect id="矩形_114" data-name="矩形 114" width="155" height="92" rx="12" transform="translate(78 420)" fill="#fff"
+              opacity="0.101"/>
+        <g id="组_522" data-name="组 522" transform="translate(-257 -517)">
+            <g id="矩形_122" data-name="矩形 122" transform="translate(410 966)" fill="none" stroke="#028fe1"
+               stroke-width="2">
+                <path d="M0,0H56.5A16.5,16.5,0,0,1,73,16.5v0A16.5,16.5,0,0,1,56.5,33H0a0,0,0,0,1,0,0V0A0,0,0,0,1,0,0Z"
+                      stroke="none"/>
+                <path d="M1.174,1H56.5A15.5,15.5,0,0,1,72,16.5v0A15.5,15.5,0,0,1,56.5,32H1.174A.174.174,0,0,1,1,31.826V1.174A.174.174,0,0,1,1.174,1Z"
+                      fill="none"/>
+            </g>
+            <text id="激活放松-2" data-name="激活放松" transform="translate(446 987)" fill="#fff" font-size="14"
+                  font-family="PingFangSC-Medium, PingFang SC" font-weight="500">
+                <tspan x="-28" y="0">激活放松</tspan>
+            </text>
+        </g>
+        <g id="组_520" data-name="组 520" transform="translate(-256.383 -516.365)">
+            <path id="排除_5" data-name="排除 5"
+                  d="M34.216,73.426a17.026,17.026,0,0,1-8.5-2.277l-17.2-9.931a17,17,0,0,1-8.5-14.709L0,26.731A17,17,0,0,1,8.512,11.988L25.648,2.113a17,17,0,0,1,16.988.007l17.2,9.93a17,17,0,0,1,8.5,14.709l.016,19.778A17,17,0,0,1,59.84,61.28L42.7,71.156A17.026,17.026,0,0,1,34.216,73.426ZM33.744,9.658a17.033,17.033,0,0,0-8.338,2.186l-8.53,4.8a16.994,16.994,0,0,0-8.662,15l.107,9.787a17,17,0,0,0,8.5,14.536l9.288,5.362a17,17,0,0,0,16.837.093l8.53-4.8a17,17,0,0,0,8.662-15l-.107-9.788a17,17,0,0,0-8.5-14.535l-9.288-5.363A17.021,17.021,0,0,0,33.744,9.658Z"
+                  transform="translate(344.383 945.523)" fill="url(#linear-gradient)"/>
+            <text id="_39_" data-name="≤
+39%" transform="translate(379 978)" fill="#58c2ff" font-size="16" font-family="PingFangSC-Medium, PingFang SC"
+                  font-weight="500">
+                <tspan x="-6.28" y="0">≤</tspan>
+                <tspan x="-17.52" y="16">39%</tspan>
+            </text>
+        </g>
+    </g>
+</svg>

+ 21 - 38
src/assets/imgs/levelIcon/i90.svg

@@ -1,40 +1,23 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="155" height="92"
-     viewBox="0 0 155 92">
-    <defs>
-        <linearGradient id="linear-gradient" x1="0.379" y1="0.034" x2="0.881" y2="0.845"
-                        gradientUnits="objectBoundingBox">
-            <stop offset="0" stop-color="#f46d79"/>
-            <stop offset="0.103" stop-color="#d11122"/>
-            <stop offset="0.823" stop-color="#d11122"/>
-            <stop offset="1" stop-color="#ff7f12"/>
-        </linearGradient>
-    </defs>
-    <g id="峰值锻炼" transform="translate(-1173 -420)">
-        <rect id="矩形_128" data-name="矩形 128" width="155" height="92" rx="12" transform="translate(1173 420)" fill="#fff"
-              opacity="0.101"/>
-        <g id="组_526" data-name="组 526" transform="translate(653.146 -517)">
-            <g id="矩形_123" data-name="矩形 123" transform="translate(594.854 966)" fill="none" stroke="#d11122"
-               stroke-width="2">
-                <path d="M0,0H56.5A16.5,16.5,0,0,1,73,16.5v0A16.5,16.5,0,0,1,56.5,33H0a0,0,0,0,1,0,0V0A0,0,0,0,1,0,0Z"
-                      stroke="none"/>
-                <path d="M1.174,1H56.5A15.5,15.5,0,0,1,72,16.5v0A15.5,15.5,0,0,1,56.5,32H1.174A.174.174,0,0,1,1,31.826V1.174A.174.174,0,0,1,1.174,1Z"
-                      fill="none"/>
-            </g>
-            <text id="峰值锻炼-2" data-name="峰值锻炼" transform="translate(629.427 987)" fill="#fff" font-size="14"
-                  font-family="PingFangSC-Medium, PingFang SC" font-weight="500">
-                <tspan x="-28" y="0">峰值锻炼</tspan>
-            </text>
-        </g>
-        <g id="组_518" data-name="组 518" transform="translate(-48.536 -518.365)">
-            <path id="排除_8" data-name="排除 8"
-                  d="M34.216,73.426a17.026,17.026,0,0,1-8.5-2.277l-17.2-9.931a17,17,0,0,1-8.5-14.709L0,26.731A17,17,0,0,1,8.512,11.988L25.648,2.113a17,17,0,0,1,16.988.007l17.2,9.93a17,17,0,0,1,8.5,14.709l.016,19.778A17,17,0,0,1,59.84,61.28L42.7,71.156A17.026,17.026,0,0,1,34.216,73.426ZM33.744,9.658a17.033,17.033,0,0,0-8.338,2.186l-8.53,4.8a16.994,16.994,0,0,0-8.662,15l.107,9.787a17,17,0,0,0,8.5,14.536l9.288,5.362a17,17,0,0,0,16.837.093l8.53-4.8a17,17,0,0,0,8.662-15l-.107-9.788a17,17,0,0,0-8.5-14.535l-9.288-5.363A17.021,17.021,0,0,0,33.744,9.658Z"
-                  transform="translate(1231.536 947.523)" fill="url(#linear-gradient)"/>
-            <text id="_90_" data-name="≥
-90%" transform="translate(1266 978)" fill="#ff5d6c" font-size="15" font-family="PingFangSC-Medium, PingFang SC"
-                  font-weight="500">
-                <tspan x="-5.887" y="0">≥</tspan>
-                <tspan x="-16.425" y="16">90%</tspan>
-            </text>
-        </g>
+<svg id="峰值锻炼-图例" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="155" height="92" viewBox="0 0 155 92">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.379" y1="0.034" x2="0.881" y2="0.845" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#f46d79"/>
+      <stop offset="0.103" stop-color="#d11122"/>
+      <stop offset="0.823" stop-color="#d11122"/>
+      <stop offset="1" stop-color="#ff7f12"/>
+    </linearGradient>
+  </defs>
+  <rect id="矩形_128" data-name="矩形 128" width="155" height="92" rx="12" fill="#fff" opacity="0.101"/>
+  <g id="组_526" data-name="组 526" transform="translate(-519.854 -937)">
+    <g id="矩形_123" data-name="矩形 123" transform="translate(594.854 966)" fill="none" stroke="#d11122" stroke-width="2">
+      <path d="M0,0H56.5A16.5,16.5,0,0,1,73,16.5v0A16.5,16.5,0,0,1,56.5,33H0a0,0,0,0,1,0,0V0A0,0,0,0,1,0,0Z" stroke="none"/>
+      <path d="M1.174,1H56.5A15.5,15.5,0,0,1,72,16.5v0A15.5,15.5,0,0,1,56.5,32H1.174A.174.174,0,0,1,1,31.826V1.174A.174.174,0,0,1,1.174,1Z" fill="none"/>
     </g>
+    <text id="峰值锻炼" transform="translate(629.427 987)" fill="#fff" font-size="14" font-family="PingFangSC-Medium, PingFang SC" font-weight="500"><tspan x="-28" y="0">峰值锻炼</tspan></text>
+  </g>
+  <g id="组_518" data-name="组 518" transform="translate(-1221.536 -938.365)">
+    <path id="排除_8" data-name="排除 8" d="M34.216,73.426a17.026,17.026,0,0,1-8.5-2.277l-17.2-9.931a17,17,0,0,1-8.5-14.709L0,26.731A17,17,0,0,1,8.512,11.988L25.648,2.113a17,17,0,0,1,16.988.007l17.2,9.93a17,17,0,0,1,8.5,14.709l.016,19.778A17,17,0,0,1,59.84,61.28L42.7,71.156A17.026,17.026,0,0,1,34.216,73.426ZM33.744,9.658a17.033,17.033,0,0,0-8.338,2.186l-8.53,4.8a16.994,16.994,0,0,0-8.662,15l.107,9.787a17,17,0,0,0,8.5,14.536l9.288,5.362a17,17,0,0,0,16.837.093l8.53-4.8a17,17,0,0,0,8.662-15l-.107-9.788a17,17,0,0,0-8.5-14.535l-9.288-5.363A17.021,17.021,0,0,0,33.744,9.658Z" transform="translate(1231.536 947.523)" fill="url(#linear-gradient)"/>
+    <text id="_90_" data-name="≥
+90%" transform="translate(1266 978)" fill="#ff5d6c" font-size="18" font-family="PingFangSC-Medium, PingFang SC" font-weight="500"><tspan x="-7.065" y="0">≥</tspan><tspan font-size="15"><tspan x="-16.425" y="16">90%</tspan></tspan></text>
+  </g>
 </svg>

+ 40 - 0
src/assets/imgs/levelIcon/i90_old.svg

@@ -0,0 +1,40 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="155" height="92"
+     viewBox="0 0 155 92">
+    <defs>
+        <linearGradient id="linear-gradient" x1="0.379" y1="0.034" x2="0.881" y2="0.845"
+                        gradientUnits="objectBoundingBox">
+            <stop offset="0" stop-color="#f46d79"/>
+            <stop offset="0.103" stop-color="#d11122"/>
+            <stop offset="0.823" stop-color="#d11122"/>
+            <stop offset="1" stop-color="#ff7f12"/>
+        </linearGradient>
+    </defs>
+    <g id="峰值锻炼" transform="translate(-1173 -420)">
+        <rect id="矩形_128" data-name="矩形 128" width="155" height="92" rx="12" transform="translate(1173 420)" fill="#fff"
+              opacity="0.101"/>
+        <g id="组_526" data-name="组 526" transform="translate(653.146 -517)">
+            <g id="矩形_123" data-name="矩形 123" transform="translate(594.854 966)" fill="none" stroke="#d11122"
+               stroke-width="2">
+                <path d="M0,0H56.5A16.5,16.5,0,0,1,73,16.5v0A16.5,16.5,0,0,1,56.5,33H0a0,0,0,0,1,0,0V0A0,0,0,0,1,0,0Z"
+                      stroke="none"/>
+                <path d="M1.174,1H56.5A15.5,15.5,0,0,1,72,16.5v0A15.5,15.5,0,0,1,56.5,32H1.174A.174.174,0,0,1,1,31.826V1.174A.174.174,0,0,1,1.174,1Z"
+                      fill="none"/>
+            </g>
+            <text id="峰值锻炼-2" data-name="峰值锻炼" transform="translate(629.427 987)" fill="#fff" font-size="14"
+                  font-family="PingFangSC-Medium, PingFang SC" font-weight="500">
+                <tspan x="-28" y="0">峰值锻炼</tspan>
+            </text>
+        </g>
+        <g id="组_518" data-name="组 518" transform="translate(-48.536 -518.365)">
+            <path id="排除_8" data-name="排除 8"
+                  d="M34.216,73.426a17.026,17.026,0,0,1-8.5-2.277l-17.2-9.931a17,17,0,0,1-8.5-14.709L0,26.731A17,17,0,0,1,8.512,11.988L25.648,2.113a17,17,0,0,1,16.988.007l17.2,9.93a17,17,0,0,1,8.5,14.709l.016,19.778A17,17,0,0,1,59.84,61.28L42.7,71.156A17.026,17.026,0,0,1,34.216,73.426ZM33.744,9.658a17.033,17.033,0,0,0-8.338,2.186l-8.53,4.8a16.994,16.994,0,0,0-8.662,15l.107,9.787a17,17,0,0,0,8.5,14.536l9.288,5.362a17,17,0,0,0,16.837.093l8.53-4.8a17,17,0,0,0,8.662-15l-.107-9.788a17,17,0,0,0-8.5-14.535l-9.288-5.363A17.021,17.021,0,0,0,33.744,9.658Z"
+                  transform="translate(1231.536 947.523)" fill="url(#linear-gradient)"/>
+            <text id="_90_" data-name="≥
+90%" transform="translate(1266 978)" fill="#ff5d6c" font-size="15" font-family="PingFangSC-Medium, PingFang SC"
+                  font-weight="500">
+                <tspan x="-5.887" y="0">≥</tspan>
+                <tspan x="-16.425" y="16">90%</tspan>
+            </text>
+        </g>
+    </g>
+</svg>

二进制
src/assets/imgs/logo.png


二进制
src/assets/imgs/pk/blueFlag.png


二进制
src/assets/imgs/pk/icons.png


二进制
src/assets/imgs/pkRank/trophy.png


+ 11 - 0
src/assets/imgs/rank/ei.svg

@@ -0,0 +1,11 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="85.144" height="66.571" viewBox="0 0 85.144 66.571">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#ffe61f"/>
+      <stop offset="0.355" stop-color="#f47c29"/>
+      <stop offset="0.65" stop-color="#da2d24"/>
+      <stop offset="1" stop-color="#190002"/>
+    </linearGradient>
+  </defs>
+  <path id="路径_183" data-name="路径 183" d="M-42.3-66.571H12.828v14.213H-21.683v10.581H10.331V-28.2H-21.683v13.124H13.827V0H-42.3Zm66.662,0H42.844v12.579H24.363Zm0,18.346H42.844V0H24.363Z" transform="translate(42.3 66.571)" fill="url(#linear-gradient)"/>
+</svg>

二进制
src/assets/imgs/rank/redTitel.png


二进制
src/assets/imgs/rank/row.png


二进制
src/assets/imgs/rank/titleBg.png


二进制
src/assets/imgs/rank/titleBg2.png


二进制
src/assets/imgs/splash.png


二进制
src/assets/imgs/student/birthday.png


+ 3 - 0
src/assets/imgs/student/ei.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="38" height="38" viewBox="0 0 38 38">
+  <path id="排除_17" data-name="排除 17" d="M4048,1061h-28a5.006,5.006,0,0,1-5-5v-28a5.006,5.006,0,0,1,5-5h28a5.006,5.006,0,0,1,5,5v28A5.006,5.006,0,0,1,4048,1061Zm-6.844-22.889V1049h2.882v-10.89Zm-16.629-4.143V1049h11.433v-2.533h-8.4v-4.092h7.547v-2.533h-7.547v-3.332h8.111v-2.543Zm16.629,0v2.666h2.882v-2.666Z" transform="translate(-4015 -1023)" fill="#fff"/>
+</svg>

+ 3 - 0
src/assets/imgs/student/ei2.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="38" height="38" viewBox="0 0 38 38">
+  <path id="排除_16" data-name="排除 16" d="M4048,1061h-28a5.006,5.006,0,0,1-5-5v-28a5.006,5.006,0,0,1,5-5h28a5.006,5.006,0,0,1,5,5v28A5.006,5.006,0,0,1,4048,1061Zm-23.57-6.392a4.789,4.789,0,0,1,1.243.114,1.176,1.176,0,0,1,.284.11,18.824,18.824,0,0,0,9.425,2.371,17.958,17.958,0,0,0,8.487-2.036,8.9,8.9,0,0,0,2.859-2.392,5.237,5.237,0,0,0,1.093-3.173,4.122,4.122,0,0,0-1.106-2.856,7.034,7.034,0,0,0-2.588-1.694,15.439,15.439,0,0,0-5.248-1.02,12.152,12.152,0,0,0-5.827,2.012c-.2.114-.428.243-.628.351h-.006a6.71,6.71,0,0,1-.63.318.021.021,0,0,0-.013.007,1.351,1.351,0,0,1-.4.11.151.151,0,0,1-.055.007c-.058,0-.131,0-.236.008l-.125.006-.1,0h-.029c-.118.005-.251.011-.4.021-.006-.067-.011-.134-.016-.2l0-.025c-.005-.07-.01-.139-.017-.209-.062-.718-.16-1.834-.276-3.075-.167-1.807-.305-3.362-.305-4.091,0-1.6,2.03-5.22,2.7-6.129.031-.042.059-.076.082-.1l.021-.027h.145l5.563.042h.016a1.373,1.373,0,0,0,1.221-.754.032.032,0,0,0,.007-.014.034.034,0,0,1,.007-.014,1.814,1.814,0,0,0,.076-.2,1.252,1.252,0,0,0,.048-.6.777.777,0,0,0-.042-.193l.284-.222a1.373,1.373,0,0,0,.255-1.88c-.644-.89-1.863-2.383-2.8-2.383-1.843,0-4.062,1.161-5.6,2.136a14.975,14.975,0,0,0-3.329,2.659,69.671,69.671,0,0,0-4.357,7.167c-1.8,3.31-3.936,7.757-3.936,10.151a7.879,7.879,0,0,0,1.057,4.49l0,.005c.058.1.107.185.149.266.454.867,1.464.938,2.548.938h.494Z" transform="translate(-4015 -1023)" fill="#fff"/>
+</svg>

二进制
src/assets/imgs/student/fakePart.png


二进制
src/assets/imgs/three/blueFlag.png


二进制
src/assets/imgs/three/redFlag.png


二进制
src/assets/imgs/three/yellowFlag.png


二进制
src/assets/imgs/wait/title.png


二进制
src/assets/pk.png


+ 13 - 6
src/components/Headside.vue

@@ -60,13 +60,20 @@ export default {
   mounted() {
     this.nowtimer = setInterval(() => {
       let date = new Date();
-      let h = date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':';
-      // let m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes() + ':';
-      let m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes();
-      let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
-      // this.nowTime = h + m + s;
-      this.nowTime = h + m;
+
+      let h = date.getHours();
+      h = h < 10 ? '0' + h + ':' : h + ':';
+
+      let m = date.getMinutes()
+      m = m < 10 ? '0' + m + ':' : m + ':';
+
+      let s = date.getSeconds()
+      s = s < 10 ? '0' + s : s;
+
+      this.nowTime = h + m + s;
+      // this.nowTime = h + m;
       this.nowDayFunc();
+      
       // 获取版本号
       this.version = localStorage.version;
       this.currunVersion = runVersion

+ 4 - 4
src/components/newRecord.vue

@@ -135,12 +135,12 @@ export default {
   }
 
   .type {
-    height: 1.8rem;
+    height: 1.6rem;
     color: white;
     font-weight: bold;
-    font-size: 0.8rem;
+    font-size: 0.6rem;
     line-height: 2rem;
-    margin-top: 0.6rem;
+    margin-top: 0.4rem;
   }
 
   .info {
@@ -151,7 +151,7 @@ export default {
       bottom: 0.1rem;
       @include cube;
       font-weight: bold;
-      font-size: 1.1rem;
+      font-size: 1.2rem;
       text-align: center;
       font-family: "Arial";
       color: #b5000f;

+ 9 - 8
src/components/newStudent.vue

@@ -2,8 +2,8 @@
   <el-dialog title="" class="sss" :visible.sync="studentInfo.dialogVisible" :close-on-click-modal="false">
     <div :class="[{'newStudentContainer':true}]">
       <div class="info">
-        <ul :class="[{'many':studentInfo.Rs.length >= 6},{'two':studentInfo.Rs.length >= 2 && studentInfo.Rs.length  < 6}]">
-          <li v-for="(s,i) in studentInfo.Rs" v-if="i < 10"
+        <ul :class="[{'many':studentInfo.Rs.length > 6},{'two':studentInfo.Rs.length >= 2 && studentInfo.Rs.length  <= 6}]">
+          <li v-for="(s,i) in studentInfo.Rs" v-if="i < 12"
               :class="[{'bigLi':studentInfo.Rs.length <= 4},{'smallLi':studentInfo.Rs.length > 4}]">
             <img :src="s.Head" alt="" v-if="s.Head" :class="[{'boy':s.Sex == 1},{'girl':s.Sex == 2}]">
             <img src="../static/img/people/flyhead.png" alt="" v-if="!s.Head">
@@ -87,12 +87,12 @@ ul {
   justify-content: center;
   flex-wrap: wrap;
   flex-grow: 1;
-  padding-top: 18%;
+  padding-top: 15%;
 
   &.two {
-    justify-content: space-between;
-    padding-top: 20%;
-    width: 40%;
+    justify-content: space-around;
+    padding-top: 16%;
+    width: 70%;
 
     .bigLi img {
       width: 1.9rem;
@@ -100,8 +100,9 @@ ul {
   }
 
   &.many {
-    justify-content: space-between;
-    padding-top: 14%;
+    justify-content: space-around;
+    // justify-content: space-between;
+    padding-top: 11.5%;
   }
 
   li {

+ 5 - 2
src/components/power.vue

@@ -1,16 +1,19 @@
 <template>
-    <div class="powerContainer" v-if="parseInt(curPower) > 0">
+    <div class="powerContainer" v-if="parseInt(curPower) > 0 && parseInt(curHr) > 0">
       <img src="../assets/imgs/power/100p.svg" alt="" v-if="parseInt(curPower) >= 81">
       <img src="../assets/imgs/power/75p.svg" alt="" v-if="parseInt(curPower) >= 41 && parseInt(curPower) < 81">
       <img src="../assets/imgs/power/50p.svg" alt="" v-if="parseInt(curPower) >= 21 && parseInt(curPower) < 40">
       <img src="../assets/imgs/power/25p.svg" alt="" v-if="parseInt(curPower) <= 20">
     </div>
+    <div class="powerContainer" v-else>
+      <img>
+    </div>
 </template>
 
 <script>
     import '../libs/rem';
     export default {
-        props: ['curPower'],
+        props: ['curPower', 'curHr'],
     }
 </script>
 

+ 29 - 16
src/components/student.vue

@@ -2,13 +2,15 @@
   <ul :class="[{'many':students.length >= 2}]">
     <li v-for="(s,i) in students" :class="studentsClassName[i].name">
       <div :class="[{ 'box animate__animated animate__flipInX': Listate },{'centerLi':true}]">
-        <div class="power" v-if="s.RealHr != 0">
-          <power :cur-power="s.PowerPercent"></power>
+        <!-- <div class="power" v-if="s.RealHr != 0"> -->
+        <div class="power">
+          <power :cur-power="s.PowerPercent" :cur-hr="s.RealHr"></power>
         </div>
         <div class="userinfo">
           <div class="lt">
             <span>
               <em v-if="s.RealHr != 0">{{ s.ActivePercent |max100 }}</em>
+              <em v-else>---</em>
               <s>%</s>
             </span>
           </div>
@@ -28,19 +30,22 @@
           <div class="rt">
             <span>
               <div :class="[{'heartJump':true}]">
-                 <div class="heartImgContainer">
+                <div class="heartImgContainer">
                      <img src="../assets/imgs/student/heart.svg" class=""/>
-                 </div>
-                                        <span class="fastJump" v-if="s.RealHr != 0"
-                                              v-show="parseInt(s.ActivePercent) > 90">{{ s.RealHr }}</span>
+                </div>
+                <span class="fastJump" v-if="s.RealHr != 0"
+                    v-show="parseInt(s.ActivePercent) > 90">{{ s.RealHr }}
+                </span>
                 <em class="normalJump" v-if="s.RealHr != 0"
                     v-show="parseInt(s.ActivePercent) <= 90 && parseInt(s.ActivePercent) > 30">
-                                            {{ s.RealHr }}</em>
+                    {{ s.RealHr }}
+                </em>
                 <em class="slowJump" v-if="s.RealHr != 0"
-                    v-show="parseInt(s.ActivePercent) <= 30">{{ s.RealHr }}</em>
+                    v-show="parseInt(s.ActivePercent) <= 30">{{ s.RealHr }}
+                </em>
                 <em class="plus" v-if="s.RealHr == 0">
-                                        ---
-                                    </em>
+                    ---
+                </em>
               </div>
             </span>
           </div>
@@ -50,14 +55,18 @@
             <img src="../assets/imgs/student/calc.svg" class=""/>
             <em>{{ s.Cle |fmtInt }}</em>
           </span>
-          <span>
-            <img src="../assets/imgs/student/sport.svg" class=""/>
-            <em>{{ s.PureCalorieNoVo2 |fmtInt }}</em>
-          </span>
           <span>
             <img src="../assets/imgs/student/ck.svg" class=""/>
             <em>{{ s.Ck |fmtFloat }}</em>
           </span>
+          <span>
+            <img src="../assets/imgs/student/ei.svg" class=""/>
+            <em>{{ s.EI |fmtInt }}</em>
+          </span>
+          <!-- <span>
+            <img src="../assets/imgs/student/sport.svg" class=""/>
+            <em>{{ s.PureCalorieNoVo2 |fmtInt }}</em>
+          </span> -->
         </div>
       </div>
     </li>
@@ -151,7 +160,7 @@ export default {
         let colorClass = '';
         for (let i = 0; i < sum; i++) {
           that.Listate = false;
-          console.log(' that.Listate', that.Listate);
+          // console.log(' that.Listate', that.Listate);
           switch (true) {
             case  parseInt(sum) == 1:
               numberClass = 'max';
@@ -579,6 +588,7 @@ ul {
 
     img {
       width: 2.2rem;
+      height: 2.2rem;
     }
   }
 
@@ -636,6 +646,7 @@ ul {
 
     img {
       width: 2.2rem;
+      height: 2.2rem;
     }
   }
 
@@ -696,6 +707,7 @@ ul {
 
     img {
       width: 1.5rem;
+      height: 1.5rem;
       border-width: 2px !important;
     }
 
@@ -779,6 +791,7 @@ ul {
 
     img {
       width: 1.1rem !important;
+      height: 1.1rem !important;
       border-width: 2px !important;
     }
 
@@ -878,6 +891,7 @@ ul {
 
     img {
       width: 0.8rem;
+      height: 0.8rem;
       border-width: 2px !important;
     }
 
@@ -929,7 +943,6 @@ ul {
     em {
       line-height: 0.8rem;
       font-size: 0.15rem;
-
     }
   }
 

+ 5 - 4
src/main.js

@@ -2,7 +2,7 @@ import Vue from 'vue'
 import App from './App.vue'
 import router from './router'
 import ElementUI from 'element-ui';
-import VConsole from 'vconsole/dist/vconsole.min.js' //import vconsole
+// import VConsole from 'vconsole/dist/vconsole.min.js' //import vconsole
 import animated from 'animate.css'
 import './plugins/axios'
 import 'default-passive-events'
@@ -14,12 +14,13 @@ import 'element-ui/lib/theme-chalk/index.css';
 //import {ApiClient} from "../src/grpc/im_grpc_web_pb";
 
 if (process.env.NODE_ENV === 'development') {
+    console.log("process.env.NODE_ENV: development");
     // 显示控制台
-    let vConsole = new VConsole();
+    // let vConsole = new VConsole();
     // 演示版本数据
-    require('./Mock/index.js');
+    // require('./Mock/index.js');
 } else {
-    let vConsole = new VConsole();
+    // let vConsole = new VConsole();
     // 演示版本数据
     // require('./Mock/index.js');
 }

+ 8 - 3
src/views/Index.vue

@@ -135,7 +135,8 @@ export default {
       QueryVueFramework(postdata).then(res => {
         let json = res;
         if (json.Code == 0) {
-          console.log('localStorage.version' + localStorage.version);
+          console.log('localStorage.version: ' + localStorage.version);
+          console.log('json.VueFramework.Version: ' + json.VueFramework.Version);
           if (localStorage.version != json.VueFramework.Version) {
             // 正式
             let url = "http://cal.beswell.com:85/v1/Sensors/DownloadVueFramework";
@@ -178,7 +179,7 @@ export default {
       const that = this;
       let url = '';
       if (runVersion == 'test') {
-        headapi = "http://cal.beswell.com:85/DataTransfer/";
+        headapi = "http://cal.beswell.com:85/DataTransfer/";  //演示模式
         return false
       }
       // 测试使用0.3心率系统
@@ -192,7 +193,9 @@ export default {
       };
       let postdata = qs.stringify(param);
       axios.post(url, postdata).then(function (data) {
+        console.log(eqsn, url);
         let json = data.data;
+        console.log(json);
         if (json.Code == 0) {
           // 户外版使用HotsPotDataServiceIP
           if (runVersion == 'outDoor') {
@@ -205,10 +208,12 @@ export default {
             }
           } else {
             headapi = json.Rs.DataServiceIP;
+            // console.log("正式版 headapi = " + headapi);
           }
         } else {
-          headapi = 'http://192.168.0.10:8080/';
+          headapi = 'http://192.168.0.10:8080/';  //树莓派数据转发
         }
+        console.log("headapi = " + headapi);
       }, function (response) {
         console.info(response);
       })

+ 23 - 15
src/views/Main.vue

@@ -88,13 +88,16 @@ export default {
     '$route': function (val) {
       if (val.path == '/main') {
         if (this.trueDate) {
+          console.log("使用真实数据");
           this.init();
         } else {
+          console.log("使用假数据");
           this.students = fakeNews(2);
           this.giveClassName(this.students);
           // this.createEgg(this.students[5]);
         }
       } else {
+        console.log("val.path="+val.path);
         clearInterval(this.mainTimer);
         clearInterval(this.timer2);
         clearInterval(this.timer3);
@@ -117,19 +120,19 @@ export default {
       this.createNewStudent();
       this.curgetClassStat();
 
-      // this.mainTimer = setInterval(() => {
-      //   // this.$router.push({path: '/'});
-      //   this.GetgetUserList();
-      //   this.curgetClassStat();
-      // }, 1000);
-      //
-      // this.timer2 = setInterval(() => {
-      //   this.createEgg();
-      // }, 31000);
-      //
-      // this.timer3 = setInterval(() => {
-      //   this.createNewStudent();
-      // }, 6000);
+      this.mainTimer = setInterval(() => {
+        // this.$router.push({path: '/'});
+        this.GetgetUserList();
+        this.curgetClassStat();
+      }, 1000);
+      
+      this.timer2 = setInterval(() => {
+        this.createEgg();
+      }, 31000);
+      
+      this.timer3 = setInterval(() => {
+        this.createNewStudent();
+      }, 6000);
     },
     alertInfo(info) {
       alert(info);
@@ -197,7 +200,7 @@ export default {
       let clock = window.setInterval(() => {
         this.totalTime--;
         if (parseInt(this.totalTime) < 0) {
-          // that.toperInfo.dialogVisible = false;// 关闭 自动关闭彩蛋
+          that.toperInfo.dialogVisible = false;// 关闭 自动关闭彩蛋
           clearInterval(clock);
         }
       }, 1000)
@@ -215,7 +218,7 @@ export default {
         this.studentInfo.percent = parseInt(num) > 100 ? 100 : num;
         console.log('num' + num);
         if (parseInt(this.studentTime) <= 0) {
-          // that.studentInfo.dialogVisible = false; //关闭 自动关闭
+          that.studentInfo.dialogVisible = false; //关闭 自动关闭
           clearInterval(clock);
         }
       }, 1000)
@@ -227,8 +230,12 @@ export default {
         eqSn: localStorage.eqSn
       };
       let postdata = qs.stringify(param);
+      // console.log("getHello postdata = " + postdata);
       getHello(postdata).then(res => {
         let json = res;
+        if (json == undefined)
+          return;
+        // console.log("getHello = " + JSON.stringify(json));
         if (json.Code == 0) {
           that.students = json.Rs;
           that.giveClassName(json.Rs);
@@ -252,6 +259,7 @@ export default {
       let postdata = qs.stringify(param);
       getClassStat(postdata).then(res => {
         let json = res;
+        // console.log("[Main] getClassStat: " + JSON.stringify(json));
         if (json.Code == 0) {
           // 没开课
           if (json.ClassOn == 0) {

+ 4 - 4
src/views/Rank.vue

@@ -11,7 +11,7 @@
         <h5>CK排名</h5>
       </div>
       <div class="md">
-        <span>本训练排名</span>
+        <span>本训练排名</span>
       </div>
     </div>
     <div class="listContainer">
@@ -161,13 +161,13 @@ export default {
           } else {
             totalTime = 40
           }
-          this.jumpWait(totalTime);
+          this.jumpWait(totalTime);  //tmp del
           let CkSort = json.Rs;
           let CalSort = deepClone(json.Rs);
           let Rs = json.Rs;
           if (Rs != '') {
             // 排序
-            that.students.CkSort = json.Rs.sort(function (a, b) {
+            that.students.CkSort = CkSort.sort(function (a, b) {
               return b.Ck - a.Ck;
             });
 
@@ -328,7 +328,7 @@ export default {
       height: 0.9rem;
       margin: 0 auto;
       bottom: 0.1rem;
-      background: url("../../src/assets/imgs/rank/titleBg.png");
+      background: url("../../src/assets/imgs/rank/titleBg2.png");
       background-repeat: no-repeat;
       background-position: top center;
       background-size: 100% 100%;

+ 491 - 0
src/views/Rank_old.vue

@@ -0,0 +1,491 @@
+<template>
+  <div class="content">
+    <Headside></Headside>
+    <div class="sumTitle">
+      <div class="lt">
+        <img src="../assets/imgs/rank/fire.svg" alt="">
+        <h5>卡路里排名</h5>
+      </div>
+      <div class="rt">
+        <img src="../assets/imgs/rank/ck.svg" alt="">
+        <h5>CK排名</h5>
+      </div>
+      <div class="md">
+        <span>本次训练排名</span>
+      </div>
+    </div>
+    <div class="listContainer">
+      <div class="lt">
+        <ul>
+          <div class="ltTitle">
+            <span>排名</span>
+            <span>成员</span>
+            <span>卡路里</span>
+          </div>
+          <li v-for="(s,i) in students.CalSort" v-if="i <= 7"
+              :class="[{ 'box animate__animated animate__flipInX': Listate[i].state }]">
+            <div class="gary">
+              <em>{{ i + 1 }}</em>
+              <div class="head">
+                <img :src="s.Head" alt="" v-if="s.Head" :class="[{'boy':s.Sex == 1},{'girl':s.Sex == 2}]">
+                <img src="../static/img/people/flyhead.png" alt="" v-if="!s.Head"
+                     :class="[{'boy':s.Sex == 1},{'girl':s.Sex == 2}]">
+              </div>
+              <span class="names">{{ s.Name }}</span>
+              <span class="glory">
+                <img src="../assets/imgs/rank/cr.png" v-if="i == 0" alt="">
+                <img src="../assets/imgs/rank/mr.png" v-if="i == 1" alt="">
+                <img src="../assets/imgs/rank/pb.png" v-if="i == 2" alt="">
+              </span>
+              <span class="score">
+                 {{ s.Cle|fmtInt }}
+                <!--                  {{ s.Ck|fmtFloat }}-->
+              </span>
+            </div>
+          </li>
+        </ul>
+      </div>
+      <div class="rt">
+        <ul>
+          <div class="ltTitle">
+            <span>排名</span>
+            <span>成员</span>
+            <span>CK</span>
+          </div>
+          <li v-for="(s,i) in students.CkSort" v-if="i <= 7"
+              :class="[{ 'box animate__animated animate__flipInX': Listate[i].state }]">
+            <div class="gary">
+              <em>{{ i + 1 }}</em>
+              <div class="head">
+                <img :src="s.Head" alt="" v-if="s.Head" :class="[{'boy':s.Sex == 1},{'girl':s.Sex == 2}]">
+                <img src="../static/img/people/flyhead.png" alt="" v-if="!s.Head"
+                     :class="[{'boy':s.Sex == 1},{'girl':s.Sex == 2}]">
+              </div>
+              <span class="names">{{ s.Name }}</span>
+              <span class="glory">
+               <img src="../assets/imgs/rank/cr.png" v-if="i == 0" alt="">
+                <img src="../assets/imgs/rank/mr.png" v-if="i == 1" alt="">
+                <img src="../assets/imgs/rank/pb.png" v-if="i == 2" alt="">
+              </span>
+              <span class="score">
+                                  {{ s.Ck|fmtFloat }}
+              </span>
+            </div>
+          </li>
+        </ul>
+      </div>
+    </div>
+    <div class="icons">
+      <img src="../assets/imgs/rank/icons.svg" alt="">
+    </div>
+  </div>
+</template>
+
+<script>
+import Headside from '@/components/Headside'
+import {ClassUserRank} from "@/api/getApiRes";
+
+let qs = require('qs');
+export default {
+  data() {
+    return {
+      eqSn: '30:9C:23:0C:8B:1E',
+      pageStyle: RandomBg(),
+      trueDate: true,//真实数据 true false
+      autoJump: true,//开启自动跳走
+      students: {
+        CkSort: [],
+        CalSort: [],
+      },
+      rankTimer: null,
+      totalTime: '',
+      Listate: [
+        {state: false},
+        {state: false},
+        {state: false},
+        {state: false},
+        {state: false},
+        {state: false},
+        {state: false},
+        {state: false},
+      ],
+    }
+  },
+  mounted() {
+    this.init();
+    this.cardPlay();
+  },
+  watch: {
+    '$route': function (val) {
+      if (val.path == '/rank') {
+        if (this.trueDate) {
+          this.init();
+        } else {
+          // this.rankTimer  = setInterval(() => {
+          this.students.CkSort = fakeNews(5);
+          this.students.CalSort = fakeNews(5);
+          // }, 5000);
+        }
+      } else {
+        clearInterval(this.autoJump);
+        clearInterval(this.rankTimer);
+      }
+    }
+  },
+  beforeDestroy() {
+    clearInterval(this.rankTimer);
+    this.rankTimer = null;
+  },
+  methods: {
+    init() {
+      this.getClassUserRank();
+    },
+    getClassUserRank() {
+      let that = this;
+      let param = {
+        eqSn: localStorage.eqSn
+      };
+      let postdata = qs.stringify(param);
+      ClassUserRank(postdata).then(res => {
+        let json = res;
+        console.log(json);
+        if (json.Code == 0) {
+          let totalTime = 40;
+          let Studenlength = 0;
+          if (json.Rs) {
+            Studenlength = json.Rs.length;
+          }
+          // 根据人数多少显示停留时间
+          if (Studenlength > 3) {
+            totalTime = 60
+          } else {
+            totalTime = 40
+          }
+          this.jumpWait(totalTime);
+          let CkSort = json.Rs;
+          let CalSort = deepClone(json.Rs);
+          let Rs = json.Rs;
+          if (Rs != '') {
+            // 排序
+            that.students.CkSort = CkSort.sort(function (a, b) {
+              return b.Ck - a.Ck;
+            });
+
+            that.students.CalSort = CalSort.sort(function (a, b) {
+              return b.Cle - a.Cle;
+            });
+          }
+        } else {
+          this.students.CkSort = [];
+          this.students.CalSort = [];
+          if (json.Code == '999') {
+            // that.$router.push({path: '/'});
+          } else {
+            // 已出错
+            that.$message.error(json.Memo);
+          }
+        }
+      })
+    },
+    jumpWait(totalTime) {
+      // 倒计时60秒自动关闭
+      let that = this;
+      clearInterval(clock);
+      let clock = window.setInterval(() => {
+        totalTime--;
+        that.totalTime = totalTime;
+        if (parseInt(totalTime) <= 0) {
+          // 前往等待页面
+          that.$router.push({path: '/'}); //todo 调试时关闭跳走
+          // 计时器回收
+          clearInterval(clock);
+        }
+      }, 1000)
+    },
+    cardPlay() {
+      let that = this;
+      // 重置一下状态
+      that.Listate.map(function (t) {
+        t.state = false;
+      })
+      let timeScope = 400;
+      let timeLong;
+      let row;
+      for (let i = 0; i < 8; i++) {
+        timeLong = parseInt(i * timeScope);
+        that.timer = setTimeout(() => {   //设置延迟执行
+          that.Listate[i].state = true;
+        }, timeLong)
+      }
+    },
+  },
+  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);
+      }
+    },
+  },
+  components: {
+    Headside
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@mixin bg {
+  height: 100%;
+  background-color: #333;
+  background-repeat: no-repeat;
+  background-position: top center;
+  background-size: 100% 100%;
+}
+
+@mixin cube {
+  width: 100%;
+  overflow: hidden;
+  display: block;
+  margin: 0 auto;
+}
+
+.content {
+  background: url("../../src/assets/imgs/rank/Training.png");
+  @include bg;
+  .sumTitle {
+    @include cube;
+    width: 80%;
+    height: 0.75rem;
+    margin-top: 0.7rem;
+    overflow: visible;
+
+    h5 {
+      float: left;
+      width: 80%;
+      margin: 0;
+      text-align: center;
+      color: #fff;
+      font-size: 0.5rem;
+      font-weight: bold;
+
+    }
+
+    .lt {
+      width: 50%;
+      height: 0.75rem;
+      float: left;
+      background: url("../../src/assets/imgs/rank/redTitel.png");
+      background-repeat: no-repeat;
+      background-position: top center;
+      background-size: 100%;
+      border-radius: 250rem;
+
+      img {
+        width: 0.51rem;
+        float: left;
+      }
+    }
+
+    .rt {
+      width: 50%;
+      height: 0.75rem;
+      float: right;
+      background: url("../../src/assets/imgs/rank/redTitel.png");
+      background-repeat: no-repeat;
+      background-position: top center;
+      background-size: 100%;
+      border-radius: 250rem;
+
+      img {
+        width: 0.8rem;
+        float: right;
+      }
+
+      h5 {
+        float: right;
+      }
+    }
+
+    .md {
+      position: relative;
+      width: 3rem;
+      height: 0.9rem;
+      margin: 0 auto;
+      bottom: 0.1rem;
+      background: url("../../src/assets/imgs/rank/titleBg.png");
+      background-repeat: no-repeat;
+      background-position: top center;
+      background-size: 100% 100%;
+      line-height: 0.7rem;
+      span {
+        @include cube;
+        position: relative;
+        bottom: 0.65rem;
+        color: #fff;
+        text-align: center;
+        font-size: 0.35rem;
+        font-weight: bold;
+      }
+    }
+  }
+}
+
+.listContainer {
+  @include cube;
+  width: 80%;
+  padding-top: 0.5rem;
+
+  .lt {
+    width: 47%;
+    float: left;
+  }
+
+  .rt {
+    width: 47%;
+    float: right;
+    .ltTitle span {
+      margin-right: 0.3rem;
+    }
+  }
+
+  .ltTitle {
+    @include cube;
+
+    span {
+      float: left;
+      color: #fff;
+      font-size: 0.25rem;
+
+      &:nth-child(1) {
+        margin-right: 1.3rem;
+      }
+
+      &:last-child {
+        float: right;
+      }
+    }
+  }
+
+  ul {
+    @include cube;
+
+    li {
+      @include cube;
+      height: 0.7rem;
+      padding-top: 0.2rem;
+      .gary {
+        @include cube;
+        height: 0.6rem;
+        margin-bottom: 0.3rem;
+        background: url("../assets/imgs/rank/row.png");
+        background-repeat: no-repeat;
+        background-position: top center;
+        background-size: 100% 100%;
+        overflow: visible;
+        border: 1px solid rgba(255, 255, 255, 0.1);
+        border-radius: 250px;
+        border-left: 0;
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0;
+      }
+
+      em {
+        width: 0.6rem;
+        height: 0.6rem;
+        float: left;
+        background: url("../assets/imgs/rank/rowTitle.png");
+        background-repeat: no-repeat;
+        background-position: top center;
+        background-size: 100% 100%;
+        text-align: left;
+        text-indent: 0.1rem;
+        font-size: 0.3rem;
+        font-weight: bold;
+        text-decoration: none;
+        font-style: normal;
+        color: white;
+        line-height: 0.6rem;
+      }
+
+      .head {
+        position: relative;
+        bottom: 0.5rem;
+        float: left;
+        margin-left: 0.3rem;
+
+        img {
+          width: 0.65rem;
+          border-radius: 250rem;
+
+          &.girl {
+            border: 1px solid #EA26EA;
+          }
+
+          &.boy {
+            border: 1px solid #39B6FF;
+          }
+        }
+      }
+
+      .names {
+        float: left;
+        color: white;
+        font-size: 0.3rem;
+        line-height: 0.6rem;
+        margin-left: 0.4rem;
+      }
+
+      .glory {
+        float: left;
+        margin-left: 0.4rem;
+
+        img {
+          float: right;
+          width: 0.6rem;
+          margin-left: 0.2rem;
+          margin-top: 0.1rem;
+        }
+      }
+
+      .score {
+        float: right;
+        color: #FFE61F;
+        font-size: 0.3rem;
+        line-height: 0.6rem;
+        font-family: Arial;
+        font-weight: bold;
+        font-style: italic;
+        text-align: center;
+        padding-right: 0.2rem;
+      }
+    }
+  }
+}
+
+.icons {
+  @include cube;
+  position: absolute;
+  bottom: 0.2rem;
+
+  img {
+    @include cube;
+    width: 40%;
+  }
+}
+</style>

+ 65 - 52
src/views/Wait.vue

@@ -4,7 +4,7 @@
     <div class="container" v-show="page">
       <div class="lt lists">
         <div class="partTitle">
-          卡路里排名
+          卡路里排名
         </div>
         <div class="listTitle">
           <span>排名</span>
@@ -27,15 +27,15 @@
       </div>
       <div class="md">
         <h5 :class="[{'timeTitle weeksTitle':true},{ ' box animate__animated animate__flipInX': Listate[0].state }]">
-          今日
+          本周
         </h5>
         <span class="sub">
               场馆卡路里总消耗
             </span>
         <div class="sumCalc">
           <h5 :class="[{ 'box animate__animated animate__flipInX': Listate[3].state }]">
-            <!--            {{ recordMain[0].Result[0].Values }}</h5>-->
-            {{ TodayCalcValues }}</h5>
+              {{ recordMain[0].Result[0].Values }}</h5>
+            <!-- {{ TodayCalcValues }}</h5> -->
           <em>Kcal</em>
         </div>
         <div class="persons">
@@ -65,7 +65,7 @@
       </div>
       <div class="rt lists">
         <div class="partTitle">
-          CK排名
+          CK排名
         </div>
         <div class="listTitle">
           <span>排名</span>
@@ -90,7 +90,7 @@
     <div class="container" v-show="!page">
       <div class="lt lists">
         <div class="partTitle">
-          卡路里排名
+          卡路里排名
         </div>
         <div class="listTitle">
           <span>排名</span>
@@ -144,7 +144,7 @@
       </div>
       <div class="rt lists">
         <div class="partTitle">
-          CK排名
+          CK排名
         </div>
         <div class="listTitle">
           <span>排名</span>
@@ -188,6 +188,7 @@ import {
 
 import audio from '../static/sound/bell.wav'
 import {SignInPasswordRequest} from "@/grpc/im_pb";
+import { stringify } from 'qs';
 let qs = require('qs');
 export default {
   data() {
@@ -226,22 +227,24 @@ export default {
       CKMonthRank: [],
       Heros: [],
       CKtoper: [],
-      TodayCalcValues: 0,
+      // TodayCalcValues: 0,
     }
   },
   mounted() {
     // test
-    this.$router.push({path: '/rank'});
+    // this.$router.push({path: '/rank'});
     // this.$router.push({path: '/2pkrank'});
-    // this.$router.push({path: '/threepk'});
     // this.$router.push({path: '/3pkrank'});
+    // this.$router.push({path: '/threepk'});
 
+    
     this.init();
-    this.grpcServe();
+    // this.grpcServe();
     if (this.pageTimer) {
+      console.log("[mounted] clearInterval");
       clearInterval(this.pageTimer);
     } else {
-      this.timer = setInterval(() => {
+      this.pageTimer = setInterval(() => {
         this.page = !this.page;
         this.init();
         this.cardPlay();
@@ -250,6 +253,7 @@ export default {
     this.cardPlay();
   },
   destroyed() {
+    console.log("[destroyed] clearInterval");
     clearInterval(this.pageTimer);//页面销毁时清除定时器
     clearInterval(this.waitTimer);//页面销毁时清除定时器
   },
@@ -260,49 +264,50 @@ export default {
         that.init();
         this.cardPlay();
       } else {
+        console.log("[watch route] clearInterval");
         clearInterval(this.pageTimer);
         clearInterval(this.waitTimer);
       }
     }
   },
   methods: {
-    grpcServe() {
-      let that = this;
-      let getRequest = new SignInPasswordRequest();
-      getRequest.setPassword("asdf*123");
-      getRequest.setAuth("admin");
-      getRequest.setExpirationsec(10000);
-      that.client.signInUserCode(getRequest, {}, (err, response) => {
-        that.TodayCalcValues = response.getToken();
-        that.TodayCalcValues = 123456;//不影响展示效果,可注释
-      });
-    },
+    // grpcServe() {
+    //   let that = this;
+    //   let getRequest = new SignInPasswordRequest();
+    //   getRequest.setPassword("asdf*123");
+    //   getRequest.setAuth("admin");
+    //   getRequest.setExpirationsec(10000);
+    //   that.client.signInUserCode(getRequest, {}, (err, response) => {
+    //     that.TodayCalcValues = response.getToken();
+    //     that.TodayCalcValues = 123456;//不影响展示效果,可注释
+    //   });
+    // },
     // 流式传输
-    grpcSteam() {
-      // todo
-      // let getRequest = new FlushDataRequest();
-      // getRequest.setName(text);
-      // let stream = this.client.flushData(getRequest, {
-      //   token:1122334
-      // }, (err, response) => {
-      //   console.log('连接出现问题 err:' + err);
-      //   // that.grpcSrc = response
-      // });
-      //
-      // // 获取数据流
-      // stream.on('data', (response) => {
-      //   that.name = response.getName();
-      //   that.message = response.getHeartrate();
-      //   console.log('已推送数据');
-      // });
-      //
-      // // 报错处理
-      // stream.on('error', (err) => {
-      //   console.log('当前推送错误 err:' + err);
-      //   console.log(`Unexpected stream error: code = ${err.code}` +
-      //       `, message = "${err.message}"`);
-      // });
-    },
+    // grpcSteam() {
+    //   // todo
+    //   // let getRequest = new FlushDataRequest();
+    //   // getRequest.setName(text);
+    //   // let stream = this.client.flushData(getRequest, {
+    //   //   token:1122334
+    //   // }, (err, response) => {
+    //   //   console.log('连接出现问题 err:' + err);
+    //   //   // that.grpcSrc = response
+    //   // });
+    //   //
+    //   // // 获取数据流
+    //   // stream.on('data', (response) => {
+    //   //   that.name = response.getName();
+    //   //   that.message = response.getHeartrate();
+    //   //   console.log('已推送数据');
+    //   // });
+    //   //
+    //   // // 报错处理
+    //   // stream.on('error', (err) => {
+    //   //   console.log('当前推送错误 err:' + err);
+    //   //   console.log(`Unexpected stream error: code = ${err.code}` +
+    //   //       `, message = "${err.message}"`);
+    //   // });
+    // },
     playBell() {
       this.bellState = !this.bellState
     },
@@ -313,6 +318,7 @@ export default {
       this.GetUserRankingQuery();
     },
     cardPlay() {
+      // console.log("cardPlay run!");
       let that = this;
       // 重置一下状态
       that.Listate.map(function (t) {
@@ -336,6 +342,7 @@ export default {
       let postdata = qs.stringify(param);
       getClassStat(postdata).then(res => {
         let json = res;
+        // console.log("[Wait] getClassStat: " + JSON.stringify(json));
         if (json.Code == 0) {
           // 上课了
           if (json.ClassOn == 1) {
@@ -370,6 +377,7 @@ export default {
       let postdata = qs.stringify(param);
       HerosRankingQuery(postdata).then(res => {
         let json = res;
+        // console.log("[Wait] HerosRankingQuery: " + JSON.stringify(json));
         if (json.Code == 0) {
           that.Heros = json.Rs[0].Result;
           that.CKtoper = json.Rs[1].Result;
@@ -389,6 +397,7 @@ export default {
       let postdata = qs.stringify(param);
       CalorieStatsQuery(postdata).then(res => {
         let json = res;
+        // console.log("[Wait] CalorieStatsQuery: " + JSON.stringify(json));
         if (json.Code == 0) {
           that.recordMain = json.Rs;
         } else {
@@ -420,12 +429,15 @@ export default {
       let postdata = qs.stringify(param);
       UserRankingQuery(postdata).then(res => {
         let json = res;
+        // console.log("UserRankingQuery:" + JSON.stringify(json));
         if (json.Code == 0) {
           // that.rt = json.Rs;
-          that.calcTodayRank = json.Rs[2].Result;
-          that.CKTodayRank = json.Rs[3].Result;
-          that.calcMouthRank = json.Rs[0].Result;
-          that.CKMonthRank = json.Rs[1].Result;
+          if (json.Rs != null) {
+            that.calcTodayRank = json.Rs[2].Result;
+            that.CKTodayRank = json.Rs[3].Result;
+            that.calcMouthRank = json.Rs[0].Result;
+            that.CKMonthRank = json.Rs[1].Result;
+          }
         } else {
           if (json.Code == 4002) {
           } else {
@@ -484,6 +496,7 @@ $yellow: #FFEB50;
 .container {
   @include cube;
   width: 96%;
+  min-height: 90%;
 
   .lt {
     width: 30%;

+ 1 - 1
vue.config.js

@@ -43,7 +43,7 @@ module.exports = {
         }
     },
     // 输出文件目录
-    outputDir: 'D:\\wwwroot\\flyLong\\hbuild\\GoAllOutTv\\build',
+    outputDir: 'D:\\Work\\SportFitness\\TV2\\build',
     publicPath: './',
     productionSourceMap: false,
 };