Преглед изворни кода

1.原来的排名页面改为等待页面
2.等待页面按照开课类型跳转不同的课程页面
3.团课结束后跳转专属的排名页面
4.排名页面的渲染和1分钟后跳入等待页面

Changpeng Duan пре 5 година
родитељ
комит
540553888b

+ 172 - 153
tv/.idea/workspace.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="BookmarkManager">
-    <bookmark url="file://$PROJECT_DIR$/src/api/getApiRes.js" line="72" />
+    <bookmark url="file://$PROJECT_DIR$/src/api/getApiRes.js" line="77" />
   </component>
   <component name="BranchesTreeState">
     <expand>
@@ -23,16 +23,22 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="c813a37b-038b-4bb1-a925-c03a432a7638" name="Default Changelist" comment="">
-      <change afterPath="$PROJECT_DIR$/src/api/wifi.png" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/views/gropePk.vue" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/api/test.js" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/assets/css/bg.css" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/static/img/rank/king1.svg" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/static/img/rank/king2.svg" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/static/img/rank/king3.svg" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/static/img/rank/recordIcon.svg" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/views/Wait.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/Global.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/Global.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/api/getApiRes.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/getApiRes.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/router/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/router/index.js" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/views/Index.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/Index.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/static/img/rank/boy.png" beforeDir="false" afterPath="$PROJECT_DIR$/src/static/img/wait/boy.png" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/static/img/rank/girl.png" beforeDir="false" afterPath="$PROJECT_DIR$/src/static/img/wait/girl.png" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/views/Main.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/Main.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/views/Rank.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/Rank.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/views/pk.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/pk.vue" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/vue.config.js" beforeDir="false" afterPath="$PROJECT_DIR$/vue.config.js" afterDir="false" />
     </list>
     <ignored path="$PROJECT_DIR$/.tmp/" />
     <ignored path="$PROJECT_DIR$/temp/" />
@@ -44,98 +50,51 @@
     <option name="LAST_RESOLUTION" value="IGNORE" />
   </component>
   <component name="FileEditorManager">
-    <splitter split-orientation="horizontal" split-proportion="0.5">
-      <split-first>
-        <leaf SIDE_TABS_SIZE_LIMIT_KEY="375">
-          <file pinned="false" current-in-tab="false">
-            <entry file="file://$PROJECT_DIR$/src/views/pk.vue">
-              <provider selected="true" editor-type-id="text-editor">
-                <state relative-caret-position="846">
-                  <caret line="957" column="18" selection-start-line="957" selection-start-column="18" selection-end-line="957" selection-end-column="18" />
-                </state>
-              </provider>
-            </entry>
-          </file>
-          <file pinned="false" current-in-tab="false">
-            <entry file="file://$PROJECT_DIR$/src/views/Main.vue">
-              <provider selected="true" editor-type-id="text-editor">
-                <state relative-caret-position="548">
-                  <caret line="931" column="5" lean-forward="true" selection-start-line="928" selection-start-column="2" selection-end-line="931" selection-end-column="5" />
-                  <folding>
-                    <element signature="e#5088#5132#0" expanded="true" />
-                  </folding>
-                </state>
-              </provider>
-            </entry>
-          </file>
-          <file pinned="false" current-in-tab="true">
-            <entry file="file://$PROJECT_DIR$/src/views/Index.vue">
-              <provider selected="true" editor-type-id="text-editor">
-                <state relative-caret-position="605">
-                  <caret line="65" column="90" lean-forward="true" selection-start-line="65" selection-start-column="90" selection-end-line="65" selection-end-column="90" />
-                  <folding>
-                    <element signature="e#225#333#0" expanded="true" />
-                  </folding>
-                </state>
-              </provider>
-            </entry>
-          </file>
-          <file pinned="false" current-in-tab="false">
-            <entry file="file://$PROJECT_DIR$/src/api/getApiRes.js">
-              <provider selected="true" editor-type-id="text-editor">
-                <state relative-caret-position="929">
-                  <caret line="97" column="51" selection-start-line="97" selection-start-column="15" selection-end-line="97" selection-end-column="51" />
-                  <folding>
-                    <element signature="e#0#26#0" expanded="true" />
-                  </folding>
-                </state>
-              </provider>
-            </entry>
-          </file>
-        </leaf>
-      </split-first>
-      <split-second>
-        <leaf>
-          <file pinned="false" current-in-tab="true">
-            <entry file="file://$PROJECT_DIR$/src/views/pk.vue">
-              <provider selected="true" editor-type-id="text-editor">
-                <state>
-                  <caret line="271" selection-start-line="271" selection-end-line="271" />
-                </state>
-              </provider>
-            </entry>
-          </file>
-        </leaf>
-      </split-second>
-    </splitter>
+    <leaf>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/views/Rank.vue">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="2147">
+              <caret line="320" column="8" selection-start-line="320" selection-start-column="8" selection-end-line="320" selection-end-column="8" />
+              <folding>
+                <element signature="e#2820#2864#0" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/views/Wait.vue">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="653">
+              <caret line="328" column="58" selection-start-line="328" selection-start-column="58" selection-end-line="328" selection-end-column="58" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/api/test.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="336">
+              <caret line="357" selection-start-line="357" selection-end-line="359" selection-end-column="5" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
   </component>
   <component name="FileTemplateManagerImpl">
     <option name="RECENT_TEMPLATES">
       <list>
-        <option value="JavaScript File" />
-        <option value="CSS File" />
         <option value="HTML File" />
+        <option value="JavaScript File" />
         <option value="Vue Single File Component" />
+        <option value="CSS File" />
       </list>
     </option>
   </component>
   <component name="FindInProjectRecents">
     <findStrings>
-      <find>pages</find>
-      <find>trueDate</find>
-      <find>pageStyle</find>
-      <find>IndexContainer</find>
-      <find>this.rt</find>
-      <find>push</find>
-      <find>contentStyleObj</find>
-      <find>bottom</find>
-      <find>headImg</find>
-      <find>.dghead img</find>
-      <find>font-family</find>
-      <find>recordMain</find>
-      <find>Result</find>
-      <find>font-family: &quot;PingFang SC&quot;;</find>
-      <find>level</find>
       <find>border</find>
       <find>centerLi</find>
       <find>.two</find>
@@ -151,11 +110,27 @@
       <find>bottomLi .step</find>
       <find>.bottomLi span</find>
       <find>two</find>
+      <find>getUserListInfo</find>
+      <find>getHello</find>
+      <find>eqsn</find>
+      <find>param</find>
+      <find>ClassStat</find>
+      <find>getClassStat</find>
+      <find>UserListInfo</find>
+      <find>pageStyle</find>
+      <find>rank</find>
+      <find>fmt</find>
+      <find>then</find>
+      <find>fmtFloat</find>
+      <find>eqSn</find>
+      <find>ClassUserRank</find>
+      <find>ClassStatQuery</find>
     </findStrings>
     <replaceStrings>
       <replace>0.2rem</replace>
       <replace>parseInt(res.length)</replace>
       <replace>font-family: vista;</replace>
+      <replace>eqSn</replace>
     </replaceStrings>
   </component>
   <component name="Git.Settings">
@@ -175,18 +150,21 @@
         <option value="$PROJECT_DIR$/src/main.js" />
         <option value="$PROJECT_DIR$/test.html" />
         <option value="$PROJECT_DIR$/src/components/newRecord.vue" />
-        <option value="$PROJECT_DIR$/src/Global.js" />
         <option value="$PROJECT_DIR$/src/Mock/index.js" />
         <option value="$PROJECT_DIR$/src/App.vue" />
         <option value="$PROJECT_DIR$/src/components/Headside.vue" />
-        <option value="$PROJECT_DIR$/src/views/Rank.vue" />
         <option value="$PROJECT_DIR$/src/views/gropePk.vue" />
-        <option value="$PROJECT_DIR$/src/router/index.js" />
         <option value="$PROJECT_DIR$/vue.config.js" />
-        <option value="$PROJECT_DIR$/src/views/Main.vue" />
-        <option value="$PROJECT_DIR$/src/views/pk.vue" />
-        <option value="$PROJECT_DIR$/src/api/getApiRes.js" />
         <option value="$PROJECT_DIR$/src/views/Index.vue" />
+        <option value="$PROJECT_DIR$/src/api/test.js" />
+        <option value="$PROJECT_DIR$/src/Global.js" />
+        <option value="$PROJECT_DIR$/src/api/getApiRes.js" />
+        <option value="$PROJECT_DIR$/src/router/index.js" />
+        <option value="$PROJECT_DIR$/src/views/pk.vue" />
+        <option value="$PROJECT_DIR$/src/assets/css/bg.css" />
+        <option value="$PROJECT_DIR$/src/views/Main.vue" />
+        <option value="$PROJECT_DIR$/src/views/Rank.vue" />
+        <option value="$PROJECT_DIR$/src/views/Wait.vue" />
       </list>
     </option>
   </component>
@@ -197,10 +175,10 @@
     <auto-save>true</auto-save>
   </component>
   <component name="ProjectFrameBounds" extendedState="6">
-    <option name="x" value="-2050" />
-    <option name="y" value="165" />
-    <option name="width" value="1936" />
-    <option name="height" value="1066" />
+    <option name="x" value="-2568" />
+    <option name="y" value="-8" />
+    <option name="width" value="1296" />
+    <option name="height" value="1395" />
   </component>
   <component name="ProjectId" id="1jXXjXdwK5v7WohMBoZDModntXR" />
   <component name="ProjectLevelVcsManager" settingsEditedManually="true">
@@ -212,6 +190,7 @@
       <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
+      <pane id="Scope" />
       <pane id="ProjectPane">
         <subPane>
           <expand>
@@ -228,13 +207,14 @@
               <item name="tv" type="b2602c69:ProjectViewProjectNode" />
               <item name="tv" type="462c0819:PsiDirectoryNode" />
               <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="api" type="462c0819:PsiDirectoryNode" />
+              <item name="static" type="462c0819:PsiDirectoryNode" />
             </path>
             <path>
               <item name="tv" type="b2602c69:ProjectViewProjectNode" />
               <item name="tv" type="462c0819:PsiDirectoryNode" />
               <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="router" type="462c0819:PsiDirectoryNode" />
+              <item name="static" type="462c0819:PsiDirectoryNode" />
+              <item name="img" type="462c0819:PsiDirectoryNode" />
             </path>
             <path>
               <item name="tv" type="b2602c69:ProjectViewProjectNode" />
@@ -246,7 +226,6 @@
           <select />
         </subPane>
       </pane>
-      <pane id="Scope" />
     </panes>
   </component>
   <component name="ProjectViewState">
@@ -273,15 +252,15 @@
     <property name="vue.rearranger.settings.migration" value="true" />
   </component>
   <component name="RecentsManager">
-    <key name="MoveFile.RECENT_KEYS">
-      <recent name="D:\wwwroot\flyLong\tv\src\static\img\bg" />
-      <recent name="D:\wwwroot\flyLong\tv\src\static\img" />
-    </key>
     <key name="CopyFile.RECENT_KEYS">
+      <recent name="D:\wwwroot\flyLong\tv\src\static\img\ranks" />
       <recent name="D:\wwwroot\flyLong\tv\src\api" />
       <recent name="D:\wwwroot\flyLong\tv\src\static\img\bg" />
       <recent name="D:\wwwroot\flyLong\tv\src\static\img\people" />
       <recent name="D:\wwwroot\flyLong\tv\src\static\img\newRecord" />
+    </key>
+    <key name="MoveFile.RECENT_KEYS">
+      <recent name="D:\wwwroot\flyLong\tv\src\static\img\bg" />
       <recent name="D:\wwwroot\flyLong\tv\src\static\img" />
     </key>
   </component>
@@ -319,8 +298,8 @@
       <method v="2" />
     </configuration>
     <list>
-      <item itemvalue="npm.serve" />
       <item itemvalue="npm.build" />
+      <item itemvalue="npm.serve" />
     </list>
   </component>
   <component name="SpellCheckerSettings" BundledDictionaries="0" Folders="0" CustomDictionaries="0" Dictionaries="0" CorrectionsLimit="5" DefaultDictionary="application-level" UseSingleDictionary="true" />
@@ -344,7 +323,9 @@
       <workItem from="1604540536502" duration="646000" />
       <workItem from="1604541901536" duration="160559000" />
       <workItem from="1605406240238" duration="51039000" />
-      <workItem from="1605668164423" duration="14422000" />
+      <workItem from="1605668164423" duration="15041000" />
+      <workItem from="1605747566783" duration="13000" />
+      <workItem from="1605775278675" duration="13563000" />
     </task>
     <task id="LOCAL-00001" summary="test web">
       <created>1605431368250</created>
@@ -402,17 +383,24 @@
       <option name="project" value="LOCAL" />
       <updated>1605582755136</updated>
     </task>
-    <option name="localTasksCounter" value="9" />
+    <task id="LOCAL-00009" summary="auto upload">
+      <created>1605696168373</created>
+      <option name="number" value="00009" />
+      <option name="presentableId" value="LOCAL-00009" />
+      <option name="project" value="LOCAL" />
+      <updated>1605696168373</updated>
+    </task>
+    <option name="localTasksCounter" value="10" />
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="229460000" />
+    <option name="totallyTimeSpent" value="243655000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="-2568" y="-8" width="2576" height="1395" extended-state="6" />
     <editor active="true" />
     <layout>
-      <window_info content_ui="combo" id="Project" order="0" weight="0.18301435" />
+      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.015151516" />
       <window_info id="Structure" order="1" side_tool="true" weight="0.24973656" />
       <window_info id="Favorites" order="2" side_tool="true" weight="0.32982087" />
       <window_info id="npm" order="3" side_tool="true" />
@@ -485,7 +473,8 @@
     <MESSAGE value="show new style" />
     <MESSAGE value="api by corss" />
     <MESSAGE value="del unuse" />
-    <option name="LAST_COMMIT_MESSAGE" value="del unuse" />
+    <MESSAGE value="auto upload" />
+    <option name="LAST_COMMIT_MESSAGE" value="auto upload" />
   </component>
   <component name="WindowStateProjectService">
     <state x="-1830" y="274" width="1099" height="859" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1604022799787">
@@ -606,20 +595,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/test.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="546">
-          <caret line="26" column="7" lean-forward="true" selection-start-line="26" selection-start-column="7" selection-end-line="26" selection-end-column="7" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/Global.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="441">
-          <caret line="21" column="23" lean-forward="true" selection-start-line="21" selection-start-column="23" selection-end-line="21" selection-end-column="23" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/libs/rem.js">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="63">
@@ -648,16 +623,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/router/index.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="701">
-          <caret line="52" column="29" selection-start-line="52" selection-start-column="29" selection-end-line="52" selection-end-column="29" />
-          <folding>
-            <element signature="e#0#21#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/views/gropePk.vue">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="42">
@@ -665,13 +630,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/views/Rank.vue">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="359">
-          <caret line="73" column="82" selection-start-line="73" selection-start-column="79" selection-end-line="73" selection-end-column="82" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/vue.config.js">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="756">
@@ -690,42 +648,103 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/views/Main.vue">
+    <entry file="file://$PROJECT_DIR$/test.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="546">
+          <caret line="26" column="7" lean-forward="true" selection-start-line="26" selection-start-column="7" selection-end-line="26" selection-end-column="7" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/views/Index.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="605">
+          <caret line="65" column="90" selection-start-line="65" selection-start-column="90" selection-end-line="65" selection-end-column="90" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/Global.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="887">
+          <caret line="390" selection-start-line="390" selection-end-line="390" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/assets/css/main.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-630" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/views/pk.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="509">
+          <caret line="321" selection-start-line="321" selection-end-line="321" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/router/index.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="548">
-          <caret line="931" column="5" lean-forward="true" selection-start-line="928" selection-start-column="2" selection-end-line="931" selection-end-column="5" />
+        <state relative-caret-position="533">
+          <caret line="41" column="50" selection-start-line="41" selection-start-column="50" selection-end-line="41" selection-end-column="50" />
           <folding>
-            <element signature="e#5088#5132#0" expanded="true" />
+            <element signature="e#0#21#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/views/pk.vue">
+    <entry file="file://$PROJECT_DIR$/src/assets/css/bg.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1076">
+          <caret line="56" column="25" selection-start-line="56" selection-start-column="25" selection-end-line="56" selection-end-column="25" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/static/img/rank/recordIcon.svg">
+      <provider selected="true" editor-type-id="images" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/views/Main.vue">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="846">
-          <caret line="957" column="18" selection-start-line="957" selection-start-column="18" selection-end-line="957" selection-end-column="18" />
+        <state relative-caret-position="863">
+          <caret line="352" column="66" lean-forward="true" selection-start-line="352" selection-start-column="27" selection-end-line="352" selection-end-column="66" />
+          <folding>
+            <element signature="e#5168#5212#0" expanded="true" />
+            <element signature="e#9545#10485#0" />
+          </folding>
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/src/api/getApiRes.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="929">
-          <caret line="97" column="51" selection-start-line="97" selection-start-column="15" selection-end-line="97" selection-end-column="51" />
+        <state relative-caret-position="573">
+          <caret line="96" column="29" selection-start-line="96" selection-start-column="16" selection-end-line="96" selection-end-column="29" />
           <folding>
             <element signature="e#0#26#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/views/Index.vue">
+    <entry file="file://$PROJECT_DIR$/src/views/Rank.vue">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="605">
-          <caret line="65" column="90" lean-forward="true" selection-start-line="65" selection-start-column="90" selection-end-line="65" selection-end-column="90" />
+        <state relative-caret-position="2147">
+          <caret line="320" column="8" selection-start-line="320" selection-start-column="8" selection-end-line="320" selection-end-column="8" />
           <folding>
-            <element signature="e#225#333#0" expanded="true" />
+            <element signature="e#2820#2864#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/src/api/test.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="336">
+          <caret line="357" selection-start-line="357" selection-end-line="359" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/views/Wait.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="653">
+          <caret line="328" column="58" selection-start-line="328" selection-start-column="58" selection-end-line="328" selection-end-column="58" />
+        </state>
+      </provider>
+    </entry>
   </component>
 </project>

+ 3 - 0
tv/src/Global.js

@@ -8,6 +8,9 @@ companyInfo = {
 // headapi = process.env.NODE_ENV === 'development' ? '/api/' : '../';
 headapi = 'http://192.168.0.110:8080/';//从郑伟那里获得数据源
 
+// 七牛云imgsrc
+imgUrl = "http://qjzpcd34v.hb-bkt.clouddn.com";
+
 
 // 常用选项
 globalQuipState = function () {

+ 17 - 3
tv/src/api/getApiRes.js

@@ -21,13 +21,14 @@ export function getCheckUpdate(postdata) {
 
 // 调用的api改写成方法
 export function getUserList(postdata) {
-    let url = headapi + 'getUserList';
+    let url = headapi + 'UserList';
     return getApiBasic(url, postdata);
 }
 
 // 上课中学生信息
+// 11-20 竞技课用GroupNo来分组
 export function getHello(postdata) {
-    let url = headapi + 'getUserListInfo';
+    let url = headapi + 'UserListInfo';
     return getApiBasic(url, postdata);
 }
 
@@ -38,8 +39,12 @@ export function getHello(postdata) {
 // }
 
 // 是否开始上课的状态
+// ClassType为课程类型
+// 1:团课
+// 2:竞技课PK
+// 3:私教课
 export function getClassStat(postdata) {
-    let url = headapi + 'getClassStat';
+    let url = headapi + 'ClassStatQuery';
     return getApiBasic(url, postdata);
 }
 
@@ -87,6 +92,15 @@ export function UserRankingQuery(postdata) {
     return getApiBasic(url, postdata);
 }
 
+// 11-20 新增
+// 课堂记录排名 下课后查询当堂课程人员排名
+export function ClassUserRank(postdata) {
+    let url = headapi + 'ClassUserRank';
+    return getApiBasic(url, postdata);
+}
+
+
+
 
 // 用查询最新wgt 般本
 export function QueryVueFramework(postdata) {

+ 393 - 0
tv/src/api/test.js

@@ -0,0 +1,393 @@
+新增 - 课堂记录排名
+/ ClassUserRank
+下课后查询当堂课程人员排名
+{
+    "Code"
+:
+    "0", "Memo"
+:
+    "Success", "Rs"
+:
+    {
+        "CkSort"
+    :
+        [{
+            "DuId": 178,
+            "HrId": 11,
+            "PlanId": 9,
+            "UserId": 16,
+            "SvId": 1,
+            "EqSn": "",
+            "Sn": "22731",
+            "UserMd5": "郑伟",
+            "GroupNo": 0,
+            "AvgHr": 75,
+            "MaxHr": 138,
+            "realHr": 73,
+            "Steps": 0,
+            "Cle": 465.31564306429306,
+            "Ck": 50.436683654785156,
+            "BeginTime": 1605503891,
+            "EndTime": 1605768133,
+            "Name": "郑伟",
+            "Age": 26,
+            "Height": 172,
+            "Weight": 76.7,
+            "Sex": 1,
+            "StaticHr": 60,
+            "Head": "http://192.168.0.2/zw.png",
+            "vo2Max": 0.0,
+            "PureCalorieNoVo2": 259.01474862971804,
+            "activePercent": 10,
+            "bmrMSjRmrcb": 78.69583333333334,
+            "lastUpdateTime": 1605775599442,
+            "lastPushDataTime": 1605775599515,
+            "isOver": false,
+            "isAlive": true,
+            "queuePushData": [],
+            "queueHeartRate": [{"heartRate": 73, "rcvTime": 1605775599442}]
+        }, {
+            "DuId": 175,
+            "HrId": 15,
+            "PlanId": 16,
+            "UserId": 13,
+            "SvId": 1,
+            "EqSn": "",
+            "Sn": "88888",
+            "UserMd5": "高超",
+            "GroupNo": 0,
+            "AvgHr": 0,
+            "MaxHr": 0,
+            "realHr": 0,
+            "Steps": 0,
+            "Cle": 12.341233,
+            "Ck": 45.646767,
+            "BeginTime": 1605503891,
+            "EndTime": 0,
+            "Name": "高超",
+            "Age": 30,
+            "Height": 172,
+            "Weight": 80.0,
+            "Sex": 1,
+            "StaticHr": 60,
+            "Head": "http://192.168.0.2/gc.png",
+            "vo2Max": 0.0,
+            "PureCalorieNoVo2": 0.0,
+            "activePercent": 0,
+            "bmrMSjRmrcb": 0.0,
+            "lastUpdateTime": 0,
+            "lastPushDataTime": 0,
+            "isOver": false,
+            "isAlive": true,
+            "queuePushData": [],
+            "queueHeartRate": []
+        }, {
+            "DuId": 179,
+            "HrId": 17,
+            "PlanId": 9,
+            "UserId": 17,
+            "SvId": 1,
+            "EqSn": "",
+            "Sn": "22732",
+            "UserMd5": "大华",
+            "GroupNo": 0,
+            "AvgHr": 0,
+            "MaxHr": 0,
+            "realHr": 0,
+            "Steps": 0,
+            "Cle": 42.34231,
+            "Ck": 34.53451,
+            "BeginTime": 1605503891,
+            "EndTime": 0,
+            "Name": "大华",
+            "Age": 26,
+            "Height": 172,
+            "Weight": 76.7,
+            "Sex": 1,
+            "StaticHr": 65,
+            "Head": "http://192.168.0.2/zw.png",
+            "vo2Max": 0.0,
+            "PureCalorieNoVo2": 0.0,
+            "activePercent": 0,
+            "bmrMSjRmrcb": 0.0,
+            "lastUpdateTime": 0,
+            "lastPushDataTime": 0,
+            "isOver": false,
+            "isAlive": true,
+            "queuePushData": [],
+            "queueHeartRate": []
+        }]
+    }
+,
+    "CalSort"
+:
+    [{
+        "DuId": 178,
+        "HrId": 11,
+        "PlanId": 9,
+        "UserId": 16,
+        "SvId": 1,
+        "EqSn": "",
+        "Sn": "22731",
+        "UserMd5": "郑伟",
+        "GroupNo": 0,
+        "AvgHr": 75,
+        "MaxHr": 138,
+        "realHr": 73,
+        "Steps": 0,
+        "Cle": 465.31564306429306,
+        "Ck": 50.436683654785156,
+        "BeginTime": 1605503891,
+        "EndTime": 1605768133,
+        "Name": "郑伟",
+        "Age": 26,
+        "Height": 172,
+        "Weight": 76.7,
+        "Sex": 1,
+        "StaticHr": 60,
+        "Head": "http://192.168.0.2/zw.png",
+        "vo2Max": 0.0,
+        "PureCalorieNoVo2": 259.01474862971804,
+        "activePercent": 10,
+        "bmrMSjRmrcb": 78.69583333333334,
+        "lastUpdateTime": 1605775599442,
+        "lastPushDataTime": 1605775599515,
+        "isOver": false,
+        "isAlive": true,
+        "queuePushData": [],
+        "queueHeartRate": [{"heartRate": 73, "rcvTime": 1605775599442}]
+    }, {
+        "DuId": 179,
+        "HrId": 17,
+        "PlanId": 9,
+        "UserId": 17,
+        "SvId": 1,
+        "EqSn": "",
+        "Sn": "22732",
+        "UserMd5": "大华",
+        "GroupNo": 0,
+        "AvgHr": 0,
+        "MaxHr": 0,
+        "realHr": 0,
+        "Steps": 0,
+        "Cle": 42.34231,
+        "Ck": 34.53451,
+        "BeginTime": 1605503891,
+        "EndTime": 0,
+        "Name": "大华",
+        "Age": 26,
+        "Height": 172,
+        "Weight": 76.7,
+        "Sex": 1,
+        "StaticHr": 65,
+        "Head": "http://192.168.0.2/zw.png",
+        "vo2Max": 0.0,
+        "PureCalorieNoVo2": 0.0,
+        "activePercent": 0,
+        "bmrMSjRmrcb": 0.0,
+        "lastUpdateTime": 0,
+        "lastPushDataTime": 0,
+        "isOver": false,
+        "isAlive": true,
+        "queuePushData": [],
+        "queueHeartRate": []
+    }, {
+        "DuId": 175,
+        "HrId": 15,
+        "PlanId": 16,
+        "UserId": 13,
+        "SvId": 1,
+        "EqSn": "",
+        "Sn": "88888",
+        "UserMd5": "高超",
+        "GroupNo": 0,
+        "AvgHr": 0,
+        "MaxHr": 0,
+        "realHr": 0,
+        "Steps": 0,
+        "Cle": 12.341233,
+        "Ck": 45.646767,
+        "BeginTime": 1605503891,
+        "EndTime": 0,
+        "Name": "高超",
+        "Age": 30,
+        "Height": 172,
+        "Weight": 80.0,
+        "Sex": 1,
+        "StaticHr": 60,
+        "Head": "http://192.168.0.2/gc.png",
+        "vo2Max": 0.0,
+        "PureCalorieNoVo2": 0.0,
+        "activePercent": 0,
+        "bmrMSjRmrcb": 0.0,
+        "lastUpdateTime": 0,
+        "lastPushDataTime": 0,
+        "isOver": false,
+        "isAlive": true,
+        "queuePushData": [],
+        "queueHeartRate": []
+    }]
+}
+
+修改接口名getUserListInfo为UserListInfo
+竞技课用GroupNo来分组
+返回值不变
+{
+    "Code"
+:
+    "0", "Memo"
+:
+    "Success", "Rs"
+:
+    [{
+        "DuId": 178,
+        "HrId": 11,
+        "PlanId": 9,
+        "UserId": 16,
+        "SvId": 1,
+        "EqSn": "",
+        "Sn": "22731",
+        "UserMd5": "郑伟",
+        "GroupNo": 0,
+        "AvgHr": 75,
+        "MaxHr": 138,
+        "realHr": 78,
+        "Steps": 0,
+        "Cle": 470.7780018836046,
+        "Ck": 50.507904052734375,
+        "BeginTime": 1605503891,
+        "EndTime": 1605768133,
+        "Name": "郑伟",
+        "Age": 26,
+        "Height": 172,
+        "Weight": 76.7,
+        "Sex": 1,
+        "StaticHr": 60,
+        "Head": "http://192.168.0.2/zw.png",
+        "vo2Max": 0.0,
+        "PureCalorieNoVo2": 262.4222718008815,
+        "activePercent": 13,
+        "bmrMSjRmrcb": 78.69583333333334,
+        "lastUpdateTime": 1605775732977,
+        "lastPushDataTime": 1605775732028,
+        "isOver": false,
+        "isAlive": true,
+        "queuePushData": [{
+            "heartRate": 78,
+            "rcvTime": 1605775731927,
+            "lastRcvTime": 0,
+            "calories": 0.0
+        }, {"heartRate": 78, "rcvTime": 1605775732674, "lastRcvTime": 0, "calories": 0.0}],
+        "queueHeartRate": [{"heartRate": 78, "rcvTime": 1605775732977}]
+    }, {
+        "DuId": 179,
+        "HrId": 17,
+        "PlanId": 9,
+        "UserId": 17,
+        "SvId": 1,
+        "EqSn": "",
+        "Sn": "22732",
+        "UserMd5": "大华",
+        "GroupNo": 0,
+        "AvgHr": 0,
+        "MaxHr": 0,
+        "realHr": 0,
+        "Steps": 0,
+        "Cle": 42.34231,
+        "Ck": 34.53451,
+        "BeginTime": 1605503891,
+        "EndTime": 0,
+        "Name": "大华",
+        "Age": 26,
+        "Height": 172,
+        "Weight": 76.7,
+        "Sex": 1,
+        "StaticHr": 65,
+        "Head": "http://192.168.0.2/zw.png",
+        "vo2Max": 0.0,
+        "PureCalorieNoVo2": 0.0,
+        "activePercent": 0,
+        "bmrMSjRmrcb": 0.0,
+        "lastUpdateTime": 0,
+        "lastPushDataTime": 0,
+        "isOver": false,
+        "isAlive": true,
+        "queuePushData": [],
+        "queueHeartRate": []
+    }, {
+        "DuId": 175,
+        "HrId": 15,
+        "PlanId": 16,
+        "UserId": 13,
+        "SvId": 1,
+        "EqSn": "",
+        "Sn": "88888",
+        "UserMd5": "高超",
+        "GroupNo": 0,
+        "AvgHr": 0,
+        "MaxHr": 0,
+        "realHr": 0,
+        "Steps": 0,
+        "Cle": 12.341233,
+        "Ck": 45.646767,
+        "BeginTime": 1605503891,
+        "EndTime": 0,
+        "Name": "高超",
+        "Age": 30,
+        "Height": 172,
+        "Weight": 80.0,
+        "Sex": 1,
+        "StaticHr": 60,
+        "Head": "http://192.168.0.2/gc.png",
+        "vo2Max": 0.0,
+        "PureCalorieNoVo2": 0.0,
+        "activePercent": 0,
+        "bmrMSjRmrcb": 0.0,
+        "lastUpdateTime": 0,
+        "lastPushDataTime": 0,
+        "isOver": false,
+        "isAlive": true,
+        "queuePushData": [],
+        "queueHeartRate": []
+    }]
+}
+
+修改接口查询当前课程状态
+/ ClassStatQuery
+增加了课程返回类型,其中ClassType为课程类型
+1:团课
+2:竞技课PK
+3:私教课
+{
+    "Code"
+:
+    "0", "Memo"
+:
+    "Success", "Rs"
+:
+    [
+        {
+            "PlanId": 9,
+            "ShopId": 1,
+            "SvId": 1,
+            "PlanName": "2",
+            "Status": 2,
+            "BeginTime": 1605749000,
+            "EndTime": 0,
+            "ClassType": 1,
+            "DuMd5": "1a2fecd549d319af88dad82f15311b5f"
+        },
+        {
+            "PlanId": 16,
+            "ShopId": 1,
+            "SvId": 1,
+            "PlanName": "3",
+            "Status": 3,
+            "BeginTime": 1605749000,
+            "EndTime": 0,
+            "ClassType": 1,
+            "DuMd5": "3aaeceb9581a0ec33c2ae36fef37d09b"
+        }
+    ]
+}
+

+ 59 - 0
tv/src/assets/css/bg.css

@@ -0,0 +1,59 @@
+.bgStyle1 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg_1.png");
+    background-size: 100%;
+    background-repeat: no-repeat;
+}
+
+.bgStyle2 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg_2.png");
+    background-size: 100%;
+    background-repeat: no-repeat;
+}
+
+.bgStyle3 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg_3.png");
+    background-size: 100%;
+    background-repeat: no-repeat;
+}
+
+.bgStyle4 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg_4.png");
+    background-size: 100%;
+    background-repeat: no-repeat;
+}
+
+.bgStyle5 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg_5.png");
+    background-size: 100%;
+    background-repeat: no-repeat;
+}
+
+.bgStyle6 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg_6.png");
+    background-size: 100%;
+    background-repeat: no-repeat;
+}
+
+.bgStyle7 {
+    background-color: #028fe1;
+    background: url("../../static/img/bg/bg_7.png");
+    background-size: 100%;
+    background-repeat: no-repeat;
+}
+
+ul, li {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+}
+s,em,i {
+    font-style: normal;
+    text-decoration: none;
+}
+

+ 8 - 0
tv/src/router/index.js

@@ -36,6 +36,14 @@ const routes = [
                     title: "排名",
                     clmid: "2",
                 }
+            },{
+                path: '/wait',
+                name: 'Wait',
+                component: () => import('@/views/Wait.vue'),
+                meta: {
+                    title: "等待",
+                    clmid: "2",
+                }
             },{
                 path: '/pk',
                 name: 'pk',

+ 7 - 0
tv/src/static/img/rank/king1.svg

@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="57.582" height="55.185" viewBox="0 0 57.582 55.185">
+  <g id="皇冠" transform="translate(409.593 731.711) rotate(-30)">
+    <path id="路径_140" data-name="路径 140" d="M43.035-811.229a1.469,1.469,0,0,1,1.052.4,1.47,1.47,0,0,1,.463,1.025v.034a.466.466,0,0,1-.011.136L41.054-786.1a2.854,2.854,0,0,1,.029-.536,4.466,4.466,0,0,1-2.854,3.573,1.455,1.455,0,0,1,.377-.1c-3.249,1.2-9.552,2.01-16.8,1.968-7.192-.042-13.438-.893-16.6-2.131a1.879,1.879,0,0,1,.395.118,4.438,4.438,0,0,1-2.755-3.625l.013.27L.012-810.326A.686.686,0,0,1,0-810.488a1.462,1.462,0,0,1,.483-1.021,1.462,1.462,0,0,1,1.066-.372,1.223,1.223,0,0,1,.726.2L12.4-802.3l8.174-15.816a2.065,2.065,0,0,1,1.862-1.072,2.029,2.029,0,0,1,1.652.84l7.864,16.337L42-810.823l.047-.047a1.338,1.338,0,0,1,.98-.359Z" transform="translate(0 0)" fill="#fed530"/>
+    <path id="路径_141" data-name="路径 141" d="M310.32-451.958a8.9,8.9,0,0,0-9.019,8.773,8.9,8.9,0,0,0,8.773,9.019,8.9,8.9,0,0,0,9.019-8.773h0A8.9,8.9,0,0,0,310.32-451.958Z" transform="translate(-287.49 -350.578)" fill="#504312" opacity="0.67"/>
+    <text id="_1" data-name="1" transform="translate(18.015 -787.737)" fill="#f4cd38" font-size="15" font-family="Roboto-Regular, Roboto" letter-spacing="-0.05em"><tspan x="0" y="0">1</tspan></text>
+  </g>
+</svg>

+ 7 - 0
tv/src/static/img/rank/king2.svg

@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="57.582" height="55.185" viewBox="0 0 57.582 55.185">
+  <g id="皇冠" transform="translate(409.593 731.711) rotate(-30)">
+    <path id="路径_140" data-name="路径 140" d="M43.035-811.229a1.469,1.469,0,0,1,1.052.4,1.47,1.47,0,0,1,.463,1.025v.034a.466.466,0,0,1-.011.136L41.054-786.1a2.854,2.854,0,0,1,.029-.536,4.466,4.466,0,0,1-2.854,3.573,1.455,1.455,0,0,1,.377-.1c-3.249,1.2-9.552,2.01-16.8,1.968-7.192-.042-13.438-.893-16.6-2.131a1.879,1.879,0,0,1,.395.118,4.438,4.438,0,0,1-2.755-3.625l.013.27L.012-810.326A.686.686,0,0,1,0-810.488a1.462,1.462,0,0,1,.483-1.021,1.462,1.462,0,0,1,1.066-.372,1.223,1.223,0,0,1,.726.2L12.4-802.3l8.174-15.816a2.065,2.065,0,0,1,1.862-1.072,2.029,2.029,0,0,1,1.652.84l7.864,16.337L42-810.823l.047-.047a1.338,1.338,0,0,1,.98-.359Z" transform="translate(0 0)" fill="#bed8ea"/>
+    <path id="路径_141" data-name="路径 141" d="M310.32-451.958a8.9,8.9,0,0,0-9.019,8.773,8.9,8.9,0,0,0,8.773,9.019,8.9,8.9,0,0,0,9.019-8.773h0A8.9,8.9,0,0,0,310.32-451.958Z" transform="translate(-287.49 -350.578)" fill="#184f70" opacity="0.67"/>
+    <text id="_2" data-name="2" transform="translate(18.015 -787.737)" fill="#bed8ea" font-size="15" font-family="Roboto-Regular, Roboto" letter-spacing="-0.05em"><tspan x="0" y="0">2</tspan></text>
+  </g>
+</svg>

+ 8 - 0
tv/src/static/img/rank/king3.svg

@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="57.582" height="55.185" viewBox="0 0 57.582 55.185">
+  <g id="皇冠" transform="translate(409.593 731.711) rotate(-30)">
+    <path id="路径_140" data-name="路径 140" d="M43.035-811.229a1.469,1.469,0,0,1,1.052.4,1.47,1.47,0,0,1,.463,1.025v.034a.466.466,0,0,1-.011.136L41.054-786.1a2.854,2.854,0,0,1,.029-.536,4.466,4.466,0,0,1-2.854,3.573,1.455,1.455,0,0,1,.377-.1c-3.249,1.2-9.552,2.01-16.8,1.968-7.192-.042-13.438-.893-16.6-2.131a1.879,1.879,0,0,1,.395.118,4.438,4.438,0,0,1-2.755-3.625l.013.27L.012-810.326A.686.686,0,0,1,0-810.488a1.462,1.462,0,0,1,.483-1.021,1.462,1.462,0,0,1,1.066-.372,1.223,1.223,0,0,1,.726.2L12.4-802.3l8.174-15.816a2.065,2.065,0,0,1,1.862-1.072,2.029,2.029,0,0,1,1.652.84l7.864,16.337L42-810.823l.047-.047a1.338,1.338,0,0,1,.98-.359Z" transform="translate(0 0)" fill="#f2c987"/>
+    <path id="路径_141" data-name="路径 141" d="M310.32-451.958a8.9,8.9,0,0,0-9.019,8.773,8.9,8.9,0,0,0,8.773,9.019,8.9,8.9,0,0,0,9.019-8.773h0A8.9,8.9,0,0,0,310.32-451.958Z" transform="translate(-287.49 -350.578)" fill="#65420a" opacity="0.67"/>
+    <text id="_3_" data-name="3
+" transform="translate(18.015 -787.737)" fill="#f2c987" font-size="15" font-family="Roboto-Regular, Roboto" letter-spacing="-0.05em"><tspan x="0" y="0">3</tspan><tspan font-family="Roboto-Bold, Roboto" font-weight="700"><tspan x="0" y="1"></tspan></tspan></text>
+  </g>
+</svg>

Разлика између датотеке није приказан због своје велике величине
+ 3 - 0
tv/src/static/img/rank/recordIcon.svg


+ 0 - 0
tv/src/static/img/rank/boy.png → tv/src/static/img/wait/boy.png


+ 0 - 0
tv/src/static/img/rank/girl.png → tv/src/static/img/wait/girl.png


+ 8 - 35
tv/src/views/Main.vue

@@ -12,6 +12,7 @@
                                 <span class="name">{{ s.Name }}</span>
                                 <!--<img src="../static/img/people/flyhead.png"/>-->
                                 <!--<img v-bind:src="require('../static/img/people/' + s.head)" alt="">-->
+                                <!--<img :src="s.Head" alt="" v-if="s.Head">-->
                                 <img :src="s.Head" alt="" v-if="s.Head">
                                 <img v-bind:src="require('../static/img/people/flyhead.png')" alt="" v-if="!s.Head">
                             </div>
@@ -133,8 +134,9 @@
     export default {
         data() {
             return {
+                eqSn: '30:9C:23:0C:8B:1E',
                 pageStyle: RandomBg(),
-                trueDate: false,//真实数据 true false
+                trueDate: true,//真实数据 true false
                 totalTime: 4,
                 times: 1,
                 thisClassName: '',
@@ -242,7 +244,7 @@
             //       if (totalTime < 0) {
             //         totalTime = 3;
             //         that.serachBtnStatus = false;
-                    that.$router.push({path: '/pk'});
+            //         that.$router.push({path: '/rank'});
             //       }
             //     }
             //     ,
@@ -261,10 +263,8 @@
                             "UserId": 1,
                             "Cle": 999,
                             "realHr1": parseInt(Math.random() * 100 + 50),
-
                             "realHr": 60,
                             "activePercent": 30,
-
                             "heartRate": 90,
                             "Steps": 9999,
                             "PureCalorieNoVo2": 999,
@@ -285,6 +285,7 @@
                 let that = this;
                 let param = {
                     token: localStorage.token,
+                    eqSn: this.eqSn
                 };
                 let postdata = qs.stringify(param);
                 getRecordBreak(postdata).then(res => {
@@ -316,6 +317,7 @@
                 let that = this;
                 let param = {
                     token: localStorage.token,
+                    eqSn: this.eqSn
                 };
                 let postdata = qs.stringify(param);
 
@@ -347,9 +349,8 @@
                         // this.createEgg(that.students[4]);
                     } else {
                         // 已下课
-                        console.log(json.Code);
                         if (json.Code == '999') {
-                            that.$router.push({path: '/rank'});
+                            // that.$router.push({path: '/rank'});
                         } else {
                             // 已出错
                             that.$message.error(json.Memo);
@@ -477,6 +478,7 @@
 </script>
 
 <style scoped>
+    @import "../assets/css/bg.css";
 
     @font-face {
         font-family: vista;
@@ -500,35 +502,6 @@
         font-family: vista;
     }
 
-    .bgStyle1 {
-        background-color: #028fe1;
-        background: url("../static/img/bg/bg_1.png");
-        background-size: 100%;
-        background-repeat: no-repeat;
-    }
-
-    .bgStyle2 {
-        background-color: #028fe1;
-        background: url("../static/img/bg/bg_2.png");
-        background-size: 100%;
-        background-repeat: no-repeat;
-    }
-
-    .bgStyle3 {
-        background-color: #028fe1;
-        background: url("../static/img/bg/bg_3.png");
-        background-size: 100%;
-        background-repeat: no-repeat;
-    }
-
-    .bgStyle4 {
-        background-color: #028fe1;
-        background: url("../static/img/bg/bg_4.png");
-        background-size: 100%;
-        background-repeat: no-repeat;
-    }
-
-
     ul, li {
         list-style: none;
         margin: 0;

+ 182 - 648
tv/src/views/Rank.vue

@@ -2,351 +2,172 @@
     <div :class="pageStyle">
         <Headside></Headside>
         <div class="rankContainer">
-            <div class="lt">
-                <div class="recordMain">
-                    <el-carousel :interval="30000" height="370px">
-                        <el-carousel-item v-for="rs in recordMain">
-                            <h5>{{rs.Title}}</h5>
-                            <div class="sumContainer">
-                                <div class="sum">
-                                    <s>{{rs.Result[0].Unite}}</s>
-                                    <em>{{rs.Result[0].Values}}</em>
-                                </div>
-                                <span class="sumBg"></span>
+            <el-row :gutter="20">
+                <el-col :span="12">
+                    <li v-for="(s,i) in students.CkSort">
+                        <div :class="['rows',{'row_0':i == 0},{'row_1':i == 1},{'row_2':i == 2},{'row_3':i == 3},{'row_4':i == 4},{'row_5':i == 5},{'row_6':i == 6},{'row_7':i == 7}]">
+                            <div class="head">
+                                <img :src="s.Head" class="headImg" alt="">
+                                <img src="../static/img/rank/king1.svg" class="king" alt="" v-if="i == 0">
+                                <img src="../static/img/rank/king2.svg" class="king" alt="" v-if="i == 1">
+                                <img src="../static/img/rank/king3.svg" class="king" alt="" v-if="i == 2">
                             </div>
-                        </el-carousel-item>
-                    </el-carousel>
-                </div>
-                <div class="bottom">
-                    <el-carousel :interval="15000" height="280px">
-                        <el-carousel-item v-for="Rs in bottom">
-                            <div class="topOne" v-if="Rs.Style == 'tops'">
-                                <h5>{{Rs.Title}}</h5>
-                                <ul>
-                                    <li v-for="(tops,i) in Rs.Result">
-                                        <div class="dgCenter">
-                                            <div class="dghead">
-                                                <img :id="'circle_'+i"
-                                                     v-bind:src="tops.Head" alt="" v-if="tops.Head">
-                                                <img :id="'circle_'+i"
-                                                     v-bind:src="require('../static/img/people/flyhead.png')" alt=""
-                                                     v-if="!tops.Head">
-                                                <s>{{ tops.UserName }}</s>
-                                            </div>
-                                            <div class="score">
-                                                <em>{{ tops.Values}}</em>
-                                                <span>
-                                                    {{tops.Message}}
-                                                </span>
-                                            </div>
-                                        </div>
-                                    </li>
-                                </ul>
+                            <div class="name">
+                                NO.{{i+1}} {{s.Name}}
                             </div>
-                            <div class="heros" v-if="Rs.Style == 'heros'">
-                                <h5>{{Rs.Title}}</h5>
-                                <ul>
-                                    <li v-for="(hero,i) in Rs.Result">
-                                        <img :id="'circle_'+i"
-                                             v-bind:src="hero.Head" alt="" v-if="hero.Head">
-                                        <img :id="'circle_'+i" v-bind:src="require('../static/img/people/flyhead.png')"
-                                             alt="" v-if="!hero.Head">
-                                        <img src="../static/img/rank/boy.png" class="sex" v-if="hero.Sex == 1"/>
-                                        <img src="../static/img/rank/girl.png" class="sex" v-if="hero.Sex == 2"/>
-                                        <div>
-                                            <em :id="'red_'+i">No.{{i+1}}</em> {{ hero.UserName }}
-                                        </div>
-                                        <span>{{ hero.Values }} {{hero.Unite}}</span>
-                                    </li>
-                                </ul>
+
+                            <div class="score">
+                                {{s.Ck|fmtFloat}}
+                            </div>
+                            <div class="record">
+                                <img src="../static/img/rank/recordIcon.svg" class="king" alt="" v-if="true">
+                            </div>
+                        </div>
+                    </li>
+                </el-col>
+                <el-col :span="12">
+                    <li v-for="(s,i) in students.CalSort">
+                        <div :class="['rows',{'row_0':i == 0},{'row_1':i == 1},{'row_2':i == 2},{'row_3':i == 3},{'row_4':i == 4},{'row_5':i == 5},{'row_6':i == 6},{'row_7':i == 7}]">
+                            <div class="head">
+                                <img :src="s.Head" class="headImg" alt="">
+                                <img src="../static/img/rank/king1.svg" class="king" alt="" v-if="i == 0">
+                                <img src="../static/img/rank/king2.svg" class="king" alt="" v-if="i == 1">
+                                <img src="../static/img/rank/king3.svg" class="king" alt="" v-if="i == 2">
                             </div>
-                        </el-carousel-item>
-                    </el-carousel>
-                </div>
-            </div>
-            <div class="rt">
-                <el-carousel :interval="15000" height="610px">
-                    <el-carousel-item v-for="Rs in rt">
-                        <h5>{{Rs.Title}}</h5>
-                        <ul>
-                            <li v-for="s in Rs.Result">
-                                <img :src="s.Head" alt="" v-if="s.Head">
-                                <img v-bind:src="require('../static/img/people/flyhead.png')" alt="" v-if="!s.Head">
-                                <em>{{s.UserName}}</em>
-                                <s>{{s.Values}}</s>
-                            </li>
-                        </ul>
-                    </el-carousel-item>
-                </el-carousel>
-            </div>
+                            <div class="name">
+                                NO.{{i+1}} {{s.Name}}
+                            </div>
+
+                            <div class="score">
+                                {{s.Cle|fmtInt}}
+                            </div>
+                            <div class="record">
+                                <img src="../static/img/rank/recordIcon.svg" class="king" alt="" v-if="true">
+                            </div>
+                        </div>
+                    </li>
+                </el-col>
+            </el-row>
         </div>
     </div>
 </template>
 
 <script>
     import Headside from '@/components/Headside'
-    import {
-        getHello,
-        getClassStat,
-        HerosRankingQuery,
-        CalorieStatsQuery,
-        UserRankingQuery
-    } from '@/api/getApiRes'
     import '../libs/rem';
-    import '../Global'
+    import '../Global';
+    import {ClassUserRank} from '@/api/getApiRes'
+
 
     let qs = require('qs');
     export default {
         data() {
             return {
+                eqSn: '30:9C:23:0C:8B:1E',
                 pageStyle: RandomBg(),
                 trueDate: false,//真实数据 true false
-                fakeNums: 8,//
-                unite: '卡路里',
-                topMsg: '',
-                students: [],
-                studentsLimit: [],
-                showType: 2,//1 单人
-                recordMain: [],
-                bottom: {},
-                rt: [],
-
+                autoJump: true,//开启自动跳走
+                students: {
+                    CkSort: [],
+                    CalSort: [],
+                },
             }
         },
         mounted() {
             if (this.trueDate) {
+                this.getClassUserRank();
                 this.timer = setInterval(() => {
-                    // this.GetgetUserList();
-                    this.curgetClassStat();
-                    this.GetHerosRankingQuery();
-                    this.GetCalorieStatsQuery();
-                    this.GetUserRankingQuery();
-                }, 1000);
+                    this.getClassUserRank();
+                }, 5000);
+
             } else {
-                this.students = this.fakeNews();
-                this.studentsLimit = this.fakeNewsLimit();
-                this.topMsg = this.students[0];
-                this.bottom = [
-                    {
-                        "Title": "本周消耗卡路里英雄榜",
-                        "Style": "heros",
-                        "Result": [
-                            {
-                                "UserName": "段长鹏",
-                                "Sex": 1,
-                                "Head": "",
-                                "Values": "4744",
-                                "Unite": "千卡",
-                                "Message": ""
-                            },
-                            {
-                                "UserName": "贾雨奇",
-                                "Sex": 1,
-                                "Head": "http://192.168.0.2/flyhead.png",
-                                "Values": "4034",
-                                "Unite": "千卡",
-                                "Message": ""
-                            },
-                            {
-                                "UserName": "郑伟",
-                                "Sex": 1,
-                                "Head": "http://192.168.0.2/flyhead.png",
-                                "Values": "2290",
-                                "Unite": "千卡",
-                                "Message": ""
-                            }
-                        ]
-                    },
-                    {
-                        "Title": "单次CK值(新个人记录)",
-                        "Style": "tops",
-                        "Result": [
-                            {
-                                "UserName": "郑伟",
-                                "Sex": 1,
-                                "Head": "",
-                                "Values": "1022",
-                                "Unite": "",
-                                "Message": "打破了历史记录100000"
-                            },
-                            {
-                                "UserName": "郑伟",
-                                "Sex": 1,
-                                "Head": "http://192.168.0.2/flyhead.png",
-                                "Values": "1020",
-                                "Unite": "",
-                                "Message": "打破了历史记录100000"
-                            }
-                        ]
-                    }
-                ];
-                this.rt = [
-                    {
-                        Title: '月度CK值排行',
-                        Result: this.fakeNews(),
-                    },
-                    {
-                        Title: '月度卡路里值排行',
-                        Result: this.fakeNews(),
-                    }
-                ];
-                console.log( this.rt[0].Result);
-                this.recordMain = [
-                    {
-                        Title:'本周场馆卡路里总消耗',
-                        Result: [{'Values':1234, Unite: '千卡'}],
+                this.timer = setInterval(() => {
+                    this.students.CkSort = this.fakeNews();
+                    this.students.CalSort = this.fakeNews();
+                }, 5000);
+            }
+            if (this.autoJump) {
+                // 倒计时60秒自动关闭
+                let that = this;
+                this.totalTime = 60;
+                let clock = window.setInterval(() => {
+                    this.totalTime--;
+                    if (parseInt(this.totalTime) < 0) {
+                        // 前往等待页面
+                        that.$router.push({path: '/wait'});
+                        // 计时器回收
+                        clearInterval(clock);
                     }
-                ]
+                }, 1000)
             }
+
         },
         methods: {
             fakeNews() {
                 let item = [];
-                for (var i = 0; i < 7; i++) {
-                    item.push(
-                        {
-                            "hubId": 0,
-                            "deviceId": 22756,
-                            "calorie": 96.5,
-                            "Values ": 96.5,
-                            "heartRate": i * 5,
-                            "step": i * 40,
-                            "userName": "杨东艳",
-                            "userNmae": "杨东艳",
-                            "UserName": "杨东艳",
-                            "name": "杨东艳",
-                            "updateTime": 1604568915582,
-                            "activePercent": i * 5,
-                            "ck": 115.9 - i,
-                            "head": 'flyhead.png'
-                        }
-                    )
-                }
-                return item;
-            },
-            fakeNewsLimit() {
-                let item = [];
-                for (var i = 0; i < 3; i++) {
+                // 1 2 3 5 9 11 13 16 21 30
+                let fakeNums = 7;
+                for (var i = 0; i < fakeNums; i++) {
                     item.push(
                         {
-                            "hubId": 0,
-                            "deviceId": 22756,
-                            "calorie": 999.5,
-                            "heartRate": i * 5,
-                            "step": i * 40,
-                            "userName": "杨东艳",
-                            "userNmae": "杨东艳",
-                            "name": "杨东艳",
+                            "SvId": 1,
+                            "UserId": 1,
+                            "Cle": 999,
+                            "realHr1": parseInt(Math.random() * 100 + 50),
+                            "realHr": 60,
+                            "activePercent": 30,
+                            "heartRate": 90,
+                            "Steps": 9999,
+                            "PureCalorieNoVo2": 999,
+                            "Name": "东南西北中",
                             "updateTime": 1604568915582,
-                            "activePercent": i * 5,
-                            "ck": i + 115.1,
-                            "sex": 1,
-                            "head": 'flyhead.png'
+                            "Ck": 99.9,
+                            "Head": "http://192.168.0.2/zw.png",
                         }
                     )
                 }
                 return item;
             },
-            GetgetUserList() {
+            getClassUserRank() {
                 let that = this;
                 let param = {
-                    token: localStorage.token,
+                    eqSn: this.eqSn
                 };
                 let postdata = qs.stringify(param);
-                getHello(postdata).then(res => {
+                ClassUserRank(postdata).then(res => {
                     let json = res;
                     if (json.Code == 0) {
-                        that.topMsg = json.Rs[0];
-                        that.students = json.Rs;
-                    } else {
-                        that.$message.error(json.Memo);
-                    }
-                })
-            },
-            GetHerosRankingQuery() {
-                let that = this;
-                let param = {
-                    eqSn: '30:9C:23:0C:8B:1E',
-                    dispNum: 3
-                };
-                let postdata = qs.stringify(param);
-                HerosRankingQuery(postdata).then(res => {
-                    let json = res;
-                    if (json.Code == 0) {
-                        that.bottom = json.Rs;
-                    } else {
-                        that.$message.error(json.Memo);
-                    }
-                })
-            },
-            GetUserRankingQuery() {
-                let that = this;
-                let param = {
-                    eqSn: '30:9C:23:0C:8B:1E',
-                    dispNum: 7
-                };
-                let postdata = qs.stringify(param);
-                UserRankingQuery(postdata).then(res => {
-                    let json = res;
-                    if (json.Code == 0) {
-                        that.rt = json.Rs;
-                    } else {
-                        that.$message.error(json.Memo);
-                    }
-                })
-            },
-            GetCalorieStatsQuery() {
-                let that = this;
-                let param = {
-                    eqSn: '30:9C:23:0C:8B:1E',
-                };
-                let postdata = qs.stringify(param);
-                CalorieStatsQuery(postdata).then(res => {
-                    let json = res;
-                    if (json.Code == 0) {
-                        that.recordMain = json.Rs;
+
                     } else {
                         that.$message.error(json.Memo);
                     }
                 })
+            }
+        },
+        filters: {
+            fmtNum(val) {
+                if (val == 0) {
+                    return '--'
+                } else {
+                    if (parseInt(val) < 0) return 0;
+                    if (parseInt(val) > 0) return val
+                }
             },
-            curgetClassStat() {
-                let that = this;
-                let param = {
-                    token: localStorage.token,
-                };
-                let postdata = qs.stringify(param);
-                getClassStat(postdata).then(res => {
-                    let json = res;
-                    if (json.Code == 0) {
-                        // 上课了
-                        if (json.ClassOn) {
-                            that.$router.push({path: '/'});
-                        }
-                    } else {
-                        // that.$message.error(json.Memo);
-                    }
-                })
+            fmtFloat(val) {
+                if (val == 0) {
+                    return '0'
+                } else {
+                    return parseFloat(val).toFixed(1);
+                }
             },
-        },
-        watch: {
-            '$route': function (val) {
-                if (val.path == '/rank') {
-                    if (this.trueDate) {
-                        this.timer = setInterval(() => {
-                            this.curgetClassStat();
-                            this.GetHerosRankingQuery();
-                            this.GetCalorieStatsQuery();
-                            this.GetUserRankingQuery();
-                        }, 1000);
-                    } else {
-                        this.students = this.fakeNews();
-                        this.topMsg = this.students[0];
-                    }
+            fmtInt(val) {
+                if (val == 0) {
+                    return '0'
                 } else {
-                    clearInterval(this.timer);
+                    return parseInt(val);
+                    // return parseFloat(val).toFixed(3);
                 }
-            }
+            },
         },
         components: {
             Headside
@@ -355,6 +176,17 @@
 </script>
 
 <style scoped>
+    @import "../assets/css/bg.css";
+
+    @font-face {
+        font-family: vista;
+        src: url('../assets/font/vista.otf');
+    }
+
+    * {
+        font-family: vista;
+    }
+
 
     .pages {
         position: absolute;
@@ -366,422 +198,124 @@
         overflow: hidden;
         display: block;
         margin: 0 auto;
-    }
-
-    .bgStyle1 {
-        background-color: #028fe1;
-        background: url("../static/img/bg/bg_1.png");
-        background-size: 100%;
-        background-repeat: no-repeat;
-    }
-
-    .bgStyle2 {
-        background-color: #028fe1;
-        background: url("../static/img/bg/bg_2.png");
-        background-size: 100%;
-        background-repeat: no-repeat;
-    }
-
-    .bgStyle3 {
-        background-color: #028fe1;
-        background: url("../static/img/bg/bg_3.png");
-        background-size: 100%;
-        background-repeat: no-repeat;
-    }
-
-    .bgStyle4 {
-        background-color: #028fe1;
-        background: url("../static/img/bg/bg_4.png");
-        background-size: 100%;
-        background-repeat: no-repeat;
-    }
-
-
-    .rankContainer {
-        width: 90%;
-        height: 100%;
-        overflow: hidden;
-        display: block;
-        margin: 0 auto;
-    }
-
-    .rankContainer .lt {
-        width: 60%;
-        height: 100%;
-        float: left;
-    }
-
-    .rankContainer .rt {
-        width: 40%;
-        float: right;
-    }
-
-    .rankContainer .lt .recordMain h5 {
         font-family: vista;
-        font-weight: normal;
-        font-size: 0.6rem;
-        text-align: left;
-        color: #fff;
-        margin: 5% auto;
     }
 
-    .rankContainer .sum {
-        position: relative;
-        top: 0.4rem;
-        width: 100%;
-        height: 35%;
+    .rankContainer {
+        width: 96%;
         overflow: visible;
         display: block;
         margin: 0 auto;
-        text-align: center;
-        z-index: 666;
-    }
-
-    .sumBg {
-        position: relative;
-        bottom: 0.8rem;
-        width: 100%;
-        height: 2rem;
-        overflow: hidden;
-        display: block;
-        margin: 0 auto;
-        background: url("../static/img/pingtai.png") bottom center;
-        background-size: 100% 100%;
-        background-repeat: no-repeat;
-    }
-
-    .sum em {
-        width: 7.2rem;
-        float: right;
-        font-weight: 900;
-        font-family: vista;
-        font-weight: 900;
-        font-size: 2rem;
-        text-align: center;
-        color: #fff;
-        font-style: normal;
-        text-shadow: #E85297 5px 0 0, #E85297 0 5px 0, #E85297 -5px 0 0, #E85297 0 -5px 0;
-    }
-
-    .sum s {
-        position: relative;
-        bottom: -2rem;
-        width: 2rem;
-        float: right;
-        font-style: normal;
-        font-family: vista;
-        font-weight: normal;
-        font-size: 44px;
-        text-align: center;
-        color: #fff;
-        text-decoration: none;
+        padding-top: 0.2rem;
     }
 
-    .sumContainer {
+    li {
         width: 100%;
-        height: 4rem;
-        overflow: hidden;
+        height: 1.2rem;
         display: block;
         margin: 0 auto;
-    }
-
-    .topOne {
-        width: 100%;
         overflow: hidden;
-        display: block;
-        margin: 0 auto;
-    }
-
-    .topOne h5 {
-        font-family: vista;
-        font-weight: normal;
-        font-size: 0.4rem;
-        text-align: left;
-        color: #fff;
-        margin: 1% 0;
-    }
-
-    ul, li {
-        list-style: none;
-        margin: 0;
-        padding: 0;
     }
 
-    .topOne ul {
+    li .rows {
         width: 100%;
-        overflow: hidden;
-        display: block;
-        margin: 0 auto;
-        padding-left: 2px;
-        padding-top: 0.1rem;
-        padding-bottom: 0.1rem;
-    }
-
-    .topOne li {
-        width: 33.3%;
-        float: left;
-    }
-
-    .topOne .dgCenter {
-        width: 93%;
-        overflow: hidden;
-        float: left;
-        border-radius: 5px;
-        background: rgba(0.0 .0 .0 .1);
-        box-shadow: 0px 0px 6px rgba(255, 255, 255, 0.3);
-        padding-top: 0.1rem;
-        padding-bottom: 0.1rem;
-    }
-
-    .dgCenter .dghead {
-        width: 40%;
-        float: left;
-    }
-
-    .dghead img {
-        width: 1rem;
         height: 1rem;
-        overflow: hidden;
+        /*background: #ee191d;*/
+        border-radius: 250rem;
+        overflow: visible;
         display: block;
         margin: 0 auto;
-        padding: 0;
-        border-radius: 250px;
-        border: 2px solid #fff;
-    }
-
-    .dghead s {
-        width: 100%;
-        overflow: hidden;
-        display: block;
-        font-weight: normal;
-        font-size: 0.3rem;
-        text-align: center;
-        color: #fff;
-        font-style: normal;
-        text-decoration: none;
-        margin-top: 0.2rem;
+        margin-top: 0.15rem;
     }
 
-    .score {
-        width: 60%;
-        float: right;
-    }
-
-    .score em {
-        width: 100%;
-        overflow: hidden;
-        display: block;
-        margin: 0 auto;
-        font-family: vista;
-        font-weight: bold;
-        font-size: 0.7rem;
-        text-align: center;
-        color: #fff;
-        font-style: normal;
-        height: 1.4rem;
-        line-height: 1.4rem;
+    li .head {
+        width: 0.8rem;
+        height: 0.8rem;
+        float: left;
+        margin-left: 0.1rem;
+        margin-top: 0.05rem;
+        overflow: visible;
     }
 
-    .score span {
+    li .head .headImg {
         width: 100%;
         overflow: hidden;
         display: block;
         margin: 0 auto;
-        font-family: vista;
-        font-weight: normal;
-        font-size: 0.2rem;
-        color: #fff;
-        text-align: center;
-    }
-
-    .rt {
-        padding-top: 0.6rem;
-    }
-
-    .rt h5 {
-        font-family: vista;
-        font-weight: normal;
-        font-size: 36px;
-        text-align: center;
-        color: #fff;
-        margin: 0;
-        margin-bottom: 0.6rem;
-        text-indent: 0.2rem;
-    }
-
-    .rt ul {
-        width: 80%;
-        overflow: hidden;
-        display: block;
-        margin: 0 auto;
-        padding-top: 3px;
-        padding-bottom: 3px;
-    }
-
-    .rt li {
-        width: 80%;
-        overflow: hidden;
-        display: block;
-        margin: 0 auto;
-        margin-bottom: 0.24rem;
-        padding: 0.1rem 4%;
-        background: rgba(0, 0, 0, 0.1);
-        border-radius: 5px;
-        box-shadow: 0px 0px 6px rgba(255, 255, 255, 0.3);
+        border: 5px solid #fff;
+        border-radius: 250px;
     }
 
-    .rt li img {
+    li .head .king {
+        position: relative;
+        top: -1.2rem;
+        left: 0rem;
         width: 0.6rem;
         height: 0.6rem;
-        filter: drop-shadow(0px 0px 6px #bf00ff);
-        border: 2px solid #fff;
         float: left;
-        border-radius: 250px;
-        margin-right: 3%;
     }
 
-    .rt li em {
-        font-family: vista;
+    li .name {
         font-weight: normal;
-        font-size: 0.35rem;
-        text-align: center;
+        font-size: 0.4rem;
+        text-align: left;
         color: #fff;
-        font-style: normal;
         float: left;
-        height: 0.6rem;
-        line-height: 0.6rem;
+        margin-left: 0.2rem;
+        line-height: 1rem;
     }
 
-    .rt li s {
-        font-family: vista;
-        font-weight: normal;
-        font-size: 0.35rem;
-        text-align: right;
-        color: #fff;
-        text-decoration: none;
-        height: 0.6rem;
-        line-height: 0.6rem;
+    li .record {
         float: right;
     }
 
-    .heros > h5 {
-        font-family: vista;
-        font-weight: normal;
-        font-size: 0.35rem;
-        text-align: left;
-        color: #fff;
-        margin: 1% 0;
-    }
-
-    .heros ul {
-        width: 100%;
-        overflow: hidden;
-        display: block;
-        margin: 0 auto;
-        padding-left: 3px;
-        padding-top: 6px;
-        padding-bottom: 6px;
-    }
-
-    .heros li {
-        width: 2.5rem;
-        height: 2.35rem;
-        float: left;
-        border-radius: 5px;
-        background: rgba(0.0 .0 .0 .1);
-        box-shadow: 0px 0px 6px rgba(255, 255, 255, 0.3);
-        padding-top: 0.2rem;
-        padding-bottom: 0.2rem;
-        color: #fff;
-        font-size: 0.3rem;
-        text-align: center;
-        margin-right: 5%;
-    }
-
-    .heros li > img {
+    li .record img {
+        position: relative;
+        top: -0rem;
         width: 1.2rem;
-        height: 1.2rem;
-        overflow: hidden;
-        display: block;
-        margin: 0 auto;
-        margin-bottom: 0.2rem;
-        border-radius: 100%;
-        border: 2px solid #fff;
     }
 
-    .heros li > img.sex {
-        position: relative;
-        top: -1.5rem;
-        right: 0.55rem;
-        width: 0.4rem;
-        height: 0.4rem;
-        overflow: hidden;
+    li .score {
+        font-weight: normal;
+        font-size: 0.4rem;
+        color: #fff;
         float: right;
-        border: none;
-
+        margin-right: 0.2rem;
+        line-height: 1rem;
+        text-align: right;
     }
 
-    .heros li em {
-        font-family: vista;
-        font-weight: bold;
-        font-size: 30px;
-        text-align: center;
-        font-style: normal;
+    .row_0 {
+        background: rgba(238, 25, 29, 0.75);
     }
 
-    .heros li em#red_0 {
-        color: #FA5114;
+    .row_1 {
+        background: rgba(244, 76, 31, 0.75);
     }
 
-    .heros li em#red_1 {
-        color: #FA981F;
+    .row_2 {
+        background: rgba(242, 182, 23, 0.75);
     }
 
-    .heros li em#red_2 {
-        color: #FFE13C;
+    .row_3 {
+        background: rgba(112, 238, 21, 0.75);
     }
 
-    .heros li #circle_0 {
-        border: 2px solid #FA5114;
+    .row_4 {
+        background: rgba(11, 253, 45, 0.75);
     }
 
-    .heros li #circle_1 {
-        border: 2px solid #FA981F;
-
+    .row_5 {
+        background: rgba(1, 228, 182, 0.75);
     }
 
-    .heros li #circle_2 {
-        border: 2px solid #FFE13C;
-
+    .row_6 {
+        background: rgba(0, 207, 230, 0.75);
     }
 
-    .heros li div {
-        position: relative;
-        top: -0.7rem;
-        width: 100%;
-        overflow: hidden;
-        display: block;
-        margin: 0 auto;
-        text-align: center;
-    }
-
-    .heros li span {
-        position: relative;
-        top: -0.67rem;
-        width: 100%;
-        overflow: hidden;
-        display: block;
-        margin: 0 auto;
+    .row_7 {
+        background: rgba(4, 209, 252, 0.75);
     }
 
-    .bottom {
-        position: relative;
-        width: 100%;
-        padding-top: 0.1rem;
-        bottom: 0.2rem;
-    }
 
-    /deep/ .el-carousel__indicators--horizontal {
-        display: none;
-    }
 </style>

+ 775 - 0
tv/src/views/Wait.vue

@@ -0,0 +1,775 @@
+<template>
+    <div :class="pageStyle">
+        <Headside></Headside>
+        <div class="rankContainer">
+            <div class="lt">
+                <div class="recordMain">
+                    <el-carousel :interval="30000" height="370px">
+                        <el-carousel-item v-for="rs in recordMain">
+                            <h5>{{rs.Title}}</h5>
+                            <div class="sumContainer">
+                                <div class="sum">
+                                    <s>{{rs.Result[0].Unite}}</s>
+                                    <em>{{rs.Result[0].Values}}</em>
+                                </div>
+                                <span class="sumBg"></span>
+                            </div>
+                        </el-carousel-item>
+                    </el-carousel>
+                </div>
+                <div class="bottom">
+                    <el-carousel :interval="15000" height="280px">
+                        <el-carousel-item v-for="Rs in bottom">
+                            <div class="topOne" v-if="Rs.Style == 'tops'">
+                                <h5>{{Rs.Title}}</h5>
+                                <ul>
+                                    <li v-for="(tops,i) in Rs.Result">
+                                        <div class="dgCenter">
+                                            <div class="dghead">
+                                                <img :id="'circle_'+i"
+                                                     v-bind:src="tops.Head" alt="" v-if="tops.Head">
+                                                <img :id="'circle_'+i"
+                                                     v-bind:src="require('../static/img/people/flyhead.png')" alt=""
+                                                     v-if="!tops.Head">
+                                                <s>{{ tops.UserName }}</s>
+                                            </div>
+                                            <div class="score">
+                                                <em>{{ tops.Values}}</em>
+                                                <span>
+                                                    {{tops.Message}}
+                                                </span>
+                                            </div>
+                                        </div>
+                                    </li>
+                                </ul>
+                            </div>
+                            <div class="heros" v-if="Rs.Style == 'heros'">
+                                <h5>{{Rs.Title}}</h5>
+                                <ul>
+                                    <li v-for="(hero,i) in Rs.Result">
+                                        <img :id="'circle_'+i"
+                                             v-bind:src="hero.Head" alt="" v-if="hero.Head">
+                                        <img :id="'circle_'+i" v-bind:src="require('../static/img/people/flyhead.png')"
+                                             alt="" v-if="!hero.Head">
+                                        <img src="../static/img/wait/boy.png" class="sex" v-if="hero.Sex == 1"/>
+                                        <img src="../static/img/wait/girl.png" class="sex" v-if="hero.Sex == 2"/>
+                                        <div>
+                                            <em :id="'red_'+i">No.{{i+1}}</em> {{ hero.UserName }}
+                                        </div>
+                                        <span>{{ hero.Values }} {{hero.Unite}}</span>
+                                    </li>
+                                </ul>
+                            </div>
+                        </el-carousel-item>
+                    </el-carousel>
+                </div>
+            </div>
+            <div class="rt">
+                <el-carousel :interval="15000" height="610px">
+                    <el-carousel-item v-for="Rs in rt">
+                        <h5>{{Rs.Title}}</h5>
+                        <ul>
+                            <li v-for="s in Rs.Result">
+                                <img :src="s.Head" alt="" v-if="s.Head">
+                                <img v-bind:src="require('../static/img/people/flyhead.png')" alt="" v-if="!s.Head">
+                                <em>{{s.UserName}}</em>
+                                <s>{{s.Values}}</s>
+                            </li>
+                        </ul>
+                    </el-carousel-item>
+                </el-carousel>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+    import Headside from '@/components/Headside'
+    import {
+        getHello,
+        getClassStat,
+        HerosRankingQuery,
+        CalorieStatsQuery,
+        UserRankingQuery
+    } from '@/api/getApiRes'
+    import '../libs/rem';
+    import '../Global'
+
+    let qs = require('qs');
+    export default {
+        data() {
+            return {
+                eqSn: '30:9C:23:0C:8B:1E',
+                pageStyle: RandomBg(),
+                trueDate: true,//真实数据 true false
+                fakeNums: 8,//
+                unite: '卡路里',
+                topMsg: '',
+                students: [],
+                studentsLimit: [],
+                showType: 2,//1 单人
+                recordMain: [],
+                bottom: {},
+                rt: [],
+
+            }
+        },
+        mounted() {
+            if (this.trueDate) {
+                this.timer = setInterval(() => {
+                    // this.GetgetUserList();
+                    this.curgetClassStat();
+                    this.GetHerosRankingQuery();
+                    this.GetCalorieStatsQuery();
+                    this.GetUserRankingQuery();
+                }, 1000);
+            } else {
+                this.students = this.fakeNews();
+                this.studentsLimit = this.fakeNewsLimit();
+                this.topMsg = this.students[0];
+                this.bottom = [
+                    {
+                        "Title": "本周消耗卡路里英雄榜",
+                        "Style": "heros",
+                        "Result": [
+                            {
+                                "UserName": "段长鹏",
+                                "Sex": 1,
+                                "Head": "",
+                                "Values": "4744",
+                                "Unite": "千卡",
+                                "Message": ""
+                            },
+                            {
+                                "UserName": "贾雨奇",
+                                "Sex": 1,
+                                "Head": "http://192.168.0.2/flyhead.png",
+                                "Values": "4034",
+                                "Unite": "千卡",
+                                "Message": ""
+                            },
+                            {
+                                "UserName": "郑伟",
+                                "Sex": 1,
+                                "Head": "http://192.168.0.2/flyhead.png",
+                                "Values": "2290",
+                                "Unite": "千卡",
+                                "Message": ""
+                            }
+                        ]
+                    },
+                    {
+                        "Title": "单次CK值(新个人记录)",
+                        "Style": "tops",
+                        "Result": [
+                            {
+                                "UserName": "郑伟",
+                                "Sex": 1,
+                                "Head": "",
+                                "Values": "1022",
+                                "Unite": "",
+                                "Message": "打破了历史记录100000"
+                            },
+                            {
+                                "UserName": "郑伟",
+                                "Sex": 1,
+                                "Head": "http://192.168.0.2/flyhead.png",
+                                "Values": "1020",
+                                "Unite": "",
+                                "Message": "打破了历史记录100000"
+                            }
+                        ]
+                    }
+                ];
+                this.rt = [
+                    {
+                        Title: '月度CK值排行',
+                        Result: this.fakeNews(),
+                    },
+                    {
+                        Title: '月度卡路里值排行',
+                        Result: this.fakeNews(),
+                    }
+                ];
+                console.log(this.rt[0].Result);
+                this.recordMain = [
+                    {
+                        Title: '本周场馆卡路里总消耗',
+                        Result: [{'Values': 1234, Unite: '千卡'}],
+                    }
+                ]
+            }
+        },
+        methods: {
+            fakeNews() {
+                let item = [];
+                for (var i = 0; i < 7; i++) {
+                    item.push(
+                        {
+                            "hubId": 0,
+                            "deviceId": 22756,
+                            "calorie": 96.5,
+                            "Values ": 96.5,
+                            "heartRate": i * 5,
+                            "step": i * 40,
+                            "userName": "杨东艳",
+                            "userNmae": "杨东艳",
+                            "UserName": "杨东艳",
+                            "name": "杨东艳",
+                            "updateTime": 1604568915582,
+                            "activePercent": i * 5,
+                            "ck": 115.9 - i,
+                            "head": 'flyhead.png'
+                        }
+                    )
+                }
+                return item;
+            },
+            fakeNewsLimit() {
+                let item = [];
+                for (var i = 0; i < 3; i++) {
+                    item.push(
+                        {
+                            "hubId": 0,
+                            "deviceId": 22756,
+                            "calorie": 999.5,
+                            "heartRate": i * 5,
+                            "step": i * 40,
+                            "userName": "杨东艳",
+                            "userNmae": "杨东艳",
+                            "name": "杨东艳",
+                            "updateTime": 1604568915582,
+                            "activePercent": i * 5,
+                            "ck": i + 115.1,
+                            "sex": 1,
+                            "head": 'flyhead.png'
+                        }
+                    )
+                }
+                return item;
+            },
+            GetgetUserList() {
+                let that = this;
+                let param = {
+                    eqSn: this.eqSn,
+                    token: localStorage.token,
+                };
+                let postdata = qs.stringify(param);
+                getHello(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.topMsg = json.Rs[0];
+                        that.students = json.Rs;
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            GetHerosRankingQuery() {
+                let that = this;
+                let param = {
+                    eqSn: this.eqSn,
+                    dispNum: 3
+                };
+                let postdata = qs.stringify(param);
+                HerosRankingQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.bottom = json.Rs;
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            GetUserRankingQuery() {
+                let that = this;
+                let param = {
+                    eqSn: '30:9C:23:0C:8B:1E',
+                    dispNum: 7
+                };
+                let postdata = qs.stringify(param);
+                UserRankingQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.rt = json.Rs;
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            GetCalorieStatsQuery() {
+                let that = this;
+                let param = {
+                    eqSn: '30:9C:23:0C:8B:1E',
+                };
+                let postdata = qs.stringify(param);
+                CalorieStatsQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.recordMain = json.Rs;
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            curgetClassStat() {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    eqSn: this.eqSn
+                };
+                let postdata = qs.stringify(param);
+                getClassStat(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        // 上课了
+                        // 1:团课
+                        // 2:竞技课PK
+                        // 3:私教课
+                        switch (parseInt(json.Rs.ClassType)) {
+                            case 1:
+                                that.$router.push({path: '/'});
+                                break;
+                            case 2:
+                                that.$router.push({path: '/pk'});
+                                break;
+                            case 3:
+                                that.$router.push({path: '/'});
+                                break;
+                        }
+
+                    } else {
+                        // that.$message.error(json.Memo);
+                    }
+                })
+            },
+        },
+        watch: {
+            '$route': function (val) {
+                if (val.path == '/rank') {
+                    if (this.trueDate) {
+                        this.timer = setInterval(() => {
+                            this.curgetClassStat();
+                            this.GetHerosRankingQuery();
+                            this.GetCalorieStatsQuery();
+                            this.GetUserRankingQuery();
+                        }, 1000);
+                    } else {
+                        this.students = this.fakeNews();
+                        this.topMsg = this.students[0];
+                    }
+                } else {
+                    clearInterval(this.timer);
+                }
+            }
+        },
+        components: {
+            Headside
+        }
+    }
+</script>
+
+<style scoped>
+    @import "../assets/css/bg.css";
+
+    .pages {
+        position: absolute;
+        top: 0;
+        left: 0;
+        right: 0;
+        bottom: 0;
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+
+    .rankContainer {
+        width: 90%;
+        height: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .rankContainer .lt {
+        width: 60%;
+        height: 100%;
+        float: left;
+    }
+
+    .rankContainer .rt {
+        width: 40%;
+        float: right;
+    }
+
+    .rankContainer .lt .recordMain h5 {
+        font-family: vista;
+        font-weight: normal;
+        font-size: 0.6rem;
+        text-align: left;
+        color: #fff;
+        margin: 5% auto;
+    }
+
+    .rankContainer .sum {
+        position: relative;
+        top: 0.4rem;
+        width: 100%;
+        height: 35%;
+        overflow: visible;
+        display: block;
+        margin: 0 auto;
+        text-align: center;
+        z-index: 666;
+    }
+
+    .sumBg {
+        position: relative;
+        bottom: 0.8rem;
+        width: 100%;
+        height: 2rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        background: url("../static/img/pingtai.png") bottom center;
+        background-size: 100% 100%;
+        background-repeat: no-repeat;
+    }
+
+    .sum em {
+        width: 7.2rem;
+        float: right;
+        font-weight: 900;
+        font-family: vista;
+        font-weight: 900;
+        font-size: 2rem;
+        text-align: center;
+        color: #fff;
+        font-style: normal;
+        text-shadow: #E85297 5px 0 0, #E85297 0 5px 0, #E85297 -5px 0 0, #E85297 0 -5px 0;
+    }
+
+    .sum s {
+        position: relative;
+        bottom: -2rem;
+        width: 2rem;
+        float: right;
+        font-style: normal;
+        font-family: vista;
+        font-weight: normal;
+        font-size: 44px;
+        text-align: center;
+        color: #fff;
+        text-decoration: none;
+    }
+
+    .sumContainer {
+        width: 100%;
+        height: 4rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .topOne {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .topOne h5 {
+        font-family: vista;
+        font-weight: normal;
+        font-size: 0.4rem;
+        text-align: left;
+        color: #fff;
+        margin: 1% 0;
+    }
+
+    ul, li {
+        list-style: none;
+        margin: 0;
+        padding: 0;
+    }
+
+    .topOne ul {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-left: 2px;
+        padding-top: 0.1rem;
+        padding-bottom: 0.1rem;
+    }
+
+    .topOne li {
+        width: 33.3%;
+        float: left;
+    }
+
+    .topOne .dgCenter {
+        width: 93%;
+        overflow: hidden;
+        float: left;
+        border-radius: 5px;
+        background: rgba(0.0 .0 .0 .1);
+        box-shadow: 0px 0px 6px rgba(255, 255, 255, 0.3);
+        padding-top: 0.1rem;
+        padding-bottom: 0.1rem;
+    }
+
+    .dgCenter .dghead {
+        width: 40%;
+        float: left;
+    }
+
+    .dghead img {
+        width: 1rem;
+        height: 1rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding: 0;
+        border-radius: 250px;
+        border: 2px solid #fff;
+    }
+
+    .dghead s {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        font-weight: normal;
+        font-size: 0.3rem;
+        text-align: center;
+        color: #fff;
+        font-style: normal;
+        text-decoration: none;
+        margin-top: 0.2rem;
+    }
+
+    .score {
+        width: 60%;
+        float: right;
+    }
+
+    .score em {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        font-family: vista;
+        font-weight: bold;
+        font-size: 0.7rem;
+        text-align: center;
+        color: #fff;
+        font-style: normal;
+        height: 1.4rem;
+        line-height: 1.4rem;
+    }
+
+    .score span {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        font-family: vista;
+        font-weight: normal;
+        font-size: 0.2rem;
+        color: #fff;
+        text-align: center;
+    }
+
+    .rt {
+        padding-top: 0.6rem;
+    }
+
+    .rt h5 {
+        font-family: vista;
+        font-weight: normal;
+        font-size: 36px;
+        text-align: center;
+        color: #fff;
+        margin: 0;
+        margin-bottom: 0.6rem;
+        text-indent: 0.2rem;
+    }
+
+    .rt ul {
+        width: 80%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-top: 3px;
+        padding-bottom: 3px;
+    }
+
+    .rt li {
+        width: 80%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-bottom: 0.24rem;
+        padding: 0.1rem 4%;
+        background: rgba(0, 0, 0, 0.1);
+        border-radius: 5px;
+        box-shadow: 0px 0px 6px rgba(255, 255, 255, 0.3);
+    }
+
+    .rt li img {
+        width: 0.6rem;
+        height: 0.6rem;
+        filter: drop-shadow(0px 0px 6px #bf00ff);
+        border: 2px solid #fff;
+        float: left;
+        border-radius: 250px;
+        margin-right: 3%;
+    }
+
+    .rt li em {
+        font-family: vista;
+        font-weight: normal;
+        font-size: 0.35rem;
+        text-align: center;
+        color: #fff;
+        font-style: normal;
+        float: left;
+        height: 0.6rem;
+        line-height: 0.6rem;
+    }
+
+    .rt li s {
+        font-family: vista;
+        font-weight: normal;
+        font-size: 0.35rem;
+        text-align: right;
+        color: #fff;
+        text-decoration: none;
+        height: 0.6rem;
+        line-height: 0.6rem;
+        float: right;
+    }
+
+    .heros > h5 {
+        font-family: vista;
+        font-weight: normal;
+        font-size: 0.35rem;
+        text-align: left;
+        color: #fff;
+        margin: 1% 0;
+    }
+
+    .heros ul {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-left: 3px;
+        padding-top: 6px;
+        padding-bottom: 6px;
+    }
+
+    .heros li {
+        width: 2.5rem;
+        height: 2.35rem;
+        float: left;
+        border-radius: 5px;
+        background: rgba(0.0 .0 .0 .1);
+        box-shadow: 0px 0px 6px rgba(255, 255, 255, 0.3);
+        padding-top: 0.2rem;
+        padding-bottom: 0.2rem;
+        color: #fff;
+        font-size: 0.3rem;
+        text-align: center;
+        margin-right: 5%;
+    }
+
+    .heros li > img {
+        width: 1.2rem;
+        height: 1.2rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-bottom: 0.2rem;
+        border-radius: 100%;
+        border: 2px solid #fff;
+    }
+
+    .heros li > img.sex {
+        position: relative;
+        top: -1.5rem;
+        right: 0.55rem;
+        width: 0.4rem;
+        height: 0.4rem;
+        overflow: hidden;
+        float: right;
+        border: none;
+
+    }
+
+    .heros li em {
+        font-family: vista;
+        font-weight: bold;
+        font-size: 30px;
+        text-align: center;
+        font-style: normal;
+    }
+
+    .heros li em#red_0 {
+        color: #FA5114;
+    }
+
+    .heros li em#red_1 {
+        color: #FA981F;
+    }
+
+    .heros li em#red_2 {
+        color: #FFE13C;
+    }
+
+    .heros li #circle_0 {
+        border: 2px solid #FA5114;
+    }
+
+    .heros li #circle_1 {
+        border: 2px solid #FA981F;
+
+    }
+
+    .heros li #circle_2 {
+        border: 2px solid #FFE13C;
+
+    }
+
+    .heros li div {
+        position: relative;
+        top: -0.7rem;
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        text-align: center;
+    }
+
+    .heros li span {
+        position: relative;
+        top: -0.67rem;
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .bottom {
+        position: relative;
+        width: 100%;
+        padding-top: 0.1rem;
+        bottom: 0.2rem;
+    }
+
+    /deep/ .el-carousel__indicators--horizontal {
+        display: none;
+    }
+</style>

+ 1 - 0
tv/src/views/pk.vue

@@ -318,6 +318,7 @@
 </script>
 
 <style scoped>
+    @import "../assets/css/bg.css";
     .pages {
         position: absolute;
         top: 0;

Неке датотеке нису приказане због велике количине промена