优化内容加修复bug

This commit is contained in:
zhouyanli
2026-08-13 08:03:26 +08:00
parent f793e16263
commit 94146ce27a
23 changed files with 406 additions and 260 deletions

View File

@@ -19,6 +19,7 @@ export const PUBLIC_PATHS = [
'/pageSubPack/loginSub/forget-pwd',
'/pageSubPack/loginSub/change-pwd',
'/pageSubPack/loginSub/privacy',
'/pageSubPack/loginSub/user-agreement',
'/pages/navigation/navigation'
]

View File

@@ -2,8 +2,8 @@
"name" : "花开物业",
"appid" : "__UNI__29C3D60",
"description" : "智慧社区居民端面向小区业主使用,支持注册、验证码、账号密码多种登录方式,提供密码找回功能,账号使用安全便捷。支持多小区切换,首页设有轮播 banner、社区公告集成远程开门、生活缴费、在线报修、访客邀请、社区活动常用服务。全服务板块统一涵盖门禁开门、线上缴费、报修申报、访客预约、投诉反馈、问卷调研、活动报名、社区公示、一键联系物业功能。个人中心可管理房屋、住户、车位、车辆信息支持更换手机号、修改密码、消息通知设置、版本更新及账号退出一站式满足业主居家生活、社区服务、房产车辆管理需求实现社区生活数字化、便捷化。",
"versionName" : "1.0.9",
"versionCode" : 122,
"versionName" : "1.1.1",
"versionCode" : 124,
"transformPx" : false,
"uniCloud" : {
"provider" : "aliyun",

View File

@@ -19,7 +19,7 @@ export default function request(url, data = {}, method = "GET") {
const header = {
"clientid": "resident",
'content-type': 'application/json'
};
};
if (token) {
header["Authorization"] = "Bearer " + token;
}

View File

@@ -1,13 +1,5 @@
<template>
<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
@@ -94,8 +86,11 @@ const loadRevenue = async (isRefresh = false) => {
}
onShow(() =>{
if(isFirstShow.value) return
// loadRevenue(true)
if(isFirstShow.value) {
isFirstShow.value = false
return
}
loadRevenue(true)
})
const onRefresh = () => {
@@ -115,7 +110,6 @@ const narBack = () => {
}
onLoad(() => {
isFirstShow.value = false
uni.$on('noticeRead',updateReadStatus)
loadRevenue(true)
})
@@ -146,7 +140,7 @@ page {
height: 0; /* 让滚动区域生效 */
}
.list-wrap {
padding: 40rpx;
padding: 50rpx 40rpx;
}
.item {
background: #fff;

View File

@@ -99,12 +99,12 @@ const handleConfirm = () => {
},1500)
}else{
uni.showToast({ title: "修改失败", icon: 'error' });
uni.showToast({ title: "修改失败", icon: 'none' });
}
}).catch(err =>{
uni.showToast({
title: err.msg || '网络异常',
icon: 'error'
icon: 'none'
});
})

View File

@@ -87,13 +87,13 @@ const getVerifyCode = () => {
}else{
uni.showToast({
title: '验证码发送失败',
icon: 'error'
icon: 'none'
});
}
}).catch(err =>{
uni.showToast({
title: err.msg || '网络异常',
icon: 'error'
icon: 'none'
});
})

View File

@@ -40,9 +40,9 @@
<view class="input-icon">
<image src="https://wuyeadmin.bugtc.com/images/login/phone.png" mode="" style="height: 100%;width: 100%;"></image>
</view>
<input class="native-input" type="text" v-model="account"
placeholder="请输入帐号" maxlength="20" :placeholderStyle="placeholderStyle"
auto-capitalize="off" auto-correct="off" />
<uni-easyinput class="input-content" type="text" v-model="account"
placeholder="请输入帐号" :inputBorder="false" maxlength="20" :placeholderStyle="placeholderStyle">
</uni-easyinput>
</view>
<!-- 密码输入框 -->
@@ -50,9 +50,9 @@
<view class="input-icon">
<image src="https://wuyeadmin.bugtc.com/images/login/password.png" mode="" style="height: 100%;width: 100%;"></image>
</view>
<input class="native-input" type="password" v-model="password"
placeholder="请输入密码" maxlength="16" :placeholderStyle="placeholderStyle"
auto-capitalize="off" auto-correct="off" />
<uni-easyinput class="input-content" type="password" v-model="password"
placeholder="请输入密码" :inputBorder="false" maxlength="16" :placeholderStyle="placeholderStyle">
</uni-easyinput>
</view>
</template>
@@ -135,21 +135,11 @@ const canGetVerify = computed(() => {
const toggleAgreement = () => { agreeAgreement.value = !agreeAgreement.value }
const goToUserAgreement = () => {
// #ifdef APP-PLUS
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
uni.navigateTo({ url: '/pageSubPack/loginSub/user-agreement' })
}
const goToPrivacy = () => {
// #ifdef APP-PLUS
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/owner.html')
// #endif
// #ifdef H5
window.open('https://wuye.ckdzkj.com/parivw/owner.html')
// #endif
uni.navigateTo({ url: '/pageSubPack/loginSub/privacy' })
}
const openPrivacyPopup = (action) => {
@@ -263,10 +253,14 @@ const doLogin = () => {
const onLoginSuccess = (res) => {
if (res.code === 200 && res.data) {
// 换号登录时清除旧用户首页缓存,防止新用户看到旧用户的小区数据
// 换号登录时清除旧用户的所有缓存,防止新用户看到旧用户的小区数据和公告
const oldUserId = uni.getStorageSync('userId')
if (res.data.userId && String(oldUserId) !== String(res.data.userId)) {
uni.removeStorageSync('home_cache')
uni.removeStorageSync('home_cache_' + oldUserId)
uni.removeStorageSync('communityName')
uni.removeStorageSync('communityId')
uni.removeStorageSync('needReloadUserInfo')
}
uni.setStorageSync('token', res.data.token)
if (res.data.userId) { uni.setStorageSync('userId', res.data.userId) }
@@ -349,14 +343,6 @@ onUnmounted(() => {
height: 100%;
}
/* 原生输入框(账号/密码区分大小写) */
.native-input {
flex: 1;
font-size: 32rpx;
color: #333;
height: 88rpx;
line-height: 88rpx;
}
/* 深度覆盖 uni-easyinput 内部默认样式 */
.input-content :deep(.uni-easyinput__content) {

View File

@@ -1,169 +1,134 @@
<template>
<view class="privacy-page">
<!-- 协议内容 -->
<scroll-view class="privacy-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">
欢迎使用我们的产品/服务以下统称服务我们高度重视用户隐私保护
致力于为您提供安全可靠的服务体验本隐私政策旨在向您说明我们如何收集使用存储保护您的个人信息
以及您享有的相关权利请您在使用我们的服务前仔细阅读并理解本政策全部内容
一旦您使用我们的服务即视为您同意本政策的所有条款
我们收集的个人信息 为了向您提供更优质个性化的服务我们会根据服务功能的需要收集您主动提供或在使用服务过程中产生的个人信息
具体如下 您主动提供的信息 账户注册信息当您注册我们的账户时您可能需要提供姓名手机号码电子邮箱密码等信息用于身份验证账户登录及找回
服务相关信息根据您使用的具体服务您可能需要提供相关补充信息如使用客服咨询服务时提供问题描述及相关凭证使用交易类服务时提供收货地址支付相关信息等
自愿提交的信息您主动向我们反馈的意见建议或参与我们的问卷调查活动时提交的相关信息
若您通过第三方平台如微信支付宝QQ等登录我们的服务我们会根据您的授权
从第三方获取您的相关账户信息如昵称头像用于完成登录及账户绑定
我们不会获取第三方平台的其他未授权信息
欢迎使用我们的产品/服务以下统称"服务"我们高度重视用户隐私保护
致力于为您提供安全可靠的服务体验本隐私政策旨在向您说明我们如何收集使用存储保护您的个人信息
以及您享有的相关权利请您在使用我们的服务前仔细阅读并理解本政策全部内容
一旦您使用我们的服务即视为您同意本政策的所有条款
</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>
</scroll-view>
<!-- 底部同意按钮新增 -->
<!-- <view class="agree-btn-wrap" v-if="needAgree">
<button class="agree-btn" @click="agreePrivacy">同意隐私政策</button>
</view> -->
</view>
</template>
<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
// };
const goBack = () => {
uni.navigateBack({ delta: 1 })
}
</script>
<style scoped>
.privacy-page {
min-height: 100vh;
background-color: #f8f8f8;
}
/* 导航栏 */
.nav-bar {
height: 100vh;
display: flex;
align-items: center;
padding: 20rpx;
flex-direction: column;
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);
flex: 1;
overflow-y: auto;
}
.content-wrap {
padding: 30rpx;
}
.title {
font-size: 28rpx;
font-size: 32rpx;
font-weight: 600;
text-align: center;
margin-bottom: 40rpx;
margin-bottom: 24rpx;
color: #333;
}
.date-info {
text-align: center;
margin-bottom: 40rpx;
}
.date-item {
font-size: 24rpx;
color: #999;
line-height: 1.8;
}
.section {
margin-bottom: 30rpx;
padding: 0 20rpx;
}
.section-title {
font-size: 30rpx;
font-size: 28rpx;
font-weight: 500;
color: #333;
margin-bottom: 10rpx;
margin-bottom: 16rpx;
}
.section-text {
font-size: 28rpx;
line-height: 1.6;
font-size: 26rpx;
line-height: 1.8;
color: #666;
}
/* 同意按钮样式(新增) */
.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>
</style>

View File

@@ -188,21 +188,11 @@
};
const goToUserAgreement = () => {
// #ifdef APP-PLUS
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
uni.navigateTo({ url: '/pageSubPack/loginSub/user-agreement' })
}
const goToPrivacy = () => {
// #ifdef APP-PLUS
plus.runtime.openURL('https://wuye.ckdzkj.com/parivw/owner.html')
// #endif
// #ifdef H5
window.open('https://wuye.ckdzkj.com/parivw/owner.html')
// #endif
uni.navigateTo({ url: '/pageSubPack/loginSub/privacy' })
}
const checkForm = () => {};

View 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>

View File

@@ -7,11 +7,11 @@
<scroll-view class="page" scroll-y="true">
<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-placeholder"
:class="{selected: formData.community}">{{ formData.community || '请选择' }}</text>
<text class="item-arrow"></text>
<text class="item-arrow" v-if="type !== '修改'"></text>
</view>
<!-- <view class="form-item" @click="selectItem('绑定房屋')">
@@ -20,18 +20,18 @@
<text class="item-arrow"></text>
</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-placeholder"
:class="{selected: formData.parkingLot}">{{ formData.parkingLot || '请选择' }}</text>
<text class="item-arrow"></text>
<text class="item-arrow" v-if="type !== '修改'"></text>
</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-placeholder"
:class="{selected: formData.parkingSpaceNum}">{{ formData.parkingSpaceNum || '请选择' }}</text>
<text class="item-arrow"></text>
<text class="item-arrow" v-if="type !== '修改'"></text>
</view>
<view class="form-item">
@@ -54,13 +54,13 @@
</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-placeholder"
:class="{selected: formData.owner}">{{ formData.owner || '请选择' }}</text>
<text class="item-arrow"></text>
<text class="item-arrow" v-if="checkStatus !== '1'"></text>
</view>
<view class="form-item" @click="bindCarClick">
<text class="item-label">绑定车辆</text>
@@ -100,6 +100,7 @@
const id = ref(undefined)
const type = ref('')
const checkStatus = ref('')
const formData = ref({
community: uni.getStorageSync('communityName'),
communityId: uni.getStorageSync('communityId'),
@@ -127,12 +128,13 @@
formData.value.parkingSpaceNum = uni.getStorageSync('parkingSpaceName')
formData.value.parkingSpaceId = uni.getStorageSync('parkingSpaceId')
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.owner = uni.getStorageSync('ownerName')
formData.value.ownerId = uni.getStorageSync('ownerId')
})
onLoad((option) => {
checkStatus.value = option.checkStatus || ''
if (uni.getStorageSync('operationType') == 'update') {
if (option.id) {
id.value = option.id
@@ -282,10 +284,10 @@
formData.value.bindCarId = data.carId
uni.setStorageSync('bindCarId', data.carId)
formData.value.owner = data.ownerName
uni.setStorageSync('ownerName', data.ownerName)
formData.value.ownerId = data.ownerId
uni.setStorageSync('ownerId', data.ownerId)
formData.value.owner = data.residentName
uni.setStorageSync('ownerName', data.residentName)
formData.value.ownerId = data.residentId
uni.setStorageSync('ownerId', data.residentId)
} catch (err) {
uni.showToast({
@@ -304,6 +306,10 @@
}
const selectItem = (typeStr) => {
// 修改模式下,小区、停车场、车位编号禁止修改
if (type.value === '修改' && (typeStr === '选择小区' || typeStr === '停车场' || typeStr === '车位编号')) {
return
}
if (typeStr === '选择小区') {
uni.navigateTo({
url: '/pageSubPack/my/selectResidentialCommunity?sourcePage=addParkingSpace'
@@ -340,6 +346,8 @@
})
}
if (typeStr === '选择业主') {
// 审核通过后选择业主不可编辑
if (checkStatus.value === '1') return
if (!formData.value.community) {
return uni.showToast({
title: '请先选择小区',
@@ -347,7 +355,7 @@
})
}
uni.navigateTo({
url: '/pageSubPack/my/selectOwner'
url: '/pageSubPack/my/selectOwner?ownerId=' + (formData.value.ownerId || '')
})
}
}
@@ -392,6 +400,11 @@
border-bottom: 1rpx solid #f0f0f0;
}
.form-item-disabled {
opacity: 0.5;
pointer-events: none;
}
.item-label {
font-size: 28rpx;
color: #000;
@@ -485,4 +498,4 @@
border-radius: 12rpx;
border: none;
}
</style>
</style>

View File

@@ -107,7 +107,8 @@
<button v-if="currentStatus === 'fail'" class="btn-modify" @click="clickUpdate()">
修改
</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>
</view>
@@ -141,6 +142,7 @@
const currentStatus = ref('')
const stepList = ref(["房屋信息", "住户信息", "物业审核", "认证成功"])
const form = ref([])
const certificationStatus = ref('') // 认证状态
const statusMap = ref({
success: {
title: "房屋认证成功",
@@ -184,16 +186,15 @@
})
const getDetail = async () => {
// 防重复请求
try {
const res = await getMyHouseDetail({
id: id.value
})
const data = res.data
form.value = data
console.log(form.value);
// const data =
form.value = res.data
certificationStatus.value = form.value.certificationStatus
console.log('详情数据',form.value);
} catch (err) {
uni.showToast({
title: err.msg || '网络异常',

View File

@@ -1,8 +1,5 @@
<template>
<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">
<view v-if="carList.length === 0" class="empty-state">

View File

@@ -1,20 +1,7 @@
<template>
<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
custom-class="page"
:refreshing="isRefreshing"
:loading-more="loading"
:no-more-data="noMoreData"
:empty="houseList.length === 0"
empty-text="暂无数据"
@refresh="onRefresh"
@loadMore="loadMore"
>
<scroll-view class="page" scroll-y :refresher-enabled="true" :refresher-triggered="isRefreshing" @refresherrefresh="onRefresh" @scrolltolower="loadMore">
<!-- 房屋列表 v-for 渲染 -->
<view class="house-list">
<view class="house-card" v-for="(item, index) in houseList" :key="index" @click="tapHouse(item)">
@@ -54,7 +41,7 @@
</view>
</view>
</view>
</pull-refresh-scroll>
</scroll-view>
<!-- 底部添加按钮 -->
<view class="bottom-btn">
<button class="add-btn" @click="addHouse">添加房屋</button>
@@ -76,9 +63,7 @@
getMyHouseList,
setMyHouseDefault
} from '/pageSubPack/api/apiSub.js'
import PullRefreshScroll from '/components/pull-refresh-scroll/pull-refresh-scroll.vue'
const houseList = ref([])
const loading = ref(false)
const pageNum = ref(1)
@@ -86,7 +71,7 @@
const noMoreData = ref(false)
const isRefreshing = ref(false)
// ==================== 下拉刷新 ====================
// ==================== 下拉刷新 ====================
const onRefresh = () => {
isRefreshing.value = true
pageNum.value = 1
@@ -96,6 +81,11 @@
getList()
}
onPullDownRefresh(() => {
onRefresh()
})
// ==================== 获取列表数据 ====================
const getList = async () => {
if (loading.value) return
@@ -123,9 +113,8 @@
console.error('列表接口报错:', err)
} finally {
loading.value = false
if (isRefreshing.value) {
isRefreshing.value = false
}
isRefreshing.value = false
uni.stopPullDownRefresh()
}
}
@@ -223,22 +212,19 @@
display: flex;
flex-direction: column;
height: 100vh;
/* 关键:占满屏幕高度 */
/* 关键:固定高度,底部按钮不动 */
background-color: #f5f7fa;
}
.page {
flex: 1;
overflow-y: auto;
padding: 0px 40rpx;
padding: 0px 40rpx 120rpx;
box-sizing: border-box;
}
/* 列表 */
.house-list {
height: 100%;
overflow-y: scroll;
}
.house-card {
@@ -358,7 +344,12 @@
.bottom-btn {
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding: 20rpx 30rpx 40rpx;
background-color: #f5f7fa;
}
.add-btn {

View File

@@ -1,8 +1,8 @@
<template>
<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>
</uni-nav-bar> -->
<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">
<uni-icons type="info" size="60" color="#ccc"></uni-icons>
@@ -49,7 +49,7 @@
</view>
<view class="right">
<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>
@@ -286,17 +286,22 @@
font-size: 28rpx;
font-weight: 600;
color: #333;
flex-shrink: 0;
}
.value-box {
flex: 1;
display: flex;
justify-content: space-between;
min-width: 0;
}
.value {
font-size: 28rpx;
color: #666;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.add-btn {
@@ -310,13 +315,22 @@
border: none;
}
.left {}
.left {
flex: 1;
min-width: 0;
overflow: hidden;
}
.right {
width: 42%;
height: 180rpx;
border-radius: 8rpx;
overflow: hidden;
flex-shrink: 0;
}
.imgItem {
width: 100%;
height: 100%;
}
</style>

View File

@@ -109,6 +109,7 @@
const statusBarHeight = ref(20)
const id = ref(undefined)
const currentStatus = ref('')
const checkStatus = ref('')
// parkingId
const form = ref({
community: "",
@@ -148,6 +149,7 @@
onLoad((option) => {
console.log(option);
id.value = option.id
checkStatus.value = option.statusClass || ''
currentStatus.value = option.statusClass == '0' ? 'pending' : option.statusClass == '1' ?
'success' : option.statusClass == '2' ? 'fail' : ''
loadParkingSpaceDetail()
@@ -219,7 +221,7 @@
const onModify = () => {
uni.setStorageSync('operationType', 'update')
uni.navigateTo({
url: '/pageSubPack/my/addParkingSpace?id=' + id.value + '&sourcePage=addParkingSpace'
url: '/pageSubPack/my/addParkingSpace?id=' + id.value + '&checkStatus=' + checkStatus.value + '&sourcePage=addParkingSpace'
})
}

View File

@@ -56,6 +56,7 @@
const selectedName = ref('')
const selectedIndex = ref(-1)
const ownerList = ref([])
const presetOwnerId = ref('')
const loadingMore = ref(false)
const noMoreData = ref(false)
@@ -94,6 +95,8 @@
if (pageNum.value === 1) {
ownerList.value = newList
// 预设选中已有业主
preselectOwner()
} else {
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(() => {
getList()
@@ -133,6 +147,9 @@
})
// 页面加载时请求第一页
onLoad((option) => {
presetOwnerId.value = option.ownerId || ""
})
onMounted(() => {
getList()
})

View File

@@ -296,6 +296,10 @@
uni.removeStorageSync('currentVillageId')
uni.removeStorageSync('home_cache_' + uid)
uni.removeStorageSync('home_cache')
// 清除小区相关缓存,防止切换账号后显示上一个账号的小区和公告
uni.removeStorageSync('communityName')
uni.removeStorageSync('communityId')
uni.removeStorageSync('needReloadUserInfo')
uni.hideLoading()
uni.hideToast()
uni.reLaunch({ url: '/pageSubPack/loginSub/login?mode=pwd' })

View File

@@ -184,7 +184,7 @@
weixin.launchMiniProgram({
id: 'gh_a765aef0172c',
type: 0, // 0 正式版 / 1测试版 / 2预览版
type: 1, // 0 正式版 / 1测试版 / 2预览版
path: 'pages/arrearsPayment/arrearsPayment?' + queryString,
}, (res) => {
console.log('回调---回调结果App', JSON.stringify(res))

View File

@@ -206,11 +206,12 @@ const handleBatchPay = () => {
const query = [
['acct', userId],
['orderType', '10'],
['billId', allIds.join(',')],
['deviceType', '3'],
['billIds', allIds.join(',')],
// ['deviceType', '3'],
['residentUserId', userId],
['token', token]
].map(([k, v]) => encodeURIComponent(k) + '=' + encodeURIComponent(v)).join('&')
console.log('往小程序传递的参数',query)
// #ifdef APP-PLUS
uni.showLoading({ title: '加载中...' })

View File

@@ -45,8 +45,7 @@
</view>
</scroll-view>
<!-- 物业费/垃圾处理费列表 -->
<!-- 物业费/垃圾处理费列表 -->
<scroll-view class="details-scroll" scroll-y="true" @scrolltolower="onLoadMore">
<scroll-view class="details-scroll-bill" scroll-y="true" @scrolltolower="onLoadMore">
<view class="bill-list">
<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">
@@ -446,13 +445,13 @@ page {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 2rpx 10rpx;
padding: 4rpx 14rpx;
border-radius: 30rpx;
font-size: 14rpx;
font-size: 20rpx;
font-weight: 500;
color: #fff;
margin-left: 10rpx;
line-height: 1.5;
line-height: 1.4;
}
.bill-status.debt {
@@ -473,8 +472,11 @@ page {
.details-scroll {
max-height: 500rpx;
margin-bottom: 40rpx;
padding: 20rpx 0;
padding: 0 0 20rpx 0;
}
.details-scroll-bill{
max-height: 500rpx;
padding: 0 0 40rpx 0;
}
.load-more-status {

View File

@@ -63,7 +63,13 @@
{
"path": "privacy",
"style": {
"navigationBarTitleText": "用户隐私政策"
"navigationBarTitleText": "隐私政策"
}
},
{
"path": "user-agreement",
"style": {
"navigationBarTitleText": "用户协议"
}
}
]
@@ -253,8 +259,9 @@
{
"path": "myHouseIndex",
"style": {
"navigationBarTitleText": "",
"navigationStyle": "custom"
"navigationBarTitleText": "我的房屋",
"enablePullDownRefresh": true
// "navigationStyle": "custom"
}
},
{
@@ -284,8 +291,9 @@
}, {
"path": "myParkingSpaceIndex",
"style": {
"navigationBarTitleText": "",
"navigationStyle": "custom"
"navigationBarTitleText": "我的车位"
// "enablePullDownRefresh ": true
// "navigationStyle": "custom"
}
},
{
@@ -331,8 +339,7 @@
{
"path": "myCarIndex",
"style": {
"navigationBarTitleText": "",
"navigationStyle": "custom"
"navigationBarTitleText": "我的车辆"
}

View File

@@ -380,13 +380,15 @@
uni.reLaunch({ url: '/pages/navigation/navigation' })
return
}
// 优先展示缓存数据,实现冷启动秒开
loadHomeCache()
// 关闭原生 splash避免 WebView 初始化期间一直转圈
// 关闭原生 splash
// #ifdef APP-PLUS
try { plus.navigator.closeSplashscreen() } catch (e) {}
// #endif
// 后台静默刷新最新数据
// 优先展示缓存数据,实现冷启动秒开
const hasCache = loadHomeCache()
if (hasCache) {
pageReady.value = true
}
refreshAllData()
uni.$on('confirm', slelctHomeData)
lastUserId.value = uni.getStorageSync('userId') || ''