瀏覽代碼

新账号中心登录判断是否有企业以及企业认证页面

hangb 7 年之前
父節點
當前提交
731c98b2e1

+ 23 - 1
assets/scss/common.scss

@@ -463,7 +463,29 @@ form .el-form-item .el-form-item__content .el-checkbox .el-checkbox__inner{
   line-height: 30px;
 }
 
-//个人注册
+//个人注册错误框颜色
 form .el-form-item .el-form-item__content div.active .el-input__inner{
   border-color: #f56c6c !important;
 }
+//个人注册正确框颜色
+form .el-form-item .el-form-item__content div.correct .el-input__inner{
+  border-color: #67c23a !important;
+}
+
+
+//登录选择企业弹出框
+.dialog .el-dialog__header{
+  display: none;
+}
+.dialog .el-dialog__body{
+  padding: 0;
+}
+
+
+//企业认证
+form .el-form-item.padding55 .el-form-item__content .el-input__inner{
+  padding-left: 55px;
+}
+form .el-form-item.padding45 .el-form-item__content .el-input__inner{
+  padding-left: 45px;
+}

+ 182 - 41
components/certification/EnterpriseCertification.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="certification">
     <div class="container">
-      <div class="content" v-if="activeTab == 0">
+      <div class="content" v-if="enterpriseRegister">
         <div class="content-top">
           <h3>企业认证</h3>
           <div class="step">
@@ -9,33 +9,48 @@
             <div class="step-item"><span class="active">认证申请</span><span>等待审核</span><span>审核结果</span></div>
           </div>
         </div>
-        <form action="">
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="企业名称"/>
-            <span class="tip">一个手机号可注册多个企业 <a href="">仍有问题?</a></span>
-          </div>
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="营业执照号"/>
-          </div>
-          <div class="form-group">
-            <input type="text" class="form-control padding55" placeholder="上传营业执照扫描件"/>
-            <i class="fa fa-photo"></i>
-          </div>
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="法定代表人"/>
-          </div>
-          <div class="form-group">
-            <input type="text" class="form-control padding45" placeholder="注册地址"/>
-            <i class="fa fa-map-marker"></i>
-          </div>
-          <button class="btn">提交</button>
-          <div class="form-group agree">
-            <input type="checkbox"/>
-            <span class="agree">我已阅读并同意 <a href="">《优软云服务条款》</a></span>
-          </div>
-        </form>
+        <div>
+          <el-form :model="enterprise" :rules="rules" ref="enterprise" label-width="100px" class="demo-ruleForm">
+            <el-form-item prop="spaceName">
+              <el-input type="text"
+                        v-model="enterprise.spaceName"
+                        v-bind:class="{ active: isSpaceNameExist }"
+                        auto-complete="off"
+                        placeholder="企业名称"
+              ></el-input>
+              <span class="tip exist" v-show="isSpaceNameExist">该企业已被注册,请确认。<a href="">仍有问题?</a></span>
+            </el-form-item>
+            <el-form-item prop="businessCode">
+              <el-input type="text"
+                        v-model="enterprise.businessCode"
+                        v-bind:class="{ active: isBusinessCodeExist }"
+                        auto-complete="off"
+                        placeholder="营业执照号"></el-input>
+              <span class="tip exist" v-show="isBusinessCodeExist">该企业已被注册,请确认。<a href="">仍有问题?</a></span>
+            </el-form-item>
+            <el-form-item prop="businessImage" class="padding55">
+              <el-input v-model="enterprise.businessImage" placeholder="上传营业执照扫描件"></el-input>
+              <i class="fa fa-photo"></i>
+            </el-form-item>
+            <el-form-item prop="corporation">
+              <el-input v-model="enterprise.corporation" placeholder="法定代表人"></el-input>
+            </el-form-item>
+            <el-form-item prop="regAddress" class="padding45">
+              <el-input v-model="enterprise.regAddress" placeholder="注册地址"></el-input>
+              <i class="fa fa-map-marker"></i>
+            </el-form-item>
+            <el-form-item>
+              <a class="btn finish"
+                 :disabled="!checked" @click="getCookie">提交</a>
+            </el-form-item>
+            <el-form-item>
+              <el-checkbox name="type" v-model="checked" @click="checkboxIsChecked"></el-checkbox>
+              <span class="agree">我已阅读并同意 <a href="">《优软云服务条款》</a></span>
+            </el-form-item>
+          </el-form>
+        </div>
       </div>
-      <div class="content" v-if="activeTab == 1">
+      <div class="content" v-if="!enterpriseRegister">
         <div class="content-top">
           <h3>企业认证</h3>
           <div class="step">
@@ -49,7 +64,7 @@
           <div class="close-btn">关闭</div>
         </div>
       </div>
-      <div class="content" v-if="activeTab == 2">
+      <div class="content" style="display: none;">
         <div class="content-top">
           <h3>企业认证</h3>
           <div class="step">
@@ -63,7 +78,7 @@
           <div class="close-btn">重新认证</div>
         </div>
       </div>
-      <div class="content" v-if="activeTab == 3">
+      <div class="content" style="display: none;">
         <div class="content-top">
           <h3>企业认证</h3>
           <div class="step">
@@ -85,8 +100,141 @@
   export default {
     name: 'enterpriseCertification',
     data () {
+//      企业认证第一步
+      var validateSpaceName = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写正确的企业名称'))
+          this.spaceNameChecked = false
+        } else {
+          if (this.enterprise.spaceName !== '') {
+            if (value.length > 20) {
+              callback(new Error('输入长度过长,20个字符以内'))
+            } else {
+              this.$http.get(`/api/userspace/checkSpaceName`, {params: {spaceName: this.enterprise.spaceName}})
+                .then(response => {
+                  if (response.data.success) {
+                    this.spaceNameChecked = true
+                    this.isSpaceNameExist = false
+                  } else {
+                    this.spaceNameChecked = false
+                    this.isSpaceNameExist = true
+                    return Promise.reject(response.data)
+                  }
+                }).catch(err => {
+                  console.log(err)
+//                  this.$message.error(err.errMsg)
+                })
+            }
+          }
+          callback()
+        }
+      }
+      var validateBusinessCode = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写正确的营业执照号'))
+          this.businessCodeChecked = false
+        } else {
+          if (this.enterprise.businessCode !== '') {
+            if (value.length > 20) {
+              callback(new Error('输入长度过长,20个字符以内'))
+            } else {
+              this.$http.get(`/api/userspace/checkBusinessCode`, {params: {businessCode: this.enterprise.businessCode}})
+                .then(response => {
+                  if (response.data.success) {
+                    this.businessCodeChecked = true
+                    this.isBusinessCodeExist = false
+                  } else {
+                    this.businessCodeChecked = false
+                    this.isBusinessCodeExist = true
+                    return Promise.reject(response.data)
+                  }
+                }).catch(err => {
+                  console.log(err)
+//                  this.$message.error(err.errMsg)
+                })
+            }
+          }
+          callback()
+        }
+      }
+      var validateCorporation = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写正确的法定代表人'))
+          this.corporationChecked = false
+        } else {
+          if (this.enterprise.corporation !== '') {
+            if (value.length > 20) {
+              callback(new Error('输入长度过长,20个字符以内'))
+            } else {
+              this.corporationChecked = true
+            }
+          }
+          callback()
+        }
+      }
+      var validateRegAddress = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写正确的注册地址'))
+          this.corporationChecked = false
+        } else {
+          this.corporationChecked = true
+          callback()
+        }
+      }
       return {
-        activeTab: 0
+        enterpriseRegister: true,
+        enterprise: {
+          spaceName: '',
+          businessCode: '',
+          corporation: '',
+          regAddress: '',
+          province: '',
+          city: '',
+          district: '',
+          street: '',
+          businessImage: ''
+        },
+        checked: true,
+        isSpaceNameExist: false,
+        isBusinessCodeExist: false,
+        spaceNameChecked: false,
+        businessCodeChecked: false,
+        corporationChecked: false,
+//        企业认证第一步
+        rules: {
+          spaceName: [
+            {validator: validateSpaceName, trigger: 'blur'}
+          ],
+          businessCode: [
+            {validator: validateBusinessCode, trigger: 'blur'}
+          ],
+          corporation: [
+            {validator: validateCorporation, trigger: 'blur'}
+          ],
+          regAddress: [
+            {validator: validateRegAddress, trigger: 'blur'}
+          ]
+        }
+      }
+    },
+    methods: {
+//      我同意是否被选中
+      checkboxIsChecked () {
+        this.checked = !this.checked
+      },
+//      获取是否登录
+      getCookie () {
+        var strCookie = document.cookie
+        var arrCookie = strCookie.split(';')
+        console.log(strCookie)
+        console.log(arrCookie)
+        for (var i = 0; i < arrCookie.length; i++) {
+          var cookie = arrCookie[i].split('=')
+          console.log(cookie)
+          if (cookie[0] === 'uid') {} else {
+//            window.location.href = '/'
+          }
+        }
       }
     }
   }
@@ -143,12 +291,6 @@
           form {
             padding-bottom: 44px;
             margin-top: 152px;
-            .form-group{
-              position: relative;
-              margin: 0 auto 16px;
-              width: 360px;
-              height: 44px;
-              line-height: 44px;
               input{
                 padding: 0 0 0 18px;
                 width: 360px;
@@ -158,10 +300,10 @@
                 color: #000;
                 border-radius: 0;
               }
-              input.padding55{
+              .padding55 input{
                 padding-left: 55px;
               }
-              input.padding45{
+              .padding45 input{
                 padding-left: 45px;
               }
               span.tip{
@@ -190,14 +332,13 @@
               }
               span.agree{
                 float: left;
-                margin-top: -15px;
+                margin: 1px 0 0 10px;
                 font-size: 14px;
                 color: #8b8b8b;
                 a{
                   color: #0076ad;
                 }
               }
-            }
             .form-group.agree{
               margin: 20px auto 0 !important;
             }
@@ -205,7 +346,7 @@
               margin: 34px 0 16px 0;
               width: 360px;
               height: 44px;
-              line-height: 4px;
+              line-height: 44px;
               font-size: 16px;
               color: #fff;
               background: #0076AD;

+ 102 - 9
components/login/Login.vue

@@ -40,7 +40,9 @@
                 <a class="forget">忘记密码?</a>
               </el-form-item>
               <el-form-item>
-                <a class="btn login" @click="isLogin" :disabled="isLoginDisabled">登录</a>
+                <a class="btn login"
+                   @click="isLogin(true)"
+                   :disabled="isLoginDisabled">登录</a>
               </el-form-item>
             </el-form>
           </div>
@@ -70,6 +72,19 @@
         </div>
       </div>
     </div>
+    <!--选择企业弹出框-->
+    <div>
+      <el-dialog class="dialog"
+                 :visible.sync="dialogVisible"
+                 size="tiny">
+        <div class="x-floating x-list">
+          <div class="x-list-header">您要登录的公司是:</div>
+          <ul class="list-unstyled" v-for="space in this.enterprise">
+            <li v-text="space.name" @click="chooseOneEnterprise(false, space.id)">华商龙科技有限公司</li>
+          </ul>
+        </div>
+      </el-dialog>
+    </div>
   </div>
 </template>
 
@@ -131,12 +146,14 @@
         login: {
           username: '',
           password: '',
-          captcha: ''
+          captcha: '',
+          spaceUU: ''
         },
         checkUsername: false,
         checkPassword: false,
         showCheckCode: false,
         isLoginDisabled: false,
+        dialogVisible: false,
         rules2: {
           username: [
             {validator: validateUsername, trigger: 'blur'}
@@ -147,6 +164,13 @@
         }
       }
     },
+    computed: {
+      enterprise () {
+        let chooseEnterprise = this.$store.state.login.chooseRegisterEnterprise.choose.data
+//        console.log(chooseEnterprise)
+        return chooseEnterprise
+      }
+    },
     methods: {
 //    获取验证码
       getCode () {
@@ -154,7 +178,7 @@
         imgSrc.setAttribute('src', '/sso/login/checkCode?timestamp=' + (new Date()).valueOf())
       },
 //      登录
-      isLogin () {
+      isLogin (flag) {
         if (!this.checkUsername) {
           this.$message.error('请填写账号')
         } else if (!this.checkPassword) {
@@ -169,9 +193,9 @@
               request[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1])
             }
           }
-          var appId = request['appId']
-          var returnUrl = request['returnUrl']
-          var baseUrl = request['baseUrl']
+          var appId = request['appId'] || ''
+          var returnUrl = request['returnUrl'] || ''
+          var baseUrl = request['baseUrl'] || ''
           let param = new FormData()
           param.append('username', this.login.username)
           param.append('password', this.login.password)
@@ -179,14 +203,25 @@
           param.append('appId', appId)
           param.append('returnUrl', returnUrl)
           param.append('baseUrl', baseUrl)
-          param.append('spaceUU', '')
+          param.append('spaceUU', this.login.spaceUU)
           let config = {
             headers: {'Content-Type': 'multipart/form-data'}
           }
           this.$http.post('/sso/login', param, config)
             .then(response => {
               if (response.data.success) {
-                console.log(response.data)
+                console.log(response.data.content)
+                if (response.data.content.spaces) {
+//                   弹框让用户选择企业
+                  this.$store.commit('login/chooseRegisterEnterprise/GET_ENTERPRISE_SUCCESS', response.data.content.spaces)
+                  this.dialogVisible = flag
+                } else if (response.data.content.loginUrls) {
+//                  遍历登录url循环让各应用登录(需要跨域)
+                  for (var i in response.data.content.loginUrls) {
+                    this.$http.post(response.data.content.loginUrls[i], response.data.content.data)
+                  }
+                  window.location.href = response.data.content.returnUrl || 'http://www.ubtob.com'
+                }
               } else {
                 this.$message.error(response.data)
                 var count = response.data.errorCount
@@ -208,10 +243,17 @@
                 return Promise.reject(response.data)
               }
             }).catch(err => {
-              console.log(err)
+              let _this = this
+              setTimeout(function () {
+                _this.getCode()
+              }, 100)
               this.$message.error(err.errMsg)
             })
         }
+      },
+      chooseOneEnterprise (flag, spaceUU) {
+        this.login.spaceUU = spaceUU
+        this.isLogin(flag)
       }
     }
   }
@@ -220,6 +262,57 @@
   .x-container{
     position: relative;
     height: 475px;
+    /*登录弹出框*/
+    .x-floating {
+      position: fixed;
+      top: 80px;
+      left: 50%;
+      z-index: 100000;
+      opacity: 1;
+      -webkit-transition: all .5s;
+      -moz-transition: all .5s;
+      transition: all .5s;
+    }
+    .x-list {
+      width: 306px;
+      margin-left: -153px;
+      background: #fff;
+      border-top: 1px solid #e7e7e7;
+      cursor: pointer;
+      .x-list-header {
+        padding: 10px 20px;
+        background: #e0e0e0;
+        width: 306px;
+        height: 42px;
+        line-height: 21px;
+        font-size: 14px;
+        font-weight: 700;
+        color: #505050;
+      }
+      ul{
+        margin-bottom: 0;
+        li{
+          padding: 10px 20px;
+          width: 306px;
+          height: 42px;
+          line-height: 21px;
+          font-size: 12px;
+          color: #505050;
+          border-bottom: 1px solid #e7e7e7;
+          &:hover{
+            background: #e7e7e7;
+           }
+        }
+      }
+      .x-list .x-list-header, .x-list li {
+        padding: 10px 20px;
+        border-bottom: 1px solid #e7e7e7;
+      }
+    }
+    .x-floating.in {
+      top: 80px;
+      opacity: 1;
+    }
     .x-banner-wrap {
       position: absolute;
       left: 0;

+ 413 - 60
components/register/EnterpriseRegistration.vue

@@ -5,13 +5,11 @@
         <div class="content-top">
           <h3>企业注册</h3>
         </div>
-        <div v-if="activeTab == 0">
+        <div v-show="goNextStep">
           <el-form :model="enterprise" :rules="rules" ref="enterprise" label-width="100px" class="demo-ruleForm">
             <el-form-item prop="mobile">
               <el-input v-model="enterprise.mobile" placeholder="手机号码"></el-input>
-              <span class="tip" v-show="showMsgTip">单个手机号只能注册一个用户</span>
-              <span class="tip tip-mobile"
-                    v-show="mobileRegister">该手机号已被注册</span>
+              <span class="tip" v-show="showMsgTip">一个手机可注册多个企业</span>
             </el-form-item>
             <el-form-item prop="code">
               <el-input type="text" v-model="enterprise.code"
@@ -34,48 +32,66 @@
             </el-form-item>
           </el-form>
         </div>
-        <form action="" v-if="activeTab == 1">
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="企业名称" />
-          </div>
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="营业执照号" />
-          </div>
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="管理员姓名" />
-          </div>
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="登录密码" />
-            <i class="fa fa-keyboard-o" aria-hidden="true"></i>
-            <!--<div class="pwd sm">密码强度 <em></em><em></em><em></em><span>弱</span></div>-->
-            <!--<div class="pwd md">密码强度 <em></em><em></em><em></em><span>中</span></div>-->
-            <div class="pwd lar">密码强度 <em></em><em></em><em></em><span>强</span></div>
-          </div>
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="密码确认" />
-            <i class="fa fa-keyboard-o" aria-hidden="true"></i>
-          </div>
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="联系邮箱" />
-          </div>
-          <button class="btn">确认注册</button>
-        </form>
-        <form action="" v-if="activeTab == 2">
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="企业名称" />
-          </div>
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="营业执照号" />
-          </div>
-          <div class="form-group">
-            <input type="text" class="form-control" placeholder="密码确认" />
-            <i class="fa fa-keyboard-o" aria-hidden="true"></i>
-            <span class="sure">手机号已注册过优软云,请输入原密码</span>
-          </div>
-          <button class="btn">确认注册</button>
-        </form>
+        <div v-show="!goNextStep">
+          <el-form :model="enterprise1" :rules="rules1" ref="enterprise1" label-width="100px" class="demo-ruleForm">
+            <el-form-item prop="spaceName">
+              <el-input type="text"
+                        v-model="enterprise1.spaceName"
+                        v-bind:class="{ active: isSpaceNameExist }"
+                        auto-complete="off"
+                        placeholder="企业名称"
+              ></el-input>
+              <span class="tip exist" v-show="isSpaceNameExist">该企业已被注册,请确认。<a href="">仍有问题?</a></span>
+            </el-form-item>
+            <el-form-item prop="businessCode">
+              <el-input type="text"
+                        v-model="enterprise1.businessCode"
+                        v-bind:class="{ active: isBusinessCodeExist }"
+                        auto-complete="off"
+                        placeholder="营业执照号"></el-input>
+              <span class="tip exist" v-show="isBusinessCodeExist">该企业已被注册,请确认。<a href="">仍有问题?</a></span>
+            </el-form-item>
+            <el-form-item prop="vipName" v-if="!isHasRegister">
+              <el-input type="text" v-model="enterprise1.vipName" auto-complete="off" placeholder="管理员姓名"></el-input>
+            </el-form-item>
+            <el-form-item prop="password" v-if="!isHasRegister">
+              <el-input type="password" v-model="enterprise1.password" auto-complete="off" placeholder="登录密码"></el-input>
+              <div class="pwd sm" v-show="showMsgTip1">密码强度 <em></em><em></em><em></em><span>弱</span></div>
+              <div class="pwd md" v-show="showMsgTip2">密码强度 <em></em><em></em><em></em><span>中</span></div>
+              <div class="pwd lar" v-show="showMsgTip3">密码强度 <em></em><em></em><em></em><span>强</span></div>
+              <div class="pwd low" v-show="showMsgTip4">密码强度 <em></em><em></em><em></em></div>
+            </el-form-item>
+            <el-form-item prop="password" v-if="isHasRegister">
+              <el-input type="password"
+                        v-model="enterprise1.password"
+                        auto-complete="off"
+                        placeholder="密码确认"
+                        v-bind:class="{ correct: this.passwordChecked }"></el-input>
+              <span class="sure" v-if="isHasRegister" v-show="phoneIsRegisterTip">手机号已注册过优软云,请输入原密码</span>
+            </el-form-item>
+            <el-form-item prop="confirm" v-if="!isHasRegister">
+              <el-input type="password"
+                        auto-complete="off"
+                        placeholder="密码确认"
+                        v-model="enterprise1.confirm"></el-input>
+            </el-form-item>
+            <el-form-item prop="email" v-if="!isHasEmail">
+              <el-input type="text" v-model="enterprise1.email" auto-complete="off" placeholder="联系邮箱"></el-input>
+            </el-form-item>
+              <a class="btn finish"
+                 :disabled="!isHasRegister ? !spaceNameChecked || !businessCodeChecked || !vipNameChecked || !passwordChecked || !passwordConfirmChecked || !emailChecked || !checked : !isHasEmail ? !spaceNameChecked || !businessCodeChecked || !passwordChecked || !emailChecked || !checked : !spaceNameChecked || !businessCodeChecked || !passwordChecked || !checked"
+                 @click="sureRegister">确认注册
+              </a>
+            </el-form-item>
+
+            <el-form-item>
+              <el-checkbox name="type" v-model="checked" @click="checkboxIsChecked"></el-checkbox>
+              <span class="agree">我已阅读并同意 <a href="">《优软云服务条款》</a></span>
+            </el-form-item>
+          </el-form>
+        </div>
       </div>
-      <div class="login">已有账号?<a href="">立即登录</a></div>
+      <div class="login">已有账号?<a href="/">立即登录</a></div>
     </div>
   </div>
 </template>
@@ -84,13 +100,13 @@
   export default {
     name: 'EnterpriseRegistration',
     data () {
+//      企业注册第一步
       var validateMobile = (rule, value, callback) => {
         if (value === '') {
           callback(new Error('请填写正确的手机号'))
           this.showMsgTip = false
           this.getCodeBtnIsDisabled = true
           this.mobileChecked = false
-          console.log(this.mobileChecked)
         } else {
           if (this.enterprise.mobile !== '') {
             var reg = /^1[0-9]{10}$/
@@ -132,10 +148,10 @@
                     } else {
                       this.codeErrorChecked = true
                       this.codeChecked = false
+                      return Promise.reject(response.data)
                     }
-                  }, err => {
-//                  console.log(err)
-                    this.$message.error(err)
+                  }).catch(err => {
+                    this.$message.error(err.errMsg)
                   })
               }
             } else {}
@@ -143,21 +159,229 @@
           callback()
         }
       }
+//      企业注册第二步
+      var validateSpaceName = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写正确的企业名称'))
+          this.spaceNameChecked = false
+        } else {
+          if (this.enterprise1.spaceName !== '') {
+            if (value.length > 20) {
+              callback(new Error('输入长度过长,20个字符以内'))
+            } else {
+              this.$http.get(`/api/userspace/checkSpaceName`, {params: {spaceName: this.enterprise1.spaceName}})
+                .then(response => {
+                  if (response.data.success) {
+                    this.spaceNameChecked = true
+                    this.isSpaceNameExist = false
+                  } else {
+                    this.spaceNameChecked = false
+                    this.isSpaceNameExist = true
+                    return Promise.reject(response.data)
+                  }
+                }).catch(err => {
+                  console.log(err)
+//                  this.$message.error(err.errMsg)
+                })
+            }
+          }
+          callback()
+        }
+      }
+      var validateBusinessCode = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写正确的营业执照号'))
+          this.businessCodeChecked = false
+        } else {
+          if (this.enterprise1.businessCode !== '') {
+            if (value.length > 20) {
+              callback(new Error('输入长度过长,20个字符以内'))
+            } else {
+              this.$http.get(`/api/userspace/checkBusinessCode`, {params: {businessCode: this.enterprise1.businessCode}})
+                .then(response => {
+                  if (response.data.success) {
+                    this.businessCodeChecked = true
+                    this.isBusinessCodeExist = false
+                  } else {
+                    this.businessCodeChecked = false
+                    this.isBusinessCodeExist = true
+                    return Promise.reject(response.data)
+                  }
+                }).catch(err => {
+                  console.log(err)
+//                  this.$message.error(err.errMsg)
+                })
+            }
+          }
+          callback()
+        }
+      }
+      var validateVipName = (rule, value, callback) => {
+        if (this.isHasRegister) {
+          this.vipNameChecked = true
+        } else {
+          if (value === '') {
+            callback(new Error('请填写正确的管理员姓名'))
+            this.vipNameChecked = false
+          } else {
+            if (this.enterprise1.vipName !== '') {
+              if (value.length > 20) {
+                callback(new Error('输入长度过长,20个字符以内'))
+              } else {
+                this.vipNameChecked = true
+              }
+            }
+            callback()
+          }
+        }
+      }
+      var validatePassword = (rule, value, callback) => {
+        if (this.enterprise1.password !== '') {
+          if (value.length <= 20 && value.length >= 8) {
+            var reg1 = /^(?=.{8,20})(((?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]))|((?=.*[0-9])((?=.*[a-zA-Z]))(?=.*[^a-zA-Z0-9]))).*$/
+            var reg2 = /^(?=.{8,20})(((?=.*[0-9])(?=.*[a-z]))|((?=.*[0-9])(?=.*[A-Z]))).*$/
+            if (reg1.test(value)) {
+//                callback(new Error('密码强度强'))
+              this.showMsgTip3 = true
+              this.showMsgTip2 = false
+              this.showMsgTip1 = false
+              this.showMsgTip4 = false
+              this.passwordChecked = true
+            } else if (reg2.test(value)) {
+//                callback(new Error('密码强度中'))
+              this.showMsgTip2 = true
+              this.showMsgTip3 = false
+              this.showMsgTip1 = false
+              this.showMsgTip4 = false
+              this.passwordChecked = true
+            } else {
+              this.showMsgTip1 = true
+              this.showMsgTip3 = false
+              this.showMsgTip2 = false
+              this.showMsgTip4 = false
+              this.passwordChecked = false
+            }
+          } else {
+            this.showMsgTip3 = false
+            this.showMsgTip2 = false
+            this.showMsgTip1 = false
+            this.showMsgTip4 = true
+            this.passwordChecked = false
+          }
+        }
+        callback()
+      }
+      var validatePasswordTip = (rule, value, callback) => {
+        if (this.isHasRegister) {
+          if (value === '') {
+            callback(new Error('请输入密码'))
+            this.passwordChecked = false
+            this.phoneIsRegisterTip = false
+          } else {
+            this.passwordChecked = true
+          }
+        } else {
+          if (value === '') {
+            callback(new Error('请输入密码'))
+            this.passwordChecked = false
+          } else {
+            if (this.enterprise1.password !== '') {
+              if (value.length <= 20 && value.length >= 8) {
+                var reg1 = /^(?=.{8,20})(((?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]))|((?=.*[0-9])((?=.*[a-zA-Z]))(?=.*[^a-zA-Z0-9]))).*$/
+                var reg2 = /^(?=.{8,20})(((?=.*[0-9])(?=.*[a-z]))|((?=.*[0-9])(?=.*[A-Z]))).*$/
+                if (reg1.test(value)) {
+                  this.passwordChecked = true
+                } else if (reg2.test(value)) {
+                  this.passwordChecked = true
+                } else {
+                  callback(new Error('密码须为8-20字符的英文、数字混合'))
+                  this.passwordChecked = false
+                }
+              } else {
+                callback(new Error('密码须为8-20字符的英文、数字混合'))
+                this.passwordChecked = false
+              }
+            }
+            callback()
+          }
+        }
+      }
+      var validateConfirm = (rule, value, callback) => {
+        if (this.isHasRegister) {
+          this.passwordConfirmChecked = true
+        } else {
+          if (value === '') {
+            callback(new Error('请再次输入密码'))
+            this.passwordConfirmChecked = false
+          } else if (value !== this.enterprise1.password) {
+            callback(new Error('两次输入密码不一致!'))
+          } else {
+            this.passwordConfirmChecked = true
+            callback()
+          }
+        }
+      }
+      var validateEmail = (rule, value, callback) => {
+        if (this.isHasEmail) {
+          this.emailChecked = true
+        } else {
+          if (!value) {
+            callback(new Error('请填写正确的联系邮箱'))
+            this.emailChecked = false
+          } else {
+            if (this.enterprise1.email) {
+              var reg = /^([\w-])+(\.\w+)*@([\w-])+((\.\w{2,3}){1,3})$/
+              if (!reg.test(value)) {
+                callback(new Error('请输入正确的邮箱地址格式'))
+                this.emailChecked = false
+              } else {
+                this.emailChecked = true
+              }
+            }
+            callback()
+          }
+        }
+      }
       return {
-        activeTab: 0,
+//        企业注册第一步
         enterprise: {
           mobile: '',
           code: ''
         },
+//        企业注册第二步
+        enterprise1: {
+          spaceName: '',
+          businessCode: '',
+          vipName: '',
+          password: '',
+          confirm: '',
+          email: ''
+        },
         checked: true,
         getCodeBtnIsDisabled: true,
         mobileChecked: false,
         codeChecked: false,
         showMsgTip: true,
-        mobileRegister: false,
         sendEnterpriseCode: true,
         codeErrorChecked: false,
         enterprise_time: 0,
+        showMsgTip1: false,
+        showMsgTip2: false,
+        showMsgTip3: false,
+        showMsgTip4: false,
+        spaceNameChecked: false,
+        businessCodeChecked: false,
+        vipNameChecked: false,
+        passwordChecked: false,
+        passwordConfirmChecked: false,
+        emailChecked: false,
+        isHasRegister: false,
+        isHasEmail: false,
+        goNextStep: true,
+        phoneIsRegisterTip: true,
+        isSpaceNameExist: false,
+        isBusinessCodeExist: false,
+//        企业注册第一步
         rules: {
           mobile: [
             {validator: validateMobile, trigger: 'blur'}
@@ -165,6 +389,28 @@
           code: [
             {validator: validateCode, trigger: 'blur'}
           ]
+        },
+//        企业注册第二步
+        rules1: {
+          spaceName: [
+            {validator: validateSpaceName, trigger: 'blur'}
+          ],
+          businessCode: [
+            {validator: validateBusinessCode, trigger: 'blur'}
+          ],
+          vipName: [
+            {validator: validateVipName, trigger: 'blur'}
+          ],
+          password: [
+            {validator: validatePassword, trigger: 'change'},
+            {validator: validatePasswordTip, trigger: 'blur'}
+          ],
+          confirm: [
+            {validator: validateConfirm, trigger: 'blur'}
+          ],
+          email: [
+            {validator: validateEmail, trigger: 'blur'}
+          ]
         }
       }
     },
@@ -194,7 +440,6 @@
               }, 1000)
             }
           }).catch(err => {
-            console.log(err)
             this.$message.error(err.errMsg)
           })
       },
@@ -210,8 +455,7 @@
               request[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1])
             }
           }
-          var appId = request['appId']
-          console.log(appId)
+          var appId = request['appId'] || ''
           let param = new FormData()
           param.append('mobile', this.enterprise.mobile)
           param.append('code', this.enterprise.code)
@@ -223,15 +467,110 @@
           this.$http.post('/sso/userspace/register/checkAdminTel', param, config)
             .then(response => {
               if (response.data.success) {
-                console.log(response.data)
+                this.goNextStep = false
+                if (response.data.content.hasRegister) {
+                  this.isHasRegister = true
+                  if (response.data.content.hasEmail) {
+                    this.isHasEmail = true
+                  } else {
+                    this.isHasEmail = false
+                  }
+                } else {
+                  this.isHasRegister = false
+                  this.isHasEmail = false
+                }
               } else {
                 return Promise.reject(response.data)
               }
             }).catch(err => {
-              console.log(err)
               this.$message.error(err.errMsg)
             })
         }
+      },
+//      确认注册
+      sureRegister () {
+        if (!this.isHasRegister) {
+          if (this.spaceNameChecked && this.businessCodeChecked && this.vipNameChecked && this.passwordChecked && this.passwordConfirmChecked && this.emailChecked) {
+            var url = window.location.search
+            var request = {}
+            if (url.indexOf('?' !== -1)) {
+              var str = url.substr(1)
+              var strs = str.split('&')
+              for (var i = 0; i < strs.length; i++) {
+                request[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1])
+              }
+            }
+            var appId = request['appId'] || ''
+            let param = new FormData()
+            param.append('spaceName', this.enterprise1.spaceName)
+            param.append('businessCode', this.enterprise1.businessCode)
+            param.append('vipName', this.enterprise1.vipName || '')
+            param.append('password', this.enterprise1.password)
+            param.append('email', this.enterprise1.email || '')
+            param.append('appId', appId)
+            let config = {
+              headers: {'Content-Type': 'multipart/form-data'}
+            }
+            this.$http.post('/sso/userspace/register', param, config)
+              .then(response => {
+                if (response.data.success) {
+
+                } else {
+                  return Promise.reject(response.data)
+                }
+              }).catch(err => {
+                this.$message.error(err.errMsg)
+              })
+          }
+        } else {
+          if (this.isHasEmail) {
+            if (this.spaceNameChecked && this.businessCodeChecked && this.passwordChecked) {
+              let param = new FormData()
+              param.append('spaceName', this.enterprise1.spaceName)
+              param.append('businessCode', this.enterprise1.businessCode)
+              param.append('vipName', this.enterprise1.vipName || '')
+              param.append('password', this.enterprise1.password)
+              param.append('email', this.enterprise1.email || '')
+              param.append('appId', appId)
+              let config = {
+                headers: {'Content-Type': 'multipart/form-data'}
+              }
+              this.$http.post('/sso/userspace/register', param, config)
+                .then(response => {
+                  if (response.data.success) {
+
+                  } else {
+                    return Promise.reject(response.data)
+                  }
+                }).catch(err => {
+                  this.$message.error(err.errMsg)
+                })
+            }
+          } else {
+            if (this.spaceNameChecked && this.businessCodeChecked && this.passwordChecked && this.emailChecked) {
+              let param = new FormData()
+              param.append('spaceName', this.enterprise1.spaceName)
+              param.append('businessCode', this.enterprise1.businessCode)
+              param.append('vipName', this.enterprise1.vipName || '')
+              param.append('password', this.enterprise1.password)
+              param.append('email', this.enterprise1.email || '')
+              param.append('appId', appId)
+              let config = {
+                headers: {'Content-Type': 'multipart/form-data'}
+              }
+              this.$http.post('/sso/userspace/register', param, config)
+                .then(response => {
+                  if (response.data.success) {
+
+                  } else {
+                    return Promise.reject(response.data)
+                  }
+                }).catch(err => {
+                  this.$message.error(err.errMsg)
+                })
+            }
+          }
+        }
       }
     }
   }
@@ -298,9 +637,8 @@
                 cursor: pointer;
               }
               .pwd {
-                position: absolute;
-                top: 0;
-                right: -205px;
+                margin: 6px 0 -15px 0;
+                text-align: left;
                 font-size: 13px;
               em{
                 display: inline-block;
@@ -349,13 +687,28 @@
                 color: #00a0e9;
               }
               }
+              .pwd.low{
+                color: #8c8c8c;
+              em {
+                background: #bfbfbf;
+              }
+              span{
+                color: #00a0e9;
+              }
+              }
               span.tip{
                 position: absolute;
                 top: 0;
-                right: -190px;
+                right: -165px;
                 font-size: 13px;
                 color: #8c8c8c;
               }
+              span.tip.exist{
+                right: -239px;
+                a{
+                  color: #2d8cf0;
+                }
+              }
               input.msg{
                 float: left;
                 width: 210px;

+ 59 - 41
components/register/PersonalRegistration.vue

@@ -58,59 +58,61 @@
     name: 'PersonalRegistration',
     data () {
       var validateName = (rule, value, callback) => {
-        if (!value) {
-          return callback(new Error('会员名不能为空'))
+        if (value === '') {
+          callback(new Error('会员名不能为空'))
+          this.vipNameChecked = false
         } else {
-          if (this.item.password !== '') {
-            if (value.length >= 2 && value.length <= 20) {
-              this.vipNameChecked = true
-            } else {
+          if (this.item.vipName !== '') {
+            if (value.length < 2 || value.length > 20) {
               callback(new Error('请填写合适的会员名称,2~20个字符'))
+              this.vipNameChecked = false
+            } else {
+              this.vipNameChecked = true
             }
           }
         }
+        callback()
       }
       var validatePass = (rule, value, callback) => {
-        if (value === '') {
-          callback(new Error('请输入密码'))
-        } else {
-          if (this.item.password !== '') {
-            if (value.length <= 20 && value.length >= 8) {
-              var reg1 = /^(?=.{8,20})(((?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]))|((?=.*[0-9])((?=.*[a-zA-Z]))(?=.*[^a-zA-Z0-9]))).*$/
-              var reg2 = /^(?=.{8,20})(((?=.*[0-9])(?=.*[a-z]))|((?=.*[0-9])(?=.*[A-Z]))).*$/
-              if (reg1.test(value)) {
+        if (this.item.password !== '') {
+          if (value.length <= 20 && value.length >= 8) {
+            var reg1 = /^(?=.{8,20})(((?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]))|((?=.*[0-9])((?=.*[a-zA-Z]))(?=.*[^a-zA-Z0-9]))).*$/
+            var reg2 = /^(?=.{8,20})(((?=.*[0-9])(?=.*[a-z]))|((?=.*[0-9])(?=.*[A-Z]))).*$/
+            if (reg1.test(value)) {
 //                callback(new Error('密码强度强'))
-                this.showMsgTip3 = true
-                this.showMsgTip2 = false
-                this.showMsgTip1 = false
-                this.showMsgTip4 = false
-                this.passwordChecked = true
-              } else if (reg2.test(value)) {
+              this.showMsgTip3 = true
+              this.showMsgTip2 = false
+              this.showMsgTip1 = false
+              this.showMsgTip4 = false
+              this.passwordChecked = true
+            } else if (reg2.test(value)) {
 //                callback(new Error('密码强度中'))
-                this.showMsgTip2 = true
-                this.showMsgTip3 = false
-                this.showMsgTip1 = false
-                this.showMsgTip4 = false
-                this.passwordChecked = true
-              } else {
-                this.showMsgTip1 = true
-                this.showMsgTip3 = false
-                this.showMsgTip2 = false
-                this.showMsgTip4 = false
-              }
+              this.showMsgTip2 = true
+              this.showMsgTip3 = false
+              this.showMsgTip1 = false
+              this.showMsgTip4 = false
+              this.passwordChecked = true
             } else {
+              this.showMsgTip1 = true
               this.showMsgTip3 = false
               this.showMsgTip2 = false
-              this.showMsgTip1 = false
-              this.showMsgTip4 = true
+              this.showMsgTip4 = false
+              this.passwordChecked = false
             }
+          } else {
+            this.showMsgTip3 = false
+            this.showMsgTip2 = false
+            this.showMsgTip1 = false
+            this.showMsgTip4 = true
+            this.passwordChecked = false
           }
-          callback()
         }
+        callback()
       }
       var validatePassTip = (rule, value, callback) => {
         if (value === '') {
           callback(new Error('请输入密码'))
+          this.passwordChecked = false
         } else {
           if (this.item.password !== '') {
             if (value.length <= 20 && value.length >= 8) {
@@ -122,9 +124,11 @@
                 this.passwordChecked = true
               } else {
                 callback(new Error('密码须为8-20字符的英文、数字混合'))
+                this.passwordChecked = false
               }
             } else {
               callback(new Error('密码须为8-20字符的英文、数字混合'))
+              this.passwordChecked = false
             }
           }
           callback()
@@ -133,8 +137,10 @@
       var validatePass2 = (rule, value, callback) => {
         if (value === '') {
           callback(new Error('请再次输入密码'))
+          this.confirmChecked = false
         } else if (value !== this.item.password) {
           callback(new Error('两次输入密码不一致!'))
+          this.confirmChecked = false
         } else {
           this.confirmChecked = true
           callback()
@@ -144,6 +150,9 @@
         if (value === '') {
           callback(new Error('请填写正确的手机号'))
           this.showMsgTip = false
+          this.checkMobile = true
+          this.mobileRegister = false
+          this.mobileChecked = false
         } else {
           if (this.item.mobile !== '') {
             var reg = /^1([0-9]{10})$/
@@ -152,6 +161,7 @@
               this.showMsgTip = false
               this.checkMobile = true
               this.mobileRegister = false
+              this.mobileChecked = false
             } else {
               this.$http.get(`/api/user/checkMobile`, {params: {mobile: this.item.mobile, mobileArea: ''}})
                 .then(response => {
@@ -159,6 +169,7 @@
                     this.mobileRegister = true
                     this.showMsgTip = false
                     this.checkMobile = true
+                    this.mobileChecked = false
                   } else {
                     this.showMsgTip = false
                     this.checkMobile = false
@@ -175,6 +186,7 @@
         if (value === '') {
           callback(new Error('请填写正确的验证码'))
           this.codeErrorChecked = false
+          this.codeChecked = false
         } else {
           if (this.token !== '') {
             if (this.item.code !== '' && this.item.mobile !== '') {
@@ -189,13 +201,15 @@
                 .then(response => {
                   if (response.data.success) {
                     this.codeChecked = true
+                    this.codeErrorChecked = false
                   } else {
                     this.codeErrorChecked = true
+                    this.codeChecked = false
 //                    callback(new Error('验证码输入错误'))
+                    return Promise.reject(response.data)
                   }
-                }, err => {
-//                  console.log(err)
-                  this.$message.error(err)
+                }).catch(err => {
+                  this.$message.error(err.errMsg)
                 })
             }
           } else {}
@@ -264,7 +278,7 @@
               request[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1])
             }
           }
-          var appId = request['appId']
+          var appId = request['appId'] || ''
           let param = new FormData()
           param.append('vipName', this.item.vipName)
           param.append('password', this.item.password)
@@ -279,9 +293,11 @@
           this.$http.post('/sso/personal/register', param, config)
             .then(response => {
               if (response.data.success) {
-              } else {}
-            }, err => {
-              console.log(err)
+              } else {
+                return Promise.reject(response.data)
+              }
+            }).catch(err => {
+              this.$message.error(err.errMsg)
             })
         }
       },
@@ -310,6 +326,8 @@
                 }
               }, 1000)
             } else {}
+          }).catch(err => {
+            this.$message.error(err.errMsg)
           })
       }
     }

+ 2 - 2
nuxt.config.js

@@ -1,6 +1,6 @@
 const path = require('path')
 const isProdMode = Object.is(process.env.NODE_ENV, 'production')
-const baseUrl = process.env.BASE_URL || (isProdMode ? 'https://city-service.ubtob.com' : 'http://192.168.253.118:8000/')
+const baseUrl = process.env.BASE_URL || (isProdMode ? 'https://city-service.ubtob.com' : 'http://192.168.253.66:8081/')
 
 module.exports = {
   router: {
@@ -98,5 +98,5 @@ module.exports = {
     ssr: true
   }],
   /* TODO 暂时代理到商城测试版,之后再做出调整 */
-  proxyTable: ['/api/**', '/login/**', '/user**', '/logout**', '/sso/**']
+  proxyTable: ['/api/**', '/login/**', '/user**', '/logout**', '/sso/**', '/appeal/**']
 }

+ 15 - 0
store/login.js

@@ -0,0 +1,15 @@
+// import axios from '~plugins/axios'
+//
+// export const actions = {
+//   // 登录选择企业
+//   ChooseRegisterEnterprise ({commit}, params = {}) {
+//     commit('chooseRegisterEnterprise/REQUEST_ENTERPRISE', params)
+//     return axios.post(`/sso/login`, {params})
+//       .then(response => {
+//         commit('chooseRegisterEnterprise/GET_ENTERPRISE_SUCCESS', response.data)
+//       }, err => {
+//         commit('chooseRegisterEnterprise/GET_ENTERPRISE_FAILURE', err)
+//       })
+//   }
+// }
+

+ 19 - 0
store/login/chooseRegisterEnterprise.js

@@ -0,0 +1,19 @@
+export const state = () => ({
+  choose: {
+    fetching: false,
+    data: []
+  }
+})
+
+export const mutations = {
+  REQUEST_ENTERPRISE (state) {
+    state.choose.fetching = true
+  },
+  GET_ENTERPRISE_FAILURE (state) {
+    state.choose.fetching = false
+  },
+  GET_ENTERPRISE_SUCCESS (state, result) {
+    state.choose.fetching = false
+    state.choose.data = result
+  }
+}