Bläddra i källkod

Signed-off-by: Changpeng Duan <838560574@qq.com>

Changpeng Duan 5 år sedan
förälder
incheckning
32b67e00c0

+ 56 - 5
app/src/api/getApiRes.js

@@ -51,31 +51,82 @@ export function testPic(postdata) {
 
 // 获取验证图片
 export function GenVerifyPic(postdata) {
-    let url = headapi + '/v1/Auth/GenVerifyPic';
+    let url = headapi + 'v1/Auth/GenVerifyPic';
     return getApiBasic(url, postdata);
 }
 
 // 手机获取验证码
 export function GetPhoneVFCode(postdata) {
-    let url = headapi + '/v1/Auth/GetPhoneVFCode';
+    let url = headapi + 'v1/Auth/GetPhoneVFCode';
     return getApiBasic(url, postdata);
 }
 
 export function SignIn(postdata) {
-    let url = headapi + '/v1/Auth/SignIn';
+    let url = headapi + 'v1/Auth/SignIn';
     return getApiBasic(url,postdata);
 }
 // 手机登录
 export function PhoneSignIn(postdata) {
-    let url = headapi + '/v1/Auth/PhoneSignIn';
+    let url = headapi + 'v1/Auth/PhoneSignIn';
     return getApiBasic(url,postdata);
 }
 
 // 用户微信绑定
 export function WXBind(postdata) {
-    let url = headapi + '/v1/Auth/WXBind';
+    let url = headapi + 'v1/Auth/WXBind';
     return getApiBasic(url,postdata);
 }
 
+// 用户微信登录
+export function WXSignIn(postdata) {
+    let url = headapi + 'v1/Auth/WXSignIn';
+    return getApiBasic(url,postdata);
+}
+
+// 用户微信解除绑定
+export function WXUnbind(postdata) {
+    let url = headapi + 'v1/Auth/WXUnbind';
+    return getApiBasic(url,postdata);
+}
+
+
+// Weixin
+
+// 预约课程
+export function OderAddByVipUser(postdata) {
+    let url = headapi + 'v1/Weixin/OderAddByVipUser';
+    return getApiBasic(url,postdata);
+}
+
+// 取消预约
+export function OderCancelByVipUser(postdata) {
+    let url = headapi + 'v1/Weixin/OderCancelByVipUser';
+    return getApiBasic(url,postdata);
+}
+// 预约记录查询
+export function OrderListQuery(postdata) {
+    let url = headapi + 'v1/Weixin/OrderListQuery';
+    return getApiBasic(url,postdata);
+}
+// 可预约店铺信息查询
+export function OrderShopQuery(postdata) {
+    let url = headapi + 'v1/Weixin/OrderShopQuery';
+    return getApiBasic(url,postdata);
+}
+// 可预约课程列表查询(未完成)
+export function SchoolTimeTableListQuery(postdata) {
+    let url = headapi + 'v1/Weixin/SchoolTimeTableListQuery';
+    return getApiBasic(url,postdata);
+}
+// 消费记录查询
+export function VipUserConsumeListQuery(postdata) {
+    let url = headapi + 'v1/Weixin/VipUserConsumeListQuery';
+    return getApiBasic(url,postdata);
+}
+// 用户自身信息查询
+export function VipUserSelfQuery(postdata) {
+    let url = headapi + 'v1/Weixin/VipUserSelfQuery';
+    return getApiBasic(url,postdata);
+}
 
 

+ 11 - 2
app/src/page/login.vue

@@ -122,7 +122,13 @@
             // alert(document.body.clientWidth);
             this.getValImgSrc();
             this.overtime = new Date();
-            this.checkcode();
+            let userAgent = navigator.userAgent;
+            if (userAgent.indexOf("Mozilla") > -1) {//判断是否Mozilla浏览器
+                // 浏览器测试
+            }else{
+                this.checkcode();
+            }
+
         },
         methods: {
             // 获取CODE
@@ -289,7 +295,10 @@
                     if (res.Code == 0) {
                         that.res = res.Rs;
                         localStorage.token = res.Rs.token;
-                        that.bindWx();
+                        // that.bindWx();
+                        // 607862e8828013be90c2ccb78468b43a
+                        // test
+                        that.$router.push({path: '/'});
                     } else {
                         if (res.Code == 10005) {
                             that.$refs.userpwd.value = '';

+ 26 - 5
app/src/page/mainpage.vue

@@ -5,12 +5,13 @@
             俱乐部场馆共 {{shopNum}} 处
         </span>
         <ul class="list">
-            <li v-for="l in list" @click="goAppoint(l)">
+            <li v-for="l in list" @click="goAppoint(l)" v-if="l.Status == 1">
                 <img src="../static/images/main/771.png" height="133" width="130"/>
                 <div class="rt">
-                    <h5>{{l.name}}</h5>
+                    <h5>{{l.ShopName}}</h5>
                     <span>今日预约名额剩余{{l.Recovered}}人</span>
-                    <em class="green" v-if="l.Status == 1">点击预约</em>
+                    <span>地址:{{l.Addr}}</span>
+                    <em class="green" v-if="l.WxStatus == 1">点击预约</em>
                     <em class="red" v-else>不可预约</em>
                 </div>
             </li>
@@ -21,6 +22,7 @@
 
 <script>
     import {
+        OrderShopQuery,
         testSelect,
         testTable,
     } from '../api/getApiRes.js'
@@ -55,7 +57,7 @@
                     token: localStorage.token,
                 };
                 let postdata = qs.stringify(param);
-                testTable(postdata).then(res => {
+                OrderShopQuery(postdata).then(res => {
                     let json = res;
                     if (json.Code == 0) {
                         that.list = json.Rs;
@@ -87,6 +89,25 @@
                 }
             }
         },
+        beforeRouteEnter(to, from, next) {
+            next(vm => {
+                //因为当钩子执行前,组件实例还没被创建
+                // vm 就是当前组件的实例相当于上面的 this,所以在 next 方法里你就可以把 vm 当 this 来用了。
+                if (to.name == '') {
+                    vm.getList();
+                }
+            });
+        },
+        watch: {
+            $route(to) {
+                if (to.name == '') {
+                    this.getList();
+                }
+            },
+            'active'() {
+                this.getList();
+            }
+        },
         components: {
             bottomTab
         }
@@ -223,7 +244,7 @@
         font-weight: normal;
         font-size: 16px;
         padding-right: 1px;
-        margin-top: 20px;
+        margin-top: 5px;
         float: right;
         text-align: right;
     }

+ 61 - 26
app/src/page/mine.vue

@@ -7,49 +7,48 @@
             </span>
             <div class="user">
                 <img src="../static/images/mine/User.png" height="53" width="53"/>
-                <span>{{user.name}}</span>
-<!--                <p @click="change">修改</p>-->
-                <em>{{user.userCode}}</em>
+                <span>{{user.Name}}</span>
+                <em>{{user.Phone}}</em>
             </div>
             <div class="value">
-                <div class="vTitle year" v-if="user.level == 0"><i></i>年会员</div>
-                <div class="vTitle price" v-if="user.level == 1"><i></i>充值会员</div>
+                <div class="vTitle year" v-if="user.VipType == 0"><i></i>年会员</div>
+                <div class="vTitle price" v-if="user.VipType == 1"><i></i>充值会员</div>
                 <div class="vNum">
                     <div class="center">
                         总{{user.kick}}课时
                     </div>
-                    <em>(有效期至2020.12.09)</em>
+                    <em v-if="user.VipType == 0">(有效期至{{user.ExpTime |fmtTime}})</em>
                 </div>
                 <mu-flex class="linear-progress">
-                    <mu-linear-progress mode="determinate" :value="30"  :size="10"  color="secondary"></mu-linear-progress>
+                    <mu-linear-progress mode="determinate" :value="user.ClassRemain / user.ClassTotal *100"  :size="10"  color="secondary"></mu-linear-progress>
                 </mu-flex>
                 <div class="limit">
-                    <em>剩余 {{user.kick}} 课时</em>
-                    <span>完成 {{user.kick}} 课时</span>
+                    <em>剩余 {{user.ClassRemain}} 课时</em>
+                    <span>完成 {{user.ClassFinish}} 课时</span>
                 </div>
             </div>
             <div class="dataSum">
                 <div class="row">
                     <em>卡路里(月度)</em>
                     <div class="mid midl"></div>
-                    <span>{{user.kick}}</span>
+                    <span>{{user.CalorieMonth}}</span>
                 </div>
                 <div class="row">
                     <em>总卡路里</em>
                     <div class="mid"></div>
-                    <span>{{user.kick}}</span>
+                    <span>{{user.CalorieTotal}}</span>
                 </div>
             </div>
             <div class="dataSum">
                 <div class="row">
                     <em>CK(月度)</em>
                     <div class="mid midl"></div>
-                    <span>{{user.kick}}</span>
+                    <span>{{user.CKMonth}}</span>
                 </div>
                 <div class="row">
                     <em>总CK</em>
                     <div class="mid"></div>
-                    <span>{{user.kick}}</span>
+                    <span>{{user.CKTotal}}</span>
                 </div>
             </div>
             <div class="btn_center">
@@ -64,6 +63,7 @@
     import axios from 'axios';
     import bottomTab from '../components/bottomTab'
     import {
+        VipUserSelfQuery,
         testSelect,
         testTable,
     } from '../api/getApiRes.js'
@@ -86,15 +86,17 @@
                     timeLong: '',
                 },
                 user: {
-                    name: '',
-                    userCode: '',
-                    remain: 0,
-                    Class: 0,
-                    sum: 0,
-                    Cal: 0,
-                    sumCal: 0,
-                    ck: 0,
-                    sumCk: 0,
+                    CKMonth:0,
+                    CKTotal:0,
+                    CalorieMonth:0,
+                    CalorieTotal:0,
+                    ClassFinish:0,
+                    ClassRemain:0,
+                    ClassTotal:0,
+                    ExpTime:0,
+                    Name:'',
+                    Phone:'',
+                    VipType:0,
                 }
             }
         },
@@ -122,17 +124,50 @@
                     active: this.active
                 };
                 let postdata = qs.stringify(param);
-                testTable(postdata).then(res => {
+                VipUserSelfQuery(postdata).then(res => {
                     let json = res;
                     if (json.Code == 0) {
-                        that.user = json.Rs[0];
+                        that.user = json.Rs;
                     } else {
                         that.$message.error(json.Memo);
                     }
                 })
             },
-            change() {
-
+        },
+        filters: {
+            fmtTime: function (value) {
+                if(!value){
+                    return 0
+                }else{
+                    let date = new Date(value);
+                    let y = date.getFullYear();
+                    let MM = date.getMonth() + 1;
+                    MM = MM < 10 ? ('0' + MM) : MM;
+                    let d = date.getDate();
+                    d = d < 10 ? ('0' + d) : d;
+                    let h = date.getHours();
+                    h = h < 10 ? ('0' + h) : h;
+                    let m = date.getMinutes();
+                    m = m < 10 ? ('0' + m) : m;
+                    let s = date.getSeconds();
+                    s = s < 10 ? ('0' + s) : s;
+                    return y + '-' + MM + '-' + d ;
+                }
+            },
+        },
+        beforeRouteEnter(to, from, next) {
+            next(vm => {
+                //因为当钩子执行前,组件实例还没被创建
+                // vm 就是当前组件的实例相当于上面的 this,所以在 next 方法里你就可以把 vm 当 this 来用了。
+                if (to.name == 'mine') {
+                    vm.getInfo();
+                }
+            });
+        },
+        watch: {
+            'active'() {
+                console.log(123);
+                this.getList();
             }
         },
         components: {

+ 102 - 28
app/src/page/record.vue

@@ -14,26 +14,26 @@
             <ul class="list">
                 <li v-for="l in list">
                     <div class="lt">
-                        <h5>{{l.expTime}}</h5>
-                        <span>{{l.timeLong}}</span>
+                        <h5>{{l.CurrentDate}}</h5>
+                        <span>{{l.BeginStr}}-{{l.EndStr}}</span>
                     </div>
                     <div class="md">
                         <em>
-                            {{l.name}}
+                            {{l.ClassName}}
                         </em>
                         <span class="green" v-if="l.Status == 0">
-                            预约成功
+                            预约上课
                         </span>
                         <span class="red" v-if="l.Status == 1">
-                            预约失败
+                            预约未到
                         </span>
                     </div>
                     <div class="rt">
                         <div class="cancleBtn" v-if="l.Status == 0" @click="cancleAppoint(l)">取消</div>
                         <span v-if="l.Status == 1" class="isFinish">
-                          已完成
+                            已完成
                         </span>
-                        <span class="red" v-if="l.Status == 2" >
+                        <span class="red" v-if="l.Status == 2">
                             已取消
                         </span>
                         <em v-if="l.Status == 3">
@@ -51,6 +51,8 @@
     import axios from 'axios';
     import bottomTab from '../components/bottomTab'
     import {
+        OrderListQuery,
+        VipUserConsumeListQuery,
         testSelect,
         testTable,
     } from '../api/getApiRes.js'
@@ -78,38 +80,62 @@
             this.getList();
         },
         methods: {
-            cancleAppoint(row){
+            cancleAppoint(row) {
                 let that = this;
                 this.$confirm('是否取消前课程预约?', '提示', {
                     type: 'warning'
                 }).then(({result}) => {
-                        if (result) {
-                            let param = {
-                                token: localStorage.token,
-                            };
-                            let postdata = qs.stringify(param);
-                            testTable(postdata).then(res => {
-                                let json = res;
-                                if (json.Code == 0) {
-                                    that.Toast('当前课程已取消预约','success');
-                                    that.getList();
-                                } else {
-                                    that.Toast(json.Memo + ',错误码:' + json.Code);
-                                }
-                            })
+                    if (result) {
+                        let param = {
+                            token: localStorage.token,
+                        };
+                        let postdata = qs.stringify(param);
+                        testTable(postdata).then(res => {
+                            let json = res;
+                            if (json.Code == 0) {
+                                that.Toast('当前课程已取消预约', 'success');
+                                that.getList();
+                            } else {
+                                that.Toast(json.Memo + ',错误码:' + json.Code);
+                            }
+                        })
+                    } else {
+                        this.$toast.message('点击了取消');
+                    }
+                });
+            },
+            getOrderListQuery(statusList){
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    statusList: statusList,
+                    start:1,
+                    tableMax :10,
+                };
+                let postdata = qs.stringify(param);
+                if(parseInt(this.active) == 0 || parseInt(this.active) == 1){
+                    OrderListQuery(postdata).then(res => {
+                        let json = res;
+                        if (json.Code == 0) {
+                            that.list = json.Rs;
+                            if (that.list) {
+                                that.num = json.Rs.length;
+                            }
                         } else {
-                            this.$toast.message('点击了取消');
+                            that.$message.error(json.Memo);
                         }
-                });
+                    }) ;
+                }
             },
-            getList() {
+            getVipUserConsumeListQuery(){
                 let that = this;
                 let param = {
                     token: localStorage.token,
-                    active: this.active
+                    start:1,
+                    tableMax :10,
                 };
                 let postdata = qs.stringify(param);
-                testTable(postdata).then(res => {
+                VipUserConsumeListQuery(postdata).then(res => {
                     let json = res;
                     if (json.Code == 0) {
                         that.list = json.Rs;
@@ -121,8 +147,43 @@
                     }
                 })
             },
+            getList() {
+                let statusList = '';
+                switch (parseInt(this.active)) {
+                    // 已预约
+                    case 0:
+                        statusList = 1;
+                        this.getOrderListQuery(statusList);
+                        break;
+                        // 预约记录
+                    case 1:
+                        statusList = '1,2,3,4';
+                        this.getOrderListQuery(statusList);
+                        break;
+                        // 消费记录
+                    case 2:
+                        statusList = 1;
+                        this.getVipUserConsumeListQuery(statusList);
+                        break;
+                }
+            },
+        },
+        beforeRouteEnter(to, from, next) {
+            next(vm => {
+                //因为当钩子执行前,组件实例还没被创建
+                // vm 就是当前组件的实例相当于上面的 this,所以在 next 方法里你就可以把 vm 当 this 来用了。
+                if (to.name == 'record') {
+                    console.log(123);
+                    vm.getList();
+                }
+            });
         },
         watch: {
+            '$route'(to) {
+                if (to.name == 'record') {
+                    this.getList();
+                }
+            },
             'active'() {
                 this.getList();
             }
@@ -214,10 +275,12 @@
         background: #fff;
         border-bottom: 1px solid #ccc;
     }
+
     .list .lt {
         width: 120px;
         float: left;
     }
+
     .list .lt h5 {
         font-family: "PingFang SC";
         font-weight: normal;
@@ -226,6 +289,7 @@
         color: #4e4e4e;
         margin: 0;
     }
+
     .list .lt span {
         font-family: "PingFang SC";
         font-weight: normal;
@@ -233,12 +297,14 @@
         text-align: left;
         color: #909090;
     }
+
     .list .md {
         max-width: 200px;
         /*width: 220px;*/
         float: left;
         padding-top: 5px;
     }
+
     .list .rt {
         width: 55px;
         float: right;
@@ -248,6 +314,7 @@
         margin: 0 auto;
         padding-top: 4px;
     }
+
     .md em {
         float: left;
         font-family: "PingFang SC";
@@ -257,6 +324,7 @@
         color: #3b3b3b;
         margin-right: 20px;
     }
+
     .md span {
         font-family: "PingFang SC";
         font-weight: normal;
@@ -265,12 +333,15 @@
         color: #37cb00;
         line-height: 30px;
     }
+
     span.green {
         color: #37cb00;
     }
+
     span.red {
-        color:#FF453C;
+        color: #FF453C;
     }
+
     .rt span {
         float: right;
         line-height: 35px;
@@ -281,6 +352,7 @@
         color: #909090;
 
     }
+
     .rt .red {
         font-family: "PingFang SC";
         font-weight: normal;
@@ -288,6 +360,7 @@
         text-align: left;
         color: #f8847f;
     }
+
     .rt .cancleBtn {
         width: 55px;
         height: 24px;
@@ -300,6 +373,7 @@
         line-height: 24px;
         margin-top: 6px;
     }
+
     .rt em {
         font-family: "PingFang SC";
         font-weight: normal;

+ 7 - 10
app/src/router/index.js

@@ -14,12 +14,10 @@ let NPconfig = {
 }
 Vue.use(NProgress,NPconfig);
 
-
-
 const routes = [
     {
         path: '/',
-        name: 'index',
+        name: '',
         component: () => import( '../page/index.vue'),
         meta: {index: 0},//meta对象的index用来定义当前路由的层级,由小到大,由低到高
         children: [
@@ -88,13 +86,12 @@ const router = new VueRouter({
 router.beforeEach((to,from,next)=>{
     NProgress.start()
     const isLogin = localStorage.token? true : false;
-    next();
-    // if(to.path == '/login' || to.path == '/register'){//'login'和'register'相当于是路由白名单
-    //     next();
-    // }else{
-    //     //如果token存在,就正常跳转,如果不存在,则说明未登陆,则跳转到'login'
-    //     isLogin? next() : next("/login");
-    // }
+    if(to.path == '/login' || to.path == '/register'){//'login'和'register'相当于是路由白名单
+        next();
+    }else{
+        //如果token存在,就正常跳转,如果不存在,则说明未登陆,则跳转到'login'
+        isLogin? next() : next("/login");
+    }
 });
 
 router.afterEach(() => {

+ 0 - 3
app/vue.config.js

@@ -13,7 +13,4 @@ module.exports = {
     },
     // 输出文件目录
     outputDir: 'D:/wwwroot/flyLongApp/build',
-    // outputDir: 'D:/wwwroot/wifiDig/muse/electron/static_mobile',
-    // publicPath : './',
-
 }

+ 26 - 0
pc/src/Global.js

@@ -302,4 +302,30 @@ turnStdToOption = function (data) {
         }
     })
     return ids
+}
+
+numberToWeekdays = function(val) {
+    switch (parseInt(val)) {
+        case 1:
+            return '星期一'
+            break;
+        case 2:
+            return '星期二'
+            break;
+        case 3:
+            return '星期三'
+            break;
+        case 4:
+            return '星期四'
+            break;
+        case 5:
+            return '星期五'
+            break;
+        case 6:
+            return '星期六'
+            break;
+        case 0:
+            return '星期天'
+            break;
+    }
 }

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

@@ -194,6 +194,11 @@ export function ClassOngoingList(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/ClassOngoingList';
     return getApiBasic(url, postdata);
 }
+// 课程详情判断是否可删除
+export function STTDetailAllowDelCheck(postdata) {
+    let url = headapi + 'v1/SchoolTimeTable/STTDetailAllowDelCheck';
+    return getApiBasic(url, postdata);
+}
 // 下课记录详情删除
 export function ClassOverDetailDel(postdata) {
     let url = headapi + 'v1/SchoolTimeTable/ClassOverDetailDel';

+ 6 - 0
pc/src/assets/css/panel.css

@@ -15,6 +15,7 @@
 .container {
     width: 100%;
     overflow: hidden;
+    overflow-y: scroll;
     display: block;
     margin: 0 auto;
 }
@@ -297,4 +298,9 @@
 }
 /deep/ .el-checkbox {
     margin-right: 0;
+}
+ .el-transfer-panel__item.el-checkbox .el-checkbox__label {
+    text-align: left;
+    float: left;
+     text-indent: 20px;
 }

BIN
pc/src/assets/img/main/empty.jpg


+ 1 - 1
pc/src/components/Navside.vue

@@ -125,7 +125,7 @@
     /*注释*/
     .Navside {
         width: 100%;
-        height: 100%;
+        height: 910px;
         overflow: hidden;
         display: block;
         margin: 0 auto;

+ 3 - 3
pc/src/views/AdminManage.vue

@@ -6,7 +6,7 @@
                 <div class="panel_control">
                     <el-row :gutter="20">
                         <el-col :span="4">
-                            <em>用户名:</em>
+                            <em>名:</em>
                             <el-input v-model="panel.name" placeholder="请输入用户名"></el-input>
                         </el-col>
                         <el-col :span="4">
@@ -628,8 +628,8 @@
 <style scoped>
     @import "../assets/css/panel.css";
 
-    .context {
-        overflow: hidden;
+    .context {   height: 760px;         overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 2 - 2
pc/src/views/AdminSetting.vue

@@ -330,8 +330,8 @@
         float: right;
         bottom: 35px;
     }
-    .context {
-        overflow: hidden;
+    .context {   height: 760px;         overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 35 - 15
pc/src/views/EditLessonManage.vue

@@ -191,6 +191,7 @@
         testTableLong,
         testSelect,
         ClassListQuery,
+        STTDetailAllowDelCheck,
         ClassDetailOne
     } from "../api/getApiRes";
 
@@ -244,6 +245,8 @@
                     ClassId: '',
                     OrderToplimit: 1,
                     ConsumeHour: 1,
+                    WxOrder: 1,
+                    WxVisible: 1,
                 },
                 tabs: [
                     {
@@ -324,7 +327,7 @@
                     if (json.Code == 0) {
                         row.OrderToplimit = json.Rs.TopLimit;
                         row.ConsumeHour = json.Rs.ConsumeHour;
-                        row.WxOrder = json.Rs.WxOrder;
+                        // row.WxOrder = json.Rs.WxOrder; //不支持联动
                         row.WxVisible = json.Rs.WxVisible;
                     } else {
                         that.$message.error(json.Memo);
@@ -338,9 +341,26 @@
             },
             // 删除
             delRow(scope) {
-                let delIndex = parseInt(scope.$index)
-                let curIndex = parseInt(this.activeName) - 1;
-                this.tabs[curIndex].tableData.splice(delIndex, 1)
+                this.checkCannotDel(scope)
+            },
+            // 检测课表中课程可否删除
+            checkCannotDel(row) {
+                let that = this;
+                let param = {
+                    token: localStorage.token,
+                    regionid: row.Id,
+                };
+                let postdata = qs.stringify(param);
+                STTDetailAllowDelCheck(postdata).then(res => {
+                    let json = res;
+                    if (json.Code == 0) {
+                        let delIndex = parseInt(scope.$index)
+                        let curIndex = parseInt(this.activeName) - 1;
+                        this.tabs[curIndex].tableData.splice(delIndex, 1)
+                    } else {
+                        that.$message.error(json.Memo);
+                    }
+                })
             },
             // 提交课程
             confirmLessonTable() {
@@ -377,15 +397,13 @@
             // 保存课程
             EditLessonTable(planId) {
                 let that = this;
-                // if (this.checkData()) {
-                //     this.$message.error('数据内容不完整,请检查后重新输入');
-                //     return false
-                // }
+                // 校验提交的数据
+                if (!this.checkData) {
+                    return false
+                }
                 // 提交数据
-
                 let planRs = [];
                 let thisRow = {};
-                let timeLong = []
                 for (let i = 0; i < this.tabs.length; i++) {
                     for (let j = 0; j < this.tabs[i].tableData.length; j++) {
                         thisRow = this.tabs[i].tableData[j];
@@ -401,7 +419,6 @@
                         thisRow.StdId = thisRow.StdId ? thisRow.StdId : 0;
                         this.$delete(thisRow, 'Base');
                         this.$delete(thisRow, 'SpdId');
-                        // this.$delete(thisRow, 'timeLong');
                         planRs.push(thisRow);
                     }
                 }
@@ -437,8 +454,9 @@
                 // todo
                 let tableDate = this.tabs;
                 tableDate.map(function (item) {
-                    console.log(item.tableData);
+                    console.log(item);
                 })
+
             },
             // 新增一行
             addRow() {
@@ -514,8 +532,6 @@
                                         bt = new Date(2016, 9, 10, item.BeginStr.substr(0, 2), item.BeginStr.substr(3, 2));
                                         et = new Date(2016, 9, 10, item.EndStr.substr(0, 2), item.EndStr.substr(3, 2));
                                         item.timeLong = [bt, et];
-                                        // that.tabs[i - 1].tableData.push(item);
-                                        // tabs[0]是周一
                                         that.tabs[i].tableData.push(item);
 
                                     }
@@ -543,9 +559,11 @@
                     this.deepValue();
                     this.panel.name = '';
                     this.panel.week = '';
+                    this.panel.inputState = false
                 } else {
                     this.pageTitle = '编辑课程表'
                     this.getTableQuery();
+                    this.panel.inputState = true
                 }
             },
         },
@@ -561,12 +579,14 @@
 
     .context {
         overflow: hidden;
+        height: 760px;
+        overflow-y: scroll;
         display: block;
         margin: 0 auto;
         background-color: #fff !important;
         min-height: 100%;
         padding: 30px;
-        padding-bottom: 60px;
+        padding-bottom: 10px;
     }
 
     .panel-body {

+ 36 - 27
pc/src/views/EditLessonTable.vue

@@ -60,7 +60,7 @@
                         align="center"
                 >
                     <template slot-scope="scope">
-                        <el-select v-model="scope.row.ClassId" @change="getRowTop(scope.row)" >
+                        <el-select v-model="scope.row.ClassId" @change="getRowTop(scope.row)">
                             <el-option
                                     v-for="item in panel.options"
                                     :key="item.value"
@@ -230,10 +230,12 @@
             // 加载课程选项
             this.panelSelect();
             if (this.$route.query.id == 0) {
+                this.pageTitle = '新增课程表模板'
                 //  深拷贝赋初始值
                 this.deepValue();
                 this.panel.name = '';
             } else {
+                this.pageTitle = '编辑课程表模板'
                 // 读取赋值
                 this.getTableQuery();
             }
@@ -349,15 +351,10 @@
             // 修改课程模板
             EditLessonTable(planId) {
                 let that = this;
-                // if (this.checkData()) {
-                //     this.$message.error('数据内容不完整,请检查后重新输入');
-                //     return false
-                // }
                 // 提交数据
 
                 let planRs = [];
                 let thisRow = {};
-                let timeLong = []
                 for (let i = 0; i < this.tabs.length; i++) {
                     for (let j = 0; j < this.tabs[i].tableData.length; j++) {
                         thisRow = this.tabs[i].tableData[j];
@@ -372,7 +369,6 @@
                         thisRow.EndStr = getHoursAndMin(thisRow.timeLong[1]);
                         this.$delete(thisRow, 'Base');
                         this.$delete(thisRow, 'SpdId');
-                        // this.$delete(thisRow, 'timeLong');
                         planRs.push(thisRow)
                     }
                 }
@@ -387,29 +383,40 @@
                     planRs: res,
                 };
                 let postdata = qs.stringify(param);
-                SttPlanDetailBatchSave(postdata).then(res => {
-                    let json = res;
-                    if (json.Code == 0) {
-                        that.$message({
-                            showClose: true,
-                            message: '课程模板已上传成功!',
-                            type: 'success'
-                        });
-                        this.$router.push({
-                            path: '/lessonTable'
-                        });
-                        // this.getTableQuery();
-                    } else {
-                        that.$message.error(json.Memo);
-                    }
+                // 得等数组装完才能校验
+                this.checkData(planRs).then(result => {
+                    console.log(result);
+                    SttPlanDetailBatchSave(postdata).then(res => {
+                        let json = res;
+                        if (json.Code == 0) {
+                            that.$message({
+                                showClose: true,
+                                message: '课程模板已上传成功!',
+                                type: 'success'
+                            });
+                            this.$router.push({
+                                path: '/lessonTable'
+                            });
+                            // this.getTableQuery();
+                        } else {
+                            that.$message.error(json.Memo);
+                        }
+                    })
                 })
             },
             // 检查数据
-            checkData() {
-                // todo
-                let tableDate = this.tabs;
+            checkData: async function(planRs) {
+                let that = this;
+                let tableDate = planRs;
                 tableDate.map(function (item) {
-                    console.log(item.tableData);
+                    if (!item.ClassId) {
+                        let days = numberToWeekdays(item.WeekDay);
+                        let lessonIndex = parseInt(item.lessonIndex + 1);
+                        that.$message.error(days + '第' + lessonIndex + '节课有课程未选择,请选择后再提交');
+                        return false
+                    }else{
+                        return true
+                    }
                 })
             },
             // 新增一行
@@ -518,7 +525,9 @@
     }
 
     .context {
-        overflow: hidden;
+        height: 760px;
+        overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 2 - 2
pc/src/views/EditLessonTable2.vue

@@ -316,8 +316,8 @@
         font-style: normal;
     }
 
-    .context {
-        overflow: hidden;
+    .context {   height: 760px;         overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 22 - 50
pc/src/views/Index.vue

@@ -47,42 +47,6 @@
                 this.aSideState = !this.aSideState;
                 this.isCollapse = !this.isCollapse;
             },
-            // handleTabsAdd: function (data) {
-            //     let that = this;
-            //     let str = ""; //存放第一层遍历的值
-            //     let strArray = []; //存放第二层遍历的值
-            //     let item = {};
-            //     if (data == 1) {
-            //         // 首页直接处理了
-            //         item = {
-            //             title: '系统首页',
-            //             name: '系统首页',
-            //             clmurl: '/',
-            //         };
-            //     } else {
-            //         for (var i = 0; i < Navs.length; i++) {
-            //             str += Navs[i].id; //获取第一层的值
-            //             for (var j = 0; j < Navs[i].childs.length; j++) {
-            //                 if (Navs[i].childs[j].clmid == data) {
-            //                     strArray.push(Navs[i].childs[j])
-            //                 }
-            //             }
-            //         }
-            //         item = {
-            //             title: strArray[0].clmname,
-            //             name: strArray[0].clmname,
-            //             clmurl: strArray[0].clmurl,
-            //         };
-            //     }
-            //     // 去掉重复的
-            //     that.handleTabsList.map(function (e, i) {
-            //         if (e.title == item.title) {
-            //             that.handleTabsList.splice(i, 1)
-            //         }
-            //     });
-            //     that.handleTabsList.push(item);
-            //     that.editableTabsValue = item.title;
-            // },
         },
         components: {
             Headside,
@@ -95,32 +59,29 @@
 <style>
     .el-header {
         padding: 0 !important;
-        height: 72px!important;
+        height: 72px !important;
     }
+
     .shortElaside {
-        width: 60px!important;
+        width: 60px !important;
         overflow: hidden;
         height: 100%;
         float: left;
     }
+
     .lognElaside {
-        width: 256px!important;
+        width: 256px !important;
         overflow: hidden;
         height: 100%;
         float: left;
     }
+
     /deep/ .nav {
         width: 60px;
     }
-     .el-main {
-        width: 100%;
-        height: 910px;
-        overflow: hidden;
-        display: block;
-        margin: 0 auto;
-         padding-bottom: 30px;
-        overflow-y: scroll;
-    }
+
+
+
     .IndexContainer {
         position: absolute;
         top: 0;
@@ -129,16 +90,17 @@
         right: 0;
         background: #F0F2F5;
     }
-  .IndexContainer>.el-container {
+
+    .IndexContainer > .el-container {
         width: 100%;
         height: 100%;
         overflow: hidden;
         display: block;
         margin: 0 auto;
     }
+
     .footer {
         position: absolute;
-        /*left: 1%;*/
         bottom: 0px;
         width: 100%;
         padding: 10px;
@@ -152,4 +114,14 @@
         background: #F0F2F5;
         z-index: 222;
     }
+
+  .el-main {
+        width: 100%;
+        min-height: 800px;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        overflow-y: hidden;
+        padding: 10px 20px;
+    }
 </style>

+ 2 - 2
pc/src/views/Lesson.vue

@@ -729,8 +729,8 @@
 <style scoped>
     @import "../assets/css/panel.css";
 
-    .context {
-        overflow: hidden;
+    .context {   height: 760px;         overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 4 - 7
pc/src/views/LessonTable.vue

@@ -79,14 +79,9 @@
                 >
                     <template slot-scope="scope">
                         <el-button type="text" @click="goEdit(scope.row)">编辑</el-button>
-                        <!--                        <el-button type="text" @click="goEdit(scope.row)">详情</el-button>-->
                         <el-button type="text" @click="goEdit(scope.row)">预览本周</el-button>
-                        <el-button type="success" size="mini"
-                                   @click="openLessonTable(scope.row)">发布
+                        <el-button type="success" size="mini" @click="openLessonTable(scope.row)">发布
                         </el-button>
-                        <!--                        <el-button type="warning" size="mini" v-if="scope.row.Status == 2" @click="unpubilc(scope.row)">-->
-                        <!--                            取消发布-->
-                        <!--                        </el-button>-->
                     </template>
                 </el-table-column>
 
@@ -530,7 +525,9 @@
     @import "../assets/css/panel.css";
 
     .context {
-        overflow: hidden;
+        height: 760px;
+        overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 8 - 2
pc/src/views/Log.vue

@@ -88,6 +88,12 @@
                         <span v-if="scope.row.Parameter.length <= 20">{{scope.row.Parameter}}</span>
                     </template>
                 </el-table-column>
+                <el-table-column
+                        prop="OptInfo"
+                        label="操作信息"
+                        sortable
+                >
+                </el-table-column>
                 <el-table-column
                         prop="Result"
                         label="操作结果"
@@ -438,8 +444,8 @@
 <style scoped>
     @import "../assets/css/panel.css";
 
-    .context {
-        overflow: hidden;
+    .context {   height: 760px;         overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 52 - 24
pc/src/views/Main.vue

@@ -56,7 +56,7 @@
             <div class="finish">
                 <div class="title">
                     <h5>下课管理</h5>
-                    <span>{{getNowDate}}</span>
+<!--                    <span>{{getNowDate}}</span>-->
                 </div>
                 <ul>
                     <li v-for="c in PreFinishList">
@@ -73,6 +73,8 @@
                         </div>
                     </li>
                     <span class="tips" v-if="PreFinishList == 0">
+                           <img src="../assets/img/main/empty.jpg" height="116" width="92"/>
+                        <br>
                         暂无下课课程
                     </span>
                 </ul>
@@ -99,8 +101,10 @@
                         </em>
                     </el-card>
                     <span class="tips" v-if="classList == 0">
+                           <img src="../assets/img/main/empty.jpg" height="116" width="92"/>
+                        <br>
                         暂无预约课程,请先添加
-                        <router-link to="/lessonManage">课程表</router-link>
+                      <router-link to="/lessonManage">课程表</router-link>
                     </span>
                 </div>
             </div>
@@ -134,7 +138,9 @@
                             <span>剩余课时:<em :class="[{'red':as.RemainHour == 0}]">{{as.RemainHour}}课时</em></span>
                         </div>
                     </li>
-                    <span class="tips" v-if="PreFinishList == 0">
+                    <span class="tips middleTips" v-if="appointList == 0">
+                           <img src="../assets/img/main/empty.jpg" height="116" width="92"/>
+                        <br>
                         暂无预约,可进入
                         <router-link to="/appoint">预约管理</router-link>
                     </span>
@@ -218,7 +224,7 @@
                         that.NowCount = json.Rs.NowCount;
                         that.CountAdd = json.Rs.CountAdd;
                     } else {
-                        if(json.Code == 1010){
+                        if (json.Code == 1010) {
                             that.$message.error(json.Memo);
                             that.$router.push({path: '/login', query: {status: 1}});
                             return false
@@ -354,10 +360,10 @@
         },
         filters: {
             parseDate: function (value) {
-                if(!value){
+                if (!value) {
                     return false
-                }else{
-                    let res = nonTfmtDatetoLength(value,10).substr(5,10)
+                } else {
+                    let res = nonTfmtDatetoLength(value, 10).substr(5, 10)
                     return res;
                 }
             },
@@ -403,11 +409,11 @@
     .container .lt {
         width: 1173px;
         float: left;
-        margin-top: 10px;
+        margin-top: 0px;
     }
 
     .container .rt {
-        width: 410px;
+        width: 415px;
         height: 100%;
         float: right;
     }
@@ -421,7 +427,7 @@
 
     .lt .top li {
         width: 377px;
-        height: 160px;
+        height: 140px;
         float: left;
         background: #fff;
         border-radius: 12px;
@@ -435,7 +441,7 @@
 
     .top li img {
         float: left;
-        margin-top: 37px;
+        margin-top: 17px;
         margin-left: 30px;
         margin-right: 24px;
     }
@@ -443,7 +449,7 @@
     .top li .liRight {
         width: 200px;
         float: left;
-        margin-top: 37px;
+        margin-top: 17px;
     }
 
     .top .liRight h5 {
@@ -493,9 +499,9 @@
         display: block;
         margin: 0 auto;
         background: #fff;
-        margin-top: 20px;
+        margin-top: 15px;
         border-radius: 12px;
-        padding-top: 30px;
+        padding-top: 15px;
         padding-bottom: 0px;
     }
 
@@ -520,19 +526,22 @@
     }
 
     .finish ul {
+        width: 100%;
         overflow: hidden;
         display: block;
+        margin: 0 auto;
         padding-left: 30px;
         padding-right: 30px;
         margin: 0 auto;
-        margin-top: 25px;
+        margin-top: 10px;
     }
 
     .finish ul li {
         width: 347px;
-        height: 144px;
+        height: 149px;
+        overflow: hidden;
         float: left;
-        margin-bottom: 24px;
+        margin-bottom: 14px;
     }
 
     .finish ul li:nth-child(2) {
@@ -570,6 +579,7 @@
         border-bottom-left-radius: 7px;
         border-bottom-right-radius: 7px;
     }
+
     .finish .context em {
         width: 85px;
         overflow: hidden;
@@ -624,10 +634,10 @@
         display: block;
         margin: 0 auto;
         background: #fff;
-        margin-top: 20px;
+        margin-top: 15px;
         border-radius: 12px;
-        padding-top: 30px;
-        padding-bottom: 0px;
+        padding-top: 15px;
+        padding-bottom: 1px;
     }
 
     .appoint .title {
@@ -654,8 +664,8 @@
         overflow: hidden;
         display: block;
         margin: 0 auto;
-        padding-top: 26px;
-        padding-bottom: 30px;
+        padding-top: 25px;
+        padding-bottom: 25px;
         padding-left: 30px;
         padding-right: 30px;
     }
@@ -735,11 +745,11 @@
         overflow: hidden;
         display: block;
         margin: 0 auto;
-        margin-top: 10px;
+        margin-top: 0px;
         background: #fff;
         padding: 0;
         border-radius: 12px;
-        min-height: 920px;
+        min-height: 826px;
         background: #fff;
     }
 
@@ -764,8 +774,12 @@
     }
 
     .rtContext ul {
+        width: 100%;
         overflow: hidden;
         display: block;
+        height: 100%;
+        overflow: hidden;
+        overflow-y: scroll;
         margin: 0 auto;
         padding-left: 30px;
         padding-right: 30px;
@@ -858,7 +872,21 @@
     .asContent .yellow {
         color: #FFDD00;
     }
+
     /deep/ a {
         color: #03B1FF;
     }
+    .tips {
+        color: #333;
+        font-size: 14px!important;
+        width: 100%;
+        overflow: hidden;
+        display: block;
+        margin: 0 auto;
+        margin-top: 10px;
+        line-height: 30px;
+    }
+    .middleTips {
+        margin-top: 240px;
+    }
 </style>

+ 6 - 3
pc/src/views/Member.vue

@@ -815,6 +815,7 @@
                 let param = {
                     token: localStorage.token,
                     vipType: '',
+                    classType: 1,//不显示 午饭类 课程
                     start: 1,
                     expDay: 0,
                     tableMax: 9999,
@@ -995,13 +996,15 @@
 <style scoped>
     @import "../assets/css/panel.css";
 
-    .context {
-        overflow: hidden;
+    .context {   height: 760px;         overflow-y: scroll;
+
+        overflow-y: scroll;
+        height: 760px;
         display: block;
         margin: 0 auto;
         background-color: #fff !important;
         padding: 30px;
-        padding-bottom: 60px;
+        padding-bottom: 30px;
     }
 
     .panel-body {

+ 2 - 2
pc/src/views/ShopManage.vue

@@ -498,8 +498,8 @@
 <style scoped>
     @import "../assets/css/panel.css";
 
-    .context {
-        overflow: hidden;
+    .context {   height: 760px;         overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 3 - 3
pc/src/views/appoint.vue

@@ -58,7 +58,6 @@
                                     <el-progress
                                             :percentage="parseFloat((scope.row.OrderCount/scope.row.OrderToplimit * 100).toFixed(2))"
                                             :format="format"
-                                            status="default"
                                     ></el-progress>
                                 </template>
                             </el-table-column>
@@ -93,7 +92,7 @@
                                 </template>
                             </el-table-column>
                             <el-table-column
-                                    prop="Status"
+                                    prop="StdId"
                                     label="操作"
                             >
                                 <template slot-scope="scope">
@@ -1300,7 +1299,8 @@
     @import "../assets/css/panel.css";
 
     .context {
-        overflow: hidden;
+        height: 760px;
+        overflow-y: scroll;
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 2 - 2
pc/src/views/coach.vue

@@ -547,8 +547,8 @@
 <style scoped>
     @import "../assets/css/panel.css";
 
-    .context {
-        overflow: hidden;
+    .context {   height: 760px;         overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 2 - 1
pc/src/views/cost.vue

@@ -956,7 +956,8 @@
     @import "../assets/css/panel.css";
 
     .context {
-        overflow: hidden;
+        height: 760px;
+        overflow-y: scroll;
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 2 - 1
pc/src/views/finish.vue

@@ -276,7 +276,8 @@
     @import "../assets/css/panel.css";
 
     .context {
-        overflow: hidden;
+        height: 760px;
+        overflow-y: scroll;
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 18 - 14
pc/src/views/finishDetail.vue

@@ -258,6 +258,7 @@
                     let json = res;
                     if (json.Code == 0) {
                         that.form.dialogdata = turnResToOptionByViper(json.Rs);
+                        console.log(that.form.dialogdata);
                     } else {
                         that.$message.error(json.Memo);
                     }
@@ -318,11 +319,6 @@
             // 禁用
             pauseRow(row, status) {
                 let that = this;
-                // this.$confirm('是否禁用用户' + row.name + '?', '禁用操作', {
-                //     confirmButtonText: '确定',
-                //     cancelButtonText: '取消',
-                //     type: 'warning'
-                // }).then(() => {
                 let param = {
                     token: localStorage.token,
                     stdId: this.$route.query.id,
@@ -344,12 +340,6 @@
                         that.$message.error(json.Memo);
                     }
                 })
-                // }).catch(() => {
-                //     this.$message({
-                //         type: 'info',
-                //         message: '已取消禁用'
-                //     });
-                // });
             },
             // 关闭所有
             allDialogClose() {
@@ -449,16 +439,28 @@
                     }
                 })
             },
-            // 新增会员
+            // 确认下课
             addFinish() {
                 this.clearForm();
+                // 重新获得教练名单
+                this.getCoachOption();
                 this.dialogFinishVisible = true
                 this.btnType = 0;
                 this.dialogTitle = '确认下课'
             },
+            // 添加下课会员
             addFinishMember() {
+                let that = this;
                 this.clearForm();
                 this.getClassVipuserQuery();
+                this.dialogValue = [];
+                let std = [];
+                if (this.tableData) {
+                    this.tableData.map(function (item) {
+                        std.push(item.UserId)
+                    })
+                }
+                that.dialogValue = std;
                 this.dialogVisible = true
             },
             // 删除
@@ -614,7 +616,7 @@
                 if (to.name == 'finishDetail') {
                     this.BeginTime = nonTfmtDatetoLength(this.$route.query.BeginTime, 16);
                     this.ClassName = this.$route.query.ClassName;
-                    console.log(this.form.ClassName);
+                    this.getTableQuery();
                 }
             },
         },
@@ -625,7 +627,9 @@
     @import "../assets/css/panel.css";
 
     .context {
-        overflow: hidden;
+        height: 760px;
+        overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 9 - 7
pc/src/views/lessonManage.vue

@@ -35,16 +35,16 @@
                     <template slot-scope="scope">
                         <div class="rowHeight">
                             <!--                            未上线-->
-                            <span class="readyTime" v-if="scope.row.Online == 0">
+                            <span class="readyTime" v-if="scope.row.Diffweek < 0">
                                {{scope.row.BeginDate}} - {{scope.row.EndDate}}
                         </span>
                             <!--                            已上线-->
-                            <span class="CurTime" v-if="scope.row.Online == 1">
+                            <span class="CurTime" v-if="scope.row.Diffweek == 0">
                              {{scope.row.BeginDate}} - {{scope.row.EndDate}}
                         </span>
                             <!--                            当前进行-->
-                            <i class="curIcon" v-if="scope.row.Status == 1 && scope.row.Online == 1"></i>
-                            <span class="runTime" v-if="scope.row.Status == 2 && scope.row.Online == 1">
+                            <i class="curIcon" v-if="scope.row.Status == 1 && scope.row.Diffweek == 0"></i>
+                            <span class="runTime" v-if="scope.row.Status == 2 && scope.row.Diffweek == 0">
                               {{scope.row.BeginDate}} - {{scope.row.EndDate}}
                         </span>
                         </div>
@@ -57,8 +57,9 @@
                 >
                 </el-table-column>
                 <el-table-column
-                        prop="EndDate"
+                        prop="CreateColumn.CreatedAt"
                         label="最后编辑时间"
+                        :formatter="filterFmtDate"
                         sortable
                 >
                 </el-table-column>
@@ -571,6 +572,7 @@
                         that.getTableQuery();
                     } else {
                         that.$message.error(json.Memo);
+                        row.Online = 0;
                     }
                 })
             },
@@ -581,8 +583,8 @@
 <style scoped>
     @import "../assets/css/panel.css";
 
-    .context {
-        overflow: hidden;
+    .context {   height: 760px;         overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 2 - 2
pc/src/views/record.vue

@@ -352,8 +352,8 @@
 <style scoped>
     @import "../assets/css/panel.css";
 
-    .context {
-        overflow: hidden;
+    .context {   height: 760px;         overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;

+ 2 - 2
pc/src/views/setting.vue

@@ -382,8 +382,8 @@
         bottom: 35px;
     }
 
-    .context {
-        overflow: hidden;
+    .context {   height: 760px;         overflow-y: scroll;
+
         display: block;
         margin: 0 auto;
         background-color: #fff !important;