guojy 1 éve
szülő
commit
4943015f07

+ 1 - 0
build/webpack.dev.conf.js

@@ -36,6 +36,7 @@ const devWebpackConfig = merge(baseWebpackConfig, {
     compress: true,
     host: HOST || config.dev.host,
     port: PORT || config.dev.port,
+    disableHostCheck: true,
     open: config.dev.autoOpenBrowser,
     overlay: config.dev.errorOverlay ?
       {

+ 1 - 1
config/index.js

@@ -14,7 +14,7 @@ module.exports = {
 
     // Various Dev Server settings
     host: 'localhost', // can be overwritten by process.env.HOST
-    port: 8089, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
+    port: 8088, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
     autoOpenBrowser: false,
     errorOverlay: true,
     notifyOnErrors: true,

+ 18 - 0
src/router/course.js

@@ -0,0 +1,18 @@
+  // 在线课程相关
+  const routes = [
+    {
+      path: '/courseHome',
+      name: 'courseHome',
+      component: () => import('@/view/course/home'),
+      label: '课程首页',
+      need_login: true,
+    },
+    {
+      path: '/courseLogin',
+      name: 'courseLogin',
+      component: () => import('@/view/course/user/login'),
+      label: '课程登录',
+      need_login: true,
+    },
+]
+export default routes

+ 2 - 0
src/router/index.js

@@ -5,6 +5,7 @@ import okrRouter from '@/router/okrRouter'
 import attRoute from '@/router/attRoute'
 import examineRouter from '@/router/examineRouter'
 import pointRoute from '@/router/pointRoute'
+import courseRoute from '@/router/course'
 
 //解决重复点击导航栏报错问题
 const originalPush = Router.prototype.replace
@@ -410,6 +411,7 @@ routers.push.apply(routers,attRoute);
 routers.push.apply(routers,okrRouter);
 routers.push.apply(routers,examineRouter);
 routers.push.apply(routers,pointRoute);
+routers.push.apply(routers,courseRoute);
 let routes_map = {}
 for (let i in routers) {
   routes_map[routers[i].name] = routers[i]

+ 89 - 0
src/view/course/home.vue

@@ -0,0 +1,89 @@
+<template>
+  <div class="page">
+    <div class="userInfo">
+      <van-row type="flex" justify="space-between" align="center">
+        <div class="user_tit">
+          <p>{{ user_info.name }}</p>
+          <span>ID:{{ user_info.wx_id }}</span>
+          <div class="user_leave">{{ user_info.isDearler?'经销商':'学员' }}</div>
+        </div>
+        <div class="userImage">
+          <userImage
+            class="about-me__avatar"
+            :img_url="user_info.img_url"
+            :user_name="user_info.name"
+            width="1.12rem"
+            height="1.12rem"
+          ></userImage>
+        </div>
+      </van-row>
+    </div>
+  </div>
+</template>
+
+<script>
+import Vue from "vue";
+import { Col, Row } from "vant";
+Vue.use(Col);
+Vue.use(Row);
+export default {
+  name: "",
+  components: {},
+  props: [],
+  data() {
+    return {
+      user_info: {
+        img_url: "",
+        wx_id: "wx15451154555",
+        name: "新人",
+        isDearler: true
+      }
+    };
+  },
+  created() {},
+  mounted() {},
+  methods: {},
+  computed: {}
+};
+</script>
+<style scoped lang="scss">
+.page {
+  box-sizing: border-box;
+  padding: 0.4rem 0 0;
+  background-color: #efefef;
+  .userInfo {
+    padding: 0.24rem 0.32rem;
+    // border: 1px solid #888;
+    border-radius: 0.2rem;
+    background: linear-gradient(
+      180deg,
+      #efefef 0%,
+      #ccc 40%,
+      #ccc 60%,
+      #efefef 100%
+    );
+    .user_tit {
+      p {
+        font-size: 0.32rem;
+        color: #000;
+        line-height: 2;
+        margin: 0;
+      }
+      span {
+        font-size: 0.24rem;
+        color: #888;
+        line-height: 1.4;
+        display: block;
+      }
+    }
+    .user_leave {
+        padding: 0 .1rem;
+        font-size: .23rem;
+        color: #888;
+        background-color: #fff;
+        line-height: 1.5;
+        border-radius: .2rem;
+    }
+  }
+}
+</style>

+ 715 - 0
src/view/course/user/login.vue

@@ -0,0 +1,715 @@
+<template>
+  <div class="login-box-parent" style="background:#fff;">
+    <div class="login-box" :class="{ input_focus: input_focus }">
+      <div class="flex-box-v" style="height: 100%;">
+        <div class="login-form-box flex-1" style="background-color:#FFF">
+          <div class="login-form-box-bg">
+            <!-- App背景 -->
+            <icon name="login_logo_bg" class="login_logo_bg"></icon>
+          </div>
+          <div style="height: 1rem;"></div>
+          <div class="login_logo">
+            <icon name="logo" class="app_logn"></icon>
+          </div>
+          <div class="setp1">
+            <van-cell-group style="margin-top:0.3rem;">
+              <van-field class="tel" left-icon="logo" label-class="hidden" label="" type="Number"
+                v-model="formData.username" placeholder="手机号" clearable style="color:#515151;caret-color:#26A2FF;"
+                name="手机号码" v-validate="'required|phone'">
+                <template slot="left-icon">
+                  <icon name="tel" class="login_tel"></icon>
+                </template>
+              </van-field>
+
+              <van-field class="psw" label-class="hidden" left-icon="logo" clearable type="password" v-model="formData.password" placeholder="密码" name="密码" v-validate="'required|alpha_dash|min:6'"  style="color:#515151;caret-color:#26A2FF;">
+                <template slot="left-icon">
+                  <icon name="pwd" class="login_pwd"></icon>
+                </template>
+              </van-field>
+
+            </van-cell-group>
+          </div>
+
+          <div style="padding:0 0.32rem">
+            <van-button class="login_button" color="#228bf8" size="large" :disabled="!next_btn_enable"
+              @click="sendLogin" type="info">登录</van-button>
+          </div>
+          <div style="padding:0.2rem 0.32rem 0.2rem;" class="reg_link_box">
+            <van-row>
+              <van-col span="12">
+                <div class="blue" @click="openUrl(1)">找回密码</div>
+              </van-col>
+              <!-- <van-col span="12" style="text-align: right;">
+                <div @click="openUrl(2)">注册免费试用</div>
+              </van-col> -->
+            </van-row>
+          </div>
+          <div style="text-align: center; padding:0 0.32rem;letter-spacing: 0.01rem"
+            v-if="(auths.length > 0&&isAndroid)||$isWx">
+            <van-divider>快捷登录</van-divider>
+            <div style="display: inline-block;" @click="doWeixinLogin">
+              <icon name="weixindenglu" style="width:1.2rem;"></icon>
+            </div>
+          </div>
+        </div>
+        <div class="footer flex-box-ce flex-center-center" v-if="!$isWx">
+          <van-checkbox icon-size="14px" v-model="isYsShow">登录即同意功道云</van-checkbox>
+          <span style="color:#28a2f1" @click="$router.push({ name: 'user_agreement' })">《服务协议》</span>
+          <span>&</span>
+          <span style="color:#28a2f1" @click="$router.push({ name: 'privacy_agreement' })">《隐私政策》</span>
+        </div>
+      </div>
+    </div>
+
+
+
+    <!-- 隐私条例 -->
+    <van-popup v-model="showYs" :close-on-click-overlay="false" class="popup-all">
+      <div style="position: relative;">
+        <div class="title">提示</div>
+        <div class="content">
+          使用本软件前请认真阅读我们的
+          <span style="color:#28a2f1" @click="$router.push({ name: 'user_agreement' })">《用户服务协议》</span>
+          和
+          <span style="color:#28a2f1" @click="$router.push({ name: 'privacy_agreement' })">《隐私协议》</span>
+          相关条款,您也可以稍后在应用设置里浏览查看。点击“同意使用”即表示您接受我们的服务协议和隐私政策,继续使用我们的软件。
+        </div>
+        <div class="footer2 flex-box-ce">
+          <div class="flex-1" @click="closeYs2">暂不使用</div>
+          <div class="flex-1" @click="closeYs">同意使用</div>
+        </div>
+      </div>
+    </van-popup>
+
+    <!-- 微信登录 -->
+    <van-popup v-model="isShowSelect" class="popup-all">
+      <div style="position: relative;">
+        <div style="position: absolute;top:16px;right:16px" @click="isShowSelect=false"><van-icon name="cross" /></div>
+        <div class="contentBox">
+          <div class="">欢迎使用功道云!</div>
+          <p>请选择以下进入方式,如已有登录账号<br />请先绑定账号再进入</p>
+        </div>
+        <div class="btns" style="padding-bottom: 16px;">
+          <div class="bdBtn" @click="$router.push({ name: 'bindingPhone', query: { secret: wo_token } })">绑定已有账号</div>
+          <div style="font-size: 0.28rem;color: #666" @click="wxLogin">创建新账号</div>
+        </div>
+      </div>
+    </van-popup>
+
+    <van-dialog v-model="isShowDialog" confirmButtonText="同意并继续" confirmButtonColor="#238cf9" @confirm="confirmDialog">
+      <div style="padding: 0.3rem;">
+        <div class="flex-box-ce" style="margin-bottom: 0.24rem;">
+          <div style="font-size: 0.4rem;font-weight: 700;" class="flex-1 black">服务协议和隐私政策</div>
+          <van-icon name="cross" @click="isShowDialog=false" class="fontColorC"
+            style="font-size: 0.3rem;position: relative;top: -0.1rem;right: -0.1rem;" />
+        </div>
+        <div class="fontColorC">
+          为了更好地保障你的合法权益,使用前请阅读并同意功道云<span style="color:#28a2f1"
+            @click="$router.push({ name: 'user_agreement' })">《服务协议》</span>&<span style="color:#28a2f1"
+            @click="$router.push({ name: 'privacy_agreement' })">《隐私政策》</span>
+        </div>
+      </div>
+    </van-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    setToken,
+    returnJSEncrypt
+  } from '@/utils/auth';
+  import axios from 'axios';
+  import qs from 'qs';
+  import Vue from 'vue';
+  import {
+    Divider
+  } from 'vant';
+  Vue.use(Divider);
+  export default {
+    name: 'login',
+    data() {
+      return {
+        input_focus: false,
+        next_btn_enable: false,
+        isAndroid: this.$getCache('isAndroid'),
+        formData: {
+          username: '',
+          password: ''
+        },
+        aweixin: null,
+        auths: [],
+
+        index: 0,
+        // 微信登录
+        isShowSelect: false,
+        // 隐私相关
+        isYsShow: false,
+        showYs: false,
+        wo_token: '',
+        isShowDialog: false,
+        // wo_token:'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOm51bGwsImlhdCI6MTY0MjI0MDQ3NywiZXhwIjoxNjQ0ODMyNDc3LCJuYmYiOjE2NDIyNDA0NzcsImp0aSI6ImtlZmVxZ09yMVZYWEVNZmwiLCJzdWIiOjgsInBydiI6IjAzMDBhNTQ5YWI4ZjcwMmNkYTgzMjMxYTQxMzMyZWNjYmRlOWRmOGYiLCJyb2xlIjoid2VjaGF0X29wZW5fdXNlciJ9.SRt2d8-J3FXQ0UFU27csIiGOJvOSxzQSoDMV-LpE3ZM' //微信登录token
+      };
+    },
+    created() {
+      let that = this;
+      document.body.addEventListener('blur', function(e) {
+        setTimeout(() => {
+          e.target.parentNode.parentNode.parentNode.classList.remove('field-focus');
+          that.input_focus = false;
+        }, 100);
+      }, true);
+      document.body.addEventListener('focus', function(e) {
+        e.target.parentNode.parentNode.parentNode.classList.add('field-focus');
+        setTimeout(() => {
+          that.input_focus = true;
+        }, 100);
+      }, true);
+      this.$store.commit('SET_USERINFO', {}); // 清空人员信息
+      this.$store.commit('SET_USERID', 0);
+      // alert(`$isWx${this.$isWx}`)
+      if (this.$isWx) {
+        this.doWeixinLogin();
+        return false
+      }
+      if (window.plus) {
+        this.hei = plus.navigator.getStatusbarHeight();
+        this.getServiceOauth();
+      }
+    },
+    mounted() {
+      this.$removeCache('account')
+    },
+    watch: {
+      formData: {
+        handler(val, oldVal) {
+          if (val.username != '' && val.password != '') {
+            this.next_btn_enable = true;
+          } else {
+            this.next_btn_enable = false;
+          }
+        },
+        deep: true
+      }
+    },
+    methods: {
+      confirmDialog() {
+        this.isShowDialog = true;
+        this.isYsShow = true
+      },
+      wxLogin() {
+        let pl = 'a';
+        if (window.plus) {
+          if (navigator.userAgent.indexOf('Android') > 0) {
+            pl = 'a';
+          } else {
+            pl = 'i';
+          }
+        }
+        axios({
+          method: 'post',
+          url: process.env.BASE_API + '/api/pro/wo/create',
+          headers: {
+            'Content-Type': 'application/x-www-form-urlencoded',
+            pl: pl,
+            'A-TOKEN': this.wo_token
+          }
+        }).then(res => {
+          if (res.data.code == 1) {
+            this.$setCache('account', res.data.data.account);
+            localStorage.setItem('a-token-temp', res.data.data.token); // 保存平台账号登录的token
+            this.registrationExperience(); //进入体验账号
+          } else {
+            this.$toast(res.data.msg);
+          }
+        });
+      },
+      openUrl(index) {
+        if (!this.isLogin()) {
+          return false
+        }
+        if (index == 1) {
+          this.$router.push({
+            name: 'forget_pwd'
+          });
+        } else {
+          this.$router.push({
+            name: 'reg'
+          });
+        }
+      },
+      openHome() {
+        setTimeout(() => {
+          window.location.href = window.location.href.split('#')[0];
+        }, 100);
+      },
+      isLogin() {
+        if (!this.isYsShow && process.env.NODE_ENV == 'production') {
+          this.isShowDialog = true;
+          return false;
+        } else {
+          return true;
+        }
+      },
+      // 判断是否获取微信登录认证
+      getServiceOauth() {
+        var that = this;
+        if (window.plus) {
+          plus.oauth.getServices(function(services) {
+            that.auths = services;
+            for (let i in services) {
+              if (services[i].id == 'weixin') {
+                that.aweixin = services[i];
+              }
+            }
+          });
+        }
+      },
+      doWeixinLogin() {
+        if (this.$isWx) {
+          if (this.isAndroid) {
+            window.open(process.env.VUE_APP_WXURL, '_blank');
+          } else {
+            window.location.href = process.env.VUE_APP_WXURL
+          }
+          return false
+        }
+        let that = this;
+        if (window.plus && this.isLogin()) {
+          if (this.aweixin == null) {
+            plus.nativeUI.alert('当前环境不支持微信登录');
+            return;
+          }
+          this.aweixin.authorize(
+            function(e) {
+              that.WeixinLogin(e.code);
+            },
+            function(e) {
+              if (e.code == '-1002') {
+                plus.nativeUI.alert('请先安装微信客户端');
+              }
+            }, {
+              scope: 'snsapi_userinfo',
+              state: 'authorize test',
+              appid: 'wx84f9a9b3ce29f450'
+            }
+          );
+        }
+      },
+      sendLogin() {
+        if (!this.isLogin()) {
+          return false
+        }
+        this.$validator.validate().then(result => {
+          if (!result) {
+            this.$notify({
+              type: 'danger',
+              message: this.$validator.errors.items[0].msg
+            });
+          } else {
+            this.$toast.loading({
+              mask: true,
+              message: '正在登录...'
+            });
+            this.$store.dispatch('login', {
+                tel: this.formData.username,
+                password: this.formData.password
+              }).then(res => {
+                if (res.code == 1) {
+                  localStorage.setItem('a-token-temp', res.data.token); // 保存平台账号登录的token
+                  this.openUrl2(res.data.account_site, res.data.invitation_wait_count);
+                } else {
+                  this.$toast.fail({
+                    message: res.msg,
+                    duration: 1000
+                  });
+                }
+              })
+              .finally(() => {
+                this.$toast.clear();
+              });
+          }
+        });
+      },
+      // 直接进入,跳过选择行业与公司,体验账户专用
+      registrationExperience() {
+        this.$router.replace({
+          name: 'create_company'
+        })
+      },
+      WeixinLogin(code) {
+        this.$toast.loading({
+          mask: true,
+          message: '正在登录...'
+        });
+        let pl = 'a';
+        if (window.plus) {
+          if (navigator.userAgent.indexOf('Android') > 0) {
+            pl = 'a';
+          } else {
+            pl = 'i';
+          }
+        }
+        let data = {
+          code: code,
+        };
+        axios({
+          method: 'post',
+          url: process.env.BASE_API + '/api/pro/wo/code',
+          data: qs.stringify({
+            data: returnJSEncrypt(data)
+          }),
+          headers: {
+            'Content-Type': 'application/x-www-form-urlencoded',
+            pl: pl
+          }
+        }).then(res => {
+          if (res.data.code == 1) {
+            this.wo_token = res.data.data.wo_token;
+            this.wxSelect();
+          } else {
+            this.$toast(res.data.msg);
+          }
+        });
+      },
+      wxSelect() {
+        let pl = 'a';
+        if (window.plus) {
+          if (navigator.userAgent.indexOf('Android') > 0) {
+            pl = 'a';
+          } else {
+            pl = 'i';
+          }
+        }
+        axios({
+          method: 'get',
+          url: process.env.BASE_API + '/api/pro/wo/oui',
+          headers: {
+            'Content-Type': 'application/x-www-form-urlencoded',
+            pl: pl,
+            'A-TOKEN': this.wo_token
+          }
+        }).then(res => {
+          if (res.data.code == 1) {
+            this.$setCache('account', res.data.data.account);
+            if (res.data.data.account_id !== 0) {
+              localStorage.setItem('a-token-temp', res.data.data.token); // 保存平台账号登录的token
+              // 已绑定平台账号
+              this.openUrl2(res.data.data.account_site, res.data.data.invitation_wait_count);
+            } else {
+              this.$router.replace({
+                name: 'regWx',
+                query: {
+                  wo_token: this.wo_token
+                }
+              });
+              // this.isShowSelect = true;
+            }
+          } else {
+            this.$toast(res.data.msg);
+          }
+        });
+      },
+      openUrl2(account_site, invitation_wait_count) {
+        if (account_site.length > 0) {
+          // 公司数量
+          if (invitation_wait_count > 0) {
+            this.$router.push({
+              name: 'registration_experience',
+              query: {
+                invite: 1,
+                iscompany: 1
+              }
+            }); // 选择行业
+          } else {
+            this.$router.push({
+              name: 'login_company_list'
+            }); // 选择企业
+          }
+        } else {
+          if (invitation_wait_count > 0) {
+            // 待邀请数量
+            this.$router.push({
+              name: 'registration_experience',
+              query: {
+                invite: 1
+              }
+            }); // 选择行业
+          } else {
+            this.registrationExperience(); //进入体验账号
+          }
+        }
+      },
+      // 关闭APP
+      closeYs2() {
+        this.isYsShow = false;
+        this.showYs = false;
+        if (window.plus) {
+          plus.runtime.quit();
+        }
+      },
+      // 关闭隐私
+      closeYs() {
+        localStorage.setItem('isYsShow', true);
+        this.isYsShow = true;
+        this.showYs = false;
+      },
+    }
+  };
+</script>
+
+<style rel="stylesheet/scss" lang="scss" scoped>
+  .contentBox {
+    text-align: center;
+    padding: 50px 0;
+
+    div {
+      font-size: 0.38rem;
+      color: #222;
+    }
+
+    p {
+      font-size: 0.28rem;
+      color: #666;
+    }
+  }
+
+  .bdBtn {
+    width: 80%;
+    padding: 10px;
+    border-radius: 25px;
+    background-image: linear-gradient(117deg, #04b3fb, #31d4ff);
+    color: #fff;
+    margin: 0 auto;
+    margin-bottom: 16px;
+  }
+
+  .popup-all {
+    border-radius: 0.15rem;
+    background: #fff;
+    width: 80%;
+    text-align: center;
+    font-size: 0.32rem;
+
+    .title {
+      padding: 0.2rem 0;
+    }
+
+    .content {
+      font-size: 0.28rem;
+      padding: 0 0.2rem;
+      padding-bottom: 0.2rem;
+      height: 3rem;
+      // overflow-y: scroll;
+    }
+
+    .footer2 div:nth-child(1) {
+      background-color: #ccc;
+      color: #333333;
+      padding: 0.24rem 0;
+      font-size: 0.28rem;
+    }
+
+    .footer2 div:nth-child(2) {
+      background-color: #1989fa;
+      color: #fff;
+      padding: 0.24rem 0;
+      font-size: 0.28rem;
+    }
+  }
+
+  .body_com {
+    background-color: #fff;
+    position: fixed;
+    top: 1rem;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    overflow: auto;
+    z-index: 2;
+  }
+
+  .login_button {
+    height: 1rem;
+    line-height: 0.8rem;
+    border-radius: 0.15rem;
+  }
+
+  .imgLsit img {
+    height: 100%;
+    width: 100%;
+    vertical-align: bottom;
+  }
+
+  .input_focus.login-box {
+    height: calc(100% - 0rem);
+  }
+
+  .login-box {
+    height: calc(100%);
+    position: relative;
+  }
+
+  .login-box-parent .van-field__icon .van-icon {
+    color: #4b0;
+  }
+
+  .login-form-box-bg {
+    position: absolute;
+    top: -0.4rem;
+    left: 0;
+    width: 100%;
+    height: 3.4rem;
+    color: #26a2ff;
+  }
+
+  .login_logo {
+    position: relative;
+    display: block;
+    margin: -1.45rem auto;
+    width: 3.6rem;
+    color: #fff;
+    margin-bottom: 0rem;
+    z-index: 1;
+  }
+
+  .setp1,
+  .setp2 {
+    padding-bottom: 0.5rem;
+  }
+
+  .login-box-parent .mint-cell.cell-last:before {
+    bottom: 0;
+  }
+
+  .login-box .van-cell[data-v-1a0d0fb5]:not(:last-child)::after {
+    border: none;
+    border-bottom: 0.02rem #efefef solid;
+    transform: scaleY(0.5);
+    left: 0.32rem;
+    right: 0.32rem;
+  }
+
+  .login-box .login-form-box .tel {
+    font-size: 0.32rem;
+    margin-bottom: 0.16rem;
+    padding: 0.2rem 0.32rem;
+    line-height: 0.5rem;
+  }
+
+  .login-box .login-form-box .tel .login_tel {
+    width: 0.37rem;
+    height: 0.37rem;
+    color: #b8b8b8;
+    margin-top: -0.06rem;
+    margin-left: -0.06rem;
+    padding-right: 0rem;
+    border-right: none;
+  }
+
+  .login-box .login-form-box .psw {
+    font-size: 0.32rem;
+    margin-bottom: 0.16rem;
+    padding: 0.2rem 0.32rem;
+    line-height: 0.5rem;
+  }
+
+  .login-box .login-form-box .psw .login_pwd {
+    width: 0.37rem;
+    height: 0.37rem;
+    color: #b8b8b8;
+    margin-top: -0.05rem;
+    margin-left: -0.06rem;
+    padding-right: 0rem;
+    border-right: none;
+  }
+
+  /deep/ .login-box input {
+    font-size: 0.4rem !important;
+    color: #1c1c1c;
+    letter-spacing: 0.005rem;
+  }
+
+  .login-box ::-webkit-input-placeholder {
+    font-size: 0.32rem;
+    color: #b8b8b8 !important;
+    letter-spacing: 0.005rem;
+  }
+
+  .login-box input:-ms-input-placeholder {
+    font-size: 0.32rem;
+    color: #b8b8b8 !important;
+    letter-spacing: 0.005rem;
+  }
+
+  .login-box ::-moz-input-placeholder {
+    font-size: 0.32rem;
+    color: #b8b8b8 !important;
+    letter-spacing: 0.005rem;
+  }
+
+  // .login-box .field-focus ::-webkit-input-placeholder{
+  //   color:#238cf9 !important;
+  // }
+  // .login-box input:-ms-input-placeholder {
+  //    color:#238cf9 !important;
+  //  }
+  // .login-box .field-focus ::-moz-input-placeholder {
+  //   color:#238cf9 !important;
+  // }
+  // .login-box .field-focus .login_tel{
+  //   color:#238cf9 !important;
+  // }
+  // .login-box .field-focus .login_pwd {
+  //   color:#238cf9 !important;
+  // }
+  .login-box .van-hairline--top-bottom:after {
+    border: none;
+    border-bottom: 0.02rem #efefef solid;
+    transform: scaleY(0.5);
+    left: 0.32rem;
+    right: 0.32rem;
+  }
+
+  .login-box .van-hairline-unset--top-bottom:after {
+    border: none;
+    border-bottom: 0.02rem #efefef solid;
+    transform: scaleY(0.5);
+    left: 0.32rem;
+    right: 0.32rem;
+  }
+
+  // /deep/ .login-box .field-focus:after {
+  //   border-bottom: 0.02rem #238cf9 solid !important;
+  // }
+  .login-box .van-row {
+    margin-top: 0.08rem;
+    font-size: 0.28rem;
+  }
+
+  .login-box .van-row .van-col:not(:last-child) {
+    color: #9e9da3;
+  }
+
+  .login-box .van-row .van-col {
+    color: #28a2f1;
+    letter-spacing: 0.005rem;
+  }
+
+  .login-box .login_button {
+    height: 1rem;
+    line-height: 0.8rem;
+    border-radius: 0.04rem;
+  }
+
+  .footer {
+    font-size: 0.28rem;
+    line-height: 1rem;
+    text-align: center;
+    letter-spacing: 0.005rem;
+    margin-bottom: 0.5rem;
+  }
+
+  .footer a {
+    color: #1989fa;
+  }
+</style>