| @ -1,380 +1,366 @@ | |||||
| <template> | <template> | ||||
| <view class="login-container"> | |||||
| <!-- 应用标题和副标题 --> | |||||
| <view class="app-header"> | |||||
| <image :src="logoImage" alt="logo" style="width: 120rpx; height: 120rpx; display: block; margin: 0 auto;" /> | |||||
| <view class="app-title">{{ logoName }}</view> | |||||
| <!-- <view class="app-subtitle">旧物很有用·回收很简单</view> --> | |||||
| </view> | |||||
| <!-- 登录操作区域 --> | |||||
| <view class="login-actions"> | |||||
| <button class="login-btn" @click="handleLogin">登录</button> | |||||
| <button class="cancel-btn" @click="handleCancel">取消登录</button> | |||||
| <view class="agreement"> | |||||
| <checkbox-group @change="handleAgreementChange" class="radio-group"> | |||||
| <label class="radio-label"> | |||||
| <checkbox :checked="agreed" color="#fdbd3e" class="custom-radio"/> | |||||
| <text class="agreement-text">我已阅读并同意</text> | |||||
| <text class="protocol-link" @click.stop="openProtocol('service')">《服务协议》</text> | |||||
| <text class="agreement-text">和</text> | |||||
| <text class="protocol-link" @click.stop="openProtocol('privacy')">《隐私政策》</text> | |||||
| </label> | |||||
| </checkbox-group> | |||||
| </view> | |||||
| </view> | |||||
| <!-- <uv-divider :dashed = "true"></uv-divider> --> | |||||
| <!-- <view class="admin-login" @click="goToAdminLogin">管理员登录→</view> --> | |||||
| <PrivacyPopup | |||||
| ref="privacyPopup" | |||||
| :needPhone="needPhone" | |||||
| @agree="handleAgreePrivacy" | |||||
| @reject="handleRejectPrivacy" | |||||
| @open-protocol="openProtocol" | |||||
| /> | |||||
| <ProtocolDialog | |||||
| ref="protocolDialog" | |||||
| :show="showProtocolDialog" | |||||
| :title="protocolDialogTitle" | |||||
| :content="protocolDialogContent" | |||||
| @close="showProtocolDialog = false" | |||||
| @agree="handleProtocolAgree" | |||||
| @reject="handleProtocolReject" | |||||
| /> | |||||
| </view> | |||||
| <view class="login-container"> | |||||
| <!-- 应用标题和副标题 --> | |||||
| <view class="app-header"> | |||||
| <image :src="logoImage" | |||||
| mode="aspectFill" | |||||
| style="width: 170rpx; height: 170rpx; display: block; margin: 0 auto;" /> | |||||
| <view class="app-title">{{ logoName }}</view> | |||||
| <!-- <view class="app-subtitle">旧物很有用·回收很简单</view> --> | |||||
| </view> | |||||
| <!-- 登录操作区域 --> | |||||
| <view class="login-actions"> | |||||
| <button class="login-btn" @click="handleLogin">登录</button> | |||||
| <button class="cancel-btn" @click="handleCancel">取消登录</button> | |||||
| <view class="agreement"> | |||||
| <checkbox-group @change="handleAgreementChange" class="radio-group"> | |||||
| <label class="radio-label"> | |||||
| <checkbox :checked="agreed" color="#fdbd3e" class="custom-radio" /> | |||||
| <text class="agreement-text">我已阅读并同意</text> | |||||
| <text class="protocol-link" @click.stop="openProtocol('service')">《服务协议》</text> | |||||
| <text class="agreement-text">和</text> | |||||
| <text class="protocol-link" @click.stop="openProtocol('privacy')">《隐私政策》</text> | |||||
| </label> | |||||
| </checkbox-group> | |||||
| </view> | |||||
| </view> | |||||
| <!-- <uv-divider :dashed = "true"></uv-divider> --> | |||||
| <!-- <view class="admin-login" @click="goToAdminLogin">管理员登录→</view> --> | |||||
| <PrivacyPopup ref="privacyPopup" :needPhone="needPhone" @agree="handleAgreePrivacy" | |||||
| @reject="handleRejectPrivacy" @open-protocol="openProtocol" /> | |||||
| <ProtocolDialog ref="protocolDialog" :show="showProtocolDialog" :title="protocolDialogTitle" | |||||
| :content="protocolDialogContent" @close="showProtocolDialog = false" @agree="handleProtocolAgree" | |||||
| @reject="handleProtocolReject" /> | |||||
| </view> | |||||
| </template> | </template> | ||||
| <script> | <script> | ||||
| import PrivacyPopup from '@/wxcomponents/privacy-popup/privacy-popup.vue' | |||||
| import ProtocolDialog from '@/wxcomponents/protocol-dialog/protocol-dialog.vue' | |||||
| // import {banner} from '@/api.uts' | |||||
| export default { | |||||
| components: { | |||||
| PrivacyPopup, | |||||
| ProtocolDialog | |||||
| }, | |||||
| data() { | |||||
| return { | |||||
| agreed: false, | |||||
| showProtocolDialog: false, | |||||
| protocolDialogTitle: '', | |||||
| protocolDialogContent: '', | |||||
| configData: [], // 存储 getConfig 返回的 result | |||||
| needPhone: false // 控制是否需要手机号授权 | |||||
| } | |||||
| }, | |||||
| computed: { | |||||
| logoImage() { | |||||
| const item = this.configData.find(i => i.keyName === 'logo_image') | |||||
| return item ? item.keyContent : '' | |||||
| }, | |||||
| logoName() { | |||||
| const item = this.configData.find(i => i.keyName === 'logo_name') | |||||
| return item ? item.keyContent : '' | |||||
| } | |||||
| }, | |||||
| onLoad() { | |||||
| this.getConfigData() | |||||
| }, | |||||
| methods: { | |||||
| getConfigData() { | |||||
| this.$api('getConfig', {}, res => { | |||||
| // console.log('Config data response:', JSON.parse(JSON.stringify(res)) ) | |||||
| if (res && res.success && Array.isArray(res.result)) { | |||||
| this.configData = res.result | |||||
| // console.log('Config data set:', JSON.parse(JSON.stringify(this.configData)) ) | |||||
| } | |||||
| }) | |||||
| }, | |||||
| getConfigByKey(key) { | |||||
| const item = this.configData.find(i => i.keyName === key) | |||||
| return item ? item.keyContent : '' | |||||
| }, | |||||
| handleLogin() { | |||||
| if (!this.agreed) { | |||||
| uni.showToast({ | |||||
| title: '请阅读并勾选服务协议和隐私声明', | |||||
| icon: 'none' | |||||
| }); | |||||
| return; | |||||
| } | |||||
| this.$refs.privacyPopup.open() | |||||
| // uni.showLoading({ | |||||
| // title: '登录中...' | |||||
| // }); | |||||
| // setTimeout(() => { | |||||
| // uni.hideLoading(); | |||||
| // uni.showToast({ | |||||
| // title: '登录成功' | |||||
| // }); | |||||
| // uni.reLaunch({ | |||||
| // url: '/pages/index/index' | |||||
| // }); | |||||
| // }, 1500); | |||||
| }, | |||||
| handleCancel() { | |||||
| uni.navigateBack(); | |||||
| }, | |||||
| handleAgreementChange(e) { | |||||
| // console.log(this.agreed); | |||||
| // this.agreed = e.detail.value.length > 0; | |||||
| if(this.agreed){ | |||||
| this.agreed = false; | |||||
| }else{ | |||||
| this.agreed = true; | |||||
| } | |||||
| }, | |||||
| openProtocol(type) { | |||||
| console.log('Opening protocol:', type) | |||||
| console.log('Current configData:', this.configData) | |||||
| let protocol = null | |||||
| if (type === 'privacy') { | |||||
| protocol = this.configData.find(i => i.keyName === 'user_ys') | |||||
| } else if (type === 'service') { | |||||
| protocol = this.configData.find(i => i.keyName === 'user_xy') | |||||
| } | |||||
| console.log('Found protocol:', protocol) | |||||
| this.protocolDialogTitle = protocol ? protocol.keyValue : (type === 'privacy' ? '隐私政策' : '服务协议') | |||||
| this.protocolDialogContent = protocol && protocol.keyContent ? protocol.keyContent : | |||||
| (type === 'privacy' ? | |||||
| '<div style="padding: 20rpx;">暂无隐私政策内容</div>' : | |||||
| '<div style="padding: 20rpx;">暂无服务协议内容</div>') | |||||
| this.showProtocolDialog = true | |||||
| console.log('Dialog state:', { | |||||
| title: this.protocolDialogTitle, | |||||
| content: this.protocolDialogContent, | |||||
| show: this.showProtocolDialog | |||||
| }) | |||||
| }, | |||||
| goToAdminLogin() { | |||||
| uni.navigateTo({ | |||||
| url: '/pages/component/admin_login' | |||||
| }); | |||||
| }, | |||||
| // 同意隐私政策 | |||||
| handleAgreePrivacy() { | |||||
| uni.showLoading({ | |||||
| title: '登录中...' | |||||
| }) | |||||
| // 执行登录逻辑... | |||||
| let self = this | |||||
| wx.login({ | |||||
| success (res) { | |||||
| // console.log(res.code,'code') | |||||
| if (res.code) { | |||||
| self.$api('wxLogin', {code : res.code}, res => { | |||||
| console.log(res,'login') | |||||
| if (res.code == 200) { | |||||
| uni.hideLoading(); | |||||
| // console.log(res) | |||||
| uni.setStorageSync('token',res.result.token); | |||||
| uni.setStorageSync('openid',res.result.userInfo && res.result.userInfo.appletOpenid); | |||||
| getApp().globalData.login_status = true; | |||||
| if (res.result.userInfo) { | |||||
| const userInfo = res.result.userInfo; | |||||
| console.log(userInfo,'userInfo') | |||||
| if (!userInfo.headImage || !userInfo.nickName) { | |||||
| import PrivacyPopup from '@/wxcomponents/privacy-popup/privacy-popup.vue' | |||||
| import ProtocolDialog from '@/wxcomponents/protocol-dialog/protocol-dialog.vue' | |||||
| // import {banner} from '@/api.uts' | |||||
| export default { | |||||
| components: { | |||||
| PrivacyPopup, | |||||
| ProtocolDialog | |||||
| }, | |||||
| data() { | |||||
| return { | |||||
| agreed: false, | |||||
| showProtocolDialog: false, | |||||
| protocolDialogTitle: '', | |||||
| protocolDialogContent: '', | |||||
| configData: [], // 存储 getConfig 返回的 result | |||||
| needPhone: false // 控制是否需要手机号授权 | |||||
| } | |||||
| }, | |||||
| computed: { | |||||
| logoImage() { | |||||
| const item = this.configData.find(i => i.keyName === 'logo_image') | |||||
| return item ? item.keyContent : '' | |||||
| }, | |||||
| logoName() { | |||||
| const item = this.configData.find(i => i.keyName === 'logo_name') | |||||
| return item ? item.keyContent : '' | |||||
| } | |||||
| }, | |||||
| onLoad() { | |||||
| this.getConfigData() | |||||
| }, | |||||
| methods: { | |||||
| getConfigData() { | |||||
| this.$api('getConfig', {}, res => { | |||||
| // console.log('Config data response:', JSON.parse(JSON.stringify(res)) ) | |||||
| if (res && res.success && Array.isArray(res.result)) { | |||||
| this.configData = res.result | |||||
| // console.log('Config data set:', JSON.parse(JSON.stringify(this.configData)) ) | |||||
| } | |||||
| }) | |||||
| }, | |||||
| getConfigByKey(key) { | |||||
| const item = this.configData.find(i => i.keyName === key) | |||||
| return item ? item.keyContent : '' | |||||
| }, | |||||
| handleLogin() { | |||||
| if (!this.agreed) { | |||||
| uni.showToast({ | |||||
| title: '请阅读并勾选服务协议和隐私声明', | |||||
| icon: 'none' | |||||
| }); | |||||
| return; | |||||
| } | |||||
| this.$refs.privacyPopup.open() | |||||
| // uni.showLoading({ | |||||
| // title: '登录中...' | |||||
| // }); | |||||
| // setTimeout(() => { | |||||
| // uni.hideLoading(); | |||||
| // uni.showToast({ | |||||
| // title: '登录成功' | |||||
| // }); | |||||
| // uni.reLaunch({ | |||||
| // url: '/pages/index/index' | |||||
| // }); | |||||
| // }, 1500); | |||||
| }, | |||||
| handleCancel() { | |||||
| uni.navigateBack(); | |||||
| }, | |||||
| handleAgreementChange(e) { | |||||
| // console.log(this.agreed); | |||||
| // this.agreed = e.detail.value.length > 0; | |||||
| if (this.agreed) { | |||||
| this.agreed = false; | |||||
| } else { | |||||
| this.agreed = true; | |||||
| } | |||||
| }, | |||||
| openProtocol(type) { | |||||
| console.log('Opening protocol:', type) | |||||
| console.log('Current configData:', this.configData) | |||||
| let protocol = null | |||||
| if (type === 'privacy') { | |||||
| protocol = this.configData.find(i => i.keyName === 'user_ys') | |||||
| } else if (type === 'service') { | |||||
| protocol = this.configData.find(i => i.keyName === 'user_xy') | |||||
| } | |||||
| console.log('Found protocol:', protocol) | |||||
| this.protocolDialogTitle = protocol ? protocol.keyValue : (type === 'privacy' ? '隐私政策' : '服务协议') | |||||
| this.protocolDialogContent = protocol && protocol.keyContent ? protocol.keyContent : | |||||
| (type === 'privacy' ? | |||||
| '<div style="padding: 20rpx;">暂无隐私政策内容</div>' : | |||||
| '<div style="padding: 20rpx;">暂无服务协议内容</div>') | |||||
| this.showProtocolDialog = true | |||||
| console.log('Dialog state:', { | |||||
| title: this.protocolDialogTitle, | |||||
| content: this.protocolDialogContent, | |||||
| show: this.showProtocolDialog | |||||
| }) | |||||
| }, | |||||
| goToAdminLogin() { | |||||
| uni.navigateTo({ | |||||
| url: '/pages/component/admin_login' | |||||
| }); | |||||
| }, | |||||
| // 同意隐私政策 | |||||
| handleAgreePrivacy() { | |||||
| uni.showLoading({ | |||||
| title: '登录中...' | |||||
| }) | |||||
| // 执行登录逻辑... | |||||
| let self = this | |||||
| wx.login({ | |||||
| success(res) { | |||||
| // console.log(res.code,'code') | |||||
| if (res.code) { | |||||
| self.$api('wxLogin', { | |||||
| code: res.code | |||||
| }, res => { | |||||
| console.log(res, 'login') | |||||
| if (res.code == 200) { | |||||
| uni.hideLoading(); | |||||
| // console.log(res) | |||||
| uni.setStorageSync('token', res.result.token); | |||||
| uni.setStorageSync('openid', res.result.userInfo && res.result.userInfo | |||||
| .appletOpenid); | |||||
| getApp().globalData.login_status = true; | |||||
| if (res.result.userInfo) { | |||||
| const userInfo = res.result.userInfo; | |||||
| console.log(userInfo, 'userInfo') | |||||
| if (!userInfo.headImage || !userInfo.nickName) { | |||||
| uni.navigateTo({ | |||||
| url: '/pages/wxUserInfo' | |||||
| }); | |||||
| } else { | |||||
| uni.reLaunch({ | |||||
| url: '/pages/component/home' | |||||
| }); | |||||
| } | |||||
| } else { | |||||
| uni.navigateTo({ | uni.navigateTo({ | ||||
| url: '/pages/wxUserInfo' | url: '/pages/wxUserInfo' | ||||
| }); | }); | ||||
| } else { | |||||
| uni.reLaunch({ | |||||
| url: '/pages/component/home' | |||||
| }); | |||||
| } | } | ||||
| } else { | |||||
| uni.navigateTo({ | |||||
| url: '/pages/wxUserInfo' | |||||
| }); | |||||
| } | } | ||||
| } | |||||
| }) | |||||
| } else { | |||||
| uni.hideLoading(); | |||||
| console.log('登录失败!' + res.errMsg) | |||||
| } | |||||
| } | |||||
| }) | |||||
| }, | |||||
| // 拒绝隐私政策 | |||||
| handleRejectPrivacy() { | |||||
| uni.reLaunch({ url: '/pages/component/home' }); | |||||
| }, | |||||
| // 打开协议页面 | |||||
| openProtocolPage(type) { | |||||
| this.openProtocol(type) | |||||
| }, | |||||
| handleProtocolAgree() { | |||||
| this.showProtocolDialog = false | |||||
| this.agreed = true | |||||
| // 你可以在这里添加同意后的其他逻辑 | |||||
| }, | |||||
| handleProtocolReject() { | |||||
| this.showProtocolDialog = false | |||||
| if (this.agreed) { | |||||
| this.agreed = false | |||||
| } | |||||
| // 你可以在这里添加拒绝后的其他逻辑 | |||||
| } | |||||
| } | |||||
| } | |||||
| }) | |||||
| } else { | |||||
| uni.hideLoading(); | |||||
| console.log('登录失败!' + res.errMsg) | |||||
| } | |||||
| } | |||||
| }) | |||||
| }, | |||||
| // 拒绝隐私政策 | |||||
| handleRejectPrivacy() { | |||||
| uni.reLaunch({ | |||||
| url: '/pages/component/home' | |||||
| }); | |||||
| }, | |||||
| // 打开协议页面 | |||||
| openProtocolPage(type) { | |||||
| this.openProtocol(type) | |||||
| }, | |||||
| handleProtocolAgree() { | |||||
| this.showProtocolDialog = false | |||||
| this.agreed = true | |||||
| // 你可以在这里添加同意后的其他逻辑 | |||||
| }, | |||||
| handleProtocolReject() { | |||||
| this.showProtocolDialog = false | |||||
| if (this.agreed) { | |||||
| this.agreed = false | |||||
| } | |||||
| // 你可以在这里添加拒绝后的其他逻辑 | |||||
| } | |||||
| } | |||||
| } | |||||
| </script> | </script> | ||||
| <style scoped scss> | <style scoped scss> | ||||
| view { | |||||
| padding-bottom: 0 !important; | |||||
| } | |||||
| view { | |||||
| padding-bottom: 0 !important; | |||||
| } | |||||
| .login-container { | |||||
| display: flex; | |||||
| flex-direction: column; | |||||
| height: 100vh; | |||||
| background-color: #f9ece5; | |||||
| padding: 0 40rpx; | |||||
| padding-bottom: env(safe-area-inset-bottom); | |||||
| } | |||||
| .app-header { | |||||
| margin-top: 220rpx; | |||||
| margin-bottom: 180rpx; | |||||
| text-align: center; | |||||
| height: 30%; | |||||
| } | |||||
| image{ | |||||
| width: 50%; | |||||
| height: 50%; | |||||
| } | |||||
| .app-title { | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| font-family: Alimama ShuHeiTi; | |||||
| font-weight: 700; | |||||
| font-size: 28px; | |||||
| line-height: 140%; | |||||
| letter-spacing: 0%; | |||||
| /* background-color: rgba(254, 208, 116, 0.8); */ | |||||
| border-radius: 3em; | |||||
| letter-spacing: 0.2em; | |||||
| /* text-shadow: 1px 2px #f7b737; */ | |||||
| } | |||||
| .app-subtitle { | |||||
| font-size: 28rpx; | |||||
| color: #fef6e3; | |||||
| margin-top: 1rem; | |||||
| letter-spacing: 0.11em; | |||||
| } | |||||
| .login-actions { | |||||
| /* height: 30%; */ | |||||
| display: flex; | |||||
| flex-direction: column; | |||||
| align-items: center; | |||||
| justify-content: center; | |||||
| background-color: #f9ece5; | |||||
| border-radius: 30rpx; | |||||
| } | |||||
| .login-btn, .cancel-btn { | |||||
| width: 82%; | |||||
| height: 90rpx; | |||||
| line-height: 90rpx; | |||||
| border-radius: 45rpx; | |||||
| font-size: 32rpx; | |||||
| margin-bottom: 20rpx; | |||||
| border: none; | |||||
| } | |||||
| .login-btn { | |||||
| background-color: #f79400; | |||||
| color: white; | |||||
| } | |||||
| .cancel-btn { | |||||
| background-color: rgba(255, 253, 249); | |||||
| color: #f7990c; | |||||
| border: 1px solid rgba(249, 178, 71); | |||||
| } | |||||
| .agreement { | |||||
| /* margin-top: 40rpx; */ | |||||
| font-size: 24rpx; | |||||
| color: #333; | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| } | |||||
| .login-container { | |||||
| display: flex; | |||||
| flex-direction: column; | |||||
| height: 100vh; | |||||
| background-color: #f9ece5; | |||||
| padding: 0 40rpx; | |||||
| padding-bottom: env(safe-area-inset-bottom); | |||||
| } | |||||
| .radio-group { | |||||
| display: flex; | |||||
| align-items: center; | |||||
| } | |||||
| /* 自定义圆形checkbox样式 */ | |||||
| .custom-radio { | |||||
| /* border-radius: 50%; */ | |||||
| width: 32rpx; | |||||
| height: 32rpx; | |||||
| transform: scale(0.7); | |||||
| margin-right: 8rpx; | |||||
| } | |||||
| /* 覆盖uniapp默认checkbox样式 */ | |||||
| .custom-radio .wx-checkbox-input, | |||||
| .custom-radio .uni-checkbox-input { | |||||
| border-radius: 50% !important; | |||||
| width: 32rpx !important; | |||||
| height: 32rpx !important; | |||||
| } | |||||
| .custom-radio .wx-checkbox-input.wx-checkbox-input-checked, | |||||
| .custom-radio .uni-checkbox-input.uni-checkbox-input-checked { | |||||
| background-color: #07C160 !important; | |||||
| border-color: #07C160 !important; | |||||
| color: #ffffff !important; | |||||
| } | |||||
| /* .radio-label { | |||||
| .app-header { | |||||
| margin-top: 320rpx; | |||||
| margin-bottom: 280rpx; | |||||
| text-align: center; | |||||
| } | |||||
| .app-title { | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| font-family: Alimama ShuHeiTi; | |||||
| font-weight: 700; | |||||
| font-size: 28px; | |||||
| margin-top: 20rpx; | |||||
| } | |||||
| .app-subtitle { | |||||
| font-size: 28rpx; | |||||
| color: #fef6e3; | |||||
| margin-top: 1rem; | |||||
| letter-spacing: 0.11em; | |||||
| } | |||||
| .login-actions { | |||||
| /* height: 30%; */ | |||||
| display: flex; | |||||
| flex-direction: column; | |||||
| align-items: center; | |||||
| justify-content: center; | |||||
| background-color: #f9ece5; | |||||
| border-radius: 30rpx; | |||||
| } | |||||
| .login-btn, | |||||
| .cancel-btn { | |||||
| width: 82%; | |||||
| height: 90rpx; | |||||
| line-height: 90rpx; | |||||
| border-radius: 45rpx; | |||||
| font-size: 32rpx; | |||||
| margin-bottom: 20rpx; | |||||
| border: none; | |||||
| } | |||||
| .login-btn { | |||||
| background-color: #f79400; | |||||
| color: white; | |||||
| } | |||||
| .cancel-btn { | |||||
| background-color: rgba(255, 253, 249); | |||||
| color: #f7990c; | |||||
| border: 1px solid rgba(249, 178, 71); | |||||
| } | |||||
| .agreement { | |||||
| /* margin-top: 40rpx; */ | |||||
| font-size: 24rpx; | |||||
| color: #333; | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| } | |||||
| .radio-group { | |||||
| display: flex; | |||||
| align-items: center; | |||||
| } | |||||
| /* 自定义圆形checkbox样式 */ | |||||
| .custom-radio { | |||||
| /* border-radius: 50%; */ | |||||
| width: 32rpx; | |||||
| height: 32rpx; | |||||
| transform: scale(0.7); | |||||
| margin-right: 8rpx; | |||||
| } | |||||
| /* 覆盖uniapp默认checkbox样式 */ | |||||
| .custom-radio .wx-checkbox-input, | |||||
| .custom-radio .uni-checkbox-input { | |||||
| border-radius: 50% !important; | |||||
| width: 32rpx !important; | |||||
| height: 32rpx !important; | |||||
| } | |||||
| .custom-radio .wx-checkbox-input.wx-checkbox-input-checked, | |||||
| .custom-radio .uni-checkbox-input.uni-checkbox-input-checked { | |||||
| background-color: #07C160 !important; | |||||
| border-color: #07C160 !important; | |||||
| color: #ffffff !important; | |||||
| } | |||||
| /* .radio-label { | |||||
| display: flex; | display: flex; | ||||
| align-items: center; | align-items: center; | ||||
| } */ | } */ | ||||
| .agreement-text { | |||||
| margin: 0 4rpx; | |||||
| } | |||||
| .protocol-link { | |||||
| color: #fabe65; | |||||
| } | |||||
| .agreement-text { | |||||
| margin: 0 4rpx; | |||||
| } | |||||
| .admin-login { | |||||
| text-align: center; | |||||
| color: #fffffe; | |||||
| font-size: 28rpx; | |||||
| letter-spacing: 0.15em; | |||||
| } | |||||
| .protocol-link { | |||||
| color: #fabe65; | |||||
| } | |||||
| .admin-login { | |||||
| text-align: center; | |||||
| color: #fffffe; | |||||
| font-size: 28rpx; | |||||
| letter-spacing: 0.15em; | |||||
| } | |||||
| </style> | </style> | ||||