Bladeren bron

feat: add privacy policy page and implement agreement checkbox in login form

Yannay 4 dagen geleden
bovenliggende
commit
1841416a7d
3 gewijzigde bestanden met toevoegingen van 187 en 1 verwijderingen
  1. 8 0
      pages.json
  2. 51 1
      pages/login/index.vue
  3. 128 0
      pages/privacy/index.vue

+ 8 - 0
pages.json

@@ -19,6 +19,14 @@
19 19
 			}
20 20
 		},
21 21
 		{
22
+			"path": "pages/privacy/index",
23
+			"style": {
24
+				"navigationBarTitleText": "隐私政策",
25
+				"enablePullDownRefresh": false,
26
+				"navigationStyle": "custom"
27
+			}
28
+		},
29
+		{
22 30
 			"path": "pages/configuration/index",
23 31
 			"style": {
24 32
 				"navigationBarTitleText": "",

+ 51 - 1
pages/login/index.vue

@@ -18,6 +18,15 @@
18 18
 							<u-checkbox :label="'记住密码'" :name="'remember'"></u-checkbox>
19 19
 						</u-checkbox-group>
20 20
 					</u-form-item>
21
+					<u-form-item label="" prop="agreePrivacy" class="inputFormWrap agree_form_item">
22
+						<view class="agree_row">
23
+							<u-checkbox-group v-model="agreePrivacyList" placement="row" @change="onAgreeChange">
24
+								<u-checkbox :name="'agree'"></u-checkbox>
25
+							</u-checkbox-group>
26
+							<text class="agree_text">我已阅读并同意</text>
27
+							<text class="agree_link" @click="toPrivacy">《隐私政策》</text>
28
+						</view>
29
+					</u-form-item>
21 30
 					<u-form-item>
22 31
 						<u-button type="primary" text="登录" shape="circle" @click="handleLogin"></u-button>
23 32
 					</u-form-item>
@@ -55,9 +64,11 @@
55 64
 					clientFlag: "2",
56 65
 					// username: "huihui",
57 66
 					code: "996007qa.code",
58
-					uuid: "123"
67
+					uuid: "123",
68
+					agreePrivacy: false
59 69
 				},
60 70
 				checkboxs: [],
71
+				agreePrivacyList: [],
61 72
 				rules: {
62 73
 					username: {
63 74
 						type: 'string',
@@ -70,6 +81,18 @@
70 81
 						required: true,
71 82
 						message: '请输入密码',
72 83
 						trigger: []
84
+					},
85
+					agreePrivacy: {
86
+						required: true,
87
+						message: '请阅读并同意《隐私政策》',
88
+						trigger: [],
89
+						validator: (rule, value, callback) => {
90
+							if (this.form.agreePrivacy === true) {
91
+								callback();
92
+							} else {
93
+								callback(new Error('请阅读并同意《隐私政策》'));
94
+							}
95
+						}
73 96
 					}
74 97
 				},
75 98
 				// mac: getMacAddress(),
@@ -98,6 +121,12 @@
98 121
 			this.firstLoginState = shiYuWxLogin;
99 122
 		},
100 123
 		methods: {
124
+			onAgreeChange(list) {
125
+				this.form.agreePrivacy = (list || []).indexOf('agree') >= 0;
126
+			},
127
+			toPrivacy() {
128
+				uni.navigateTo({ url: '/pages/privacy/index' });
129
+			},
101 130
 			changeRemember(value){
102 131
 				if (value.length > 0) {
103 132
 					uni.setStorageSync('username', this.form.username);
@@ -323,6 +352,27 @@
323 352
 		}
324 353
 	}
325 354
 
355
+	.agree_form_item {
356
+		::v-deep .u-form-item__body__right {
357
+			flex: 1;
358
+		}
359
+	}
360
+	.agree_row {
361
+		display: flex;
362
+		align-items: center;
363
+		flex-wrap: wrap;
364
+	}
365
+	.agree_text {
366
+		font-size: 26rpx;
367
+		color: #606266;
368
+		margin-left: 8rpx;
369
+	}
370
+	.agree_link {
371
+		font-size: 26rpx;
372
+		color: #108cff;
373
+		margin-left: 4rpx;
374
+	}
375
+
326 376
 	.max {
327 377
 		width: 500rpx;
328 378
 		height: 500rpx;

+ 128 - 0
pages/privacy/index.vue

@@ -0,0 +1,128 @@
1
+<template>
2
+	<view class="privacy_wrap">
3
+		<u-navbar title="隐私政策" :autoBack="true" :placeholder="true" v-hideNav></u-navbar>
4
+		<scroll-view scroll-y class="privacy_content">
5
+			<view class="privacy_body">
6
+				<!-- 一、隐私政策导言 -->
7
+				<view class="section">
8
+					<text class="section_title">一、隐私政策导言</text>
9
+					<text class="section_text">本应用由【小葫芦(深圳)互联网有限公司】(以下简称“我们”)运营。</text>
10
+					<text class="section_text">本隐私政策适用于【小葫芦CRM系统】及其相关客户端、网页、小程序等全部产品与服务。请您在使用我们的产品与服务前仔细阅读并理解本政策。</text>
11
+				</view>
12
+				<!-- 二、我们如何收集和使用您的个人信息 -->
13
+				<view class="section">
14
+					<text class="section_title">二、我们如何收集和使用您的个人信息</text>
15
+					<text class="section_text">我们仅会出于以下目的、在对应业务功能中收集以下类型的个人信息,且以下类型中标注为“必需”的为特定业务功能所必需,未提供将无法使用该功能。</text>
16
+					<text class="section_text p">1. 账号注册与登录:收集您的手机号码、账号名称、密码(加密存储),用于创建账号与身份验证。其中手机号码、密码为必需。</text>
17
+					<text class="section_text p">2. 客户关系管理及业务跟进:收集您的姓名、电话号码、工作单位/公司名称、职位、电子邮箱、沟通记录,用于线索管理、跟进记录与合同/订单相关服务。其中姓名、电话号码为开展上述业务所必需。</text>
18
+					<text class="section_text p">3. 设备与日志信息:收集设备型号、操作系统版本、唯一设备标识符、IP 地址、应用内操作日志,用于保障账号安全、排查故障与改进服务。此类信息为服务安全与运行所必需。</text>
19
+					<text class="section_text p">【若收集身份证、护照、驾照等法定证件或个人生物识别信息】我们会在收集前单独提醒您此次收集涉及的信息类型,并明确说明处理目的与规则,仅在您同意后收集。</text>
20
+					<text class="section_text p">个人信息涉及的地理区域:我们将在中华人民共和国境内对您的个人信息进行存储与备份;如存在跨境传输,我们会单独列出并取得您的同意。</text>
21
+					<text class="section_text p">保留期限:账号存续期间我们持续保留为提供服务所必需的信息;日志类信息保留【1】年;【其他类型请按实际填写】。您注销账号后,我们将在【30】日内删除或匿名化您的个人信息。若确需改变收集与使用的目的,我们会再次征得您的同意。</text>
22
+				</view>
23
+				<!-- 三、我们如何使用 Cookie 和同类技术 -->
24
+				<!-- <view class="section">
25
+					<text class="section_title">三、我们如何使用 Cookie 和同类技术</text>
26
+					<text class="section_text">我们及授权第三方可能使用 Cookie、本地存储器、脚本、Web 信标等自动数据收集工具,用于登录状态保持、安全验证、统计与优化体验。</text>
27
+					<text class="section_text p">您可通过浏览器或设备设置限制、清除 Cookie 及本地存储,或通过应用内“隐私设置”关闭部分非必需收集。具体操作路径:【请根据实际产品补充,如:设置-隐私-清除缓存/关闭统计】。关闭后可能影响部分功能使用。</text>
28
+				</view> -->
29
+				<!-- 四、我们如何共享、转让、公开披露用户的个人信息 -->
30
+				<view class="section">
31
+					<text class="section_title">四、我们如何共享、转让、公开披露您的个人信息</text>
32
+					<text class="section_text">共享与转让:我们不会与第三方共享或转让您的个人信息,除非(1)事先获得您的同意;(2)根据法律法规或政府、司法机关要求;(3)与我们的关联公司、授权服务商共享(如云存储、客服系统),且我们仅会共享业务所必需的信息,并通过协议约束其保护义务与使用目的。</text>
33
+					<text class="section_text p">公开披露:我们不会公开披露您的个人信息,除非获得您的明确同意或基于法律强制要求。若因法律要求需披露,我们会尽可能提前告知并限定披露范围。</text>
34
+					<text class="section_text p">未经您同意的例外情形:响应执法机关、政府机构依法提出的要求;进行个人信息安全审计;为保护您或他人人身、财产安全所必需等法律法规规定的情形。</text>
35
+					<text class="section_text p">【若为平台类服务】您在上传、交流、发布信息时,可能被其他用户或第三方看到。请谨慎发布敏感信息,我们会对平台内信息采取【请填写具体安全措施】以降低风险。</text>
36
+				</view>
37
+				<!-- 五、我们如何保护您的信息 -->
38
+				<view class="section">
39
+					<text class="section_title">五、我们如何保护您的信息</text>
40
+					<text class="section_text">我们采取数据加密、访问控制、安全审计、权限最小化等技术与管理措施保护您的个人信息,对传输与存储环节进行加密,并建立保留与删除机制。</text>
41
+					<text class="section_text p">我们遵循《中华人民共和国个人信息保护法》等国内相关法律法规。</text>
42
+					<text class="section_text p">请您妥善保管账号与密码,勿向他人泄露。提供个人信息即表示您知悉可能存在被非法获取、篡改或泄露的风险,我们将尽力降低该风险。若发生个人信息安全事件,我们将依法承担相应责任,并会及时通过应用内通知、短信等方式告知您事件概况与应对建议。</text>
43
+				</view>
44
+				<!-- 六、信息的存储 -->
45
+				<view class="section">
46
+					<text class="section_title">六、信息的存储</text>
47
+					<text class="section_text">您的个人信息将存储在中华人民共和国境内。存储期限见本政策第二条“保留期限”部分。法律法规另有要求或您另行同意的,从其规定。</text>
48
+				</view>
49
+				<!-- 七、您如何管理个人信息 -->
50
+				<view class="section">
51
+					<text class="section_title">七、您如何管理您的个人信息(用户权利)</text>
52
+					<text class="section_text">您享有以下权利:查询、更正、补充您的个人信息;删除您的个人信息(法律法规另有规定的除外);撤回同意;注销账号;获取您的个人信息副本等。</text>
53
+					<text class="section_text p">操作方式:您可通过【应用内“我的”-“账号与安全”/“隐私设置”】进行访问、更正、删除及撤回同意;注销账号可通过【请填写具体路径,如:设置-账号与安全-注销账号】或联系客服办理。</text>
54
+					<text class="section_text p">我们将在收到您请求后【30】个工作日内响应;如需较长时间,我们会告知原因与预计时间。如需验证身份,我们会通过【请填写方式】进行验证并采取措施保护验证过程中的信息安全。若我们拒绝您的请求,会说明理由与依据。</text>
55
+				</view>
56
+				<!-- 八、未成年人保护 -->
57
+				<view class="section">
58
+					<text class="section_title">八、未成年人保护</text>
59
+					<text class="section_text">本应用【年龄分级:18+】。若用户为未成年人,我们会在收集其个人信息前取得监护人同意,并仅在不违反法律法规的前提下收集必要信息。监护人有权查阅、更正、删除未成年人个人信息。若发现我们在未获监护人同意的情况下收集了未成年人信息,请通过本政策第九条联系方式告知我们,我们将尽快删除。</text>
60
+				</view>
61
+				<!-- 九、如何联系我们 -->
62
+				<view class="section">
63
+					<text class="section_title">九、如何联系我们</text>
64
+					<text class="section_text">如您对个人信息处理有疑问、投诉或建议,请联系:</text>
65
+					<!-- <text class="section_text p">个人信息安全责任部门:【请填写部门名称】</text> -->
66
+					<text class="section_text p">联系地址:江苏省南京市江宁区天元东路228号莱茵量子国际3楼312办公室</text>
67
+					<!-- <text class="section_text p">电子邮箱:【请填写邮箱】</text> -->
68
+					<text class="section_text p">客服/反馈渠道:13268211521</text>
69
+					<text class="section_text p">我们将在收到反馈后【30】个工作日内回复。</text>
70
+					<!-- <text class="section_text p">若无法协商解决争议,您可向【运营主体】所在地有管辖权的法院提起诉讼,或联系【行业自律协会/政府相关管理机构等,请按实际填写】寻求解决。</text> -->
71
+				</view>
72
+				<!-- 十、隐私政策变更 -->
73
+				<view class="section">
74
+					<text class="section_title">十、隐私政策变更</text>
75
+					<text class="section_text">我们可能适时修订本隐私政策。重大变更时,我们将通过应用内弹窗、推送通知、登录页提示、短信或邮件等方式及时告知您,并再次征得同意(法律法规另有规定除外)。请您定期查阅本页最新版本。若您继续使用我们的服务,即表示接受更新后的政策。</text>
76
+				</view>
77
+			</view>
78
+		</scroll-view>
79
+	</view>
80
+</template>
81
+
82
+<script>
83
+	export default {
84
+		data() {
85
+			return {};
86
+		}
87
+	};
88
+</script>
89
+
90
+<style lang="scss" scoped>
91
+	.privacy_wrap {
92
+		min-height: 100vh;
93
+		background: #fff;
94
+		display: flex;
95
+		flex-direction: column;
96
+	}
97
+
98
+	.privacy_content {
99
+		flex: 1;
100
+		height: calc(100vh - 44px);
101
+	}
102
+
103
+	.privacy_body {
104
+		padding: 24rpx 30rpx 60rpx;
105
+	}
106
+
107
+	.section {
108
+		margin-bottom: 32rpx;
109
+	}
110
+
111
+	.section_title {
112
+		display: block;
113
+		font-size: 30rpx;
114
+		font-weight: 600;
115
+		color: #303133;
116
+		margin-bottom: 16rpx;
117
+	}
118
+
119
+	.section_text {
120
+		display: block;
121
+		font-size: 28rpx;
122
+		color: #606266;
123
+		line-height: 1.6;
124
+	}
125
+	.section_text.p {
126
+		margin-top: 12rpx;
127
+	}
128
+</style>