Files
xo_user_client/pages/login/login.vue
2025-06-16 17:51:09 +08:00

1763 lines
70 KiB
Vue

<template>
<view :class="theme_view">
<view class="content">
<block v-if="(is_exist_base_data || 0) == 1">
<view class="flex-col jc-sb dom-content">
<view>
<!-- 多语言切换绑定账户不展示语言切换 -->
<view v-if="home_use_multilingual_status == 1 && current_opt_form != 'bind_platform'" class="flex-row tr padding-top-sm padding-horizontal-lg padding-bottom-lg margin-bottom-xl">
<!-- <view class="flex-1 cr-base text-size" @tap="open_language_event">
<view class="pr top-sm margin-right-sm dis-inline-block">
<iconfont name="icon-login-language" size="32rpx"></iconfont>
</view>
{{ language }}
<view class="margin-left-sm dis-inline-block">
<iconfont name="icon-login-down-arrow" size="16rpx"></iconfont>
</view>
</view> -->
<view style="height: 100upx"> </view>
</view>
<!-- 绑定手机 -->
<view v-if="current_opt_form == 'bind_verify'" class="form-content">
<form @submit="form_submit_bind_mobile">
<view class="tc">
<image class="icon circle auto dis-block margin-bottom-xxl br" :src="user.avatar || home_site_logo_square || '/static/images/common/user.png'" mode="widthFix"></image>
<view v-if="(user.user_name_view || null) != null" class="cr-base">{{ user.user_name_view || '' }}</view>
</view>
<view class="margin-top-xxxl padding-top-xxxl">
<input type="number" :placeholder="$t('login.login.28k91h')" maxlength="11" name="mobile" @input="form_input_mobile_event" class="form-item margin-vertical-main wh-auto" />
<view class="code pr margin-vertical-main">
<input type="number" :placeholder="$t('login.login.t3951j')" name="verify" maxlength="4" />
<button :class="'verify-submit pa round br text-size-sm cr-base ' + (verify_disabled ? 'sub-disabled' : '')" type="default" hover-class="none" size="mini" :loading="verify_loading" :disabled="verify_disabled" @tap="verify_send_event">{{ verify_submit_text }}</button>
</view>
<button class="bg-main br-main cr-white round text-size margin-top-xxxl" form-type="submit" type="default" hover-class="none" :loading="form_submit_loading" :disabled="form_submit_loading">{{ $t('login.login.tfl656') }}</button>
</view>
<view class="margin-top-xxxl padding-top-xxxl padding-horizontal-main padding-bottom-xxxl tc">
<text class="cr-blue" data-value="bind" @tap="opt_form_event">{{ $t('login.login.483nho') }}</text>
</view>
</form>
</view>
<view v-if="current_opt_form == 'bind_email'" class="form-content">
<form @submit="form_submit_bind_email">
<view class="tc">
<image class="icon circle auto dis-block margin-bottom-xxl br" :src="user.avatar || home_site_logo_square || '/static/images/common/user.png'" mode="widthFix"></image>
<view v-if="(user.user_name_view || null) != null" class="cr-base">{{ user.user_name_view || '' }}</view>
</view>
<view class="margin-top-xxxl padding-top-xxxl">
<input type="text" :placeholder="$t('login.login.db1rf4')" maxlength="60" name="email" @input="form_input_email_event" key="login_email_1" class="form-item margin-vertical-xl wh-auto" />
<view class="code pr margin-vertical-main">
<input type="number" :placeholder="$t('login.login.t3951j')" name="verify" maxlength="4" />
<button :class="'verify-submit pa round br text-size-sm cr-base ' + (verify_disabled ? 'sub-disabled' : '')" type="default" hover-class="none" size="mini" :loading="verify_loading" :disabled="verify_disabled" @tap="verify_send_event">{{ verify_submit_text }}</button>
</view>
<button class="bg-main br-main cr-white round text-size margin-top-xxxl" form-type="submit" type="default" hover-class="none" :loading="form_submit_loading" :disabled="form_submit_loading">{{ $t('login.login.tfl656') }}</button>
</view>
<view class="margin-top-xxxl padding-top-xxxl padding-horizontal-main padding-bottom-xxxl tc">
<text class="cr-blue" data-value="bind" @tap="opt_form_event">{{ $t('login.login.483nho') }}</text>
</view>
</form>
</view>
<!-- 存在用户信息 -->
<block v-if="user != null">
<!-- 确认绑定方式 -->
<view v-if="current_opt_form == 'bind' || current_opt_form == 'success'" class="form-content">
<view class="tc">
<image class="icon circle auto dis-block margin-bottom-xxl br" :src="user.avatar || home_site_logo_square || '/static/images/common/user.png'" mode="widthFix"></image>
<view v-if="(user.user_name_view || null) != null" class="cr-base">{{ user.user_name_view || '' }}</view>
</view>
<block v-if="current_opt_form == 'bind'">
<view v-if="(common_user_verify_bind_mobile_list.length > 0 && common_user_verify_bind_mobile_list.indexOf(client_value) != -1) || (common_user_onekey_bind_mobile_list.length > 0 && common_user_onekey_bind_mobile_list.indexOf(client_value) != -1)" class="margin-top-xxxl padding-top-xxxl">
<button v-if="common_user_verify_bind_mobile_list.length > 0 && common_user_verify_bind_mobile_list.indexOf(client_value) != -1" class="bg-main-pair br-main-pair cr-white round text-size" type="warn" hover-class="none" data-value="bind_verify" @tap="opt_form_event">{{ $t('login.login.31r6p2') }}</button>
<button v-if="common_user_onekey_bind_mobile_list.length > 0 && common_user_onekey_bind_mobile_list.indexOf(client_value) != -1" class="margin-top-xxl bg-main br-main cr-white round text-size" type="default" hover-class="none" open-type="getPhoneNumber" @getphonenumber="confirm_phone_number_event">{{ $t('login.login.p3kxy2') }}</button>
</view>
<!-- 当前还没有账号的情况下才可以操作登录和注册绑定 -->
<view v-if="(user || null) == null || (user.id || null) == null" class="margin-top-xxxl padding-top-xxxl padding-horizontal-main padding-bottom-main">
<!-- 登录 -->
<view v-if="(home_user_login_type || null) != null && home_user_login_type.length > 0" class="margin-bottom-xxxl tc">
<text class="cr-main round padding-top-xs padding-bottom-xs padding-horizontal-main" data-value="login" @tap="opt_form_event">{{ $t('login.login.54l805') }}</text>
</view>
<!-- 注册 -->
<view v-if="(home_user_reg_type || null) != null && home_user_reg_type.length > 0" class="margin-bottom-xl tc">
<text class="cr-main-pair round padding-top-xs padding-bottom-xs padding-horizontal-main" data-value="reg" @tap="opt_form_event">{{ $t('login.login.q11t73') }}</text>
</view>
</view>
</block>
<view v-if="current_opt_form == 'success'" class="tc margin-top-xxxl">
<view class="cr-green">{{ $t('login.login.s51ed9') }}</view>
<button type="default" size="mini" class="dis-inline-block auto bg-main br-main cr-white round text-size-sm padding-left-xxxl padding-right-xxxl padding-top-xs padding-bottom-xs margin-top-xl" @tap="success_event">{{ $t('login.login.483nho') }}</button>
</view>
</view>
</block>
<!-- 账户绑定展示用户头像和名称 -->
<view v-if="current_opt_form == 'bind_platform'" class="padding-top-xxxxl margin-top-xxxxl tc">
<image class="icon circle auto dis-block margin-bottom-xxl br" :src="user.avatar || home_site_logo_square || '/static/images/common/user.png'" mode="widthFix"></image>
<view v-if="(user.user_name_view || null) != null" class="cr-base">{{ user.user_name_view || '' }}</view>
</view>
<!-- 默认站点logo -->
<image v-if="(home_site_logo_square || null) != null && current_opt_form != 'bind' && current_opt_form != 'bind_verify' && current_opt_form != 'bind_email' && current_opt_form != 'bind_platform' && current_opt_form != 'success'" class="icon circle auto dis-block br" :src="home_site_logo_square" mode="widthFix"></image>
<!-- 非登录成功则需要展示的数据 -->
<block v-if="current_opt_form != 'success'">
<!-- 错误提示信息 -->
<view v-if="(error_msg || null) != null" class="margin-top-xxxl margin-bottom-lg tc padding-horizontal-main">
<icon type="warn" size="16" color="#f00" class="va-m" />
<text class="cr-red va-m margin-left-sm">{{ error_msg }}</text>
</view>
<!-- 绑定账号提示 -->
<view v-if="(plugins_thirdpartylogin_user || null) != null && (plugins_thirdpartylogin_user.is_force_bind_user || 0) == 1" class="plugins-thirdpartylogin-bind tc padding-horizontal-main margin-top-xl">
<view class="margin-bottom-sm">
<image v-if="(plugins_thirdpartylogin_user.avatar || null) != null" :src="plugins_thirdpartylogin_user.avatar" mode="aspectFit" class="round br va-m"></image>
<text class="cr-blue margin-left-sm">{{ plugins_thirdpartylogin_user.nickname }}</text>
<button type="default" size="mini" class="br-red cr-red bg-white round va-m text-size-xs margin-left-lg padding-top-xs padding-bottom-xs" @tap="plugins_thirdpartylogin_cancel_event">{{ $t('common.cancel') }}</button>
</view>
<view class="cr-grey text-size-xs">{{ $t('login.login.e77788') }}{{ plugins_thirdpartylogin_user.platform_name }}{{ $t('login.login.1i4o86') }}</view>
</view>
</block>
<!-- 登录 -->
<view v-if="current_opt_form == 'login'" class="form-content">
<form @submit="form_submit_login">
<!-- form表单距离去除顶部沾满整个空间的高度 -->
<view class="flex-col jc-sb">
<view>
<!-- 登录方式选择 -->
<!-- <view v-if="(home_user_login_type || null) != null && home_user_login_type.length > 0" class="opt-type-list margin-vertical-xxxl">
<text v-if="home_user_login_type.indexOf('username') != -1" class="padding-vertical-sm" :class="current_opt_type === 'login_username' ? 'cr-main nav-active-line' : ''" data-value="login_username" @tap="opt_type_event">{{ $t('login.login.n2pv70') }}</text>
<text v-if="home_user_login_type.indexOf('sms') != -1" class="padding-vertical-sm" :class="current_opt_type === 'login_sms' ? 'cr-main nav-active-line' : ''" data-value="login_sms" @tap="opt_type_event">{{ $t('login.login.1p7843') }}</text>
<text v-if="home_user_login_type.indexOf('email') != -1" class="padding-vertical-sm" :class="current_opt_type === 'login_email' ? 'cr-main nav-active-line' : ''" data-value="login_email" @tap="opt_type_event">{{ $t('login.login.p54kf1') }}</text>
</view>
<view v-else class="tc cr-grey padding-vertical-main">{{ $t('login.login.3i05ly') }}</view> -->
<!-- 账号密码 -->
<view style="height: 50upx"></view>
<block v-if="current_opt_type == 'login_username'">
<input type="text" :placeholder="$t('login.login.qe8a37')" maxlength="60" name="accounts" key="login_username_1" class="form-item margin-vertical-xl wh-auto" />
<input type="text" :placeholder="$t('login.login.08fchn')" minlength="6" maxlength="18" name="pwd" password="true" key="login_username_2" class="form-item margin-vertical-xl wh-auto" />
<view v-if="home_user_login_img_verify_state == 1" class="verify pr margin-vertical-xl">
<input type="text" :placeholder="$t('login.login.t3951j')" name="verify" maxlength="4" :value="form_input_image_verify_value" key="login_username_3" @input="form_input_image_verify_event" />
<image v-if="(verify_image_url || null) != null" :src="verify_image_url" class="verify-image pa" mode="aspectFit" data-type="user_login" @tap="image_verify_event"></image>
</view>
</block>
<!-- 手机 -->
<block v-if="current_opt_type == 'login_sms'">
<input type="number" :placeholder="$t('login.login.28k91h')" maxlength="11" name="accounts" @input="form_input_mobile_event" key="login_sms_1" class="form-item margin-vertical-xl wh-auto" />
<view class="code pr margin-vertical-xl">
<input type="number" :placeholder="$t('login.login.t3951j')" name="verify" maxlength="4" key="login_sms_2" />
<button :class="'verify-submit pa round br text-size-sm cr-grey-9 ' + (verify_disabled ? 'sub-disabled' : '')" type="default" hover-class="none" size="mini" :loading="verify_loading" :disabled="verify_disabled" @tap="verify_send_event">{{ verify_submit_text }}</button>
</view>
</block>
<!-- 邮箱 -->
<block v-if="current_opt_type == 'login_email'">
<input type="text" :placeholder="$t('login.login.db1rf4')" maxlength="60" name="accounts" @input="form_input_email_event" key="login_email_1" class="form-item margin-vertical-xl wh-auto" />
<view class="code pr margin-vertical-xl">
<input type="number" :placeholder="$t('login.login.t3951j')" name="verify" maxlength="4" key="login_email_1" />
<button :class="'verify-submit pa round br text-size-sm cr-grey-9 ' + (verify_disabled ? 'sub-disabled' : '')" type="default" hover-class="none" size="mini" :loading="verify_loading" :disabled="verify_disabled" @tap="verify_send_event">{{ verify_submit_text }}</button>
</view>
</block>
<!-- 协议 -->
<view class="margin-top-xl cr-grey flex-row flex-wrap align-c">
<view class="dis-inline-block va-m" @tap="agreement_change">
<radio-group class="dis-inline-block va-m" style="transform: scale(0.6)">
<label>
<radio value="agreement" color="#20a53a" :checked="agreement_status" />
</label>
</radio-group>
</view>
<view class="dis-inline-block va-m text-size-xs">
<text>{{ $t('login.login.nddg2x') }}</text>
<text class="cr-main" @tap="agreement_event" data-value="userregister">{{ $t('login.login.2v11we') }}</text>
<text>{{ $t('login.login.l3r4vr') }}</text>
<text class="cr-main" @tap="agreement_event" data-value="userprivacy">{{ $t('login.login.myno2x') }}</text>
</view>
</view>
<button class="bg-main br-main cr-white round text-size margin-top-xxxl" form-type="submit" type="default" hover-class="none" :loading="form_submit_loading" :disabled="form_submit_loading">{{ $t('login.login.i1deai') }}</button>
<view class="margin-top-xxl oh flex-row jc-sb align-c">
<!-- 注册 -->
<view v-if="(home_user_reg_type || null) != null && home_user_reg_type.length > 0">
<text class="cr-grey-9" data-value="reg" @tap="opt_form_event">{{ $t('login.login.t75ee8') }}</text>
</view>
<text class="cr-grey-9" data-value="forget" @tap="opt_form_event">{{ $t('login.login.9d8gqi') }}</text>
</view>
</view>
</view>
</form>
</view>
<!-- 注册 -->
<view v-else-if="current_opt_form == 'reg'" class="form-content">
<form @submit="form_submit_reg">
<!-- form表单距离去除顶部沾满整个空间的高度 -->
<view class="flex-col jc-sb">
<view>
<!-- 注册方式选择 -->
<view v-if="(home_user_reg_type || null) != null && home_user_reg_type.length > 0" class="opt-type-list margin-vertical-xxxl">
<!-- <text v-if="home_user_reg_type.indexOf('username') != -1" class="padding-vertical-sm" :class="current_opt_type === 'reg_username' ? 'cr-main nav-active-line' : ''" data-value="reg_username" @tap="opt_type_event">{{ $t('login.login.n2pv70') }}</text>
<text v-if="home_user_reg_type.indexOf('sms') != -1" class="padding-vertical-sm" :class="current_opt_type === 'reg_sms' ? 'cr-main nav-active-line' : ''" data-value="reg_sms" @tap="opt_type_event">{{ $t('login.login.1p7843') }}</text>
<text v-if="home_user_reg_type.indexOf('email') != -1" class="padding-vertical-sm" :class="current_opt_type === 'reg_email' ? 'cr-main nav-active-line' : ''" data-value="reg_email" @tap="opt_type_event">{{ $t('login.login.p54kf1') }}</text> -->
</view>
<!-- <view v-else class="tc cr-grey padding-vertical-main">{{ $t('login.login.t59dho') }}</view> -->
<!-- 账号密码 -->
<block v-if="current_opt_type == 'reg_username'">
<input type="text" :placeholder="$t('login.login.6yfr9g')" maxlength="60" name="accounts" key="reg_username_1" class="form-item margin-vertical-xl wh-auto" />
<input type="text" :placeholder="$t('login.login.08fchn')" minlength="6" maxlength="18" name="pwd" password="true" key="reg_username_2" class="form-item margin-vertical-xl wh-auto" />
<view v-if="home_user_register_img_verify_state == 1" class="verify pr margin-vertical-xl">
<input type="text" :placeholder="$t('login.login.t3951j')" name="verify" maxlength="4" :value="form_input_image_verify_value" key="reg_username_3" @input="form_input_image_verify_event" />
<image v-if="(verify_image_url || null) != null" :src="verify_image_url" class="verify-image pa" mode="aspectFit" data-type="user_reg" @tap="image_verify_event"></image>
</view>
</block>
<!-- 手机 -->
<block v-if="current_opt_type == 'reg_sms'">
<input type="number" :placeholder="$t('login.login.28k91h')" maxlength="11" name="accounts" key="reg_sms_1" @input="form_input_mobile_event" class="form-item margin-vertical-xl wh-auto" />
<view class="code pr margin-vertical-xl">
<input type="number" :placeholder="$t('login.login.t3951j')" name="verify" maxlength="4" key="reg_sms_2" />
<button :class="'verify-submit pa round br text-size-sm cr-grey-9 ' + (verify_disabled ? 'sub-disabled' : '')" type="default" hover-class="none" size="mini" :loading="verify_loading" :disabled="verify_disabled" @tap="verify_send_event">{{ verify_submit_text }}</button>
</view>
<input type="text" :placeholder="$t('login.login.08fchn')" minlength="6" maxlength="18" name="pwd" password="true" key="reg_sms_3" class="form-item margin-vertical-xl wh-auto" />
</block>
<!-- 邮箱 -->
<block v-if="current_opt_type == 'reg_email'">
<input type="text" :placeholder="$t('login.login.db1rf4')" maxlength="60" name="accounts" key="reg_email_1" @input="form_input_email_event" class="form-item margin-vertical-xl wh-auto" />
<view class="code pr margin-vertical-xl">
<input type="number" :placeholder="$t('login.login.t3951j')" name="verify" maxlength="4" key="reg_email_2" />
<button :class="'verify-submit pa round br text-size-sm cr-grey-9 ' + (verify_disabled ? 'sub-disabled' : '')" type="default" hover-class="none" size="mini" :loading="verify_loading" :disabled="verify_disabled" @tap="verify_send_event">{{ verify_submit_text }}</button>
</view>
<input type="text" :placeholder="$t('login.login.08fchn')" minlength="6" maxlength="18" name="pwd" password="true" key="reg_email_3" class="form-item margin-vertical-xl wh-auto" />
</block>
<!-- 协议 -->
<view class="margin-top-xxxl cr-grey">
<view class="dis-inline-block va-m" @tap="agreement_change">
<radio-group class="dis-inline-block va-m" style="transform: scale(0.6)">
<label>
<radio value="agreement" color="#20a53a" :checked="agreement_status" />
</label>
</radio-group>
</view>
<view class="dis-inline-block va-m text-size-xs">
<text>{{ $t('login.login.nddg2x') }}</text>
<text class="cr-main" @tap="agreement_event" data-value="userregister">{{ $t('login.login.2v11we') }}</text>
<text>{{ $t('login.login.l3r4vr') }}</text>
<text class="cr-main" @tap="agreement_event" data-value="userprivacy">{{ $t('login.login.myno2x') }}</text>
</view>
</view>
<button class="bg-main br-main cr-white round text-size margin-top-xxxl" form-type="submit" type="default" hover-class="none" :loading="form_submit_loading" :disabled="form_submit_loading">{{ $t('login.login.hvunf8') }}</button>
<view class="margin-top-xxl oh flex-row jc-sb align-c">
<!-- 登录 -->
<view v-if="(home_user_login_type || null) != null && home_user_login_type.length > 0" class="tc">
<text class="cr-grey-9" data-value="login" @tap="opt_form_event">{{ $t('login.login.zy8tc4') }}</text>
</view>
</view>
</view>
</view>
</form>
</view>
<!-- 找回密码 -->
<view v-else-if="current_opt_form == 'forget'" class="form-content">
<form @submit="form_submit_forget">
<!-- form表单距离去除顶部沾满整个空间的高度 -->
<view class="flex-col jc-sb">
<view class="margin-bottom-xxxl">
<input type="text" :placeholder="$t('login.login.d178m0')" maxlength="60" name="accounts" @input="form_input_accounts_event" class="form-item margin-vertical-xl wh-auto" />
<view class="code pr margin-vertical-xl">
<input type="number" autocomplete="off" :placeholder="$t('login.login.t3951j')" name="verify" maxlength="4" />
<button :class="'verify-submit pa round br text-size-sm cr-base ' + (verify_disabled ? 'sub-disabled' : '')" type="default" hover-class="none" size="mini" :loading="verify_loading" :disabled="verify_disabled" @tap="verify_send_event">{{ verify_submit_text }}</button>
</view>
<input type="text" autocomplete="off" :placeholder="$t('login.login.9wx3ch')" minlength="6" maxlength="18" name="pwd" password="true" class="form-item margin-vertical-xl wh-auto" />
<button class="bg-main br-main cr-white round text-size margin-top-xxxl" form-type="submit" type="default" hover-class="none" :loading="form_submit_loading" :disabled="form_submit_loading">{{ $t('common.confirm_sub') }}</button>
<view class="margin-top-xxl oh flex-row jc-sb align-c">
<!-- 登录 -->
<view v-if="(home_user_login_type || null) != null && home_user_login_type.length > 0" class="tc">
<text class="cr-grey-9" data-value="login" @tap="opt_form_event">{{ $t('login.login.zy8tc4') }}</text>
</view>
<!-- 注册 -->
<view v-if="(home_user_reg_type || null) != null && home_user_reg_type.length > 0" class="tc">
<text class="cr-grey-9" data-value="reg" @tap="opt_form_event">{{ $t('login.login.b347k4') }}</text>
</view>
</view>
</view>
</view>
</form>
</view>
<!-- #ifdef MP -->
<!-- 小程序授权 -->
<view v-if="current_opt_form == 'auth' && (user || null) == null" class="margin-top-xxxl tc">
<view class="cr-base">{{ $t('login.login.836o8e') }}</view>
<view class="margin-top-sm cr-grey">
<view class="dis-inline-block va-m" @tap="agreement_change">
<radio-group style="transform: scale(0.6)">
<label>
<radio value="agreement" color="#20a53a" :checked="agreement_status" />
</label>
</radio-group>
</view>
<view class="dis-inline-block va-m text-size-xs">
<text>{{ $t('login.login.nddg2x') }}</text>
<text class="cr-main" @tap="agreement_event" data-value="userregister">{{ $t('login.login.2v11we') }}</text>
<text>{{ $t('login.login.l3r4vr') }}</text>
<text class="cr-main" @tap="agreement_event" data-value="userprivacy">{{ $t('login.login.myno2x') }}</text>
</view>
</view>
<view class="margin-top-xxl">
<navigator open-type="navigateBack" hover-class="none" class="dis-inline-block margin-right-lg">
<button class="bg-yellow br-yellow cr-white round" type="default" size="mini" hover-class="none">{{ $t('common.cancel') }}</button>
</navigator>
<!-- #ifdef MP-WEIXIN || MP-TOUTIAO -->
<button class="margin-left-lg bg-green br-green cr-white round" type="default" size="mini" @tap="get_user_info_event">{{ $t('buy.buy.33fugm') }}{{ client_text }}{{ $t('login.login.tvl242') }}</button>
<!-- #endif -->
<!-- #ifdef MP-QQ || MP-BAIDU || MP-KUAISHOU -->
<button class="margin-left-lg bg-green br-green cr-white round" type="default" size="mini" open-type="getUserInfo" @getuserinfo="get_user_info_event">{{ $t('buy.buy.33fugm') }}{{ client_text }}{{ $t('login.login.tvl242') }}</button>
<!-- #endif -->
<!-- #ifdef MP-ALIPAY -->
<button class="margin-left-lg bg-green br-green cr-white round" type="default" size="mini" open-type="getAuthorize" @getAuthorize="get_user_info_event" scope="userInfo">{{ $t('buy.buy.33fugm') }}{{ client_text }}{{ $t('login.login.tvl242') }}</button>
<!-- #endif -->
</view>
</view>
<!-- #endif -->
</view>
<!-- 第三方登录 -->
<view v-if="current_opt_form == 'login' || current_opt_form == 'reg'" class="padding-main margin-bottom-xxxl">
<view class="bottom-line-exclude">
<!-- #ifdef H5 || APP -->
<view v-if="(plugins_thirdpartylogin_data || null) != null && (plugins_thirdpartylogin_config || null) != null" class="plugins-thirdpartylogin tc">
<view class="text-size-xs cr-grey-c margin-bottom-main">{{ $t('login.login.9q27d8') }}</view>
<view class="flex-row align-c jc-c">
<view v-for="(item, key, index) in plugins_thirdpartylogin_data" :key="index">
<block v-if="index < 3">
<view class="item round flex-row align-c jc-c margin-horizontal-sm" :style="'background-color:' + item.bg_color + ';'" :data-type="key" @tap="plugins_thirdpartylogin_event">
<image :src="item.icon" mode="aspectFit" class="dis-block auto"></image>
</view>
</block>
</view>
<view v-if="Object.keys(plugins_thirdpartylogin_data).length > 3" class="item dis-inline-block round more-submit margin-horizontal-sm" @tap="popup_login_open_event">
<image :src="login_static_url + 'more.png'" mode="aspectFit" class="dis-block auto"></image>
</view>
</view>
</view>
<!-- #endif -->
</view>
</view>
</view>
<!-- 图片验证码弹层 -->
<component-popup :propShow="popup_image_verify_status" propPosition="bottom" @onclose="popup_image_verify_close_event">
<view class="bg-white padding-horizontal-main padding-top-main">
<view class="fr oh">
<view class="fr" @tap.stop="popup_image_verify_close_event">
<iconfont name="icon-close-o" size="28rpx" color="#999"></iconfont>
</view>
</view>
<view class="form-content margin-top-xxxl padding-top-xxl">
<view class="verify pr margin-vertical-main">
<input type="text" :placeholder="$t('login.login.t3951j')" name="verify" maxlength="4" :value="form_input_image_verify_value" @input="form_input_image_verify_event" />
<image v-if="(verify_image_url || null) != null" :src="verify_image_url" class="verify-image pa" mode="aspectFit" :data-type="'user_' + current_opt_form" @tap="image_verify_event"></image>
</view>
<view class="margin-top-xxxl margin-bottom-xxxl">
<button class="bg-main br-main cr-white round text-size" type="default" @tap="popup_image_verify_submit_event" hover-class="none" :disabled="verify_disabled">{{ $t('common.confirm') }}</button>
</view>
</view>
</view>
</component-popup>
<!-- 打开语言选择弹层-->
<component-popup :propShow="popup_language_status" propPosition="bottom" :propIsRadius="false" @onclose="popup_language_close_event">
<view class="popup-language">
<view class="flex-row align-c jc-sb padding-main">
<view @tap="popup_language_close_event">
<iconfont name="icon-close-o" size="28rpx"></iconfont>
</view>
<view class="text-size" @tap="popup_sub_language_event">{{ $t('common.confirm') }}</view>
</view>
<view class="br-t-f5 padding-main list">
<view v-for="(value, key) in language_list" :key="key" class="spacing-mb flex-row jc-sb align-c" :class="language_key == key ? 'cr-main' : ''" :data-key="key" :data-value="value" @tap="checked_language_event">
{{ value }}
<iconfont v-if="language_key == key" name="icon-checked" size="32rpx"></iconfont>
</view>
</view>
</view>
</component-popup>
<!-- 选择登录方式 -->
<component-popup :propShow="popup_login_status" propMostClass="z-i-deep pr" propPosition="bottom" :propIsRadius="false" propStyle="background-color:transparent;" @onclose="popup_login_close_event">
<view class="popup-login padding-sm">
<view class="bg-white border-radius-main content">
<view v-for="(item, key, index) in plugins_thirdpartylogin_data" :key="index">
<block v-if="index > 2">
<view class="item padding-lg flex-col jc-c align-c" :data-type="key" @tap="plugins_thirdpartylogin_event">
<view class="flex-row align-c login-width text-size-lg"> <image :src="item.icon" mode="aspectFit" class="margin-right-main"></image>{{ item.name }} </view>
</view>
</block>
</view>
</view>
<view class="margin-top-main tc footer">
<view class="padding-main text-size-lg fw-b bg-white cancel-btn" @tap="popup_login_close_event">{{ $t('common.cancel') }}</view>
</view>
</view>
</component-popup>
</block>
<view v-else class="padding-top-xxxl tc">
<view class="cr-red margin-top-xxxl">{{ $t('login.login.pgyv78') }}</view>
<view class="cr-grey-c text-size-xs margin-top-xxl">{{ $t('login.login.d76tgh') }}</view>
<view class="margin-top-xl">
<button type="default" size="mini" class="br-main cr-white bg-main dis-inline-block padding-left-xxxl padding-right-xxxl padding-top-sm padding-bottom-sm round" @tap="cache_refresh_event">{{ $t('login.login.6fe6ra') }}</button>
</view>
</view>
</view>
<!-- 公共 -->
<component-common ref="common"></component-common>
</view>
</template>
<script>
const app = getApp();
import socket from '@/utils/socket';
import base64 from '@/common/js/lib/base64.js';
import componentCommon from '@/components/common/common';
import componentPopup from '@/components/popup/popup';
let login_static_url = app.globalData.get_static_url('thirdpartylogin', true) + 'icon/';
export default {
data() {
return {
// 多语言
system_locale: '',
application_locale: '',
// 语言选择
popup_language_status: false,
language_list: '',
language_key: '',
// 实际提交的语言字段
language: '',
home_use_multilingual_status: 0,
theme_view: app.globalData.get_theme_value_view(),
login_static_url: login_static_url,
params: null,
user: null,
prev_page: null,
form_input_mobile_value: '',
form_input_email_value: '',
form_input_accounts_value: '',
form_input_image_verify_value: '',
verify_submit_text: '',
verify_loading: false,
verify_disabled: false,
form_submit_loading: false,
verify_time_total: 60,
temp_clear_time: null,
agreement_status: false,
verify_image_url: null,
popup_image_verify_status: false,
navigation_bar_title_key: '',
// 基础配置
is_refreshed_base_data: 0,
is_exist_base_data: 0,
common_user_verify_bind_mobile_list: [],
common_user_onekey_bind_mobile_list: [],
home_site_logo_square: null,
home_user_login_type: [],
home_user_reg_type: [],
home_user_login_img_verify_state: 0,
home_user_register_img_verify_state: 0,
common_img_verify_state: 0,
client_value: app.globalData.application_client_type(),
// 0 确认绑定方式, 1 验证码绑定
current_login_bind_type: 0,
// 当前操作方式
current_opt_form: 'auth',
current_opt_type: 'auth',
current_opt_type_title: {},
// 第三方登录
plugins_thirdpartylogin_data: null,
plugins_thirdpartylogin_user: null,
plugins_thirdpartylogin_is_call_app: 0,
// app第三方登录通道
app_login_provider_list: [],
// 错误提示信息
error_msg: null,
// 登录方式弹窗状态
popup_login_status: false,
// 客户端名称
client_text: '',
};
},
components: {
componentCommon,
componentPopup,
},
// 页面加载初始化
onLoad(params) {
// 调用公共事件方法
app.globalData.page_event_onload_handle(params);
// 资源设置
this.set_resources_data();
// #ifdef APP
// 获取app第三方登录通道设置
this.provider_action();
//#endif
// 多语言
let system_info = uni.getSystemInfoSync();
this.system_locale = system_info.language;
this.application_locale = app.globalData.get_language_value();
uni.onLocaleChange((e) => {
this.application_locale = e.locale;
});
var language_key = app.globalData.get_language_value();
var language_list = this.$t('language');
this.setData({
params: params,
language_list: language_list,
language_key: language_key,
language: language_list[language_key],
});
// 上一个页面记录
var page = app.globalData.prev_page();
if (page != null && page != 'pages/login/login') {
uni.setStorageSync(app.globalData.data.cache_prev_page_key, page);
}
// 错误提示信息
if ((params.msg || null) != null) {
var msg = base64.decode(decodeURIComponent(params.msg));
this.setData({
error_msg: msg,
});
}
// 第三方登录成功处理
if ((params.thirdpartylogin || null) != null) {
var user = JSON.parse(base64.decode(decodeURIComponent(params.thirdpartylogin)));
this.setData({
plugins_thirdpartylogin_user: user,
});
// 是否需要绑定账号
if ((user.is_force_bind_user || 0) != 1) {
uni.setStorageSync(app.globalData.data.cache_user_info_key, user);
}
}
},
// 页面显示
onShow() {
// 调用公共事件方法
app.globalData.page_event_onshow_handle();
// 异步初始化配置
this.init_config();
// 数据初始化
this.init();
// 公共onshow事件
if ((this.$refs.common || null) != null) {
this.$refs.common.on_show();
}
// 分享菜单处理
app.globalData.page_share_handle();
},
methods: {
// 资源设置
set_resources_data() {
this.setData({
current_opt_type_title: {
auth: this.$t('login.login.jw378f'),
bind: this.$t('login.login.np9177'),
bind_email: this.$t('login.login.tgsa4d'),
login_username: this.$t('login.login.725312'),
login_sms: this.$t('login.login.158yg2'),
login_email: this.$t('login.login.r329eu'),
reg_username: this.$t('login.login.39hn6v'),
reg_sms: this.$t('login.login.z13km0'),
reg_email: this.$t('login.login.jc0w0o'),
forget: this.$t('login.login.8tmyuc'),
success: this.$t('login.login.5p23c6'),
bind_platform: this.$t('login.login.876tdf'),
},
verify_submit_text: this.$t('login.login.s665h5'),
client_text: this.$t('client.' + this.client_value),
});
},
// 数据初始化
init() {
// 缓存初始化配置
this.init_config(true);
// 用户信息
var user = app.globalData.get_user_cache_info() || null;
// 数据处理
var type = user == null ? 'auth' : 'bind';
var form = type;
var is_base = app.globalData.data.common_data_init_status || 0;
// #ifdef H5 || APP
if (user == null) {
// 非小程序:如果开启登录则取第一个登录方式
if ((this.home_user_login_type || null) != null && this.home_user_login_type.length > 0) {
form = 'login';
// 开启登录则取第一个
type = 'login_' + this.home_user_login_type[0];
// 用户登录和验证码获取开启图片验证码
if (this.home_user_login_img_verify_state == 1 || this.common_img_verify_state == 1) {
this.image_verify_event('user_login');
}
} else {
is_base = 0;
}
} else {
// 是否需要绑定手机
if (type == 'bind' && app.globalData.user_is_bind_mobile(user)) {
type = 'bind';
// 是否打开了一键获取手机、则直接展示验证码输入表单
if (this.common_user_onekey_bind_mobile_list.length > 0 && this.common_user_onekey_bind_mobile_list.indexOf(this.client_value) != -1) {
form = 'bind';
} else {
form = 'bind_verify';
}
} else {
form = 'success';
}
}
// #endif
// 是否参数指定类型和表单
if ((this.params.opt_type || null) != null) {
type = this.params.opt_type;
}
if ((this.params.opt_form || null) != null) {
form = this.params.opt_form;
}
// 没有基础数据则刷新
if (is_base == 0 && this.is_refreshed_base_data == 0) {
this.cache_refresh_event();
}
this.setData({
user: user,
current_opt_type: type,
current_opt_form: form,
is_exist_base_data: is_base,
is_refreshed_base_data: 1,
navigation_bar_title_key: type,
});
this.set_navigation_bar_title();
// 调用登录处理
if (parseInt(this.plugins_thirdpartylogin_is_call_app || 0) == 0 && type == 'bind_platform' && form == 'bind_platform' && (this.params.platform_type || null) != null) {
this.setData({
plugins_thirdpartylogin_is_call_app: 1,
});
this.plugins_thirdpartylogin_handle(this.params.platform_type);
return false;
}
// 登录成功
if (this.current_opt_form == 'success') {
var page = uni.getStorageSync(app.globalData.data.cache_prev_page_key) || null;
if (page != null) {
this.setData({ prev_page: page });
setTimeout(function () {
app.globalData.url_open('/' + page, true);
}, 2000);
}
}
},
// 初始化配置
init_config(status) {
if ((status || false) == true) {
this.setData({
home_site_logo_square: app.globalData.get_config('config.home_site_logo_square'),
common_user_verify_bind_mobile_list: app.globalData.get_config('config.common_user_verify_bind_mobile_list', []),
common_user_onekey_bind_mobile_list: app.globalData.get_config('config.common_user_onekey_bind_mobile_list', []),
home_user_login_type: app.globalData.get_config('config.home_user_login_type'),
home_user_reg_type: app.globalData.get_config('config.home_user_reg_type'),
home_user_login_img_verify_state: app.globalData.get_config('config.home_user_login_img_verify_state'),
home_user_register_img_verify_state: app.globalData.get_config('config.home_user_register_img_verify_state'),
common_img_verify_state: app.globalData.get_config('config.common_img_verify_state'),
home_use_multilingual_status: app.globalData.get_config('config.home_use_multilingual_status'),
plugins_thirdpartylogin_config: app.globalData.get_config('plugins_base.thirdpartylogin.data'),
plugins_thirdpartylogin_data: app.globalData.get_config('plugins_thirdpartylogin_data'),
});
// #ifdef APP
// app第三方登录通道隔离
var thirdpartylogin = this.plugins_thirdpartylogin_data || {};
if (Object.keys(thirdpartylogin).length) {
var temp_thirdpartylogin = Object.keys(thirdpartylogin).reduce((pre, cur) => {
if (this.app_login_provider_list.includes(cur)) {
pre[cur] = thirdpartylogin[cur];
}
return pre;
}, {});
this.setData({
plugins_thirdpartylogin_data: temp_thirdpartylogin,
});
}
// #endif
} else {
app.globalData.is_config(this, 'init_config');
}
},
// 登录授权事件
get_user_info_event(e) {
// 是否已同意协议
if (!this.agreement_status) {
app.globalData.showToast(this.$t('login.login.btu2c1'));
return false;
}
// #ifdef MP-WEIXIN
uni.getUserProfile({
desc: this.$t('login.login.no8ts6'),
lang: 'zh_CN',
success: (res) => {
this.user_auth_code(res.userInfo);
},
fail: (res) => {
app.globalData.user_login_handle(this, 'user_auth_back_event');
},
});
// #endif
// #ifdef MP-QQ
uni.getUserInfo({
withCredentials: true,
lang: 'zh_CN',
success: (res) => {
var userinfo = res.userInfo;
userinfo['encrypted_data'] = res.encryptedData;
userinfo['iv'] = res.iv;
this.user_auth_code(userinfo);
},
});
// #endif
// #ifdef MP-ALIPAY
uni.getOpenUserInfo({
success: (res) => {
var userinfo = JSON.parse(res.response).response;
this.user_auth_code(userinfo);
},
});
// #endif
// #ifdef MP-BAIDU
var userinfo = e.detail.userInfo;
userinfo['encrypted_data'] = e.detail.encryptedData;
userinfo['iv'] = e.detail.iv;
this.user_auth_code(userinfo);
// #endif
// #ifdef MP-TOUTIAO
uni.getUserProfile({
force: true,
success: (res) => {
// 由于头条getUserProfile内置了login
// 会刷新前面的login会导致后面获取手机号码数据解析失败
// 这里重新获取sessionKey登录
app.globalData.user_login_handle(null, null, false);
// 用户授权登录
this.user_auth_code(res.userInfo);
},
});
// #endif
// #ifdef MP-KUAISHOU
var userinfo = e.target.userInfo;
this.user_auth_code(e.target.userInfo);
// #endif
},
// 用户授权登录
// auth_data 授权数据
user_auth_code(auth_data) {
if ((auth_data || null) != null) {
app.globalData.user_auth_login(this, 'user_auth_back_event', null, auth_data);
} else {
app.globalData.showToast(this.$t('login.login.3nmrg2'));
}
},
// 授权返回事件
user_auth_back_event() {
var user = app.globalData.get_user_cache_info() || null;
this.setData({
user: user,
});
// 是否需要绑定手机号码
if (!app.globalData.user_is_bind_mobile(user)) {
uni.navigateBack();
}
// 初始化
this.init();
},
// 输入手机号码事件
form_input_mobile_event(e) {
this.setData({
form_input_mobile_value: e.detail.value,
});
},
// 输入邮箱事件
form_input_email_event(e) {
this.setData({
form_input_email_value: e.detail.value,
});
},
// 输入手机和邮箱事件
form_input_accounts_event(e) {
this.setData({
form_input_accounts_value: e.detail.value,
});
},
// 输入图片验证码事件
form_input_image_verify_event(e) {
this.setData({
form_input_image_verify_value: e.detail.value,
});
},
// 弹层图片验证码关闭
popup_image_verify_close_event(e) {
this.setData({
popup_image_verify_status: false,
});
},
// 弹层图片验证码确认
popup_image_verify_submit_event(e) {
this.verify_send_handle();
},
// 短信验证码发送事件
verify_send_event() {
// 手机号码验证:手机登录、手机注册、手机绑定
if (this.current_opt_type == 'login_sms' || this.current_opt_type == 'reg_sms' || this.current_opt_type == 'bind') {
if ((this.form_input_mobile_value || null) == null) {
app.globalData.showToast(this.$t('login.login.4c5n8o'));
return false;
}
}
// 邮箱验证:邮箱登录、邮箱注册
if (this.current_opt_type == 'login_email' || this.current_opt_type == 'reg_email' || this.current_opt_type == 'bind_email') {
if ((this.form_input_email_value || null) == null) {
app.globalData.showToast(this.$t('login.login.xak8g1'));
return false;
}
}
// 密码找回:邮箱或手机
if (this.current_opt_type == 'forget' && (this.form_input_accounts_value || null) == null) {
app.globalData.showToast(this.$t('login.login.ku05ty'));
return false;
}
// 是否开启图片验证码、绑定操作不使用图片验证码
if (this.current_opt_form != 'bind' && this.current_opt_form != 'bind_verify' && this.current_opt_form != 'bind_email') {
if (this.common_img_verify_state == 1) {
this.setData({
popup_image_verify_status: true,
});
return false;
}
}
// 发送验证码处理
this.verify_send_handle();
},
// 短信验证码发送处理
verify_send_handle() {
// 是否开启图片验证码
if (this.current_opt_form != 'bind' && this.current_opt_form != 'bind_verify' && this.current_opt_form != 'bind_email') {
if (this.common_img_verify_state == 1) {
if ((this.form_input_image_verify_value || null) == null || this.form_input_image_verify_value.length < 4) {
app.globalData.showToast(this.$t('login.login.7r5h37'));
return false;
}
}
}
// 请求数据
var action = '';
var image_verify_type = '';
if (this.current_opt_form == 'bind' || this.current_opt_form == 'bind_email' || this.current_opt_form == 'bind_verify') {
image_verify_type = 'user_bind';
if (this.current_opt_form == 'bind_email') {
action = 'appemailbindverifysend';
var post_data = {
email: this.form_input_email_value || '',
};
if ((post_data.email || null) == null) {
app.globalData.showToast(this.$t('login.login.xak8g1'));
return false;
}
} else if (this.current_opt_form == 'bind_verify') {
action = 'appmobilebindverifysend';
var post_data = {
mobile: this.form_input_mobile_value || '',
};
if ((post_data.mobile || null) == null) {
app.globalData.showToast(this.$t('login.login.4c5n8o'));
return false;
}
}
} else {
if (this.current_opt_form == 'login') {
action = 'loginverifysend';
image_verify_type = 'user_login';
} else if (this.current_opt_form == 'reg') {
action = 'regverifysend';
image_verify_type = 'user_reg';
} else if (this.current_opt_form == 'forget') {
action = 'forgetpwdverifysend';
image_verify_type = 'user_forget';
}
var accounts = (this.current_opt_type == 'bind_verify' || this.current_opt_type == 'login_sms' || this.current_opt_type == 'reg_sms' ? this.form_input_mobile_value : this.current_opt_type == 'forget' ? this.form_input_accounts_value : this.form_input_email_value) || null;
if (accounts == null) {
app.globalData.showToast(this.$t('login.login.24mvbh'));
return false;
}
var post_data = {
accounts: accounts,
verify: this.form_input_image_verify_value,
type: this.current_opt_type.replace('login_', '').replace('reg_', ''),
};
}
// 网络请求
var self = this;
uni.showLoading({
title: this.$t('common.sending_in_text'),
});
this.setData({
verify_submit_text: this.$t('common.sending'),
verify_loading: true,
verify_disabled: true,
});
uni.request({
url: app.globalData.get_request_url(action, 'user'),
method: 'POST',
data: post_data,
dataType: 'json',
success: (res) => {
uni.hideLoading();
if (res.data.code == 0) {
// 是否开启图片验证码
if (this.common_img_verify_state == 1) {
this.setData({
popup_image_verify_status: false,
});
}
// 倒计时处理
this.setData({
verify_loading: false,
});
var temp_time = this.verify_time_total;
this.temp_clear_time = setInterval(function () {
if (temp_time <= 1) {
clearInterval(self.temp_clear_time);
self.setData({
verify_submit_text: self.$t('login.login.s665h5'),
verify_disabled: false,
});
} else {
temp_time--;
self.setData({
verify_submit_text: self.$t('login.login.n24i5u') + temp_time + self.$t('login.login.4306xr'),
});
}
}, 1000);
} else {
this.setData({
verify_submit_text: this.$t('login.login.s665h5'),
verify_loading: false,
verify_disabled: false,
form_input_image_verify_value: '',
});
this.image_verify_event(image_verify_type);
app.globalData.showToast(res.data.msg);
}
},
fail: () => {
uni.hideLoading();
this.setData({
verify_submit_text: this.$t('login.login.s665h5'),
verify_loading: false,
verify_disabled: false,
form_input_image_verify_value: '',
});
this.image_verify_event(image_verify_type);
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
},
form_submit_bind_mobile(e) {
// 数据验证
var validation = [
{ fields: 'mobile', msg: this.$t('login.login.4c5n8o') },
{ fields: 'verify', msg: this.$t('login.login.01xmab') },
];
this.formBind(e, validation, app.globalData.get_request_url('appmobilebind', 'user'));
},
// 绑定手机表单提交
form_submit_bind_email(e) {
// 数据验证
var validation = [
{ fields: 'email', msg: this.$t('login.login.xak8g1') },
{ fields: 'verify', msg: this.$t('login.login.01xmab') },
];
this.formBind(e, validation, app.globalData.get_request_url('appemailbind', 'user'));
},
// 绑定表单提交
formBind(e, validation, url) {
// 其他数据
var client_type = app.globalData.application_client_type();
var user = this.user || this.plugins_thirdpartylogin_user || app.globalData.get_login_cache_info() || {};
e.detail.value['nickname'] = user.nickname;
e.detail.value['avatar'] = user.avatar;
e.detail.value['province'] = user.province;
e.detail.value['city'] = user.city;
e.detail.value['gender'] = user.gender;
// 小程序数据
// #ifdef MP
var field_openid = client_type + '_openid';
var field_unionid = client_type + '_unionid';
e.detail.value[field_openid] = user[field_openid] || '';
e.detail.value[field_unionid] = user[field_unionid] || '';
// #endif
// #ifdef MP
validation.push({ fields: field_openid, msg: this.$t('login.login.prqvf1') });
// #endif
if (app.globalData.fields_check(e.detail.value, validation)) {
uni.showLoading({
title: this.$t('common.processing_in_text'),
});
this.setData({
form_submit_loading: true,
});
// 网络请求
uni.request({
url: url,
method: 'POST',
data: e.detail.value,
dataType: 'json',
success: (res) => {
this.user_success_handle(res);
},
fail: () => {
uni.hideLoading();
this.setData({
form_submit_loading: false,
});
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
}
},
// 获取手机号码一键登录
confirm_phone_number_event(e) {
var encrypted_data = e.detail.encryptedData || null;
var iv = e.detail.iv || null;
var code = e.detail.code || null;
if ((encrypted_data != null && iv != null) || code != null) {
// 解密数据并绑定手机
var client_type = app.globalData.application_client_type();
var user = this.user || this.plugins_thirdpartylogin_user || app.globalData.get_login_cache_info() || {};
var field_openid = client_type + '_openid';
var field_unionid = client_type + '_unionid';
var data = {
encrypted_data: encrypted_data,
iv: iv,
code: code,
openid: user[field_openid] || '',
nickname: user.nickname || '',
avatar: user.avatar || '',
province: user.province || '',
city: user.city || '',
gender: user.gender || 0,
};
data[field_unionid] = user[field_unionid] || '';
uni.showLoading({
title: this.$t('common.processing_in_text'),
});
uni.request({
url: app.globalData.get_request_url('onekeyusermobilebind', 'user'),
method: 'POST',
data: data,
dataType: 'json',
success: (res) => {
this.user_success_handle(res);
},
fail: () => {
uni.hideLoading();
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
} else {
var msg = e.errmsg || e.errMsg || e.detail.errmsg || e.detail.errMsg || null;
if (msg != null) {
app.globalData.showToast(msg);
}
}
},
// 登录表单提交
form_submit_login(e) {
// 是否已同意协议
if (!this.agreement_status) {
app.globalData.showToast(this.$t('login.login.btu2c1'));
return false;
}
// 数据验证
var validation = [];
if (this.current_opt_type == 'login_sms') {
validation.push({ fields: 'accounts', msg: this.$t('login.login.yvj88j') });
}
if (this.current_opt_type == 'login_email') {
validation.push({ fields: 'accounts', msg: this.$t('login.login.yo6x3p') });
}
if (this.current_opt_type == 'login_username') {
validation.push({ fields: 'accounts', msg: this.$t('login.login.n7vh75') });
validation.push({ fields: 'pwd', msg: this.$t('login.login.277w03') });
}
if (this.current_opt_type == 'login_sms' || this.current_opt_type == 'login_email' || (this.current_opt_type == 'login_username' && this.home_user_login_img_verify_state == 1)) {
validation.push({ fields: 'verify', msg: this.$t('login.login.cesl5d') });
}
if (app.globalData.fields_check(e.detail.value, validation)) {
// 登录方式
e.detail.value['type'] = this.current_opt_type.replace('login_', '');
// 其他数据
var client_type = app.globalData.application_client_type();
var user = this.user || this.plugins_thirdpartylogin_user || app.globalData.get_login_cache_info() || {};
e.detail.value['nickname'] = user.nickname;
e.detail.value['avatar'] = user.avatar;
e.detail.value['province'] = user.province;
e.detail.value['city'] = user.city;
e.detail.value['gender'] = user.gender;
// #ifdef MP
// 小程序数据
var field_openid = client_type + '_openid';
var field_unionid = client_type + '_unionid';
e.detail.value[field_openid] = user[field_openid] || '';
e.detail.value[field_unionid] = user[field_unionid] || '';
// #endif
// 网络请求
uni.showLoading({
title: this.$t('login.login.c5wa4u'),
});
this.setData({
form_submit_loading: true,
});
uni.request({
url: app.globalData.get_request_url('login', 'user'),
method: 'POST',
data: e.detail.value,
dataType: 'json',
success: (res) => {
this.user_success_handle(res);
},
fail: () => {
uni.hideLoading();
this.setData({
form_submit_loading: false,
});
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
}
},
// 注册表单提交
form_submit_reg(e) {
// 是否已同意协议
if (!this.agreement_status) {
app.globalData.showToast(this.$t('login.login.btu2c1'));
return false;
}
// 数据验证
var validation = [];
if (this.current_opt_type == 'reg_sms') {
validation.push({ fields: 'accounts', msg: this.$t('login.login.yvj88j') });
}
if (this.current_opt_type == 'reg_email') {
validation.push({ fields: 'accounts', msg: this.$t('login.login.yo6x3p') });
}
if (this.current_opt_type == 'reg_username') {
validation.push({ fields: 'accounts', msg: this.$t('login.login.n7vh75') });
validation.push({ fields: 'pwd', msg: this.$t('login.login.277w03') });
}
if (this.current_opt_type == 'reg_sms' || this.current_opt_type == 'reg_email' || (this.current_opt_type == 'reg_username' && this.home_user_register_img_verify_state == 1)) {
validation.push({ fields: 'verify', msg: this.$t('login.login.cesl5d') });
}
if (app.globalData.fields_check(e.detail.value, validation)) {
// 注册方式
e.detail.value['type'] = this.current_opt_type.replace('reg_', '');
// 其他数据
var client_type = app.globalData.application_client_type();
var user = this.user || this.plugins_thirdpartylogin_user || app.globalData.get_login_cache_info() || {};
e.detail.value['nickname'] = user.nickname;
e.detail.value['avatar'] = user.avatar;
e.detail.value['province'] = user.province;
e.detail.value['city'] = user.city;
e.detail.value['gender'] = user.gender;
// #ifdef MP
// 小程序数据
var field_openid = client_type + '_openid';
var field_unionid = client_type + '_unionid';
e.detail.value[field_openid] = user[field_openid] || '';
e.detail.value[field_unionid] = user[field_unionid] || '';
// #endif
// 网络请求
uni.showLoading({
title: this.$t('login.login.g30ew7'),
});
this.setData({
form_submit_loading: true,
});
uni.request({
url: app.globalData.get_request_url('reg', 'user'),
method: 'POST',
data: e.detail.value,
dataType: 'json',
success: (res) => {
this.user_success_handle(res);
},
fail: () => {
uni.hideLoading();
this.setData({
form_submit_loading: false,
});
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
}
},
// 密码找回表单提交
form_submit_forget(e) {
// 数据验证
var validation = [
{ fields: 'accounts', msg: this.$t('login.login.h0515x') },
{ fields: 'verify', msg: this.$t('login.login.cesl5d') },
{ fields: 'pwd', msg: this.$t('login.login.wysg7k') },
];
if (app.globalData.fields_check(e.detail.value, validation)) {
// 网络请求
uni.showLoading({
title: this.$t('common.processing_in_text'),
});
this.setData({
form_submit_loading: true,
});
uni.request({
url: app.globalData.get_request_url('forgetpwd', 'user'),
method: 'POST',
data: e.detail.value,
dataType: 'json',
success: (res) => {
uni.hideLoading();
if (res.data.code == 0) {
app.globalData.showToast(res.data.msg, 'success');
var self = this;
setTimeout(function () {
var opt_type = (self.home_user_login_type || null) != null && self.home_user_login_type.length > 0 ? 'login_' + self.home_user_login_type[0] : null;
self.setData({
form_submit_loading: false,
current_opt_form: 'login',
current_opt_type: opt_type,
});
if (opt_type != null) {
// 是否开启图片验证码
if (self.home_user_login_img_verify_state == 1 || self.common_img_verify_state == 1) {
self.image_verify_event('user_login');
}
}
}, 3000);
} else {
this.setData({
form_submit_loading: false,
});
app.globalData.showToast(res.data.msg);
}
},
fail: () => {
uni.hideLoading();
this.setData({
form_submit_loading: false,
});
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
}
},
// 登录和注册成功回调处理
user_success_handle(res) {
if (res.data.code == 0 && (res.data.data || null) != null) {
// 清除定时任务并存储用户信息
clearInterval(this.temp_clear_time);
uni.setStorageSync(app.globalData.data.cache_user_info_key, res.data.data);
// 是否强制绑定账号处理
if ((this.plugins_thirdpartylogin_user || null) != null && (this.plugins_thirdpartylogin_user.is_force_bind_user || 0) == 1) {
uni.request({
url: app.globalData.get_request_url('bind', 'index', 'thirdpartylogin'),
method: 'POST',
data: this.plugins_thirdpartylogin_user,
dataType: 'json',
success: (res) => {
if (res.data.code == 0) {
uni.hideLoading();
uni.setStorageSync(app.globalData.data.cache_user_info_key, res.data.data);
this.success_back_handle(res);
} else {
uni.hideLoading();
this.setData({
form_submit_loading: false,
});
app.globalData.showToast(res.data.msg);
}
},
fail: () => {
uni.hideLoading();
this.setData({
form_submit_loading: false,
});
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
} else {
uni.hideLoading();
this.success_back_handle(res);
}
} else {
uni.hideLoading();
this.setData({
form_submit_loading: false,
});
app.globalData.showToast(res.data.msg);
}
},
// 成功后处理
success_back_handle(res) {
var self = this;
var msg = this.plugins_thirdpartylogin_is_call_app == 1 ? this.$t('login.login.87yui2') : res.data.msg;
app.globalData.showToast(msg, 'success');
var event_callback = this.params.event_callback || null;
setTimeout(function () {
socket.connectSocket();
var pages = getCurrentPages();
if (pages.length > 1) {
// 触发回调函数
if (event_callback != null) {
if ((pages[pages.length - 2][event_callback] || null) != null) {
pages[pages.length - 2][event_callback]();
}
}
// 默认返回上一页
uni.navigateBack();
} else {
// 仅一个页面则执行成功返回
self.success_event();
}
}, 1000);
},
// 协议事件
agreement_event(e) {
var value = e.currentTarget.dataset.value || null;
if (value == null) {
app.globalData.showToast(this.$t('login.login.4wc3hr'));
return false;
}
// 是否存在协议 url 地址
var key = 'agreement_' + value + '_url';
var url = app.globalData.get_config('config.' + key) || null;
if (url == null) {
app.globalData.showToast(this.$t('login.login.x0nxxf'));
return false;
}
// 打开 webview
app.globalData.open_web_view(url);
},
// 协议改变
agreement_change(e) {
this.setData({
agreement_status: !this.agreement_status,
});
},
// 表单类型事件
opt_form_event(e) {
var value = e.currentTarget.dataset.value;
// 手机或邮箱更换绑定来源则直接返回
var is_verify = (this.params.opt_form || null) != null && (this.params.opt_form == 'bind_verify' || this.params.opt_form == 'bind_email');
var is_no_bind_mobile = this.common_user_onekey_bind_mobile_list.length == 0 || this.common_user_onekey_bind_mobile_list.indexOf(this.client_value) == -1;
if (value == 'bind' && (is_verify || is_no_bind_mobile)) {
uni.navigateBack();
}
// 设置数据
var data = {
current_opt_form: value,
};
// 小程序使用授权自动登录
// 切换手机绑定方式
if (value == 'auth' || value == 'bind') {
data['current_opt_type'] = value;
}
// 密码找回同时设置表单类型
if (value == 'forget') {
data['current_opt_type'] = 'forget';
if (this.common_img_verify_state == 1) {
this.image_verify_event('user_forget');
}
}
// 开启登录则取第一个
if (value == 'login' && this.home_user_login_type.length > 0) {
data['current_opt_type'] = 'login_' + this.home_user_login_type[0];
// 是否开启图片验证码
if (this.home_user_login_img_verify_state == 1 || this.common_img_verify_state == 1) {
this.image_verify_event('user_login');
}
}
// 开启注册则取第一个
if (value == 'reg' && this.home_user_reg_type.length > 0) {
data['current_opt_type'] = 'reg_' + this.home_user_reg_type[0];
// 是否开启图片验证码
if (this.home_user_register_img_verify_state == 1 || this.common_img_verify_state == 1) {
this.image_verify_event('user_reg');
}
}
this.setData(data);
// 标题
if ((data.current_opt_type || null) != null) {
this.setData({
navigation_bar_title_key: data.current_opt_type,
});
this.set_navigation_bar_title();
}
},
// 操作类型事件
opt_type_event(e) {
var value = e.currentTarget.dataset.value || null;
if (value != null) {
this.setData({
current_opt_type: value,
});
// 图片验证码
if (value == 'login_username' && this.home_user_login_img_verify_state == 1) {
this.image_verify_event('user_login');
}
if ((value == 'login_sms' || value == 'login_email') && this.common_img_verify_state == 1) {
this.image_verify_event('user_login');
}
if (value == 'reg_username' && this.home_user_register_img_verify_state == 1) {
this.image_verify_event('user_reg');
}
if ((value == 'reg_sms' || value == 'reg_email') && this.common_img_verify_state == 1) {
this.image_verify_event('user_reg');
}
// 标题
this.setData({
navigation_bar_title_key: value,
});
this.set_navigation_bar_title();
}
},
// 导航名称设置
set_navigation_bar_title() {
// 重新设置静态资源
this.set_resources_data();
// 设置这标题
uni.setNavigationBarTitle({
title: this.current_opt_type_title[this.navigation_bar_title_key],
});
},
// 图片验证码事件
image_verify_event(e) {
var type = typeof e == 'string' ? e : e.currentTarget.dataset.type || null;
if (type !== null) {
var tv = app.globalData.get_timestamp();
var url = app.globalData.get_request_url('userverifyentry', 'user', '', 'type=' + type + '&t=' + tv);
this.setData({
verify_image_url: url,
});
}
},
// 缓存数据刷新
cache_refresh_event(e) {
app.globalData.init_config();
var self = this;
uni.showLoading({
title: this.$t('common.loading_in_text'),
});
setTimeout(function () {
self.init();
uni.hideLoading();
}, 3000);
},
// 第三方登录事件
plugins_thirdpartylogin_event(e) {
// 是否已同意协议
if (!this.agreement_status) {
app.globalData.showToast(this.$t('login.login.btu2c1'));
return false;
}
this.setData({
popup_login_status: false,
});
// 调用登录处理
this.plugins_thirdpartylogin_handle(e.currentTarget.dataset.type);
},
// 第三方登录处理
plugins_thirdpartylogin_handle(type) {
// #ifdef H5
// 直接跳转到登录地址、这里还可以根据终端类型进行处理业务逻辑
for (var i in this.plugins_thirdpartylogin_data) {
if (type == i) {
window.location.href = this.plugins_thirdpartylogin_data[i]['login_url'];
}
}
// #endif
// #ifdef APP
let self = this;
switch (type) {
// 微信、QQ、谷歌
case 'weixin':
case 'qq':
case 'google':
uni.login({
provider: type,
success: function (res) {
let auth_result = res.authResult;
self.app_login_bind_handle(
{
...auth_result,
...{
platform: type,
openid: auth_result.openid,
access_token: auth_result.access_token,
},
},
auth_result
);
},
fail: function (error) {
app.globalData.showToast(error.errMsg + '(' + error.code + ')');
},
});
break;
// 苹果
case 'apple':
uni.login({
provider: type,
success: function (res) {
let auth_result = res.appleInfo || res.userInfo;
self.app_login_bind_handle(
{
...auth_result,
...{
platform: type,
openid: auth_result.openId || auth_result.user,
access_token: auth_result.access_token || '',
},
},
auth_result
);
},
fail: function (error) {
app.globalData.showToast(error.errMsg + '(' + error.code + ')');
},
});
break;
default:
app.globalData.showToast(type + this.$t('login.login.li9573'));
}
// #endif
},
// 登录回处理
app_login_bind_handle(post_data, auth_result) {
uni.showLoading({
title: this.$t('common.loading_in_text'),
});
uni.request({
url: app.globalData.get_request_url('bind', 'index', 'thirdpartylogin'),
method: 'POST',
data: post_data,
dataType: 'json',
success: (res) => {
uni.hideLoading();
if (res.data.code == 0) {
var user = { ...auth_result, ...res.data.data };
// 设置当前第三方登录用户数据
this.setData({
plugins_thirdpartylogin_user: user,
});
// 不需要绑定账号、则成功
if ((user.is_force_bind_user || 0) != 1) {
this.setData({
user: user,
});
// 缓存当前用户数据
uni.setStorageSync(app.globalData.data.cache_user_info_key, user);
// 成功回调
this.success_back_handle(res);
}
// 重新初始化
this.init();
} else {
app.globalData.showToast(res.data.msg);
}
},
fail: (res) => {
uni.hideLoading();
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
},
// 第三方登录绑定账号取消
plugins_thirdpartylogin_cancel_event(e) {
app.globalData.url_open('/pages/login/login', true);
},
// 成功返回
success_event(e) {
var url = this.prev_page == null ? app.globalData.app_tabbar_pages()[0] : this.prev_page;
app.globalData.url_open(url, true);
},
// 返回首页
back_event() {
app.globalData.page_back_prev_event();
},
// 打开语言选择弹窗
open_language_event() {
this.setData({
popup_language_status: !this.popup_language_status,
});
},
// 关闭语言弹窗
popup_language_close_event() {
this.setData({
popup_language_status: false,
});
},
// 选择语言
checked_language_event(e) {
this.setData({
language_key: e.currentTarget.dataset.key,
});
},
// 提交语言选择
popup_sub_language_event() {
this.language_change(this.language_key);
var language_list = this.$t('language');
this.setData({
language_list: language_list,
language: language_list[this.language_key],
popup_language_status: false,
});
// 重新设置当前页面标题
this.set_navigation_bar_title();
// 重新读取数据配置
app.globalData.init_config();
},
// 多语言切换
language_change(key) {
uni.setLocale(key);
this.$i18n.locale = key;
},
// 打开登录方式弹层
popup_login_open_event() {
// 是否已同意协议
if (!this.agreement_status) {
app.globalData.showToast(this.$t('login.login.btu2c1'));
return false;
}
this.setData({
popup_login_status: true,
});
},
// 关闭登录方式弹层
popup_login_close_event() {
this.setData({
popup_login_status: false,
});
},
// 获取app第三方登录通道
provider_action() {
uni.getProvider({
service: 'oauth',
success: (result) => {
this.setData({
app_login_provider_list: result.provider || [],
});
},
fail: (error) => {},
});
},
},
};
</script>
<style>
@import './login.css';
</style>