Pārlūkot izejas kodu

升级链接使用正式版

Changpeng Duan 5 gadi atpakaļ
vecāks
revīzija
bc91fdecce

+ 2 - 0
.gitignore

@@ -17,3 +17,5 @@ package-lock.json
 /hbuild/GoAllOutTv/GoAllOutTv/
 /hbuild/GoAllOutTv/build/
 /hbuild/GoAllOutTv/
+/hbuild/upload/
+/hbuild/upload/*

+ 1 - 1
pc/src/Global.js

@@ -6,7 +6,7 @@ companyInfo = {
 };
 
 headapi = process.env.NODE_ENV === 'development' ? '/api/' : '../';
-headbpi = process.env.NODE_ENV === 'development' ? '/bpi/' : '../';
+headbpi = process.env.NODE_ENV === 'development' ? '/bpi/' : 'http://cal.beswell.com:85/';
 
 
 // 常用选项

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

@@ -708,3 +708,16 @@ export function FinshedDispPlanQuery(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/FinshedDispPlanQuery ';
     return getApiBasic(url, postdata);
 }
+
+// 11-24  私有心率设备
+
+// 课堂记录(下课后)详情
+export function AddPvtHrSensors(postdata) {
+    let url = headapi + 'v1/HrSensors/AddPvtHrSensors ';
+    return getApiBasic(url, postdata);
+}
+// 查询商家会员私有心率设备
+export function QueryPvtHrSensors(postdata) {
+    let url = headapi + 'v1/HrSensors/QueryPvtHrSensors ';
+    return getApiBasic(url, postdata);
+}

+ 0 - 8
pc/src/components/upHead.vue

@@ -1,10 +1,5 @@
 <template>
     <div>
-        <!--website:qjzpcd34v.hb-bkt.clouddn.com-->
-        <!--<br>-->
-        <!--ak: JvRT6F0pbWwfTwRZOeYCLcTFBwtE_E0CFp6DZklk-->
-        <!--<br>-->
-        <!--SK: vgYd-QjeAk9v5QrIU1z4427xJi_nao4LCuXgWfgJ-->
         <div class="upload">
             <el-upload
                     class="avatar-uploader"
@@ -33,9 +28,6 @@
                 // 这是七牛云空间的外链默认域名
                 qiniuaddr: 'qjzpcd34v.hb-bkt.clouddn.com'
             };
-        },
-        mounted() {
-
         },
         methods: {
             // 上传文件到七牛云

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

@@ -204,6 +204,14 @@ const routes = [
                     title: "心率设备",
                     clmid: "10",
                 }
+            }, {
+                path: '/heartEquipPerson',
+                name: 'heartEquipPerson',
+                component: () => import('@/views/heartEquipPerson.vue'),
+                meta: {
+                    title: "私有心率设备",
+                    clmid: "10",
+                }
             }, {
                 path: '/heartLog',
                 name: 'heartLog',

+ 2 - 0
pc/src/views/Main.vue

@@ -801,7 +801,9 @@
 
     .rtContext {
         width: 100%;
+        height: 100%;
         overflow: hidden;
+        overflow-y: hidden;
         display: block;
         margin: 0 auto;
         margin-top: 0px;

+ 89 - 2
pc/src/views/Member.vue

@@ -273,6 +273,19 @@
                                 ></el-option>
                             </el-select>
                         </el-form-item>
+                        <el-form-item label="头像" :required="true">
+                            <div class="upload">
+                                <el-upload
+                                        class="avatar-uploader"
+                                        :action=domain
+                                        :http-request=upqiniu
+                                        :show-file-list="false"
+                                        :before-upload="beforeUpload">
+                                    <img v-if="imageUrl" :src="imageUrl" class="avatar">
+                                    <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                                </el-upload>
+                            </div>
+                        </el-form-item>
                         <el-form-item label="出生年份" :required="true">
                             <el-date-picker
                                     v-model="form.birthday"
@@ -386,6 +399,10 @@
     export default {
         data() {
             return {
+                imageUrl: '',
+                token: {}, // 七牛云的上传地址,根据自己所在地区选择,我这里是华南区
+                domain: 'https://up-z1.qiniup.com', // 这是七牛云空间的外链默认域名
+                qiniuaddr: 'qjzpcd34v.hb-bkt.clouddn.com',
                 dialogVisible: false,//其他dialog
                 TakeVisible: false,//take dialog
                 dialogMemberVisible: false,//新增会员dialog
@@ -446,6 +463,7 @@
                     height: '',
                     weight: '',
                     staticHr: '',
+                    head: '',
                     birthday: '',
                     sex: 1,
                     vipType: 1,
@@ -474,6 +492,49 @@
             this.getTableQuery();
         },
         methods: {
+            // 上传文件到七牛云
+            upqiniu(req) {
+                let that = this;
+                const config = {
+                    headers: {'Content-Type': 'multipart/form-data'}
+                };
+                let filetype = '';
+                if (req.file.type === 'image/png') {
+                    filetype = 'png'
+                } else {
+                    filetype = 'jpg'
+                }
+                // 重命名要上传的文件
+                const keyname = 'GoAllOut' + new Date().valueOf() + Math.floor(Math.random() * 100) + '.' + filetype;
+                // 从后端获取上传凭证token
+                let param = {
+                    token: localStorage.token,
+                };
+                let postdata = qs.stringify(param);
+                this.axios.post('/api/v1/QiNiu/GetSimpleQiNiuToken', postdata).then(res => {
+                    const formdata = new FormData();
+                    formdata.append('file', req.file);
+                    formdata.append('token', res.data.QiNinToken);
+                    formdata.append('key', keyname);
+                    // 获取到凭证之后再将文件上传到七牛云空间
+                    this.axios.post(this.domain, formdata, config).then(res => {
+                        this.imageUrl = 'http://' + this.qiniuaddr + '/' + res.data.key
+                        this.form.head =  'http://' + this.qiniuaddr + '/' + keyname;
+                    })
+                })
+            },
+            // 验证文件合法性
+            beforeUpload(file) {
+                const isJPG = file.type === 'image/jpeg' || file.type === 'image/png';
+                const isLt2M = file.size / 1024 / 1024 < 2;
+                if (!isJPG) {
+                    this.$message.error('上传头像图片只能是 JPG 格式!')
+                }
+                if (!isLt2M) {
+                    this.$message.error('上传头像图片大小不能超过 2MB!')
+                }
+                return isJPG && isLt2M
+            },
             // 打开take绑定和拉取take数据
             addTake(row) {
                 let that = this;
@@ -538,6 +599,7 @@
                 this.form.phone = row.UserInfo.Phone;
                 this.form.name = row.UserInfo.Name;
                 this.form.memo = row.UserInfo.Memo;
+                this.imageUrl = row.UserInfo.Head;
                 this.form.height = row.UserInfo.Height;
                 this.form.weight = parseInt(row.UserInfo.Weight) / 10;
                 this.form.staticHr = row.UserInfo.StaticHr;
@@ -702,7 +764,6 @@
                         that.form.dialogValue.push(item.ClassId)
                     })
                 }
-                console.log(that.form.classlist);
                 this.dialogVisible = true;
                 this.dialogLessonTable = true;
             },
@@ -770,6 +831,7 @@
                     weight: that.form.weight,
                     staticHr: that.form.staticHr,
                     sex: that.form.sex,
+                    head: that.form.head,
                     birthday: nonTfmtDatetoLength(that.form.birthday, 10),
                 };
                 let postdata = qs.stringify(param);
@@ -1002,7 +1064,7 @@
             addMember() {
                 this.clearForm();
                 this.panelSelect();
-                this.dialogMemberVisible = true
+                this.dialogMemberVisible = true;
                 this.btnType = 0;
                 this.form.btnType = 0;
                 this.dialogTitle = '新增会员'
@@ -1070,6 +1132,8 @@
             clearForm() {
                 // clear
                 this.form.name = '';
+                this.form.head = '';
+                this.imageUrl = '';
                 this.form.phone = '';
                 this.form.memo = '';
                 this.form.normalhour = 0;
@@ -1317,9 +1381,32 @@
     .pull-left .el-input-number {
         width: 130px;
     }
+
     .cell img {
         overflow: hidden;
         display: block;
         margin: 0 auto;
     }
+
+    .el-date-editor.el-input__inner {
+        width: 156px;
+    }
+
+    .avatar-uploader {
+        border: 1px solid #ccc;
+        cursor: pointer;
+        border-radius: 5px;
+    }
+
+    /deep/ .el-upload {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+    /deep/ .el-upload img {
+        width: 70px;
+        height: 70px;
+        float: left;
+    }
 </style>

+ 67 - 44
pc/src/views/courseEdit.vue

@@ -53,7 +53,7 @@
                 <el-table-column
                         prop="head"
                         label="头像"
-                        width="140"
+                        width="90"
                         align="center"
                         sortable
                 >
@@ -82,7 +82,7 @@
                 <el-table-column
                         prop="Phone"
                         label="手机号"
-                        width="140"
+                        width="120"
                         sortable
                 >
                 </el-table-column>
@@ -107,6 +107,7 @@
                 <el-table-column
                         prop="RemainTotalhour"
                         label="剩余全部课时"
+                        width="140"
                         sortable
                 >
                 </el-table-column>
@@ -116,7 +117,10 @@
                         sortable
                 >
                     <template slot-scope="scope">
-                        <el-select v-model="scope.row.BindId" @change="bindSensorToUser(scope.row)" filterable
+                        <el-select v-model="scope.row.BindId"
+                                   @change="bindSensorToUser(scope.row)"
+                                   @focus="getSelectHrSensors(scope.row)"
+                                   filterable
                                    v-if="!scope.row.BindId" placeholder="请选心率带">
                             <el-option
                                     v-for="item in panel.bindList"
@@ -136,6 +140,7 @@
                 <el-table-column
                         prop="Status"
                         label="状态"
+                        width="140"
                         sortable
                 >
                     <template slot-scope="scope">
@@ -149,26 +154,29 @@
                         label="操作"
                 >
                     <template slot-scope="scope">
-                        <el-button type="primary" round v-if="scope.row.Status == 1  && FinishClass != 2" size="mini"
-                                   @click="pauseRow(scope.row,2)">
-                            预约未到
-                        </el-button>
-                        <el-button type="warning" round v-if="scope.row.Status == 2" size="mini"
-                                   @click="pauseRow(scope.row,1)">
-                            撤销
-                        </el-button>
-                        <el-button type="danger" round v-if="scope.row.Status == 3 && FinishClass != 2" size="mini"
-                                   @click="getClassOverDetailDel(scope.row)">
-                            删除
-                        </el-button>
-                        <!--已经上课,已绑心率带-->
-                        <!--{{scope.row.BindUserId}}-->
-                        <!--HrSubmitFlag 0 未提交 1提交-->
-                        <el-button type="warning" round v-if="scope.row.Status == 3 && FinishClass == 2 " size="mini"
-                                   :disabled="scope.row.HrSubmitFlag == 1"
-                                   @click="getClassDetailAndSnAdd(scope.row)">
-                            提交
-                        </el-button>
+                        <div v-if="scope.row.DpId <= 0">
+                            <el-button type="primary" round v-if="scope.row.Status == 1 " size="mini"
+                                       @click="pauseRow(scope.row,2)">
+                                预约未到
+                            </el-button>
+                            <el-button type="warning" round v-if="scope.row.Status == 2" size="mini"
+                                       @click="pauseRow(scope.row,1)">
+                                撤销
+                            </el-button>
+                            <el-button type="danger" round v-if="scope.row.Status == 3" size="mini"
+                                       @click="getClassOverDetailDel(scope.row)">
+                                删除
+                            </el-button>
+                            <em v-if="FinishClass != 3">
+                                <el-button type="warning" round
+                                           v-if="scope.row.Status == 1 || scope.row.Status == 3 && FinishClass == 2 "
+                                           size="mini"
+                                           :disabled="scope.row.HrSubmitFlag == 1"
+                                           @click="getClassDetailAndSnAdd(scope.row)">
+                                    提交
+                                </el-button>
+                            </em>
+                        </div>
                     </template>
                 </el-table-column>
             </el-table>
@@ -317,7 +325,7 @@
         },
         mounted() {
             this.getTableQuery();
-            this.getSelectHrSensors();
+            // this.getSelectHrSensors();
             this.FinishClass = this.$route.query.FinishClass;
             this.title = this.$route.query.ClassName + ' ' + this.$route.query.BeginStr + '-' + this.$route.query.EndStr;
         },
@@ -327,7 +335,7 @@
                 let that = this;
                 let obj = {};
                 // 未到用户不能绑心率带
-                if(row.Status == 2){
+                if (row.Status == 2) {
                     row.BindId = 0;
                     that.$message.error("会员未到不能绑定心率带");
                     return false
@@ -339,6 +347,7 @@
                 let oldSn = "";
                 let param = {
                     token: localStorage.token,
+                    shopId: localStorage.shopId,
                     cfId: row.CfId,
                     userId: row.UserId,
                     sn: obj.Sn,
@@ -356,7 +365,7 @@
                         // table 重载
                         that.getTableQuery();
                         // 重置心率带可选列表
-                        that.getSelectHrSensors();
+                        // that.getSelectHrSensors();
                     } else {
                         that.$message.error(json.Memo);
                     }
@@ -395,7 +404,7 @@
                             // table 重载
                             that.getTableQuery();
                             // 重置心率带可选列表
-                            that.getSelectHrSensors();
+                            // that.getSelectHrSensors();
                         } else {
                             that.$message.error(json.Memo);
                         }
@@ -494,24 +503,32 @@
                 // "weight":1000
                 let row;
                 let begin_time = parseInt(new Date().valueOf() / 1000);
+
+                // 过滤未到会员
+                let curPeolle = this.tableData.filter(item => {
+                    if (item.Status != 2) {
+                        return item
+                    }
+                });
+
+                console.log(curPeolle);
+
                 // 拼装上课人员信息
-                for (var i = 0; i < this.tableData.length; i++) {
-                    row = this.tableData[i];
+                for (var i = 0; i < curPeolle.length; i++) {
+                    row = curPeolle[i];
                     // 过滤预约未到
-                    if (row.Status != 2) {
-                        duRs[i] = {
-                            sn: row.Sn,
-                            group_no: 0,//0不分队 1蓝队 2红队 3黄队
-                            begin_time: begin_time,
-                            name: row.Name,
-                            head: row.Head,
-                            static_hr: row.StaticHr,
-                            sex: row.Sex,
-                            height: row.Height,
-                            age: row.Age,
-                            user_id: row.UserId,
-                            weight: row.Weight,
-                        }
+                    duRs[i] = {
+                        sn: row.Sn,
+                        group_no: 0,//0不分队 1蓝队 2红队 3黄队
+                        begin_time: begin_time,
+                        name: row.Name,
+                        head: row.Head,
+                        static_hr: row.StaticHr,
+                        sex: row.Sex,
+                        height: row.Height,
+                        age: row.Age,
+                        user_id: row.UserId,
+                        weight: row.Weight,
                     }
                 }
                 // 确认上课
@@ -726,11 +743,13 @@
                 })
             },
             // 获取心率带下拉菜单
-            getSelectHrSensors() {
+            getSelectHrSensors(row) {
                 let that = this;
                 that.loading = true;
                 let param = {
                     token: localStorage.token,
+                    shopId: localStorage.shopId,
+                    userId: row.UserId,
                 };
                 let postdata = qs.stringify(param);
                 SelectHrSensors(postdata).then(res => {
@@ -962,4 +981,8 @@
         text-overflow: ellipsis;
         float: left;
     }
+    .cell em {
+        margin-left: 5px;
+        margin-right: 5px;
+    }
 </style>

+ 10 - 2
pc/src/views/courses.vue

@@ -45,6 +45,7 @@
                         prop="BeginTime"
                         label="上课时间"
                         :formatter="filterFmtDate"
+                        width="180"
                 >
                 </el-table-column>
                 <el-table-column
@@ -60,24 +61,29 @@
                 <el-table-column
                         prop="ConsumeHour"
                         label="消耗课时"
+                        width="110"
                         sortable
                 >
                 </el-table-column>
                 <el-table-column
                         prop="OrderNum"
                         label="实际预约人数"
+                        width="130"
                         sortable
                 >
                 </el-table-column>
                 <el-table-column
                         prop="SvName"
                         label="区域"
+                        width="110"
                         sortable
                 >
                 </el-table-column>
                 <el-table-column
                         prop="FinishClass"
                         label="当前状态"
+                        width="110"
+
                         sortable
                 >
                     <template slot-scope="scope">
@@ -91,6 +97,8 @@
                 <el-table-column
                         prop="Status"
                         label="操作"
+                        width="160"
+
                 >
                     <template slot-scope="scope">
                         <!--<el-button type="primary" round size="mini" @click="checkClassOverPrepare(scope.row)">-->
@@ -113,7 +121,7 @@
                             编辑
                         </el-button>
                         <!--已完成才能看详情-->
-                        <el-button type="primary" round plain size="mini" v-if="scope.row.FinishClass == 4"
+                        <el-button type="primary" round plain size="mini" v-if="scope.row.FinishClass == 1 || scope.row.FinishClass == 4"
                                    @click="seeDetail(scope.row)"
                         >
                             详情
@@ -456,7 +464,7 @@
                 this.form.ClassName= row.ClassName;
                 this.form.BeginStr= row.BeginStr;
                 this.form.EndStr= row.EndStr;
-                this.form.EndStr= row.FinishClass;
+                this.form.FinishClass= row.FinishClass;
 
                 this.className = row.ClassName + ' ' + row.BeginStr + ' - ' + row.EndStr;
                 this.form.StdId = row.StdId;

+ 42 - 2
pc/src/views/heartEquip.vue

@@ -2,6 +2,10 @@
     <div class="context">
         <div class="panel">
             <h5>心率设备</h5>
+            <div class="likeTab">
+                <el-button type="primary" @click="goType('heartEquip')">共有心率设备</el-button>
+                <el-button type="" @click="goType('heartEquipPerson')">私有共有心率设备</el-button>
+            </div>
             <div class="panel-body">
                 <div class="panel_control">
                     <el-row :gutter="20">
@@ -60,6 +64,7 @@
                         prop="InVenueNo"
                         label="馆内编号"
                         align="center"
+                        width="90"
                 >
                 </el-table-column>
                 <el-table-column
@@ -93,6 +98,7 @@
                         prop="Status"
                         label="状态"
                         align="center"
+                        width="90"
                 >
                     <template slot-scope="scope">
                         <!--1:启用  8:暂停  9:删除-->
@@ -127,7 +133,6 @@
                     @current-change="pageChange"
             ></el-pagination>
         </div>
-
         <el-dialog :title="dialogTitle" :visible.sync="dialogMemberVisible" width="650px">
             <div class="dialogContent">
                 <div class="">
@@ -170,6 +175,7 @@
     export default {
         data() {
             return {
+                activeName: 'comm',
                 dialogVisible: false,//其他dialog
                 dialogMemberVisible: false,//新增心率设备dialog
                 dialogLesson: false,//课时调整
@@ -253,6 +259,17 @@
             this.getTableQuery();
         },
         methods: {
+            handleClick(tab, event) {
+                let that = this;
+
+                if (tab.name == "personal") {
+                    // 私有
+                    that.$router.push({path: '/heartEquipPerson'});
+                } else {
+                    // 公共
+                    that.$router.push({path: '/heartEquip'});
+                }
+            },
             // 设备回收
             takeBack(row) {
                 let that = this;
@@ -292,6 +309,9 @@
                 // 查看绑定记录
                 this.$router.push({path: '/bindRecord', query: {hrId: row.HrId}});
             },
+            goType(url) {
+                this.$router.push({path: '/' + url});
+            },
             // 编辑
             editList() {
                 let that = this;
@@ -571,7 +591,7 @@
             addMember() {
                 this.clearForm();
                 this.dialogMemberVisible = true;
-                this.btnType = 0;
+                this.form.btnType = 0;
                 this.dialogTitle = '新增心率设备'
             },
             // 删除
@@ -745,6 +765,26 @@
         float: right;
     }
 
+    .likeTab {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-top: 10px;
+        padding-bottom: 0;
+        border-bottom: 1px solid #ccc;
+        margin-bottom: 10px;
+    }
+
+    .likeTab button {
+        float: left;
+        border-radius: 0;
+    }
+
+    .likeTab button.pull-right {
+        float: right;
+    }
+
     .dialogTitle {
         width: 100%;
         overflow: hidden;

+ 858 - 0
pc/src/views/heartEquipPerson.vue

@@ -0,0 +1,858 @@
+<template>
+    <div class="context">
+        <div class="panel">
+            <h5>心率设备</h5>
+            <div class="likeTab">
+                <el-button type="" @click="goType('heartEquip')">共有心率设备</el-button>
+                <el-button type="primary" @click="goType('heartEquipPerson')">私有共有心率设备</el-button>
+            </div>
+            <div class="panel-body">
+                <div class="panel_control">
+                    <el-row :gutter="20">
+                        <el-col :span="4">
+                            <em>心率设备:</em>
+                            <el-input v-model="panel.str" placeholder="请输入编号" type="number"></el-input>
+                        </el-col>
+                        <el-col :span="5">
+                            <em>设备状态:</em>
+                            <!--status-->
+                            <el-select v-model="panel.status" placeholder="请选择">
+                                <el-option
+                                        v-for="item in panel.statusOptions"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value">
+                                </el-option>
+                            </el-select>
+                        </el-col>
+                        <el-col :span="4">
+                            <el-button size="" type="primary" @click="query" plain>查询</el-button>
+                        </el-col>
+                    </el-row>
+                </div>
+            </div>
+        </div>
+        <div class="change">
+            <el-button @click="addMember" type="primary">新增心率设备</el-button>
+            <el-button @click="editList">编辑心率设备</el-button>
+            <el-button @click="delList" type="danger">删除心率设备</el-button>
+        </div>
+        <div class="table">
+            <el-table
+                    :data="tableData"
+                    border
+                    is-horizontal-resize
+                    :default-sort="{prop: 'date', order: 'descending'}"
+                    element-loading-background="rgba(0, 0, 0, 0.8)"
+                    class=""
+                    @selection-change="handleSelectionChange" @current-change="clickChange"
+            >
+                >
+                <el-table-column label="选择" width="55">
+                    <template slot-scope="scope">
+                        <el-radio v-model="tableRadio" :label="scope.row"><i></i></el-radio>
+                    </template>
+                </el-table-column>
+                <!--<el-table-column-->
+                <!--type="index"-->
+                <!--label="序号"-->
+                <!--align="center"-->
+
+                <!--width="50">-->
+                <!--</el-table-column>-->
+                <el-table-column
+                        prop="Sn"
+                        label="序列号"
+                        align="InVenueNo"
+                >
+                </el-table-column>
+                <el-table-column
+                        prop="UserName"
+                        label="用户"
+                        align="center"
+                        sortable
+                >
+
+                    <template slot-scope="scope">
+                        {{scope.row.UserName}}
+                        <!--<el-select v-model="scope.row.BindUserId" @change="getRowTop(scope.row)" filterable v-if="scope.row.BindUserId">-->
+                        <!--<el-option-->
+                        <!--v-for="item in panel.options"-->
+                        <!--:key="item.value"-->
+                        <!--:label="item.label"-->
+                        <!--:value="item.value">-->
+                        <!--</el-option>-->
+                        <!--</el-select>-->
+
+                        <!--<el-button @click="takeBack(scope.row)" type="danger" v-if="!scope.row.BindUserId">{{scope.row.UserName}} 设备收回</el-button>-->
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="Status"
+                        label="状态"
+                        align="center"
+                        width="90"
+                >
+                    <template slot-scope="scope">
+                        <!--1:启用  8:暂停  9:删除-->
+                        <span v-if="scope.row.Status == 1" style="color: #67c23a">已启用</span>
+                        <span v-if="scope.row.Status == 8" style="color: #E6A23C">已暂停</span>
+                        <span v-if="scope.row.Status == 9" style="color: red">已删除</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        prop="id"
+                        label="操作"
+                >
+                    <template slot-scope="scope">
+                        <el-button type="success" v-if="scope.row.Status == 8" size="mini"
+                                   @click="pauseRow(scope.row,1)">
+                            启用
+                        </el-button>
+                        <el-button type="warning" v-if="scope.row.Status == 1" size="mini"
+                                   @click="pauseRow(scope.row,8)">
+                            暂停
+                        </el-button>
+
+                        <el-button type="text" @click="goPage(scope.row)">记录</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="dialogMemberVisible" width="650px">
+            <div class="dialogContent">
+                <div class="">
+                    <el-form ref="form" :model="form" label-width="160px">
+                        <el-form-item label="会员账号" :required="true">
+                            <!--userId-->
+                            <el-select v-model="form.userId" placeholder="请选择" :disabled ="form.btnType == 1">
+                                <el-option
+                                        v-for="item in form.userList"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="序列号" :required="true">
+                            <el-input v-model="form.sn"></el-input>
+                        </el-form-item>
+                    </el-form>
+                </div>
+            </div>
+            <div class="dialogFooter">
+                <el-button type="primary" size="small" v-if="form.btnType == 0" @click="confirmMember">确定</el-button>
+                <el-button type="primary" size="small" v-if="form.btnType == 1" @click="confirmEditMember">确定
+                </el-button>
+                <el-button size="small" @click="dialogMemberVisible = false">取消</el-button>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+    import Global from '../Global.js'
+    import {
+        testTable,
+        testSelect,
+        ShopManagerStatusEdit,
+        ClassDetailOne,
+        QueryPvtHrSensors,
+        AddPvtHrSensors,
+        HrSensorsStatusEdit,
+        EditHrSensors,
+        UnBindHrSensorsToUser,
+        VipUserSimpleQuery,
+    } from "../api/getApiRes";
+
+    let qs = require('qs');
+    export default {
+        data() {
+            return {
+                activeName: 'comm',
+                dialogVisible: false,//其他dialog
+                dialogMemberVisible: false,//新增心率设备dialog
+                dialogLesson: false,//课时调整
+                dialogGift: false,//赠送课时调整
+                dialogExpTime: false,//有效期调整
+                dialogLessonTable: false,//心率设备课程
+                dialogTitle: '新增心率设备',
+                dialogValue: [],
+                tableRadio: [],
+                // panel 配置项目
+                panel: {
+                    str: '',
+                    phone: '',
+                    compname: '',
+                    keyword: '',
+                    USERCODE: '',
+                    endType: '',
+                    taskstatus: 99,
+                    status: "",
+                    draw: 1,
+                    start: 0,
+                    recordsTotal: 0,
+                    tableData: [],
+                    allTableData: [],
+                    limit: '10',
+                    multipleSort: false,
+                    loading: false,
+                    fileList: [],
+                    multipleSelection: [],
+                    detectedmac: '',
+                    statusOptions: [
+                        {value: "", label: '全部'},
+                        {value: 1, label: '启用'},
+                        {value: 8, label: '暂停'},
+                        {value: 9, label: '删除'},
+                    ], options: [
+                        {value: 99, label: '全部'},
+                        {value: 1, label: '进行中'},
+                        {value: 2, label: '已完成'},
+                    ],
+                    endTypeOptions: [
+                        {value: 99, label: '全部'},
+                        {value: 30, label: '近一个月'},
+                        {value: 7, label: '近一周'},
+                        {value: 1, label: '当日'},
+                    ],
+                    time1: globalBt(),
+                },
+                multipleSelection: [],
+                pageination: {
+                    pageItem: 100,
+                    pageoptions: pageOptions(),
+                    total: 100,
+                    pageIndex: 1,
+                },
+                form: {
+                    name: '',
+                    userCode: '',
+                    sn: '',
+                    venueNo: '',
+                    shopId: '',
+                    teacherId: 0,
+                    memberType: 1,
+                    lesson: 1,
+                    gift: 1,
+                    btnType: 0,//0新建,1编辑编辑
+                    memo: '',
+                    phone: '',
+                    expTime: '',
+                    userId: '',
+                    userList: [],//穿梭待选
+                    dialogdata: [],//穿梭待选
+                    dialogValue: [],//穿梭已选
+                },
+                memberTypes: [
+                    {value: 1, label: '年心率设备'},
+                    {value: 2, label: '充值心率设备'},
+                ],
+                tableData: []
+            }
+        },
+        mounted() {
+            this.vipSelect();
+            this.getTableQuery();
+        },
+        methods: {
+            vipSelect() {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                };
+                let postdata = qs.stringify(param);
+                VipUserSimpleQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.form.userId = '';
+                        that.form.userList = turnResToOptionBySimViper(json.Rs);
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            handleClick(tab, event) {
+                let that = this;
+
+                if (tab.name == "personal") {
+                    // 私有
+                    that.$router.push({path: '/heartEquipPerson'});
+                } else {
+                    // 公共
+                    that.$router.push({path: '/heartEquip'});
+                }
+            },
+            // 设备回收
+            takeBack(row) {
+                let that = this;
+                this.$confirm('是否回收用户' + row.name + '的心率设备?', '回收操作', {
+                    confirmButtonText: '确定',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(() => {
+                    let param = {
+                        token: localStorage.token,
+                        Id: row.Id,
+                        status: 0,
+                    };
+                    let postdata = qs.stringify(param);
+                    UnBindHrSensorsToUser(postdata).then(res => {
+                        let json = res;
+                        if (json.Code == 0) {
+                            that.$message({
+                                showClose: true,
+                                message: row.name + '回收成功!',
+                                type: 'success'
+                            });
+                            // table 重载
+                            that.getTableQuery();
+                        } else {
+                            that.$message.error(json.Memo);
+                        }
+                    })
+                }).catch(() => {
+                    this.$message({
+                        type: 'info',
+                        message: '已取消回收'
+                    });
+                });
+            },
+            goPage(row) {
+                // 查看绑定记录
+                this.$router.push({path: '/bindRecord', query: {hrId: row.HrId}});
+            },
+            goType(url) {
+                this.$router.push({path: '/' + url});
+            },
+            // 编辑
+            editList() {
+                let that = this;
+                this.clearForm();
+                console.log(this.tableRadio);
+                if (this.tableRadio.length == 0) {
+                    this.$message.error("请先选中一条记录");
+                    return false
+                }
+                let row = this.tableRadio;
+                this.form.shopid = row.ShopId;
+                this.form.userId = row.UserId;
+                this.form.name = row.Name;
+                this.form.userCode = row.Usercode;
+                this.form.password = '';
+                this.form.hrId = row.HrId;
+                this.form.sn = row.Sn;
+                this.form.venueNo = row.InVenueNo;
+                this.dialogVisible = true;
+                this.dialogTitle = '编辑心率设备';
+                this.form.btnType = 1;
+                this.dialogMemberVisible = true
+            },
+            clickChange(item) {
+                this.tableRadio = item
+            },
+            // 选择课程后,获取当前课程的建议上课人数和课时消耗
+            getRowTop(row) {
+                let that = this;
+                console.log(row);
+                let param = {
+                    token: localStorage.token,
+                    classId: row.ClassId,
+                };
+                let postdata = qs.stringify(param);
+                ClassDetailOne(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        row.TopLimit = json.Rs.TopLimit;
+                        row.ConsumeHour = json.Rs.ConsumeHour;
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 编辑
+            editMember(row) {
+                this.clearForm();
+                this.form.name = row.Name;
+                this.form.phone = row.Phone;
+                this.form.shopId = row.ShopId;
+                this.form.teacherId = row.TeacherId;
+                this.form.btnType = 1;
+                this.dialogMemberVisible = true
+                this.dialogTitle = '编辑心率设备'
+            },
+            // 禁用
+            pauseRow(row, status) {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    hrId: row.HrId,
+                    status: status,//1:启用 8:暂停 9:删除
+                };
+                let postdata = qs.stringify(param);
+                HrSensorsStatusEdit(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        that.$message({
+                            showClose: true,
+                            message: '执行成功!',
+                            type: 'success'
+                        });
+                        // table 重载
+                        that.getTableQuery();
+                        that.vipSelect();
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // pauseRow(row) {
+            //     let that = this;
+            //     this.$confirm('是否禁用心率设备' + row.Sn + '?', '禁用操作', {
+            //         confirmButtonText: '确定',
+            //         cancelButtonText: '取消',
+            //         type: 'warning'
+            //     }).then(() => {
+            //         let param = {
+            //             token: localStorage.token,
+            //             shopId : localStorage.token,
+            //             status: 8,
+            //         };
+            //         let postdata = qs.stringify(param);
+            //         ShopVenueEquipEditStatus(postdata).then(res => {
+            //             let json = res;
+            //             if (json.Code == 0) {
+            //                 that.$message({
+            //                     showClose: true,
+            //                     message: row.name + '禁用成功!',
+            //                     type: 'success'
+            //                 });
+            //                 // table 重载
+            //                 that.getTableQuery();
+            //             } else {
+            //                 that.$message.error(json.Memo);
+            //             }
+            //         })
+            //     }).catch(() => {
+            //         this.$message({
+            //             type: 'info',
+            //             message: '已取消禁用'
+            //         });
+            //     });
+            // },
+            // 启用
+            runRow(row) {
+                let that = this;
+                this.$confirm('是否启用心率设备' + row.Sn + '?', '启用操作', {
+                    confirmButtonText: '确定',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(() => {
+                    let param = {
+                        token: localStorage.token,
+                        Id: row.Id,
+                        status: 1,
+                    };
+                    let postdata = qs.stringify(param);
+                    testTable(postdata).then(res => {
+                        let json = res;
+                        if (json.Code == 0) {
+                            that.$message({
+                                showClose: true,
+                                message: row.name + '启用成功!',
+                                type: 'success'
+                            });
+                            // table 重载
+                            that.getTableQuery();
+                        } else {
+                            that.$message.error(json.Memo);
+                        }
+                    })
+                }).catch(() => {
+                    this.$message({
+                        type: 'info',
+                        message: '已取消启用'
+                    });
+                });
+            },
+            // 关闭所有
+            allDialogClose() {
+                this.dialogVisible = false;
+                this.dialogGift = false;
+                this.dialogLesson = false;
+                this.dialogExpTime = false;
+                this.dialogLessonTable = false;
+            },
+            // 确认提交新增心率设备
+            confirmMember() {
+                let that = this;
+                // checkNum
+                if (!that.form.sn) {
+                    this.$message.error('错了哦,编号不能为空');
+                    return false
+                }
+                if (that.form.sn.length > 20) {
+                    this.$message.error('错了哦,编号不能超过20个字符');
+                    return false
+                }
+                let param = {
+                    token: localStorage.token,
+                    shopId: localStorage.shopId,
+                    sn: that.form.sn,
+                    userId: that.form.userId,
+                };
+                let postdata = qs.stringify(param);
+                AddPvtHrSensors(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        // 关闭弹窗
+                        that.dialogMemberVisible = false;
+                        // 重载列表
+                        that.getTableQuery();
+                        that.$message({
+                            showClose: true,
+                            message: '心率设备添加成功!',
+                            type: 'success'
+                        });
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            confirmEditMember() {
+                let that = this;
+                // checkNum
+                if (!that.form.sn) {
+                    this.$message.error('错了哦,编号不能为空');
+                    return false
+                }
+                if (that.form.sn.length > 20) {
+                    this.$message.error('错了哦,编号不能超过20个字符');
+                    return false
+                }
+
+                let param = {
+                    token: localStorage.token,
+                    shopId: localStorage.shopId,
+                    hrId: that.form.hrId,
+                    sn: that.form.sn,
+                    venueNo: 0,
+                };
+                let postdata = qs.stringify(param);
+                EditHrSensors(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        // 关闭弹窗
+                        that.dialogMemberVisible = false;
+                        // 重载列表
+                        that.getTableQuery();
+                        that.$message({
+                            showClose: true,
+                            message: '心率设备信息编辑成功!',
+                            type: 'success'
+                        });
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 确认提交课时
+            confirmLesson() {
+                let that = this;
+                // checkNum
+
+                let param = {
+                    token: localStorage.token,
+                    userCode: that.form.userCode,
+                    lesson: that.form.lesson,
+                };
+                let postdata = qs.stringify(param);
+                testSelect(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        // 关闭弹窗
+                        that.dialogVisible = false;
+                        // 重载列表
+                        that.getTableQuery();
+                        that.$message({
+                            showClose: true,
+                            message: '课时调整成功!',
+                            type: 'success'
+                        });
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
+            },
+            // 新增心率设备
+            addMember() {
+                this.clearForm();
+                this.dialogMemberVisible = true;
+                this.form.btnType = 0;
+                this.dialogTitle = '新增心率设备'
+            },
+            // 删除
+            delList() {
+                let that = this;
+                if (this.tableRadio.length == 0) {
+                    this.$message.error("请先选中一条记录");
+                    return false
+                }
+                let hrId = this.tableRadio.HrId;
+
+                let param = {
+                    token: localStorage.token,
+                    hrId: hrId,
+                    status: 9,//1:启用,8:暂停,9:删除
+                };
+                let postdata = qs.stringify(param);
+
+                this.$confirm('此操作将永久删除该心率设备, 是否继续?', '提示', {
+                    confirmButtonText: '确定',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(() => {
+                    HrSensorsStatusEdit(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: '已取消删除'
+                    });
+                });
+            },
+
+            handleSelectionChange(val) {
+                this.multipleSelection = val;
+            },
+            // 查询按钮
+            query() {
+                this.getTableQuery();
+                this.$message.success('查询完毕');
+            },
+            clearForm() {
+                // clear
+                this.form.name = '';
+                this.form.sn = '';
+                this.form.venueNo = '';
+                this.form.phone = '';
+                this.form.userCode = '';
+                this.form.shopId = '';
+            },
+            // 页面数据查询
+            getTableQuery() {
+                let that = this;
+                that.loading = true;
+                let param = {
+                    token: localStorage.token,
+                    str: this.panel.str,//
+                    status: this.panel.status,//
+                    shopId: localStorage.shopId,//
+                };
+                let postdata = qs.stringify(param);
+                QueryPvtHrSensors(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();
+            },
+            // 自动排序
+            sortChange(params) {
+                console.log(params)
+            },
+        }
+        ,
+        watch: {
+            $route(to) {
+                if (to.name == 'heartEquipPerson') {
+                    if (this.$route.query.page == 'second') {
+                        this.getTableQuery();
+                        this.vipSelect();
+                    }
+                }
+
+            }
+            ,
+        }
+    }
+</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;
+    }
+
+    .likeTab {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        padding-top: 10px;
+        padding-bottom: 0;
+        border-bottom: 1px solid #ccc;
+        margin-bottom: 10px;
+    }
+
+    .likeTab button {
+        float: left;
+        border-radius: 0;
+    }
+
+    .likeTab button.pull-right {
+        float: right;
+    }
+
+    .dialogTitle {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        color: #000000;
+        font-size: 18px;
+        text-align: center;
+    }
+
+    .dialogTitle em {
+        float: none;
+        font-style: normal;
+        color: #3799FF;
+        margin: 0;
+    }
+
+    /deep/ .el-transfer-panel__item .el-checkbox__input {
+        left: 40px;
+    }
+
+    .dialogFooter {
+        width: 90%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 10px;
+    }
+
+    .dialogFooter button {
+        float: right;
+        margin-left: 10px;
+    }
+
+    .dialogContent {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .dialogContent .pull-left {
+        width: 30%;
+        float: left;
+    }
+
+    .dialogContent .pull-right {
+        width: 70%;
+        float: right;
+    }
+    /deep/ .el-dialog .el-select {
+        width: 100%;
+    }
+</style>

+ 9 - 1
pc/src/views/record.vue

@@ -68,17 +68,18 @@
             type="index"
             label="序号"
             align="center"
-
             width="50">
         </el-table-column>
         <el-table-column
             prop="UserName"
             label="会员名"
+            width="90"
         >
         </el-table-column>
         <el-table-column
             prop="Phone"
             label="手机号"
+            width="110"
             sortable
         >
         </el-table-column>
@@ -119,6 +120,7 @@
         <el-table-column
             prop="Status"
             label="状态"
+            width="110"
             sortable
         >
           <template slot-scope="scope">
@@ -499,6 +501,9 @@ export default {
   float: left;
   color: #000;
 }
+.el-col-7 {
+    width: 25%;
+}
 /*ipad only*/
 @media only screen and (max-width: 1366px) {
   .panel-body {
@@ -511,6 +516,9 @@ export default {
    float: right;
    margin-top: 25px;
  }
+    .el-col-7 {
+        width: 29%;
+    }
 }
 
 </style>

+ 1 - 0
pc/vue.config.js

@@ -1,6 +1,7 @@
 module.exports = {
     lintOnSave: false,
     devServer: {
+        port: 8084, // 端口
         proxy: {
             '/api': {
                 target: 'http://192.168.0.3:19095/',

+ 168 - 135
tv/.idea/workspace.xml

@@ -23,32 +23,32 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="c813a37b-038b-4bb1-a925-c03a432a7638" name="Default Changelist" comment="">
-      <change afterPath="$PROJECT_DIR$/../pc/src/components/upHead.vue" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../pc/src/server/app.js" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../pc/src/server/config.js" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/api/Navs.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/api/Navs.js" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../pc/src/views/heartEquipPerson.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/../.gitignore" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../pc/src/Global.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/Global.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/api/getApiRes.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/api/getApiRes.js" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/assets/css/panel.css" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/assets/css/panel.css" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/components/Navside.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/components/Navside.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../pc/src/components/upHead.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/components/upHead.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/router/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/router/index.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../pc/src/views/Main.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/Main.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/views/Member.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/Member.vue" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/views/Test.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/Test.vue" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/views/bindRecord.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/bindRecord.vue" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/views/classInfoDetail.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/classInfoDetail.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/views/courseEdit.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/courseEdit.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/views/courses.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/courses.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../pc/src/views/heartEquip.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/heartEquip.vue" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/views/heartLog.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/heartLog.vue" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../pc/src/views/region.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/region.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../pc/src/views/record.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/src/views/record.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../pc/vue.config.js" beforeDir="false" afterPath="$PROJECT_DIR$/../pc/vue.config.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/api/Navs.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/Navs.js" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/components/Headside.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/Headside.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/views/Index.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/Index.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/views/Main.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/Main.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/views/Rank.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/Rank.vue" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/views/Wait.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/Wait.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/views/pk.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/pk.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/vue.config.js" beforeDir="false" afterPath="$PROJECT_DIR$/vue.config.js" afterDir="false" />
     </list>
     <ignored path="$PROJECT_DIR$/.tmp/" />
     <ignored path="$PROJECT_DIR$/temp/" />
     <ignored path="$PROJECT_DIR$/tmp/" />
+    <ignored mask="*.wgt" />
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -56,21 +56,64 @@
     <option name="LAST_RESOLUTION" value="IGNORE" />
   </component>
   <component name="FileEditorManager">
-    <leaf>
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="375">
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/views/Wait.vue">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="420">
-              <caret line="20" column="22" lean-forward="true" selection-start-line="20" selection-start-column="22" selection-end-line="20" selection-end-column="22" />
+            <state relative-caret-position="527">
+              <caret line="63" column="56" selection-start-line="63" selection-start-column="56" selection-end-line="63" selection-end-column="56" />
+              <folding>
+                <element signature="n#style#0;n#s#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#s#0;n#!!top" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/views/Rank.vue">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="-377">
+              <caret line="61" selection-start-line="61" selection-end-line="61" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/vue.config.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="546">
+              <caret line="32" column="26" selection-start-line="32" selection-start-column="26" selection-end-line="32" selection-end-column="26" />
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/src/components/Headside.vue">
+        <entry file="file://$PROJECT_DIR$/src/views/Index.vue">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="389">
+              <caret line="97" column="35" selection-start-line="97" selection-start-column="35" selection-end-line="97" selection-end-column="35" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/api/getApiRes.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="432">
+              <caret line="104" selection-start-line="104" selection-end-line="104" selection-end-column="14" />
+              <folding>
+                <element signature="e#0#26#0" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/views/Main.vue">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="265">
-              <caret line="36" column="40" selection-start-line="36" selection-start-column="40" selection-end-line="36" selection-end-column="40" />
+            <state relative-caret-position="189">
+              <caret line="322" column="55" lean-forward="true" selection-start-line="322" selection-start-column="55" selection-end-line="322" selection-end-column="55" />
             </state>
           </provider>
         </entry>
@@ -89,36 +132,36 @@
   </component>
   <component name="FindInProjectRecents">
     <findStrings>
-      <find>sta</find>
-      <find>getRecordBreak</find>
-      <find>getClassStat</find>
-      <find>JSON.stringify(e).uuid</find>
-      <find>ClassUserRank</find>
-      <find>ClassStatQuery</find>
-      <find>999</find>
-      <find>push</find>
-      <find>.push</find>
-      <find>json.dp</find>
-      <find>wait</find>
-      <find>timer2</find>
-      <find>OpenEgg</find>
-      <find>createEgg</find>
       <find>课程管理</find>
       <find>mymove</find>
       <find>timer</find>
-      <find>curgetClassStat</find>
       <find>trueDate</find>
       <find>that.autoplayStatus = true;</find>
       <find>curin</find>
       <find>transition</find>
       <find>clearInterval</find>
       <find>curIndex</find>
-      <find>recordMain</find>
       <find>getcurIndex</find>
       <find>bottom</find>
       <find>fmtNum</find>
       <find>console.log(&quot;ClassOn:&quot; + json.ClassOn);</find>
       <find>el-fade-in-linear</find>
+      <find>.title</find>
+      <find>recordMain h5</find>
+      <find>loca</find>
+      <find>recordMain</find>
+      <find>getClassUserRank</find>
+      <find>千卡</find>
+      <find>ClassStatQuery</find>
+      <find>curgetClassStat</find>
+      <find>xiakele</find>
+      <find>centerLi</find>
+      <find>.three .topLi</find>
+      <find>.max</find>
+      <find>egg</find>
+      <find>xiakele</find>
+      <find>createEgg</find>
+      <find>/bpi</find>
     </findStrings>
     <replaceStrings>
       <replace>0.2rem</replace>
@@ -130,7 +173,11 @@
       <replace>waitTimer</replace>
       <replace>rankTimer</replace>
       <replace>el-zoom-in-top</replace>
+      <replace>http://cal.beswell.com:85/</replace>
     </replaceStrings>
+    <dirStrings>
+      <dir>D:\wwwroot\flyLong\tv\src</dir>
+    </dirStrings>
   </component>
   <component name="Git.Settings">
     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
@@ -156,16 +203,16 @@
         <option value="$PROJECT_DIR$/src/Global.js" />
         <option value="$PROJECT_DIR$/src/api/getApiRes.js" />
         <option value="$PROJECT_DIR$/src/router/index.js" />
-        <option value="$PROJECT_DIR$/src/views/pk.vue" />
         <option value="$PROJECT_DIR$/src/assets/css/bg.css" />
-        <option value="$PROJECT_DIR$/vue.config.js" />
-        <option value="$PROJECT_DIR$/src/views/Index.vue" />
-        <option value="$PROJECT_DIR$/src/views/Rank.vue" />
         <option value="$PROJECT_DIR$/src/components/upimg.vue" />
         <option value="$PROJECT_DIR$/src/api/Navs.js" />
+        <option value="$PROJECT_DIR$/src/components/Headside.vue" />
+        <option value="$PROJECT_DIR$/src/views/pk.vue" />
+        <option value="$PROJECT_DIR$/src/views/Rank.vue" />
         <option value="$PROJECT_DIR$/src/views/Wait.vue" />
         <option value="$PROJECT_DIR$/src/views/Main.vue" />
-        <option value="$PROJECT_DIR$/src/components/Headside.vue" />
+        <option value="$PROJECT_DIR$/vue.config.js" />
+        <option value="$PROJECT_DIR$/src/views/Index.vue" />
       </list>
     </option>
   </component>
@@ -175,10 +222,11 @@
     <other-services-enabled>true</other-services-enabled>
     <auto-save>true</auto-save>
   </component>
-  <component name="ProjectFrameBounds">
-    <option name="x" value="-2567" />
+  <component name="ProjectFrameBounds" extendedState="6">
+    <option name="x" value="-2568" />
+    <option name="y" value="-8" />
     <option name="width" value="1294" />
-    <option name="height" value="1379" />
+    <option name="height" value="696" />
   </component>
   <component name="ProjectId" id="1jXXjXdwK5v7WohMBoZDModntXR" />
   <component name="ProjectLevelVcsManager" settingsEditedManually="true">
@@ -186,47 +234,22 @@
     <ConfirmationsSetting value="2" id="Add" />
   </component>
   <component name="ProjectView">
-    <navigator proportions="" version="1">
+    <navigator currentView="Scope" currentSubView="Scope 'Project Files'; set:Project Files; class com.intellij.psi.search.scope.ProjectFilesScope" proportions="" version="1">
       <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
-      <pane id="Scope" />
-      <pane id="ProjectPane">
-        <subPane>
+      <pane id="ProjectPane" />
+      <pane id="Scope">
+        <subPane subId="Scope 'Project Files'; set:Project Files; class com.intellij.psi.search.scope.ProjectFilesScope">
           <expand>
             <path>
-              <item name="tv" type="b2602c69:ProjectViewProjectNode" />
-              <item name="tv" type="462c0819:PsiDirectoryNode" />
+              <item name="tv" type="3d21c010:ScopeViewTreeModel$ProjectNode" />
+              <item name="" type="442cc68d:ScopeViewTreeModel$RootNode" />
             </path>
             <path>
-              <item name="tv" type="b2602c69:ProjectViewProjectNode" />
-              <item name="tv" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="tv" type="b2602c69:ProjectViewProjectNode" />
-              <item name="tv" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="components" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="tv" type="b2602c69:ProjectViewProjectNode" />
-              <item name="tv" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="static" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="tv" type="b2602c69:ProjectViewProjectNode" />
-              <item name="tv" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="static" type="462c0819:PsiDirectoryNode" />
-              <item name="img" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="tv" type="b2602c69:ProjectViewProjectNode" />
-              <item name="tv" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="views" type="462c0819:PsiDirectoryNode" />
+              <item name="tv" type="3d21c010:ScopeViewTreeModel$ProjectNode" />
+              <item name="" type="442cc68d:ScopeViewTreeModel$RootNode" />
+              <item name="src" type="9f88c78c:ScopeViewTreeModel$FileNode" />
             </path>
           </expand>
           <select />
@@ -332,7 +355,8 @@
       <workItem from="1605406240238" duration="51039000" />
       <workItem from="1605668164423" duration="15041000" />
       <workItem from="1605747566783" duration="13000" />
-      <workItem from="1605775278675" duration="44441000" />
+      <workItem from="1605775278675" duration="48765000" />
+      <workItem from="1606196990553" duration="11351000" />
     </task>
     <task id="LOCAL-00001" summary="test web">
       <created>1605431368250</created>
@@ -425,24 +449,37 @@
       <option name="project" value="LOCAL" />
       <updated>1605960709780</updated>
     </task>
-    <option name="localTasksCounter" value="14" />
+    <task id="LOCAL-00014" summary="test">
+      <created>1606124142004</created>
+      <option name="number" value="00014" />
+      <option name="presentableId" value="LOCAL-00014" />
+      <option name="project" value="LOCAL" />
+      <updated>1606124142004</updated>
+    </task>
+    <task id="LOCAL-00015" summary="test">
+      <created>1606125800099</created>
+      <option name="number" value="00015" />
+      <option name="presentableId" value="LOCAL-00015" />
+      <option name="project" value="LOCAL" />
+      <updated>1606125800099</updated>
+    </task>
+    <option name="localTasksCounter" value="16" />
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="274533000" />
+    <option name="totallyTimeSpent" value="290208000" />
   </component>
   <component name="ToolWindowManager">
-    <frame x="-2567" y="0" width="1294" height="1379" extended-state="0" />
+    <frame x="-2568" y="-8" width="2576" height="1395" extended-state="6" />
     <editor active="true" />
     <layout>
-      <window_info content_ui="combo" id="Project" order="0" weight="0.29641694" />
+      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.14393939" />
       <window_info id="Structure" order="1" side_tool="true" weight="0.24973656" />
       <window_info id="Favorites" order="2" side_tool="true" weight="0.32982087" />
       <window_info id="npm" order="3" side_tool="true" />
-      <window_info anchor="bottom" id="TypeScript" weight="0.3293718" />
       <window_info anchor="bottom" id="Message" order="0" />
       <window_info anchor="bottom" id="Find" order="1" weight="0.32687446" />
-      <window_info anchor="bottom" id="Run" order="2" sideWeight="0.49920255" weight="0.31086773" />
+      <window_info anchor="bottom" id="Run" order="2" sideWeight="0.49920255" visible="true" weight="0.31508005" />
       <window_info anchor="bottom" id="Debug" order="3" weight="0.21468298" />
       <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
       <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
@@ -452,6 +489,7 @@
       <window_info anchor="bottom" id="Version Control" order="9" weight="0.3285594" />
       <window_info anchor="bottom" id="Terminal" order="10" weight="0.17487267" />
       <window_info anchor="bottom" id="Database Changes" order="11" />
+      <window_info anchor="bottom" id="TypeScript" order="12" weight="0.3293718" />
       <window_info anchor="right" id="Commander" order="0" weight="0.4" />
       <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
       <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
@@ -502,6 +540,8 @@
     </option>
   </component>
   <component name="VcsManagerConfiguration">
+    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="CHECK_NEW_TODO" value="false" />
     <MESSAGE value="test web" />
     <MESSAGE value="1. new bg&#10;2.class finish api used" />
     <MESSAGE value="sum text center" />
@@ -512,9 +552,9 @@
     <MESSAGE value="auto upload" />
     <MESSAGE value="1.原来的排名页面改为等待页面&#10;2.等待页面按照开课类型跳转不同的课程页面&#10;3.团课结束后跳转专属的排名页面&#10;4.排名页面的渲染和1分钟后跳入等待页面" />
     <MESSAGE value="more and more" />
-    <MESSAGE value="test" />
     <MESSAGE value="获取设备的uuid" />
-    <option name="LAST_COMMIT_MESSAGE" value="获取设备的uuid" />
+    <MESSAGE value="test" />
+    <option name="LAST_COMMIT_MESSAGE" value="test" />
   </component>
   <component name="WindowStateProjectService">
     <state x="-1830" y="274" width="1099" height="859" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1604022799787">
@@ -675,13 +715,6 @@
         <state relative-caret-position="-630" />
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/views/pk.vue">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="509">
-          <caret line="321" selection-start-line="321" selection-end-line="321" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/router/index.js">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="533">
@@ -720,89 +753,89 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/api/getApiRes.js">
+    <entry file="file://$PROJECT_DIR$/src/components/upimg.vue">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="359">
-          <caret line="46" column="39" selection-start-line="46" selection-start-column="25" selection-end-line="46" selection-end-column="39" />
-          <folding>
-            <element signature="e#0#26#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="399">
+          <caret line="19" column="8" lean-forward="true" selection-end-line="20" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/vue.config.js">
+    <entry file="file://$USER_HOME$/AppData/Local/Temp/360zip$Temp/360$0/index.ts" />
+    <entry file="file://$USER_HOME$/AppData/Local/Temp/360zip$Temp/360$1/image.ts" />
+    <entry file="file://$PROJECT_DIR$/src/api/Navs.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="378">
-          <caret line="18" column="18" selection-start-line="18" selection-start-column="18" selection-end-line="18" selection-end-column="18" />
+        <state relative-caret-position="359">
+          <caret line="22" column="24" selection-start-line="22" selection-start-column="20" selection-end-line="22" selection-end-column="24" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/views/Index.vue">
+    <entry file="file://$PROJECT_DIR$/src/Global.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="594">
-          <caret line="63" column="53" selection-start-line="63" selection-start-column="39" selection-end-line="63" selection-end-column="53" />
+        <state relative-caret-position="480">
+          <caret line="68" column="21" lean-forward="true" selection-start-line="64" selection-start-column="1" selection-end-line="68" selection-end-column="21" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/views/Rank.vue">
+    <entry file="file://$PROJECT_DIR$/src/components/Headside.vue">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="177">
-          <caret line="55" lean-forward="true" selection-start-line="55" selection-end-line="55" />
+        <state relative-caret-position="433">
+          <caret line="35" column="34" lean-forward="true" selection-start-line="35" selection-start-column="34" selection-end-line="35" selection-end-column="34" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/components/upimg.vue">
+    <entry file="file://$PROJECT_DIR$/src/views/pk.vue">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="399">
-          <caret line="19" column="8" lean-forward="true" selection-end-line="20" />
+        <state relative-caret-position="530">
+          <caret line="151" column="10" lean-forward="true" selection-start-line="151" selection-start-column="10" selection-end-line="151" selection-end-column="10" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$USER_HOME$/AppData/Local/Temp/360zip$Temp/360$0/index.ts">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-252" />
-      </provider>
-    </entry>
-    <entry file="file://$USER_HOME$/AppData/Local/Temp/360zip$Temp/360$1/image.ts">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-3276" />
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/api/Navs.js">
+    <entry file="file://$PROJECT_DIR$/src/views/Rank.vue">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="359">
-          <caret line="22" column="24" selection-start-line="22" selection-start-column="20" selection-end-line="22" selection-end-column="24" />
+        <state relative-caret-position="-377">
+          <caret line="61" selection-start-line="61" selection-end-line="61" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/src/views/Wait.vue">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="420">
-          <caret line="20" column="22" lean-forward="true" selection-start-line="20" selection-start-column="22" selection-end-line="20" selection-end-column="22" />
+        <state relative-caret-position="527">
+          <caret line="63" column="56" selection-start-line="63" selection-start-column="56" selection-end-line="63" selection-end-column="56" />
+          <folding>
+            <element signature="n#style#0;n#s#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#s#0;n#!!top" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/Global.js">
+    <entry file="file://$PROJECT_DIR$/src/views/Main.vue">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="480">
-          <caret line="68" column="21" lean-forward="true" selection-start-line="64" selection-start-column="1" selection-end-line="68" selection-end-column="21" />
+        <state relative-caret-position="189">
+          <caret line="322" column="55" lean-forward="true" selection-start-line="322" selection-start-column="55" selection-end-line="322" selection-end-column="55" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/views/Main.vue">
+    <entry file="file://$PROJECT_DIR$/src/api/getApiRes.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="332">
-          <caret line="379" column="30" lean-forward="true" selection-start-line="379" selection-start-column="30" selection-end-line="379" selection-end-column="30" />
+        <state relative-caret-position="432">
+          <caret line="104" selection-start-line="104" selection-end-line="104" selection-end-column="14" />
           <folding>
-            <element signature="e#5168#5212#0" expanded="true" />
+            <element signature="e#0#26#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/components/Headside.vue">
+    <entry file="file://$PROJECT_DIR$/vue.config.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="546">
+          <caret line="32" column="26" selection-start-line="32" selection-start-column="26" selection-end-line="32" selection-end-column="26" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/views/Index.vue">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="265">
-          <caret line="36" column="40" selection-start-line="36" selection-start-column="40" selection-end-line="36" selection-end-column="40" />
+        <state relative-caret-position="389">
+          <caret line="97" column="35" selection-start-line="97" selection-start-column="35" selection-end-line="97" selection-end-column="35" />
         </state>
       </provider>
     </entry>

+ 0 - 3
tv/src/components/Headside.vue

@@ -28,13 +28,11 @@
         },
         mounted() {
             this.nowtimer = setInterval(() => {
-                console.time('计时器1');
                 let date = new Date();
                 let h = date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':';
                 let m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes() + ':';
                 let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
                 this.nowTime =  h + m + s;
-                console.timeEnd('计时器1');
                 this.nowDayFunc();
             }, 1000);
             this.getCurVersion();
@@ -43,7 +41,6 @@
             }
         },
         beforeDestroy() {
-            console.log(123);
             clearInterval(this.timer);
         },
         methods: {

+ 4 - 11
tv/src/views/Index.vue

@@ -52,12 +52,9 @@
                     plus.runtime.getProperty(plus.runtime.appid, function (inf) {
                         localStorage.version = inf.version;
                         that.curVersion = inf.version;
+                        that.checkUpdate( that.curVersion);
                     });
 
-                    if (false) {
-                        that.checkUpdate();
-                    }
-
                     //   获取手机UUID
                     plus.device.getInfo({
                         success: function (e) {
@@ -90,7 +87,7 @@
                 }
             },
             // 是否有新版本
-            checkUpdate() {
+            checkUpdate(version) {
                 let that = this;
                 let param = {};
                 let postdata = qs.stringify(param);
@@ -98,8 +95,8 @@
                 QueryVueFramework(postdata).then(res => {
                     let json = res;
                     if (json.Code == 0) {
-                        if (that.curVersion != json.Version) {
-                            let url = "http://192.168.0.3:19096/v1/Sensors/DownloadVueFramework";
+                        if (version != json.Version) {
+                            let url = "http://cal.beswell.com:85//v1/Sensors/DownloadVueFramework";
                             that.downWgt(url, json.Version);
                             that.$notify({
                                 title: '升级提醒',
@@ -107,10 +104,6 @@
                             });
                         }
                     }
-                    that.$notify({
-                        title: '升级提醒',
-                        message: h('i', {style: 'color: teal'}, '检测到新的版本,正在下载最新版本')
-                    });
                 })
             },
             downWgt(url) {

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

@@ -212,7 +212,9 @@
                         "Ck": 99.9,
                         "CkUnit": "CK值"
                     }
-                }
+                },
+                mainTimer:null,
+                timer2:null,
             }
         },
         mounted() {
@@ -229,7 +231,7 @@
                 this.createEgg();
             } else {
                 // 彩蛋
-                // this.OpenEgg(this.fakeEgg);
+                this.OpenEgg(this.fakeEgg);
                 this.mainTimer = setInterval(() => {
                     this.students = this.fakeNews();
                     this.giveClassName(this.students);
@@ -256,6 +258,12 @@
             //     1000
             // )
         },
+        beforeDestroy() {
+            clearInterval(this.mainTimer);
+            clearInterval(this.timer2);
+            this.mainTimer = null;
+            this.timer2 = null;
+        },
         methods: {
             fakeNews() {
                 let item = [];
@@ -296,7 +304,6 @@
                 getRecordBreak(postdata).then(res => {
                     let json = res;
                     if (json.Code == 0) {
-                        console.log(json);
                         this.OpenEgg(json);
                     } else {
                         // 并没有人破记录
@@ -380,6 +387,7 @@
                         // 没开课
                         if (json.ClassOn == 0) {
                             console.log("xiakele ");
+                            // return false;
                             // 1:团课
                             // 2:竞技课PK
                             // 3:私教课
@@ -492,6 +500,7 @@
                 if (val == 0) {
                     return '0'
                 } else {
+                    // return parseFloat(val).toFixed(2);
                     return parseInt(val);
                     // return parseFloat(val).toFixed(3);
                 }
@@ -843,7 +852,7 @@
     }
 
     .centerLi {
-        width: 100%;
+        width: 99.8%;
         overflow: hidden;
         float: left;
         color: #fff;
@@ -922,7 +931,7 @@
         overflow: hidden;
         display: block;
         margin: 0 auto;
-        margin-top: 0.4rem;
+        margin-top: 0.3rem;
         font-weight: normal !important;
         color: #fff;
         text-align: left;
@@ -965,7 +974,7 @@
     /*max*/
     .max {
         width: 12rem;
-        height: 6rem;
+        height: 5.6rem;
         display: block;
         margin: 0 auto;
         margin-top: 1rem;
@@ -973,6 +982,7 @@
 
     .max .centerLi {
         width: 90%;
+        height: 100%;
     }
 
     .max .ltLi {
@@ -1229,7 +1239,7 @@
     /*three*/
     .three {
         width: 50%;
-        height: 4.1rem;
+        height: 4rem;
         float: left;
         overflow: hidden;
         margin-bottom: 1%
@@ -1292,7 +1302,8 @@
     }
 
     .three .topLi {
-        height: 3.3rem;
+        /*height: 3.26rem;*/
+        height: 3.18rem;
     }
 
     .three .bottomLi {

+ 7 - 2
tv/src/views/Rank.vue

@@ -59,8 +59,6 @@
     import '../libs/rem';
     import '../Global';
     import {ClassUserRank} from '@/api/getApiRes'
-
-
     let qs = require('qs');
     export default {
         data() {
@@ -73,6 +71,7 @@
                     CkSort: [],
                     CalSort: [],
                 },
+                rankTimer:null
             }
         },
         mounted() {
@@ -103,6 +102,10 @@
                 }, 1000)
             }
         },
+        beforeDestroy() {
+            clearInterval(this.rankTimer);
+            this.rankTimer = null;
+        },
         methods: {
             fakeNews() {
                 let item = [];
@@ -141,6 +144,8 @@
                         this.students.CkSort = json.Rs.CkSort;
                         this.students.CalSort = json.Rs.CalSort;
                     } else {
+                        this.students.CkSort = [];
+                        this.students.CalSort = [];
                         if (json.Code == '999') {
                             that.$router.push({path: '/wait'});
                         } else {

+ 71 - 16
tv/src/views/Wait.vue

@@ -4,23 +4,23 @@
         <div class="rankContainer">
             <div class="lt">
                 <div class="recordMain">
-                        <el-carousel :interval="30000" height="370px" :autoplay="autoplayStatus">
+                    <el-carousel :interval="30000" height="370px" :autoplay="autoplayStatus" :initial-index="1">
                         <el-carousel-item v-for="rs in recordMain">
-                        <div v-show="t == curIndex" v-for="(rs,t) in recordMain" v-bind:key="t">
-                            <h5>{{rs.Title}}</h5>
-                            <div class="sumContainer">
-                                <div class="sum">
-                                    <s>{{rs.Result[0].Unite}}</s>
-                                    <em>{{rs.Result[0].Values}}</em>
+                            <div v-show="t == curIndex" v-for="(rs,t) in recordMain" v-bind:key="t">
+                                <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>
-                                <span class="sumBg"></span>
                             </div>
-                        </div>
                         </el-carousel-item>
-                        </el-carousel>
+                    </el-carousel>
                 </div>
                 <div class="bottom">
-                    <el-carousel :interval="15000" height="280px" :autoplay="autoplayStatus">
+                    <el-carousel :interval="15000" height="280px" :autoplay="autoplayStatus" :initial-index="1">
                         <el-carousel-item v-for="Rs in bottom">
                             <div class="topOne" v-if="Rs.Style == 'tops'">
                                 <h5>{{Rs.Title}}</h5>
@@ -45,7 +45,7 @@
                                     </li>
                                 </ul>
                             </div>
-                            <div class="heros" v-if="Rs.Style == 'heros'">
+                            <div class="heros" v-if="Rs.Style == 'heros'" >
                                 <h5>{{Rs.Title}}</h5>
                                 <ul>
                                     <li v-for="(hero,i) in Rs.Result">
@@ -61,6 +61,9 @@
                                         </div>
                                         <span>{{ hero.Values }} {{hero.Unite}}</span>
                                     </li>
+                                    <li v-if="!Rs.Result">
+                                        <h5>还没有人突破记录哟~</h5>
+                                    </li>
                                 </ul>
                             </div>
                         </el-carousel-item>
@@ -68,7 +71,7 @@
                 </div>
             </div>
             <div class="rt">
-                <el-carousel :interval="15000" height="610px" :autoplay="autoplayStatus">
+                <el-carousel :interval="15000" height="610px" :autoplay="autoplayStatus" :initial-index="1">
                     <el-carousel-item v-for="Rs in rt">
                         <h5>{{Rs.Title}}</h5>
                         <ul>
@@ -98,6 +101,8 @@
     import '../libs/rem';
     import '../Global'
 
+    // 测试模式 localStorage.eqSn = "8e501b0bde9ce600"
+
     let qs = require('qs');
     export default {
         data() {
@@ -113,7 +118,22 @@
                 studentsLimit: [],
                 showType: 2,//1 单人
                 curIndex: false,//1 单人
-                recordMain: [],
+                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: [
+                    {
+                        Title: '*******',
+                        Result: [{'Values': 0, Unite: '千卡'}],
+                    },
+                    {
+                        Title: '*******',
+                        Result: [{'Values': 0, Unite: '千卡'}],
+                    }
+                ],
                 bottom: {},
                 rt: [],
 
@@ -204,12 +224,20 @@
                 ];
                 this.recordMain = [
                     {
-                        Title: '本周场馆卡路里总消耗',
+                        Title: '本<s>周</s>场馆卡路里总消耗',
+                        Result: [{'Values': 1234, Unite: '千卡'}],
+                    },
+                    {
+                        Title: '本<s>周</s>场馆卡路里总消耗',
                         Result: [{'Values': 1234, Unite: '千卡'}],
                     }
                 ]
             }
         },
+        beforeDestroy() {
+            clearInterval(this.getcurIndex);
+            this.getcurIndex = null;
+        },
         methods: {
             fakeNews() {
                 let item = [];
@@ -318,6 +346,16 @@
                     if (json.Code == 0) {
                         that.recordMain = json.Rs;
                     } else {
+                        that.recordMain = [
+                            {
+                                Title: '*******',
+                                Result: [{'Values': 0, Unite: '千卡'}],
+                            },
+                            {
+                                Title: '*******',
+                                Result: [{'Values': 0, Unite: '千卡'}],
+                            }
+                        ];
                         that.$message.error(json.Memo);
                     }
                 })
@@ -331,7 +369,6 @@
                 let postdata = qs.stringify(param);
                 getClassStat(postdata).then(res => {
                     let json = res;
-                    console.log(json);
                     if (json.Code == 0) {
                         // alert(JSON.stringify(json.ClassOn));
                         // alert("alert:"+json.ClassOn);
@@ -405,6 +442,19 @@
         margin: 0 auto;
     }
 
+    /*/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%;
@@ -424,6 +474,7 @@
         width: 40%;
         float: right;
     }
+
     .recordMain {
         /*height: 6rem;*/
         overflow: hidden;
@@ -438,6 +489,10 @@
         margin: 5% auto;
     }
 
+    .recordMain h5 s {
+        font-size: 0.8rem;
+    }
+
     .rankContainer .sum {
         position: relative;
         top: 0.4rem;

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

@@ -146,6 +146,10 @@
             // }, 1000);
             this.GetgetUserList();
         },
+        beforeDestroy() {
+            // clearInterval(this.timer);
+            // this.timer = null;
+        },
         methods: {
             fakeNews() {
                 let item = [];

+ 3 - 1
tv/vue.config.js

@@ -21,7 +21,8 @@ module.exports = {
             '/api': {
                 // target: 'http://192.168.0.105:8080/',//小飞龙的
                 // target: 'http://192.168.0.162:9000/',//PC的
-                target: 'http://192.168.0.110:8080',//公司公用的
+                // target: 'http://192.168.0.110:8080',//公司公用的
+                target: 'http://192.168.0.196:8080',//树莓派
                 // target: 'http://192.168.0.243:9000/',//郑伟机器的
                 // target: ' http://192.168.0.222:9000/',//redmi的
                 changeOrigin: true,
@@ -29,6 +30,7 @@ module.exports = {
                     '^/api': '',
                 }
             },
+            // 用查询最新wgt 般本
             '/bpi': {
                 target: 'http://192.168.0.3:19096',//公司公用的
                 changeOrigin: true,