Files
gjt_mini/pages/login/user-login/index.vue
2025-12-30 09:44:46 +08:00

373 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view>
<u--form
labelPosition="left"
:model="formData"
ref="uForm"
labelWidth="100"
:rules="rules"
class="loginForm"
>
<u-form-item prop="loginName">
<u--input
border="surround"
placeholder="账号"
shape="circle"
v-model="formData.loginName"
fontSize="30"
></u--input>
</u-form-item>
<u-form-item prop="pwd">
<u--input
border="surround"
placeholder="密码"
type="password"
shape="circle"
v-model="formData.pwd"
fontSize="30"
></u--input>
</u-form-item>
<view>
<checkbox-group @change="changeCheck">
<checkbox class="checkbox">
<view slot="label">
<view class="label">
阅读并同意
<view class="text_link" @tap="privatyShow = true"
>用户服务协议隐私政策</view
>
</view>
</view>
</checkbox>
</checkbox-group>
</view>
<!-- <view v-if="showAgreement" class="index-privaty">
<van-checkbox checked-color="#4A47E0" value="{{ hasAgreement }}" bind:change="onCheckboxChanged"/>
</view> -->
<view class="login-btn">
<button
open-type="getPhoneNumber"
@getphonenumber="getPhoneNumber"
class="u-button u-reset-button u-button--success u-button--square u-button--normal wexin-but"
>
授权登录
</button>
<u-button
@click="submit"
plain
color="#017043"
:hairline="false"
:loading="loading"
:disabled="loading"
>{{ `登 录` }}</u-button
>
</view>
</u--form>
<u-popup :show="privatyShow" mode="bottom" @close="privatyShow = false">
<scroll-view scroll-y="true" style="height: 95vh">
<view class="content">
<text style="text-align: center">隐私协议</text>
<view>
<text>概述</text>
<text
>本小程序是由羚牛氢能科技上海有限公司开发运营的一款产品以下简称我们帮助解决用户开通搭建小程序公众号网站方面遇到的问题可以达到快速上线的目的我们深知个人信息对您而言的重要性也感谢您对我们的信任我们将通过本政策向您说明互助文档会如何收集存储保护使用及对外提供您的信息并说明您享有的权利其中要点如下</text
>
<view>
<text
>1.
为了便于您了解您在使用我们的服务时我们需要收集的信息类型与用途我们将结合具体服务向您逐一说明</text
>
</view>
<view>
<text
>2.
为了向您提供服务所需我们会按照合法正当必要的原则收集您的信息</text
>
</view>
<view>
<text
>3.
如果为了向您提供服务而需要将您的信息共享至第三方我们将评估该第三方收集信息的合法性正当性必要性我们将要求第三方对您的信息采取保护措施并严格遵守相关法律法规与监管要求另外我们会按照法律法规及国家标准的要求以确认协议具体场景下的文案确认弹窗提示等形式征得您的同意或确认第三方已经征得您的同意</text
>
</view>
<!-- 省略其他条款内容以类似方式嵌入 -->
<view>
<text>我们如何收集信息</text>
<text
>在您使用互助文档以下各项业务功能以下简称服务的过程中我们需要收集您的一些信息用以向您提供服务提升我们的服务质量保障您的账户和资金安全以及符合国家法律法规及监管规定</text
>
<view>
<text
>1.
依据法律法规及监管规定进行实名制管理在您注册互助文档账户或使用互助文档服务时您需提供手机号码或者第三方账号登陆信息作为账户登录名</text
>
</view>
<view>
<text>2. 身份验证</text>
<view>
<text>1登录验证</text>
<text
>为了让您更安全便捷地登录互助文档我们提供自动登陆服务您也可以选择密码登录短信验证码登录等其他方式</text
>
</view>
<view>
<text>2重要操作行为验证</text>
<text
>为了保障您的账户安全在您进行一些重要的账户操作时例如查看收藏下载应用内资料内容时我们需要验证您的身份为此您可能需向第三方安全服务提供商提交身份验证信息如您不同意提供前述信息您将无法完成特定操作但不影响您使用我们提供的其他服务</text
>
</view>
<!-- 省略其他子条款内容以类似方式嵌入 -->
</view>
<!-- 省略其他条款内容以类似方式嵌入 -->
<view>
<text>3. 获取外部存储权限获取设备ID, MAC地址</text>
<text
>获取外部存储权限用于记录登录同意的信息下次登录不用重新选择获取设备IDMAC地址设备ID用于记录用户的唯一性MAC地址获取是用于确定用户是属于真实用户</text
>
<text
>本程序嵌入了百度插移动统计分析sdk百度移动SDK隐私政策说明具体隐私政策准则按百度移动SDK隐私为准</text
>
</view>
<view>
<text>4. 其他</text>
<text
>请您理解我们向您提供的服务是不断更新和发展的如您选择使用了前述说明当中尚未涵盖的其他服务基于该服务我们需要收集您的信息的我们会通过页面提示交互流程协议约定的方式另行向您说明信息收集的范围与目的并征得您的同意我们会按照本政策以及相应的用户协议约定使用存储对外提供及保护您的信息如您选择不提供前述信息您可能无法使用某项或某部分服务但不影响您使用我们提供的其他服务此外第三方主体可能会通过互助文档APP向您提供服务当您进入第三方主体运营的服务页面时请注意相关服务由第三方主体向您提供涉及到第三方主体向您收集个人信息的建议您仔细查看第三方主体的隐私政策或协议约定</text
>
</view>
</view>
<view>
<text>我们如何存储和保护信息</text>
<view>
<text
>1.
我们在中华人民共和国境内收集和产生的个人信息将存储在中华人民共和国境内如部分服务涉及跨境业务我们需要向境外机构传输境内收集的相关个人信息的我们会按照法律法规和相关监管部门的规定执行向您说明个人信息出境的目的以及涉及的个人信息类型征得您的同意并通过签订协议现场核查等有效措施要求境外机构为所获得的您的个人信息保密我们仅在本政策所述目的所必需期间和法律法规及监管规定的时限内保存您的个人信息</text
>
</view>
<view>
<text
>2.
为了保障您的信息安全我们在收集您的信息后将采取各种合理必要的措施保护您的信息例如在技术开发环境当中我们仅使用经过去标识化处理的信息进行统计分析对外提供研究报告时我们将对报告中所包含的信息进行去标识化处理我们会将去标识化后的信息与可用于恢复识别个人的信息分开存储确保在针对去标识化信息的后续处理中不重新识别个人</text
>
</view>
<view>
<text
>3.
我们承诺我们将使信息安全保护达到业界领先的安全水平为保障您的信息安全我们致力于使用各种安全技术及配套的管理体系来尽量降低您的信息被泄露毁损误用非授权访问非授权披露和更改的风险例如通过网络安全层软件SSL进行加密传输信息加密存储严格限制数据中心的访问传输和存储个人敏感信息时我们将采用加密权限控制去标识化等安全措施</text
>
</view>
<view>
<text
>4.
请您务必妥善保管好您的互助文档登录名及其他身份要素您在使用互助文档服务时我们会通过您的登录名及其他身份要素来识别您的身份一旦您泄漏了前述信息您可能会蒙受损失并可能对您产生不利如您发现互助文档登录名及/或其他身份要素可能或已经泄露时请您立即和我们取得联系以便我们及时采取相应措施以避免或降低相关损失</text
>
</view>
<view>
<text
>5.
在您终止使用互助文档服务后我们会停止对您的信息的收集和使用法律法规或监管部门另有规定的除外如我们停止运营我们将及时停止收集您个人信息的活动将停止运营的通知以逐一送达或公告的形式通知您并对所持有的您的个人信息进行删除或匿名化处理</text
>
</view>
</view>
</view>
</view>
</scroll-view>
</u-popup>
</view>
</template>
<script>
import { setToken, setUser } from "@/utils/auth.js";
import en from "@/utils/key.js";
export default {
options: {
styleIsolation: "shared", // 解除样式隔离
},
data() {
return {
loading: false,
privatyShow: false,
showAgreement: false,
formData: {
loginName: "",
pwd: "",
},
rules: {
loginName: [
{
required: true,
message: "请输入账号",
trigger: ["blur", "change"],
},
],
pwd: [
{
required: true,
message: "请输入密码",
trigger: ["blur", "change"],
},
],
},
};
},
methods: {
changeCheck(e) {
if (e.detail.value.length > 0) {
this.showAgreement = true;
} else {
this.showAgreement = false;
}
},
getPhoneNumber(data) {
// 获取手机号
//debugger;
if (!this.showAgreement) {
uni.showToast({
title: "请先勾选用户协议",
icon: "none",
duration: 1500,
});
return;
}
const _this = this;
if (!data.detail.errno) {
this.loading = true;
wx.login({
success: function (resp) {
console.log(resp);
//var userInfo = res.userInfo;
_this.$api.login
.loginByPhoneForDriver({
phoneCode: data.detail.code,
sessionCode: resp.code,
})
.then((res) => {
const result = res;
_this.loading = false;
setToken(result.token);
_this.getUserMenu();
setUser(result.userInfo);
uni.switchTab({
url: "/pages/index/index",
});
})
.catch((errors) => {
_this.loading = false;
});
},
});
}
},
async getUserMenu() {
await this.$api.login
.getUserMenu()
.then((res) => {
console.log(res);
this.$store.dispatch("setResources", res);
})
.catch((err) => {
console.log("error");
});
},
submit() {
if (!this.showAgreement) {
uni.showToast({
title: "请先勾选用户协议",
icon: "none",
duration: 1500,
});
return;
}
this.$refs.uForm.validate().then(() => {
const nPwd = en.encrypt(this.formData.pwd);
this.loading = true;
const _this = this;
wx.login({
success: function (resp) {
console.log(resp);
//var userInfo = res.userInfo;
_this.$api.login
.loginUser({
loginName: _this.formData.loginName,
pwd: nPwd,
})
.then((res) => {
const result = res;
_this.loading = false;
setToken(result.token);
setUser(result.userInfo);
_this.getUserMenu();
setTimeout(() => {
uni.switchTab({
url: "/pages/index/index",
});
}, 500);
})
.catch((errors) => {
_this.loading = false;
});
},
});
});
},
},
onReady() {
try {
//如果需要兼容微信小程序并且校验规则中含有方法等只能通过setRules方法设置规则。
this.$refs.uForm.setRules(this.rules);
} catch (e) {}
},
};
</script>
<style lang="less" scoped>
/deep/ .u-input--circle {
background-color: #f5f6fa !important;
padding-left: 20px !important;
}
/deep/ .u-button {
border: none !important;
color: #017043;
margin-top: 10rpx;
width: auto;
}
.content {
padding: 10px;
}
.checkbox {
display: flex;
font-size: 28rpx;
.label {
display: flex;
padding-top: 5rpx;
flex-wrap: wrap;
}
.text_link {
color: #4a47e0;
}
}
/deep/ .wx-checkbox-input {
width: 36rpx !important;
height: 36rpx !important;
}
.login-btn {
display: flex;
flex-direction: column;
justify-content: center;
text-align: center;
padding: 0 80rpx;
.wexin-but {
// width: 80%;
margin-top: 40rpx;
padding: 0rpx 122rpx;
border-radius: 50rpx;
box-sizing: border-box;
background-color: #017043;
color: white;
font-size: 38rpx;
}
}
</style>