binding.vue 8.21 KB
<template>
  <view class="bg">
    <view class="logoView">
      <image class="logo" :src="config.baseUrl_api+'/fs/static/login/logo@2x.png'"></image>
    </view>

    <!-- 获取手机号 -->
    <!-- <button class="start" type="default" :disabled="!agree" open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">微信账号快捷登录</button> -->
    <view>
      <!-- 密码登录 -->
      <view class="formbox">
        <view>
          <view class="round-input-item">
            <image class="icon" :src="config.baseUrl_api+'/fs/static/login/tag01@2x.png'"></image>
            <uni-easyinput :styles="inputstyle" placeholder="会员号" v-model="form.username" />
          </view>
          <view class="round-input-item">
            <image class="icon" :src="config.baseUrl_api+'/fs/static/login/tag02@2x.png'"></image>
            <uni-easyinput :styles="inputstyle" placeholder="密码" v-model="form.password" type="password" />
          </view>
          <view class="round-input-item">
            <image class="icon" :src="config.baseUrl_api+'/fs/static/login/tag03@2x.png'"></image>
            <uni-easyinput :styles="inputstyle" placeholder="图形验证码" v-model="form.code" />
            <image :src="codeUrl" @click="getCode" />
          </view>

        </view>
        <view class="flex-item">
        </view>
        <view class="center-item">
          <button @click="handleLogin" class="btn-red">绑定账号</button>
        </view>

        <view class="tip">*会员号+证件号后四位+ )*%</view>
      </view>


    </view>

    <view class="agreeArea">
      <!-- 			<checkbox-group @change='radioChange'>
				<label>
					<checkbox value="r1" :checked="agree" />请您确认同意<text @click="showAgreement">《隐私保护声明》</text>
				</label>
			</checkbox-group> -->
    </view>
    <!-- 隐私保护声明 -->
    <uni-popup ref="popup" v-if="showAgree" background-color="#fff">
      <view class="popup-content">
        本应用严格遵守法律法规,为用户提供安全、可靠的服务。若您对于我们感兴趣,希望咨询、预约、申请使用我们的服务,我们需要收集、使用您的个人信息以便为您安排专人提供服务。本公司非常重视用户(以下或简称“您”)的隐私和个人信息安全,希望您仔细阅读《隐私保护声明》(以下简称“本声明”),详细了解我们对信息的收集、使用方式,以便您更好地了解我们的服务并做出适当的选择。

        一、您提供的个人信息
        1、在注册帐户时填写或上传的信息

        例如,您在参与问卷时所填写的姓名、所在地、行业、手机号码等。

        2、在奖励兑换时填写或上传的信息

        例如,您在奖励兑换时所填写的姓名、所在地、手机号码等。

        我们为您的信息提供相应的安全保障,以防止信息的丢失、不当使用、未经授权访问或披露。

        二、我们如何使用您的个人信息
        根据您留下的信息,我们后续会自行或委托合作方与您取得联系,向您介绍我们的服务。

        我们可能会向您发送推广信息,如您不希望继续接收推广可选择退订。

        三、您享有的权利
        1、我们保障您撤回个人信息使用的同意的权利;

        2、我们保障您复制、查阅本人个人信息的权利。

        若您需要行使上述权利,您可通过本声明列明的联系方式与我们联系,在您请求撤回同意或者复制、查阅本人个人信息时,我们可能会要求您进行身份验证,以保障信息安全。

        请您理解,由于技术所限或法律监管要求,我们可能无法完全满足您的要求。我们将尽快处理所涉问题,并在通过验证您的用户身份后的十五天内予以回复。

        四、变更
        我们可能适时修订本声明内容。

        我们将在内容更新时,通过在页面显著位置提示、公告或直接与您联系等方式通知您,如果您继续使用本服务,即视为您已接受修改后的相关内容;如果您不接受修改后的相关内容,您可以联系我们或者通过信息退订等方式选择停止使用服务。

        五、联系我们
        如您对本声明或个人信息相关事宜有疑问,可以通过公众号与我们取得联系。
      </view>
    </uni-popup>
  </view>
</template>

<script setup>
import {
  ref
} from 'vue'

import {
  onLoad
} from '@dcloudio/uni-app'
import config from '@/config.js'
import {
  pcLogin,
  getWxUserPhone,
  getCodeImg,
  getSmsCode,
  loginByPhone
} from '@/common/login.js'


const popup = ref(null)
const agree = ref(true)
const loading = ref(false)
const showAgree = ref(false)
const form = ref({})
const codeUrl = ref('')
const inputstyle = ref({
  borderColor: 'transparent',
  fontSize: '30rpx'
})
const app = getApp()

let path = '/pages/index/index';
onLoad((option) => {
  if (option.path) {
    path = decodeURIComponent(option.path)
  }
  getCode()
})

function radioChange() {
  popup.value.open()
  agree.value = true
}
function decryptPhoneNumber(res) {
  // console.log(res)

  loading.value = true
  if (res.detail.errMsg.indexOf('ok') > -1) {
    getWxUserPhone(res.detail).then((data) => {
      // console.log(data)

      uni.redirectTo({
        url: path
      })
    }).finally(() => {
      loading.value = false
    });
  } else {
    loading.value = false
  }
}

function subscribe() {
  uni.requestSubscribeMessage({
    tmplIds: ['pvrlpWl1MDJfOghILwUsQtfcg96LWdstVOFLrDxGcdM'],
    success: (res) => {
      console.log('success:', res)
    }
  })
}

function showAgreement() {
  popup.value.open()
}

function getCode() {
  getCodeImg().then((res) => {
    codeUrl.value = 'data:image/gif;base64,' + res.data.img
    form.value.uuid = res.data.uuid
  })
}

function handleLogin() {
  if (!form.value.username) {
    uni.showToast({
      title: '账号不能为空',
      icon: 'none'
    })
    return
  }
  if (!form.value.password) {
    uni.showToast({
      title: '密码不能为空',
      icon: 'none'
    })
    return
  }
  if (!form.value.code) {
    uni.showToast({
      title: '验证码不能为空',
      icon: 'none'
    })
    return
  }
  pcLogin(form.value)
    .then((res) => {
      app.globalData.isLogin = true
      uni.redirectTo({
        url: path
      })
    })
}
</script>

<style scoped lang="scss">
	.bg{background: linear-gradient(60deg,#ad1820 50%,#044a9f 50%);padding: 1px;height: 100vh;overflow: hidden;}
	.formbox {
		background: #fff;
		width: 700rpx;
		padding: 50rpx;box-sizing: border-box;
		margin: auto;
		border-radius: 20rpx;
	}
	.logoView {
		/* margin: 20vh 0; */
	}

	.logo {
		width: 420rpx;
		height: 179rpx;
		margin: 60rpx auto 60rpx;
		display: block;
	}

	.h1 {
		font-size: 36rpx;
		color: #000000;
		text-align: center;
	}

	.start {
		margin: 0 auto 80rpx;
		font-size: 30rpx;
		color: #fff;
		height: 80rpx;
		width: 480rpx;
		border-radius: 40rpx;
		background: #44A92F;
	}

	.agreeArea {
		text-align: center;
	}

	.agreeArea label {
		font-size: 26rpx;
	}

	.agreeArea label text {
		color: #00C176;
	}

	.tip {
		margin: 30rpx 0 0;
		font-size: 20rpx;
		color: #181818;
	}

	.h3 {}
	.round-input-item {
		overflow: hidden;
		background: RGBA(247, 247, 248, 1);
		border-radius: 40rpx;
		padding: 0 0 0 30rpx;
		height: 80rpx;
		margin-bottom: 30rpx;
		display: flex;
		align-items: center;
	
		image {
			width: 180rpx;
			height: 80rpx;
	
			&.icon {
				width: 30rpx;
				height: 30rpx;
				margin-right: 16rpx;
			}
		}
	
		input {
			border-left: 1rpx solid RGBA(214, 216, 219, 1);
			padding: 0 0 0 20rpx;
			font-size: 30rpx;
		}
	
		input::-webkit-input-placeholder {
			color: RGBA(158, 166, 174, 1);
			font-size: 30rpx;
		}
	
		input::placeholder {
			color: RGBA(158, 166, 174, 1);
			font-size: 30rpx;
		}
	
		input::-moz-placeholder {
			color: RGBA(158, 166, 174, 1);
			font-size: 30rpx;
		}
	
		text {
			font-size: 28rpx;
			color: #014A9F; padding: 0 20rpx;
		}
		
	}
	
</style>