优化内容加修复bug
This commit is contained in:
@@ -19,6 +19,7 @@ export const PUBLIC_PATHS = [
|
|||||||
'/pageSubPack/loginSub/forget-pwd',
|
'/pageSubPack/loginSub/forget-pwd',
|
||||||
'/pageSubPack/loginSub/change-pwd',
|
'/pageSubPack/loginSub/change-pwd',
|
||||||
'/pageSubPack/loginSub/privacy',
|
'/pageSubPack/loginSub/privacy',
|
||||||
|
'/pageSubPack/loginSub/user-agreement',
|
||||||
'/pages/navigation/navigation'
|
'/pages/navigation/navigation'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
"name" : "花开物业",
|
"name" : "花开物业",
|
||||||
"appid" : "__UNI__29C3D60",
|
"appid" : "__UNI__29C3D60",
|
||||||
"description" : "智慧社区居民端面向小区业主使用,支持注册、验证码、账号密码多种登录方式,提供密码找回功能,账号使用安全便捷。支持多小区切换,首页设有轮播 banner、社区公告,集成远程开门、生活缴费、在线报修、访客邀请、社区活动常用服务。全服务板块统一涵盖门禁开门、线上缴费、报修申报、访客预约、投诉反馈、问卷调研、活动报名、社区公示、一键联系物业功能。个人中心可管理房屋、住户、车位、车辆信息,支持更换手机号、修改密码、消息通知设置、版本更新及账号退出,一站式满足业主居家生活、社区服务、房产车辆管理需求,实现社区生活数字化、便捷化。",
|
"description" : "智慧社区居民端面向小区业主使用,支持注册、验证码、账号密码多种登录方式,提供密码找回功能,账号使用安全便捷。支持多小区切换,首页设有轮播 banner、社区公告,集成远程开门、生活缴费、在线报修、访客邀请、社区活动常用服务。全服务板块统一涵盖门禁开门、线上缴费、报修申报、访客预约、投诉反馈、问卷调研、活动报名、社区公示、一键联系物业功能。个人中心可管理房屋、住户、车位、车辆信息,支持更换手机号、修改密码、消息通知设置、版本更新及账号退出,一站式满足业主居家生活、社区服务、房产车辆管理需求,实现社区生活数字化、便捷化。",
|
||||||
"versionName" : "1.0.9",
|
"versionName" : "1.1.1",
|
||||||
"versionCode" : 122,
|
"versionCode" : 124,
|
||||||
"transformPx" : false,
|
"transformPx" : false,
|
||||||
"uniCloud" : {
|
"uniCloud" : {
|
||||||
"provider" : "aliyun",
|
"provider" : "aliyun",
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export default function request(url, data = {}, method = "GET") {
|
|||||||
const header = {
|
const header = {
|
||||||
"clientid": "resident",
|
"clientid": "resident",
|
||||||
'content-type': 'application/json'
|
'content-type': 'application/json'
|
||||||
};
|
};
|
||||||
if (token) {
|
if (token) {
|
||||||
header["Authorization"] = "Bearer " + token;
|
header["Authorization"] = "Bearer " + token;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page">
|
<view class="page">
|
||||||
<!-- <view class="status_bar" :style="{ height: statusBarHeight + 'px' }"></view>
|
|
||||||
|
|
||||||
<uni-nav-bar
|
|
||||||
left-icon="left"
|
|
||||||
title="公区收益"
|
|
||||||
background-color="#F9F9F9"
|
|
||||||
@clickLeft="narBack"
|
|
||||||
/> -->
|
|
||||||
|
|
||||||
<!-- 滚动区域 -->
|
<!-- 滚动区域 -->
|
||||||
<pull-refresh-scroll
|
<pull-refresh-scroll
|
||||||
@@ -94,8 +86,11 @@ const loadRevenue = async (isRefresh = false) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onShow(() =>{
|
onShow(() =>{
|
||||||
if(isFirstShow.value) return
|
if(isFirstShow.value) {
|
||||||
// loadRevenue(true)
|
isFirstShow.value = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
loadRevenue(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
const onRefresh = () => {
|
const onRefresh = () => {
|
||||||
@@ -115,7 +110,6 @@ const narBack = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onLoad(() => {
|
onLoad(() => {
|
||||||
isFirstShow.value = false
|
|
||||||
uni.$on('noticeRead',updateReadStatus)
|
uni.$on('noticeRead',updateReadStatus)
|
||||||
loadRevenue(true)
|
loadRevenue(true)
|
||||||
})
|
})
|
||||||
@@ -146,7 +140,7 @@ page {
|
|||||||
height: 0; /* 让滚动区域生效 */
|
height: 0; /* 让滚动区域生效 */
|
||||||
}
|
}
|
||||||
.list-wrap {
|
.list-wrap {
|
||||||
padding: 40rpx;
|
padding: 50rpx 40rpx;
|
||||||
}
|
}
|
||||||
.item {
|
.item {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
|||||||
@@ -99,12 +99,12 @@ const handleConfirm = () => {
|
|||||||
},1500)
|
},1500)
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
uni.showToast({ title: "修改失败", icon: 'error' });
|
uni.showToast({ title: "修改失败", icon: 'none' });
|
||||||
}
|
}
|
||||||
}).catch(err =>{
|
}).catch(err =>{
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: err.msg || '网络异常',
|
title: err.msg || '网络异常',
|
||||||
icon: 'error'
|
icon: 'none'
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -87,13 +87,13 @@ const getVerifyCode = () => {
|
|||||||
}else{
|
}else{
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '验证码发送失败',
|
title: '验证码发送失败',
|
||||||
icon: 'error'
|
icon: 'none'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}).catch(err =>{
|
}).catch(err =>{
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: err.msg || '网络异常',
|
title: err.msg || '网络异常',
|
||||||
icon: 'error'
|
icon: 'none'
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -40,9 +40,9 @@
|
|||||||
<view class="input-icon">
|
<view class="input-icon">
|
||||||
<image src="https://wuyeadmin.bugtc.com/images/login/phone.png" mode="" style="height: 100%;width: 100%;"></image>
|
<image src="https://wuyeadmin.bugtc.com/images/login/phone.png" mode="" style="height: 100%;width: 100%;"></image>
|
||||||
</view>
|
</view>
|
||||||
<input class="native-input" type="text" v-model="account"
|
<uni-easyinput class="input-content" type="text" v-model="account"
|
||||||
placeholder="请输入帐号" maxlength="20" :placeholderStyle="placeholderStyle"
|
placeholder="请输入帐号" :inputBorder="false" maxlength="20" :placeholderStyle="placeholderStyle">
|
||||||
auto-capitalize="off" auto-correct="off" />
|
</uni-easyinput>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 密码输入框 -->
|
<!-- 密码输入框 -->
|
||||||
@@ -50,9 +50,9 @@
|
|||||||
<view class="input-icon">
|
<view class="input-icon">
|
||||||
<image src="https://wuyeadmin.bugtc.com/images/login/password.png" mode="" style="height: 100%;width: 100%;"></image>
|
<image src="https://wuyeadmin.bugtc.com/images/login/password.png" mode="" style="height: 100%;width: 100%;"></image>
|
||||||
</view>
|
</view>
|
||||||
<input class="native-input" type="password" v-model="password"
|
<uni-easyinput class="input-content" type="password" v-model="password"
|
||||||
placeholder="请输入密码" maxlength="16" :placeholderStyle="placeholderStyle"
|
placeholder="请输入密码" :inputBorder="false" maxlength="16" :placeholderStyle="placeholderStyle">
|
||||||
auto-capitalize="off" auto-correct="off" />
|
</uni-easyinput>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -135,21 +135,11 @@ const canGetVerify = computed(() => {
|
|||||||
const toggleAgreement = () => { agreeAgreement.value = !agreeAgreement.value }
|
const toggleAgreement = () => { agreeAgreement.value = !agreeAgreement.value }
|
||||||
|
|
||||||
const goToUserAgreement = () => {
|
const goToUserAgreement = () => {
|
||||||
// #ifdef APP-PLUS
|
uni.navigateTo({ url: '/pageSubPack/loginSub/user-agreement' })
|
||||||
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/ownler_xieyi.html')
|
|
||||||
// #endif
|
|
||||||
// #ifdef H5
|
|
||||||
window.open('https://wuye.ckdzkj.com/parivw/ownler_xieyi.html')
|
|
||||||
// #endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const goToPrivacy = () => {
|
const goToPrivacy = () => {
|
||||||
// #ifdef APP-PLUS
|
uni.navigateTo({ url: '/pageSubPack/loginSub/privacy' })
|
||||||
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/owner.html')
|
|
||||||
// #endif
|
|
||||||
// #ifdef H5
|
|
||||||
window.open('https://wuye.ckdzkj.com/parivw/owner.html')
|
|
||||||
// #endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const openPrivacyPopup = (action) => {
|
const openPrivacyPopup = (action) => {
|
||||||
@@ -263,10 +253,14 @@ const doLogin = () => {
|
|||||||
|
|
||||||
const onLoginSuccess = (res) => {
|
const onLoginSuccess = (res) => {
|
||||||
if (res.code === 200 && res.data) {
|
if (res.code === 200 && res.data) {
|
||||||
// 换号登录时清除旧用户首页缓存,防止新用户看到旧用户的小区数据
|
// 换号登录时清除旧用户的所有缓存,防止新用户看到旧用户的小区数据和公告
|
||||||
const oldUserId = uni.getStorageSync('userId')
|
const oldUserId = uni.getStorageSync('userId')
|
||||||
if (res.data.userId && String(oldUserId) !== String(res.data.userId)) {
|
if (res.data.userId && String(oldUserId) !== String(res.data.userId)) {
|
||||||
uni.removeStorageSync('home_cache')
|
uni.removeStorageSync('home_cache')
|
||||||
|
uni.removeStorageSync('home_cache_' + oldUserId)
|
||||||
|
uni.removeStorageSync('communityName')
|
||||||
|
uni.removeStorageSync('communityId')
|
||||||
|
uni.removeStorageSync('needReloadUserInfo')
|
||||||
}
|
}
|
||||||
uni.setStorageSync('token', res.data.token)
|
uni.setStorageSync('token', res.data.token)
|
||||||
if (res.data.userId) { uni.setStorageSync('userId', res.data.userId) }
|
if (res.data.userId) { uni.setStorageSync('userId', res.data.userId) }
|
||||||
@@ -349,14 +343,6 @@ onUnmounted(() => {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 原生输入框(账号/密码区分大小写) */
|
|
||||||
.native-input {
|
|
||||||
flex: 1;
|
|
||||||
font-size: 32rpx;
|
|
||||||
color: #333;
|
|
||||||
height: 88rpx;
|
|
||||||
line-height: 88rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 深度覆盖 uni-easyinput 内部默认样式 */
|
/* 深度覆盖 uni-easyinput 内部默认样式 */
|
||||||
.input-content :deep(.uni-easyinput__content) {
|
.input-content :deep(.uni-easyinput__content) {
|
||||||
|
|||||||
@@ -1,169 +1,134 @@
|
|||||||
<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-text">
|
<view class="section-text">
|
||||||
欢迎使用我们的产品/服务(以下统称“服务”)。我们高度重视用户隐私保护,
|
欢迎使用我们的产品/服务(以下统称"服务")。我们高度重视用户隐私保护,
|
||||||
致力于为您提供安全、可靠的服务体验。本隐私政策旨在向您说明我们如何收集、使用、存储、保护您的个人信息,
|
致力于为您提供安全、可靠的服务体验。本隐私政策旨在向您说明我们如何收集、使用、存储、保护您的个人信息,
|
||||||
以及您享有的相关权利。请您在使用我们的服务前,仔细阅读并理解本政策全部内容,
|
以及您享有的相关权利。请您在使用我们的服务前,仔细阅读并理解本政策全部内容,
|
||||||
一旦您使用我们的服务,即视为您同意本政策的所有条款。
|
一旦您使用我们的服务,即视为您同意本政策的所有条款。
|
||||||
一、我们收集的个人信息 为了向您提供更优质、个性化的服务,我们会根据服务功能的需要,收集您主动提供或在使用服务过程中产生的个人信息,
|
|
||||||
具体如下: (一)您主动提供的信息 账户注册信息:当您注册我们的账户时,您可能需要提供姓名、手机号码、电子邮箱、密码等信息,用于身份验证、账户登录及找回。
|
|
||||||
服务相关信息:根据您使用的具体服务,您可能需要提供相关补充信息(如使用客服咨询服务时,提供问题描述及相关凭证;使用交易类服务时,提供收货地址、支付相关信息等)。
|
|
||||||
自愿提交的信息:您主动向我们反馈的意见、建议,或参与我们的问卷调查、活动时提交的相关信息。
|
|
||||||
若您通过第三方平台(如微信、支付宝、QQ等)登录我们的服务,我们会根据您的授权,
|
|
||||||
从第三方获取您的相关账户信息(如昵称、头像),用于完成登录及账户绑定,
|
|
||||||
我们不会获取第三方平台的其他未授权信息。
|
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<view class="section">
|
||||||
|
<view class="section-title">一、我们收集的个人信息</view>
|
||||||
|
<view class="section-text">
|
||||||
|
为了向您提供更优质、个性化的服务,我们会根据服务功能的需要,收集您主动提供或在使用服务过程中产生的个人信息,具体如下:
|
||||||
|
</view>
|
||||||
|
<view class="section-text">
|
||||||
|
(一)您主动提供的信息:账户注册信息,当您注册我们的账户时,您可能需要提供姓名、手机号码、电子邮箱、密码等信息,用于身份验证、账户登录及找回。
|
||||||
|
服务相关信息:根据您使用的具体服务,您可能需要提供相关补充信息(如使用客服咨询服务时,提供问题描述及相关凭证;使用交易类服务时,提供收货地址、支付相关信息等)。
|
||||||
|
自愿提交的信息:您主动向我们反馈的意见、建议,或参与我们的问卷调查、活动时提交的相关信息。
|
||||||
|
若您通过第三方平台(如微信、支付宝、QQ等)登录我们的服务,我们会根据您的授权,从第三方获取您的相关账户信息(如昵称、头像),用于完成登录及账户绑定,我们不会获取第三方平台的其他未授权信息。
|
||||||
|
</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">
|
||||||
|
您有权查阅、更正、删除您的个人信息,有权撤回同意,有权注销账户。您可以通过应用内的设置页面或联系我们的客服来行使这些权利。
|
||||||
|
</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>
|
</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 goBack = () => {
|
||||||
|
uni.navigateBack({ delta: 1 })
|
||||||
// 返回上一页
|
}
|
||||||
// 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>
|
||||||
.privacy-page {
|
.privacy-page {
|
||||||
min-height: 100vh;
|
height: 100vh;
|
||||||
background-color: #f8f8f8;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 导航栏 */
|
|
||||||
.nav-bar {
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
flex-direction: column;
|
||||||
padding: 20rpx;
|
|
||||||
background-color: #fff;
|
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 {
|
.privacy-content {
|
||||||
height: calc(100vh - 88rpx);
|
flex: 1;
|
||||||
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.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: 24rpx;
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.date-info {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-item {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999;
|
||||||
|
line-height: 1.8;
|
||||||
|
}
|
||||||
|
|
||||||
.section {
|
.section {
|
||||||
margin-bottom: 30rpx;
|
margin-bottom: 30rpx;
|
||||||
padding: 0 20rpx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.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;
|
||||||
}
|
}
|
||||||
/* 同意按钮样式(新增) */
|
</style>
|
||||||
.agree-btn-wrap {
|
|
||||||
padding: 20rpx;
|
|
||||||
position: fixed;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
background-color: #fff;
|
|
||||||
border-top: 1rpx solid #eee;
|
|
||||||
}
|
|
||||||
.agree-btn {
|
|
||||||
background-color: #007aff;
|
|
||||||
color: #fff;
|
|
||||||
border-radius: 8rpx;
|
|
||||||
height: 88rpx;
|
|
||||||
font-size: 32rpx;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -188,21 +188,11 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
const goToUserAgreement = () => {
|
const goToUserAgreement = () => {
|
||||||
// #ifdef APP-PLUS
|
uni.navigateTo({ url: '/pageSubPack/loginSub/user-agreement' })
|
||||||
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/ownler_xieyi.html')
|
|
||||||
// #endif
|
|
||||||
// #ifdef H5
|
|
||||||
window.open('https://wuye.ckdzkj.com/parivw/ownler_xieyi.html')
|
|
||||||
// #endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const goToPrivacy = () => {
|
const goToPrivacy = () => {
|
||||||
// #ifdef APP-PLUS
|
uni.navigateTo({ url: '/pageSubPack/loginSub/privacy' })
|
||||||
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/owner.html')
|
|
||||||
// #endif
|
|
||||||
// #ifdef H5
|
|
||||||
window.open('https://wuye.ckdzkj.com/parivw/owner.html')
|
|
||||||
// #endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const checkForm = () => {};
|
const checkForm = () => {};
|
||||||
|
|||||||
159
property-uniapp-project/pageSubPack/loginSub/user-agreement.vue
Normal file
159
property-uniapp-project/pageSubPack/loginSub/user-agreement.vue
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
<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-text">
|
||||||
|
欢迎使用我们的产品/服务(以下统称"服务")。请您在使用我们的服务前,仔细阅读并充分理解本协议的全部内容。
|
||||||
|
一旦您使用我们的服务,即视为您已阅读并同意接受本协议所有条款的约束。
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="section">
|
||||||
|
<view class="section-title">一、账户注册与使用</view>
|
||||||
|
<view class="section-text">
|
||||||
|
1. 您在注册账户时应提供真实、准确的个人信息,并确保及时更新。因信息不真实或不准确产生的一切后果由您自行承担。
|
||||||
|
</view>
|
||||||
|
<view class="section-text">
|
||||||
|
2. 您应妥善保管您的账户及密码,因账户或密码泄露导致的一切损失,由您自行承担。
|
||||||
|
</view>
|
||||||
|
<view class="section-text">
|
||||||
|
3. 您不得将账户借给他人使用,每个账户仅供您个人使用。
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="section">
|
||||||
|
<view class="section-title">二、服务内容</view>
|
||||||
|
<view class="section-text">
|
||||||
|
1. 我们为您提供物业服务相关的各项功能,包括但不限于:物业缴费、在线报修、访客邀请、小区公告、投诉建议等。
|
||||||
|
</view>
|
||||||
|
<view class="section-text">
|
||||||
|
2. 我们有权根据业务需要对服务内容进行调整、优化,并在应用内公示。
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="section">
|
||||||
|
<view class="section-title">三、用户行为规范</view>
|
||||||
|
<view class="section-text">
|
||||||
|
1. 您在使用服务过程中应遵守国家法律法规,不得从事违法违规行为。
|
||||||
|
</view>
|
||||||
|
<view class="section-text">
|
||||||
|
2. 您不得利用服务进行任何危害网络安全的行为,包括但不限于:传播病毒、攻击服务器、非法获取他人信息等。
|
||||||
|
</view>
|
||||||
|
<view class="section-text">
|
||||||
|
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. 因不可抗力或不可预见的原因导致服务中断或数据丢失,我们不承担责任,但将尽力减少因此给您带来的损失。
|
||||||
|
</view>
|
||||||
|
<view class="section-text">
|
||||||
|
2. 您理解并同意,使用本服务可能存在风险,我们不对因使用本服务导致的任何间接损失承担责任。
|
||||||
|
</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>
|
||||||
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
const goBack = () => {
|
||||||
|
uni.navigateBack({ delta: 1 })
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.agreement-page {
|
||||||
|
height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.agreement-content {
|
||||||
|
flex: 1;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-wrap {
|
||||||
|
padding: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 32rpx;
|
||||||
|
font-weight: 600;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-info {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-item {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999;
|
||||||
|
line-height: 1.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 32rpx;
|
||||||
|
font-weight: 600;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section {
|
||||||
|
margin-bottom: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 28rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-text {
|
||||||
|
font-size: 26rpx;
|
||||||
|
line-height: 1.8;
|
||||||
|
color: #666;
|
||||||
|
margin-bottom: 12rpx;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -7,11 +7,11 @@
|
|||||||
|
|
||||||
<scroll-view class="page" scroll-y="true">
|
<scroll-view class="page" scroll-y="true">
|
||||||
<view class="form-container">
|
<view class="form-container">
|
||||||
<view class="form-item" @click="selectItem('选择小区')">
|
<view class="form-item" :class="{ 'form-item-disabled': type === '修改' }" @click="selectItem('选择小区')">
|
||||||
<text class="item-label">选择小区</text>
|
<text class="item-label">选择小区</text>
|
||||||
<text class="item-placeholder"
|
<text class="item-placeholder"
|
||||||
:class="{selected: formData.community}">{{ formData.community || '请选择' }}</text>
|
:class="{selected: formData.community}">{{ formData.community || '请选择' }}</text>
|
||||||
<text class="item-arrow"></text>
|
<text class="item-arrow" v-if="type !== '修改'"></text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- <view class="form-item" @click="selectItem('绑定房屋')">
|
<!-- <view class="form-item" @click="selectItem('绑定房屋')">
|
||||||
@@ -20,18 +20,18 @@
|
|||||||
<text class="item-arrow"></text>
|
<text class="item-arrow"></text>
|
||||||
</view> -->
|
</view> -->
|
||||||
|
|
||||||
<view class="form-item" @click="selectItem('停车场')">
|
<view class="form-item" :class="{ 'form-item-disabled': type === '修改' }" @click="selectItem('停车场')">
|
||||||
<text class="item-label">停车场</text>
|
<text class="item-label">停车场</text>
|
||||||
<text class="item-placeholder"
|
<text class="item-placeholder"
|
||||||
:class="{selected: formData.parkingLot}">{{ formData.parkingLot || '请选择' }}</text>
|
:class="{selected: formData.parkingLot}">{{ formData.parkingLot || '请选择' }}</text>
|
||||||
<text class="item-arrow"></text>
|
<text class="item-arrow" v-if="type !== '修改'"></text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="form-item" @click="selectItem('车位编号')">
|
<view class="form-item" :class="{ 'form-item-disabled': type === '修改' }" @click="selectItem('车位编号')">
|
||||||
<text class="item-label">车位编号</text>
|
<text class="item-label">车位编号</text>
|
||||||
<text class="item-placeholder"
|
<text class="item-placeholder"
|
||||||
:class="{selected: formData.parkingSpaceNum}">{{ formData.parkingSpaceNum || '请选择' }}</text>
|
:class="{selected: formData.parkingSpaceNum}">{{ formData.parkingSpaceNum || '请选择' }}</text>
|
||||||
<text class="item-arrow"></text>
|
<text class="item-arrow" v-if="type !== '修改'"></text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="form-item">
|
<view class="form-item">
|
||||||
@@ -54,13 +54,13 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="form-item" @click="selectItem('选择业主')">
|
<view class="form-item" :class="{ 'form-item-disabled': checkStatus === '1' }" @click="selectItem('选择业主')">
|
||||||
<text class="item-label">选择业主</text>
|
<text class="item-label">选择业主</text>
|
||||||
<text class="item-placeholder"
|
<text class="item-placeholder"
|
||||||
:class="{selected: formData.owner}">{{ formData.owner || '请选择' }}</text>
|
:class="{selected: formData.owner}">{{ formData.owner || '请选择' }}</text>
|
||||||
<text class="item-arrow"></text>
|
<text class="item-arrow" v-if="checkStatus !== '1'"></text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|
||||||
<view class="form-item" @click="bindCarClick">
|
<view class="form-item" @click="bindCarClick">
|
||||||
<text class="item-label">绑定车辆</text>
|
<text class="item-label">绑定车辆</text>
|
||||||
@@ -100,6 +100,7 @@
|
|||||||
|
|
||||||
const id = ref(undefined)
|
const id = ref(undefined)
|
||||||
const type = ref('')
|
const type = ref('')
|
||||||
|
const checkStatus = ref('')
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
community: uni.getStorageSync('communityName'),
|
community: uni.getStorageSync('communityName'),
|
||||||
communityId: uni.getStorageSync('communityId'),
|
communityId: uni.getStorageSync('communityId'),
|
||||||
@@ -127,12 +128,13 @@
|
|||||||
formData.value.parkingSpaceNum = uni.getStorageSync('parkingSpaceName')
|
formData.value.parkingSpaceNum = uni.getStorageSync('parkingSpaceName')
|
||||||
formData.value.parkingSpaceId = uni.getStorageSync('parkingSpaceId')
|
formData.value.parkingSpaceId = uni.getStorageSync('parkingSpaceId')
|
||||||
formData.value.parkingStatus = uni.getStorageSync('parkingStatus') || '0',
|
formData.value.parkingStatus = uni.getStorageSync('parkingStatus') || '0',
|
||||||
formData.value.bindCar = uni.getStorageSync('bindCarName')
|
formData.value.bindCar = uni.getStorageSync('bindCarName')
|
||||||
formData.value.bindCarId = uni.getStorageSync('bindCarId')
|
formData.value.bindCarId = uni.getStorageSync('bindCarId')
|
||||||
formData.value.owner = uni.getStorageSync('ownerName')
|
formData.value.owner = uni.getStorageSync('ownerName')
|
||||||
formData.value.ownerId = uni.getStorageSync('ownerId')
|
formData.value.ownerId = uni.getStorageSync('ownerId')
|
||||||
})
|
})
|
||||||
onLoad((option) => {
|
onLoad((option) => {
|
||||||
|
checkStatus.value = option.checkStatus || ''
|
||||||
if (uni.getStorageSync('operationType') == 'update') {
|
if (uni.getStorageSync('operationType') == 'update') {
|
||||||
if (option.id) {
|
if (option.id) {
|
||||||
id.value = option.id
|
id.value = option.id
|
||||||
@@ -282,10 +284,10 @@
|
|||||||
formData.value.bindCarId = data.carId
|
formData.value.bindCarId = data.carId
|
||||||
uni.setStorageSync('bindCarId', data.carId)
|
uni.setStorageSync('bindCarId', data.carId)
|
||||||
|
|
||||||
formData.value.owner = data.ownerName
|
formData.value.owner = data.residentName
|
||||||
uni.setStorageSync('ownerName', data.ownerName)
|
uni.setStorageSync('ownerName', data.residentName)
|
||||||
formData.value.ownerId = data.ownerId
|
formData.value.ownerId = data.residentId
|
||||||
uni.setStorageSync('ownerId', data.ownerId)
|
uni.setStorageSync('ownerId', data.residentId)
|
||||||
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
@@ -304,6 +306,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const selectItem = (typeStr) => {
|
const selectItem = (typeStr) => {
|
||||||
|
// 修改模式下,小区、停车场、车位编号禁止修改
|
||||||
|
if (type.value === '修改' && (typeStr === '选择小区' || typeStr === '停车场' || typeStr === '车位编号')) {
|
||||||
|
return
|
||||||
|
}
|
||||||
if (typeStr === '选择小区') {
|
if (typeStr === '选择小区') {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pageSubPack/my/selectResidentialCommunity?sourcePage=addParkingSpace'
|
url: '/pageSubPack/my/selectResidentialCommunity?sourcePage=addParkingSpace'
|
||||||
@@ -340,6 +346,8 @@
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (typeStr === '选择业主') {
|
if (typeStr === '选择业主') {
|
||||||
|
// 审核通过后选择业主不可编辑
|
||||||
|
if (checkStatus.value === '1') return
|
||||||
if (!formData.value.community) {
|
if (!formData.value.community) {
|
||||||
return uni.showToast({
|
return uni.showToast({
|
||||||
title: '请先选择小区',
|
title: '请先选择小区',
|
||||||
@@ -347,7 +355,7 @@
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pageSubPack/my/selectOwner'
|
url: '/pageSubPack/my/selectOwner?ownerId=' + (formData.value.ownerId || '')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -392,6 +400,11 @@
|
|||||||
border-bottom: 1rpx solid #f0f0f0;
|
border-bottom: 1rpx solid #f0f0f0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form-item-disabled {
|
||||||
|
opacity: 0.5;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
.item-label {
|
.item-label {
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: #000;
|
color: #000;
|
||||||
@@ -485,4 +498,4 @@
|
|||||||
border-radius: 12rpx;
|
border-radius: 12rpx;
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -107,7 +107,8 @@
|
|||||||
<button v-if="currentStatus === 'fail'" class="btn-modify" @click="clickUpdate()">
|
<button v-if="currentStatus === 'fail'" class="btn-modify" @click="clickUpdate()">
|
||||||
修改
|
修改
|
||||||
</button>
|
</button>
|
||||||
<button class="btn-delete" :class="{ 'delete-only': currentStatus !== 'fail' }" @click="onDelete">
|
<button class="btn-delete" :class="{ 'delete-only': currentStatus !== 'fail' }"
|
||||||
|
@click="onDelete" v-if="certificationStatus !=='1' ">
|
||||||
删除
|
删除
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
@@ -141,6 +142,7 @@
|
|||||||
const currentStatus = ref('')
|
const currentStatus = ref('')
|
||||||
const stepList = ref(["房屋信息", "住户信息", "物业审核", "认证成功"])
|
const stepList = ref(["房屋信息", "住户信息", "物业审核", "认证成功"])
|
||||||
const form = ref([])
|
const form = ref([])
|
||||||
|
const certificationStatus = ref('') // 认证状态
|
||||||
const statusMap = ref({
|
const statusMap = ref({
|
||||||
success: {
|
success: {
|
||||||
title: "房屋认证成功",
|
title: "房屋认证成功",
|
||||||
@@ -184,16 +186,15 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
const getDetail = async () => {
|
const getDetail = async () => {
|
||||||
// 防重复请求
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await getMyHouseDetail({
|
const res = await getMyHouseDetail({
|
||||||
id: id.value
|
id: id.value
|
||||||
})
|
})
|
||||||
|
// const data =
|
||||||
const data = res.data
|
form.value = res.data
|
||||||
form.value = data
|
certificationStatus.value = form.value.certificationStatus
|
||||||
console.log(form.value);
|
console.log('详情数据',form.value);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: err.msg || '网络异常',
|
title: err.msg || '网络异常',
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="contentStyle" style="">
|
<view class="contentStyle" style="">
|
||||||
<view class="status-bar"></view>
|
|
||||||
<uni-nav-bar title="我的车辆" left-icon="left" @clickLeft="goBack" backgroundColor="transparent" :border="false">
|
|
||||||
</uni-nav-bar>
|
|
||||||
|
|
||||||
<scroll-view class="page" scroll-y="true" @scrolltolower="getList" refresher-enabled="true" :refresher-triggered="isRefreshing" @refresherrefresh="onRefresh">
|
<scroll-view class="page" scroll-y="true" @scrolltolower="getList" refresher-enabled="true" :refresher-triggered="isRefreshing" @refresherrefresh="onRefresh">
|
||||||
<view v-if="carList.length === 0" class="empty-state">
|
<view v-if="carList.length === 0" class="empty-state">
|
||||||
|
|||||||
@@ -1,20 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="contentStyle" style="">
|
<view class="contentStyle" style="">
|
||||||
<view class="status-bar"></view>
|
|
||||||
<uni-nav-bar title="我的房屋" left-icon="left" @clickLeft="goBack" backgroundColor="transparent" :border="false">
|
|
||||||
</uni-nav-bar>
|
|
||||||
<!-- -->
|
|
||||||
|
|
||||||
<pull-refresh-scroll
|
<scroll-view class="page" scroll-y :refresher-enabled="true" :refresher-triggered="isRefreshing" @refresherrefresh="onRefresh" @scrolltolower="loadMore">
|
||||||
custom-class="page"
|
|
||||||
:refreshing="isRefreshing"
|
|
||||||
:loading-more="loading"
|
|
||||||
:no-more-data="noMoreData"
|
|
||||||
:empty="houseList.length === 0"
|
|
||||||
empty-text="暂无数据"
|
|
||||||
@refresh="onRefresh"
|
|
||||||
@loadMore="loadMore"
|
|
||||||
>
|
|
||||||
<!-- 房屋列表 v-for 渲染 -->
|
<!-- 房屋列表 v-for 渲染 -->
|
||||||
<view class="house-list">
|
<view class="house-list">
|
||||||
<view class="house-card" v-for="(item, index) in houseList" :key="index" @click="tapHouse(item)">
|
<view class="house-card" v-for="(item, index) in houseList" :key="index" @click="tapHouse(item)">
|
||||||
@@ -54,7 +41,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</pull-refresh-scroll>
|
</scroll-view>
|
||||||
<!-- 底部添加按钮 -->
|
<!-- 底部添加按钮 -->
|
||||||
<view class="bottom-btn">
|
<view class="bottom-btn">
|
||||||
<button class="add-btn" @click="addHouse">添加房屋</button>
|
<button class="add-btn" @click="addHouse">添加房屋</button>
|
||||||
@@ -76,9 +63,7 @@
|
|||||||
getMyHouseList,
|
getMyHouseList,
|
||||||
setMyHouseDefault
|
setMyHouseDefault
|
||||||
} from '/pageSubPack/api/apiSub.js'
|
} from '/pageSubPack/api/apiSub.js'
|
||||||
import PullRefreshScroll from '/components/pull-refresh-scroll/pull-refresh-scroll.vue'
|
|
||||||
|
|
||||||
|
|
||||||
const houseList = ref([])
|
const houseList = ref([])
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const pageNum = ref(1)
|
const pageNum = ref(1)
|
||||||
@@ -86,7 +71,7 @@
|
|||||||
const noMoreData = ref(false)
|
const noMoreData = ref(false)
|
||||||
const isRefreshing = ref(false)
|
const isRefreshing = ref(false)
|
||||||
|
|
||||||
// ==================== 下拉刷新 ====================
|
// ==================== 下拉刷新 ====================
|
||||||
const onRefresh = () => {
|
const onRefresh = () => {
|
||||||
isRefreshing.value = true
|
isRefreshing.value = true
|
||||||
pageNum.value = 1
|
pageNum.value = 1
|
||||||
@@ -96,6 +81,11 @@
|
|||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onPullDownRefresh(() => {
|
||||||
|
onRefresh()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
// ==================== 获取列表数据 ====================
|
// ==================== 获取列表数据 ====================
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
if (loading.value) return
|
if (loading.value) return
|
||||||
@@ -123,9 +113,8 @@
|
|||||||
console.error('列表接口报错:', err)
|
console.error('列表接口报错:', err)
|
||||||
} finally {
|
} finally {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
if (isRefreshing.value) {
|
isRefreshing.value = false
|
||||||
isRefreshing.value = false
|
uni.stopPullDownRefresh()
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,22 +212,19 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
/* 关键:占满屏幕高度 */
|
/* 关键:固定高度,底部按钮不动 */
|
||||||
background-color: #f5f7fa;
|
background-color: #f5f7fa;
|
||||||
}
|
}
|
||||||
|
|
||||||
.page {
|
.page {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding: 0px 40rpx;
|
padding: 0px 40rpx 120rpx;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 列表 */
|
/* 列表 */
|
||||||
.house-list {
|
.house-list {
|
||||||
height: 100%;
|
|
||||||
overflow-y: scroll;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-card {
|
.house-card {
|
||||||
@@ -358,7 +344,12 @@
|
|||||||
|
|
||||||
|
|
||||||
.bottom-btn {
|
.bottom-btn {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
padding: 20rpx 30rpx 40rpx;
|
padding: 20rpx 30rpx 40rpx;
|
||||||
|
background-color: #f5f7fa;
|
||||||
}
|
}
|
||||||
|
|
||||||
.add-btn {
|
.add-btn {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="contentStyle">
|
<view class="contentStyle">
|
||||||
<view class="status-bar"></view>
|
<!-- <view class="status-bar"></view>
|
||||||
<uni-nav-bar title="我的车位" left-icon="left" @clickLeft="goBack" backgroundColor="transparent" :border="false">
|
<uni-nav-bar title="我的车位" left-icon="left" @clickLeft="goBack" backgroundColor="transparent" :border="false">
|
||||||
</uni-nav-bar>
|
</uni-nav-bar> -->
|
||||||
<scroll-view class="page" scroll-y="true" @scrolltolower="getList" refresher-enabled="true" :refresher-triggered="isRefreshing" @refresherrefresh="onRefresh">
|
<scroll-view class="page" scroll-y="true" @scrolltolower="getList" refresher-enabled="true" :refresher-triggered="isRefreshing" @refresherrefresh="onRefresh">
|
||||||
<view v-if="parkingSpaceList.length === 0" class="empty-state">
|
<view v-if="parkingSpaceList.length === 0" class="empty-state">
|
||||||
<uni-icons type="info" size="60" color="#ccc"></uni-icons>
|
<uni-icons type="info" size="60" color="#ccc"></uni-icons>
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
</view>
|
</view>
|
||||||
<view class="right">
|
<view class="right">
|
||||||
<image :src="item.carImageUrl?item.carImageUrl:'http://47.104.199.163:9090/images/propertyImgs/myParkingSpace.png'"
|
<image :src="item.carImageUrl?item.carImageUrl:'http://47.104.199.163:9090/images/propertyImgs/myParkingSpace.png'"
|
||||||
class="imgItem" mode="widthFix"></image>
|
class="imgItem" mode="aspectFill"></image>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -286,17 +286,22 @@
|
|||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: #333;
|
color: #333;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.value-box {
|
.value-box {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
min-width: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.value {
|
.value {
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: #666;
|
color: #666;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
|
|
||||||
.add-btn {
|
.add-btn {
|
||||||
@@ -310,13 +315,22 @@
|
|||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.left {}
|
.left {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
.right {
|
.right {
|
||||||
width: 42%;
|
width: 42%;
|
||||||
|
height: 180rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.imgItem {
|
.imgItem {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -109,6 +109,7 @@
|
|||||||
const statusBarHeight = ref(20)
|
const statusBarHeight = ref(20)
|
||||||
const id = ref(undefined)
|
const id = ref(undefined)
|
||||||
const currentStatus = ref('')
|
const currentStatus = ref('')
|
||||||
|
const checkStatus = ref('')
|
||||||
// parkingId
|
// parkingId
|
||||||
const form = ref({
|
const form = ref({
|
||||||
community: "",
|
community: "",
|
||||||
@@ -148,6 +149,7 @@
|
|||||||
onLoad((option) => {
|
onLoad((option) => {
|
||||||
console.log(option);
|
console.log(option);
|
||||||
id.value = option.id
|
id.value = option.id
|
||||||
|
checkStatus.value = option.statusClass || ''
|
||||||
currentStatus.value = option.statusClass == '0' ? 'pending' : option.statusClass == '1' ?
|
currentStatus.value = option.statusClass == '0' ? 'pending' : option.statusClass == '1' ?
|
||||||
'success' : option.statusClass == '2' ? 'fail' : ''
|
'success' : option.statusClass == '2' ? 'fail' : ''
|
||||||
loadParkingSpaceDetail()
|
loadParkingSpaceDetail()
|
||||||
@@ -219,7 +221,7 @@
|
|||||||
const onModify = () => {
|
const onModify = () => {
|
||||||
uni.setStorageSync('operationType', 'update')
|
uni.setStorageSync('operationType', 'update')
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pageSubPack/my/addParkingSpace?id=' + id.value + '&sourcePage=addParkingSpace'
|
url: '/pageSubPack/my/addParkingSpace?id=' + id.value + '&checkStatus=' + checkStatus.value + '&sourcePage=addParkingSpace'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
const selectedName = ref('')
|
const selectedName = ref('')
|
||||||
const selectedIndex = ref(-1)
|
const selectedIndex = ref(-1)
|
||||||
const ownerList = ref([])
|
const ownerList = ref([])
|
||||||
|
const presetOwnerId = ref('')
|
||||||
|
|
||||||
const loadingMore = ref(false)
|
const loadingMore = ref(false)
|
||||||
const noMoreData = ref(false)
|
const noMoreData = ref(false)
|
||||||
@@ -94,6 +95,8 @@
|
|||||||
|
|
||||||
if (pageNum.value === 1) {
|
if (pageNum.value === 1) {
|
||||||
ownerList.value = newList
|
ownerList.value = newList
|
||||||
|
// 预设选中已有业主
|
||||||
|
preselectOwner()
|
||||||
} else {
|
} else {
|
||||||
ownerList.value = [...ownerList.value, ...newList]
|
ownerList.value = [...ownerList.value, ...newList]
|
||||||
}
|
}
|
||||||
@@ -115,6 +118,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据传入的 ownerId 预设选中
|
||||||
|
const preselectOwner = () => {
|
||||||
|
if (!presetOwnerId.value) return
|
||||||
|
const idx = ownerList.value.findIndex(item => String(item.id) === String(presetOwnerId.value))
|
||||||
|
if (idx !== -1) {
|
||||||
|
selectedIndex.value = idx
|
||||||
|
selectedId.value = ownerList.value[idx].id
|
||||||
|
selectedName.value = ownerList.value[idx].name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 上拉加载更多
|
// 上拉加载更多
|
||||||
onReachBottom(() => {
|
onReachBottom(() => {
|
||||||
getList()
|
getList()
|
||||||
@@ -133,6 +147,9 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
// 页面加载时请求第一页
|
// 页面加载时请求第一页
|
||||||
|
onLoad((option) => {
|
||||||
|
presetOwnerId.value = option.ownerId || ""
|
||||||
|
})
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList()
|
getList()
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -296,6 +296,10 @@
|
|||||||
uni.removeStorageSync('currentVillageId')
|
uni.removeStorageSync('currentVillageId')
|
||||||
uni.removeStorageSync('home_cache_' + uid)
|
uni.removeStorageSync('home_cache_' + uid)
|
||||||
uni.removeStorageSync('home_cache')
|
uni.removeStorageSync('home_cache')
|
||||||
|
// 清除小区相关缓存,防止切换账号后显示上一个账号的小区和公告
|
||||||
|
uni.removeStorageSync('communityName')
|
||||||
|
uni.removeStorageSync('communityId')
|
||||||
|
uni.removeStorageSync('needReloadUserInfo')
|
||||||
uni.hideLoading()
|
uni.hideLoading()
|
||||||
uni.hideToast()
|
uni.hideToast()
|
||||||
uni.reLaunch({ url: '/pageSubPack/loginSub/login?mode=pwd' })
|
uni.reLaunch({ url: '/pageSubPack/loginSub/login?mode=pwd' })
|
||||||
|
|||||||
@@ -184,7 +184,7 @@
|
|||||||
|
|
||||||
weixin.launchMiniProgram({
|
weixin.launchMiniProgram({
|
||||||
id: 'gh_a765aef0172c',
|
id: 'gh_a765aef0172c',
|
||||||
type: 0, // 0 正式版 / 1测试版 / 2预览版
|
type: 1, // 0 正式版 / 1测试版 / 2预览版
|
||||||
path: 'pages/arrearsPayment/arrearsPayment?' + queryString,
|
path: 'pages/arrearsPayment/arrearsPayment?' + queryString,
|
||||||
}, (res) => {
|
}, (res) => {
|
||||||
console.log('回调---回调结果(App)', JSON.stringify(res))
|
console.log('回调---回调结果(App)', JSON.stringify(res))
|
||||||
|
|||||||
@@ -206,11 +206,12 @@ const handleBatchPay = () => {
|
|||||||
const query = [
|
const query = [
|
||||||
['acct', userId],
|
['acct', userId],
|
||||||
['orderType', '10'],
|
['orderType', '10'],
|
||||||
['billId', allIds.join(',')],
|
['billIds', allIds.join(',')],
|
||||||
['deviceType', '3'],
|
// ['deviceType', '3'],
|
||||||
['residentUserId', userId],
|
['residentUserId', userId],
|
||||||
['token', token]
|
['token', token]
|
||||||
].map(([k, v]) => encodeURIComponent(k) + '=' + encodeURIComponent(v)).join('&')
|
].map(([k, v]) => encodeURIComponent(k) + '=' + encodeURIComponent(v)).join('&')
|
||||||
|
console.log('往小程序传递的参数',query)
|
||||||
|
|
||||||
// #ifdef APP-PLUS
|
// #ifdef APP-PLUS
|
||||||
uni.showLoading({ title: '加载中...' })
|
uni.showLoading({ title: '加载中...' })
|
||||||
|
|||||||
@@ -45,8 +45,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
<!-- 物业费/垃圾处理费列表 -->
|
<!-- 物业费/垃圾处理费列表 -->
|
||||||
<!-- 物业费/垃圾处理费列表 -->
|
<scroll-view class="details-scroll-bill" scroll-y="true" @scrolltolower="onLoadMore">
|
||||||
<scroll-view class="details-scroll" scroll-y="true" @scrolltolower="onLoadMore">
|
|
||||||
<view class="bill-list">
|
<view class="bill-list">
|
||||||
<template v-if="detailslist.length != 0">
|
<template v-if="detailslist.length != 0">
|
||||||
<view class="bill-item" :class="{ 'bill-paid': !item.amount }" @click="!item.amount ? null : goToBill(item)" v-for="item,index in detailslist" :key="index">
|
<view class="bill-item" :class="{ 'bill-paid': !item.amount }" @click="!item.amount ? null : goToBill(item)" v-for="item,index in detailslist" :key="index">
|
||||||
@@ -446,13 +445,13 @@ page {
|
|||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
padding: 2rpx 10rpx;
|
padding: 4rpx 14rpx;
|
||||||
border-radius: 30rpx;
|
border-radius: 30rpx;
|
||||||
font-size: 14rpx;
|
font-size: 20rpx;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
margin-left: 10rpx;
|
margin-left: 10rpx;
|
||||||
line-height: 1.5;
|
line-height: 1.4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bill-status.debt {
|
.bill-status.debt {
|
||||||
@@ -473,8 +472,11 @@ page {
|
|||||||
|
|
||||||
.details-scroll {
|
.details-scroll {
|
||||||
max-height: 500rpx;
|
max-height: 500rpx;
|
||||||
margin-bottom: 40rpx;
|
padding: 0 0 20rpx 0;
|
||||||
padding: 20rpx 0;
|
}
|
||||||
|
.details-scroll-bill{
|
||||||
|
max-height: 500rpx;
|
||||||
|
padding: 0 0 40rpx 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load-more-status {
|
.load-more-status {
|
||||||
|
|||||||
@@ -63,7 +63,13 @@
|
|||||||
{
|
{
|
||||||
"path": "privacy",
|
"path": "privacy",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "用户隐私政策"
|
"navigationBarTitleText": "隐私政策"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "user-agreement",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "用户协议"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -253,8 +259,9 @@
|
|||||||
{
|
{
|
||||||
"path": "myHouseIndex",
|
"path": "myHouseIndex",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "",
|
"navigationBarTitleText": "我的房屋",
|
||||||
"navigationStyle": "custom"
|
"enablePullDownRefresh": true
|
||||||
|
// "navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -284,8 +291,9 @@
|
|||||||
}, {
|
}, {
|
||||||
"path": "myParkingSpaceIndex",
|
"path": "myParkingSpaceIndex",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "",
|
"navigationBarTitleText": "我的车位"
|
||||||
"navigationStyle": "custom"
|
// "enablePullDownRefresh ": true
|
||||||
|
// "navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -331,8 +339,7 @@
|
|||||||
{
|
{
|
||||||
"path": "myCarIndex",
|
"path": "myCarIndex",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "",
|
"navigationBarTitleText": "我的车辆"
|
||||||
"navigationStyle": "custom"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -380,13 +380,15 @@
|
|||||||
uni.reLaunch({ url: '/pages/navigation/navigation' })
|
uni.reLaunch({ url: '/pages/navigation/navigation' })
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 优先展示缓存数据,实现冷启动秒开
|
// 关闭原生 splash
|
||||||
loadHomeCache()
|
|
||||||
// 关闭原生 splash,避免 WebView 初始化期间一直转圈
|
|
||||||
// #ifdef APP-PLUS
|
// #ifdef APP-PLUS
|
||||||
try { plus.navigator.closeSplashscreen() } catch (e) {}
|
try { plus.navigator.closeSplashscreen() } catch (e) {}
|
||||||
// #endif
|
// #endif
|
||||||
// 后台静默刷新最新数据
|
// 优先展示缓存数据,实现冷启动秒开
|
||||||
|
const hasCache = loadHomeCache()
|
||||||
|
if (hasCache) {
|
||||||
|
pageReady.value = true
|
||||||
|
}
|
||||||
refreshAllData()
|
refreshAllData()
|
||||||
uni.$on('confirm', slelctHomeData)
|
uni.$on('confirm', slelctHomeData)
|
||||||
lastUserId.value = uni.getStorageSync('userId') || ''
|
lastUserId.value = uni.getStorageSync('userId') || ''
|
||||||
|
|||||||
Reference in New Issue
Block a user