MrShi
2026-05-22 ea2fb93a0dfcde8f5b66825b20f9d9b835a28acc
small-program/shop/pages/login/login.vue
@@ -9,19 +9,16 @@
      <view class="form-wrap">
         <view class="input-row">
            <u-icon name="account" size="30" color="#B8B8B8"></u-icon>
            <input v-model="form.account" class="input-field" type="text" placeholder="请输入账号" placeholder-style="color: #999999;" />
            <input v-model="form.telephone" class="input-field" type="text" placeholder="请输入账号" placeholder-style="color: #999999;" />
         </view>
         <view class="input-divider"></view>
         <view class="input-row password-row">
            <u-icon name="lock" size="30" color="#B8B8B8"></u-icon>
            <input v-model="form.password" class="input-field" password type="text" placeholder="请输入密码" placeholder-style="color: #999999;" />
         </view>
         <view class="input-divider"></view>
         <view class="input-row password-row">
            <u-icon name="phone" size="30" color="#B8B8B8"></u-icon>
            <input v-model="form.telephone" class="input-field" type="number" maxlength="11" placeholder="请输入手机号" placeholder-style="color: #999999;" />
            <input v-model="form.password" class="input-field" :password="!showPassword" placeholder="请输入密码" placeholder-style="color: #999999;" />
            <view class="password-toggle" @click="showPassword = !showPassword">
               <u-icon :name="showPassword ? 'eye' : 'eye-off'" size="20" color="#B8B8B8"></u-icon>
            </view>
         </view>
         <view class="input-divider"></view>
      </view>
@@ -32,9 +29,9 @@
         <image class="agree-icon" :src="agreed ? '/static/icon/ic_accept_sel@2x.png' : '/static/icon/ic_accept@2x.png'" mode="aspectFit" @tap="agreed = !agreed"></image>
         <view class="agreement-text-wrap">
            <text class="agreement-text">我已阅读并同意</text>
            <text class="agreement-link" @click="goToService">《用户服务协议》</text>
            <text class="agreement-link" @click="goToService(2)">《门店服务协议》</text>
            <text class="agreement-text">及</text>
            <text class="agreement-link" @click="goToPrivacy">《用户隐私政策》</text>
            <text class="agreement-link" @click="goToService(3)">《门店隐私政策》</text>
         </view>
      </view>
   </view>
@@ -45,28 +42,57 @@
   export default {
      computed: {
         ...mapState(['openid'])
         ...mapState(['openid', 'userInfo','userType'])
      },
      data() {
         return {
            agreed: false,
            showPassword: false,
            form: {
               account: '',
               password: '',
               telephone: ''
               telephone: '',
               password: ''
            }
         }
      },
      methods: {
         async handleLogin() {
            if (!this.agreed) {
               uni.showToast({
                  title: '请先阅读并同意协议',
                  icon: 'none'
               })
               return
      onLoad() {
         // 静默登录
         if (this.userInfo.bindShopId) {
            uni.showLoading({
               title:'登录中...'
            })
            try{
               console.log(this.userType,"============================================")
               this.$u.api.shopSilentLogin({})
                  .then( res => {
                     if (res.code === 200 && res.data) {
                        this.$store.commit('setUserType', 1)
                        this.$store.commit('setShopToken', res.data.token)
                        // 获取门店信息
                        this.$u.api.getShopInfo({}).then( shopInfoRes => {
                           if (shopInfoRes.code === 200) {
                              this.$store.commit('setShopInfo', shopInfoRes.data)
                           }
                           uni.hideLoading();
                           // setTimeout(() => {
                              uni.navigateTo({
                                 url: '/shop/pages/store-home/store-home'
                              });
                           // }, 1000)
                        })
                     }
                     uni.hideLoading()
                  })
            }catch(e){
               uni.hideLoading()
            }
            if (!this.form.account) {
            setTimeout(() => {
               uni.hideLoading()
            }, 10000)
         }
      },
      methods: {
         handleLogin() {
            if (!this.form.telephone) {
               uni.showToast({
                  title: '请输入账号',
                  icon: 'none'
@@ -80,54 +106,40 @@
               })
               return
            }
            if (!this.form.telephone) {
            if (!this.agreed) {
               uni.showToast({
                  title: '请输入手机号',
                  title: '请先阅读并同意协议',
                  icon: 'none'
               })
               return
            }
            uni.showLoading({ title: '登录中...', mask: true })
            try {
               const res = await this.$u.api.shopLogin({
                  openid: this.openid,
                  password: this.form.password,
                  telephone: this.form.telephone
               })
               uni.hideLoading()
            this.$u.api.shopLogin({
               openid: this.openid,
               password: this.form.password,
               telephone: this.form.telephone
            }).then(async res => {
               if (res.code === 200) {
                  this.$store.commit('setUserType', 1)
                  this.$store.commit('setShopToken', res.data.token)
                  // 获取门店信息
                  const shopInfoRes = await this.$u.api.getShopInfo({})
                  if (shopInfoRes.code === 200) {
                     this.$store.commit('setShopInfo', shopInfoRes.data)
                  }
                  uni.showToast({ title: '登录成功', icon: 'success' })
                  setTimeout(() => {
                     uni.switchTab({
                        url: '/pages/shop-index/shop-index'
                     })
                     uni.reLaunch({
                        url: '/shop/pages/store-home/store-home'
                     });
                  }, 1500)
               } else {
                  uni.showToast({
                     title: res.msg || '登录失败',
                     icon: 'none'
                  })
               }
            } catch (err) {
               uni.hideLoading()
               uni.showToast({
                  title: '登录失败',
                  icon: 'none'
               })
            }
         },
         goToService() {
            uni.navigateTo({
               url: '/pages/rich-text/rich-text?type=userAgreement'
            })
         },
         goToPrivacy() {
         goToService(type) {
            uni.navigateTo({
               url: '/pages/rich-text/rich-text?type=privacyPolicy'
               url: '/pages/rich-text/rich-text?type='+type
            })
         }
         }
      }
   }
</script>
@@ -172,6 +184,10 @@
   .password-row {
      margin-top: 18rpx;
   }
   .password-toggle {
      padding: 10rpx;
   }
   .input-field {
      flex: 1;