Explorar o código

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

duanchangpeng %!s(int64=5) %!d(string=hai) anos
pai
achega
1cc349a930
Modificáronse 43 ficheiros con 5166 adicións e 1016 borrados
  1. 4 0
      .idea/encodings.xml
  2. 0 6
      .idea/inspectionProfiles/Project_Default.xml
  3. 16 3
      pc/src/Global.js
  4. 13 2
      pc/src/api/Navs.js
  5. 34 0
      pc/src/api/getApiRes.js
  6. 8 0
      pc/src/router/index.js
  7. 679 0
      pc/src/views/AcrossVip.vue
  8. 877 875
      pc/src/views/Lesson.vue
  9. 42 9
      pc/src/views/courseEdit.vue
  10. 5 5
      pc/src/views/courses.vue
  11. BIN=BIN
      tv/.idea/workspace.xml
  12. 2 1
      tv/public/index.html
  13. 15 15
      tv/src/Global.js
  14. 3 0
      tv/src/assets/img/3pkRank/3pkbg.svg
  15. 46 0
      tv/src/assets/img/3pkRank/blueMvp.svg
  16. 16 0
      tv/src/assets/img/3pkRank/bluetit.svg
  17. 17 0
      tv/src/assets/img/3pkRank/pk.svg
  18. 9 0
      tv/src/assets/img/3pkRank/rank1.svg
  19. 9 0
      tv/src/assets/img/3pkRank/rank2.svg
  20. 9 0
      tv/src/assets/img/3pkRank/rank3.svg
  21. 46 0
      tv/src/assets/img/3pkRank/redMvp.svg
  22. 16 0
      tv/src/assets/img/3pkRank/redtit.svg
  23. 46 0
      tv/src/assets/img/3pkRank/yellowMvp.svg
  24. 19 0
      tv/src/assets/img/3pkRank/yellowtit.svg
  25. 21 0
      tv/src/assets/img/pk/yellowFlag.svg
  26. 3 0
      tv/src/assets/img/threepk/blueCube.svg
  27. 3 0
      tv/src/assets/img/threepk/redCube.svg
  28. 0 0
      tv/src/assets/img/threepk/threepkbg.png
  29. 3 0
      tv/src/assets/img/threepk/yellowcube.svg
  30. 1 1
      tv/src/components/Headside.vue
  31. 10 5
      tv/src/libs/rem.js
  32. 1 2
      tv/src/main.js
  33. 12 4
      tv/src/router/index.js
  34. 17 17
      tv/src/views/2pkRank.vue
  35. 0 43
      tv/src/views/3pk.vue
  36. 721 0
      tv/src/views/3pkRank.vue
  37. 7 5
      tv/src/views/Index.vue
  38. 3 3
      tv/src/views/Main.vue
  39. 15 4
      tv/src/views/Rank.vue
  40. 6 3
      tv/src/views/Wait.vue
  41. 841 0
      tv/src/views/Wait2.vue
  42. 38 13
      tv/src/views/pk.vue
  43. 1533 0
      tv/src/views/threepk.vue

+ 4 - 0
.idea/encodings.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>

+ 0 - 6
.idea/inspectionProfiles/Project_Default.xml

@@ -1,6 +0,0 @@
-<component name="InspectionProjectProfileManager">
-  <profile version="1.0">
-    <option name="myName" value="Project Default" />
-    <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
-  </profile>
-</component>

+ 16 - 3
pc/src/Global.js

@@ -263,9 +263,9 @@ turnResToOption = function (data) {
             key: parseInt(item.UserInfo.Id),
             value: parseInt(item.UserInfo.Id),
         }
-    })
+    });
     return ids
-}
+};
 
 turnResToOptionByViper = function (data) {
     if (!data) return false;
@@ -351,7 +351,20 @@ turnStdToOption = function (data) {
         }
     })
     return ids
-}
+};
+
+
+turnResToOptionByGroup = function (data) {
+    if (!data) return false;
+    let ids = data.map(item => {
+        return {
+            label: item.GroupName,
+            key: parseInt(item.GroupId),
+            value: parseInt(item.GroupId),
+        }
+    });
+    return ids
+};
 
 numberToWeekdays = function (val) {
     switch (parseInt(val)) {

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

@@ -131,6 +131,7 @@ let navs = [
         "grouplist": "2,5",
         "icon": "el-icon-setting",
     },
+
     {
         "clmid": "12",
         "clmcode": "shop",
@@ -140,7 +141,17 @@ let navs = [
         "show": 2,
         "grouplist": "2,5",
         "icon": "el-icon-s-shop",
-    }, {
+    },
+    {
+        "clmid": "11",
+        "clmcode": "log",
+        "clmname": "跨店会员",
+        "clmurl": "/AcrossVip",
+        "prname": "",
+        "show": 2,
+        "grouplist": "2,5",
+        "icon": "el-icon-user-solid",
+    },{
         "clmid": "13",
         "clmcode": "adminManage",
         "clmname": "管理员管理",
@@ -158,7 +169,7 @@ let navs = [
         "show": 2,
         "grouplist": "2,5",
         "icon": "el-icon-s-claim",
-    }, {
+    },  {
         "clmid": "15",
         "clmcode": "setting",
         "clmname": "系统设置",

+ 34 - 0
pc/src/api/getApiRes.js

@@ -748,3 +748,37 @@ export function VipUserAssociatedPhoneStatusEdit(postdata) {
     let url = headapi + 'v1/User/VipUserAssociatedPhoneStatusEdit ';
     return getApiBasic(url, postdata);
 }
+
+// 12/3 跨店管理
+
+
+// 跨店会员查询
+export function AcrossVipUserQuery(postdata) {
+    let url = headapi + 'v1/User/AcrossVipUserQuery ';
+    return getApiBasic(url, postdata);
+}
+
+// 跨店会员删除
+export function AcrossVipUserDel(postdata) {
+    let url = headapi + 'v1/User/AcrossVipUserDel ';
+    return getApiBasic(url, postdata);
+}
+
+// 跨店会员添加
+export function AcrossVipUserAdd(postdata) {
+    let url = headapi + 'v1/User/AcrossVipUserAdd ';
+    return getApiBasic(url, postdata);
+}
+// 12/4 会员基本信息foradmin
+
+// 跨店会员添加
+export function VipUserSimpleQueryByAdmin(postdata) {
+    let url = headapi + 'v1/User/VipUserSimpleQueryByAdmin ';
+    return getApiBasic(url, postdata);
+}
+
+// 商家分组添加
+export function ShopGroupQuery(postdata) {
+    let url = headapi + 'v1/Shop/ShopGroupQuery ';
+    return getApiBasic(url, postdata);
+}

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

@@ -268,6 +268,14 @@ const routes = [
                     title: "关联手机",
                     clmid: "11",
                 }
+            },{
+                path: '/AcrossVip',
+                name: 'AcrossVip',
+                component: () => import('@/views/AcrossVip.vue'),
+                meta: {
+                    title: "跨店会员",
+                    clmid: "11",
+                }
             },
         ]
     }, {

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 679 - 0
pc/src/views/AcrossVip.vue


+ 877 - 875
pc/src/views/Lesson.vue

@@ -1,888 +1,890 @@
 <template>
-  <div class="context">
-    <div class="panel">
-      <h5>课目管理</h5>
-    </div>
-    <div class="change">
-      <el-button type="primary" @click="addLesson" v-if="userLevel != 4">新增课程</el-button>
-      <el-button @click="lessonStudenChange" v-if="userLevel != 4">增删课程会员</el-button>
-      <el-button @click="delList" v-if="userLevel != 4">删除</el-button>
-      <el-button @click="query" :disabled="serachBtnStatus">刷新</el-button>
-    </div>
-    <div class="table">
-      <el-table
-          :data="tableData"
-          border
-          is-horizontal-resize
-          :default-sort="{prop: 'date', order: 'descending'}"
-          element-loading-background="rgba(0, 0, 0, 0.8)"
-          @selection-change="handleSelectionChange"
-          @current-change="clickChange"
-      >
-        >
-        <el-table-column label="选择" width="55">
-          <template slot-scope="scope">
-            <el-radio v-model="tableRadio" :label="scope.row"><i></i></el-radio>
-          </template>
-        </el-table-column>
-        <el-table-column
-            type="index"
-            label="序号"
-            align="center"
-
-            width="50">
-        </el-table-column>
-        <el-table-column
-            prop="ClassSelf.ClassName"
-            label="课程名称"
-        >
-        </el-table-column>
-        <el-table-column
-            prop="ClassSelf.ClassType"
-            label="是否跨店"
-            width="110"
-            align="center"
-            sortable
-        >
-          <template slot-scope="scope">
-            <span v-if="scope.row.ClassSelf.ClassType == 1">是</span>
-            <span v-if="scope.row.ClassSelf.ClassType == 0">否</span>
-          </template>
-        </el-table-column>
-        <el-table-column
-            prop="ClassSelf.ShopId"
-            label="课程类型"
-            width="110"
-            align="center"
-            sortable
-        >
-          <template slot-scope="scope">
-            <span v-if="scope.row.ClassSelf.ClassType != 0">占用课时</span>
-            <span v-if="scope.row.ClassSelf.ClassType == 0">不占课时</span>
-          </template>
-        </el-table-column>
-        <el-table-column
-            prop="ClassSelf.ConsumeHour"
-            label="消耗课时"
-            sortable
-        >
-        </el-table-column>
-        <el-table-column
-            prop="ClassSelf.TopLimit"
-            label="建议上课人数"
-            sortable
-        >
-        </el-table-column>
-        <el-table-column
-            prop="ClassSelf.WxVisible"
-            label="微信可见"
-            v-if="userLevel != 4"
-        >
-          <template slot-scope="scope">
-            <el-switch
-                v-model="scope.row.ClassSelf.WxVisible"
-                :active-value="1"
-                :inactive-value="0"
-                active-color="#409EFF"
-                inactive-color="#D9D9D9"
-                @change=changeWechat($event,scope.row.ClassSelf)
+    <div class="context">
+        <div class="panel">
+            <h5>课目管理</h5>
+        </div>
+        <div class="change">
+            <el-button type="primary" @click="addLesson" v-if="userLevel != 4">新增课程</el-button>
+            <el-button @click="lessonStudenChange" v-if="userLevel != 4">增删课程会员</el-button>
+            <el-button @click="delList" v-if="userLevel != 4">删除</el-button>
+            <el-button @click="query" :disabled="serachBtnStatus">刷新</el-button>
+        </div>
+        <div class="table">
+            <el-table
+                    :data="tableData"
+                    border
+                    is-horizontal-resize
+                    :default-sort="{prop: 'date', order: 'descending'}"
+                    element-loading-background="rgba(0, 0, 0, 0.8)"
+                    @selection-change="handleSelectionChange"
+                    @current-change="clickChange"
             >
-            </el-switch>
-          </template>
-        </el-table-column>
-        <el-table-column
-            prop="ClassSelf.ClassColor"
-            label="课程颜色"
-            width="110"
-            v-if="userLevel != 4"
-        >
-          <template slot-scope="scope">
-            <el-color-picker :predefine="predefineColors" v-model="scope.row.ClassSelf.ClassColor"
-                             @change="changeColor(scope.row.ClassSelf.ClassColor,scope.row.ClassSelf)"></el-color-picker>
-          </template>
-        </el-table-column>
-        <el-table-column
-            prop="ClassSelf.Memo"
-            label="备注">
-          <template slot-scope="scope">
-            <el-popover
-                placement="top"
-                title="标题"
-                width="200"
-                trigger="hover"
-                :content="scope.row.ClassSelf.Memo">
+                >
+                <el-table-column label="选择" width="55">
+                    <template slot-scope="scope">
+                        <el-radio v-model="tableRadio" :label="scope.row"><i></i></el-radio>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        type="index"
+                        label="序号"
+                        align="center"
+
+                        width="50">
+                </el-table-column>
+                <el-table-column
+                        prop="ClassSelf.ClassName"
+                        label="课程名称"
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="ClassSelf.ShopId"
+                        label="是否跨店"
+                        width="110"
+                        align="center"
+                        sortable
+                >
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.ClassSelf.ShopId != 0">否</span>
+                        <span v-if="scope.row.ClassSelf.ShopId == 0">是</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="ClassSelf.ShopId"
+                        label="课程类型"
+                        width="110"
+                        align="center"
+                        sortable
+                >
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.ClassSelf.ClassType != 0">占用课时</span>
+                        <span v-if="scope.row.ClassSelf.ClassType == 0">不占课时</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="ClassSelf.ConsumeHour"
+                        label="消耗课时"
+                        sortable
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="ClassSelf.TopLimit"
+                        label="建议上课人数"
+                        sortable
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="ClassSelf.WxVisible"
+                        label="微信可见"
+                        v-if="userLevel != 4"
+                >
+                    <template slot-scope="scope">
+                        <el-switch
+                                v-model="scope.row.ClassSelf.WxVisible"
+                                :active-value="1"
+                                :inactive-value="0"
+                                active-color="#409EFF"
+                                inactive-color="#D9D9D9"
+                                @change=changeWechat($event,scope.row.ClassSelf)
+                        >
+                        </el-switch>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="ClassSelf.ClassColor"
+                        label="课程颜色"
+                        width="110"
+                        v-if="userLevel != 4"
+                >
+                    <template slot-scope="scope">
+                        <el-color-picker :predefine="predefineColors" v-model="scope.row.ClassSelf.ClassColor"
+                                         @change="changeColor(scope.row.ClassSelf.ClassColor,scope.row.ClassSelf)"></el-color-picker>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="ClassSelf.Memo"
+                        label="备注">
+                    <template slot-scope="scope">
+                        <el-popover
+                                placement="top"
+                                title="标题"
+                                width="200"
+                                trigger="hover"
+                                :content="scope.row.ClassSelf.Memo">
                             <span slot="reference"
                                   v-if="scope.row.ClassSelf.Memo.length > 6">{{ scope.row.ClassSelf.Memo.substr(0, 6) }} ....</span>
-            </el-popover>
-            <span v-if="scope.row.ClassSelf.Memo.length <= 6">{{ scope.row.ClassSelf.Memo }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column
-            prop="ClassSelf.ClassId"
-            label="操作"
-        >
-          <template slot-scope="scope">
-            <el-button type="text" @click="editLesson(scope.row.ClassSelf)" v-if="userLevel != 4">编辑</el-button>
-            <el-button type="text" @click="Lessonmember(scope.row.Userlist)">课程会员</el-button>
-          </template>
-        </el-table-column>
-
-      </el-table>
-      <br>
-      <el-pagination
-          background
-          :total="pageination.total"
-          :page-size="pageination.pageItem"
-          @current-change="pageChange"
-      ></el-pagination>
-    </div>
-
-    <el-dialog :title="dialogTitle" :visible.sync="dialogLesson" :width="form.btnType == 0? '1200px':'650px'">
-      <div>
-        <div class="pull-left">
-          <el-form ref="form" :model="form" label-width="160px">
-            <el-form-item label="课程名称" :required="true">
-              <el-input v-model="form.ClassName"></el-input>
-            </el-form-item>
-            <el-form-item label="消耗课时">
-              <el-input-number v-model="form.ConsumeHour" :min="0" :max="99999"
-                               label="(天)"></el-input-number>
-            </el-form-item>
-            <el-form-item label="建议上课人数">
-              <el-input-number v-model="form.TopLimit" :min="0" :max="99999"
-                               label="(天)"></el-input-number>
-            </el-form-item>
-            <el-form-item label="微信可见">
-              <el-switch
-                  v-model="form.wxVisible"
-                  :active-value="1"
-                  :inactive-value="0"
-                  active-color="#409EFF"
-                  inactive-color="#D9D9D9">
-              </el-switch>
-            </el-form-item>
-            <el-form-item label="是否可选课">
-              <el-switch
-                  v-model="form.classType"
-                  :active-value="1"
-                  :inactive-value="0"
-                  active-color="#409EFF"
-                  inactive-color="#D9D9D9">
-              </el-switch>
-            </el-form-item>
-            <!--<el-form-item label="是否跨店">-->
-            <!--<el-switch-->
-            <!--v-model="form.allUse"-->
-            <!--:active-value="0"-->
-            <!--:inactive-value="1"-->
-            <!--active-color="#409EFF"-->
-            <!--inactive-color="#D9D9D9"-->
-            <!--:disabled="true"-->
-            <!--&gt;-->
-            <!--</el-switch>-->
-            <!--</el-form-item>-->
-            <el-form-item label="课程颜色">
-              <el-color-picker :predefine="predefineColors" v-model="form.ClassColor"></el-color-picker>
-            </el-form-item>
-            <el-form-item label="备注">
-              <el-input v-model="form.Memo"></el-input>
-            </el-form-item>
-          </el-form>
+                        </el-popover>
+                        <span v-if="scope.row.ClassSelf.Memo.length <= 6">{{ scope.row.ClassSelf.Memo }}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="ClassSelf.ClassId"
+                        label="操作"
+                >
+                    <template slot-scope="scope">
+                        <el-button type="text" @click="editLesson(scope.row.ClassSelf)" v-if="userLevel != 4">编辑
+                        </el-button>
+                        <el-button type="text" @click="Lessonmember(scope.row.Userlist)">课程会员</el-button>
+                    </template>
+                </el-table-column>
+
+            </el-table>
+            <br>
+            <el-pagination
+                    background
+                    :total="pageination.total"
+                    :page-size="pageination.pageItem"
+                    @current-change="pageChange"
+            ></el-pagination>
         </div>
-        <div class="pull-right" v-if="form.btnType == 0">
-          <el-form ref="form" :model="form" label-width="160px">
-            <el-form-item label="课程会员">
-              <el-transfer filterable v-model="form.dialogValue" :data="form.dialogdata"
-                           :titles="['全部会员','已选会员']"></el-transfer>
-            </el-form-item>
-          </el-form>
-        </div>
-      </div>
-      <div class="dialogFooter">
-        <el-button type="primary" size="small" v-if="form.btnType == 0" @click="confirmAddLesson">确定</el-button>
-        <el-button type="primary" size="small" v-if="form.btnType == 1" @click="confirmEditLesson">确定
-        </el-button>
-        <el-button size="small" @click="dialogLesson = false">取消</el-button>
-      </div>
-    </el-dialog>
-
-    <el-dialog title="增删课程会员" :visible.sync="dialogVisible" width="650px">
-      <div class="dialogTitle">
-        <span>基础功能</span>
-      </div>
-      <div>
-        <el-transfer filterable v-model="dialogValue" :data="form.dialogdata"
-                     :titles="['会员列表', '已添加会员']"></el-transfer>
-      </div>
-      <div class="dialogFooter">
-        <el-button type="primary" size="small" @click="cofirmClassVipuserEdit">确定</el-button>
-        <el-button @click=" dialogVisible = false" size="small">取消</el-button>
-      </div>
-    </el-dialog>
-
-    <el-dialog title="课程会员" :visible.sync="dialogTableVisible" style="overflow-y: scroll">
-      <el-table :data="gridData">
-        <el-table-column property="Name" label="姓名" width="200"></el-table-column>
-        <el-table-column property="Phone" label="手机"></el-table-column>
-        <el-table-column property="VipType" label="会员类型">
-          <template slot-scope="scope">
-            <span v-if="scope.row.VipType == 1">年费会员</span>
-            <span v-if="scope.row.VipType == 2">充值会员</span>
-          </template>
-        </el-table-column>
-        <el-table-column property="ExpTime" label="有效期" :formatter="filterFmtDate"></el-table-column>
-      </el-table>
-    </el-dialog>
-  </div>
+
+        <el-dialog :title="dialogTitle" :visible.sync="dialogLesson" :width="form.btnType == 0? '1200px':'650px'">
+            <div>
+                <div class="pull-left">
+                    <el-form ref="form" :model="form" label-width="160px">
+                        <el-form-item label="课程名称" :required="true">
+                            <el-input v-model="form.ClassName"></el-input>
+                        </el-form-item>
+                        <el-form-item label="消耗课时">
+                            <el-input-number v-model="form.ConsumeHour" :min="0" :max="99999"
+                                             label="(天)"></el-input-number>
+                        </el-form-item>
+                        <el-form-item label="建议上课人数">
+                            <el-input-number v-model="form.TopLimit" :min="0" :max="99999"
+                                             label="(天)"></el-input-number>
+                        </el-form-item>
+                        <el-form-item label="微信可见">
+                            <el-switch
+                                    v-model="form.wxVisible"
+                                    :active-value="1"
+                                    :inactive-value="0"
+                                    active-color="#409EFF"
+                                    inactive-color="#D9D9D9">
+                            </el-switch>
+                        </el-form-item>
+                        <!--<el-form-item label="是否可选课">-->
+                        <!--<el-switch-->
+                        <!--v-model="form.ShopId"-->
+                        <!--:active-value="form.ShopId"-->
+                        <!--:inactive-value="0"-->
+                        <!--active-color="#409EFF"-->
+                        <!--inactive-color="#D9D9D9">-->
+                        <!--</el-switch>-->
+                        <!--</el-form-item>-->
+                        <el-form-item label="是否跨店">
+                            <el-switch
+                                    v-model="form.allUse"
+                                    :active-value="0"
+                                    :inactive-value="1"
+                                    active-color="#409EFF"
+                                    inactive-color="#D9D9D9"
+                            >
+                                <!--:disabled="true"-->
+                            </el-switch>
+                        </el-form-item>
+                        <el-form-item label="课程颜色">
+                            <el-color-picker :predefine="predefineColors" v-model="form.ClassColor"></el-color-picker>
+                        </el-form-item>
+                        <el-form-item label="备注">
+                            <el-input v-model="form.Memo"></el-input>
+                        </el-form-item>
+                    </el-form>
+                </div>
+                <div class="pull-right" v-if="form.btnType == 0">
+                    <el-form ref="form" :model="form" label-width="160px">
+                        <el-form-item label="课程会员">
+                            <el-transfer filterable v-model="form.dialogValue" :data="form.dialogdata"
+                                         :titles="['全部会员','已选会员']"></el-transfer>
+                        </el-form-item>
+                    </el-form>
+                </div>
+            </div>
+            <div class="dialogFooter">
+                <el-button type="primary" size="small" v-if="form.btnType == 0" @click="confirmAddLesson">确定</el-button>
+                <el-button type="primary" size="small" v-if="form.btnType == 1" @click="confirmEditLesson">确定
+                </el-button>
+                <el-button size="small" @click="dialogLesson = false">取消</el-button>
+            </div>
+        </el-dialog>
+
+        <el-dialog title="增删课程会员" :visible.sync="dialogVisible" width="650px">
+            <div class="dialogTitle">
+                <span>基础功能</span>
+            </div>
+            <div>
+                <el-transfer filterable v-model="dialogValue" :data="form.dialogdata"
+                             :titles="['会员列表', '已添加会员']"></el-transfer>
+            </div>
+            <div class="dialogFooter">
+                <el-button type="primary" size="small" @click="cofirmClassVipuserEdit">确定</el-button>
+                <el-button @click=" dialogVisible = false" size="small">取消</el-button>
+            </div>
+        </el-dialog>
+
+        <el-dialog title="课程会员" :visible.sync="dialogTableVisible" style="overflow-y: scroll">
+            <el-table :data="gridData">
+                <el-table-column property="Name" label="姓名" width="200"></el-table-column>
+                <el-table-column property="Phone" label="手机"></el-table-column>
+                <el-table-column property="VipType" label="会员类型">
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.VipType == 1">年费会员</span>
+                        <span v-if="scope.row.VipType == 2">充值会员</span>
+                    </template>
+                </el-table-column>
+                <el-table-column property="ExpTime" label="有效期" :formatter="filterFmtDate"></el-table-column>
+            </el-table>
+        </el-dialog>
+    </div>
 </template>
 
 <script>
-import Global from '../Global.js'
-import {
-  ClassAdd,
-  ClassEdit,
-  ClassListQuery,
-  ClassColorEdit,
-  ClassStatusEdit,
-  VipUserListQuery,
-  ClassVisibleStatusEdit,
-  ClassVipuserQuery,
-  ClassVipuserEdit,
-  testTable,
-  testSelect
-} from "../api/getApiRes";
-
-let qs = require('qs');
-export default {
-  data() {
-    return {
-      serachBtnStatus: false,
-      dialogLesson: false,//新增课程
-      dialogVisible: false,
-      dialogTableVisible: false,
-      dialogTitle: '',
-      dialogdata: [],
-      gridData: [],
-      dialogValue: [],
-      allTableData: [],
-      // panel 配置项目
-      panel: {
-        usercode: '',
-        username: '',
-        compname: '',
-        keyword: '',
-        USERCODE: '',
-        taskstatus: 99,
-        tableData: [],
-        allTableData: [],
-        draw: 1,
-        start: 0,
-        recordsTotal: 0,
-        limit: '10',
-        multipleSort: false,
-        loading: false,
-        fileList: [],
-        multipleSelection: [],
-        detectedmac: '',
-        options: [
-          {value: 99, label: '全部'},
-          {value: 1, label: '进行中'},
-          {value: 2, label: '已完成'},
-        ],
-        time1: globalBt(),
-      },
-      form: {
-        ClassName: "",
-        ConsumeHour: 0,
-        TopLimit: 0,
-        wxVisible: 1,
-        classType: 1,
-        ClassColor: "#ffffff",
-        teacherId: "",
-        classId: "",
-        allUse: "",
-        Memo: "",
-        dialogdata: [],//穿梭待选
-        dialogValue: [],//穿梭已选
-      },
-      multipleSelection: [],
-      pageination: {
-        pageItem: 100,
-        pageoptions: pageOptions(),
-        total: 100,
-        pageIndex: 1,
-      },
-      tableData: [],
-      tableRadio: [],
-      userLevel: localStorage.userLevel,
-      predefineColors: [
-        '#8ABFF7',
-        '#73C1BC',
-        '#ADE5C7',
-        '#CBECF0',
-        '#DCEDC8',
-        '#EBF2DB',
-        '#C9D1FD',
-        '#C6ACF4',
-        '#E2B5FA',
-        '#E1BEE7',
-        '#FFA5D9',
-        '#F89A9A',
-        '#F2B1AC',
-        '#F8BBD0',
-        '#FFCDD2',
-        '#FCC66C',
-        '#D6B9A7',
-        '#D9D9C4',
-        '#FCECBE',
-        '#E9E9E9',
-        '#FFA5FC',
-        '#B7BEFF',
-        '#91E5FF',
-        '#97FFF8',
-        '#A7FFB8',
-        '#75FF65',
-        '#FFFF94',
-        '#FFE0AC',
-        '#FFB770',
-        '#FFCCB5'
-      ]
+    import Global from '../Global.js'
+    import {
+        ClassAdd,
+        ClassEdit,
+        ClassListQuery,
+        ClassColorEdit,
+        ClassStatusEdit,
+        VipUserListQuery,
+        ClassVisibleStatusEdit,
+        ClassVipuserQuery,
+        ClassVipuserEdit,
+        testTable,
+        testSelect
+    } from "../api/getApiRes";
+
+    let qs = require('qs');
+    export default {
+        data() {
+            return {
+                serachBtnStatus: false,
+                dialogLesson: false,//新增课程
+                dialogVisible: false,
+                dialogTableVisible: false,
+                dialogTitle: '',
+                dialogdata: [],
+                gridData: [],
+                dialogValue: [],
+                allTableData: [],
+                // panel 配置项目
+                panel: {
+                    usercode: '',
+                    username: '',
+                    compname: '',
+                    keyword: '',
+                    USERCODE: '',
+                    taskstatus: 99,
+                    tableData: [],
+                    allTableData: [],
+                    draw: 1,
+                    start: 0,
+                    recordsTotal: 0,
+                    limit: '10',
+                    multipleSort: false,
+                    loading: false,
+                    fileList: [],
+                    multipleSelection: [],
+                    detectedmac: '',
+                    options: [
+                        {value: 99, label: '全部'},
+                        {value: 1, label: '进行中'},
+                        {value: 2, label: '已完成'},
+                    ],
+                    time1: globalBt(),
+                },
+                form: {
+                    ClassName: "",
+                    ConsumeHour: 0,
+                    TopLimit: 0,
+                    wxVisible: 1,
+                    classType: 1,
+                    ClassColor: "#ffffff",
+                    teacherId: "",
+                    classId: "",
+                    allUse: "",
+                    Memo: "",
+                    dialogdata: [],//穿梭待选
+                    dialogValue: [],//穿梭已选
+                },
+                multipleSelection: [],
+                pageination: {
+                    pageItem: 100,
+                    pageoptions: pageOptions(),
+                    total: 100,
+                    pageIndex: 1,
+                },
+                tableData: [],
+                tableRadio: [],
+                userLevel: localStorage.userLevel,
+                predefineColors: [
+                    '#8ABFF7',
+                    '#73C1BC',
+                    '#ADE5C7',
+                    '#CBECF0',
+                    '#DCEDC8',
+                    '#EBF2DB',
+                    '#C9D1FD',
+                    '#C6ACF4',
+                    '#E2B5FA',
+                    '#E1BEE7',
+                    '#FFA5D9',
+                    '#F89A9A',
+                    '#F2B1AC',
+                    '#F8BBD0',
+                    '#FFCDD2',
+                    '#FCC66C',
+                    '#D6B9A7',
+                    '#D9D9C4',
+                    '#FCECBE',
+                    '#E9E9E9',
+                    '#FFA5FC',
+                    '#B7BEFF',
+                    '#91E5FF',
+                    '#97FFF8',
+                    '#A7FFB8',
+                    '#75FF65',
+                    '#FFFF94',
+                    '#FFE0AC',
+                    '#FFB770',
+                    '#FFCCB5'
+                ]
+            }
+        },
+        mounted() {
+            this.panelSelect();
+            this.getTableQuery();
+        },
+        methods: {
+            clickChange(item) {
+                this.tableRadio = item
+            },
+
+            // 课程会员增删
+            cofirmClassVipuserEdit() {
+                let that = this;
+                let userlist = that.dialogValue.toString();
+                let param = {
+                    token: localStorage.token,
+                    classId: this.form.classId,
+                    userlist: userlist,
+                };
+                let postdata = qs.stringify(param);
+                ClassVipuserEdit(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.$message({
+                            showClose: true,
+                            message: '接口修改成功!',
+                            type: 'success'
+                        });
+                        that.dialogVisible = false;
+                        that.getTableQuery();
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 确认添加课程
+            confirmAddLesson() {
+                let that = this;
+
+                // checkNum
+                if (!that.form.ClassName) {
+                    this.$message.error('错了哦,课程名称不能为空');
+                    return false
+                }
+                if (that.form.ClassName.length > 8) {
+                    this.$message.error('错了哦,课程名称字数超过8个字');
+                    return false
+                }
+                if (that.form.Memo) {
+                    if (that.form.Memo.length > 200) {
+                        this.$message.error('错了哦,备注字数超过200个字');
+                        return false
+                    }
+                }
+                // 通用是0,非通用是shopid
+                let shopId = that.form.allUse == 0 ? 0 : localStorage.ShopId;
+                let userlist = that.form.dialogValue.toString();
+                let param = {
+                    token: localStorage.token,
+                    shopId: shopId,
+                    className: that.form.ClassName,
+                    consumeHour: that.form.ConsumeHour,
+                    topLimit: that.form.TopLimit,
+                    classType: that.form.classType,
+                    wxVisible: that.form.wxVisible,
+                    classColor: that.form.ClassColor,
+                    userlist: userlist,
+                    teacherId: 0,//预留
+                    memo: that.form.Memo,
+                };
+                let postdata = qs.stringify(param);
+                ClassAdd(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        // 关闭弹窗
+                        that.dialogLesson = false;
+                        // 重载列表
+                        that.getTableQuery();
+                        that.$message({
+                            showClose: true,
+                            message: '添加课程成功!',
+                            type: 'success'
+                        });
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            confirmEditLesson() {
+                let that = this;
+                // checkNum
+                if (!that.form.ClassName) {
+                    this.$message.error('错了哦,课程名称不能为空');
+                    return false
+                }
+                if (that.form.ClassName.length > 8) {
+                    this.$message.error('错了哦,课程名称字数超过8个字');
+                    return false
+                }
+                if (that.form.Memo) {
+                    if (that.form.Memo.length > 200) {
+                        this.$message.error('错了哦,备注字数超过200个字');
+                        return false
+                    }
+                }
+
+                let teacherId = that.form.dialogValue ? that.form.dialogValue.toString() : '';
+                // 通用是0,非通用是shopid
+                let shopId = that.form.allUse == 0 ? 0 : localStorage.ShopId;
+                let param = {
+                    token: localStorage.token,
+                    shopId: shopId,
+                    classId: that.form.classId,
+                    className: that.form.ClassName,
+                    consumeHour: that.form.ConsumeHour,
+                    topLimit: that.form.TopLimit,
+                    classType: that.form.classType,
+                    wxVisible: that.form.wxVisible,
+                    classColor: that.form.ClassColor,
+                    teacherId: teacherId,
+                    memo: that.form.Memo,
+                };
+                let postdata = qs.stringify(param);
+                ClassEdit(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        // 关闭弹窗
+                        that.dialogLesson = false;
+                        // 重载列表
+                        that.getTableQuery();
+                        that.$message({
+                            showClose: true,
+                            message: '会员课程调整成功!',
+                            type: 'success'
+                        });
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 新增课程
+            addLesson() {
+                this.form.btnType = 0; //新增
+                // clear
+                this.form.ClassName = '';
+                this.form.ConsumeHour = 0;
+                this.form.TopLimit = 0;
+                this.form.wxVisible = 1;
+                this.form.ClassColor = "#ffffff";
+                this.form.Memo = "";
+                this.form.dialogValue = [];
+                this.dialogLesson = true;
+                this.dialogTitle = '新增课程'
+                this.panelSelect();
+            },
+            // 改色
+            changeColor(c, row) {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    classId: row.ClassId,//
+                    classColor: c,//
+                };
+                let postdata = qs.stringify(param);
+                ClassColorEdit(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.$message({
+                            showClose: true,
+                            message: '课程颜色已编辑',
+                            type: 'success'
+                        });
+                        // 重载列表
+                        that.getTableQuery();
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 删除
+            delList() {
+                let that = this;
+                if (this.tableRadio.length == 0) {
+                    this.$message.error("请先选中一条记录");
+                    return false
+                }
+                let row = that.tableRadio;
+                let param = {
+                    token: localStorage.token,
+                    classId: row.ClassSelf.ClassId,
+                    status: 9,//0禁用1启用9删除
+                };
+                let postdata = qs.stringify(param);
+
+                this.$confirm('此操作将永久删除该课程, 是否继续?', '提示', {
+                    confirmButtonText: '确定',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(() => {
+                    ClassStatusEdit(postdata).then(res => {
+                        let json = res;
+                        if (json.Code == 0) {
+                            that.$message({
+                                showClose: true,
+                                message: '选中的课程已删除!',
+                                type: 'success'
+                            });
+                            // 重载列表
+                            that.getTableQuery();
+                        } else {
+                            that.$message.error(json.Memo);
+                        }
+                    });
+                }).catch(() => {
+                    this.$message({
+                        type: 'info',
+                        message: '已取消删除'
+                    });
+                });
+            },
+            // 加载选项
+            panelSelect() {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    vipType: '',
+                    start: 1,
+                    expDay: '',
+                    tableMax: 9999,
+                };
+                let postdata = qs.stringify(param);
+                VipUserListQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        if (json.Rs == null) return false;
+                        // that.dialogdata = json.Rs;
+                        that.form.dialogdata = turnResToOption(json.Rs)
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 微信可见与否
+            changeWechat(e, row) {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    classId: row.ClassId,//
+                    wxVisible: e,//
+                };
+                let postdata = qs.stringify(param);
+                ClassVisibleStatusEdit(postdata).then(res => {
+                    let json = res;
+                    let text = parseInt(e) == 1 ? '可见' : '不可见';
+                    if (json.Code == 0) {
+                        that.$message({
+                            showClose: true,
+                            message: '当前用户微信已' + text,
+                            type: 'success'
+                        });
+                        // 重载列表
+                        that.getTableQuery();
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 增删会员课程
+            lessonStudenChange() {
+                this.panelSelect();
+                if (this.tableRadio.length == 0) {
+                    this.$message.error("请先选中一条记录");
+                    return false
+                }
+                let row = this.tableRadio;
+                let userArrary = [];
+                row.Userlist.map(function (item) {
+                    userArrary.push(item.Id)
+                });
+                this.form.classId = row.ClassSelf.ClassId;
+                this.dialogValue = userArrary;
+                this.dialogVisible = true
+                // 读取左侧会员列表
+            },
+            handleSelectionChange(val) {
+                this.multipleSelection = val;
+            },
+            clearForm() {
+                // clear
+                this.form.ClassName = '';
+                this.form.ConsumeHour = 0;
+                this.form.TopLimit = 0;
+                this.form.wxVisible = 1;
+                this.form.ClassColor = '';
+                this.form.Memo = '';
+            },
+            // 编辑
+            editLesson(row) {
+                let that = this;
+                this.clearForm();
+                this.form.btnType = 1; //编辑
+                this.form.ClassName = row.ClassName;
+                this.form.ConsumeHour = row.ConsumeHour;
+                this.form.TopLimit = row.TopLimit;
+                this.form.wxVisible = row.WxVisible;
+                this.form.ClassColor = row.ClassColor;
+                this.form.Memo = row.Memo;
+                this.form.dialogValue = row.teacherId;
+                this.form.classId = row.ClassId
+                this.form.ShopId = row.ShopId;
+                this.form.allUse = row.ShopId;
+                this.dialogLesson = true;
+                // 读取已选的会员
+                console.log(row);
+                this.form.dialogValue = [];
+
+                this.dialogTitle = '编辑课程'
+            },
+            Lessonmember(Userlist) {
+                this.dialogTableVisible = true;
+                this.gridData = Userlist;
+            },
+            // 查询按钮
+            query() {
+                let that = this;
+                this.getTableQuery();
+                that.serachBtnStatus = true;
+                let totalTime = 2
+                let clock = window.setInterval(() => {
+                    totalTime--
+                    if (totalTime < 0) {
+                        totalTime = 2;
+                        that.serachBtnStatus = false;
+                    }
+                }, 1000)
+                this.$message.success('查询完毕');
+            },
+            // 页面数据查询
+            getTableQuery() {
+                let that = this;
+                that.loading = true;
+                let param = {
+                    token: localStorage.token,
+                    supregionid: 0,//
+                    regionid: this.panel.regionid,//
+                    comid: 1,//
+                    tagname: that.panel.tagname,//标签名
+                    start: 1,//
+                    tableMax: 9999,//
+                };
+                let postdata = qs.stringify(param);
+                ClassListQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.loading = false;
+                        if (json.Rs) {
+                            that.allTableData = json.Rs;
+                            that.recordsTotal = json.Rs.length;
+                        } else {
+                            that.allTableData = [];
+                            that.recordsTotal = 0;
+                        }
+
+                        // 设置分页数据
+                        that.setPaginations();
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 设置分页数据
+            setPaginations() {
+                // 分页属性
+                let that = this;
+                that.pageination.total = that.recordsTotal;
+                // 默认分页
+                that.tableData = that.allTableData.filter((item, index) => {
+                    return index < that.pageination.pageItem;
+                });
+            },
+            // 每页显示数量
+            handleSizeChange() {
+                let that = this;
+                that.tableData = that.allTableData.filter((item, index) => {
+                    return index < that.pageination.pageItem;
+                });
+                that.draw = that.pageination.pageItem;
+                that.getTableQuery();
+            },
+            // 翻页
+            pageChange(pageIndex) {
+                let that = this;
+                // 获取当前页
+                let index = that.pageination.pageItem * (pageIndex - 1);
+                // 数据总数
+                let nums = that.pageination.pageItem * pageIndex;
+                // 容器
+                let tables = [];
+                for (var i = index; i < nums; i++) {
+                    if (that.allTableData[i]) {
+                        tables.push(that.allTableData[i])
+                    }
+                    this.tableData = tables;
+                }
+                that.start = index * that.draw;
+                // that.getTableQuery();
+            },
+            // 过滤时间
+            filterFmtDate(value, row, column) {
+                let that = this;
+                if (column == "0001-01-01T08:05:43+08:05") {
+                    return '无有效期';
+                } else {
+                    return nonTfmtDate(column, 11);
+                }
+            },
+        },
+        watch: {
+            $route(to) {
+                if (to.name == 'Lesson') {
+                    this.panelSelect();
+                    this.getTableQuery();
+                }
+            },
+        },
     }
-  },
-  mounted() {
-    this.panelSelect();
-    this.getTableQuery();
-  },
-  methods: {
-    clickChange(item) {
-      this.tableRadio = item
-    },
-
-    // 课程会员增删
-    cofirmClassVipuserEdit() {
-      let that = this;
-      let userlist = that.dialogValue.toString();
-      let param = {
-        token: localStorage.token,
-        classId: this.form.classId,
-        userlist: userlist,
-      };
-      let postdata = qs.stringify(param);
-      ClassVipuserEdit(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          that.$message({
-            showClose: true,
-            message: '接口修改成功!',
-            type: 'success'
-          });
-          that.dialogVisible = false;
-          that.getTableQuery();
-        } else {
-          that.$message.error(json.Memo);
-        }
-      })
-    },
-    // 确认添加课程
-    confirmAddLesson() {
-      let that = this;
-
-      // checkNum
-      if (!that.form.ClassName) {
-        this.$message.error('错了哦,课程名称不能为空');
-        return false
-      }
-      if (that.form.ClassName.length > 8) {
-        this.$message.error('错了哦,课程名称字数超过8个字');
-        return false
-      }
-      if (that.form.Memo) {
-        if (that.form.Memo.length > 200) {
-          this.$message.error('错了哦,备注字数超过200个字');
-          return false
-        }
-      }
-
-      let userlist = that.form.dialogValue.toString();
-      let param = {
-        token: localStorage.token,
-        shopId: localStorage.shopId,
-        className: that.form.ClassName,
-        consumeHour: that.form.ConsumeHour,
-        topLimit: that.form.TopLimit,
-        classType: that.form.classType,
-        wxVisible: that.form.wxVisible,
-        classColor: that.form.ClassColor,
-        userlist: userlist,
-        teacherId: 0,//预留
-        memo: that.form.Memo,
-      };
-      let postdata = qs.stringify(param);
-      ClassAdd(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          // 关闭弹窗
-          that.dialogLesson = false;
-          // 重载列表
-          that.getTableQuery();
-          that.$message({
-            showClose: true,
-            message: '添加课程成功!',
-            type: 'success'
-          });
-        } else {
-          that.$message.error(json.Memo);
-        }
-      })
-    },
-    confirmEditLesson() {
-      let that = this;
-      // checkNum
-      if (!that.form.ClassName) {
-        this.$message.error('错了哦,课程名称不能为空');
-        return false
-      }
-      if (that.form.ClassName.length > 8) {
-        this.$message.error('错了哦,课程名称字数超过8个字');
-        return false
-      }
-      if (that.form.Memo) {
-        if (that.form.Memo.length > 200) {
-          this.$message.error('错了哦,备注字数超过200个字');
-          return false
-        }
-      }
-
-      let teacherId = that.form.dialogValue ? that.form.dialogValue.toString() : '';
-      // 通用是0,非通用是shopid
-      let shopId = that.form.allUse == 0 ? 0 : localStorage.ShopId;
-      let param = {
-        token: localStorage.token,
-        shopId: shopId,
-        classId: that.form.classId,
-        className: that.form.ClassName,
-        consumeHour: that.form.ConsumeHour,
-        topLimit: that.form.TopLimit,
-        classType: that.form.classType,
-        wxVisible: that.form.wxVisible,
-        classColor: that.form.ClassColor,
-        teacherId: teacherId,
-        memo: that.form.Memo,
-      };
-      let postdata = qs.stringify(param);
-      ClassEdit(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          // 关闭弹窗
-          that.dialogLesson = false;
-          // 重载列表
-          that.getTableQuery();
-          that.$message({
-            showClose: true,
-            message: '会员课程调整成功!',
-            type: 'success'
-          });
-        } else {
-          that.$message.error(json.Memo);
-        }
-      })
-    },
-    // 新增课程
-    addLesson() {
-      this.form.btnType = 0; //新增
-      // clear
-      this.form.ClassName = '';
-      this.form.ConsumeHour = 0;
-      this.form.TopLimit = 0;
-      this.form.wxVisible = 1;
-      this.form.ClassColor = "#ffffff";
-      this.form.Memo = "";
-      this.form.dialogValue = [];
-      this.dialogLesson = true;
-      this.dialogTitle = '新增课程'
-      this.panelSelect();
-    },
-    // 改色
-    changeColor(c, row) {
-      let that = this;
-      let param = {
-        token: localStorage.token,
-        classId: row.ClassId,//
-        classColor: c,//
-      };
-      let postdata = qs.stringify(param);
-      ClassColorEdit(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          that.$message({
-            showClose: true,
-            message: '课程颜色已编辑',
-            type: 'success'
-          });
-          // 重载列表
-          that.getTableQuery();
-        } else {
-          that.$message.error(json.Memo);
-        }
-      })
-    },
-    // 删除
-    delList() {
-      let that = this;
-      if (this.tableRadio.length == 0) {
-        this.$message.error("请先选中一条记录");
-        return false
-      }
-      let row = that.tableRadio;
-      let param = {
-        token: localStorage.token,
-        classId: row.ClassSelf.ClassId,
-        status: 9,//0禁用1启用9删除
-      };
-      let postdata = qs.stringify(param);
-
-      this.$confirm('此操作将永久删除该课程, 是否继续?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        ClassStatusEdit(postdata).then(res => {
-          let json = res;
-          if (json.Code == 0) {
-            that.$message({
-              showClose: true,
-              message: '选中的课程已删除!',
-              type: 'success'
-            });
-            // 重载列表
-            that.getTableQuery();
-          } else {
-            that.$message.error(json.Memo);
-          }
-        });
-      }).catch(() => {
-        this.$message({
-          type: 'info',
-          message: '已取消删除'
-        });
-      });
-    },
-    // 加载选项
-    panelSelect() {
-      let that = this;
-      let param = {
-        token: localStorage.token,
-        vipType: '',
-        start: 1,
-        expDay: '',
-        tableMax: 9999,
-      };
-      let postdata = qs.stringify(param);
-      VipUserListQuery(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          if (json.Rs == null) return false;
-          // that.dialogdata = json.Rs;
-          that.form.dialogdata = turnResToOption(json.Rs)
-        } else {
-          that.$message.error(json.Memo);
-        }
-      })
-    },
-    // 微信可见与否
-    changeWechat(e, row) {
-      let that = this;
-      let param = {
-        token: localStorage.token,
-        classId: row.ClassId,//
-        wxVisible: e,//
-      };
-      let postdata = qs.stringify(param);
-      ClassVisibleStatusEdit(postdata).then(res => {
-        let json = res;
-        let text = parseInt(e) == 1 ? '可见' : '不可见';
-        if (json.Code == 0) {
-          that.$message({
-            showClose: true,
-            message: '当前用户微信已' + text,
-            type: 'success'
-          });
-          // 重载列表
-          that.getTableQuery();
-        } else {
-          that.$message.error(json.Memo);
-        }
-      })
-    },
-    // 增删会员课程
-    lessonStudenChange() {
-      this.panelSelect();
-      if (this.tableRadio.length == 0) {
-        this.$message.error("请先选中一条记录");
-        return false
-      }
-      let row = this.tableRadio;
-      let userArrary = [];
-      row.Userlist.map(function (item) {
-        userArrary.push(item.Id)
-      });
-      this.form.classId = row.ClassSelf.ClassId;
-      this.dialogValue = userArrary;
-      this.dialogVisible = true
-      // 读取左侧会员列表
-    },
-    handleSelectionChange(val) {
-      this.multipleSelection = val;
-    },
-    clearForm() {
-      // clear
-      this.form.ClassName = '';
-      this.form.ConsumeHour = 0;
-      this.form.TopLimit = 0;
-      this.form.wxVisible = 1;
-      this.form.ClassColor = '';
-      this.form.Memo = '';
-    },
-    // 编辑
-    editLesson(row) {
-      let that = this;
-      this.clearForm();
-      this.form.btnType = 1; //编辑
-      this.form.ClassName = row.ClassName;
-      this.form.ConsumeHour = row.ConsumeHour;
-      this.form.TopLimit = row.TopLimit;
-      this.form.wxVisible = row.WxVisible;
-      this.form.ClassColor = row.ClassColor;
-      this.form.Memo = row.Memo;
-      this.form.dialogValue = row.teacherId;
-      this.form.classId = row.ClassId
-      this.form.ShopId = row.ShopId;
-      this.form.allUse = row.ShopId;
-      this.dialogLesson = true;
-      // 读取已选的会员
-      console.log(row);
-      this.form.dialogValue = [];
-
-      this.dialogTitle = '编辑课程'
-    },
-    Lessonmember(Userlist) {
-      this.dialogTableVisible = true;
-      this.gridData = Userlist;
-    },
-    // 查询按钮
-    query() {
-      let that = this;
-      this.getTableQuery();
-      that.serachBtnStatus = true;
-      let totalTime = 2
-      let clock = window.setInterval(() => {
-        totalTime--
-        if (totalTime < 0) {
-          totalTime = 2;
-          that.serachBtnStatus = false;
-        }
-      }, 1000)
-      this.$message.success('查询完毕');
-    },
-    // 页面数据查询
-    getTableQuery() {
-      let that = this;
-      that.loading = true;
-      let param = {
-        token: localStorage.token,
-        supregionid: 0,//
-        regionid: this.panel.regionid,//
-        comid: 1,//
-        tagname: that.panel.tagname,//标签名
-        start: 1,//
-        tableMax: 9999,//
-      };
-      let postdata = qs.stringify(param);
-      ClassListQuery(postdata).then(res => {
-        let json = res;
-        if (json.Code == 0) {
-          that.loading = false;
-          if (json.Rs) {
-            that.allTableData = json.Rs;
-            that.recordsTotal = json.Rs.length;
-          } else {
-            that.allTableData = [];
-            that.recordsTotal = 0;
-          }
-
-          // 设置分页数据
-          that.setPaginations();
-        } else {
-          that.$message.error(json.Memo);
-        }
-      })
-    },
-    // 设置分页数据
-    setPaginations() {
-      // 分页属性
-      let that = this;
-      that.pageination.total = that.recordsTotal;
-      // 默认分页
-      that.tableData = that.allTableData.filter((item, index) => {
-        return index < that.pageination.pageItem;
-      });
-    },
-    // 每页显示数量
-    handleSizeChange() {
-      let that = this;
-      that.tableData = that.allTableData.filter((item, index) => {
-        return index < that.pageination.pageItem;
-      });
-      that.draw = that.pageination.pageItem;
-      that.getTableQuery();
-    },
-    // 翻页
-    pageChange(pageIndex) {
-      let that = this;
-      // 获取当前页
-      let index = that.pageination.pageItem * (pageIndex - 1);
-      // 数据总数
-      let nums = that.pageination.pageItem * pageIndex;
-      // 容器
-      let tables = [];
-      for (var i = index; i < nums; i++) {
-        if (that.allTableData[i]) {
-          tables.push(that.allTableData[i])
-        }
-        this.tableData = tables;
-      }
-      that.start = index * that.draw;
-      // that.getTableQuery();
-    },
-    // 过滤时间
-    filterFmtDate(value, row, column) {
-      let that = this;
-      if (column == "0001-01-01T08:05:43+08:05") {
-        return '无有效期';
-      } else {
-        return nonTfmtDate(column, 11);
-      }
-    },
-  },
-  watch: {
-    $route(to) {
-      if (to.name == 'Lesson') {
-        this.panelSelect();
-        this.getTableQuery();
-      }
-    },
-  },
-}
 </script>
 
 <style scoped>
-@import "../assets/css/panel.css";
-
-.context {
-  height: 770px;
-  overflow-y: scroll;
-
-  display: block;
-  margin: 0 auto;
-  background-color: #fff !important;
-  padding: 30px;
-}
-
-.panel-body {
-  padding: 20px;
-  background: #F0F2F5;
-}
-
-.change {
-  width: 100%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  padding-top: 10px;
-  padding-bottom: 10px;
-}
-
-.change button {
-  float: left;
-}
-
-.change button.pull-right {
-  float: right;
-}
-
-.dialogTitle {
-  width: 100%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  color: #000000;
-  font-size: 18px;
-  text-align: center;
-}
-
-.dialogTitle span {
-  width: 169px;
-  height: 40px;
-  line-height: 40px;
-  text-align: center;
-  color: #fff;
-  background: #3799FF;
-  border-radius: 250px;
-  font-size: 18px;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  margin-bottom: 30px;
-}
-
-.dialogTitle em {
-  float: none;
-  font-style: normal;
-  color: #3799FF;
-  margin: 0;
-}
-
-/deep/ .el-transfer-panel__item .el-checkbox__input {
-  left: 40px;
-}
-
-.dialogFooter {
-  width: 90%;
-  overflow: hidden;
-  display: block;
-  margin: 0 auto;
-  margin-top: 10px;
-}
-
-.dialogFooter button {
-  float: right;
-  margin-left: 10px;
-}
-
-.pull-left {
-  width: 30%;
-  float: left;
-}
-
-.pull-right {
-  width: 70%;
-  float: right;
-}
-
-/deep/ .el-transfer-panel__item .el-checkbox__input {
-  left: 15px;
-}
-
-/deep/ .el-dialog .el-input__inner {
-  min-width: 180px;
-}
-
-/*隐藏调色盘*/
-.el-color-dropdown__main-wrapper {
-  display: none !important;
-}
-
-/deep/ .el-color-dropdown__main-wrapper {
-  display: none !important;
-}
+    @import "../assets/css/panel.css";
+
+    .context {
+        height: 770px;
+        overflow-y: scroll;
+
+        display: block;
+        margin: 0 auto;
+        background-color: #fff !important;
+        padding: 30px;
+    }
+
+    .panel-body {
+        padding: 20px;
+        background: #F0F2F5;
+    }
+
+    .change {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-top: 10px;
+        padding-bottom: 10px;
+    }
+
+    .change button {
+        float: left;
+    }
+
+    .change button.pull-right {
+        float: right;
+    }
+
+    .dialogTitle {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        color: #000000;
+        font-size: 18px;
+        text-align: center;
+    }
+
+    .dialogTitle span {
+        width: 169px;
+        height: 40px;
+        line-height: 40px;
+        text-align: center;
+        color: #fff;
+        background: #3799FF;
+        border-radius: 250px;
+        font-size: 18px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-bottom: 30px;
+    }
+
+    .dialogTitle em {
+        float: none;
+        font-style: normal;
+        color: #3799FF;
+        margin: 0;
+    }
+
+    /deep/ .el-transfer-panel__item .el-checkbox__input {
+        left: 40px;
+    }
+
+    .dialogFooter {
+        width: 90%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 10px;
+    }
+
+    .dialogFooter button {
+        float: right;
+        margin-left: 10px;
+    }
+
+    .pull-left {
+        width: 30%;
+        float: left;
+    }
+
+    .pull-right {
+        width: 70%;
+        float: right;
+    }
+
+    /deep/ .el-transfer-panel__item .el-checkbox__input {
+        left: 15px;
+    }
+
+    /deep/ .el-dialog .el-input__inner {
+        min-width: 180px;
+    }
+
+    /*隐藏调色盘*/
+    .el-color-dropdown__main-wrapper {
+        display: none !important;
+    }
+
+    /deep/ .el-color-dropdown__main-wrapper {
+        display: none !important;
+    }
 </style>

+ 42 - 9
pc/src/views/courseEdit.vue

@@ -665,7 +665,7 @@
                         that.getTableQuery();
                         that.$message({
                             showClose: true,
-                            message: '下课会员修改成功!',
+                            message: '会员添加成功!',
                             type: 'success'
                         });
                     } else {
@@ -767,14 +767,28 @@
                     if (json.Code == 0) {
                         that.loading = false;
                         if (json.Rs) {
-                            console.log(json.Rs);
                             // 分队处理
-                            if (that.ClassType == 2) {
-                                that.TurnUnit(json.Rs);
+                            // 未上课的分,已上课的旧的不处理,新人需要处理
+                            if (that.FinishClass == 3) {
+                                if (that.ClassType == 2) {
+                                    that.TurnUnit(json.Rs);
+                                } else {
+                                    json.Rs.map(function (item) {
+                                        item.group_no = item.GroupNo;
+                                    })
+                                }
                             } else {
-                                json.Rs.map(function (item) {
-                                    item.group_no = 0;
-                                })
+                                // 已上课的状态
+                                json.Rs.map(function (item, i) {
+                                    if (that.ClassType == 2) {
+                                        if (item.group_no == 0) {
+                                            item.group_no = i % that.PkNum;
+                                            console.log(i % that.PkNum);
+                                        }
+                                    } else {
+                                        item.group_no = item.GroupNo;
+                                    }
+                                });
                             }
                             that.allTableData = json.Rs;
                             that.recordsTotal = json.Rs.length;
@@ -957,9 +971,22 @@
                     case 3:
                         this.ClassStateText = "准备上课";
                         break;
-
                 }
-
+            },
+            PkNum(to) {
+                let that = this;
+                if (to == 2) {
+                    that.groupList = [
+                        {label: '红队', value: 1},
+                        {label: '蓝队', value: 2},
+                    ]
+                } else {
+                    that.groupList = [
+                        {label: '红队', value: 1},
+                        {label: '蓝队', value: 2},
+                        {label: '黄队', value: 3}
+                    ]
+                }
             }
         },
     }
@@ -1058,4 +1085,10 @@
         margin-left: 5px;
         margin-right: 5px;
     }
+
+    /deep/ .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span {
+        width: 50px;
+        float: right;
+        right: 0;
+    }
 </style>

+ 5 - 5
pc/src/views/courses.vue

@@ -354,9 +354,6 @@
                 ClassStartPrepare(postdata).then(res => {
                     let json = res;
                     if (json.Code == 0) {
-                        // NewId: 0
-                        that.dialogMemberVisible = false;
-                        this.getTableQuery();
                         this.$router.push({
                             path: '/courseEdit',
                             query: {
@@ -365,10 +362,13 @@
                                 BeginStr: that.form.BeginStr,
                                 EndStr: that.form.EndStr,
                                 FinishClass: 3,
-                                ClassType: that.form.ClassType,
-                                PkNum: that.form.pkNum,
+                                ClassType: that.form.classType,
+                                PkNum: uppkNum,
                             }
                         });
+                        that.dialogMemberVisible = false;
+                        this.getTableQuery();
+
                     } else {
                         that.$message.error(json.Memo);
                     }

BIN=BIN
tv/.idea/workspace.xml


+ 2 - 1
tv/public/index.html

@@ -3,7 +3,8 @@
   <head>
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <!--<meta name="viewport" content="width=device-width,initial-scale=1.0">-->
+      <meta name="viewport" content="width=device-width,initial-scale=1.5,maximum-scale=1.0,user-scalable=no" />
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
     <title><%= htmlWebpackPlugin.options.title %></title>
   </head>

+ 15 - 15
tv/src/Global.js

@@ -311,20 +311,20 @@ turnResToOptionByCoach = function (data) {
     return ids
 };
 turnResToOptionByUsers = function (data) {
-    if (!data) return false
+    if (!data) return false;
     let ids = data.map(item => {
         return {
             label: item.Name + ' ' + item.Phone,
             key: parseInt(item.Id),
             value: parseInt(item.Id),
         }
-    })
+    });
     return ids
-}
+};
 
 turnClassResToOption = function (data) {
-    if (data == null) return false
-    if (!data) return false
+    if (data == null) return false;
+    if (!data) return false;
     let ids = data.map(item => {
         return {
             label: item.ClassSelf.ClassName,
@@ -332,9 +332,9 @@ turnClassResToOption = function (data) {
             value: parseInt(item.ClassSelf.ClassId),
             ClassColor: item.ClassSelf.ClassColor,
         }
-    })
+    });
     return ids
-}
+};
 
 turnShopResToOption = function (data) {
     if (!data) return false
@@ -344,12 +344,12 @@ turnShopResToOption = function (data) {
             key: parseInt(item.ShopID),
             value: parseInt(item.ShopID)
         }
-    })
+    });
     return ids
-}
+};
 
 turnStdToOption = function (data) {
-    if (!data) return false
+    if (!data) return false;
     let ids = data.map(item => {
         return {
             label: item.ClassName + '(' + item.BeginStr + '-' + item.EndStr + ')',
@@ -357,9 +357,9 @@ turnStdToOption = function (data) {
             value: parseInt(item.StdId),
             classId: parseInt(item.ClassId),
         }
-    })
+    });
     return ids
-}
+};
 
 numberToWeekdays = function (val) {
     switch (parseInt(val)) {
@@ -385,11 +385,11 @@ numberToWeekdays = function (val) {
             return '星期天';
             break;
     }
-}
+};
 
 // 随机背景
 RandomBg = function () {
     let bgClassNum = parseInt(Math.random() * 3)+1;
-    let bgClass = 'bgStyle' + bgClassNum + '  pages';
-    return bgClass;
+    return 'bgStyle' + bgClassNum + '  pages' ;
 };
+

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 3 - 0
tv/src/assets/img/3pkRank/3pkbg.svg


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 46 - 0
tv/src/assets/img/3pkRank/blueMvp.svg


+ 16 - 0
tv/src/assets/img/3pkRank/bluetit.svg

@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="456" height="90" viewBox="0 0 456 90">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.987" y1="1" x2="0" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#1604ff"/>
+      <stop offset="1" stop-color="#1604ff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linear-gradient-2" x1="0.013" x2="1" xlink:href="#linear-gradient"/>
+  </defs>
+  <g id="tit" transform="translate(-135 -220)">
+    <rect id="矩形_91" data-name="矩形 91" width="100" height="72" transform="translate(135 238)" fill="url(#linear-gradient)"/>
+    <path id="路径_157" data-name="路径 157" d="M197,292h38v18Z" fill="#1a00c3"/>
+    <rect id="矩形_92" data-name="矩形 92" width="100" height="72" transform="translate(491 238)" fill="url(#linear-gradient-2)"/>
+    <path id="路径_158" data-name="路径 158" d="M235,292H197v18Z" transform="translate(294)" fill="#1a00c3"/>
+    <path id="路径_159" data-name="路径 159" d="M0,0H332V72H0Z" transform="translate(197 220)" fill="#0920fa"/>
+  </g>
+</svg>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 17 - 0
tv/src/assets/img/3pkRank/pk.svg


+ 9 - 0
tv/src/assets/img/3pkRank/rank1.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="30.832" height="40" viewBox="0 0 30.832 40">
+  <g id="名次" transform="translate(0 813.914)">
+    <path id="路径_164" data-name="路径 164" d="M92.809-373.484l4.939-3.629,2.461,5.61,4.614-17.217-7.4-1.984Z" transform="translate(-88.248 -402.412)" fill="#efac44"/>
+    <path id="路径_165" data-name="路径 165" d="M290.074-388.719l4.615,17.217,2.462-5.61,4.939,3.627L297.475-390.7Z" transform="translate(-275.818 -402.412)" fill="#efac44"/>
+    <path id="路径_166" data-name="路径 166" d="M15.416-813.914l-2.831,1.173H9.517l-2.169,2.169L4.516-809.4l-1.174,2.832L1.173-804.4v3.066L0-798.5l1.173,2.833v3.066l2.169,2.169L4.516-787.6l2.832,1.174,2.169,2.169h3.066l2.834,1.173,2.833-1.173h3.066l2.169-2.169,2.834-1.174,1.173-2.832L29.66-792.6v-3.065l1.173-2.834-1.174-2.834V-804.4l-2.167-2.169L26.318-809.4l-2.834-1.174-2.169-2.169H18.251Z" fill="#ffde61"/>
+    <path id="路径_167" data-name="路径 167" d="M135.916-687.687A9.688,9.688,0,0,1,126.227-678a9.688,9.688,0,0,1-9.688-9.688,9.688,9.688,0,0,1,9.688-9.688A9.688,9.688,0,0,1,135.916-687.687Z" transform="translate(-110.812 -110.812)" fill="#efac44"/>
+    <text id="_1" data-name="1" transform="translate(16 -792.914)" fill="#fff" font-size="16" font-family="SourceHanSansCN-Bold, Source Han Sans CN" font-weight="700"><tspan x="-4.712" y="0">1</tspan></text>
+  </g>
+</svg>

+ 9 - 0
tv/src/assets/img/3pkRank/rank2.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="30.832" height="40" viewBox="0 0 30.832 40">
+  <g id="名次" transform="translate(0 813.914)">
+    <path id="路径_164" data-name="路径 164" d="M92.809-373.484l4.939-3.629,2.461,5.61,4.614-17.217-7.4-1.984Z" transform="translate(-88.248 -402.412)" fill="#b1c8d6"/>
+    <path id="路径_165" data-name="路径 165" d="M290.074-388.719l4.615,17.217,2.462-5.61,4.939,3.627L297.475-390.7Z" transform="translate(-275.818 -402.412)" fill="#b1c8d6"/>
+    <path id="路径_166" data-name="路径 166" d="M15.416-813.914l-2.831,1.173H9.517l-2.169,2.169L4.516-809.4l-1.174,2.832L1.173-804.4v3.066L0-798.5l1.173,2.833v3.066l2.169,2.169L4.516-787.6l2.832,1.174,2.169,2.169h3.066l2.834,1.173,2.833-1.173h3.066l2.169-2.169,2.834-1.174,1.173-2.832L29.66-792.6v-3.065l1.173-2.834-1.174-2.834V-804.4l-2.167-2.169L26.318-809.4l-2.834-1.174-2.169-2.169H18.251Z" fill="#d1dfe8"/>
+    <path id="路径_167" data-name="路径 167" d="M135.916-687.687A9.688,9.688,0,0,1,126.227-678a9.688,9.688,0,0,1-9.688-9.688,9.688,9.688,0,0,1,9.688-9.688A9.688,9.688,0,0,1,135.916-687.687Z" transform="translate(-110.812 -110.812)" fill="#a1b5c1"/>
+    <text id="_2" data-name="2" transform="translate(16 -792.914)" fill="#fff" font-size="16" font-family="SourceHanSansCN-Bold, Source Han Sans CN" font-weight="700"><tspan x="-4.712" y="0">2</tspan></text>
+  </g>
+</svg>

+ 9 - 0
tv/src/assets/img/3pkRank/rank3.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="30.832" height="40" viewBox="0 0 30.832 40">
+  <g id="名次" transform="translate(0 813.914)">
+    <path id="路径_164" data-name="路径 164" d="M92.809-373.484l4.939-3.629,2.461,5.61,4.614-17.217-7.4-1.984Z" transform="translate(-88.248 -402.412)" fill="#ccab78"/>
+    <path id="路径_165" data-name="路径 165" d="M290.074-388.719l4.615,17.217,2.462-5.61,4.939,3.627L297.475-390.7Z" transform="translate(-275.818 -402.412)" fill="#ccab78"/>
+    <path id="路径_166" data-name="路径 166" d="M15.416-813.914l-2.831,1.173H9.517l-2.169,2.169L4.516-809.4l-1.174,2.832L1.173-804.4v3.066L0-798.5l1.173,2.833v3.066l2.169,2.169L4.516-787.6l2.832,1.174,2.169,2.169h3.066l2.834,1.173,2.833-1.173h3.066l2.169-2.169,2.834-1.174,1.173-2.832L29.66-792.6v-3.065l1.173-2.834-1.174-2.834V-804.4l-2.167-2.169L26.318-809.4l-2.834-1.174-2.169-2.169H18.251Z" fill="#edc78c"/>
+    <path id="路径_167" data-name="路径 167" d="M135.916-687.687A9.688,9.688,0,0,1,126.227-678a9.688,9.688,0,0,1-9.688-9.688,9.688,9.688,0,0,1,9.688-9.688A9.688,9.688,0,0,1,135.916-687.687Z" transform="translate(-110.812 -110.812)" fill="#c89e5e"/>
+    <text id="_3" data-name="3" transform="translate(16 -792.914)" fill="#fff" font-size="16" font-family="SourceHanSansCN-Bold, Source Han Sans CN" font-weight="700"><tspan x="-4.712" y="0">3</tspan></text>
+  </g>
+</svg>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 46 - 0
tv/src/assets/img/3pkRank/redMvp.svg


+ 16 - 0
tv/src/assets/img/3pkRank/redtit.svg

@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="456" height="90" viewBox="0 0 456 90">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.987" y1="1" x2="0" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#c3234f"/>
+      <stop offset="1" stop-color="#c3234f" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linear-gradient-2" x1="0.013" x2="1" xlink:href="#linear-gradient"/>
+  </defs>
+  <g id="tit" transform="translate(-135 -220)">
+    <rect id="矩形_91" data-name="矩形 91" width="100" height="72" transform="translate(135 238)" fill="url(#linear-gradient)"/>
+    <path id="路径_157" data-name="路径 157" d="M197,292h38v18Z" fill="#7b1d2e"/>
+    <rect id="矩形_92" data-name="矩形 92" width="100" height="72" transform="translate(491 238)" fill="url(#linear-gradient-2)"/>
+    <path id="路径_158" data-name="路径 158" d="M235,292H197v18Z" transform="translate(294)" fill="#7b1d2e"/>
+    <rect id="矩形_90" data-name="矩形 90" width="332" height="72" transform="translate(197 220)" fill="#ff3f52"/>
+  </g>
+</svg>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 46 - 0
tv/src/assets/img/3pkRank/yellowMvp.svg


+ 19 - 0
tv/src/assets/img/3pkRank/yellowtit.svg

@@ -0,0 +1,19 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="456" height="90" viewBox="0 0 456 90">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.987" y1="1" x2="0" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#ceb31e"/>
+      <stop offset="1" stop-color="#ceb31e" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linear-gradient-2" x1="0.013" y1="1" x2="1" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#acbb14"/>
+      <stop offset="1" stop-color="#ceb31e" stop-opacity="0"/>
+    </linearGradient>
+  </defs>
+  <g id="tit" transform="translate(-135 -220)">
+    <rect id="矩形_91" data-name="矩形 91" width="100" height="72" transform="translate(135 238)" fill="url(#linear-gradient)"/>
+    <path id="路径_157" data-name="路径 157" d="M197,292h38v18Z" fill="#928121"/>
+    <rect id="矩形_92" data-name="矩形 92" width="100" height="72" transform="translate(491 238)" fill="url(#linear-gradient-2)"/>
+    <path id="路径_158" data-name="路径 158" d="M235,292H197v18Z" transform="translate(294)" fill="#928121"/>
+    <path id="路径_159" data-name="路径 159" d="M0,0H332V72H0Z" transform="translate(197 220)" fill="#ecd034"/>
+  </g>
+</svg>

+ 21 - 0
tv/src/assets/img/pk/yellowFlag.svg

@@ -0,0 +1,21 @@
+<svg id="组_146" data-name="组 146" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="19.798" height="20" viewBox="0 0 19.798 20">
+  <defs>
+    <clipPath id="clip-path">
+      <path id="路径_97" data-name="路径 97" d="M0-797H19.8v-20H0Z" transform="translate(0 817)" fill="none" clip-rule="evenodd"/>
+    </clipPath>
+  </defs>
+  <g id="组_164" data-name="组 164" transform="translate(0 0)">
+    <g id="组_163" data-name="组 163" transform="translate(0 0)" clip-path="url(#clip-path)">
+      <path id="路径_87" data-name="路径 87" d="M119.8-747.553l.064,0a2.563,2.563,0,0,1,1.037.3,1.257,1.257,0,0,0,.749.184,2.249,2.249,0,0,1,.989.172,6.984,6.984,0,0,1,.682.307c.178.088.365.178.549.254a1.442,1.442,0,0,1,.154.078,1.127,1.127,0,0,0,.147.074c.3.115.566.2.836.282a2.173,2.173,0,0,0,.543.053,3.568,3.568,0,0,1,.523.037,1.229,1.229,0,0,0,.228.008,1.686,1.686,0,0,1,.245.006,8.073,8.073,0,0,1,1.182.25,4.392,4.392,0,0,1,1.294.552c.073.051.145.106.214.162a4.539,4.539,0,0,1,.661.751,3.944,3.944,0,0,0,.506.589l.019.018a8.041,8.041,0,0,0,.705.557,3.064,3.064,0,0,0,1.686.581.081.081,0,0,1,.046-.037l.037-.01.031.022a.084.084,0,0,1,.027.109c0,.006-.008.018-.014.033-.015.035-.027.063-.037.088-.041.094-.058.137-.106.262-.008.024-.017.045-.025.068-.019.051-.037.1-.054.149a4.154,4.154,0,0,0,.446,2.555c.369.974.717,1.9.367,2.58-.514,1-.085,2.963.365,3.973l.058.131-.141-.014a28.426,28.426,0,0,1-4.443-.894,3.587,3.587,0,0,1-.726-.422c-.164-.114-.342-.239-.514-.362s-.352-.25-.518-.366a3.616,3.616,0,0,0-.757-.434,4.081,4.081,0,0,1-.873-.511l-.108-.074a3.722,3.722,0,0,0-1.273-.671c-.156-.02-.315-.033-.473-.043s-.3-.01-.454-.012a4.057,4.057,0,0,1-.709-.043,8.809,8.809,0,0,1-.892-.219c-.247-.076-.5-.164-.8-.276a.654.654,0,0,0-.153-.027.719.719,0,0,1-.2-.039,3.834,3.834,0,0,1-.535-.28,3.55,3.55,0,0,0-.6-.3c-.216-.076-.419-.143-.62-.2a8.385,8.385,0,0,0-2.067-.385l-.1,0Z" transform="translate(-114.175 749.251)"/>
+      <path id="路径_88" data-name="路径 88" d="M.043-796.931A.115.115,0,0,1,0-797.056L5.33-815.268l-.043-.014a.319.319,0,0,1-.093-.045.278.278,0,0,1-.122-.3.252.252,0,0,1,.11-.143s0-.006,0-.01a.239.239,0,0,1,.131-.147.285.285,0,0,1,.2-.012l.01,0,.01-.035a.484.484,0,0,1-.149-.5.485.485,0,0,1,.226-.284.47.47,0,0,1,.359-.039.475.475,0,0,1,.131.063.482.482,0,0,1,.187.532.477.477,0,0,1-.326.325l-.019.066a.312.312,0,0,1,.081.039.248.248,0,0,1,.108.274s0,.006,0,.01a.254.254,0,0,1,.015.18.261.261,0,0,1-.145.162.316.316,0,0,1-.22.012l-.031-.01L.505-797.206c-.093.317-.1.331-.143.352a.078.078,0,0,1-.066.006l-.23-.071A.066.066,0,0,1,.043-796.931Z" transform="translate(0 816.819)" fill="#231715"/>
+      <path id="路径_89" data-name="路径 89" d="M9.3-808.095l.232.07c.01,0,.013.018.091-.246L3.959-788.887c-.087.3-.1.307-.108.3l-.234-.069c-.01,0-.013-.018-.008-.033L9.277-808.07C9.283-808.087,9.294-808.1,9.3-808.095Z" transform="translate(-3.52 808.484)" fill="#fff"/>
+      <path id="路径_90" data-name="路径 90" d="M226.352-812.252a.39.39,0,0,0,.485-.266.4.4,0,0,0-.263-.493.39.39,0,0,0-.485.266A.4.4,0,0,0,226.352-812.252Z" transform="translate(-220.615 813.124)" fill="#c3af00"/>
+      <path id="路径_91" data-name="路径 91" d="M251.956-784.647C251.961-784.616,251.944-784.694,251.956-784.647Z" transform="translate(-245.868 785.453)" fill="#fff"/>
+      <path id="路径_92" data-name="路径 92" d="M231.066-809.09a.152.152,0,0,0,.149.016.136.136,0,0,0,.079-.119.156.156,0,0,0-.07-.135.151.151,0,0,0-.149-.016.136.136,0,0,0-.079.119A.16.16,0,0,0,231.066-809.09Z" transform="translate(-225.419 809.544)" fill="#ece738"/>
+      <path id="路径_93" data-name="路径 93" d="M218.361-777.781l.427.129a.181.181,0,0,1,.137.211.177.177,0,0,1-.228.1l-.427-.129a.181.181,0,0,1-.137-.211A.176.176,0,0,1,218.361-777.781Z" transform="translate(-212.861 778.749)" fill="#c3af00"/>
+      <path id="路径_94" data-name="路径 94" d="M213.749-772.229l.494.149a.212.212,0,0,1,.16.244.205.205,0,0,1-.265.117l-.495-.149a.212.212,0,0,1-.16-.245A.2.2,0,0,1,213.749-772.229Z" transform="translate(-208.325 773.334)" fill="#c3af00"/>
+      <path id="路径_95" data-name="路径 95" d="M216.228-775.744a1.425,1.425,0,0,0,.278.064c.06,0,.066-.014.014-.045a1.4,1.4,0,0,0-.265-.108,1.426,1.426,0,0,0-.278-.064c-.06,0-.066.014-.014.045A1.4,1.4,0,0,0,216.228-775.744Zm.095-.225a1.072,1.072,0,0,0,.2.047c.043,0,.044-.006.008-.026a1.118,1.118,0,0,0-.187-.072,1.048,1.048,0,0,0-.2-.047c-.042,0-.044.006-.008.025A1.115,1.115,0,0,0,216.323-775.969Z" transform="translate(-210.714 777.069)" fill="#ece738"/>
+      <path id="路径_96" data-name="路径 96" d="M124.976-738.674l.064,0a2.55,2.55,0,0,1,1.018.3,1.266,1.266,0,0,0,.736.188,2.268,2.268,0,0,1,.97.18c.23.088.456.2.67.305.176.088.359.18.539.252a1.663,1.663,0,0,1,.153.078,1.236,1.236,0,0,0,.143.074c.3.115.556.205.821.284a2.289,2.289,0,0,0,.533.059,3.412,3.412,0,0,1,.512.043,1.154,1.154,0,0,0,.222.01,1.405,1.405,0,0,1,.241.01,8.147,8.147,0,0,1,1.161.258,4.446,4.446,0,0,1,1.273.552c.072.049.143.1.211.16a4.753,4.753,0,0,1,.657.735,3.989,3.989,0,0,0,.5.577l.019.016c.218.184.444.376.7.55a3.11,3.11,0,0,0,1.655.585.067.067,0,0,1,.046-.035l.035-.01.031.022a.083.083,0,0,1,.027.106c0,.006-.008.018-.014.031l-.035.084c-.039.09-.054.131-.1.25l-.023.067c-.017.049-.035.1-.05.143a4.032,4.032,0,0,0,.469,2.478c.373.949.726,1.844.394,2.5-.489.962-.044,2.866.408,3.847l.058.127-.137-.016a28.779,28.779,0,0,1-4.358-.923,3.659,3.659,0,0,1-.717-.419c-.162-.111-.336-.235-.506-.358s-.346-.248-.512-.362a3.716,3.716,0,0,0-.746-.43,4.1,4.1,0,0,1-.859-.5l-.108-.074a3.813,3.813,0,0,0-1.254-.667c-.154-.019-.309-.037-.464-.049s-.3-.014-.444-.018a3.879,3.879,0,0,1-.7-.053,8.729,8.729,0,0,1-.877-.225c-.243-.076-.494-.166-.786-.278a.74.74,0,0,0-.149-.029.712.712,0,0,1-.191-.041,4.27,4.27,0,0,1-.529-.278,3.456,3.456,0,0,0-.593-.3c-.212-.078-.411-.143-.608-.2a8.439,8.439,0,0,0-2.026-.4l-.1-.006Z" transform="translate(-119.405 740.589)" fill="#ffd800"/>
+    </g>
+  </g>
+</svg>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 3 - 0
tv/src/assets/img/threepk/blueCube.svg


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 3 - 0
tv/src/assets/img/threepk/redCube.svg


+ 0 - 0
tv/src/assets/img/3pk/3pkbg.png → tv/src/assets/img/threepk/threepkbg.png


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 3 - 0
tv/src/assets/img/threepk/yellowcube.svg


+ 1 - 1
tv/src/components/Headside.vue

@@ -73,7 +73,7 @@
         background: url("../static/img/logo.svg");
         background-position: top center;
         background-repeat: no-repeat;
-        background-size: 16%;
+        background-size: 14%;
     }
 
     * {

+ 10 - 5
tv/src/libs/rem.js

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

+ 1 - 2
tv/src/main.js

@@ -10,8 +10,7 @@ import axios from 'axios'
 import VConsole from 'vconsole/dist/vconsole.min.js' //import vconsole
 
 if(process.env.NODE_ENV === 'development'){
-    console.log(123);
-    // let vConsole = new VConsole() // 初始化
+    let vConsole = new VConsole() // 初始化
 }else{
 
 }

+ 12 - 4
tv/src/router/index.js

@@ -77,11 +77,19 @@ const routes = [
                     clmid: "5",
                 }
             },{
-                path: '/3pk',
-                name: '3pk',
-                component: () => import('@/views/3pk.vue'),
+                path: '/threepk',
+                name: 'threepk',
+                component: () => import('@/views/threepk.vue'),
                 meta: {
-                    title: "3pk",
+                    title: "threepk",
+                    clmid: "6",
+                }
+            },{
+                path: '/3pkRank',
+                name: 'threepk',
+                component: () => import('@/views/3pkRank.vue'),
+                meta: {
+                    title: "3pkRank",
                     clmid: "6",
                 }
             },{

+ 17 - 17
tv/src/views/2pkRank.vue

@@ -40,7 +40,7 @@
                                 {{s.Name}}
                             </div>
                             <div class="CLEscore">
-                                <em>CLE</em>
+                                <em>cal</em>
                                 {{s.Cle|fmtInt}}
                             </div>
                             <div class="CKscore">
@@ -68,7 +68,7 @@
                                 {{s.Name}}
                             </div>
                             <div class="CLEscore">
-                                <em>CLE</em>
+                                <em>cal</em>
                                 {{s.Cle|fmtInt}}
                             </div>
                             <div class="CKscore">
@@ -108,6 +108,7 @@
                 rankTimer: null,
                 redSum: 0,
                 blueSum: 0,
+                totalTime:60
             }
         },
         mounted() {
@@ -128,6 +129,7 @@
                 this.totalTime = 60;
                 let clock = window.setInterval(() => {
                     this.totalTime--;
+                    console.log(this.totalTime);
                     if (parseInt(this.totalTime) < 0) {
                         // 前往等待页面
                         that.$router.push({path: '/wait'});
@@ -172,20 +174,16 @@
                 let that = this;
                 that.students.redUnite = [];
                 that.students.blueUnite = [];
-                if (!Rs) {
-                    that.students.redUnite = [];
-                    that.students.blueUnite = [];
-                } else {
-                    Rs.map(function (item, t) {
-                        if (item.GroupNo == 1) {
-                            that.students.redUnite.push(item);
-                        }
-                        if (item.GroupNo == 2) {
-                            that.students.blueUnite.push(item);
-                        }
-                    })
+                console.log(!Rs);
 
-                }
+                Rs.map(function (item, t) {
+                    if (item.GroupNo == 1) {
+                        that.students.redUnite.push(item);
+                    }
+                    if (item.GroupNo == 2) {
+                        that.students.blueUnite.push(item);
+                    }
+                });
                 // 排序
                 that.students.redUnite = that.students.redUnite.sort(function (a, b) {
                     return b.Cle - a.Cle;
@@ -219,6 +217,8 @@
                 let postdata = qs.stringify(param);
                 ClassUserRank(postdata).then(res => {
                     let json = res;
+                    that.students.redUnite = [];
+                    that.students.blueUnite = [];
                     if (json.Code == 0) {
                         that.UniteBreak(json.Rs);
                         // this.students.CkSort = json.Rs.CkSort;
@@ -247,7 +247,7 @@
             },
             fmtFloat(val) {
                 if (val == 0) {
-                    return '0'
+                    return '0.0'
                 } else {
                     return parseFloat(val).toFixed(1);
                 }
@@ -263,7 +263,7 @@
         },
         watch: {
             '$route': function (val) {
-                if (val.path == '/rank') {
+                if (val.path == '/2pkRank') {
                     if (this.trueDate) {
                         this.getClassUserRank();
                         this.rankTimer = setInterval(() => {

+ 0 - 43
tv/src/views/3pk.vue

@@ -1,43 +0,0 @@
-<template>
-    <div class="pages">
-        <Headside></Headside>
-    </div>
-</template>
-
-<script>
-    import '../libs/rem';
-    import Headside from '@/components/Headside'
-    import {
-        getHello,
-        getClassStat
-    } from '@/api/getApiRes'
-    import '../libs/rem';
-    let qs = require('qs');
-
-    export default {
-        name: "3pk",
-        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;
-        background-color: #028fe1;
-        background: url("../assets/img/3pk/3pkbg.png");
-        background-size: 100%;
-        background-repeat: no-repeat;
-    }
-
-</style>

+ 721 - 0
tv/src/views/3pkRank.vue

@@ -0,0 +1,721 @@
+<template>
+    <div :class="pageStyle">
+        <Headside></Headside>
+        <div class="rankContainer">
+            <div class="sumScore">
+                <div class="sumlt">
+                    <img src="../assets/img/3pkRank/rank1.svg" alt="" class="rankIcon" v-if="red.rank == 1">
+                    <img src="../assets/img/3pkRank/rank2.svg" alt="" class="rankIcon" v-if="red.rank == 2">
+                    <img src="../assets/img/3pkRank/rank3.svg" alt="" class="rankIcon" v-if="red.rank == 3">
+                    <span class="mineUniteName">
+                        红队
+                        <span class="sumCK">
+                            <em>{{redSum}}</em><i>ck</i>
+                        </span>
+                        <span class="flagContainer">
+                            <img src="../assets/img/2pkRank/flag.svg" alt="" v-if="red.rank == 1">
+                        </span>
+                    </span>
+                </div>
+                <div class="pkIconContainer">
+                    <img src="../assets/img/3pkRank/pk.svg" alt="" class="pkIcon">
+                </div>
+                <div class="summd">
+                    <img src="../assets/img/3pkRank/rank1.svg" alt="" class="rankIcon" v-if="blue.rank == 1">
+                    <img src="../assets/img/3pkRank/rank2.svg" alt="" class="rankIcon" v-if="blue.rank == 2">
+                    <img src="../assets/img/3pkRank/rank3.svg" alt="" class="rankIcon" v-if="blue.rank == 3">
+                    <span class="mineUniteName">
+                        蓝队
+                        <span class="sumCK">
+                            <em>{{blueSum}}</em><i>ck</i>
+                        </span>
+                        <span class="flagContainer">
+                            <img src="../assets/img/2pkRank/flag.svg" alt="" v-if="blue.rank == 1">
+                        </span>
+                    </span>
+                </div>
+                <div class="pkIconContainer">
+                    <img src="../assets/img/3pkRank/pk.svg" alt="" class="pkIcon">
+                </div>
+                <div class="sumrt">
+                    <img src="../assets/img/3pkRank/rank1.svg" alt="" class="rankIcon" v-if="yellow.rank == 1">
+                    <img src="../assets/img/3pkRank/rank2.svg" alt="" class="rankIcon" v-if="yellow.rank == 2">
+                    <img src="../assets/img/3pkRank/rank3.svg" alt="" class="rankIcon" v-if="yellow.rank == 3">
+                    <span class="mineUniteName">
+                        黄队
+                        <span class="sumCK">
+                            <em>{{yellowSum}}</em><i>ck</i>
+                        </span>
+                        <span class="flagContainer">
+                            <img src="../assets/img/2pkRank/flag.svg" alt="" v-if="yellow.rank == 1">
+                        </span>
+                    </span>
+                </div>
+            </div>
+            <div class="list">
+                <div class="part">
+                    <li v-for="(s,i) in students.redUnite" :class="[{'redUnite':true},{'mvpli':i == 0}]">
+                        <div>
+                            <div class="head">
+                                <img :src="s.Head"
+                                     class="headImg" alt="">
+                                <img src="../assets/img/2pkRank/king.svg" class="king" alt="" v-if="red.rank == 1">
+                            </div>
+                            <div class="name">
+                                {{s.Name}}
+                            </div>
+                            <div class="CLEscore">
+                                <em>CAL</em>
+                                {{s.Cle|fmtInt}}
+                            </div>
+                            <div class="CKscore">
+                                <em>cal</em>
+                                {{s.Ck|fmtFloat}}
+                            </div>
+                            <div class="record">
+                                <img src="../assets/img/3pkRank/redMvp.svg" class="mvpImg" alt=""
+                                     v-if="i == 0">
+                            </div>
+                        </div>
+                    </li>
+                </div>
+                <div class="part">
+                    <li v-for="(s,i) in students.blueUnite" :class="[{'blueUnite':true},{'mvpli':i == 0}]">
+                        <div>
+                            <div class="head">
+                                <img :src="s.Head"
+                                     class="headImg" alt="">
+                                <img src="../assets/img/2pkRank/king.svg" class="king" alt="" v-if="blue.rank == 1">
+                            </div>
+                            <div class="name">
+                                {{s.Name}}
+                            </div>
+                            <div class="CLEscore">
+                                <em>cal</em>
+                                {{s.Cle|fmtInt}}
+                            </div>
+                            <div class="CKscore">
+                                <em>ck</em>
+                                {{s.Ck|fmtFloat}}
+                            </div>
+                            <div class="record">
+                                <img src="../assets/img/3pkRank/blueMvp.svg" class="mvpImg" alt=""
+                                     v-if="i == 0">
+                            </div>
+                        </div>
+                    </li>
+                </div>
+                <div class="part">
+                    <li v-for="(s,i) in students.yellowUnite" :class="[{'yellowUnite':true},{'mvpli':i == 0}]">
+                        <div>
+                            <div class="head">
+                                <img :src="s.Head"
+                                     class="headImg" alt="">
+                                <img src="../assets/img/2pkRank/king.svg" class="king" alt="" v-if="yellow.rank == 1">
+                            </div>
+                            <div class="name">
+                                {{s.Name}}
+                            </div>
+                            <div class="CLEscore">
+                                <em>cal</em>
+                                {{s.Cle|fmtInt}}
+                            </div>
+                            <div class="CKscore">
+                                <em>ck</em>
+                                {{s.Ck|fmtFloat}}
+                            </div>
+                            <div class="record">
+                                <img src="../assets/img/3pkRank/yellowMvp.svg" class="mvpImg" alt=""
+                                     v-if="i == 0">
+                            </div>
+                        </div>
+                    </li>
+                </div>
+            </div>
+
+            <!--blue-->
+            <!--yellow-->
+        </div>
+    </div>
+</template>
+
+<script>
+    import Headside from '@/components/Headside'
+    import '../libs/rem';
+    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: true,//真实数据 true false
+                autoJump: true,//开启自动跳走
+                students: {
+                    redUnite: [],
+                    blueUnite: [],
+                    yellowUnite: [],
+                },
+                red: {
+                    rank: 0,
+                },
+                blue: {
+                    rank: 0,
+                },
+                yellow: {
+                    rank: 0,
+                },
+                rankTimer: null,
+                redSum: 0,
+                blueSum: 0,
+                yellowSum: 0,
+                totalTime:60
+            }
+        },
+        mounted() {
+            let that = this;
+            if (this.trueDate) {
+                this.getClassUserRank();
+                this.rankTimer = setInterval(() => {
+                    this.getClassUserRank();
+                }, 5000);
+
+            } else {
+                let Rs = this.fakeNews(18);
+                that.UniteBreak(Rs);
+            }
+            if (this.autoJump) {
+                // 倒计时60秒自动关闭
+                let that = this;
+                this.totalTime = 60;
+                let clock = window.setInterval(() => {
+                    this.totalTime--;
+                    console.log(this.totalTime);
+                    if (parseInt(this.totalTime) < 0) {
+                        // 前往等待页面
+                        that.$router.push({path: '/wait'});
+                        // 计时器回收
+                        clearInterval(clock);
+                    }
+                }, 1000)
+            }
+        },
+        beforeDestroy() {
+            clearInterval(this.rankTimer);
+            this.rankTimer = null;
+        },
+        methods: {
+            fakeNews(fakeNums) {
+                let item = [];
+                // 1 2 3 5 9 11 13 16 21 30
+                for (var i = 0; i < fakeNums; i++) {
+                    item.push(
+                        {
+                            "SvId": 1,
+                            "UserId": 1,
+                            "Cle": i * 14,
+                            "realHr1": parseInt(Math.random() * 100 + 50),
+                            "realHr": 60,
+                            "activePercent": 30,
+                            "heartRate": 90,
+                            "Steps": 9999,
+                            "PureCalorieNoVo2": 999,
+                            "Name": "刘宇宁",
+                            "updateTime": 1604568915582,
+                            "Ck": i * 9.9,
+                            "Head": "http://192.168.0.2/zw.png",
+                            "GroupNo": i % 2 + 1
+                        }
+                    )
+                }
+                return item;
+            },
+            // 分队展示
+            UniteBreak(Rs) {
+                let that = this;
+                that.students.redUnite = [];
+                that.students.blueUnite = [];
+                that.students.yellowUnite = [];
+                console.log(!Rs);
+
+                Rs.map(function (item, t) {
+                    if (item.GroupNo == 1) {
+                        that.students.redUnite.push(item);
+                    }
+                    if (item.GroupNo == 2) {
+                        that.students.blueUnite.push(item);
+                    }
+                    if (item.GroupNo == 3) {
+                        that.students.yellowUnite.push(item);
+                    }
+                });
+
+
+                // 排序
+                that.students.redUnite = that.students.redUnite.sort(function (a, b) {
+                    return b.Cle - a.Cle;
+                });
+                that.students.blueUnite = that.students.blueUnite.sort(function (a, b) {
+                    return b.Cle - a.Cle;
+                });
+                that.students.yellowUnite = that.students.yellowUnite.sort(function (a, b) {
+                    return b.Cle - a.Cle;
+                });
+
+                that.calcSumCK(that.students);
+
+            },
+            // 计算各队总分
+            calcSumCK(Rs) {
+                let that = this;
+                let redSum = 0;
+                let blueSum = 0;
+                let yellowSum = 0;
+                Rs.redUnite.map(function (item, t) {
+                    redSum += parseFloat(item.Ck)
+                });
+                Rs.blueUnite.map(function (item, t) {
+                    blueSum += parseFloat(item.Ck)
+                });
+                Rs.yellowUnite.map(function (item, t) {
+                    yellowSum += parseFloat(item.Ck)
+                });
+                that.redSum = redSum.toFixed(1);
+                that.blueSum = blueSum.toFixed(1);
+                that.yellowSum = yellowSum.toFixed(1);
+                let res = [
+                    {name: "red", val: that.redSum},
+                    {name: "blue", val: that.blueSum},
+                    {name: "yellow", val: that.yellowSum},
+                ];
+                that.getUnitRank(res);
+
+            },
+            // 结果排序
+            getUnitRank(res) {
+                 let that = this;
+                let sum = res.sort(function (a, b) {
+                    return b.val - a.val;
+                });
+                sum.map(function (item, i) {
+                    eval("that."+item['name']+".rank = i+1");
+                });
+            },
+            getClassUserRank() {
+                let that = this;
+                let param = {
+                    eqSn: localStorage.eqSn
+                };
+                let postdata = qs.stringify(param);
+                ClassUserRank(postdata).then(res => {
+                    let json = res;
+                    that.students.redUnite = [];
+                    that.students.blueUnite = [];
+                    that.students.yellowUnite = [];
+                    console.log(json.Rs);
+                    if (json.Code == 0) {
+                        that.UniteBreak(json.Rs);
+                        // this.students.CkSort = json.Rs.CkSort;
+                        // this.students.CalSort = json.Rs.CalSort;
+                    } else {
+                        if (json.Code == '999') {
+                            // that.$router.push({path: '/wait'});
+                        } 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
+                }
+            },
+            fmtFloat(val) {
+                if (val == 0) {
+                    return '0.0'
+                } else {
+                    return parseFloat(val).toFixed(1);
+                }
+            },
+            fmtInt(val) {
+                if (val == 0) {
+                    return '0'
+                } else {
+                    return parseInt(val);
+                    // return parseFloat(val).toFixed(3);
+                }
+            },
+        },
+        watch: {
+            '$route': function (val) {
+                if (val.path == '/3pkRank') {
+                    if (this.trueDate) {
+                        this.getClassUserRank();
+                        this.rankTimer = setInterval(() => {
+                            this.getClassUserRank();
+                        }, 5000);
+
+                    } else {
+                        this.rankTimer = setInterval(() => {
+                            this.students.redUnite = this.fakeNews();
+                            this.students.blueUnite = this.fakeNews();
+                        }, 5000);
+                    }
+                    if (this.autoJump) {
+                        // 倒计时60秒自动关闭
+                        let that = this;
+                        this.totalTime = 60;
+                        let clock = window.setInterval(() => {
+                            this.totalTime--;
+                            console.log(this.totalTime);
+                            if (parseInt(this.totalTime) < 0) {
+                                // 前往等待页面
+                                that.$router.push({path: '/wait'});
+                                // 计时器回收
+                                clearInterval(clock);
+                            }
+                        }, 1000)
+                    }
+                } else {
+                    clearInterval(this.autoJump);
+                    clearInterval(this.rankTimer);
+                }
+            }
+        },
+        components: {
+            Headside
+        }
+    }
+</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;
+        top: 0;
+        left: 0;
+        right: 0;
+        bottom: 0;
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        font-family: vista;
+        background: url("../assets/img/threepk/threepkbg.png");
+        background-position: top center;
+        background-repeat: no-repeat;
+        background-size: 100% 100%;
+    }
+
+    .rankContainer {
+        width: 96%;
+        overflow: visible;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .sumScore {
+        width: 90%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        height: 1.4rem;
+        background-size: 100%;
+        background-position: top center;
+        background-repeat: no-repeat;
+    }
+
+    .pkIconContainer {
+        width: 20%;
+        float: left;
+    }
+
+    .pkIconContainer img {
+        width: 1.5rem;
+        height: 1.5rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    li {
+        width: 90%;
+        height: 0.8rem;
+        display: block;
+        margin: 0 auto;
+        overflow: hidden;
+        margin-bottom: 0.06rem;
+    }
+
+    li .rows {
+        width: 100%;
+        height: 0.8rem;
+        /*background: #ee191d;*/
+        border-radius: 250rem;
+        overflow: visible;
+        display: block;
+        margin: 0 auto;
+        margin-top: 0.15rem;
+    }
+
+    li .head {
+        width: 0.6rem;
+        height: 0.7rem;
+        float: left;
+        margin-left: 0.1rem;
+        margin-top: 0.07rem;
+        overflow: visible;
+    }
+
+    li .head .headImg {
+        width: 100%;
+        height: 0.6rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border: 0.04rem solid #fff;
+        border-radius: 250px;
+    }
+
+
+    li .name {
+        width: 1.2rem;
+        font-weight: normal;
+        font-size: 0.3rem;
+        text-align: left;
+        color: #fff;
+        float: left;
+        margin-left: 0.2rem;
+        line-height: 0.8rem;
+    }
+
+    li .record {
+        position: relative;
+        top: -0.2rem;
+        float: right;
+        margin-right: 2%;
+        /*line-height: 0.8rem;*/
+    }
+
+    li .score {
+        font-weight: normal;
+        font-size: 0.4rem;
+        color: #fff;
+        float: right;
+        margin-right: 0.2rem;
+        line-height: 1rem;
+        text-align: right;
+        line-height: 0.8rem;
+    }
+
+    li .score em {
+        font-size: 0.2rem;
+    }
+
+    .sumlt {
+        width: 20%;
+        float: left;
+        color: #fff;
+        height: 1.2rem;
+        background: url("../assets/img/3pkRank/redtit.svg");
+        background-size: 100%;
+        background-position: top center;
+        background-repeat: no-repeat;
+        margin-top: 0.5rem;
+        overflow: visible;
+    }
+
+    .summd {
+        width: 20%;
+        float: left;
+        color: #fff;
+        height: 1.2rem;
+        background: url("../assets/img/3pkRank/bluetit.svg");
+        background-size: 100%;
+        background-position: top center;
+        background-repeat: no-repeat;
+        margin-top: 0.5rem;
+        overflow: visible;
+    }
+
+    .sumrt {
+        width: 20%;
+        float: left;
+        color: #fff;
+        height: 1.2rem;
+        background: url("../assets/img/3pkRank/yellowtit.svg");
+        background-size: 100%;
+        background-position: top center;
+        background-repeat: no-repeat;
+        margin-top: 0.5rem;
+        overflow: visible;
+    }
+
+    .sumCK {
+        float: right;
+        font-size: 0.3rem;
+    }
+
+    .mineUniteName {
+        width: 65%;
+        overflow: visible;
+        display: block;
+        margin: 0 auto;
+        text-align: left;
+        font-size: 0.4rem;
+    }
+
+
+    .sumCK em {
+        font-size: 0.4rem;
+    }
+
+    .sumCK i {
+        font-size: 0.24rem;
+    }
+
+    .flagContainer {
+        position: relative;
+        top: -1.1rem;
+        float: right;
+        right: 0;
+    }
+
+    .flagContainer img {
+        width: 0.8rem;
+        height: 0.8rem;
+    }
+
+    .rankIcon {
+        position: relative;
+        float: left;
+        width: 0.3rem;
+        top: -0.1rem;
+        left: 0.3rem;
+    }
+
+    .list {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .list .part {
+        width: 33.333%;
+        float: left;
+    }
+
+
+    li.redUnite {
+        width: 96%;
+        float: left;
+        background: rgba(232, 32, 62, 0.75);
+        color: #fff;
+        margin-bottom: 0.07rem;
+        overflow: hidden;
+    }
+
+    li.blueUnite {
+        width: 96%;
+        margin: 0 auto;
+        margin-bottom: 0.05rem;
+        background: rgba(24, 15, 170, 0.75);
+        color: #fff;
+    }
+
+    li.yellowUnite {
+        width: 96%;
+        float: right;
+        background: rgba(228, 196, 25, 0.75);
+        color: #fff;
+    }
+
+
+    li .CLEscore {
+        width: 1.3rem;
+        float: left;
+        font-size: 0.4rem;
+        margin-left: 1%;
+        line-height: 0.8rem;
+    }
+
+    li .CLEscore em {
+        font-size: 0.3rem;
+    }
+
+    li .CKscore {
+        width: 1.6rem;
+        float: left;
+        font-size: 0.4rem;
+        margin-left: 1%;
+        line-height: 0.8rem;
+    }
+
+    li .CKscore em {
+        font-size: 0.3rem;
+    }
+
+    li .record img {
+        width: 0.7rem;
+        float: left;
+    }
+
+    li.mvpli {
+        padding-top: 0.15rem;
+        padding-bottom: 0.15rem;
+    }
+
+    li.mvpli .CLEscore {
+        font-size: 0.4rem;
+    }
+
+    li.mvpli .CKscore {
+        font-size: 0.4rem;
+    }
+
+    li.mvpli .head {
+        width: 0.7rem;
+        height: 0.8rem;
+    }
+
+    li.mvpli .head img {
+        height: 0.7rem;
+        margin-top: -0.05rem;
+    }
+
+    li.mvpli .name {
+        font-size: 0.3rem;
+    }
+
+    li .king {
+        width: 0.4rem;
+        height: 0.2rem;
+        float: left;
+        position: relative;
+        top: -0.7rem;
+        left: -0.1rem;
+    }
+
+    li.mvpli .head img.king {
+        top: -1rem;
+    }
+</style>

+ 7 - 5
tv/src/views/Index.vue

@@ -37,6 +37,8 @@
             }
         },
         mounted() {
+            // alert('clientWidth:' + document.documentElement.clientWidth);
+            // alert('devicePixelRatio:' + window.devicePixelRatio);
             this.getCurVersion();
         },
         methods: {
@@ -45,15 +47,15 @@
                 let that = this;
                 localStorage.eqSn = '30:9C:23:0C:8B:1E';//浏览器默认的
                 function plusReady() {
-                    if(typeof plus == 'undefined') return false;
+                    if (typeof plus == 'undefined') return false;
                     // 获取本地应用资源版本号
                     plus.runtime.getProperty(plus.runtime.appid, function (inf) {
                         localStorage.version = inf.version;
                         that.curVersion = inf.version;
 
                         //首发版本1.0.1
-                        console.log( localStorage.version);
-                        that.checkUpdate( that.curVersion); //开启自动升级
+                        console.log(localStorage.version);
+                        that.checkUpdate(that.curVersion); //开启自动升级
 
                     });
 
@@ -61,9 +63,9 @@
                     plus.device.getInfo({
                         success: function (e) {
                             let uuid = JSON.stringify(e.uuid).toString().substr(1);
-                            uuid = uuid.substring(0,uuid.length-1);
+                            uuid = uuid.substring(0, uuid.length - 1);
                             localStorage.eqSn = uuid;
-                            console.log('===== uuid =====:'+uuid);
+                            console.log('===== uuid =====:' + uuid);
                             // const h = this.$createElement;
                             // that.$notify({
                             //     title: '获取UUID',

+ 3 - 3
tv/src/views/Main.vue

@@ -395,7 +395,7 @@
                             // 0: 下课 团课/私教 排名
                             // 1:团课/私教 todo
                             // 2:竞技课2PK
-                            // 3:竞技课3PK
+                            // 3:竞技课threepk
                             switch (parseInt(json.dp)) {
                                 case 0:
                                     that.$router.push({path: '/rank'});
@@ -408,7 +408,7 @@
                                     that.$router.push({path: '/pk'});
                                     break;
                                 case 3:
-                                    that.$router.push({path: '/3pk'});
+                                    that.$router.push({path: '/threepk'});
                                     break;
                             }
                         }
@@ -499,7 +499,7 @@
             },
             fmtFloat(val) {
                 if (val == 0) {
-                    return '0'
+                    return '0.0'
                 } else {
                     return parseFloat(val).toFixed(1);
                 }

+ 15 - 4
tv/src/views/Rank.vue

@@ -74,7 +74,8 @@
                     CkSort: [],
                     CalSort: [],
                 },
-                rankTimer:null
+                rankTimer:null,
+                totalTime:60
             }
         },
         mounted() {
@@ -144,8 +145,18 @@
                 ClassUserRank(postdata).then(res => {
                     let json = res;
                     if (json.Code == 0) {
-                        this.students.CkSort = json.Rs.CkSort;
-                        this.students.CalSort = json.Rs.CalSort;
+                        this.students.CkSort = json.Rs;
+                        this.students.CalSort = json.Rs;
+                        let Rs = json.Rs;
+                        if(Rs){
+                            // 排序
+                            that.students.CkSort = that.students.CkSort.sort(function (a, b) {
+                                return b.Ck - a.Ck;
+                            });
+                            that.students.CalSort = that.students.CalSort.sort(function (a, b) {
+                                return b.Cle - a.Cle;
+                            });
+                        }
                     } else {
                         this.students.CkSort = [];
                         this.students.CalSort = [];
@@ -170,7 +181,7 @@
             },
             fmtFloat(val) {
                 if (val == 0) {
-                    return '0'
+                    return '0.0'
                 } else {
                     return parseFloat(val).toFixed(1);
                 }

+ 6 - 3
tv/src/views/Wait.vue

@@ -362,19 +362,19 @@
                             // 0: 下课 团课/私教 排名
                             // 1:团课/私教 todo
                             // 2:竞技课2PK
-                            // 3:竞技课3PK
+                            // 3:竞技课threepk
                             switch (parseInt(json.dp)) {
                                 case 0:
                                     that.$router.push({path: '/rank'});
                                     break;
                                 case 1:
-                                    that.$router.push({path: '/'});
+                                    that.$router.push({path: '/main'});
                                     break;
                                 case 2:
                                     that.$router.push({path: '/pk'});
                                     break;
                                 case 3:
-                                    that.$router.push({path: '/3pk'});
+                                    that.$router.push({path: '/threepk'});
                                     break;
                             }
                         }
@@ -423,6 +423,9 @@
         overflow: hidden;
         display: block;
         margin: 0 auto;
+        /*transform: scale(1,5);*/
+        /*-ms-transform: scale(1,5); !* IE 9 *!*/
+        /*-webkit-transform: scale(0.8,0.8); !* Safari and Chrome *!*/
     }
 
     /*/deep/ .el-carousel__item--card {*/

+ 841 - 0
tv/src/views/Wait2.vue

@@ -0,0 +1,841 @@
+<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">
+                            <div>
+                                <h5 v-html="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>
+                            </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>
+                                    <li v-if="!Rs.Result">
+                                        <h5>还没有人突破记录哟~</h5>
+                                    </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'
+
+    // 测试模式 localStorage.eqSn = "8e501b0bde9ce600"
+
+    let qs = require('qs');
+    export default {
+        data() {
+            return {
+                eqSn: '30:9C:23:0C:8B:1E',
+                pageStyle: RandomBg(),
+                trueDate: true,//真实数据 true false
+                autoplayStatus: false,// false
+                fakeNums: 8,//
+                unite: '卡路里',
+                topMsg: '',
+                students: [],
+                studentsLimit: [],
+                showType: 2,//1 单人
+                curIndex: false,//1 单人
+                waitTimer: null,//null
+                test:
+                    {
+                        Title: '本<s style="font-size: 0.7rem;color: red">周</s>场馆卡路里总消耗',
+                        Title2: '本<s style="font-size: 0.7rem;color: red">月</s>场馆卡路里总消耗',
+                        Result: [{'Values': 0, Unite: '千卡'}],
+                    },
+                recordMain: [],
+                bottom: {},
+                rt: [],
+            }
+        },
+        mounted() {
+            // this.$router.push({path: '/2pkRank'});
+            if (this.trueDate) {
+                this.waitTimer = 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(),
+                    }
+                ];
+                this.recordMain = [
+                    {
+                        Title: '本<s>周</s>场馆卡路里总消耗',
+                        Result: [{'Values': 0, Unite: '千卡'}],
+                    },
+                    {
+                        Title: '本<s>周</s>场馆卡路里总消耗',
+                        Result: [{'Values': 0, Unite: '千卡'}],
+                    }
+                ]
+            }
+        },
+        beforeDestroy() {
+            clearInterval(this.waitTimer);
+            this.waitTimer = null;
+        },
+        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: localStorage.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;
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            GetHerosRankingQuery() {
+                let that = this;
+                let param = {
+                    eqSn: localStorage.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: localStorage.eqSn,
+                    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: localStorage.eqSn,
+                };
+                let postdata = qs.stringify(param);
+                CalorieStatsQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.recordMain = json.Rs;
+                    } else {
+                        that.recordMain = [
+                            {
+                                Title: '',
+                                Result: [{'Values': '', Unite: ''}],
+                            },
+                            {
+                                Title: '',
+                                Result: [{'Values': '', Unite: ''}],
+                            }
+                        ];
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            curgetClassStat() {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    eqSn: localStorage.eqSn
+                };
+                let postdata = qs.stringify(param);
+                getClassStat(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        // alert(JSON.stringify(json.ClassOn));
+                        // alert("alert:"+json.ClassOn);
+                        // 上课了
+                        if (json.ClassOn == 1) {
+                            // 0: 下课 团课/私教 排名
+                            // 1:团课/私教 todo
+                            // 2:竞技课2PK
+                            // 3:竞技课threepk
+                            switch (parseInt(json.dp)) {
+                                case 0:
+                                    that.$router.push({path: '/rank'});
+                                    break;
+                                case 1:
+                                    that.$router.push({path: '/main'});
+                                    break;
+                                case 2:
+                                    that.$router.push({path: '/pk'});
+                                    break;
+                                case 3:
+                                    that.$router.push({path: '/threepk'});
+                                    break;
+                            }
+                        }
+                    } else {
+                        // that.$message.error(json.Memo);
+                    }
+                })
+            },
+        },
+        watch: {
+            '$route': function (val) {
+                if (val.path == '/wait') {
+                    this.autoplayStatus = false;
+                    if (this.trueDate) {
+                        this.waitTimer = setInterval(() => {
+                            this.curgetClassStat();
+                            this.GetHerosRankingQuery();
+                            this.GetCalorieStatsQuery();
+                            this.GetUserRankingQuery();
+                        }, 1000);
+                    } else {
+                        this.students = this.fakeNews();
+                        this.topMsg = this.students[0];
+                    }
+                } else {
+                    clearInterval(this.waitTimer);
+                }
+            }
+        },
+        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;
+        /*transform: scale(1,5);*/
+        /*-ms-transform: scale(1,5); !* IE 9 *!*/
+        /*-webkit-transform: scale(0.8,0.8); !* Safari and Chrome *!*/
+    }
+
+    /*/deep/ .el-carousel__item--card {*/
+    /*width: auto !important;*/
+    /*}*/
+    /*/deep/ .el-carousel__item {*/
+    /*width: auto !important;*/
+    /*}*/
+    /*/deep/ .el-carousel__item--card.is-active {*/
+    /*z-index: 2;*/
+    /*position: absolute;*/
+    /*left: 50%;*/
+    /*transform: translate(-50%, 0px) !important;*/
+    /*}*/
+
+
+    .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;
+    }
+
+    .recordMain {
+        /*height: 6rem;*/
+        overflow: hidden;
+    }
+
+    .rankContainer .lt .recordMain h5 {
+        font-family: vista;
+        font-weight: normal;
+        font-size: 0.6rem;
+        text-align: left;
+        color: #fff;
+        margin: 5% auto;
+    }
+
+    .recordMain h5 s {
+        font-size: 0.8rem;
+    }
+
+    .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>

+ 38 - 13
tv/src/views/pk.vue

@@ -48,11 +48,11 @@
                             <div class="bottomLi">
                                 <div class="btcla">
                                     <img src="../static/img/s1.svg"/>
-                                    <span>{{ s.Cle |fmtFloat }}</span>
+                                    <span>{{ s.Cle |fmtInt }}</span>
                                 </div>
                                 <div class="btck">
                                     <img src="../static/img/s2.svg"/>
-                                    <span>{{ s.Steps }}</span>
+                                    <span>{{ s.PureCalorieNoVo2  |fmtInt }}</span>
                                 </div>
                                 <div class="step">
                                     <img src="../static/img/ck.svg"/>
@@ -137,11 +137,11 @@
                             <div class="bottomLi">
                                 <div class="btcla">
                                     <img src="../static/img/s1.svg"/>
-                                    <span>{{ s.Cle |fmtFloat }}</span>
+                                    <span>{{ s.Cle |fmtInt }}</span>
                                 </div>
                                 <div class="btck">
                                     <img src="../static/img/s2.svg"/>
-                                    <span>{{ s.Steps }}</span>
+                                    <span>{{ s.PureCalorieNoVo2  |fmtInt}}</span>
                                 </div>
                                 <div class="step">
                                     <img src="../static/img/ck.svg"/>
@@ -233,9 +233,7 @@
                 // 人口总数
                 that.num = json.Rs ? json.Rs.length : 0;
                 this.ClacClassTime();
-
             }
-
         },
         beforeDestroy() {
             clearInterval(this.PkTimer);
@@ -258,7 +256,7 @@
                             "realHr": 60,
                             "activePercent": 30,
                             "heartRate": 90,
-                            "Steps": 9999,
+                            "PureCalorieNoVo2": 9999,
                             "PureCalorieNoVo2": 999,
                             "Name": "刘宇宁",
                             "updateTime": 1604568915582,
@@ -305,17 +303,37 @@
                 let blueSum = 0;
                 // that.redSum
                 Rs.redUnite.map(function (item, t) {
-                    redSum += parseFloat(item.Ck)
+                    redSum += parseFloat(item.Ck);
                 });
                 Rs.blueUnite.map(function (item, t) {
-                    blueSum += parseFloat(item.Ck)
+                    blueSum += parseFloat(item.Ck);
                 });
                 that.redSum = redSum.toFixed(1);
                 that.blueSum = blueSum.toFixed(1);
 
+                // 进度条 formatCk
+                let redFmtSum = 0;
+                let blueFmtSum = 0;
+                Rs.redUnite.map(function (item, t) {
+                    redFmtSum += item.formatCk
+                });
+                Rs.blueUnite.map(function (item, t) {
+                    blueFmtSum += item.formatCk
+                });
+
+
                 // pkVal
-                let sumMax = parseFloat(redSum) + parseFloat(blueSum);
-                that.pkVal = (redSum / sumMax) * 100 + '%';
+                let sumMax = redFmtSum + blueFmtSum;
+
+                // 当为0时均分
+                if (sumMax == 0) {
+                    that.pkVal = '50%';
+                } else {
+                    // 限制最大
+                    let pkval = parseInt((redFmtSum / sumMax) * 100) > 100 ? 100 : parseInt((redFmtSum / sumMax) * 100);
+                    that.pkVal = pkval + '%';
+                    console.log(pkval);
+                }
             },
             // 获取上课学生信息
             GetgetUserList() {
@@ -379,7 +397,7 @@
             ClacClassTime() {
                 let BeginTime = new Date(globalcurrent() + ' ' + this.BeginTime);//结束时间
                 let nowDate = new Date();
-                let date = new Date(nowDate - BeginTime);
+                let date = new Date(nowDate - BeginTime - 8 * 60 * 60 * 1000);//减掉东八区时区问题
 
                 let h = date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':';
                 let m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes() + ':';
@@ -449,10 +467,17 @@
             },
             fmtFloat(val) {
                 if (val == 0) {
-                    return '0'
+                    return '0.0'
                 } else {
                     return parseFloat(val).toFixed(1);
                 }
+            },
+            fmtInt(val) {
+                if (val == 0) {
+                    return '0'
+                } else {
+                    return parseInt(val);
+                }
             }
         },
         watch: {

+ 1533 - 0
tv/src/views/threepk.vue

@@ -0,0 +1,1533 @@
+<template>
+    <div class="pages">
+        <Headside></Headside>
+        <div class="pk-detail-con">
+            <div class="progress">
+                <div class="progress-bar" :style="{width: pkVal}">
+                    <i class="lightning"></i>
+                </div>
+                <div class="right-bar" :style="{width: yellowVal}">
+                    <i class="lightning"></i>
+                </div>
+            </div>
+        </div>
+        <div class="lessonInfo">
+            <div class="lt">
+                <div class="bottomInfo">
+                    <span class="names">
+                        {{PlanName}}
+                    </span>
+                    <div class="teacher">
+                        <span>人数:{{num}}</span>
+                    </div>
+
+                </div>
+            </div>
+            <div class="md">
+                <div class="cubelist">
+                    <div class="cubes rcube">
+                        <em>红队</em>
+                    </div>
+                    <img class="vs" src="../assets/img/pk/vs.svg"/>
+                    <div class="cubes bcube">
+                        <em>蓝队</em>
+                    </div>
+                    <img class="vs" src="../assets/img/pk/vs.svg"/>
+                    <div class="cubes ycube">
+                        <em>黄队</em>
+                    </div>
+                </div>
+                <div class="teamScore">
+                    <div class="lt">{{redSum}} <em>ck值</em></div>
+                    <div class="md">{{blueSum}} <em>ck值</em></div>
+                    <div class="rt">{{yellowSum}} <em>ck值</em></div>
+                </div>
+            </div>
+            <div class="rt">
+                <div class="classTime">
+                    {{classInfo.endTime}}
+                </div>
+            </div>
+        </div>
+        <div class="pk_container">
+            <div class="pl_lt">
+                <ul>
+                    <li :class="RedstudentsClassName" v-for="(s,i) in students.redUnite">
+                        <div class="bg">
+                            <h5>{{ s.Name }}</h5>
+                            <div class="user">
+                                <div class="ult">
+                                    <em>
+                                        <div v-if="s.activePercent != 0">
+                                            {{ s.activePercent}}
+                                        </div>
+                                        <div class="plus" v-if="s.activePercent == 0">
+                                            ---
+                                        </div>
+                                        <s>%</s>
+                                    </em>
+                                </div>
+                                <div class="umd">
+                                    <div class="circle">
+                                        <img :src="s.Head" alt="" v-if="s.Head">
+                                        <img src="../static/img/people/flyhead.png" alt="" v-if="!s.Head">
+                                    </div>
+                                </div>
+                                <div class="urt">
+                                    <em class="fastJump" v-if="s.realHr != 0" v-show="parseInt(s.realHr) > 100">{{
+                                        s.realHr }}</em>
+                                    <em class="slowJump" v-if="s.realHr != 0" v-show="parseInt(s.realHr) <= 100">{{
+                                        s.realHr }}</em>
+                                    <em class="plus" v-if="s.realHr == 0"> --- </em>
+                                    <img src="../static/img/heart.svg" class=""/>
+                                </div>
+                            </div>
+                            <div class="bottomLi">
+                                <div class="btcla">
+                                    <img src="../static/img/s1.svg"/>
+                                    <span>{{ s.Cle |fmtInt }}</span>
+                                </div>
+                                <div class="btck">
+                                    <img src="../static/img/s2.svg"/>
+                                    <span>{{ s.PureCalorieNoVo2  |fmtInt}}</span>
+                                </div>
+                                <div class="step">
+                                    <img src="../static/img/ck.svg"/>
+                                    <span>{{ s.Ck  |fmtFloat}}</span>
+                                </div>
+                            </div>
+                        </div>
+                    </li>
+                </ul>
+            </div>
+            <div class="pl_md">
+                <ul>
+                    <li :class="RedstudentsClassName" v-for="(s,i) in students.blueUnite">
+                        <div class="bg">
+                            <h5>{{ s.Name }}</h5>
+                            <div class="user">
+                                <div class="ult">
+                                    <em>
+                                        <div v-if="s.activePercent != 0">
+                                            {{ s.activePercent}}
+                                        </div>
+                                        <div class="plus" v-if="s.activePercent == 0">
+                                            ---
+                                        </div>
+                                        <s>%</s>
+                                    </em>
+                                </div>
+                                <div class="umd">
+                                    <div class="circle">
+                                        <img :src="s.Head" alt="" v-if="s.Head">
+                                        <img src="../static/img/people/flyhead.png" alt="" v-if="!s.Head">
+                                    </div>
+                                </div>
+                                <div class="urt">
+                                    <em class="fastJump" v-if="s.realHr != 0" v-show="parseInt(s.realHr) > 100">{{
+                                        s.realHr }}</em>
+                                    <em class="slowJump" v-if="s.realHr != 0" v-show="parseInt(s.realHr) <= 100">{{
+                                        s.realHr }}</em>
+                                    <em class="plus" v-if="s.realHr == 0"> --- </em>
+                                    <img src="../static/img/heart.svg" class=""/>
+                                </div>
+                            </div>
+                            <div class="bottomLi">
+                                <div class="btcla">
+                                    <img src="../static/img/s1.svg"/>
+                                    <span>{{ s.Cle |fmtInt }}</span>
+                                </div>
+                                <div class="btck">
+                                    <img src="../static/img/s2.svg"/>
+                                    <span>{{ s.PureCalorieNoVo2  |fmtInt}}</span>
+                                </div>
+                                <div class="step">
+                                    <img src="../static/img/ck.svg"/>
+                                    <span>{{ s.Ck  |fmtFloat}}</span>
+                                </div>
+                            </div>
+                        </div>
+                    </li>
+                </ul>
+            </div>
+            <div class="pl_rt">
+                <ul>
+                    <li :class="RedstudentsClassName" v-for="(s,i) in students.yellowUnite">
+                        <div class="bg">
+                            <h5>{{ s.Name }}</h5>
+                            <div class="user">
+                                <div class="ult">
+                                    <em>
+                                        <div v-if="s.activePercent != 0">
+                                            {{ s.activePercent}}
+                                        </div>
+                                        <div class="plus" v-if="s.activePercent == 0">
+                                            ---
+                                        </div>
+                                        <s>%</s>
+                                    </em>
+                                </div>
+                                <div class="umd">
+                                    <div class="circle">
+                                        <img :src="s.Head" alt="" v-if="s.Head">
+                                        <img src="../static/img/people/flyhead.png" alt="" v-if="!s.Head">
+                                    </div>
+                                </div>
+                                <div class="urt">
+                                    <em class="fastJump" v-if="s.realHr != 0" v-show="parseInt(s.realHr) > 100">{{
+                                        s.realHr }}</em>
+                                    <em class="slowJump" v-if="s.realHr != 0" v-show="parseInt(s.realHr) <= 100">{{
+                                        s.realHr }}</em>
+                                    <em class="plus" v-if="s.realHr == 0"> --- </em>
+                                    <img src="../static/img/heart.svg" class=""/>
+                                </div>
+                            </div>
+                            <div class="bottomLi">
+                                <div class="btcla">
+                                    <img src="../static/img/s1.svg"/>
+                                    <span>{{ s.Cle |fmtInt }}</span>
+                                </div>
+                                <div class="btck">
+                                    <img src="../static/img/s2.svg"/>
+                                    <span>{{ s.PureCalorieNoVo2  |fmtInt}}</span>
+                                </div>
+                                <div class="step">
+                                    <img src="../static/img/ck.svg"/>
+                                    <span>{{ s.Ck  |fmtFloat}}</span>
+                                </div>
+                            </div>
+                        </div>
+                    </li>
+                </ul>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+    import '../libs/rem';
+    import Headside from '@/components/Headside'
+    import {
+        getHello,
+        getClassStat
+    } from '@/api/getApiRes'
+    import '../libs/rem';
+
+    let qs = require('qs');
+
+    export default {
+        data() {
+            return {
+                trueDate: true,//启用真实数据 true / false
+                RedstudentsClassName: '',
+                BluestudentsClassName: '',
+                YellowstudentsClassName: '',
+                studentsClassName: [],
+                redSum: 0,
+                blueSum: 0,
+                yellowSum: 0,
+                pkVal: '33.33%',
+                yellowVal: '33.33%',
+                students: {
+                    redUnite: [],
+                    blueUnite: [],
+                    yellowUnite: [],
+                },
+                PlanName: '',
+                num: 0,
+                classInfo: {
+                    name: '竞技课程',
+                    num: '0',
+                    btTime: '2020-11-13 09:00:00',//时间戳
+                    endTime: '00:00:00',
+                    redSum: 0,
+                    blueSum: 0,
+                }
+            }
+        },
+        mounted() {
+            let that = this;
+            if (this.trueDate) {
+                this.PkTimer = setInterval(() => {
+                    this.GetgetUserList();
+                    this.curgetClassStat();
+                }, 1000);
+                this.GetgetUserList();
+
+                // this.PkEgg = setInterval(() => {
+                //     this.createEgg();
+                // }, 6000);
+
+            } else {
+                // 虚假的数据
+                let json = {
+                    "Code": "0",
+                    "Memo": "Success",
+                    "Dp": {
+                        "PlanId": 182,
+                        "ShopId": 1,
+                        "SvId": 1,
+                        "PlanName": "齐源大厦浏览器显示2020-12-02日08:40开始的竞技游戏",
+                        "Status": 2,
+                        "BeginTime": "17:15:18",
+                        "EndTime": 0,
+                        "ClassType": 2,
+                        "PkNum": 2
+                    }
+                };
+                // 载入课程信息
+                let Dp = json.Dp;
+                that.ReadLessonInfo(Dp);
+                // 载入学生信息
+                let Rs = this.fakeNews(14);
+                that.UniteBreak(Rs);
+
+                // 人口总数
+                that.num = Rs ? Rs.length + 1 : 0;
+                this.ClacClassTime();
+            }
+        },
+        beforeDestroy() {
+            clearInterval(this.PkTimer);
+            clearInterval(this.PkEgg);
+            this.PkTimer = null;
+            this.PkEgg = null;
+        },
+        methods: {
+            fakeNews(num) {
+                let item = [];
+                let nums = Math.random() * 100 + 1;
+                this.fakeNums = num;
+                for (var i = 0; i < this.fakeNums; i++) {
+                    item.push(
+                        {
+                            "SvId": 1,
+                            "UserId": 1,
+                            "Cle": i * 14,
+                            "realHr1": parseInt(Math.random() * 100 + 50),
+                            "realHr": 60,
+                            "activePercent": 30,
+                            "heartRate": 90,
+                            "PureCalorieNoVo2": 9999,
+                            "PureCalorieNoVo2": 999,
+                            "Name": "刘宇宁",
+                            "updateTime": 1604568915582,
+                            "Ck": nums + i * 2.2,
+                            "Head": "http://192.168.0.2/zw.png",
+                            "GroupNo": i % 3 + 1
+                        }
+                    )
+                }
+                return item;
+            },
+            // 载入课程信息
+            ReadLessonInfo(Dp) {
+                this.PlanName = Dp.PlanName;
+                this.BeginTime = Dp.BeginTime;
+            },
+            // 分队展示
+            UniteBreak(Rs) {
+                let that = this;
+                that.students.redUnite = [];
+                that.students.blueUnite = [];
+                that.students.yellowUnite = [];
+                if (!Rs) {
+                    that.students.redUnite = [];
+                    that.students.blueUnite = [];
+                    that.students.yellowUnite = [];
+                } else {
+                    Rs.map(function (item, t) {
+                        if (item.GroupNo == 1) {
+                            that.students.redUnite.push(item);
+                        }
+                        if (item.GroupNo == 2) {
+                            that.students.blueUnite.push(item);
+                        }
+                        if (item.GroupNo == 3) {
+                            that.students.yellowUnite.push(item);
+                        }
+                    })
+
+                }
+                that.giveClassName(that.students.redUnite, 1);
+                that.giveClassName(that.students.blueUnite, 2);
+                that.giveClassName(that.students.yellowUnite, 3);
+                that.calcSumCK(that.students);
+            },
+            // 计算各队总分
+            calcSumCK(Rs) {
+                let that = this;
+                let redSum = 0;
+                let blueSum = 0;
+                let yellowSum = 0;
+                // that.redSum
+                Rs.redUnite.map(function (item, t) {
+                    redSum += parseFloat(item.Ck)
+                });
+                Rs.blueUnite.map(function (item, t) {
+                    blueSum += parseFloat(item.Ck)
+                });
+                Rs.yellowUnite.map(function (item, t) {
+                    yellowSum += parseFloat(item.Ck)
+                });
+                that.redSum = redSum.toFixed(1);
+                that.blueSum = blueSum.toFixed(1);
+                that.yellowSum = yellowSum.toFixed(1);
+
+
+
+                // 进度条 formatCk
+                let redFmtSum = 0;
+                let blueFmtSum = 0;
+                let yellowFmtSum = 0;
+                Rs.redUnite.map(function (item, t) {
+                    redFmtSum += item.formatCk
+                });
+                Rs.blueUnite.map(function (item, t) {
+                    blueFmtSum += item.formatCk
+                });
+                Rs.yellowUnite.map(function (item, t) {
+                    yellowFmtSum += item.formatCk
+                });
+
+                // pkVal
+                let sumMax =redFmtSum+ blueFmtSum + yellowFmtSum;
+
+                // 当为0时均分
+                if (sumMax == 0) {
+                    that.pkVal = '33.33%';
+                    that.yellowVal = '33.33%';
+                } else {
+                    // 限制最大
+                    let pkval = parseInt((redFmtSum / sumMax) * 100) > 100 ? 100 : parseInt((redFmtSum / sumMax) * 100);
+                    let yellowVal = parseInt((yellowFmtSum / sumMax) * 100) > 100 ? 100 : parseInt((yellowFmtSum / sumMax) * 100);
+                    console.log('that.pkVal:'+that.pkVal);
+                    that.pkVal = pkval.toFixed(1) + '%';
+                    that.yellowVal = yellowVal.toFixed(1) + '%';
+                }
+            },
+            // 获取上课学生信息
+            GetgetUserList() {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    eqSn: localStorage.eqSn
+                };
+                let postdata = qs.stringify(param);
+                getHello(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.ReadLessonInfo(json.Dp);
+                        that.UniteBreak(json.Rs);
+                        // 人口总数
+                        that.num = json.Rs.length ? json.Rs.length : 0;
+                        this.ClacClassTime();
+                    } else {
+                        // 已下课
+                        console.log(json.Code);
+                        if (json.Code == '999') {
+                            that.$router.push({path: '/3pkRank'});
+                        } else {
+                            // 已出错
+                            that.$message.error(json.Memo);
+                        }
+                    }
+                })
+            },
+            // 动态计算排版
+            giveClassName(res, type) {
+                let that = this;
+                let numberClass = '';
+                switch (true) {
+                    case  parseInt(res.length) <= 2 && parseInt(res.length) > 0:
+                        numberClass = 'two';
+                        break;
+                    // case  parseInt(res.length) == 3:
+                    //     numberClass = 'three';
+                    //     break;
+                    case  parseInt(res.length) <= 4 && parseInt(res.length) >= 3:
+                        numberClass = 'four';
+                        break;
+                    case  parseInt(res.length) <= 6 && parseInt(res.length) > 4:
+                        numberClass = 'four';
+                        break;
+                    case  parseInt(res.length) <= 8 && parseInt(res.length) > 6:
+                        numberClass = 'eight';
+                        break;
+                }
+                if (type == 1) {
+                    that.RedstudentsClassName = numberClass;
+                }
+                if (type == 2) {
+                    that.BluestudentsClassName = numberClass;
+                }
+                if (type == 3) {
+                    that.YellowstudentsClassName = numberClass;
+                }
+            },
+            // 计算团队竞技课持续时间
+            ClacClassTime() {
+                let BeginTime = new Date(globalcurrent() + ' ' + this.BeginTime);//结束时间
+                let nowDate = new Date();
+                let date = new Date(nowDate - BeginTime - 8 * 60 * 60 * 1000);//减掉东八区时区问题
+
+                let h = date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':';
+                let m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes() + ':';
+                let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
+                this.classInfo.endTime = h + m + s;
+            },
+            // // 计算双方对抗强度加总
+            // CalcTeamCk() {
+            //     let that = this;
+            //     let Redsum = 0;
+            //     let Bluesum = 0;
+            //     let sumMax = 0;
+            //     if (that.Redstudents) {
+            //         that.Redstudents.map(function (i) {
+            //             Redsum = parseFloat(Redsum) + parseFloat(i.Ck)
+            //         });
+            //     }
+            //     if (that.Bluestudents) {
+            //         that.Bluestudents.map(function (i) {
+            //             Bluesum = parseFloat(Bluesum) + parseFloat(i.Ck)
+            //         });
+            //     }
+            //     that.classInfo.redSum = parseFloat(Redsum).toFixed(1);
+            //     that.classInfo.blueSum = parseFloat(Bluesum).toFixed(1);
+            //
+            //     sumMax = parseFloat(Redsum) + parseFloat(Bluesum);
+            //     that.classInfo.pkVal = (that.classInfo.redSum / sumMax) * 100 + '%';
+            // },
+            // 当前课程状态
+            curgetClassStat() {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    eqSn: localStorage.eqSn
+                };
+                let postdata = qs.stringify(param);
+                getClassStat(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        // 没开课
+                        if (json.ClassOn == 0) {
+                            console.log("xiakele ");
+                            // 0: 下课 团课/私教 排名
+                            // 1:团课/私教 todo
+                            // 2:竞技课2PK
+                            // 3:竞技课3PK
+                            console.log('json.dp' + json.dp);
+                            switch (parseInt(json.dp)) {
+                                case 2:
+                                    that.$router.push({path: '/3pkRank'});
+                                    break;
+                                case 3:
+                                    that.$router.push({path: '/3pkRank'});
+                                    break;
+                            }
+                        }
+                    } 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
+                }
+            },
+            fmtFloat(val) {
+                if (val == 0) {
+                    return '0.0'
+                } else {
+                    return parseFloat(val).toFixed(1);
+                }
+            },
+            fmtInt(val) {
+                if (val == 0) {
+                    return '0'
+                } else {
+                    return parseInt(val);
+                }
+            }
+        },
+        watch: {
+            '$route': function (val) {
+                if (val.path == '/threepk') {
+                    if (this.trueDate) {
+                        this.PkTimer = setInterval(() => {
+                            this.GetgetUserList();
+                            this.ClacClassTime();
+                            this.curgetClassStat();
+                        }, 1000);
+                        this.GetgetUserList();
+
+                        // this.PkEgg = setInterval(() => {
+                        //     this.createEgg();
+                        // }, 6000);
+
+                    } else {
+                        let Rs = this.fakeNews(16);
+                        that.UniteBreak(Rs);
+
+                    }
+                } else {
+                    clearInterval(this.PkTimer);
+                    clearInterval(this.PkEgg);
+                }
+            }
+        },
+        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;
+        background-color: #028fe1;
+        background: url("../assets/img/threepk/threepkbg.png");
+        background-size: 100%;
+        background-repeat: no-repeat;
+    }
+
+    * {
+        font-family: vista;
+    }
+
+
+    ul, li {
+        list-style: none;
+        margin: 0;
+        padding: 0;
+    }
+
+    em {
+        font-style: normal;
+    }
+
+
+    .pk-detail-con {
+        /*position: absolute;*/
+        position: relative;
+        top: 0rem;
+        width: 100%;
+        height: 0.6rem;
+        display: block;
+        margin: 0 auto;
+        padding-top: 0.35rem;
+        overflow: hidden;
+    }
+
+    .progress {
+        width: 100%;
+        height: 0.3rem;
+        overflow: visible;
+        background-color: #04A6EE;
+        border-radius: 19px;
+        background-image: url("../static/img/pk/blue.png");
+        /*background-image: linear-gradient(45deg, #60b7ff 25%, #0a84e9 0, #0a84e9 50%, #60b7ff 0, #60b7ff 75%, #0a84e9 0);*/
+        background-size: 40px 40px;
+    }
+
+    .progress-bar {
+        float: left;
+        height: 0.3rem;
+        text-align: left;
+        background-color: #F75E07;
+        -moz-transition: width .6s ease;
+        -webkit-transition: width .6s ease;
+        transition: width .6s ease;
+        background-image: url("../static/img/pk/red.png");
+        background-size: 40px 40px;
+        /*background-image: linear-gradient(45deg, #ff9960 25%, #f75e07 0, #f75e07 50%, #ff9960 0, #ff9960 75%, #f75e07 0);*/
+        /*background-size: 40px 40px;*/
+    }
+
+    .right-bar {
+        float: right;
+        position: relative;
+        right: 0;
+        top: 0rem;
+        height: 0.3rem;
+        text-align: right;
+        background-color: #DBB900;
+        -moz-transition: width .6s ease;
+        -webkit-transition: width .6s ease;
+        transition: width .6s ease;
+        background-image: url("../static/img/pk/red.png");
+        background-size: 40px 40px;
+    }
+
+    .progress, .progress-bar {
+        /*background-image: linear-gradient(rgba(255, 255, 255, 0.1) 50%, rgba(255, 255, 255, 0) 50%);*/
+    }
+
+    .lightning {
+        position: relative;
+        top: -0.5rem;
+        width: 1rem;
+        height: 1.3rem;
+        float: right;
+        margin-right: -0.5rem;
+        background: url("../static/img/pk/light.png") no-repeat center;
+        background-size: cover;
+
+    }
+
+    .right-bar .lightning {
+        position: relative;
+        top: -0.5rem;
+        width: 1rem;
+        height: 1.3rem;
+        margin-right: -0.5rem;
+        background: url("../static/img/pk/light.png") no-repeat center;
+        background-size: cover;
+        left: -0.4rem;
+        float: left;
+    }
+
+    .lp_icon {
+        position: absolute;
+        left: -0.1rem;
+        top: -0.3rem;
+        width: 0.8rem;
+        height: 0.8rem;
+        float: left;
+    }
+
+    .rp_icon {
+        position: absolute;
+        right: 0;
+        top: -0.3rem;
+        width: 0.8rem;
+        height: 0.8rem;
+        float: right;
+    }
+
+    .lessonInfo {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .lessonInfo .lt {
+        width: 30%;
+        float: left;
+    }
+
+    .lessonInfo .md {
+        width: 40%;
+        float: left;
+    }
+
+    .lessonInfo .rt {
+        width: 30%;
+        float: right;
+    }
+
+    .bottomInfo {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .bottomInfo .names {
+        width: 70%;
+        height: 0.6rem;
+        border-radius: 36px;
+        background: #0925b4;
+        border: 2px solid rgba(255, 255, 255, 0.5);
+        font-size: 0.4rem;
+        font-family: Roboto;
+        font-weight: normal;
+        text-align: center;
+        color: #e1ff00;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 0.2rem;
+    }
+
+    .teacher {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        color: #fff;
+        font-size: 0.3rem;
+        padding-top: 0.2rem;
+    }
+
+    .teacher span {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .classTime {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        color: #fff;
+        text-align: center;
+    }
+
+    .cubelist {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .cubelist .cubes {
+        width: 20%;
+        height: 1.5rem;
+        overflow: hidden;
+        float: left;
+        background-position: top center;
+
+    }
+
+    .cubelist .vs {
+        width: 20%;
+        height: 0.6rem;
+        overflow: hidden;
+        float: left;
+        padding-top: 0.4rem;
+    }
+
+    .cubelist .cubes em {
+        width: 80%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        text-align: center;
+        font-size: 0.2rem;
+        font-style: normal;
+        color: #fff;
+        line-height: 1.5rem;
+    }
+
+    .cubes.rcube {
+        background: url("../assets/img/threepk/redCube.svg");
+        background-size: 100% 100%;
+    }
+
+    .cubes.bcube {
+        background: url("../assets/img/threepk/blueCube.svg");
+        background-size: 100% 100%;
+    }
+
+    .cubes.ycube {
+        background: url("../assets/img/threepk/yellowcube.svg");
+        background-size: 100% 100%;
+    }
+
+    .teamScore {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .lessonInfo .teamScore div {
+        width: 20%;
+        float: left;
+        text-align: center;
+        color: #fff;
+        font-size: 0.4rem;
+    }
+
+    .lessonInfo .teamScore .md {
+        width: 60%;
+    }
+
+    .lessonInfo .teamScore .rt {
+        float: right;
+    }
+
+    .lessonInfo .teamScore em {
+        font-size: 0.2rem;
+    }
+
+    .pk_container {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .pk_container .pl_lt {
+        width: 33.333%;
+        float: left;
+    }
+
+    .pk_container .pl_rt {
+        width: 33.333%;
+        float: right;
+    }
+
+    .pk_container .pl_md {
+        width: 33.333%;
+        float: left;
+    }
+
+
+    .pk_container ul {
+        width: 98%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-top: 0.01rem;
+    }
+
+    .pk_container li {
+        overflow: hidden;
+        color: #fff;
+        margin-bottom: 0.1rem;
+    }
+
+    .pk_container .lt li {
+        overflow: hidden;
+    }
+
+    .pk_container .rt li {
+        overflow: hidden;
+    }
+
+    .pk_container .pl_lt .bg {
+        border: 2px solid rgba(255, 143, 122, 0.5);
+        background: rgba(194, 36, 6, 0.5);
+    }
+
+    .pk_container .pl_md .bg {
+        border: 2px solid rgba(80, 115, 255, 0.5);
+        background: rgba(0, 30, 152, 0.5);
+    }
+
+    .pk_container .pl_rt .bg {
+        border: 2px solid rgba(255, 239, 149, 0.5);
+        background: rgba(255, 230, 0, 0.5);
+    }
+
+
+    .pk_container li .bg > h5 {
+        font-family: vista;
+        font-weight: 500;
+        font-size: 0.3rem;
+        text-align: center;
+        color: #fff;
+        margin: 0;
+        margin-top: 0.1rem;
+        margin-bottom: 0.1rem;
+    }
+
+    .pk_container li .user {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .pk_container .user .ult {
+        width: 33.333%;
+        float: left;
+        overflow: visible;
+        flex-direction: column;
+    }
+
+    .pk_container .user .umd {
+        width: 33.333%;
+        float: left;
+        overflow: hidden;
+        flex-direction: column
+    }
+
+    .pk_container .user .urt {
+        width: 33.333%;
+        float: right;
+        flex-direction: column;
+    }
+
+    .centerLi .slowJump {
+        animation: mymove 3s infinite;
+        -webkit-animation: mymove 3s infinite; /*Safari and Chrome*/
+        animation-direction: alternate; /*轮流反向播放动画。*/
+        animation-timing-function: ease-in-out; /*动画的速度曲线*/
+        /* Safari 和 Chrome */
+        -webkit-animation: mymove 3s infinite;
+        -webkit-animation-direction: alternate; /*轮流反向播放动画。*/
+        -webkit-animation-timing-function: ease-in-out; /*动画的速度曲线*/
+    }
+
+    .user .ult span {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        font-family: "Source Han Sans CN";
+        font-weight: normal;
+        font-size: 0.3rem;
+        text-align: center;
+    }
+
+    .user .ult em {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .user .ult em div {
+        width: 80%;
+        overflow: hidden;
+        float: right;
+        text-align: right;
+        padding-right: 0.3rem;
+        font-size: 0.8rem;
+        line-height: 1.6rem;
+    }
+
+    .user .ult s {
+        position: relative;
+        top: -1.2rem;
+        right: 0rem;
+        float: right;
+        font-family: HeadLineA;
+        font-weight: normal;
+        font-size: 0.3rem;
+        text-align: center;
+        text-decoration: none;
+    }
+
+    .circle {
+        width: 1.65rem;
+        height: 1.65rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border-radius: 250px;
+        padding-top: 0.09rem;
+    }
+
+    .user .umd img {
+        width: 1.5rem;
+        height: 1.5rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border-radius: 250px;
+        border: 5px solid #B9CB01;
+    }
+
+
+    .urt img {
+        position: relative;
+        right: 0.1rem;
+        top: -1.2rem;
+        width: 0.35rem;
+        height: 0.35rem;
+        float: right;
+    }
+
+    .urt em {
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        font-family: HeadLineA;
+        font-weight: normal;
+        font-size: 0.7rem;
+        letter-spacing: -0.05em;
+        text-align: right;
+        font-style: normal;
+        line-height: 1.5rem;
+        padding-right: 25%;
+    }
+
+    .bottomLi {
+        width: 98%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        font-weight: normal;
+        color: #fff;
+        text-align: center;
+        font-size: 0.4rem;
+        text-indent: 0.2rem;
+    }
+
+    .bottomLi img {
+        float: left;
+        margin-left: 10%;
+    }
+
+    .bottomLi span {
+        float: left;
+        text-align: left;
+    }
+
+    .bottomLi .btcla {
+        width: 30%;
+        float: left;
+        text-align: left;
+    }
+
+    .bottomLi .btck {
+        width: 40%;
+        float: left;
+        text-align: left;
+    }
+
+    .bottomLi .step {
+        width: 30%;
+        float: right;
+        text-align: left;
+    }
+
+    @keyframes mymove {
+        0% {
+            transform: scale(1); /*开始为原始大小*/
+        }
+        25% {
+            transform: scale(1.2); /*放大1.1倍*/
+        }
+        50% {
+            transform: scale(1);
+        }
+        75% {
+            transform: scale(1.2);
+        }
+
+    }
+
+    @-webkit-keyframes mymove /*Safari and Chrome*/
+    {
+        0% {
+            transform: scale(1); /*开始为原始大小*/
+        }
+        25% {
+            transform: scale(1.2); /*放大1.1倍*/
+        }
+        50% {
+            transform: scale(1);
+        }
+        75% {
+            transform: scale(1.2);
+        }
+    }
+
+    .partInfo {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-top: 1rem;
+    }
+
+    .partInfo .rp, .partInfo .bp {
+        width: 50%;
+        float: left;
+    }
+
+    .partInfo .title {
+        width: 33%;
+        overflow: hidden;
+        display: block;
+        margin: 0;
+        font-size: 0.4rem;
+        color: #fff;
+        text-align: left;
+    }
+
+    .rtitle {
+        float: left;
+        padding-left: 0.25rem;
+    }
+
+    .partInfo .btitle {
+        width: 30%;
+        float: right;
+    }
+
+    .partInfo .title img {
+        float: left;
+        margin-right: 0.2rem;
+    }
+
+    .cubelist {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .teamScore {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .teamScore div {
+        width: 50%;
+        float: left;
+        text-align: center;
+        color: #fff;
+        font-size: 0.6rem;
+    }
+
+
+    .fastJump {
+        animation: mymove 1s infinite;
+        -webkit-animation: mymove 1s infinite; /*Safari and Chrome*/
+        animation-direction: alternate; /*轮流反向播放动画。*/
+        animation-timing-function: ease-in-out; /*动画的速度曲线*/
+        /* Safari 和 Chrome */
+        -webkit-animation: mymove 1s infinite;
+        -webkit-animation-direction: alternate; /*轮流反向播放动画。*/
+        -webkit-animation-timing-function: ease-in-out; /*动画的速度曲线*/
+    }
+
+    .slowJump {
+        animation: mymove 2s infinite;
+        -webkit-animation: mymove 2s infinite; /*Safari and Chrome*/
+        animation-direction: alternate; /*轮流反向播放动画。*/
+        animation-timing-function: ease-in-out; /*动画的速度曲线*/
+        /* Safari 和 Chrome */
+        -webkit-animation: mymove 3s infinite;
+        -webkit-animation-direction: alternate; /*轮流反向播放动画。*/
+        -webkit-animation-timing-function: ease-in-out; /*动画的速度曲线*/
+    }
+
+
+    /*two*/
+
+    .pk_container li.two {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+    }
+
+    .pk_container li.two .user {
+        height: 1.75rem;
+        overflow: hidden;
+    }
+
+    .two .bottomLi {
+        width: 98%;
+        font-size: 0.35rem;
+        margin-top: 0rem;
+        text-align: center;
+    }
+
+    .two .bottomLi img {
+        width: 0.4rem;
+        height: 0.4rem;
+        margin-top: 0.15rem;
+    }
+
+    .two .bottomLi .btck img {
+        width: 0.4rem;
+        margin-top: 0.1rem;
+    }
+
+    .two .bottomLi span {
+        line-height: 0.8rem;
+        text-indent: 0.1rem;
+    }
+
+    .two .bottomLi .btcla {
+        width: 30%;
+    }
+
+    .two .bottomLi .btck {
+        width: 33%;
+        padding-left: 3%;
+    }
+
+    .two .bottomLi .step {
+        width: 28%;
+        padding-right: 0%;
+    }
+
+    .two .cla em.plus {
+        position: relative;
+        left: -0.3rem
+    }
+
+    .two .lhj span.plus {
+        position: relative;
+        left: 1.3rem
+    }
+
+    .two .bottomLi .btck img {
+        width: 0.5rem;
+        height: 0.5rem;
+        margin-top: 0.12rem;
+    }
+
+    /*three*/
+
+    .pk_container li.three {
+        width: 90%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-bottom: 0.1rem;
+        float: none;
+    }
+
+    .three .bottomLi {
+        width: 98%;
+        font-size: 0.35rem;
+        margin-top: 0rem;
+        text-align: center;
+    }
+
+    .three .circle {
+        width: 1.2rem;
+        height: 1.2rem;
+    }
+
+    .three .circle img {
+        width: 0.9rem;
+        height: 0.9rem;
+    }
+
+    .three .user {
+        height: 1.2rem;
+        overflow: hidden;
+    }
+
+    .three .ult em div {
+        line-height: 1.2rem;
+    }
+
+    .three .urt em {
+        line-height: 1.2rem;
+    }
+
+    .three .bottomLi img {
+        width: 0.4rem;
+        height: 0.4rem;
+        margin-top: 0.15rem;
+    }
+
+    .three .bottomLi .btck img {
+        width: 0.4rem;
+        margin-top: 0.1rem;
+    }
+
+    .three .bottomLi span {
+        line-height: 0.8rem;
+        text-indent: 0.1rem;
+    }
+
+    .three .bottomLi .btcla {
+        width: 30%;
+    }
+
+    .three .bottomLi .btck {
+        width: 33%;
+        padding-left: 3%;
+    }
+
+    .three .bottomLi .step {
+        width: 28%;
+        padding-right: 0%;
+    }
+
+    .three .cla em.plus {
+        position: relative;
+        left: -0.3rem
+    }
+
+    .three .lhj span.plus {
+        position: relative;
+        left: 1.3rem
+    }
+
+    .three .bottomLi .btck img {
+        width: 0.5rem;
+        height: 0.5rem;
+        margin-top: 0.12rem;
+    }
+
+
+    /*four*/
+    .four {
+        width: 50%;
+        float: left;
+    }
+
+    .four .bg {
+        width: 96%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .pk_container li.four .bg > h5 {
+        font-size: 0.25rem;
+    }
+
+    .four .user .ult span {
+        font-size: 0.2rem;
+    }
+
+    .four .user .ult em div {
+        width: 90%;
+        margin-right: 0;
+        font-size: 0.5rem;
+        line-height: 1rem;
+        padding-right: 0.2rem;
+    }
+
+    .four .user .ult s {
+        font-size: 0.1rem;
+        line-height: 1rem;
+    }
+
+    .four .circle {
+        width: 1rem;
+        height: 1rem;
+    }
+
+    .four .user .umd img {
+        width: 0.8rem;
+        height: 0.8rem;
+    }
+
+    .four .urt img {
+        width: 0.2rem;
+        height: 0.2rem;
+        top: -0.8rem;
+    }
+
+    .four .urt em {
+        font-size: 0.4rem;
+        line-height: 1rem;
+    }
+
+    .four .bottomLi {
+        width: 100%;
+        text-indent: 0.1rem;
+        font-size: 0.2rem;
+    }
+
+    .four .bottomLi img {
+        width: 0.2rem;
+        height: 0.2rem;
+    }
+
+    .four .bottomLi span {
+        width: 60%;
+    }
+
+    .four .user {
+        height: 1.2rem;
+        overflow: hidden;
+    }
+
+    /*six*/
+
+
+    /*eight*/
+    .eight {
+        width: 50%;
+        float: left;
+    }
+
+    .eight .bg {
+        width: 96%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .pk_container li.eight .bg > h5 {
+        font-size: 0.25rem;
+        margin: 0.01rem 0;
+    }
+
+    .eight .user .ult span {
+        font-size: 0.2rem;
+
+    }
+
+    .eight .user .ult em div {
+        width: 90%;
+        padding-right: 0.2rem;
+        margin-right: 0rem;
+        font-size: 0.4rem;
+        line-height: 0.8rem;
+    }
+
+    .eight .user .ult s {
+        font-size: 0.1rem;
+        line-height: 1.3rem;
+    }
+
+    .eight .circle {
+        width: 1rem;
+        height: 1rem;
+    }
+
+    .eight .user .umd img {
+        width: 0.6rem;
+        height: 0.6rem;
+    }
+
+    .eight .urt img {
+        width: 0.15rem;
+        height: 0.15rem;
+        top: -0.6rem;
+        right: 0.2rem;
+    }
+
+    .eight .urt em {
+        font-size: 0.3rem;
+        line-height: 0.8rem;
+        padding-right: 45%;
+    }
+
+    .eight .bottomLi {
+        width: 100%;
+        text-indent: 0.1rem;
+        font-size: 0.2rem;
+    }
+
+    .eight .bottomLi img {
+        width: 0.2rem;
+        height: 0.2rem;
+    }
+
+    .eight .bottomLi span {
+        width: 60%;
+    }
+
+    .eight .user {
+        height: 0.85rem;
+        overflow: hidden;
+    }
+</style>

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio