陶杰
2024-12-23 d39644872fa6f9499fc2c1651bced631a9e96b19
pages/login/supplier-login.vue
@@ -1,498 +1,804 @@
<template>
  <view class="main-container login-container img100 relative" style="margin-top: 0rpx;">
    <!-- background-image:url('@/static/images/supplier/login/bg.png') -->
   <view class="main-container login-container img100 relative" style="margin-top: 0rpx;min-height: 100vh;">
      <!-- background-image:url('@/static/images/supplier/login/bg.png') -->
    <image class="component-bg"
           src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/a5/a54508de179a4942918ecb2c5a4aa9f5bg.png"
           mode="scaleToFill"/>
    <view class="t-login top-bg">
      <view class="nav-title">登录</view>
      <view class="login">
        <form class="cl">
          <view class="t-a titles-top">
            <view class="title-1">HELLO</view>
            <view class="title-2">欢迎登录<span class="title-3">花满芫</span>
              <!-- #ifdef PUB_SUPPLIER -->
              <span>供应商管理平台</span>
              <!-- #endif -->
              <!-- #ifdef PUB_PARTNER -->
              <span>合伙人管理平台</span>
              <!-- #endif -->
            </view>
          </view>
          <view class="t-a input form-input" v-if="loginType=='pwd'">
            <!-- <input type="text" name="userName" placeholder="请输入账号" v-model="userName" /> -->
            <u-input placeholder="请输入账号" :border="false" v-model="userName"></u-input>
      <image class="component-bg"
         src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/a5/a54508de179a4942918ecb2c5a4aa9f5bg.png"
         mode="scaleToFill" />
      <view class="t-login top-bg">
         <view class="nav-title">登录</view>
         <view class="login">
            <form class="cl">
               <view class="t-a titles-top">
                  <view class="title-1">HELLO</view>
                  <view class="title-2">欢迎登录<span class="title-3">花满芫</span>
                     <!-- #ifdef PUB_SUPPLIER -->
                     <span>供应商管理平台</span>
                     <!-- #endif -->
                     <!-- #ifdef PUB_PARTNER -->
                     <span>合伙人管理平台</span>
                     <!-- #endif -->
                  </view>
               </view>
               <view class="t-a input form-input" v-if="loginType=='pwd'">
                  <!-- <input type="text" name="userName" placeholder="请输入账号" v-model="userName" /> -->
                  <u-input placeholder="请输入账号" :border="false" v-model="userName" @blur="validatePhoneNumber()"></u-input>
          </view>
          <view class="t-a input form-input" v-if="loginType=='pwd'">
            <!-- <input type="text" :password="true" name="password" placeholder="请输入密码" v-model="password" /> -->
            <u-input :password="true" :border="false" placeholder="请输入密码" v-model="password"></u-input>
          </view>
          <view class="t-a input form-input" v-if="loginType=='code'">
               </view>
               <view class="t-a input form-input" v-if="loginType=='pwd'">
                  <u-input :password="true" :border="false" placeholder="请输入密码" v-model="password"></u-input>
               </view>
               <view class="t-a input form-input" v-if="loginType=='code'">
            <!--                   <input type="text" name="userName" placeholder="请输入手机号" v-model="phoneNumber" />
            <view class="get-code" :style="{'color':getCodeBtnColor}" @click.stop="getCode()">
              {{getCodeText}}
            </view> -->
            <u-input placeholder="请输入手机号" :border="false" v-model="phoneNumber">
              <template slot="suffix">
                <view class="get-code" :style="{'color':getCodeBtnColor}" @click.stop="getCode()">
                  {{ getCodeText }}
                </view>
              </template>
            </u-input>
          </view>
                  <u-input placeholder="请输入手机号" :border="false" v-model="phoneNumber" @blur="validatePhoneNumber()">
                     <template slot="suffix">
                        <view class="get-code" :style="{'color':getCodeBtnColor}" @click.stop="getCode()">
                           {{ getCodeText }}
                        </view>
                     </template>
                  </u-input>
               </view>
          <view class="t-a form-input" v-if="loginType=='code'">
            <!-- <input type="text" name="userName" placeholder="请输入手机验证码" v-model="smsCode" /> -->
            <u-input placeholder="请输入手机验证码" :border="false" v-model="smsCode"></u-input>
               <view class="t-a form-input" v-if="loginType=='code'">
                  <u-input placeholder="请输入手机验证码" :border="false" v-model="smsCode"></u-input>
          </view>
               </view>
          <button @tap="login()" class="bottom-button">登 录</button>
               <view class="flex flex-wrap-normal" v-if="true">
                  <view :style="{'margin-top': '24rpx','margin-right': '12rpx','font-size':'24rpx'}"
                     @click="protocal=!protocal" class="component-radio" :class="[protocal?'cur':'']">
          <view class="flex">
            <view class="topic-font" v-if="loginType=='pwd'" @click="loginType='code'">手机验证码登录</view>
            <view class="topic-font" v-if="loginType=='code'" @click="loginType='pwd'">账号密码登录</view>
                  </view>
                  <!-- /pages/help/content?id=新手帮助 -->
                  <!-- 用户协议,隐私政策、卖家入驻协议、合伙人入驻协议 -->
            <view class="topic-font m-l-a m-r-0" @click="toReg">前往注册</view>
                  <!-- #ifdef PUB_PARTNER -->
                  <view class="topic-gray">
                     请仔细阅读<span class="t-red" @click="goto('/pages/help/content?id=用户协议',false)">《用户协议》</span>、
                     <span class="t-red" @click="goto('/pages/help/content?id=隐私政策',false)">《隐私政策》</span>
                     、<span class="t-red" @click="goto('/pages/help/content?id=合伙人入驻协议',false)">《合伙人入驻协议》</span>
                     如您同意该指引,请勾选开始使用本小程序
                  </view>
                  <!-- #endif -->
                  <!-- #ifdef PUB_SUPPLIER -->
                  <view class="topic-gray">
                     请仔细阅读<span class="t-red" @click="goto('/pages/help/content?id=用户协议',false)">《用户协议》</span>、
                     <span class="t-red" @click="goto('/pages/help/content?id=隐私政策',false)">《隐私政策》</span>
                     、<span class="t-red" @click="goto('/pages/help/content?id=卖家入驻协议',false)">《卖家入驻协议》</span>
                     如您同意该指引,请勾选开始使用本小程序
                  </view>
                  <!-- #endif -->
                  <!-- #ifdef PUB_CUSTOMER -->
                  <view class="topic-gray">
                     请仔细阅读<span class="t-red" @click="goto('/pages/help/content?id=用户协议',false)">《用户协议》</span>和
                     <span class="t-red" @click="goto('/pages/help/content?id=隐私政策',false)">《隐私政策》</span>
                     如您同意该指引,请勾选开始使用本小程序
                  </view>
                  <!-- #endif -->
            <!-- #ifdef PUB_CUSTOMER -->
            <view class="topic-font m-l-a m-r-0" @click="toHome">返回首页</view>
            <!-- #endif -->
          </view>
               </view>
        </form>
      </view>
    </view>
  </view>
               <button @tap="login()" class="bottom-button">登 录</button>
               <view class="flex">
                  <view class="topic-font" v-if="loginType=='pwd'&&apitype!=='loginAdmin'"
                     @click="loginType='code'">手机验证码登录</view>
                  <view class="topic-font" v-if="loginType=='code'&&apitype!=='loginAdmin'"
                     @click="loginType='pwd'">账号密码登录</view>
                  <view class="topic-font m-l-a m-r-0" v-if="apitype!=='loginAdmin'" @click="toReg">前往注册</view>
                  <!-- #ifdef PUB_CUSTOMER -->
                  <view class="topic-font m-l-a m-r-0" @click="toHome" v-if="!source">返回首页</view>
                  <view class="topic-font m-l-a m-r-0" @click="backpage" v-if="source==='jump'">返回上一页</view>
                  <!-- #endif -->
                  <!-- #ifdef PUB_PARTNER -->
                  <view class="topic-font m-l-a m-r-0" @click="()=>{
                     if(apitype==='loginPartner'){
                        apitype = 'loginAdmin'
                        loginType = 'pwd'
                     }else{
                        apitype = 'loginPartner'
                     }
                  }">
                     切换为{{apitype!=='loginPartner'?'合伙人':'质检人员'}}登录
                  </view>
                  <!-- #endif -->
               </view>
            </form>
         </view>
         <!--       <view v-if="optionsStr">
            {{optionsStr}}
         </view> -->
      </view>
   </view>
</template>
<script>
// import util from '@/utils/util.js'
// import gzmzApi from '@/api/gzmzApi.js'
// import myCache from '@/utils/myCache.js'
export default {
  // props: {
  //    // apitype: 'loginSupplier',
  //    apitype: {
  //       type: String,
  //       default () {
  //          // #ifdef PUB_SUPPLIER
  //          return 'loginSupplier'
  //          // #endif
  //          // #ifdef PUB_PARTNER
  //          return 'loginPartner'
  //          // #endif
  //          // #ifdef PUB_CUSTOMER
  //          return 'loginCustomer'
  //          // #endif
  //          // return 'loginPartner'
  //       }
  //    },
  // },
  data() {
    return {
      openId: '-1',
      userName: '',
      password: '',
      // userName: '',
      // password: '',
   export default {
      async onLoad(options) {
         this.source = options.source || ''
         this.sharePartnerUserId = options.sharePartnerUserId || ''
         // #ifdef PUB_CUSTOMER
         var query = options.q && decodeURIComponent(options.q) || ''
         var querydto = {}
         if (query) {
            try {
               var keyvalues = query.split("?")[1].split("&")
               for (var item of keyvalues) {
                  var tarr = item.split("=")
                  querydto[tarr[0]] = tarr[1]
               }
            } catch (e) {
               console.error('error', e)
            }
         }
         try {
            if (!querydto.partnerUserId) {
               if (options.query && options.query.scene || options.scene) {
                  //说明是特殊小程序二维码扫码跳转的
                  var keyvalues = decodeURIComponent(options.query&&options.query.scene || options.scene).split("&")
                  for (var item of keyvalues) {
                     var tarr = item.split("=")
                     querydto[tarr[0]] = tarr[1]
                  }
               }
            }
      phoneNumber: '',
      smsCode: '',
         } catch (e) {
            console.error('error2', e)
         }
      checked: false,
      loginType: 'pwd', //pwd和code,密码和验证码登录
      pcfvalue: undefined,
      getCodeText: '获取验证码',
      getCodeBtnColor: "#20613D",
      getCodeisWaiting: false,
      Timer: undefined,
      // #ifdef PUB_SUPPLIER
      apitype: 'loginSupplier',
      // #endif
      // #ifdef PUB_PARTNER
      apitype: 'loginPartner',
      // #endif
      // #ifdef PUB_CUSTOMER
      apitype: 'loginCustomer',
      // #endif
      // return 'loginPartner'
    };
  },
  methods: {
    async getCode() {
      console.log('getCode')
      uni.hideKeyboard() //隐藏已经显示的软键盘,如果软键盘没有显示则不做任何操作。
      if (this.getCodeisWaiting) {
        return;
      }
      if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.phoneNumber))) { //校验手机号码是否有误
        this.$message.showToast('请填写正确手机号码')
        return false;
      }
      this.getCodeText = "发送中..." //发送验证码
      this.getCodeisWaiting = true;
      this.getCodeBtnColor = "#000" //追加样式,修改颜色
      //示例用定时器模拟请求效果
      //setTimeout(()用于在指定的毫秒数后调用函数或计算表达式
      const {
        code
      } = await this.$http.request('post', '/api/sms/send/code', {
        data: {
          tel: this.phoneNumber,
          userType: this.apitype.replace("login", "").toLowerCase()
        }
      })
      if (code == 0) {
        uni.showToast({
          title: '验证码已发送',
          icon: "none"
        });
        this.setTimer(); //调用定时器方法
      } else {
        this.getCodeText = "获取验证码" //发送验证码
        this.getCodeisWaiting = false;
        this.getCodeBtnColor = "#20613D";
      }
      // setTimeout(() => {
      //    uni.showToast({
      //       title: '验证码已发送',
      //       icon: "none"
      //    }); //弹出提示框
      //    //示例默认1234,生产中请删除这一句。
      //    // this.code = '1234'; //发送验证码,进行填入
      //    this.setTimer(); //调用定时器方法
      // }, 1000)
    },
    //setTimer: 需要每隔一段时间执行一件事的的时候就需要使用SetTimer函数
    setTimer() {
      let holdTime = 60; //定义变量并赋值
      this.getCodeText = "重新获取(60)"
      //setInterval()是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式。
      //setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭。
      this.Timer = setInterval(() => {
        if (holdTime <= 0) {
          this.getCodeisWaiting = false;
          this.getCodeBtnColor = "#20613D";
          this.getCodeText = "获取验证码"
          clearInterval(this.Timer); //清除该函数
          return; //返回前面
        }
        this.getCodeText = "重新获取(" + holdTime + ")"
        holdTime--;
      }, 1000)
    },
    toHome(){
      uni.redirectTo({
        url: '/pages//pages/home/home'
      })
    },
    toReg() {
      // uni.switchTab({
      //    url: '/pages/index/index'
      // })
      var addstr = ''
      // #ifdef PUB_PARTNER
      addstr = '?source=step'
      uni.navigateTo({
        url: '/sub_pages/partner/partner-info/partner-info' + addstr
      })
      // #endif
      // #ifdef PUB_SUPPLIER
      uni.redirectTo({
        url: '/pages/login/supplier-reg'
      })
      // #endif
      // #ifdef PUB_CUSTOMER
      addstr = '?source=step'
      uni.navigateTo({
        url: '/sub_pages/customer/customer-info/customer-info' + addstr
      })
      // #endif
    },
    changeAll(e) {
      this.pcfvalue = e.detail.value[0]
    },
    async login() {
      uni.showLoading({
        title: '登陆中'
      });
      var that = this;
      if (this.loginType == 'pwd') {
        if (!that.userName) {
          uni.showToast({
            title: '请输入用户名',
            icon: 'none'
          });
          return;
        }
        if (!that.password) {
          uni.showToast({
            title: '请输入密码',
            icon: 'none'
          });
          return;
        }
      }
      if (this.loginType == 'code') {
        if (!that.phoneNumber) {
          uni.showToast({
            title: '请输入手机号',
            icon: 'none'
          });
          return;
        }
        if (!that.smsCode) {
          uni.showToast({
            title: '请输入手机验证码',
            icon: 'none'
          });
          return;
        }
      }
      // if (this.pcfvalue == undefined) {
      //    util.showMyToast('必须勾选《用户服务协议》及《隐私政策》');
      //    return;
      // }
      let post = {
        username: this.userName,
        password: this.password,
        tel: this.phoneNumber,
        smsCode: this.smsCode
        // openId: '123456789'
      }
      // const {
      // code
      // } = await this.$http.request('get', '/api/login/admin')
      const resp = await this.$store.dispatch(this.apitype, post);
      // uni.hideLoading()
      if (resp.code === 0) {
         console.log('options query111', options, querydto)
         // this.optionsStr = JSON.stringify(options) || ''
         if (querydto.partnerUserId) {
            //通过接口获取名称,兼容,url上不能放中文的情况
        // myCache.cache("userToken", res.data.accessToken)
        // let userRes = await gzmzApi.getMemberInfo();
        // if (userRes.status) {
        //    myCache.cache("userInfo", JSON.stringify(userRes.data))
        // }
        // setTimeout(() => {
        //    uni.navigateBack();
        // }, 1000);
      } else {
        // uni.showToast({
        //    title: '登录失败!',
        //    icon: 'none'
        // });
        return;
      }
    },
    tc1(id) {
      uni.navigateTo({
        url: '/pages/users/xieyi?id=' + id,
      });
    }
  }
};
            if (this.$storage.getItem('token')) {
               console.log('to login 1')
               this.$message.showLoading()
               //稍微等一会,避免currentInfo还在同步
               let tmp = this
               setTimeout(async () => {
                  try {
                     tmp.$message.hideLoading()
                     if (tmp.currentInfo && tmp.currentInfo.id || tmp.$storage.getItem('token')) {
                        await tmp.$store.dispatch('getCurrentInfo');
                        //已经登录的直接判断,并且绑定
                        tmp.$nextTick(async () => {
                           if (!tmp.currentInfo.customerDTO) {
                              tmp.$message.showToast(
                                 '您尚未完善信息无法绑定')
                              setTimeout(() => {
                                 uni.reLaunch({
                                    url: '/pages/home/home'
                                 })
                              }, 500)
                              return
                           } else {
                              if (tmp.currentInfo.customerDTO
                                 .partnerId) {
                                 tmp.$message.showToast(
                                    '您已绑定,请联系客服解除绑定')
                                 setTimeout(() => {
                                    uni.reLaunch({
                                       url: '/pages/home/home'
                                    })
                                 }, 500)
                                 return
                              } else {
                                 //前往绑定页面
                                 //直接绑定
                                 //调用接口绑定
                                 tmp.$message.showLoading()
                                 const {
                                    code,
                                    data
                                 } = await tmp.$http.request('post',
                                    '/api/customer/bind/partner', {
                                       data: {
                                          partnerUserId: querydto
                                             .partnerUserId
                                       }
                                    })
                                 tmp.$message.hideLoading()
                                 if (code == 0) {
                                    tmp.$message.showToast(`绑定合伙人成功`)
                                    await tmp.$store.dispatch('getCurrentInfo')
                                    //跳转到个人页面
                                    setTimeout(() => {
                                       uni.reLaunch({
                                          url: '/pages/home/home'
                                       })
                                    }, 500)
                                 }
                              }
                           }
                        })
                        //这种已经登录的
                        //确定是注册绑定还是重新绑定
                        // tmp.$nextTick(() => {
                        //    var tt = {
                        //       title: '提示:您已登录,是直接用该账号绑定,还是退出并注册新账号绑定合伙人',
                        //       content: '',
                        //       showCancel: true,
                        //       cancelText: '直接绑定',
                        //       cancelColor: '#000000',
                        //       confirmText: '退出注册',
                        //       confirmColor: '#20613D'
                        //    }
                        //    uni.showModal({
                        //       ...tt,
                        //       success: async (res) => {
                        //          if (res.confirm) {
                        //             //清空登录信息,
                        //             this.$store.commit('updateLogin',
                        //                false)
                        //             setTimeout(() => {
                        //                uni.navigateTo({
                        //                   url: `/sub_pages/customer/customer-info/customer-info?source=step&partnerUserId=${querydto.partnerUserId}&partnerUserName=${querydto.partnerUserName}`
                        //                })
                        //             }, 200)
                        //          }
                        //          if (res.cancel) {
                        //             if (!tmp.currentInfo.customerDTO) {
                        //                tmp.$message.showToast(
                        //                   '您尚未完善信息无法绑定')
                        //                return
                        //             } else {
                        //                if (tmp.currentInfo.customerDTO
                        //                   .partnerId) {
                        //                   tmp.$message.showToast(
                        //                      '您已绑定,请联系客服解除绑定')
                        //                   return
                        //                } else {
                        //                   //前往绑定页面
                        //                   uni.reLaunch({
                        //                      url: `/pages/user/supplier-user?partnerUserId=${querydto.partnerUserId}&partnerUserName=${querydto.partnerUserName}`
                        //                   })
                        //                }
                        //             }
                        //          }
                        //       },
                        //       fail(res) {
                        //          console.log('res uni model', res)
                        //       }
                        //    })
                        // })
                     } else {
                        console.log('to login 3')
                        //退出登录了,或者失效了
                        // uni.navigateTo({
                        //    url: `/sub_pages/customer/customer-info/customer-info?source=step&partnerUserId=${querydto.partnerUserId}&partnerUserName=${querydto.partnerUserName}`
                        // })
                        if (!querydto.partnerUserName) {
                           tmp.$message.showLoading()
                           const resname = await tmp.$http.request('get',
                              '/api/customer/partner/name', {
                                 params: {
                                    id: querydto.partnerUserId
                                 }
                              })
                           tmp.$message.hideLoading()
                           if (resname.code == 0) {
                              querydto.partnerUserName = resname.data || ''
                           }
                        }
                        uni.navigateTo({
                           url: `/pages/login/supplier-reg?partnerUserId=${querydto.partnerUserId}&partnerUserName=${querydto.partnerUserName||''}`
                        })
                     }
                  } catch (e2) {
                     console.log('to login error', e2)
                  }
               }, 2000)
            } else {
               if (!querydto.partnerUserName) {
                  this.$message.showLoading()
                  const resname = await this.$http.request('get', '/api/customer/partner/name', {
                     params: {
                        id: querydto.partnerUserId
                     }
                  })
                  this.$message.hideLoading()
                  if (resname.code == 0) {
                     querydto.partnerUserName = resname.data || ''
                  }
               }
               // console.log('to login 2',
               //    `/sub_pages/customer/customer-info/customer-info?source=step&partnerUserId=${querydto.partnerUserId}&partnerUserName=${querydto.partnerUserName}`
               // )
               // uni.navigateTo({
               //    url: `/sub_pages/customer/customer-info/customer-info?source=step&partnerUserId=${querydto.partnerUserId}&partnerUserName=${querydto.partnerUserName}`
               // })
               uni.navigateTo({
                  url: `/pages/login/supplier-reg?partnerUserId=${querydto.partnerUserId}&partnerUserName=${querydto.partnerUserName||''}`
               })
            }
         }
         // #endif
      },
      onShareAppMessage() {
         let that = this;
         var name = that.currentInfo.customerDTO && that.currentInfo.customerDTO.name || that.currentInfo.supplierDTO &&
            that.currentInfo.supplierDTO.name || that.currentInfo.partnerDTO && that.currentInfo.partnerDTO.name || ''
         var url =
            `/pages/login/supplier-login?shareId=${this.currentInfo&&this.currentInfo.id||''}&shareName=${name||''}`; //你的转发页面路径拼接参数
         return {
            title: "花满芫",
            path: url,
         }
      },
      onShareTimeline() {
         let that = this;
         var name = that.currentInfo.customerDTO && that.currentInfo.customerDTO.name || that.currentInfo.supplierDTO &&
            that.currentInfo.supplierDTO.name || that.currentInfo.partnerDTO && that.currentInfo.partnerDTO.name || ''
         var url =
            `/pages/login/supplier-login?shareId=${this.currentInfo&&this.currentInfo.id||''}&shareName=${name||''}`; //你的转发页面路径拼接参数
         return {
            title: "花满芫",
            path: url,
         }
      },
      data() {
         return {
            optionsStr: '',
            openId: '-1',
            userName: '',
            password: '',
            // userName: '',
            // password: '',
            phoneNumber: '',
            smsCode: '',
            source: '', //来源
            sharePartnerUserId: '', //分享跳转登录的id
            checked: false,
            loginType: 'pwd', //pwd和code,密码和验证码登录
            pcfvalue: undefined,
            getCodeText: '获取验证码',
            getCodeBtnColor: "#20613D",
            getCodeisWaiting: false,
            Timer: undefined,
            protocal:false,
            // #ifdef PUB_SUPPLIER
            apitype: 'loginSupplier',
            // #endif
            // #ifdef PUB_PARTNER
            apitype: 'loginPartner',
            // #endif
            // #ifdef PUB_CUSTOMER
            apitype: 'loginCustomer',
            // #endif
            // return 'loginPartner'
         };
      },
      methods: {
            // 手机号码正则表达式校验
            validatePhoneNumber() {
                // 手机号码正则表达式,可以根据需要调整
                const phoneRegex = /^[1][3-9][0-9]{9}$/;
                if (this.loginType == 'pwd') {
                    if (!phoneRegex.test(this.userName)) {
                        this.$message.showToast('请填写正确手机号码')
                    }
                }
                if (this.loginType == 'code') {
                    if (!phoneRegex.test(this.phoneNumber)) {
                        this.$message.showToast('请填写正确手机号码')
                    }
                }
            },
         async getCode() {
            console.log('getCode')
            uni.hideKeyboard() //隐藏已经显示的软键盘,如果软键盘没有显示则不做任何操作。
            if (this.getCodeisWaiting) {
               return;
            }
            if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.phoneNumber))) { //校验手机号码是否有误
               this.$message.showToast('请填写正确手机号码')
               return false;
            }
            this.getCodeText = "发送中..." //发送验证码
            this.getCodeisWaiting = true;
            this.getCodeBtnColor = "#000" //追加样式,修改颜色
            //示例用定时器模拟请求效果
            //setTimeout(()用于在指定的毫秒数后调用函数或计算表达式
            const {
               code
            } = await this.$http.request('post', '/api/sms/send/code', {
               data: {
                  tel: this.phoneNumber,
                  userType: this.apitype.replace("login", "").toLowerCase()
               }
            })
            if (code == 0) {
               uni.showToast({
                  title: '验证码已发送',
                  icon: "none"
               });
               this.setTimer(); //调用定时器方法
            } else {
               this.getCodeText = "获取验证码" //发送验证码
               this.getCodeisWaiting = false;
               this.getCodeBtnColor = "#20613D";
            }
            // setTimeout(() => {
            //    uni.showToast({
            //       title: '验证码已发送',
            //       icon: "none"
            //    }); //弹出提示框
            //    //示例默认1234,生产中请删除这一句。
            //    // this.code = '1234'; //发送验证码,进行填入
            //    this.setTimer(); //调用定时器方法
            // }, 1000)
         },
         //setTimer: 需要每隔一段时间执行一件事的的时候就需要使用SetTimer函数
         setTimer() {
            let holdTime = 60; //定义变量并赋值
            this.getCodeText = "重新获取(60)"
            //setInterval()是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式。
            //setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭。
            this.Timer = setInterval(() => {
               if (holdTime <= 0) {
                  this.getCodeisWaiting = false;
                  this.getCodeBtnColor = "#20613D";
                  this.getCodeText = "获取验证码"
                  clearInterval(this.Timer); //清除该函数
                  return; //返回前面
               }
               this.getCodeText = "重新获取(" + holdTime + ")"
               holdTime--;
            }, 1000)
         },
         toHome() {
            uni.reLaunch({
               url: '/pages/home/home'
            })
         },
         toReg() {
            // uni.switchTab({
            //    url: '/pages/index/index'
            // })
            var addstr = ''
            // #ifdef PUB_PARTNER
            addstr = '?source=step'
            uni.navigateTo({
               url: '/sub_pages/partner/partner-info/partner-info' + addstr
            })
            // #endif
            // #ifdef PUB_SUPPLIER
            uni.reLaunch({
               url: '/pages/login/supplier-reg'
            })
            // #endif
            // #ifdef PUB_CUSTOMER
            // addstr = '?source=step'
            // uni.navigateTo({
            //    url: '/sub_pages/customer/customer-info/customer-info' + addstr
            // })
            uni.reLaunch({
               url: '/pages/login/supplier-reg'
            })
            // todo 如果是有分享id的,可能需要提前进行绑定
            // #endif
         },
         changeAll(e) {
            this.pcfvalue = e.detail.value[0]
         },
         async login() {
            if(!this.protocal){
               this.$message.showToast('请同意用户协议')
               return
            }
            uni.showLoading({
               title: '登陆中'
            });
            var that = this;
            if (this.loginType == 'pwd') {
               if (!that.userName) {
                  uni.showToast({
                     title: '请输入用户名',
                     icon: 'none'
                  });
                  return;
               }
               if (!that.password) {
                  uni.showToast({
                     title: '请输入密码',
                     icon: 'none'
                  });
                  return;
               }
               that.phoneNumber = ''
            }
            if (this.loginType == 'code') {
               if (!that.phoneNumber) {
                  uni.showToast({
                     title: '请输入手机号',
                     icon: 'none'
                  });
                  return;
               }
               if (!that.smsCode) {
                  uni.showToast({
                     title: '请输入手机验证码',
                     icon: 'none'
                  });
                  return;
               }
            }
            // if (this.pcfvalue == undefined) {
            //    util.showMyToast('必须勾选《用户服务协议》及《隐私政策》');
            //    return;
            // }
            let post = {
               username: this.userName,
               password: this.password,
               tel: this.phoneNumber,
               smsCode: this.smsCode
               // openId: '123456789'
            }
            // const {
            // code
            // } = await this.$http.request('get', '/api/login/admin')
            const resp = await this.$store.dispatch(this.apitype, post);
            // uni.hideLoading()
            if (resp.code === 0) {
               // myCache.cache("userToken", res.data.accessToken)
               // let userRes = await gzmzApi.getMemberInfo();
               // if (userRes.status) {
               //    myCache.cache("userInfo", JSON.stringify(userRes.data))
               // }
               // setTimeout(() => {
               //    uni.navigateBack();
               // }, 1000);
            } else {
               // uni.showToast({
               //    title: '登录失败!',
               //    icon: 'none'
               // });
               return;
            }
         },
         tc1(id) {
            uni.navigateTo({
               url: '/pages/users/xieyi?id=' + id,
            });
         }
      }
   };
</script>
<style lang="scss" scoped>
.form-input {
  background-color: #f8f7fc;
  border-radius: 50rpx;
  margin-bottom: 50rpx;
  border: 1px solid #e9e9e9;
   .form-input {
      background-color: #f8f7fc;
      border-radius: 50rpx;
      margin-bottom: 50rpx;
      border: 1px solid #e9e9e9;
  /deep/ .u-input {
    padding-left: 60rpx !important;
    padding-right: 40rpx !important;
  }
      /deep/ .u-input {
         padding-left: 60rpx !important;
         padding-right: 40rpx !important;
      }
  /deep/ input {
    height: 70rpx;
    line-height: 70rpx;
      /deep/ input {
         height: 70rpx;
         line-height: 70rpx;
  }
      }
}
   }
</style>
<style lang="scss" scoped>
@import './login.scss';
   @import './login.scss';
.main-container {
  margin: 20px 0;
}
   .main-container {
      margin: 20px 0;
   }
.img-a {
  position: absolute;
  width: 100%;
  top: -150rpx;
  right: 0;
}
   .img-a {
      position: absolute;
      width: 100%;
      top: -150rpx;
      right: 0;
   }
.img-b {
  position: absolute;
  width: 50%;
  bottom: 0;
  left: -120rpx;
}
   .img-b {
      position: absolute;
      width: 50%;
      bottom: 0;
      left: -120rpx;
   }
.to-home {
  margin-top: 30rpx;
  font-size: 30rpx;
  color: #5af;
  display: flex;
  flex-direction: row-reverse;
}
   .to-home {
      margin-top: 30rpx;
      font-size: 30rpx;
      color: #5af;
      display: flex;
      flex-direction: row-reverse;
   }
.t-login {
  width: 100%;
  margin: 0 auto;
  font-size: 28rpx;
  color: #000;
}
   .t-login {
      width: 100%;
      margin: 0 auto;
      font-size: 28rpx;
      color: #000;
   }
.t-login .bg {
  width: 100%;
  position: relative;
}
   .t-login .bg {
      width: 100%;
      position: relative;
   }
.t-login .login {
  width: 650rpx;
  margin: 60rpx auto;
  margin-top: 0rpx;
  font-size: 28rpx;
  color: #000;
}
   .t-login .login {
      width: 650rpx;
      margin: 60rpx auto;
      margin-top: 0rpx;
      font-size: 28rpx;
      color: #000;
   }
.t-login button {
  font-size: 28rpx;
  background: #5677fc;
  color: #fff;
  height: 90rpx;
  line-height: 90rpx;
  border-radius: 50rpx;
  box-shadow: 0 5px 7px 0 rgba(86, 119, 252, 0.2);
}
   .t-login button {
      font-size: 28rpx;
      background: #5677fc;
      color: #fff;
      height: 90rpx;
      line-height: 90rpx;
      border-radius: 50rpx;
      box-shadow: 0 5px 7px 0 rgba(86, 119, 252, 0.2);
   }
.t-login input {
  padding: 0 20rpx 0 60rpx;
  height: 90rpx;
  line-height: 90rpx;
  margin-bottom: 50rpx;
  background: #f8f7fc;
  border: 1px solid #e9e9e9;
  font-size: 28rpx;
  border-radius: 50rpx;
}
   .t-login input {
      padding: 0 20rpx 0 60rpx;
      height: 90rpx;
      line-height: 90rpx;
      margin-bottom: 50rpx;
      background: #f8f7fc;
      border: 1px solid #e9e9e9;
      font-size: 28rpx;
      border-radius: 50rpx;
   }
.t-login .t-a {
  position: relative;
   .t-login .t-a {
      position: relative;
  .get-code {
    // position: absolute;
    // right: 40rpx;
    // top: 25rpx;
  }
}
      .get-code {
         // position: absolute;
         // right: 40rpx;
         // top: 25rpx;
      }
   }
.t-login .t-a .icon {
  width: 40rpx;
  height: 40rpx;
  position: absolute;
  left: 24rpx;
  top: 14rpx;
  margin-right: 20rpx;
}
   .t-login .t-a .icon {
      width: 40rpx;
      height: 40rpx;
      position: absolute;
      left: 24rpx;
      top: 14rpx;
      margin-right: 20rpx;
   }
.t-login .t-a .line {
  width: 2rpx;
  height: 40rpx;
  background-color: #dedede;
  position: absolute;
  top: 28rpx;
  left: 98rpx;
}
   .t-login .t-a .line {
      width: 2rpx;
      height: 40rpx;
      background-color: #dedede;
      position: absolute;
      top: 28rpx;
      left: 98rpx;
   }
.t-login .t-b {
  text-align: left;
  font-size: 46rpx;
  color: #000;
  padding: 300rpx 0 30rpx 0;
  font-weight: bold;
}
   .t-login .t-b {
      text-align: left;
      font-size: 46rpx;
      color: #000;
      padding: 300rpx 0 30rpx 0;
      font-weight: bold;
   }
.t-login .t-b2 {
  text-align: left;
  font-size: 32rpx;
  color: #aaaaaa;
  padding: 0rpx 0 120rpx 0;
}
   .t-login .t-b2 {
      text-align: left;
      font-size: 32rpx;
      color: #aaaaaa;
      padding: 0rpx 0 120rpx 0;
   }
.t-login .t-c {
  position: absolute;
  right: 22rpx;
  top: 22rpx;
  background: #5677fc;
  color: #fff;
  font-size: 24rpx;
  border-radius: 50rpx;
  height: 50rpx;
  line-height: 50rpx;
  padding: 0 25rpx;
  z-index: 999;
}
   .t-login .t-c {
      position: absolute;
      right: 22rpx;
      top: 22rpx;
      background: #5677fc;
      color: #fff;
      font-size: 24rpx;
      border-radius: 50rpx;
      height: 50rpx;
      line-height: 50rpx;
      padding: 0 25rpx;
      z-index: 999;
   }
.t-login .t-d {
  text-align: center;
  color: #999;
  margin: 80rpx 0;
}
   .t-login .t-d {
      text-align: center;
      color: #999;
      margin: 80rpx 0;
   }
.t-login .t-e {
  text-align: center;
  width: 250rpx;
  margin: 80rpx auto 0;
}
   .t-login .t-e {
      text-align: center;
      width: 250rpx;
      margin: 80rpx auto 0;
   }
.t-login .t-g {
  float: left;
  width: 50%;
}
   .t-login .t-g {
      float: left;
      width: 50%;
   }
.t-login .t-e image {
  width: 50rpx;
  height: 50rpx;
}
   .t-login .t-e image {
      width: 50rpx;
      height: 50rpx;
   }
.t-login .t-f {
  text-align: center;
  margin: 200rpx 0 0 0;
  color: #666;
}
   .t-login .t-f {
      text-align: center;
      margin: 200rpx 0 0 0;
      color: #666;
   }
.t-login .t-f text {
  margin-left: 20rpx;
  color: #aaaaaa;
  font-size: 27rpx;
}
   .t-login .t-f text {
      margin-left: 20rpx;
      color: #aaaaaa;
      font-size: 27rpx;
   }
// .t-login .uni-input-placeholder {
//    color: #000;
// }
   // .t-login .uni-input-placeholder {
   //    color: #000;
   // }
.cl {
  zoom: 1;
}
   .cl {
      zoom: 1;
   }
.cl:after {
  clear: both;
  display: block;
  visibility: hidden;
  height: 0;
  content: '\20';
}
   .cl:after {
      clear: both;
      display: block;
      visibility: hidden;
      height: 0;
      content: '\20';
   }
</style>