Browse Source

新账号中心增加页头页脚和账号申诉页面

hangb 7 năm trước cách đây
mục cha
commit
4a3f2cd343

+ 5 - 0
assets/scss/common.scss

@@ -364,6 +364,11 @@ form .el-form-item .el-form-item__content .el-checkbox .el-checkbox__inner{
   border: 1px solid #ccc;
   border-radius: 0;
 }
+form .el-form-item .el-form-item__content .el-textarea .el-textarea__inner{
+  width: 360px;
+  height: 120px;
+  border-radius: 0;
+}
 
 //我同意按钮
 .el-checkbox__input.is-checked .el-checkbox__inner{

+ 489 - 0
components/appeal/AccountAppeal.vue

@@ -0,0 +1,489 @@
+<template>
+  <div class="certification">
+    <div class="container">
+      <div class="content" v-show="goNextStep">
+        <div class="content-top">
+          <h3>账号申诉</h3>
+        </div>
+        <div>
+          <el-form :model="account" :rules="rules" ref="account" label-width="100px" class="demo-ruleForm">
+            <el-form-item prop="mobile">
+              <el-input v-model="account.mobile" placeholder="新手机号码"></el-input>
+            </el-form-item>
+            <el-form-item prop="code">
+              <el-input type="text" v-model="account.code"
+                        v-bind:class="{ active: codeErrorChecked }"
+                        auto-complete="off" class="msg"
+                        placeholder="短信验证码"></el-input>
+              <el-button type="primary" class="code"
+                         v-show="sendAccountCode"
+                         @click="getCheckCode"
+                         :disabled="getCodeBtnIsDisabled">获取验证码</el-button>
+              <el-button type="primary"  v-show="!sendAccountCode" class="code code-send">已发送({{account_time}}s)</el-button>
+              <span v-show="codeErrorChecked" class="tip codeError-tip" >验证码输入错误</span>
+            </el-form-item>
+            <el-form-item prop="password">
+              <el-input type="password" v-model="account.password" auto-complete="off" placeholder="登录密码"></el-input>
+            </el-form-item>
+            <el-form-item prop="description">
+              <el-input type="textarea" v-model="account.description" placeholder="申诉说明"></el-input>
+              <span class="tip description" v-show="descriptionTip">请描述您申诉的原因,并尽可能多地列举出证明此账号为您所有的证据</span>
+            </el-form-item>
+            <el-form-item prop="contactName">
+              <el-input type="text" v-model="account.contactName" auto-complete="off" placeholder="姓名"></el-input>
+            </el-form-item>
+            <el-form-item prop="contactTel">
+              <el-input type="text" v-model="account.contactTel" auto-complete="off" placeholder="联系电话"></el-input>
+            </el-form-item>
+            <el-form-item prop="contactEmail">
+              <el-input type="text" v-model="account.contactEmail" auto-complete="off" placeholder="电子邮箱"></el-input>
+            </el-form-item>
+            <el-form-item>
+              <a class="btn finish"
+                 @click="submit"
+                 :disabled="!checked || !mobileChecked || !codeChecked || !passwordChecked || !descriptionChecked || !contactNameChecked || !contactTelChecked || !contactEmailChecked">提交</a>
+            </el-form-item>
+            <el-form-item>
+              <el-checkbox name="type" v-model="checked" @click="checkboxChecked"></el-checkbox>
+              <span class="agree">我已阅读并同意 <a href="">《优软云服务条款》</a></span>
+            </el-form-item>
+          </el-form>
+        </div>
+      </div>
+      <div class="content" v-show="!goNextStep">
+        <div class="content-top">
+          <h3>账号申诉</h3>
+        </div>
+        <div class="content-bottom">
+          <p class="passed"><img src="/images/all/pass.png" alt=""/>申诉已提交</p>
+          <span>申诉内容已提交,请耐心等待审核</span>
+          <div class="close-btn" @click="goReturn">关闭</div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'AccountAppeal',
+    data () {
+      var validateMobile = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写正确的手机号'))
+          this.getCodeBtnIsDisabled = true
+          this.mobileChecked = false
+        } else {
+          if (this.account.mobile !== '') {
+            var reg = /^1[0-9]{10}$/
+            if (!reg.test(value)) {
+              callback(new Error('请填写正确的手机号'))
+              this.getCodeBtnIsDisabled = true
+              this.mobileChecked = false
+            } else {
+              this.getCodeBtnIsDisabled = false
+              this.mobileChecked = true
+            }
+          }
+          callback()
+        }
+      }
+      var validateCode = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写正确的验证码'))
+          this.codeErrorChecked = false
+          this.codeChecked = false
+        } else {
+          if (this.account.code !== '') {
+            console.log(this.token)
+            if (this.token !== '') {
+              if (this.account.code !== '' && this.account.mobile !== '') {
+                let param = new FormData()
+                param.append('mobile', this.account.mobile)
+                param.append('code', this.account.code)
+                param.append('token', this.token)
+                let config = {
+                  headers: {'Content-Type': 'multipart/form-data'}
+                }
+                this.$http.post(`/appeal/check/mobile`, param, config)
+                  .then(response => {
+                    if (response.data.success) {
+                      this.codeChecked = true
+                      this.codeErrorChecked = false
+                    } else {
+                      this.codeErrorChecked = true
+                      this.codeChecked = false
+                      return Promise.reject(response.data)
+                    }
+                  }).catch(err => {
+                    this.$message.error(err.errMsg)
+                  })
+              }
+            } else {}
+          }
+          callback()
+        }
+      }
+      var validatePassword = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写正确的密码'))
+          this.passwordChecked = false
+        } else {
+          if (this.account.password !== '') {
+            this.passwordChecked = true
+          }
+          callback()
+        }
+      }
+      var validateDescription = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写申诉说明'))
+          this.descriptionChecked = false
+          this.descriptionTip = false
+        } else {
+          if (this.account.description !== '') {
+            if (value.length >= 100) {
+              callback(new Error('输入长度过长,100个字符以内'))
+              this.descriptionChecked = false
+              this.descriptionTip = false
+            } else {
+              this.descriptionChecked = true
+              this.descriptionTip = false
+            }
+          }
+          callback()
+        }
+      }
+      var validateContactName = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写您的姓名'))
+          this.contactNameChecked = false
+        } else {
+          if (this.account.contactName !== '') {
+            if (value.length >= 20) {
+              callback(new Error('输入长度过长,20个字符以内'))
+              this.contactNameChecked = false
+            } else {
+              this.contactNameChecked = true
+            }
+          }
+          callback()
+        }
+      }
+      var validateContactTel = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写正确的联系电话'))
+          this.contactTelChecked = false
+        } else {
+          if (this.account.contactTel !== '') {
+            var reg = /^1[0-9]{10}$/
+            if (!reg.test(value)) {
+              callback(new Error('请填写正确的联系电话'))
+              this.contactTelChecked = false
+            } else {
+              this.contactTelChecked = true
+            }
+          }
+          callback()
+        }
+      }
+      var validateContactEmail = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('请填写正确的电子邮箱'))
+          this.contactEmailChecked = false
+        } else {
+          if (this.account.contactEmail !== '') {
+            var reg = /^([\w-])+(\.\w+)*@([\w-])+((\.\w{2,3}){1,3})$/
+            if (!reg.test(value)) {
+              callback(new Error('请输入正确的邮箱地址格式'))
+              this.contactEmailChecked = false
+            } else {
+              this.contactEmailChecked = true
+            }
+          }
+          callback()
+        }
+      }
+      return {
+        goNextStep: true,
+        account: {
+          mobile: '',
+          code: '',
+          password: '',
+          description: '',
+          contactName: '',
+          contactTel: '',
+          contactEmail: ''
+        },
+        checked: true,
+        sendAccountCode: true,
+        account_time: 0,
+        getCodeBtnIsDisabled: true,
+        codeErrorChecked: false,
+        descriptionTip: true,
+        mobileChecked: false,
+        codeChecked: false,
+        passwordChecked: false,
+        descriptionChecked: false,
+        contactNameChecked: false,
+        contactTelChecked: false,
+        contactEmailChecked: false,
+        rules: {
+          mobile: [
+            {validator: validateMobile, trigger: 'blur'}
+          ],
+          code: [
+            {validator: validateCode, trigger: 'blur'}
+          ],
+          password: [
+            {validator: validatePassword, trigger: 'blur'}
+          ],
+          description: [
+            {validator: validateDescription, trigger: 'blur'}
+          ],
+          contactName: [
+            {validator: validateContactName, trigger: 'blur'}
+          ],
+          contactTel: [
+            {validator: validateContactTel, trigger: 'blur'}
+          ],
+          contactEmail: [
+            {validator: validateContactEmail, trigger: 'blur'}
+          ]
+        }
+      }
+    },
+    methods: {
+//      判断我同意是否被选中
+      checkboxChecked () {
+        this.checked = !this.checked
+      },
+//      获取校验码
+      getCheckCode () {
+        this.$http.get(`/appeal/check/mobile`, {params: {mobile: this.account.mobile}})
+          .then(response => {
+            this.token = response.data.content.token
+            console.log(response.data.content)
+            console.log(this.token)
+            if (this.token !== '') {
+              this.$message({
+                message: '验证码已经发送到您的手机,请注意查收',
+                type: 'success'
+              })
+              this.sendAccountCode = false
+              this.account_time = 60
+              var accountTime = setInterval(() => {
+                this.account_time--
+                if (this.account_time <= 0) {
+                  this.sendAccountCode = true
+                  clearInterval(accountTime)
+                }
+              }, 1000)
+            }
+          }).catch(err => {
+            this.$message.error(err.errMsg)
+          })
+      },
+      //    提交表单
+      submit () {
+        if (this.mobileChecked && this.codeChecked && this.passwordChecked && this.descriptionChecked && this.contactNameChecked && this.contactTelChecked && this.contactEmailChecked && this.checked) {
+          let param = new FormData()
+          param.append('mobile', this.account.mobile)
+          param.append('code', this.account.code)
+          param.append('password', this.account.password)
+          param.append('description', this.account.description)
+          param.append('contactName', this.account.contactName)
+          param.append('contactTel', this.account.contactTel)
+          param.append('contactEmail', this.account.contactEmail)
+          param.append('token', this.token)
+          let config = {
+            headers: {'Content-Type': 'multipart/form-data'}
+          }
+          this.$http.post('/appeal/account', param, config)
+            .then(response => {
+              if (response.data.success) {
+                this.goNextStep = false
+//                待跳转到设置页面
+//                window.loaction.href = ''
+              } else {
+                this.goNextStep = true
+                return Promise.reject(response.data)
+              }
+            }).catch(err => {
+              this.$message.error(err.errMsg)
+            })
+        }
+      },
+//      跳转至个人页面
+      goReturn () {
+//        window.loaction.href = ''
+      }
+    }
+  }
+</script>
+<style lang="scss" scoped>
+  .certification {
+    padding-bottom: 145px;
+    margin: 0 auto;
+    width: 100%;
+    background: #eee;
+  .container{
+    padding-top: 50px;
+    margin: 0 auto;
+    width: 980px;
+    text-align: center;
+  .content{
+    padding: 0 50px;
+    margin: 50px auto 0;
+    width: 100%;
+    text-align: center;
+    background: #fff;
+  .content-top{
+    height: 80px;
+    line-height: 80px;
+  h3{
+    margin-bottom: 0;
+    font-size: 24px;
+    color: #000;
+    border-bottom: 1px solid #dcdcdc;
+  }
+  .step{
+    position: relative;
+    margin-top: 10px;
+  img{
+    width: 315px;
+    height: 46px;
+  }
+  .step-item{
+    position: absolute;
+    top: 45px;
+    left: 265px;
+  span{
+    margin-right: 85px;
+    font-size: 14px;
+    color: #b4b4b4;
+  }
+  span.active {
+    color: #0076ad;
+  }
+  }
+  }
+  }
+  form {
+    padding-bottom: 44px;
+    margin-top: 36px;
+  input{
+    padding: 0 0 0 18px;
+    width: 360px;
+    height: 44px;
+    line-height: 44px;
+    font-size: 14px;
+    color: #000;
+    border-radius: 0;
+  }
+  span.tip{
+    position: absolute;
+    top: 0;
+    right: -238px;
+    font-size: 13px;
+    color: #8c8c8c;
+  a{
+    font-size: 13px;
+    color: #0076ad;
+  }
+  }
+  span.tip.description {
+    top: 10px;
+    right: -266px;
+    width: 245px;
+    line-height: 18px;
+    text-align: left;
+  }
+  span.tip.codeError-tip {
+    right: -112px;
+    color: #f56c6c;
+  }
+  i{
+    position: absolute;
+    top: 13px;
+    left: 20px;
+    font-size: 20px;
+    color: #a0a0a0;
+  }
+  input[type='checkbox']{
+    margin: 0 14px 0 55px;
+    float: left;
+    width: 16px;
+    height: 16px;
+  }
+  span.agree{
+    float: left;
+    margin: 1px 0 0 10px;
+    font-size: 14px;
+    color: #8b8b8b;
+  a{
+    color: #0076ad;
+  }
+  }
+  .form-group.agree{
+    margin: 20px auto 0 !important;
+  }
+  .btn {
+    margin: 34px 0 16px 0;
+    width: 360px;
+    height: 44px;
+    line-height: 44px;
+    font-size: 16px;
+    color: #fff;
+    background: #0076AD;
+    border-radius: 3px;
+  }
+  }
+  .content-bottom{
+    margin-top: 35px;
+    padding-bottom: 50px;
+  p{
+    font-size: 24px;
+    color: #323232;
+  img{
+    margin-right: 20px;
+    width: 30px;
+    height: 28px;
+  }
+  }
+  p.pass{
+    font-size: 24px;
+    color: #e77405;
+  img{
+    height: 30px;
+  }
+  }
+  p.passed {
+    color: #2ab300;
+  img{
+    height: 30px;
+  }
+  }
+  span{
+    display: inline-block;
+    margin: 15px 0 140px 0;
+    font-size: 14px;
+    color: #8b8b8b;
+  }
+  .close-btn{
+    margin: 0 auto;
+    width: 200px;
+    height: 36px;
+    line-height: 36px;
+    font-size: 14px;
+    text-align: center;
+    color: #323232;
+    border: 1px solid #d2d2d2;
+    border-radius: 3px;
+    cursor: pointer ;
+  }
+  }
+  }
+  }
+  }
+</style>

+ 3 - 0
components/appeal/index.js

@@ -0,0 +1,3 @@
+import AccountAppeal from './AccountAppeal.vue'
+
+export { AccountAppeal }

+ 48 - 0
components/default/CommonFooter.vue

@@ -0,0 +1,48 @@
+<template>
+  <div class="navbar navbar-static-bottom x-footer">
+    <div class="container">
+      <div class="x-about text-center">
+        <ul class="list-inline">
+          <li><a href="#">关于优软</a></li>
+          <li><a href="#">法律声明</a></li>
+          <li><a href="#">服务条款 </a></li>
+        </ul>
+        <ul class="list-inline">
+          <li><a href="http://www.ubtob.com">优软云首页 </a></li>
+          <li><a href="http://mall.ubtob.com">优软商城 </a></li>
+          <li><a href="http://finance.ubtob.com">金融服务 </a></li>
+          <li><a href="http://public.ubtob.com">公共服务 </a></li>
+          <li><a href="http://open.ubtob.com">开放平台 </a></li>
+          <li><a href="http://help.ubtob.com">客服中心 </a></li>
+        </ul>
+        <p class="x-text-muted x-copyright">©&nbsp;2015&nbsp;深圳市优软科技有限公司&nbsp;版权所有&nbsp;粤ICP备15112126号-1</p>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+  export default {
+    name: 'view-footer'
+  }
+</script>
+<style lang="scss" scoped>
+.navbar{
+  padding: 30px 0;
+  margin-top: -140px;
+  background: #eee;
+  .container{
+    position: relative;
+    width: 990px!important;
+    .list-inline{
+      margin-bottom: 10px;
+    }
+    a{
+      color: #666;
+      outline: 0;
+    }
+    .x-text-muted {
+      color: #b9b9b7;
+    }
+  }
+}
+</style>

+ 305 - 0
components/default/ManualAppealHeader.vue

@@ -0,0 +1,305 @@
+<template>
+  <header class="header">
+    <nav class="navbar">
+      <div class="navbar-container container">
+        <div class="navbar-header">
+          <a href="http://www.ubtob.com" class="item navbar-link">
+            <img src="/images/logo/uas.png" class="navbar-logo">
+          </a>
+          <a href=""><span class="navbar-slogan">人工申诉</span></a>
+        </div>
+      </div>
+    </nav>
+  </header>
+</template>
+<script>
+  export default {
+    name: 'AccountCenterHeader',
+    data () {
+      return {}
+    },
+    computed: {
+//      user () {
+//        return this.$store.state.option.user
+//      },
+//      enterprise () {
+//        let ens = this.user.data.enterprises
+//        if (ens && ens.length) {
+//          return ens.find(item => item.current) || {enName: '个人账户'}
+//        } else {
+//          return {enName: '个人账户'}
+//        }
+//      },
+//      sortEnterprises () {
+//        let ens = this.user.data.enterprises
+//        if (ens && ens.length) {
+//          ens.sort(function (a, b) {
+//            return b.lastLoginTime - a.lastLoginTime
+//          })
+//        }
+//        return ens
+//      },
+//      url () {
+//        return this.$store.state.option.url
+//      }
+    },
+    methods: {
+//      logout () {
+//        this.$http.get('/logout/crossBefore').then(response => {
+//          if (response.data) {
+//            window.location.href = response.data.logoutUrl + '&baseUrl=' + encodeURIComponent(window.location.protocol + '//' + window.location.host + response.data.baseUrl)
+//          }
+//        })
+//      },
+//      onLoginClick () {
+//        this.$http.get('/login/page', {params: {returnUrl: window.location.href}}).then(response => {
+//          if (response.data) {
+//            window.location.href = response.data.content + '&baseUrl=' + encodeURIComponent(window.location.protocol + '//' + window.location.host + response.data.baseUrl)
+//          }
+//        })
+//      },
+//      onRegisterClick () {
+//        this.$http.get('/register/page').then(response => {
+//          if (response.data) {
+//            window.location.href = response.data.content
+//          }
+//        })
+//      },
+//      // 切换当前企业
+//      switchEnterprise (en) {
+//        this.showEnterpriseToggle = false
+//        this.$http.get(`/user/authentication/${en.uu}`).then(() => {
+//          this.$store.dispatch('loadUserInfo')
+//          window.location.href = '/'
+//        })
+//      },
+//      toVendor: function () {
+//        let isSelf = true
+//        let tempEnterprise = {}
+//        let ens = this.user.data.enterprises
+//        if (ens && ens.length) {
+//          ens.forEach(function (item) {
+//            if (item.current) {
+//              isSelf = false
+//              tempEnterprise = item
+//            }
+//          })
+//        } else {
+//          isSelf = true
+//        }
+//        if (isSelf) {
+//          window.location.href = '/register-saler'
+//        } else {
+//          if (tempEnterprise.isVendor === 313) {
+//            window.location.href = '/vendor#/index'
+//          } else {
+//            window.location.href = '/register-saler'
+//          }
+//        }
+//      }
+    }
+  }
+</script>
+<style lang="scss" scoped>
+  @import '~assets/scss/mixins';
+  @import '~assets/scss/variables';
+
+  $nav-height: 60px;
+  $nav-boxshadow: 2px 2px 5px rgba(0,0,0,.12);
+  $nav-color: #3c3c3c;
+  .header .navbar{
+    min-height: inherit;
+    border-radius: 0;
+  }
+  .header .navbar .navbar-container .navbar-right .dropdown .dropdown-menu li span,.header .navbar .navbar-container .navbar-right .dropdown .dropdown-menu li a{
+    font-size: 12px;
+  }
+  .header .navbar .navbar-container .navbar-right .dropdown .dropdown-menu .menu-item a{
+    width: 100%;
+    display: inline-block;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    height: 25px;
+  }
+  .header .navbar .navbar-container .navbar-right .dropdown .dropdown-menu .menu-item{
+    height: 30px;
+  }
+  .dropdown-menu>li>a{
+    padding: 0;
+    line-height: 30px;
+  }
+  .dropdown-menu>li a:hover{
+    background: none;
+    text-decoration: underline !important;
+  }
+  .header {
+    height: $nav-height;
+
+  .navbar {
+    width: 100%;
+    height: 100%;
+    font-size: $font-size-small;
+    background-color: $black-light;
+    box-shadow: $nav-boxshadow;
+    -o-box-shadow: $nav-boxshadow;
+    -moz-box-shadow: $nav-boxshadow;
+    -webkit-box-shadow: $nav-boxshadow;
+
+  .navbar-container {
+
+  .item-wrap {
+    display: inline-block;
+  }
+
+  .item {
+    color: $nav-color;
+    display: inline-block;
+    height: $nav-height;
+    line-height: $nav-height;
+  }
+
+  a {
+    position: relative;
+    color: $nav-color;
+    font-weight: bold;
+    font-size: 16px;
+    > span:before{
+        content: '';
+        position: absolute;
+        top: 5px;
+        left: 16px;
+        width: 1px;
+        height: 14px;
+        background: #bfbfbf;
+      }
+  }
+
+  .navbar-header {
+    float: left;
+
+  .navbar-logo {
+    margin-bottom: 2px;
+  }
+
+  .navbar-slogan {
+    margin-left: $sm-pad;
+  }
+
+  }
+
+  .navbar-right {
+    float: right;
+
+  .item {
+    padding: 0 $pad;
+  }
+
+  .dropdown {
+  .dropdown-toggle {
+    line-height: $nav-height;
+    border-left: 1px solid $black-light;
+    border-right: 1px solid $black-light;
+    height: 35px;
+  a {
+    margin-left: 15px;
+    float: right;
+  &:hover {
+     color: $red !important;
+   }
+  }
+  &:hover {
+     border-left: 1px solid #999;
+     border-right: 1px solid #999;
+   }
+  span {
+    display: inline-block;
+    max-width: 190px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    float: right;
+  }
+  }
+  .menu-item-first {
+    background: #eee;
+    padding: 0 12px;
+    line-height: 30px;
+    font-size: 12px;
+  >span:nth-child(1) {
+     cursor: default;
+     font-weight: bold;
+   }
+  input {
+    width: 174px;
+    height: 24px;
+    margin-left: 35px;
+    background: #fff;
+    border: 1px solid #5078cb;
+    padding-left: 4px;
+  }
+  .search-enterprise {
+    display: inline-block;
+    width: 36px;
+    height: 24px;
+    color: #fff;
+    background: #5078cb;
+    text-align: center;
+    line-height: 24px;
+    cursor: pointer;
+  }
+  }
+
+  .dropdown-menu {
+    padding: 0 6px 13px;
+    margin:0;
+    border-radius: 0;
+    right: unset;
+    background: #fff;
+    border: 1px solid #999999;
+    border-top: none;
+    -webkit-box-shadow: none;
+    -moz-box-shadow: none;
+    box-shadow: none;
+
+  ::-webkit-scrollbar {
+    background: #f6f6f6;
+  }
+
+  ul {
+    max-height: 300px;
+    overflow-y: auto;
+    background: #f6f6f6;
+  }
+
+  .menu-item {
+    padding: 0 12px;
+  a {
+    color: #333;
+    max-width: 300px;
+    line-height: 30px;
+    width: auto;
+  &:hover {
+     color: #5078cb;
+     text-decoration: none!important;
+   }
+  }
+  }
+  }
+
+  &:hover {
+     background-color: $white;
+
+  .dropdown-toggle {
+    color: $text;
+  }
+  a {
+    color: $text
+  }
+  }
+  }
+  }
+  }
+  }
+  }
+</style>

+ 4 - 1
components/default/index.js

@@ -1,3 +1,6 @@
 import AccountCenterHeader from './AccountCenterHeader.vue'
+import LoginHeader from './LoginHeader.vue'
+import CommonFooter from './CommonFooter.vue'
+import ManualAppealHeader from './ManualAppealHeader.vue'
 
-export { AccountCenterHeader }
+export { AccountCenterHeader, LoginHeader, CommonFooter, ManualAppealHeader }

+ 4 - 1
components/login/Footer.vue

@@ -22,7 +22,7 @@
 </template>
 <script>
   export default {
-    name: 'footer'
+    name: 'view-footer'
   }
 </script>
 <style lang="scss" scoped>
@@ -31,6 +31,9 @@
   .container{
     position: relative;
     width: 990px!important;
+    .list-inline{
+      margin-bottom: 10px;
+    }
     a{
       color: #666;
       outline: 0;

+ 7 - 3
components/register/EnterpriseRegistration.vue

@@ -13,7 +13,10 @@
             </el-form-item>
             <el-form-item prop="code">
               <el-input type="text" v-model="enterprise.code"
-                                    v-bind:class="{ active: this.codeErrorChecked }" auto-complete="off" class="msg" placeholder="短信验证码"></el-input>
+                                    v-bind:class="{ active: this.codeErrorChecked }"
+                                    auto-complete="off"
+                                    class="msg"
+                                    placeholder="短信验证码"></el-input>
               <el-button type="primary" class="code"
                          v-show="sendEnterpriseCode"
                          @click="getCheckCode"
@@ -445,7 +448,7 @@
       },
 //      验证手机
       CheckPhone () {
-        if (this.mobileChecked && this.codeChecked) {
+        if (this.mobileChecked && this.codeChecked && this.checked) {
           var url = window.location.search
           var request = {}
           if (url.indexOf('?' !== -1)) {
@@ -480,6 +483,7 @@
                   this.isHasEmail = false
                 }
               } else {
+                this.goNextStep = true
                 return Promise.reject(response.data)
               }
             }).catch(err => {
@@ -490,7 +494,7 @@
 //      确认注册
       sureRegister () {
         if (!this.isHasRegister) {
-          if (this.spaceNameChecked && this.businessCodeChecked && this.vipNameChecked && this.passwordChecked && this.passwordConfirmChecked && this.emailChecked) {
+          if (this.spaceNameChecked && this.businessCodeChecked && this.vipNameChecked && this.passwordChecked && this.passwordConfirmChecked && this.emailChecked && this.checked) {
             var url = window.location.search
             var request = {}
             if (url.indexOf('?' !== -1)) {

+ 7 - 4
components/register/PersonalRegistration.vue

@@ -21,7 +21,9 @@
               <el-input type="password" v-model="item.confirm" auto-complete="off" placeholder="密码确认"></el-input>
             </el-form-item>
             <el-form-item prop="mobile">
-              <el-input v-model="item.mobile" placeholder="手机号码"></el-input>
+              <el-input v-model="item.mobile"
+                        v-bind:class="{active: mobileRegister}"
+                        placeholder="手机号码"></el-input>
               <span class="tip" v-show="showMsgTip">单个手机号只能注册一个用户</span>
               <span class="tip tip-mobile" v-show="mobileRegister">该手机号已被注册</span>
             </el-form-item>
@@ -33,7 +35,7 @@
                          @click="getCheckCode"
                          :disabled="this.checkMobile">获取验证码</el-button>
               <el-button type="primary"  v-show="!sendPersonalCode" class="code code-send">已发送({{personal_time}}s)</el-button>
-              <span v-show="codeErrorChecked" class="codeError-tip">验证码输入错误</span>
+              <!--<span v-show="codeErrorChecked" class="codeError-tip">验证码输入错误</span>-->
             </el-form-item>
             <el-form-item>
               <!--<el-button type="primary" @click="submitForm('item')" :disabled="!this.item.vipName || !this.item.password || !this.item.confirm  || !this.item.code || !this.checked" class="finish">完成注册</el-button>-->
@@ -268,7 +270,7 @@
       },
 //      表单提交
       submit () {
-        if (this.vipNameChecked && this.passwordChecked && this.confirmChecked && this.mobileChecked && this.codeChecked) {
+        if (this.vipNameChecked && this.passwordChecked && this.confirmChecked && this.mobileChecked && this.codeChecked && this.checked) {
           var url = window.location.search
           var request = {}
           if (url.indexOf('?' !== -1)) {
@@ -293,6 +295,7 @@
           this.$http.post('/sso/personal/register', param, config)
             .then(response => {
               if (response.data.success) {
+//                window.loaction.href = '/'
               } else {
                 return Promise.reject(response.data)
               }
@@ -500,7 +503,7 @@
             }
             span.agree{
               float: left;
-              margin: 2px 0 0 10px;
+              margin: 1px 0 0 10px;
               font-size: 14px;
               color: #8b8b8b;
               a{

+ 12 - 1
layouts/default.vue

@@ -1,9 +1,20 @@
 <template>
   <div>
     <nuxt/>
+    <div>
+      <common-footer/>
+    </div>
   </div>
 </template>
-
+<script>
+  import CommonFooter from '~components/default/CommonFooter.vue'
+  export default {
+    name: 'default',
+    components: {
+      CommonFooter
+    }
+  }
+</script>
 <style>
 html {
   font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;

+ 63 - 0
layouts/loginDefault.vue

@@ -0,0 +1,63 @@
+<template>
+  <div>
+    <nuxt/>
+    <div>
+      <view-footer/>
+    </div>
+  </div>
+</template>
+<script>
+  import Footer from '~components/login/Footer.vue'
+  export default {
+    name: 'default',
+    components: {
+      ViewFooter: Footer
+    }
+  }
+</script>
+<style>
+html {
+  font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+  font-size: 16px;
+  word-spacing: 1px;
+  -ms-text-size-adjust: 100%;
+  -webkit-text-size-adjust: 100%;
+  -moz-osx-font-smoothing: grayscale;
+  -webkit-font-smoothing: antialiased;
+  box-sizing: border-box;
+}
+
+*, *:before, *:after {
+  box-sizing: border-box;
+  margin: 0;
+}
+
+.button--green {
+  display: inline-block;
+  border-radius: 4px;
+  border: 1px solid #3b8070;
+  color: #3b8070;
+  text-decoration: none;
+  padding: 10px 30px;
+}
+
+.button--green:hover {
+  color: #fff;
+  background-color: #3b8070;
+}
+
+.button--grey {
+  display: inline-block;
+  border-radius: 4px;
+  border: 1px solid #35495e;
+  color: #35495e;
+  text-decoration: none;
+  padding: 10px 30px;
+  margin-left: 15px;
+}
+
+.button--grey:hover {
+  color: #fff;
+  background-color: #35495e;
+}
+</style>

+ 1 - 1
nuxt.config.js

@@ -98,5 +98,5 @@ module.exports = {
     ssr: true
   }],
   /* TODO 暂时代理到商城测试版,之后再做出调整 */
-  proxyTable: ['/api/**', '/login/**', '/user**', '/logout**', '/sso/**', '/appeal/**']
+  proxyTable: ['/api/**', '/login/**', '/user**', '/logout**', '/sso/**', '/appeal/**', '/update/user/**']
 }

+ 17 - 0
pages/appeals/accountAppeal.vue

@@ -0,0 +1,17 @@
+<template>
+  <div>
+    <manualAppeal-header/>
+    <account-appeal/>
+  </div>
+</template>
+<script>
+  import ManualAppealHeader from '~components/default/ManualAppealHeader.vue'
+  import AccountAppeal from '~components/appeal/AccountAppeal.vue'
+  export default {
+    layout: 'default',
+    components: {
+      ManualAppealHeader,
+      AccountAppeal
+    }
+  }
+</script>

+ 148 - 0
pages/common/agreement.vue

@@ -0,0 +1,148 @@
+<template>
+  <div>
+    <div>
+      <accountCenter-header/>
+    </div>
+    <div class="x-content">
+      <div class="container">
+        <div class="x-form-wrap">
+          <%--优软云协议开始--%>
+          <div class="rules-content">
+            <h3>优软云平台服务条款</h3>
+            <div class="content">
+              <p>优软云平台(下称“平台”)依据以下条件和条款为您提供所享有的服务,请仔细阅读并遵守。</p>
+              <p>欢迎阅读优软云平台服务条款协议(下称“本协议”)。本协议阐述之条款和条件适用于您使用优软云网站(所涉域名为:ubtob.com、usoftmall.com,下同),所提供的在企业间(B-TO-B)、企业对个人(B-TO-C)、企业对政府(B-TO-G)电子商务、行政事务中的各种工具和服务(下称“服务”)。</p>
+              <br/>
+              <div><strong>一、接受条款</strong></div>
+              <p>1、本协议内容包括协议正文及所有平台已经发布或将来可能发布的各类规则。所有规则为协议不可分割的一部分,与协议正文具有同等法律效力。 </p>
+              <p>2、以任何方式进入优软云网站并使用服务即表示您已充分阅读、理解并同意接受本协议的条款和条件(以下合称“条款”),并已对其中加黑加粗免责条款进行充分理解,同意自行承担该免责条款的一切法律后果。 </p>
+              <p><strong>3、平台有权根据业务需要酌情修订“条款”,并以网站公告的形式进行更新,不再单独通知予您。经修订的“条款”一经在优软云网站公布,即产生效力。</strong>如您不同意相关修订,请您立即停止使用“服务”。如您继续使用“服务”,则将视为您已接受经修订的“条款”,当您与平台发生争议时,应以最新的“条款”为准。 </p>
+              <br/>
+              <p><strong>二、注册</strong></p>
+              <p>1、注册服务使用对象<br>
+                优软云注册用户必须是具备完全民事权利能力和与所从事的民事行为相适应的行为能力的自然人、法人或其他组织,否则您及您的监护人应承担因此而导致的一切后果,且平台有权注销(永久冻结)您的账户,并向您及您的监护人索偿。如您代表一家公司或其他法律主体在优软云网站登记,则您声明和保证,您有权使该公司或该法律主体受本协议“条款”的约束。 </p>
+              <p>2、注册账号 </p>
+              <p>2.1在您按照注册页面提示填写信息、阅读并同意本协议且完成全部注册程序后,或在您按照激活页面提示填写信息、阅读并同意本协议且完成全部激活程序后,或您以其他优软云平台允许的方式实际使用优软云服务时,您即受本协议的约束。您可以使用您提供或确认的邮箱、手机号码或者平台允许的其它方式作为登录手段进入优软云网站。<br/>
+                2.2.  在完成注册或激活流程时,用户需按相应页面的提示准确提供并及时更新资料,以使之真实、及时、完整和准确。<strong>合理理由怀疑用户提供的资料错误、不实、过时或不完整的,平台有权向用户发出询问或要求改正的通知,并有权直接做出删除相应资料的处理,直至中止、终止对该用户提供的部分或全部服务,因此产生的任何直接或间接损失及不利后果将由该用户承担,平台对此不承担任何责任。</strong><br/>
+                2.3个人注册用户同一申请人只能注册一个账号;企业注册用户同一个申请人,可以用多个营业执照,申请多个账号;一个营业执照只能注册一个账号。<br/>
+                2.4在完成注册或激活流程时,您应当按照法律法规要求,按相应页面的提示准确提供并及时更新您的资料,以使之真实、及时,完整和准确。<strong>如有合理理由怀疑您提供的资料错误、不实、过时或不完整的,平台有权向您发出询问及/或要求改正的通知,并有权直接做出删除相应资料的处理,直至中止、终止对您提供部分或全部平台服务,平台对此不承担任何责任,您将承担因此产生的任何直接或间接损失及不利后果。</strong></p>
+              <br/>
+              <p>3、账户安全 </p>
+              <p>您须自行负责对您的优软云账号和密码保密,且须对该账号和密码下发生的所有活动(包括但不限于信息披露、发布信息、网上点击同意或提交各类规则协议、网上续签协议或购买服务等)承担责任。<strong>您同意:(a)如发现任何人未经授权使用您的优软云登录名和密码,或发生违反保密规定的任何其他情况,您会立即通知平台,并授权平台将该信息同步给优软云网站;(b)确保您在每个上网时段结束时,以正确步骤离开网站。平台不能也不会对因您未能遵守本款规定而发生的任何损失或损毁负责。您理解平台对您的请求采取行动需要合理时间,平台对在采取行动前已经产生的后果(包括但不限于您的任何损失)不承担任何责任。除非有法律规定或司法裁定,且征得平台的同意,否则,您的优软云登录账号和密码不得以任何方式转让、赠与或继承。 </strong></p>
+              <br/>
+              <p><strong>三、服务终止 </strong></p>
+              <p>1、您同意,在平台未向您收费的情况下,平台可自行全权决定以任何理由(包括但不限于平台认为您已违反本协议的字面意义和精神,或您以不符合本协议的字面意义和精神的方式行事)终止您的“服务”密码、账户(或其任何部份)或您对“服务”的使用。您同意,在平台向您收费的情况下,平台应基于合理的怀疑且经电子邮件通知的情况下实施上述终止服务的行为。您进一步承认和同意,平台根据本协议规定终止您服务的情况下可立即使您的账户无效,或注销您的账户以及在您的账户内的所有相关资料和档案,和/或禁止您进一步接入该等档案或“服务”。<strong>账户终止后,平台没有义务为您保留原账户中或与之相关的任何信息,或转发任何未曾阅读或发送的信息给您或第三方。此外,您同意,平台不会就终止向您提供“服务”而对您或任何第三者承担任何责任。</strong><br/>
+                2、您有权向平台要求注销您的账户,经平台审核同意的,平台将注销您的账户,届时,您与平台基于本协议的合同关系即终止。您的账户被注销后,平台没有义务为您保留或向您披露您账户中的任何信息,也没有义务向您或第三方转发任何您未曾阅读或发送过的信息。<br/>
+                3、您理解并同意,您与平台的合同关系终止后:<br/>
+                1)平台有权继续保存您的资料。<br/>
+                2)您在使用服务期间存在违法行为或违反本协议和/或规则的行为的,平台仍可依据本协议向您主张权利。<br/>
+                3)您在使用服务期间因使用服务与其他用户之间发生的关系,不因本协议的终止而终止,其他用户仍有权向您主张权利,您应继续按您的承诺履行义务。<br/>
+              </p>
+              <p><strong>四、账号注销</strong></p>
+              <p>
+                1、如您的账户同时符合以下条件,您的优软云账号可能被注销,不能再登录任一优软云网站,所有优软云网站服务将同时终止: (1)未通过真实认证的企业和个人账户; (2)连续6个月未使用您的邮箱、手机或本网站认可的其他方式和密码登录过本网站,也未登录过其他任意优软云网站; (3)不存在未到期的有效业务。<br/>
+                <strong>2、您同意并授权优软云网站,如您在任意优软云网站有欺诈、发布或销售伪劣商品、侵权他人合法权益或其他严重违反任意优软云网站规则的行为,该网站在优软云网站的范围内对此有权披露,您的账号可能被注销,不能再登录任意一家优软云网站,所有网站服务同时终止。</strong></p>
+              <br/>
+              <p><strong>五、关于费用。</strong></p>
+              <p>平台保留在根据第一条条款通知您后,收取服务费用的权利。您向优软云获取有偿服务或接触优软云服务器而发生的所有应纳税赋,以及相关硬件、软件、通讯、网络服务及其他方面的费用均由您自行承担。平台保留在无须发出书面通知,仅在网站公示的情况下,暂时或永久地更改或停止部分或全部“服务”的权利。</p>
+              <br/>
+              <p><strong>六、隐私声明。</strong></p>
+              <p>1.  您应当在注册时阅读并接受隐私声明以使用优软云,且您在作为优软云用户期间将继续受本协议及平台对隐私声明作出的任何修订的约束。<br/>
+                2.  用户数据资料、企业信息、真实姓名、地址、电子邮箱和联系电话等用户信息,在未经您同意之前,平台不会将您 的资料用于其他任何商业目的。<br/>
+                3.  平台有权通过对用户资料和使用服务的情况进行各类数据的统计和分析,以完成对用户的服务和交易,同时也用于解决各类争议和纠纷。<br/>
+                <strong>4.  当国家机构依照法定程序要求平台披露用户资料时,平台将根据执法单位的要求或为公共安全目的提供用户资料,在此情况下披露的任何内容,平台不承担任何责任。</strong><br/>
+                5.  平台在符合下列条件时,对用户资料进行必要范围以外利用:<strong>1)已取得您的同意;2)为免除您在生命、身体或财之急迫危险;3)为防止他人权益之重大危害;4)为增进公共利益,且无害于您的重大利益;5)实名认证过程中,平台会向相关第三方披露用户相关资料,用以核对并确认所有资料的真实性、合法性和有效性。<br/>
+                  6.  用户应对自己的用户名和密码发生的所有行为承担法律责任。因此,请用户妥善保管密码,不要向任何第三方披露,否则,用户将承担由此引发的一切法律后果。如果用户发现自己的密码可能已经泄漏,请及时更换。</strong></p>
+              <br/>
+              <p><strong>七、优软云服务</strong></p>
+              <p>1、通过优软云提供的平台服务,您可在优软云网站上发布交易信息、查询商品和服务信息、达成交易意向并进行交易、对其他会员进行评价、参加平台组织的活动以及使用其它信息服务及技术服务。<br/>
+                2、优软云网站仅作为用户物色交易对象,就货物和服务的交易进行协商,以及获取各类与贸易相关的服务的地点。同时,平台不涉及用户间因交易而产生的法律关系及法律纠纷,不会且不能牵涉进交易各方的交易当中。<strong>敬请注意,平台不能控制或保证商贸信息的真实性、合法性、准确性,亦不能控制或保证交易所涉及的物品、服务的质量、安全或合法性,以及相关交易各方履行在贸易协议项下的各项义务的能力。平台不能也不会控制交易各方能否履行协议义务。 </strong></p>
+              <br/>
+              <p><strong>八、网站安全 </strong></p>
+              <p>1.  未经平台允许,您不会为了以任何目的使用任何机器人、蜘蛛软件、刷屏软件或其他自动方式进入网站。此外,您同意您将不会:<br/>
+                1). 进行任何对平台造成或可能造成(按平台自行酌情确定)不合理或不合比例的重大负荷的行为;<br/>
+                2). 未经平台事先明示书面准许,对网站的任何内容(除您的用户信息以外)制作拷贝、进行复制、修改、制作衍生作品、分发或公开展示;<br/>
+                3). 干扰或试图干扰网站正常运行的任何行为,包括对网站使用包含可能破坏、改变、删除、不利影响、秘密截取、未经授权而接触或征用任何系统、数据或用户资料的任何病毒、特洛依木马、蠕虫、定时炸弹、删除蝇、复活节彩蛋、间谍软间或其他电脑程序;或其他电脑程序;<br/>
+                4). 在网站中发布、传播或使用法律法规视为被禁止或可能被禁止的任何内容;  否则,平台有权通过法律手段要求您停止一切违规违法行为,并追究相关责任。</p>
+              <br/>
+              <p><strong>九、赔偿。</strong></p>
+              <p>您同意,如因您违反本协议或经在此提及而纳入本协议的其他文件,或因您违反法律侵害了第三方的合法权利,或因您违反法律须承担行政或刑事责任,而使第三方或行政、司法机关对平台及其子公司、关联公司、分公司、董事、职员、代理人提出索赔或处罚要求(包括司法费用和其他专业人士的费用),您必须全额赔偿给平台及其子公司、关联公司、分公司、董事、职员、代理人,并使其等免遭损失。 </p>
+              <br/>
+              <p><strong>十、通知。 </strong></p>
+              <p>1、您应当准确填写并及时更新您提供的电子邮件地址、联系电话、联系地址、邮政编码等联系方式,以便平台或其他用户与您进行有效联系,因通过这些联系方式无法与您取得联系,导致您在使用平台服务过程中产生任何损失或增加费用的,应由您完全独自承担。您了解并同意,您有义务保持你提供的联系方式的有效性,如有变更需要更新的,您应按平台的要求进行操作。<br/>
+                2、除非另有明确规定,任何您与平台之间的通知应以电子邮件形式发送,(就平台而言)电子邮件地址为mail@usoftchina.com,或(就您而言)发送到您在登记注册过程中向平台提供的电子邮件地址,或有关方指明的该等其他地址。在电子邮件发出二十四(24)小时后,通知应被视为已送达,除非发送人被告知相关电子邮件地址已作废。或者,平台可通过邮资预付挂号邮件并要求回执的方式,将通知发到您在登记过程中向平台提供的地址。在该情况下,在付邮当日三(3)天后通知被视为已送达。 </p>
+              <br/>
+              <p><strong>十一、不可抗力。 </strong></p>
+              <p><strong>对于因平台合理控制范围以外的原因,包括但不限于自然灾害、罢工或骚乱、物资短缺或定量配给、暴动、战争行为、政府行为、通讯或其他设施故障或严重伤亡事故等,致使平台延迟或未能履约的,平台不对您承担任何责任。</strong></p>
+              <br/>
+              <p><strong>十二、法律适用、管辖及其他</strong></p>
+              <p>1.  本协议之效力、解释、变更、执行与争议解决均适用中华人民共和国大陆地区法律,如无相关法律规定的,则应用国际商业惯例和(或)行业惯例。<br/>
+                2.  用户与平台仅为独立订约人关系,本协议无意结成或创设任何代理、合伙、合营、雇佣与被雇佣或特性授权与被授权关系。<br/>
+                3.  用户同意平台因经营业务需要有权将本协议项下的权力义务就部分或全部进行转让,而无须再通知予您并取得您的同意。<br/>
+                4.  因本协议或优软云服务所引起或与其有关的任何争议应向优软科技有限公司所在地人民法院提起诉讼。<br/>
+                5.  本协议取代您和平台先前就相同事项订立的任何书面或口头协议。倘若本协议任何条款被裁定为无效或不可强制执行,该项条款应被撤销,而其余条款应予遵守和执行。条款标题仅为方便参阅而设,并不以任何方式界定、限制、解释或描述该条款的范围或限度。<br/>
+                6.  平台未就您或其他人士的某项违约行为采取行动,并不表明平台撤回就任何继后或类似的违约事件采取动的权利。<br/>
+                7.  本协议的最终解释权归平台所有。</p>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+  import AccountCenterHeader from '~components/default/AccountCenterHeader.vue'
+  export default {
+    layout: 'default',
+    components: {
+      AccountCenterHeader
+    }
+  }
+</script>
+<style lang="scss" scoped>
+  .x-content {
+    position: relative;
+    margin-top: 30px;
+    .container{
+      width: 990px!important;
+      position: relative;
+      .x-form-wrap {
+        padding: 20px;
+        background: #fff;
+        border: 1px solid #e4ecf3;
+        padding-bottom: 40px;
+        .rules-content {
+          width: 100%;
+          margin: 0 auto;
+          h3 {
+            font-size: 18px;
+            font-weight: bold;
+            line-height: 80px;
+            text-align: center;
+            margin-bottom: 0;
+            color: #333;
+          }
+          .content {
+            width: 98%;
+            margin: 0 auto;
+            font-size: 14px;
+            color: #333;
+            p {
+              font-size: 14px;
+              color: #333;
+              margin-bottom: 0;
+              /* text-indent: 2em; */
+              line-height: 35px;
+              strong{
+                font-weight: bold;
+              }
+            }
+            div {
+              line-height: 35px;
+            }
+          }
+        }
+      }
+    }
+  }
+</style>

+ 3 - 6
pages/index.vue

@@ -2,19 +2,16 @@
   <div>
     <login-header/>
     <login/>
-    <footer/>
   </div>
 </template>
 <script>
   import LoginHeader from '~components/default/LoginHeader.vue'
-  import Login from '~components/login/Login.vue'
-  import Footer from '~components/login/Footer.vue'
+  import {Login} from '~components/login'
   export default {
-    layout: 'default',
+    layout: 'loginDefault',
     components: {
       LoginHeader,
-      Login,
-      Footer
+      Login
     }
   }
 </script>