Prechádzať zdrojové kódy

修改:增加隐私政策,修改入会跳转

littleblue55 3 dní pred
rodič
commit
741b1ff543

+ 33 - 0
api/user.js

@@ -85,3 +85,36 @@ export function updateIcon(data) {
 		'data': data
 	})
 }
+
+
+export function getPrivacyAgree(){
+	return request({
+		url: '/privacy',
+		headers: {
+			isToken: false
+		},
+		'method': 'get'
+	})
+}
+
+export function getUserAgree(){
+	return request({
+		url: '/userManual',
+		headers: {
+			isToken: false
+		},
+		'method': 'get'
+	})
+}
+
+
+export function getCancelAgree(){
+	return request({
+		url: '/cancelRule',
+		headers: {
+			isToken: false
+		},
+		'method': 'get'
+	})
+}
+

+ 11 - 0
pages.json

@@ -542,6 +542,17 @@
 					"titleNView": false
 				}
 			}
+		},
+		{
+			"path" : "pages/agreement/privacyAgree/privacyAgree",
+			"style": {
+				"navigationBarBackgroundColor": "#FFFFFF",
+				"navigationBarTitleText": "小程序政策",
+				"enablePullDownRefresh": false,
+				"app-plus": {
+					"titleNView": false
+				}
+			}
 		}
 	],
 	"globalStyle": {

+ 74 - 0
pages/agreement/privacyAgree/privacyAgree.vue

@@ -0,0 +1,74 @@
+<template>
+	<view>
+		<view class="agree-content" v-html="html"></view>
+	</view>
+</template>
+
+<script>
+	import { getPrivacyAgree, getUserAgree, getCancelAgree } from '@/api/user.js'
+	export default {
+		data() {
+			return {
+				html: '隐私政策'
+			}
+		},
+		methods: {
+			init(mode){
+				if(mode==="privacy"){
+					getPrivacyAgree().then(res=>{
+						uni.setNavigationBarTitle({
+							title: "小程序隐私政策"
+						})
+						this.html = res.data.content
+					})
+				}else if(mode==='user'){
+					uni.setNavigationBarTitle({
+						title: "小程序用户手册"
+					})
+					getUserAgree().then(res=>{
+						this.html = res.data.content
+					})
+				}else if(mode==='cancel'){
+					uni.setNavigationBarTitle({
+						title: "会员中心小程序账号注销通知"
+					})
+					getCancelAgree().then(res=>{
+						this.html = res.data.content
+					})
+				}
+			}
+		},
+		onLoad(options) {
+			let { mode } = options
+			this.init(mode)
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.agree-title{
+	text-align: center;
+	font-size: 35rpx;
+	font-weight: bold;
+	line-height: 60rpx;
+}
+.agree-content {
+	padding: 30rpx;
+	margin-bottom: 20rpx;
+	.content-text{
+		display: block;
+		text-indent: 2em;
+		line-height: 60rpx;
+	}
+}
+.agree-name{
+	padding: 30rpx;
+	margin-bottom: 20rpx;
+	.name-text{
+		text-align: right;
+		display: block;
+		// text-indent: 2em;
+		line-height: 60rpx;
+	}
+}
+</style>

+ 1 - 1
pages/daiJiaoGeRenHuiFei/daiJiaoGeRenHuiFei.vue

@@ -3,7 +3,7 @@
 		<view class="form-box">
 			<u-form :model="formData.form" ref="formRef" label-width="120" :label-style="{fontWeight: 'bold', fontSize: '26rpx'}">
 				<u-form-item label="姓名" prop="name"><u-input v-model="formData.form.name" :border="true"  type="text" placeholder="请输入缴交对象姓名" placeholder-style="font-size: 22rpx;"/></u-form-item>
-				<u-form-item label="证件号码" prop="idNumber"><u-input v-model="formData.form.idNumber" :border="true" type="text" placeholder="请输入缴交对象的身份证号/手机号/业务水平认证证书编号" placeholder-style="font-size: 22rpx;"/></u-form-item>
+				<u-form-item label="证件号码" prop="idNumber"><u-input v-model="formData.form.idNumber" :border="true" type="text" placeholder="请输入缴交对象的身份证号/手机号/业务水平证书编号" placeholder-style="font-size: 22rpx;"/></u-form-item>
 			</u-form>
 		</view>
 		<view class="desc-box">

+ 1 - 1
pages/goOnEdu/course/courseDetail/component/courseDesc/courseDesc.vue

@@ -55,7 +55,7 @@
 	
 	const toJoin = () =>{
 		uni.navigateTo({
-			url: '/pages/joinClub/joinClub'
+			url: "/pages/swiperDetail/swiperDetail?id=12117"
 		})
 	}
 	// const content = ref("<p>20名协会成员于10月15adhjshajdhsadsajdakshdjahjkd,骄傲的噶说的话吗,计划的哈手机号,很多看啥看,撒海空军的卡号是,按开机动画就撒开,安达市快点哈尽快,打火机客户打款,收获颇丰。此次活动增进了大家对科技前沿的认识。</p><img src='/static/notice/ditu.jpg' /><img src='/static/notice/ditu.jpg' /><img src='/static/notice/ditu.jpg' /><img src='/static/notice/ditu.jpg' />")

+ 16 - 11
pages/goOnEdu/course/courseDetail/courseDetail.vue

@@ -1,6 +1,6 @@
 <template>
 	<view>
-		<view v-if="!loginShow" class="container" :style="{ height : `${loginShow ? '100vh' : 'auto' }`, 
+		<view v-if="!loginShow" class="container" :style="{ height : `${loginShow ? '100vh' : 'auto' }`,
 		overflow: `${loginShow ? 'hidden' : 'auto' }` }">
 			<view class="container-poster" style="width: 100%;padding: 0 20rpx;">
 				<channel-live v-if="feedShow" :feed-id="feedId" :finder-user-name="finderId"></channel-live>
@@ -14,7 +14,7 @@
 				</view>
 			</view>
 			<view class="content" v-if="currentTab === 0" style="overflow: hidden;">
-				<view class="content-text" 
+				<view class="content-text"
 				:style="{
 					marginBottom: `${videoShow?'140rpx':'0'}`,
 					paddingBottom: `${videoShow?'150rpx':'0'}`
@@ -28,7 +28,7 @@
 					<view class="text-title">培训地点</view>
 					<view class="text-content">{{courseDetail.loc}}</view>
 					<view class="text-title" style="color: red;font-weight: 500;font-size: 30rpx;">如需取消报名,请联系教育培训部工作人员13332876414/13302262603</view>
-					<view class="text-tip" v-if="!isMember && courseDetail.viewMode === '2'">个人会员或单位会员免费,点击现在入会></view>
+					<view class="text-tip" v-if="!isMember && courseDetail.viewMode === '2'" @click="toJoin">个人会员或单位会员免费,点击现在入会></view>
 					<view style="width: 100%;height: 200rpx;"></view>
 				</view>
 				<view class="section-bottom-fixed" @click="toVideo" v-show="videoShow">
@@ -145,14 +145,19 @@
 			}
 		}
 	}
+	const toJoin = () =>{
+		uni.navigateTo({
+			url: "/pages/swiperDetail/swiperDetail?id=12117"
+		})
+	}
 	// 初始化
 	function init(id) {
 		loadCourseDetail(id).then(res => {
 			if (res?.data) {
 				courseDetail.value = res.data;
 				showBuy.value = showBuyAction()
-				if(courseDetail.value.regType === '1' 
-				&& (courseDetail.value.status === '2' || 
+				if(courseDetail.value.regType === '1'
+				&& (courseDetail.value.status === '2' ||
 				courseDetail.value.status === '3')){
 					// console.log(123456)
 					getVideo()
@@ -286,7 +291,7 @@
 	function formatDateS(dateStr) {
 		return dateStr.replace(" ", "T");
 	}
-	
+
 	// 日期格式:xxxx年xx月xx日(星期x)
 	function getDateWeek(dateStr) {
 		console.log(dateStr,"dateStr")
@@ -352,8 +357,8 @@
 			imageUrl: courseDetail.value.cover
 		};
 	})
-	
-	
+
+
 	// 线上-点击预约-跳转预告
 	function toVideo(){
 		wx.getChannelsLiveNoticeInfo({
@@ -422,7 +427,7 @@
 	})
 	// 线下课程-是否显示报名按钮
 	const regShow = computed(()=>{
-		// regType = 0 是线上课程 
+		// regType = 0 是线上课程
 		// 缺少判断是否购买
 		if(courseDetail.value?.status === '2' || courseDetail.value?.status === '3' ){
 			return false
@@ -443,7 +448,7 @@
 					init(courseId.value)
 				}
 			})
-			return 
+			return
 		}
 		uni.navigateTo({
 			url: "/pages/goOnEdu/course/courseDetail/courseOrder?id=" + courseId.value
@@ -604,4 +609,4 @@
 			}
 		}
 	}
-</style>
+</style>

+ 1 - 1
pages/goOnEdu/course/courseDetail/coursePay.vue

@@ -23,7 +23,7 @@
 	const isMember = ref(null)
 	const toJoin = () =>{
 		uni.navigateTo({
-			url: '/pages/joinClub/joinClub'
+			url: "/pages/swiperDetail/swiperDetail?id=12117"
 		})
 	}
 	const courseId = ref("");

+ 30 - 16
pages/index/index.vue

@@ -7,13 +7,9 @@
 		</u-navbar>
 		<!-- <u-link href="http://www.uviewui.com">蜀道难,难于上青天</u-link> -->
 		<view class="page-content">
-			<swiper class="swiper"
-			autoplay
-			:interval="5000"
-			:duration="500"
-			circular indicator-dots style="border-radius: 20rpx;overflow: hidden;height: 200px">
-				<swiper-item v-for="(data, index) in swiperList"
-				style="width: 100%;height: 100%;" :key="index">
+			<swiper class="swiper" autoplay :interval="5000" :duration="500" circular indicator-dots
+				style="border-radius: 20rpx;overflow: hidden;height: 200px">
+				<swiper-item v-for="(data, index) in swiperList" style="width: 100%;height: 100%;" :key="index">
 					<view class="swiper-item" style="width: 100%;height: 100%;" @click="itemClick(data)">
 						<image :src="data.imgUrl" mode="aspectFill" style="width: 100%;height: 100%;"></image>
 					</view>
@@ -128,8 +124,7 @@
 	import {
 		onReady,
 		onLoad,
-		onShow,
-		onShareAppMessage
+		onShow
 	} from '@dcloudio/uni-app'
 	import {
 		useAuthStore
@@ -152,7 +147,10 @@
 	import {
 		useTabbarStore
 	} from '@/store/tabbarStore.js'
-import { msg, msgSuccess } from '../../utils/common'
+	import {
+		msg,
+		msgSuccess
+	} from '../../utils/common'
 	const tabbarStore = useTabbarStore()
 	// 底部导航栏数据
 	const tabbarList = computed(() => {
@@ -281,7 +279,6 @@ import { msg, msgSuccess } from '../../utils/common'
 			otherAppId: '其他小程序的appid'
 		}
 	])
-
 	const reportList = ref([])
 	// 跳转页面
 	const jumpToPage = (data) => {
@@ -438,12 +435,29 @@ import { msg, msgSuccess } from '../../utils/common'
 		})
 	})
 	// 测试
-	// onShareAppMessage(async (res) => {
-	// 	// console.log(processedImage)
+	// onShareAppMessage(() => {
+	// 	const imageUrl = 'https://www.gzrea.org.cn/upload/news/2025/07/06b20b86fe90188a86405a1b77e75c306cdfb722832fb569.jpg'
+
+	// 	console.log('分享图片路径:', imageUrl);
+	// 	uni.getImageInfo({
+	// 		src: imageUrl,
+	// 		success: (res) => {
+	// 			console.log('图片:', res);
+	// 		},
+	// 		fail: (err) => {
+	// 			console.error('图片加载失败:', err);
+	// 		}
+	// 	})
 	// 	return {
 	// 		title: 'fenxiang',
-	// 		path: `/pages/index/index`,
-	// 		imageUrl: 'https://www.gzrea.org.cn/upload/news/2025/07/08b94d42b95bed40c987fe252852ba348ace99348105088a.jpg'
+	// 		path: '/pages/index/index',
+	// 		imageUrl: 'https://www.gzrea.org.cn/upload/news/2025/07/06b20b86fe90188a86405a1b77e75c306cdfb722832fb569.jpg',
+	// 		success(res) {
+	// 			console.log('分享成功:', res);
+	// 		},
+	// 		fail(err) {
+	// 			console.error('分享失败:', err);
+	// 		}
 	// 	};
 	// })
 	onLoad(() => {
@@ -460,7 +474,7 @@ import { msg, msgSuccess } from '../../utils/common'
 			// 登录后才请求消息数量
 			getCharCount()
 			initReport()
-			if(!jlrzsUrl.value){
+			if (!jlrzsUrl.value) {
 				loadUrl()
 			}
 			// 没有用户信息就加载一边

+ 16 - 4
pages/login/login.vue

@@ -54,7 +54,10 @@
 			</view>
 			<view class="app-user-book  mb-30">
 				<u-checkbox-group style="display: flex;justify-content: center;">
-					<u-checkbox v-model="userBook" name="yes" shape="circle">我已阅读&#x300A;用户手册&#x300B;及隐私政策</u-checkbox>
+					<u-checkbox v-model="userBook" name="yes" shape="circle" labelDisabled>
+						我已阅读<text @click="toPrivacyAgree('user')">&#x300A;用户手册&#x300B;
+						</text>及<text @click="toPrivacyAgree('privacy')">隐私政策</text>
+					</u-checkbox>
 				</u-checkbox-group>
 			</view>
 			<u-divider bg-color="transparent" margin-bottom="30" color="#010101" border-color="#010101"
@@ -95,14 +98,18 @@
 			:title-style="{fontWeight: 'bold'}" @confirm="confirmModal">
 			<view class="modal-content">
 				为了更好地保障你的合法权益,进行下一步前,请阅读并同意
-				<text class="content-a">&#x300A;用户手册&#x300B;及隐私政策</text>
+				<text class="content-a" @click="toPrivacyAgree('user')">&#x300A;用户手册&#x300B;</text>
+				及
+				<text class="content-a" @click="toPrivacyAgree('privacy')">&#x300A;隐私政策&#x300B;</text>
 			</view>
 		</u-modal>
 		<u-modal v-model="weixinUserBookModal" mask-close-able class="modal" show-cancel-button
 			:title-style="{fontWeight: 'bold'}" @confirm="confirmModalWeixin">
 			<view class="modal-content">
 				为了更好地保障你的合法权益,进行下一步前,请阅读并同意
-				<text class="content-a">&#x300A;用户手册&#x300B;及隐私政策</text>
+				<text class="content-a" @click="toPrivacyAgree('user')">&#x300A;用户手册&#x300B;</text>
+				及
+				<text class="content-a" @click="toPrivacyAgree('privacy')">&#x300A;隐私政策&#x300B;</text>
 			</view>
 		</u-modal>
 	</view>
@@ -165,6 +172,11 @@
 			}
 		},
 		methods: {
+			toPrivacyAgree(mode){
+				uni.navigateTo({
+					url: "/pages/agreement/privacyAgree/privacyAgree?mode="+ mode
+				})
+			},
 			// 检查用户手册是否勾选
 			checkUserBook() {
 				if (!this.userBook) {
@@ -458,7 +470,7 @@
 					}catch(err){
 						console.log("ee", err)
 					}
-					
+
 					// 将 encryptedData 和 iv 发送到后端进行解密
 				} else {
 					msg('取消授权手机号');

+ 1 - 1
pages/reportDetail/reportDetail.vue

@@ -245,7 +245,7 @@
 
 	const toJoin = () => {
 		uni.navigateTo({
-			url: '/pages/joinClub/joinClub'
+			url: "/pages/swiperDetail/swiperDetail?id=12117"
 		})
 	}
 

+ 26 - 18
pages/setting/cancelAccount/cancelAccount.vue

@@ -2,7 +2,7 @@
 	<view class="container">
 		<view class="desc-box">
 			<view class="desc-text">您正在申请广州市房地产中介协会会员中心小程序账户注销,为保障您的权益,我们再次提醒您:</view>
-			<view class="desc-text">1、注销申请一旦提交,将无法撤销,且系统可能无法恢复相关数据,请您务必谨慎操作!我们将在您申请注销账号起15个工作日内完成与该账号相关的数据处理工作。</view>
+			<view class="desc-text">1、您的账号可能绑定了信用信息卡信息、业务水平证书信息、会费缴交记录等重要数据,一旦注销系统将无法恢复相关数据,请您务必谨慎操作!我们将在您申请注销账号起7个工作日内完成与该账号相关的数据处理工作。</view>
 			<view class="desc-text">2、账号注销7个工作日内,您无法通过相同手机号或身份证重新注册/登录广州市房地产中介协会会员中心小程序账号。</view>
 			<view class="desc-text">3、如您在注销账号的过程中遇到任何问题,请拨打协会客服热线(020-66676400)与我们取得联系。</view>
 		</view>
@@ -25,7 +25,11 @@
 		</view>
 		<view class="bottom-box">
 			<u-checkbox-group style="display: flex;justify-content: center;margin-bottom: 20rpx;">
-				<u-checkbox v-model="cancelCheck" name="yes" shape="circle" label-size="26">我已阅读并同意&#x300A;会员中心小程序账号注销通知&#x300B;</u-checkbox>
+				<u-checkbox v-model="cancelCheck" name="yes" shape="circle" label-size="26" :labelDisabled="true">
+					<view>我已阅读并同意
+					<text @click="toCancelAgree">&#x300A;会员中心小程序账号注销通知&#x300B;</text>
+					</view>
+				</u-checkbox>
 			</u-checkbox-group>
 			<u-button type="primary" shape="circle" @click="onSubmit">提交</u-button>
 		</view>
@@ -41,9 +45,9 @@
 		smsSend
 	} from "@/api/login.js"
 	import { unregister } from '@/api/setting.js'
-	
+
 	const authStore = useAuthStore()
-	
+
 	const formRef = ref()
 	const formData = reactive({
 		form: {
@@ -53,18 +57,18 @@
 		},
 		rules: {
 			phone: [
-				{ 
-					required: true, 
-					message: '请输入绑定手机号', 
-					// 可以单个或者同时写两个触发验证方式 
+				{
+					required: true,
+					message: '请输入绑定手机号',
+					// 可以单个或者同时写两个触发验证方式
 					trigger: 'blur',
 				}
 			],
 			code: [
-				{ 
-					required: true, 
-					message: '请输入验证码', 
-					// 可以单个或者同时写两个触发验证方式 
+				{
+					required: true,
+					message: '请输入验证码',
+					// 可以单个或者同时写两个触发验证方式
 					trigger: 'blur',
 				}
 			],
@@ -102,7 +106,7 @@
 			msg('倒计时结束后再发送');
 		}
 	}
-	
+
 	function onSubmit() {
 		formRef.value.validate((valid) => {
 			if (valid) {
@@ -135,7 +139,11 @@
 			}
 		})
 	}
-	
+	function toCancelAgree(){
+		uni.navigateTo({
+			url: "/pages/agreement/privacyAgree/privacyAgree?mode=cancel"
+		})
+	}
 	onReady(() => {
 		formRef.value.setRules(formData.rules)
 	})
@@ -150,7 +158,7 @@
 		width: 100vw;
 		background-color: $uni-bg-color;
 		padding: 20rpx;
-		
+
 		.desc-box {
 			padding: 20rpx 0;
 			margin-bottom: 20rpx;
@@ -162,10 +170,10 @@
 				}
 			}
 		}
-		
+
 		.form-box {
 			padding: 20rpx 0;
-			
+
 			.input-code {
 				display: flex;
 				align-items: center;
@@ -184,4 +192,4 @@
 			padding: 0 50rpx;
 		}
 	}
-</style>
+</style>

+ 18 - 13
pages/setting/removeInfo/removeInfo.vue

@@ -8,9 +8,9 @@
 				<u-checkbox
 				icon-size="42"
 				label-size="38"
-					v-model="item.checked" 
-					v-for="(item, index) in checkOption" :key="index" 
-					:name="item.name"
+				v-model="item.checked"
+				v-for="(item, index) in checkOption" :key="index"
+				:name="item.name"
 				>{{item.name}}</u-checkbox>
 			</u-checkbox-group>
 		</view>
@@ -25,7 +25,7 @@
 	import { onLoad, onReady } from '@dcloudio/uni-app'
 	import { msgError, msgSuccess, showConfirm } from '@/utils/common'
 	import { removeInfo } from '@/api/setting.js'
-	
+
 	const checkOption = ref([
 		{
 			value: 1,
@@ -64,15 +64,15 @@
 			disabled: false
 		},
 	])
-	
+
 	const isSelect = computed(() => {
 		return checkOption.value.filter(item => item.checked).length === 0
 	})
-	
+
 	function checkboxGroupChange() {
-		
+
 	}
-	
+
 	function onSubmit() {
 		showConfirm('是否确认删除').then(res => {
 		 	if (res.confirm) {
@@ -94,25 +94,30 @@
 		})
 	}
 </script>
-
+<style>
+	.u-checkbox{
+		line-height: 2.2 !important;
+		padding: 0 20rpx;
+	}
+</style>
 <style lang="scss" scoped>
 	.container {
 		height: 100vh;
 		width: 100vw;
 		background-color: $uni-bg-color;
 		padding: 20rpx;
-		
+
 		.desc-box {
 			text-indent: 2em;
 			line-height: 60rpx;
 			padding: 20rpx 0;
 			margin-bottom: 20rpx;
 		}
-		
+
 		.form-box {
 			padding: 20rpx 0;
 			line-height: 2.8;
-			
+
 			.input-code {
 				display: flex;
 				align-items: center;
@@ -131,4 +136,4 @@
 			padding: 0 50rpx;
 		}
 	}
-</style>
+</style>