Explorar o código

5.生日的时候学生有个生日小帽子 IsBirthday 1 过生日 0 不过生日 √
10.新学员上课时有个倒数6秒的欢迎页面 -欢迎入伙 √
20.跨店用户管理,加商家列表,给用户列表传入0做结果集的筛选 √

Changpeng Duan %!s(int64=5) %!d(string=hai) anos
pai
achega
a41dd0f3d1

+ 64 - 15
pc/src/views/AcrossVip.vue

@@ -112,8 +112,18 @@
                    width="960px">
             <div class="dialogContent">
                 <div>
-
                     <el-form ref="form" :model="form" label-width="80px">
+                        <el-form-item label="选择商家" required>
+                            <el-select v-model="form.shopId " filterable placeholder="请选择选择商家">
+                                <el-option
+                                        v-for="item in form.shopOptions"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value"
+                                >
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
                         <el-form-item label="选择会员" required>
                             <!--todo 上传接口改数组接收-->
                             <el-transfer filterable v-model="form.userId" :data="form.vipList"
@@ -121,7 +131,7 @@
 
                             </el-transfer>
                         </el-form-item>
-                        <el-form-item label="商家分组"  required>
+                        <el-form-item label="商家分组" required>
                             <el-select v-model="form.groupId " filterable placeholder="请选择商家分组">
                                 <el-option
                                         v-for="item in form.groupList"
@@ -156,6 +166,7 @@
         VipUserClassEdit,
         QueryTakeCustomerByName,
         BindTakeCustomer,
+        ShopListQuery,
     } from "../api/getApiRes";
 
     let qs = require('qs');
@@ -221,7 +232,6 @@
                     name: '',
                     userCode: '',
                     groupId: '',
-                    shopId: '',
                     Id: '',
                     userId: [],
                     height: '',
@@ -235,12 +245,15 @@
                     newnormalhour: 0,
                     gifthour: 0,
                     newgifthour: 0,
+                    shopId: '',
+                    isAcross: '',
                     btnType: 0,//0新建,1编辑编辑
                     memo: '',
                     expTime: '',
                     vipList: [],
                     groupList: [],
                     classlist: [],
+                    shopOptions: [],
                     dialogdata: [],//穿梭待选
                     dialogValue: [],//穿梭已选
                 },
@@ -255,17 +268,40 @@
             // 读取列表
             this.getTableQuery();
         },
+        watch: {
+            $route(to) {
+                if (to.name == 'AcrossVip') {
+                    // 读取列表
+                    this.getTableQuery();
+                }
+            },
+            'form.shopId': {
+                handler: function (to) {
+                    let that = this;
+                    if (to == '') {
+                        that.form.isAcross = '';
+                    } else {
+                        that.form.isAcross = 0
+                    }
+                    that.getClassVipuserQueryByAdmin();
+                },
+                deep: true
+            }
+        },
         methods: {
             // 获取本课程下的会员列表
             getClassVipuserQueryByAdmin() {
                 let that = this;
                 let param = {
                     token: localStorage.token,
+                    shopId: this.form.shopId,
+                    isAcross: this.form.isAcross,
                 };
                 let postdata = qs.stringify(param);
                 VipUserSimpleQueryByAdmin(postdata).then(res => {
                     let json = res;
                     if (json.Code == 0) {
+                        that.form.vipList = '';
                         that.form.vipList = turnResToOptionBySimViper(json.Rs);
                     } else {
                         that.$message.error(json.Memo + '错误码:' + json.Code);
@@ -321,7 +357,7 @@
                 let postdata = qs.stringify(param);
                 AcrossVipUserAdd(postdata).then(res => {
                     let json = res;
-                    if (json.Code == 0 ) {
+                    if (json.Code == 0) {
                         // 关闭弹窗
                         that.dialogMemberVisible = false;
                         // 重载列表
@@ -346,8 +382,10 @@
             },
             // 新增跨店会员
             addMember() {
-                this.getClassVipuserQueryByAdmin();
                 this.getShopGroupQuery();
+                this.shopPanelSelect();
+                this.getClassVipuserQueryByAdmin();
+
                 this.dialogMemberVisible = true;
                 this.btnType = 0;
                 this.form.btnType = 0;
@@ -355,6 +393,26 @@
                 this.form.groupId = '';
                 this.dialogTitle = '新增跨店会员'
             },
+            shopPanelSelect() {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                };
+                let postdata = qs.stringify(param);
+                ShopListQuery(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        if (json.Rs == '') {
+                            that.$message.error('当前没有可选的店铺,请先在店面管理中添加店铺!');
+                            return false
+                        }
+                        that.form.shopOptions = turnShopResToOption(json.Rs);
+                        that.form.shopOptions.unshift({value: '', label: "全部"});
+                    } else {
+                        that.$message.error(json.Memo + '错误码:' + json.Code);
+                    }
+                })
+            },
             // 删除
             delList() {
                 let that = this;
@@ -497,16 +555,7 @@
             },
         }
         ,
-        watch: {
-            $route(to) {
-                if (to.name == 'AcrossVip') {
-                    // 读取列表
-                    this.getTableQuery();
-                }
-            }
-            ,
-        }
-        ,
+
     }
 </script>
 

+ 6 - 8
tv/README.md

@@ -72,14 +72,15 @@ http://192.168.0.162:9000/Hello
 
 
 
-5.生日的时候学生有个生日小帽子     IsBirthday 1 过生日 0 不过生日
-10.新学员上课时有个倒数15秒的欢迎页面  -欢迎入伙  
+5.生日的时候学生有个生日小帽子     IsBirthday 1 过生日 0 不过生日 √ 
+10.新学员上课时有个倒数6秒的欢迎页面  -欢迎入伙  √   
+20.跨店用户管理,加商家列表,给用户列表传入0做结果集的筛选  √ 
 
 
+19.等待页面的数字使用图片替换
 
-1等待页面怎么体现学生是当天生日?
-2.排名页面怎么体现学生是当天生日?
-
+21.无感知更新wgt文件
+22.404 给微信
  
 
 
@@ -95,9 +96,6 @@ getClassStat
 "ClassOn":false//上课
 
 
-
-
-
 ##安装淘宝源,已安装可忽略
 
 npm install --registry=https://registry.npm.taobao.org

+ 1 - 1
tv/src/Global.js

@@ -445,7 +445,7 @@ fakeNews = function (num, team) {
                 "Head": "http://192.168.0.2/gc.png",
                 "GroupNo": i % teamNum + 1,
                 "Sex": i % 2 + 1,
-                "IsBirthday": 1
+                "IsBirthday": i % 2
             }
         )
     }

+ 104 - 29
tv/src/Mock/index.js

@@ -54,7 +54,7 @@ let testTable = function () {
             "members": members,
             "wxVisible": "@integer(0, 1)",
             "timeLong": "12:00-14:00",
-            "timeScope":  [new Date(2016, 9, 10, 8, 40), new Date(2016, 9, 10, 9, 40)],
+            "timeScope": [new Date(2016, 9, 10, 8, 40), new Date(2016, 9, 10, 9, 40)],
         })
     }
 
@@ -70,41 +70,40 @@ let getUserList = function () {
     let item = [];
 
     let nameList = [
-        {name:'杨东艳'},
-        {name:'隋小飞'},
-        {name:'刘晓蕾'},
-        {name:'刘海生'},
-        {name:'贾雨琦'},
-        {name:'李延海'},
-        {name:'宋凌晨'},
-        {name:'段长鹏'},
-        {name:'郑伟'},
-        {name:'周睿'},
-        {name:'贾奕'},
-        {name:'王正祥'},
-        {name:'高超'},
-        {name:'武发鲁'},
-        {name:'赵晋洪'},
-        {name:'张岩'},
-    ]
+        {name: '杨东艳'},
+        {name: '隋小飞'},
+        {name: '刘晓蕾'},
+        {name: '刘海生'},
+        {name: '贾雨琦'},
+        {name: '李延海'},
+        {name: '宋凌晨'},
+        {name: '段长鹏'},
+        {name: '郑伟'},
+        {name: '周睿'},
+        {name: '贾奕'},
+        {name: '王正祥'},
+        {name: '高超'},
+        {name: '武发鲁'},
+        {name: '赵晋洪'},
+        {name: '张岩'},
+    ];
 
     let img = [
-        {name:'flyhead.png'},
-    ]
+        {name: 'flyhead.png'},
+    ];
 
-    for (var i = 0; i < 16  ; i++) {
+    for (var i = 0; i < 16; i++) {
         item.push({
-            "name":nameList[i].name,
-            "activePercent":  "@integer(0, 54)",
-            "heartRate":  "@integer(70, 150)",
-            "calorie":  "@integer(200, 1000)",
+            "name": nameList[i].name,
+            "activePercent": "@integer(0, 54)",
+            "heartRate": "@integer(70, 150)",
+            "calorie": "@integer(200, 1000)",
             "ck": "23.2",
             "topCk": "@integer(150, 200)",
-            "step":  "@integer(200, 20000)",
+            "step": "@integer(200, 20000)",
             "hubId": "@guid",
             "deviceId": "@guid",
             "userCode": "@integer(15253135600, 15253135699)",
-            "head":img[i].name,
         })
     }
     let res = {
@@ -114,8 +113,84 @@ let getUserList = function () {
     };
     return res;
 };
-Mock.mock('/api/testTable', 'post', testTable());
-Mock.mock('/api/getUserList', 'post', getUserList());
+
+
+let testStudent = function (num) {
+    let item = [];
+    for (var i = 0; i < num; i++) {
+        item.push({
+            "SvId": "@guid",
+            "UserId": "@integer(15253135600, 15253135699)",
+            "name": "测试人",
+            "Name": "测试人",
+            "Cle": "@integer(1, 9999)",
+            "realHr": "@integer(70, 140)",
+            "activePercent": "@integer(10, 100)",
+            "PureCalorieNoVo2": "@integer(10, 100)",
+            "Ck": "@integer(10, 100)",
+            "formatCk": "@integer(10, 100)",
+            "Head": "http://192.168.0.2/gc.png",
+            "GroupNo": "@integer(1, 3)",
+            "Sex": "@integer(1, 2)",
+            "IsBirthday": "@integer(0, 1)",
+        })
+    }
+
+    return {
+        Rs: item,
+        Code: 0,
+        Memo: ''
+    };
+};
+
+let getClassStat = function(){
+    return {
+        // 0: 下课 团课/私教/PK 的排名
+        // 1:团课/私教 todo
+        // 2:竞技课2PK
+        // 3:竞技课threepk
+
+        ClassOn: 1, //
+        Code: 0,
+        Memo: "Success",
+        dp: 1,
+    };
+};
+
+let getNewUser = function(code){
+
+    let item = [];
+    for (var i = 0; i < 3; i++) {
+        item.push({
+            "SvId": "@guid",
+            "UserId": "@integer(15253135600, 15253135699)",
+            "name": "测试人",
+            "Name": "测试人",
+        })
+    }
+
+    return {
+        Code: code,
+        Memo: "Success",
+        Rs: item,
+    };
+};
+
+
+let t = 1;
+if (t == 2) {
+    Mock.mock('/api/testTable', 'post', testTable());
+    Mock.mock('/api/getUserList', 'post', getUserList());
+    // 学生列表
+    Mock.mock('http://192.168.0.74:8080/UserListInfo', 'post', testStudent(2));
+     // 上课状态
+    Mock.mock('http://192.168.0.74:8080/ClassStatQuery', 'post', getClassStat());
+    // 新同学
+    Mock.mock('http://192.168.0.74:8080/getNewUser', 'post', getNewUser(999));
+
+
+}
+
 // Mock.mock('/api/Hello', 'post', getUserList());
 
 export default Mock;

+ 6 - 0
tv/src/api/getApiRes.js

@@ -112,3 +112,9 @@ export function DownloadVueFramework(postdata) {
     let url = '/bpi/v1/Sensors/DownloadVueFramework';
     return getApiBasic(url, postdata);
 }
+
+// 12/13 欢迎新同学
+export function getNewUser(postdata) {
+    let url = headapi + 'getNewUser';
+    return getApiBasic(url, postdata);
+}

+ 176 - 0
tv/src/components/newStudent.vue

@@ -0,0 +1,176 @@
+<template>
+    <el-dialog title="" :visible.sync="studentInfo.dialogVisible" :close-on-click-modal="false">
+        <div class="newStudentContainer">
+            <div class="info">
+                <span v-for="s in studentInfo.Rs">{{s.Name}}</span>
+            </div>
+            <div class="studentTips">
+                <span>
+                    欢迎新学员加入英泓小飞龙俱乐部
+                </span>
+                <span>
+                    欢迎入伙,以后你就是英泓小飞龙俱乐部的人啦,<i style="color: red">❤</i>!
+                </span>
+            </div>
+            <div class="progress">
+                <el-progress :percentage="studentInfo.percent" :show-text="false"></el-progress>
+            </div>
+        </div>
+    </el-dialog>
+
+</template>
+
+<script>
+    export default {
+        data() {
+            return {
+                percent: 0,
+                totalTime: 0,
+                sumTime: 4,
+            };
+        },
+        props: ['studentInfo'],
+    }
+</script>
+
+<style scoped>
+    /*成就彩蛋*/
+    /deep/ .el-dialog {
+        width: 80%;
+        height: 6rem;
+        background: url("../static/img/newStudent/newStudent.svg");
+        background-position: top center;
+        background-repeat: no-repeat;
+        background-size: 120% 100%;
+        box-shadow: none;
+        padding-bottom: 1rem;
+    }
+
+    .info {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .info .lt {
+        width: 50%;
+        height: 4rem;
+        float: left;
+    }
+
+    .info .rt {
+        width: 50%;
+        height: 4rem;
+        float: left;
+    }
+
+    .info h5 {
+        width: 4rem;
+        height: 0.6rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        background: url("../static/img/newRecord/record_title.png");
+        background-repeat: no-repeat;
+        background-size: 100%;
+        background-position: top center;
+        font-family: vista;
+        font-weight: normal;
+        font-size: 0.3rem;
+        color: #333;
+        text-align: center;
+        line-height: 0.6rem;
+    }
+
+    .info .detail {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .detail em {
+        font-size: 1.8rem;
+        color: #fff;
+        font-style: normal;
+    }
+
+    .detail span {
+        color: #fff;
+        font-size: 0.3rem;
+        font-family: vista;
+    }
+
+    .info img {
+        position: relative;
+        width: 2rem;
+        height: 2rem;
+        float: left;
+        left: 0;
+        bottom: 1rem;
+    }
+
+    .newStudentContainer {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 2rem;
+    }
+
+    .info {
+        width: 50%;
+        height: 2.5rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .info span {
+        font-weight: 900;
+        font-size: 0.4rem;
+        text-align: center;
+        color: #a00;
+        text-shadow: 0px 0px 1px #ffa200;
+        /*margin-right: 1rem;*/
+        flex: 1;
+        padding-left: 0.2rem;
+        padding-right: 0.2rem;
+        padding-bottom: 0.2rem;
+    }
+
+    .studentTips {
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .studentTips span {
+        width: 100%;
+        overflow: hidden;
+        display: flex;
+        margin: 0 auto;
+        text-align: center;
+        font-weight: 500;
+        font-size: 0.2rem;
+        color: #000;
+        align-items: center;
+        justify-content: center;
+    }
+    .progress {
+        position: relative;
+        width: 77%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+    }
+    /deep/ .el-progress-bar .el-progress-bar__outer {
+        height: 0.2rem;
+
+    }
+    /deep/ .el-progress-bar__inner {
+        background-color: #FFEE00;
+    }
+</style>

+ 3 - 2
tv/src/main.js

@@ -12,6 +12,8 @@ import VConsole from 'vconsole/dist/vconsole.min.js' //import vconsole
 
 if(process.env.NODE_ENV === 'development'){
     // let vConsole = new VConsole() // 初始化
+    // 演示版本数据
+    require('./Mock/index.js');
 }else{
 
 }
@@ -19,8 +21,7 @@ if(process.env.NODE_ENV === 'development'){
 Vue.config.productionTip = false;
 Vue.use(ElementUI);
 
-// 演示版本数据
-// require('./Mock/index.js');
+
 // store,
 new Vue({
   router,

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


+ 176 - 34
tv/src/views/Main.vue

@@ -81,18 +81,21 @@
         <!--图示-->
         <levelIcon></levelIcon>
         <newRecord :toper-info="toperInfo"></newRecord>
+        <newStudent :student-info="studentInfo"></newStudent>
     </div>
 </template>
 
 <script>
     import Headside from '@/components/Headside'
     import newRecord from '@/components/newRecord'
+    import newStudent from '@/components/newStudent'
     import levelIcon from '@/components/levelIcon'
     import
     {
         getHello,
         getRecordBreak,
-        getClassStat
+        getClassStat,
+        getNewUser
     } from '@/api/getApiRes'
 
     import '../libs/rem';
@@ -105,8 +108,9 @@
             return {
                 eqSn: '30:9C:23:0C:8B:1E',
                 pageStyle: RandomBg(),
-                trueDate: false,//真实数据 true false
+                trueDate: true,//真实数据 true false
                 totalTime: 4,
+                studentTime: 15,
                 times: 1,
                 thisClassName: '',
                 studentsClassName: [],
@@ -120,6 +124,11 @@
                     dialogVisible: false,
                     toper: {},
                 },
+                studentInfo: {
+                    dialogVisible: false,
+                    Rs: [],
+                    percent: 0
+                },
                 fakeEgg: {
                     Rs: {
                         "DuId": 37,
@@ -141,45 +150,24 @@
         },
         mounted() {
             // this.$router.push({path: '/2pkRank'});
-            // return false
 
             if (this.trueDate) {
-                this.GetgetUserList();
-                this.curgetClassStat();
-                this.mainTimer = setInterval(() => {
-                    this.GetgetUserList();
-                    this.curgetClassStat();
-                }, 1000);
-
-                this.timer2 = setInterval(() => {
-                    this.createEgg();
-                }, 6000);
-                this.createEgg();
+                this.init();
             } else {
                 // 彩蛋
                 // this.OpenEgg(this.fakeEgg);
-                // 1 2 4 6 9
-                let Rs = fakeNews(11);
+                // 1 2 4 6 9 10 13 16 21 24
+                let Rs = fakeNews(33);
                 this.giveClassName(Rs);
                 this.students = Rs;
-                // this.mainTimer = setInterval(() => {
-                //     this.students = fakeNews(2);
-                //     this.giveClassName(this.students);
-                // }, 10000);
+                // this.createNewStudent();
             }
         },
         watch: {
             '$route': function (val) {
                 if (val.path == '/main') {
                     if (this.trueDate) {
-                        this.mainTimer = setInterval(() => {
-                            this.GetgetUserList();
-                            this.curgetClassStat();
-                        }, 1000);
-                        this.GetgetUserList();
-                        this.timer2 = setInterval(() => {
-                            this.createEgg();
-                        }, 6000);
+                        this.init();
                     } else {
                         this.students = fakeNews(2);
                         this.giveClassName(this.students);
@@ -188,16 +176,38 @@
                 } else {
                     clearInterval(this.mainTimer);
                     clearInterval(this.timer2);
+                    clearInterval(this.timer3);
                 }
             }
         },
         beforeDestroy() {
             clearInterval(this.mainTimer);
             clearInterval(this.timer2);
+            clearInterval(this.timer3);
             this.mainTimer = null;
             this.timer2 = null;
+            this.timer3 = null;
         },
         methods: {
+            init(){
+                this.GetgetUserList();
+                this.createEgg();
+                this.createNewStudent();
+                this.curgetClassStat();
+
+                this.mainTimer = setInterval(() => {
+                    this.GetgetUserList();
+                    this.curgetClassStat();
+                }, 1000);
+
+                this.timer2 = setInterval(() => {
+                    this.createEgg();
+                }, 1000);
+
+                this.timer3 = setInterval(() => {
+                    this.createNewStudent();
+                }, 6000);
+            },
             alertInfo(info) {
                 alert(info);
             },
@@ -212,7 +222,39 @@
                 getRecordBreak(postdata).then(res => {
                     let json = res;
                     if (json.Code == 0) {
-                        this.OpenEgg(json);
+                        // 欢迎新学生时不显示彩蛋
+                        if (that.studentInfo.dialogVisible == true) {
+                            console.log('正在显示新学生');
+                            return false
+                        }else{
+                            this.OpenEgg(json);
+                        }
+                    } else {
+                        // 并没有人破记录
+                        if (json.Code == 999) return false;
+                        if (json.Code != 999) that.$message.error(json.Memo + '[egg]');
+                    }
+                })
+            },
+            // 欢迎新同学
+            createNewStudent() {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    eqSn: localStorage.eqSn
+                };
+                let postdata = qs.stringify(param);
+                getNewUser(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        console.log('来新生了');
+                        // 显示彩蛋时不欢迎新学生
+                        if (that.toperInfo.dialogVisible == true) {
+                            console.log('正在显示彩蛋');
+                            return false
+                        }else{
+                            that.OpenStudent(json.Rs);
+                        }
                     } else {
                         // 并没有人破记录
                         if (json.Code == 999) return false;
@@ -234,6 +276,22 @@
                     }
                 }, 1000)
             },
+            OpenStudent(msg) {
+                let that = this;
+                that.studentInfo.Rs = msg;
+                that.studentInfo.dialogVisible = true;
+                // 倒计时5秒自动关闭
+                this.studentTime = 6;
+                let clock = window.setInterval(() => {
+                    this.studentTime--;
+                    let num = parseInt((6 - this.studentTime) / 6) * 100;
+                    this.studentInfo.percent = num > 100 ? 100 : num;
+                    if (parseInt(this.studentTime) < 0) {
+                        that.studentInfo.dialogVisible = false;
+                        clearInterval(clock);
+                    }
+                }, 1000)
+            },
             GetgetUserList() {
                 let that = this;
                 let param = {
@@ -258,7 +316,6 @@
                 })
             },
             curgetClassStat() {
-                console.log(123);
                 let that = this;
                 let param = {
                     token: localStorage.token,
@@ -333,7 +390,7 @@
                             numberClass = 'twentyFour';
                             break;
                         case parseInt(res.length) > 31:
-                            numberClass = 'thirtyFive';
+                            numberClass = 'twentyFour';
                             break;
                     }
 
@@ -398,7 +455,7 @@
             }
         },
         components: {
-            Headside, newRecord, levelIcon
+            Headside, newRecord, levelIcon, newStudent
         }
     }
 </script>
@@ -1907,7 +1964,6 @@
         margin-top: 0.16rem;
     }
 
-
     .birth {
         position: relative;
         top: -3.3rem;
@@ -1946,31 +2002,117 @@
     .three .birth img.birthCrow {
         top: 0.8rem;
     }
+
     .six .birth {
         top: -3.1rem;
     }
+
     .six .birth img.birthCrow {
         width: 0.8rem;
         height: 0.5rem;
         top: 1.2rem;
     }
+
     .six .birth img.birthText {
         top: 2rem;
         width: 1.5rem;
         height: 0.6rem;
     }
-    .nine  .birth {
+
+    .nine .birth {
         top: -3.1rem;
     }
+
     .nine .birth img.birthCrow {
         width: 0.8rem;
         height: 0.5rem;
         top: 1.6rem;
     }
+
     .nine .birth img.birthText {
         top: 2.1rem;
         width: 1.2rem;
         height: 0.5rem;
     }
 
+    .ten .birth {
+        top: -3.1rem;
+    }
+
+    .ten .birth img.birthCrow {
+        width: 0.8rem;
+        height: 0.5rem;
+        top: 1.6rem;
+    }
+
+    .ten .birth img.birthText {
+        top: 2.1rem;
+        width: 1.2rem;
+        height: 0.5rem;
+    }
+
+    .twelve .birth {
+        top: -3.1rem;
+    }
+
+    .twelve .birth img.birthCrow {
+        width: 0.6rem;
+        height: 0.3rem;
+        top: 2rem;
+    }
+
+    .twelve .birth img.birthText {
+        top: 2.4rem;
+        width: 1rem;
+        height: 0.4rem;
+    }
+
+    .sixteen .birth {
+        top: -3.1rem;
+    }
+
+    .sixteen .birth img.birthCrow {
+        width: 0.6rem;
+        height: 0.3rem;
+        top: 2.1rem;
+    }
+
+    .sixteen .birth img.birthText {
+        top: 2.45rem;
+        width: 1rem;
+        height: 0.4rem;
+    }
+
+    .twenty .birth {
+        top: -3.1rem;
+    }
+
+    .twenty .birth img.birthCrow {
+        width: 0.6rem;
+        height: 0.3rem;
+        top: 2.1rem;
+    }
+
+    .twenty .birth img.birthText {
+        top: 2.45rem;
+        width: 1rem;
+        height: 0.4rem;
+    }
+
+    .twentyFour .birth {
+        top: -3.1rem;
+    }
+
+    .twentyFour .birth img.birthCrow {
+        width: 0.6rem;
+        height: 0.3rem;
+        top: 2.2rem;
+    }
+
+    .twentyFour .birth img.birthText {
+        top: 2.5rem;
+        width: 0.8rem;
+        height: 0.3rem;
+    }
+
 </style>

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

@@ -39,6 +39,11 @@
                                         <img :class="s.sportLevel" src="../static/img/people/flyhead.png" alt=""
                                              v-if="!s.Head">
                                     </div>
+                                    <!-- 生日快乐 -->
+                                    <div class="birth" v-if="s.IsBirthday == 1">
+                                        <img src="../assets/img/birth/birthCrow.png" class="birthCrow"/>
+                                        <img src="../assets/img/birth/birthText.png" class="birthText"/>
+                                    </div>
                                 </div>
                                 <div class="urt">
                                     <em class="fastJump" v-if="s.realHr != 0" v-show="parseInt(s.activePercent) > 90">{{
@@ -135,6 +140,11 @@
                                         <img :class="s.sportLevel" :src="s.Head" alt="" v-if="s.Head">
                                         <img :class="s.sportLevel" src="../static/img/people/flyhead.png" alt=""
                                              v-if="!s.Head">
+                                        <!-- 生日快乐 -->
+                                        <div class="birth" v-if="s.IsBirthday == 1">
+                                            <img src="../assets/img/birth/birthCrow.png" class="birthCrow"/>
+                                            <img src="../assets/img/birth/birthText.png" class="birthText"/>
+                                        </div>
                                     </div>
                                 </div>
                                 <div class="urt">
@@ -181,7 +191,7 @@
     export default {
         data() {
             return {
-                trueDate: true,//真实数据 true false
+                trueDate: false,//真实数据 true false
                 studentsClassName: [],
                 students: {
                     redUnite: [],
@@ -238,7 +248,7 @@
                 let Dp = json.Dp;
                 that.ReadLessonInfo(Dp);
                 // 载入学生信息
-                let Rs = fakeNews(12, 2);
+                let Rs = fakeNews(14, 2);
                 that.UniteBreak(Rs);
 
                 // 人口总数
@@ -685,6 +695,7 @@
         text-align: left;
         text-indent: 0.1rem;
     }
+
     .bg > h5 .nameMd {
         width: 60%;
         text-align: center;
@@ -693,7 +704,7 @@
 
     .pk_container li .user {
         width: 100%;
-        overflow: hidden;
+        overflow: visible;
         display: block;
         margin: 0 auto;
     }
@@ -708,7 +719,7 @@
     .pk_container .user .umd {
         width: 33.333%;
         float: left;
-        overflow: hidden;
+        overflow: visible;
         flex-direction: column
     }
 
@@ -1247,6 +1258,12 @@
     .four .user .ult s {
         font-size: 0.2rem;
         line-height: 1rem;
+        height: 1rem;
+        overflow: hidden;
+    }
+
+    .four .user .ult em {
+        height: 1.1rem;
     }
 
     .four .circle {
@@ -1350,6 +1367,9 @@
         line-height: 1rem;
     }
 
+    .eight .user .ult em {
+        height: 1.1rem;
+    }
     .eight .bottomLi {
         width: 100%;
         text-indent: 0.1rem;
@@ -1398,4 +1418,79 @@
     .user .umd img.red {
         border-color: #CF1122;
     }
+
+    .birth {
+        position: relative;
+        top: -2rem;
+        width: 1.7rem;
+        height: 1px;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .birth img.birthCrow {
+        position: relative;
+        top: 0.2rem;
+        width: 1.1rem;
+        height: 0.4rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border: none;
+    }
+
+    .birth img.birthText {
+        position: relative;
+        top: 1rem;
+        width: 1.6rem;
+        height: 0.6rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border: none;
+    }
+
+    .three .birth img.birthCrow {
+        top: 0.7rem;
+        width: 0.8rem;
+        height: 0.3rem;
+    }
+
+    .three .birth img.birthText {
+        top: 1.1rem;
+        width: 1.3rem;
+        height: 0.6rem;
+    }
+
+    .four .birth {
+        width: 1rem;
+    }
+
+    .four .birth img.birthCrow {
+        top: 0.9rem;
+        width: 0.7rem;
+        height: 0.3rem;
+    }
+
+    .four .birth img.birthText {
+        top: 1.3rem;
+        width: 1rem;
+        height: 0.4rem;
+    }
+    .eight .birth {
+        width: 1rem;
+    }
+
+    .eight .birth img.birthCrow {
+        top: 0.9rem;
+        width: 0.7rem;
+        height: 0.3rem;
+    }
+
+    .eight .birth img.birthText {
+        top: 1.3rem;
+        width: 1rem;
+        height: 0.4rem;
+    }
+
 </style>

+ 91 - 2
tv/src/views/threepk.vue

@@ -79,6 +79,11 @@
                                         <img :class="s.sportLevel" :src="s.Head" alt="" v-if="s.Head">
                                         <img :class="s.sportLevel" src="../static/img/people/flyhead.png" alt=""
                                              v-if="!s.Head">
+                                        <!-- 生日快乐 -->
+                                        <div class="birth" v-if="s.IsBirthday == 1">
+                                            <img src="../assets/img/birth/birthCrow.png" class="birthCrow"/>
+                                            <img src="../assets/img/birth/birthText.png" class="birthText"/>
+                                        </div>
                                     </div>
                                 </div>
                                 <div class="urt">
@@ -137,6 +142,11 @@
                                         <img :class="s.sportLevel" :src="s.Head" alt="" v-if="s.Head">
                                         <img :class="s.sportLevel" src="../static/img/people/flyhead.png" alt=""
                                              v-if="!s.Head">
+                                        <!-- 生日快乐 -->
+                                        <div class="birth" v-if="s.IsBirthday == 1">
+                                            <img src="../assets/img/birth/birthCrow.png" class="birthCrow"/>
+                                            <img src="../assets/img/birth/birthText.png" class="birthText"/>
+                                        </div>
                                     </div>
                                 </div>
                                 <div class="urt">
@@ -196,6 +206,11 @@
                                         <img :class="s.sportLevel"
                                              src="../static/img/people/flyhead.png"
                                              v-if="!s.Head">
+                                        <!-- 生日快乐 -->
+                                        <div class="birth" v-if="s.IsBirthday == 1">
+                                            <img src="../assets/img/birth/birthCrow.png" class="birthCrow"/>
+                                            <img src="../assets/img/birth/birthText.png" class="birthText"/>
+                                        </div>
                                     </div>
                                 </div>
                                 <div class="urt">
@@ -243,7 +258,7 @@
     export default {
         data() {
             return {
-                trueDate: true,//启用真实数据 true / false
+                trueDate: false,//启用真实数据 true / false
                 RedstudentsClassName: '',
                 BluestudentsClassName: '',
                 YellowstudentsClassName: '',
@@ -1061,7 +1076,7 @@
     .user .umd img {
         width: 1.45rem;
         height: 1.45rem;
-        overflow: hidden;
+        overflow: visible;
         display: block;
         margin: 0 auto;
         border-radius: 250px;
@@ -1583,4 +1598,78 @@
     .user .umd img.red {
         border-color: #CF1122;
     }
+
+    .birth {
+        position: relative;
+        top: -2rem;
+        width: 1.7rem;
+        height: 1px;
+        display: block;
+        margin: 0 auto;
+    }
+
+    .birth img.birthCrow {
+        position: relative;
+        top: 0.2rem;
+        width: 1.1rem;
+        height: 0.4rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border: none;
+    }
+
+    .birth img.birthText {
+        position: relative;
+        top: 1rem;
+        width: 1.4rem;
+        height: 0.6rem;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        border: none;
+    }
+
+    .three .birth img.birthCrow {
+        top: 0.7rem;
+        width: 0.8rem;
+        height: 0.3rem;
+    }
+
+    .three .birth img.birthText {
+        top: 1.1rem;
+        width: 1.3rem;
+        height: 0.6rem;
+    }
+
+    .four .birth {
+        width: 1rem;
+    }
+
+    .four .birth img.birthCrow {
+        top: 0.9rem;
+        width: 0.7rem;
+        height: 0.3rem;
+    }
+
+    .four .birth img.birthText {
+        top: 1.3rem;
+        width: 0.8rem;
+        height: 0.35rem;
+    }
+    .eight .birth {
+        width: 1rem;
+    }
+
+    .eight .birth img.birthCrow {
+        top: 1.25rem;
+        width: 0.5rem;
+        height: 0.2rem;
+    }
+
+    .eight .birth img.birthText {
+        top: 1.5rem;
+        width: 0.7rem;
+        height: 0.3rem;
+    }
 </style>

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