This commit is contained in:
Zy
2026-08-17 08:25:50 +08:00
12 changed files with 357 additions and 185 deletions

View File

@@ -58,8 +58,8 @@ export const getNoticeList = data => {
// ======故障上报===== // ======故障上报=====
// 获取报修项目 // 获取报修项目
export const getRepairOrder = () => { export const getRepairOrder = (data) => {
return get('/manage/repair/order/list') return get('/manage/repair/order/list',data)
} }
// 提交维修信息 // 提交维修信息
export const addRepairList = data => { export const addRepairList = data => {

View File

@@ -37,7 +37,7 @@ export default function request(url, data = {}, method = 'GET') {
title: '登录过期,请重新登录', title: '登录过期,请重新登录',
icon: 'none' icon: 'none'
}) })
uni.clearStorageSync('token') clearAccountStorage()
setTimeout(() => { setTimeout(() => {
uni.reLaunch({ uni.reLaunch({
url: '/pageSubPack/loginSub/pwd-login' url: '/pageSubPack/loginSub/pwd-login'
@@ -114,6 +114,23 @@ export const upload = (filePath, url, fileName) => {
* @param {Object|null|undefined} params - 原始请求参数 * @param {Object|null|undefined} params - 原始请求参数
* @returns {Object} 过滤后的干净参数对象,只保留有效值 * @returns {Object} 过滤后的干净参数对象,只保留有效值
*/ */
/**
* 清除账号相关缓存(退出登录/切换账号/登录过期时调用)
* 只清除账号绑定的 key,保留设备级和应用级 key(如 push_cid、hasShowGuide、rememberPwd 等)
*/
export function clearAccountStorage() {
const keys = [
'token',
'userId',
'userPermission',
'currentVillage',
'currentVillageId',
'home_banner_cache',
'tempChangePwdParams'
]
keys.forEach(key => uni.removeStorageSync(key))
}
export function filterParams(params) { export function filterParams(params) {
if (!params) return {} if (!params) return {}
return Object.keys(params).reduce((acc, key) => { return Object.keys(params).reduce((acc, key) => {

View File

@@ -54,22 +54,16 @@ const handleMaskClick = () => {
} }
// 打开用户协议 // 打开用户协议
const goToUserAgreement = () => { const goToUserAgreement = () => {
// #ifdef APP-PLUS uni.navigateTo({
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/butler_xieyi.html') url: '/pageSubPack/loginSub/user-agreement'
// #endif })
// #ifdef H5
window.open('https://wuye.ckdzkj.com/parivw/butler_xieyi.html')
// #endif
} }
// 打开隐私政策 // 打开隐私政策
const goToPrivacy = () => { const goToPrivacy = () => {
// #ifdef APP-PLUS uni.navigateTo({
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/butler.html') url: '/pageSubPack/loginSub/privacy'
// #endif })
// #ifdef H5
window.open('https://wuye.ckdzkj.com/parivw/butler.html')
// #endif
} }
</script> </script>

View File

@@ -68,7 +68,7 @@ const selectCategory = (item) => {
// 获取维修项目 // 获取维修项目
const fetchProjectList = async () => { const fetchProjectList = async () => {
try { try {
const res = await getRepairOrder() const res = await getRepairOrder({projectType:0})
if (res.code === 200) { if (res.code === 200) {
const data = res.data || [] const data = res.data || []
// 兼容后端嵌套格式 [{id, name, children: [{id, name}]}] // 兼容后端嵌套格式 [{id, name, children: [{id, name}]}]

View File

@@ -99,6 +99,7 @@
<script setup> <script setup>
import { ref, computed, onUnmounted } from 'vue' import { ref, computed, onUnmounted } from 'vue'
import { getLoginBySms, getSendCode } from '../../api/api.js' import { getLoginBySms, getSendCode } from '../../api/api.js'
import { clearAccountStorage } from '../../api/request.js'
import PrivacyPopup from '@/components/privacy-popup/privacy-popup.vue' import PrivacyPopup from '@/components/privacy-popup/privacy-popup.vue'
import { usePermStore } from '@/stores/usePermStore' import { usePermStore } from '@/stores/usePermStore'
@@ -148,22 +149,16 @@ const toggleAgreement = () => {
} }
// 打开用户协议 // 打开用户协议
const goToUserAgreement = () => { const goToUserAgreement = () => {
// #ifdef APP-PLUS uni.navigateTo({
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/butler_xieyi.html') url: '/pageSubPack/loginSub/user-agreement'
// #endif })
// #ifdef H5
window.open('https://wuye.ckdzkj.com/parivw/butler_xieyi.html')
// #endif
} }
// 打开隐私政策 // 打开隐私政策
const goToPrivacy = () => { const goToPrivacy = () => {
// #ifdef APP-PLUS uni.navigateTo({
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/butler.html') url: '/pageSubPack/loginSub/privacy'
// #endif })
// #ifdef H5
window.open('https://wuye.ckdzkj.com/parivw/butler.html')
// #endif
} }
// 不同意隐私协议 // 不同意隐私协议
@@ -249,6 +244,8 @@ const handleLogin = () => {
cid: push_cid cid: push_cid
} }
permStore.clearPerm() permStore.clearPerm()
// 清除上个账号的所有缓存,防止新账号显示旧数据
clearAccountStorage()
getLoginBySms(params) getLoginBySms(params)
.then(res => { .then(res => {
if (res.code === 200) { if (res.code === 200) {
@@ -259,8 +256,6 @@ const handleLogin = () => {
if (res.data.user.userId) { if (res.data.user.userId) {
uni.setStorageSync('userId', res.data.user.userId) uni.setStorageSync('userId', res.data.user.userId)
} }
// 清掉上次账号的小区缓存,防止新账号显示旧小区
uni.removeStorageSync('currentVillage')
// 存当前绑定的小区ID,0 表示未绑定 // 存当前绑定的小区ID,0 表示未绑定
const currentVillageId = res.data.currentVillageId || 0 const currentVillageId = res.data.currentVillageId || 0
uni.setStorageSync('currentVillageId', currentVillageId) uni.setStorageSync('currentVillageId', currentVillageId)

View File

@@ -1,94 +1,115 @@
<template> <template>
<view class="privacy-page"> <view class="privacy-page">
<!-- 协议内容 -->
<scroll-view class="privacy-content" scroll-y> <scroll-view class="privacy-content" scroll-y>
<view class="content-wrap"> <view class="content-wrap">
<view class="title">隐私政策</view> <view class="title">隐私政策</view>
<view class="date-info">
<view class="date-item">更新日期:2026年06月18日</view>
<view class="date-item">生效日期:2026年06月18日</view>
</view>
<view class="section"> <view class="section">
<!-- <view class="section-title">一、适用范围</view> --> <view class="section-title">引言</view>
<view class="section-text"> <view class="section-text">
欢迎使用我们的产品/服务(以下统称“服务”)。我们高度重视用户隐私保护, 欢迎使用我们的产品/服务(以下统称"服务")。我们高度重视用户隐私保护,致力于为您提供安全、可靠的服务体验。本隐私政策旨在向您说明我们如何收集、使用、存储、保护您的个人信息,以及您享有的相关权利。请您在使用我们的服务前,仔细阅读并理解本政策全部内容。一旦您使用我们的服务,即视为您同意本政策的所有条款。
致力于为您提供安全、可靠的服务体验。本隐私政策旨在向您说明我们如何收集、使用、存储、保护您的个人信息,
以及您享有的相关权利。请您在使用我们的服务前,仔细阅读并理解本政策全部内容,
一旦您使用我们的服务,即视为您同意本政策的所有条款。
一、我们收集的个人信息 为了向您提供更优质、个性化的服务,我们会根据服务功能的需要,收集您主动提供或在使用服务过程中产生的个人信息,
具体如下: (一)您主动提供的信息 账户注册信息:当您注册我们的账户时,您可能需要提供姓名、手机号码、电子邮箱、密码等信息,用于身份验证、账户登录及找回。
服务相关信息:根据您使用的具体服务,您可能需要提供相关补充信息(如使用客服咨询服务时,提供问题描述及相关凭证;使用交易类服务时,提供收货地址、支付相关信息等)。
自愿提交的信息:您主动向我们反馈的意见、建议,或参与我们的问卷调查、活动时提交的相关信息。
若您通过第三方平台(如微信、支付宝、QQ等)登录我们的服务,我们会根据您的授权,
从第三方获取您的相关账户信息(如昵称、头像),用于完成登录及账户绑定,
我们不会获取第三方平台的其他未授权信息。
</view> </view>
</view> </view>
<view class="section">
<view class="section-title">一、我们收集的个人信息</view>
<view class="section-text">
为了向您提供更优质、个性化的服务,我们会根据服务功能的需要,收集您主动提供或在使用服务过程中产生的个人信息,具体如下:<br><br>
(一)您主动提供的信息<br>
1. 账户注册信息:当您注册我们的账户时,您可能需要提供姓名、手机号码、电子邮箱、密码等信息,用于身份验证、账户登录及找回。<br>
2. 服务相关信息:根据您使用的具体服务,您可能需要提供相关补充信息(如使用客服咨询服务时,提供问题描述及相关凭证;使用交易类服务时,提供收货地址、支付相关信息等)。<br>
3. 自愿提交的信息:您主动向我们反馈的意见、建议,或参与我们的问卷调查、活动时提交的相关信息。<br>
4. 若您通过第三方平台(如微信、支付宝等)登录我们的服务,我们会根据您的授权,从第三方获取您的相关账户信息(如昵称、头像),用于完成登录及账户绑定,我们不会获取第三方平台的其他未授权信息。<br><br>
(二)我们自动收集的信息<br>
1. 设备信息:我们可能会收集您的设备型号、操作系统版本、设备唯一标识符(如IMEI、MAC地址等)、IP地址、移动网络信息等。<br>
2. 日志信息:当您使用我们的服务时,系统可能自动记录相关操作日志,包括使用时间、使用时长、访问页面、操作记录等。<br>
3. 位置信息:当您使用基于位置的服务(如小区定位)时,我们可能会收集您的地理位置信息,您可以通过系统设置关闭位置权限。
</view>
</view>
<view class="section">
<view class="section-title">二、我们如何使用个人信息</view>
<view class="section-text">
1. 为您提供、维护和改善我们的服务。<br>
2. 进行身份验证,保障账户安全。<br>
3. 向您发送与服务相关的通知,如系统更新、服务变更等。<br>
4. 根据您的使用习惯和偏好进行数据分析,优化用户体验。<br>
5. 处理您的投诉、建议和反馈。<br>
6. 防范、发现和调查欺诈、侵权、安全事件等违法违规行为。<br>
7. 法律法规规定的其他用途。
</view>
</view>
<view class="section">
<view class="section-title">三、我们如何存储和保护个人信息</view>
<view class="section-text">
1. 我们将在中华人民共和国境内存储您的个人信息。<br>
2. 我们采用符合业界标准的安全防护措施保护您的个人信息,包括但不限于数据加密、访问控制、身份认证、安全审计等。<br>
3. 我们会采取合理可行的措施,尽量减少收集和存储无关的个人信息。我们只会在达成本政策所述目的所需的期限内保留您的个人信息,除非需要延长保留期或受到法律的允许。<br>
4. 在发生个人信息安全事件时,我们将按照法律法规的要求,及时向您告知安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。
</view>
</view>
<view class="section">
<view class="section-title">四、我们如何共享、转让、公开披露个人信息</view>
<view class="section-text">
1. 我们不会与本公司以外的任何公司、组织和个人分享您的个人信息,但以下情况除外:<br>
(1)获得您的明确同意后;<br>
(2)根据法律法规规定或政府主管部门的强制性要求;<br>
(3)与我们的关联公司共享,且受本政策的约束;<br>
(4)与授权合作伙伴共享,仅为实现本政策中声明的目的。<br><br>
2. 我们不会将您的个人信息转让给第三方,但以下情况除外:<br>
(1)获得您的明确同意后;<br>
(2)在涉及合并、收购或破产清算时,如涉及个人信息转让,我们会要求新的持有您个人信息的公司、组织继续受本政策的约束。<br><br>
3. 我们仅会在以下情况下公开披露您的个人信息:<br>
(1)获得您的明确同意后;<br>
(2)基于法律的披露:在法律、法律程序、诉讼或政府主管部门强制性要求的情况下。
</view>
</view>
<view class="section">
<view class="section-title">五、您的权利</view>
<view class="section-text">
1. 访问和更正您的个人信息:您有权访问您的个人信息,并在发现信息有误时进行更正。<br>
2. 删除您的个人信息:您可以在符合法律法规的情况下要求我们删除您的个人信息。<br>
3. 撤回同意:您有权随时撤回对收集和使用您个人信息的同意。撤回同意不影响撤回前基于同意已进行的处理活动的有效性。<br>
4. 注销账号:您可以通过客户端相关功能注销您的账号,注销后我们将删除您的个人信息,法律法规另有规定的除外。<br>
5. 投诉举报:如您对我们的个人信息处理行为有任何疑问或投诉,可通过客服渠道联系我们。
</view>
</view>
<view class="section">
<view class="section-title">六、未成年人保护</view>
<view class="section-text">
我们重视未成年人的个人信息保护。如您为未成年人,请在法定监护人的陪同下阅读本政策,并在征得法定监护人同意的前提下使用我们的服务或向我们提供信息。对于经法定监护人同意而收集的未成年人个人信息,我们只会在法律法规允许、法定监护人明确同意或者保护未成年人所必要的情况下使用或披露。
</view>
</view>
<view class="section">
<view class="section-title">七、本政策的更新</view>
<view class="section-text">
我们可能会适时修订本隐私政策。当政策的条款发生变更时,我们会在版本更新时以适当的方式向您提示变更后的隐私政策。请您仔细阅读变更后的隐私政策,若您继续使用我们的服务,即表示您同意受修订后的隐私政策约束。
</view>
</view>
<view class="section">
<view class="section-title">八、联系我们</view>
<view class="section-text">
如您对本隐私政策有任何疑问、意见或建议,可通过以下方式与我们联系:<br>
电子邮箱:kaihua_wuye@126.com<br>
我们将尽快处理您的问题,并在15个工作日内予以回复。
</view>
</view>
</view> </view>
</scroll-view> </scroll-view>
<!-- 底部同意按钮(新增) -->
<!-- <view class="agree-btn-wrap" v-if="needAgree">
<button class="agree-btn" @click="agreePrivacy">同意隐私政策</button>
</view> -->
</view> </view>
</template> </template>
<script setup> <script setup>
import { onLoad } from '@dcloudio/uni-app';
// 返回上一页
// const navigateBack = () => {
// uni.navigateBack({
// delta: 1
// });
// };
// 页面加载
// onLoad((options) => {
// // 判断是否需要同意
// if (options.needAgree === '1') {
// needAgree.value = true;
// }
// });
// 返回上一页
// const goToBack = () => {
// uni.navigateBack({
// delta: 1
// });
// };
// 同意隐私政策(新增)
// const agreePrivacy = () => {
// // #ifdef MP-WEIXIN
// wx.requirePrivacyAuthorize({
// success: () => {
// uni.showToast({
// title: '已同意隐私政策',
// icon: 'success'
// });
// // 记录授权状态(可选,存入本地缓存)
// uni.setStorageSync('privacyAgreed', true);
// navigateBack();
// },
// fail: () => {
// uni.showToast({
// title: '授权失败',
// icon: 'none'
// });
// }
// });
// // #endif
// // 非微信小程序直接标记同意
// // #ifndef MP-WEIXIN
// uni.setStorageSync('privacyAgreed', true);
// uni.showToast({
// title: '已同意隐私政策',
// icon: 'success'
// });
// navigateBack();
// // #endif
// };
</script> </script>
<style scoped> <style scoped>
@@ -97,73 +118,49 @@ import { onLoad } from '@dcloudio/uni-app';
background-color: #f8f8f8; background-color: #f8f8f8;
} }
/* 导航栏 */ .privacy-content {
.nav-bar { height: 100vh;
display: flex;
align-items: center;
padding: 20rpx;
background-color: #fff;
border-bottom: 1rpx solid #eee;
}
.nav-back {
display: flex;
align-items: center;
}
.back-text {
font-size: 30rpx;
color: #333;
margin-left: 10rpx;
}
.nav-title {
font-size: 32rpx;
font-weight: 500;
margin-left: 60rpx;
} }
/* 协议内容 */
.privacy-content {
height: calc(100vh - 88rpx);
}
.content-wrap { .content-wrap {
padding: 30rpx; padding: 30rpx;
} }
.title { .title {
font-size: 28rpx; font-size: 32rpx;
font-weight: 600; font-weight: 600;
text-align: center; text-align: center;
margin-bottom: 40rpx; margin-bottom: 40rpx;
color: #333; color: #333;
} }
.section { .section {
margin-bottom: 30rpx; margin-bottom: 30rpx;
padding: 0 20rpx; padding: 0 10rpx;
} }
.section-title { .section-title {
font-size: 30rpx; font-size: 28rpx;
font-weight: 500; font-weight: 500;
color: #333; color: #333;
margin-bottom: 10rpx; margin-bottom: 16rpx;
} }
.section-text { .section-text {
font-size: 28rpx; font-size: 26rpx;
line-height: 1.6; line-height: 1.8;
color: #666; color: #666;
text-align: justify;
} }
/* 同意按钮样式(新增) */
.agree-btn-wrap { .date-info {
padding: 20rpx; text-align: center;
position: fixed; margin-bottom: 40rpx;
bottom: 0;
left: 0;
right: 0;
background-color: #fff;
border-top: 1rpx solid #eee;
} }
.agree-btn {
background-color: #007aff; .date-item {
color: #fff; font-size: 24rpx;
border-radius: 8rpx; color: #999;
height: 88rpx; line-height: 1.6;
font-size: 32rpx;
} }
</style> </style>

View File

@@ -98,6 +98,7 @@
import { ref, computed } from 'vue' import { ref, computed } from 'vue'
import { onLoad } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
import { getLoginPassword } from '../../api/api.js' import { getLoginPassword } from '../../api/api.js'
import { clearAccountStorage } from '../../api/request.js'
import PrivacyPopup from '@/components/privacy-popup/privacy-popup.vue' import PrivacyPopup from '@/components/privacy-popup/privacy-popup.vue'
import { usePermStore } from '@/stores/usePermStore' import { usePermStore } from '@/stores/usePermStore'
@@ -128,22 +129,16 @@ const toggleRemember = () => {
// 打开用户协议 // 打开用户协议
const goToUserAgreement = () => { const goToUserAgreement = () => {
// #ifdef APP-PLUS uni.navigateTo({
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/butler_xieyi.html') url: '/pageSubPack/loginSub/user-agreement'
// #endif })
// #ifdef H5
window.open('https://wuye.ckdzkj.com/parivw/butler_xieyi.html')
// #endif
} }
// 打开隐私政策 // 打开隐私政策
const goToPrivacy = () => { const goToPrivacy = () => {
// #ifdef APP-PLUS uni.navigateTo({
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/butler.html') url: '/pageSubPack/loginSub/privacy'
// #endif })
// #ifdef H5
window.open('https://wuye.ckdzkj.com/parivw/butler.html')
// #endif
} }
// 打开隐私协议弹窗 // 打开隐私协议弹窗
@@ -204,13 +199,13 @@ const handleLogin = () => {
cid: push_cid cid: push_cid
} }
permStore.clearPerm() permStore.clearPerm()
// 清除上个账号的所有缓存,防止新账号显示旧数据
clearAccountStorage()
getLoginPassword(params) getLoginPassword(params)
.then(res => { .then(res => {
// console.log('33333',res) // console.log('33333',res)
if (res.code === 200) { if (res.code === 200) {
uni.setStorageSync('token', res.data.token) uni.setStorageSync('token', res.data.token)
// 清掉上次账号的小区缓存,防止新账号显示旧小区
uni.removeStorageSync('currentVillage')
// 存用户ID // 存用户ID
// if(res.data) { // if(res.data) {
// // 存当前绑定的小区ID,0 表示未绑定 // // 存当前绑定的小区ID,0 表示未绑定

View File

@@ -0,0 +1,154 @@
<template>
<view class="agreement-page">
<scroll-view class="agreement-content" scroll-y>
<view class="content-wrap">
<view class="title">用户协议</view>
<view class="date-info">
<view class="date-item">更新日期:2026年06月18日</view>
<view class="date-item">生效日期:2026年06月18日</view>
</view>
<view class="section">
<view class="section-title">一、总则</view>
<view class="section-text">
欢迎使用我们的产品及服务(以下简称"本服务")。本用户协议(以下简称"本协议")是您与本公司之间关于您使用本服务所订立的协议。请您务必审慎阅读、充分理解本协议各条款内容,特别是免除或者限制责任的条款、争议解决和法律适用条款。免除或者限制责任的条款可能以加粗形式提示您注意。
除非您已阅读并接受本协议所有条款,否则您无权使用本服务。您使用本服务即视为您已阅读并同意本协议的约束。
</view>
</view>
<view class="section">
<view class="section-title">二、账号注册与使用</view>
<view class="section-text">
1. 您在注册账号时应提供真实、准确、完整的个人信息,并在信息变更时及时更新。如因您提供的信息不真实、不准确或不完整而导致的任何损失或责任,由您自行承担。
2. 您注册的账号归本公司所有,您仅获得账号的使用权。您不得以任何方式转让、赠与、出借或出售账号。
3. 您应妥善保管账号和密码,因您保管不善导致账号被他人使用或被盗用而造成的损失,由您自行承担。如您发现账号被他人非法使用,应立即通知本公司。
4. 您在使用本服务时应遵守国家法律法规,不得利用本服务从事违法违规活动,包括但不限于:发布、传播违法信息;侵犯他人知识产权、商业秘密或其他合法权益;干扰、破坏或限制本服务的正常运行;利用本服务进行任何可能对互联网正常运转造成不利影响的行为。
</view>
</view>
<view class="section">
<view class="section-title">三、服务内容</view>
<view class="section-text">
1. 本服务主要为您提供物业管理相关功能,包括但不限于:工单管理、巡检管理、投诉处理、费用统计、通知公告等服务。
2. 本公司将根据实际情况不断优化和调整服务内容,有权增加、修改或暂停部分服务功能,无需另行通知。
3. 本公司将采取合理的技术手段保障服务的安全性和稳定性,但由于不可抗力、计算机病毒、黑客攻击、系统维护、网络故障等原因可能导致服务中断,本公司不承担由此产生的责任。
</view>
</view>
<view class="section">
<view class="section-title">四、用户行为规范</view>
<view class="section-text">
1. 您承诺在使用本服务过程中所发布、传输的所有内容(包括但不限于文字、图片、音视频等信息)均符合法律法规及本协议约定。
2. 您不得利用本服务制作、复制、发布、传播以下内容:反对宪法所确定的基本原则的;危害国家安全、泄露国家秘密、颠覆国家政权、破坏国家统一的;损害国家荣誉和利益的;煽动民族仇恨、民族歧视、破坏民族团结的;破坏国家宗教政策,宣扬邪教和封建迷信的;散布谣言,扰乱社会秩序,破坏社会稳定的;散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;侮辱或者诽谤他人,侵害他人合法权益的;含有法律、行政法规禁止的其他内容的。
3. 如您违反上述规范,本公司有权采取相应措施,包括但不限于删除相关内容、暂停或终止您的账号使用权、追究法律责任等。
</view>
</view>
<view class="section">
<view class="section-title">五、知识产权</view>
<view class="section-text">
1. 本服务中所有内容,包括但不限于文字、图片、音频、视频、图表、界面设计、版面框架、数据资料等,均受著作权法、商标法、专利法等相关法律法规的保护,其知识产权归本公司或相关权利人所有。
2. 未经本公司或相关权利人书面许可,您不得以任何方式复制、转载、引用、链接、抓取、传播、出售、出版或以其他方式使用本服务中的任何内容。
3. 您在使用本服务过程中产生的数据归本公司所有,本公司有权在不侵犯您个人隐私的前提下使用和分析这些数据。
</view>
</view>
<view class="section">
<view class="section-title">六、隐私保护</view>
<view class="section-text">
本公司重视用户隐私保护,将按照《隐私政策》的规定收集、使用、存储和保护您的个人信息。您在使用本服务前应仔细阅读《隐私政策》,使用本服务即视为您同意本公司按照《隐私政策》处理您的个人信息。
</view>
</view>
<view class="section">
<view class="section-title">七、免责声明</view>
<view class="section-text">
1. 您理解并同意,本服务按照"现状"和"可用"状态提供,本公司不对服务的及时性、安全性、准确性、完整性、可靠性等作任何明示或默示的保证。
2. 本公司不对因下述情况导致的损失承担责任:您使用或无法使用本服务;第三方未经授权的访问或修改您传输的数据;本服务中任何第三方的声明或行为;以及其他非因本公司原因导致的与使用本服务有关的事项。
3. 在法律允许的最大范围内,本公司不承担因使用本服务而产生的任何间接、附带、特殊、惩罚性或结果性损害赔偿。
</view>
</view>
<view class="section">
<view class="section-title">八、协议修改</view>
<view class="section-text">
本公司有权根据需要不时修改本协议条款,修改后的协议将在本服务中发布。如您不同意修改后的协议,应停止使用本服务。如您在协议修改后继续使用本服务,则视为您接受修改后的协议。
</view>
</view>
<view class="section">
<view class="section-title">九、法律适用与争议解决</view>
<view class="section-text">
1. 本协议的订立、执行、解释及争议解决均适用中华人民共和国法律。
2. 因本协议引起的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均有权向本公司所在地有管辖权的人民法院提起诉讼。
</view>
</view>
<view class="section">
<view class="section-title">十、其他</view>
<view class="section-text">
1. 本协议条款无论因何种原因部分无效或不可执行,其余条款仍有效,对双方具有约束力。
2. 本协议自您首次使用本服务时生效。
3. 本公司对本协议拥有最终解释权。
</view>
</view>
</view>
</scroll-view>
</view>
</template>
<script setup>
</script>
<style scoped>
.agreement-page {
min-height: 100vh;
background-color: #f8f8f8;
}
.agreement-content {
height: 100vh;
}
.content-wrap {
padding: 30rpx;
}
.title {
font-size: 32rpx;
font-weight: 600;
text-align: center;
margin-bottom: 40rpx;
color: #333;
}
.section {
margin-bottom: 30rpx;
padding: 0 10rpx;
}
.section-title {
font-size: 28rpx;
font-weight: 500;
color: #333;
margin-bottom: 16rpx;
}
.section-text {
font-size: 26rpx;
line-height: 1.8;
color: #666;
text-align: justify;
}
.date-info {
text-align: center;
margin-bottom: 40rpx;
}
.date-item {
font-size: 24rpx;
color: #999;
line-height: 1.6;
}
</style>

View File

@@ -45,7 +45,7 @@
</template> </template>
<script setup> <script setup>
import { ref, onMounted } from 'vue' import { ref } from 'vue'
import {onLoad} from '@dcloudio/uni-app' import {onLoad} from '@dcloudio/uni-app'
import { getVillageList,switchVillage} from '../../api/api.js' import { getVillageList,switchVillage} from '../../api/api.js'
@@ -64,15 +64,26 @@
const res = await getVillageList({ villageName }) const res = await getVillageList({ villageName })
if (res.code === 200) { if (res.code === 200) {
displayedCommunities.value = res.data displayedCommunities.value = res.data
// 自动选中传入的小区
if (defaultVillageId.value) { // 如果当前选中项不在新的列表中(搜索过滤掉了),则清空选中状态
const found = displayedCommunities.value.find( if (selectedItem.value) {
item => String(item.id) === String(defaultVillageId.value) const stillExists = displayedCommunities.value.find(
) item => String(item.id) === String(selectedItem.value.id)
if (found) { )
selectedItem.value = found if (!stillExists) {
} selectedItem.value = null
} }
}
// 自动选中传入的默认小区(仅在默认小区存在于列表时)
if (defaultVillageId.value) {
const found = displayedCommunities.value.find(
item => String(item.id) === String(defaultVillageId.value)
)
if (found) {
selectedItem.value = found
}
}
} else { } else {
uni.showToast({ title: res.msg || '获取数据失败', icon: 'none' }) uni.showToast({ title: res.msg || '获取数据失败', icon: 'none' })
} }
@@ -82,11 +93,13 @@
isLoading.value = false isLoading.value = false
} }
} }
// 接收传入的参数 // 接收传入的参数,并初始加载小区列表
onLoad((options) => { onLoad((options) => {
if (options?.villageId) { if (options?.villageId) {
defaultVillageId.value = options.villageId defaultVillageId.value = options.villageId
} }
// 在 onLoad 中调用初始加载,确保 defaultVillageId 已设置
fetchVillageList()
}) })
// 处理搜索输入(防抖) // 处理搜索输入(防抖)
@@ -147,11 +160,6 @@
// }) // })
} }
// 初始化
onMounted(() => {
fetchVillageList()
})
</script> </script>
<style scoped> <style scoped>

View File

@@ -44,6 +44,7 @@
import { ref } from 'vue' import { ref } from 'vue'
import { onShow } from '@dcloudio/uni-app' import { onShow } from '@dcloudio/uni-app'
import { logout, getSettingInfo } from '../../api/api.js' import { logout, getSettingInfo } from '../../api/api.js'
import { clearAccountStorage } from '../../api/request.js'
import { usePermStore } from '@/stores/usePermStore' import { usePermStore } from '@/stores/usePermStore'
const permStore = usePermStore() const permStore = usePermStore()
@@ -121,9 +122,10 @@ const confirmLogout = () => {
.then(res => { .then(res => {
if (res.code === 200) { if (res.code === 200) {
permStore.clearPerm() permStore.clearPerm()
uni.clearStorageSync() clearAccountStorage()
uni.showToast({ title: '退出登录成功', icon: 'success' }) uni.showToast({ title: '退出登录成功', icon: 'success' })
uni.redirectTo({ url: '/pageSubPack/loginSub/pwd-login' }) // 使用 reLaunch 销毁所有页面(包括 tab 页),确保新账号登录后页面重新初始化
uni.reLaunch({ url: '/pageSubPack/loginSub/pwd-login' })
} else { } else {
uni.showToast({ title: res.msg || '退出失败', icon: 'none' }) uni.showToast({ title: res.msg || '退出失败', icon: 'none' })
} }

View File

@@ -40,7 +40,13 @@
{ {
"path": "privacy", "path": "privacy",
"style": { "style": {
"navigationBarTitleText": "用户隐私协议" "navigationBarTitleText": "隐私政策"
}
},
{
"path": "user-agreement",
"style": {
"navigationBarTitleText": "用户协议"
} }
}, },
{ {

View File

@@ -423,7 +423,11 @@ onShow(() => {
// 从其他页面返回 / 从后台恢复:只刷新可能变化的数据 // 从其他页面返回 / 从后台恢复:只刷新可能变化的数据
getbannarData() getbannarData()
getMyOrderNum() getMyOrderNum()
// 小区和巡检数据不频繁变化,从后台恢复时用缓存/旧数据,减少请求 // 换账号登录后 currentVillage 缓存已被清除,需要重新获取小区
if (!uni.getStorageSync('currentVillage')) {
currentVillageData()
getInspectionData()
}
}) })
onLoad(() => { onLoad(() => {