修复已知bug

This commit is contained in:
zhouyanli
2026-07-21 09:41:54 +08:00
parent 7b1864f439
commit e68579a5d3
15 changed files with 1143 additions and 839 deletions

View File

@@ -17,19 +17,20 @@
getPushCID() getPushCID()
// #endif // #endif
// 自动登录:检查本地是否已有 token有则直接跳转首页 // 首页已是入口页:已登录用户不做跳转,直接留首页
// 仅对未登录用户按需跳转到引导页或登录页
const token = uni.getStorageSync('token') const token = uni.getStorageSync('token')
const hasShowGuide = uni.getStorageSync('hasShowGuide') const hasShowGuide = uni.getStorageSync('hasShowGuide')
if (token) { if (!token && !hasShowGuide) {
// 已有登录凭证,直接进入首 // 首次使用:跳转引导
console.log('检测到已登录,跳转页') console.log('首次启动,跳转引导页')
uni.reLaunch({ url: '/pages/index/index' }) uni.reLaunch({ url: '/pages/navigation/navigation' })
} else if (hasShowGuide) { } else if (!token && hasShowGuide) {
// 已看过引导页但没有 token直接跳转登录页 // 已看过引导但未登录:跳转登录页
console.log('已看过引导页,跳转登录页') console.log('已看过引导页,跳转登录页')
uni.reLaunch({ url: '/pageSubPack/loginSub/pwd-login' }) uni.reLaunch({ url: '/pageSubPack/loginSub/pwd-login' })
} }
// 否则停留在引导页navigation // 有 token已在首页不做跳转
}) })
onShow(() =>{ onShow(() =>{
console.log('App Show') console.log('App Show')

View File

@@ -3,7 +3,7 @@
"appid" : "__UNI__29C3D60", "appid" : "__UNI__29C3D60",
"description" : "智慧社区居民端面向小区业主使用,支持注册、验证码、账号密码多种登录方式,提供密码找回功能,账号使用安全便捷。支持多小区切换,首页设有轮播 banner、社区公告集成远程开门、生活缴费、在线报修、访客邀请、社区活动常用服务。全服务板块统一涵盖门禁开门、线上缴费、报修申报、访客预约、投诉反馈、问卷调研、活动报名、社区公示、一键联系物业功能。个人中心可管理房屋、住户、车位、车辆信息支持更换手机号、修改密码、消息通知设置、版本更新及账号退出一站式满足业主居家生活、社区服务、房产车辆管理需求实现社区生活数字化、便捷化。", "description" : "智慧社区居民端面向小区业主使用,支持注册、验证码、账号密码多种登录方式,提供密码找回功能,账号使用安全便捷。支持多小区切换,首页设有轮播 banner、社区公告集成远程开门、生活缴费、在线报修、访客邀请、社区活动常用服务。全服务板块统一涵盖门禁开门、线上缴费、报修申报、访客预约、投诉反馈、问卷调研、活动报名、社区公示、一键联系物业功能。个人中心可管理房屋、住户、车位、车辆信息支持更换手机号、修改密码、消息通知设置、版本更新及账号退出一站式满足业主居家生活、社区服务、房产车辆管理需求实现社区生活数字化、便捷化。",
"versionName" : "1.0.1", "versionName" : "1.0.1",
"versionCode" : 111, "versionCode" : 114,
"transformPx" : false, "transformPx" : false,
"uniCloud" : { "uniCloud" : {
"provider" : "aliyun", "provider" : "aliyun",
@@ -110,7 +110,7 @@
}, },
"share" : { "share" : {
"weixin" : { "weixin" : {
"appid" : "wx2255a0821859ef43", "appid" : "wx84b02b2ec80715f4",
"UniversalLinks" : "https://verification.ckdzkj.com/uni-universallinks/__UNI__29C3D60/" "UniversalLinks" : "https://verification.ckdzkj.com/uni-universallinks/__UNI__29C3D60/"
} }
}, },
@@ -172,7 +172,7 @@
"setting" : { "setting" : {
"urlCheck" : false "urlCheck" : false
}, },
"navigateToMiniProgramAppIdList" : [ "00004951" ], "navigateToMiniProgramAppIdList" : [ "wxc0189436c58b59cd" ],
"requiredPrivateInfos" : [ "chooseLocation", "getLocation" ], "requiredPrivateInfos" : [ "chooseLocation", "getLocation" ],
"permission" : { "permission" : {
"scope.camera" : { "scope.camera" : {

View File

@@ -259,3 +259,13 @@ export const checkAppUpdate = (data) => {
export const postUpdateLog = (data) => { export const postUpdateLog = (data) => {
return post(`/api/app/updateLog`, data) return post(`/api/app/updateLog`, data)
} }
// ===========巡检记录========
// 列表
export const getInspectionList = (data) =>{
return get('/api/resident/inspection/list',data)
}
// 详情
export const inspectionDetails = (data) =>{
return get(`/api/resident/inspection/${data.id}`,data)
}

View File

@@ -1,5 +1,5 @@
// 服务器地址(与 request.js 保持一致) // 服务器地址(与 request.js 保持一致)
const baseUrl = 'http://192.168.1.222:8080'; const baseUrl = 'https://wuyeapi.ckdzkj.com';
/** /**
* 图片上传 Hook * 图片上传 Hook

View File

@@ -1,46 +1,66 @@
<template> <template>
<view class="page"> <view class="page">
<view class="status-bar" :style="{ height: statusBarHeight + 'px' }"></view>
<uni-nav-bar title="巡检详情" backgroundColor="transparent" :border="false" left-icon="left"
@click-left="goBack" />
<scroll-view scroll-y class="scroll"> <scroll-view scroll-y class="scroll">
<!-- 第一块信息卡片 --> <!-- 加载中 -->
<view class="card"> <view class="loading-wrap" v-if="loading">
<view class="row-title"> <uni-load-more status="loading" :content-text="{ contentdown: '上拉加载更多', contentrefresh: '加载中...', contentnomore: '没有更多了' }" />
<text>幸福苑小区1号楼1单元电梯间</text>
<text class="status">已巡检</text>
</view>
<view class="text-item">巡检项目设备巡检</view>
<view class="text-item">巡检时间07:00:00 09:00:00</view>
<view class="text-item">巡检小区幸福苑小区</view>
<view class="text-item">巡检路线常规巡检路线1</view>
<view class="text-item">巡检点安全出口1号巡检点2巡检点3</view>
</view> </view>
<!-- 第二块巡检结果卡片 --> <template v-if="!loading && detail">
<!-- 第一块基本信息 -->
<view class="card">
<view class="row-title">
<text>{{ detail.locationName }}</text>
<text class="status">{{ detail.status }}</text>
</view>
<view class="text-item">巡检项目{{ detail.inspectionType }}</view>
<view class="text-item">巡检时间{{ detail.taskTime }}</view>
<view class="text-item">巡检小区{{ detail.villageName }}</view>
<view class="text-item">巡检路线{{ detail.routeName }}</view>
<view class="text-item">巡检点{{ detail.pointNames }}</view>
</view>
<!-- 第二块巡检结果 -->
<view class="card"> <view class="card">
<view class="card-subtitle">巡检结果</view> <view class="card-subtitle">巡检结果</view>
<view class="text-item">巡检人李祥龙</view> <view class="text-item">巡检人{{ detail.inspectorName }}</view>
<view class="text-item">手机号码13013001300</view> <view class="text-item">手机号码{{ detail.phoneNumber }}</view>
<view class="text-item">巡检时间2026-10-25 08:10:10</view> <view class="text-item">巡检时间{{ detail.inspectTime }}</view>
<view class="text-item">巡检结果</view> <view class="text-item">巡检结果</view>
<view class="result-desc"> <view class="result-desc">
<text>1.设备正常无任何异动和意向</text> <text v-for="(r, idx) in detail.results" :key="idx">{{ idx + 1 }}.{{ r }}</text>
<text>2.电力系统正常无故障提示</text>
<text>3.设备使用正常无异常提示</text>
</view> </view>
<view class="text-item">巡检照片</view> <view class="text-item">巡检照片</view>
<!-- 图片区域 flex自动换行 -->
<view class="img-wrap"> <view class="img-wrap">
<view <view class="img-box" v-for="(img, idx) in detail.photos" :key="idx" @click="previewImage(img)">
class="img-box" <image class="img" :src="img" mode="aspectFill"></image>
v-for="(img, idx) in imgList" </view>
:key="idx" <view class="empty-img-tip" v-if="!detail.photos || detail.photos.length === 0">暂无照片</view>
>
<image
class="img"
:src="img"
mode="aspectFill"
></image>
</view> </view>
</view> </view>
<!-- 第三块巡检明细列表 -->
<view class="card" v-for="(sub, idx) in detail.details" :key="sub.id">
<view class="card-subtitle">{{ sub.pointName }}</view>
<view class="text-item">巡检时间{{ sub.checkTime }}</view>
<view class="text-item">巡检结果{{ sub.checkResult }}</view>
<view class="text-item" v-if="sub.remark">备注{{ sub.remark }}</view>
<view class="text-item" v-if="sub.photos">巡检照片</view>
<view class="img-wrap" v-if="sub.photos">
<view class="img-box" v-for="(img, i) in sub.photos.split(',')" :key="i" @click="previewImage(img)">
<image class="img" :src="img" mode="aspectFill"></image>
</view>
</view>
</view>
</template>
<!-- 加载失败 -->
<view class="error-wrap" v-if="!loading && !detail">
<text class="empty-text">数据加载失败</text>
<view class="retry-btn" @click="fetchDetail">点击重试</view>
</view> </view>
</scroll-view> </scroll-view>
</view> </view>
@@ -48,32 +68,90 @@
<script setup> <script setup>
import { ref } from 'vue' import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { inspectionDetails } from '../api/apiSub.js'
// 图片列表,空图片占位,真实环境替换成接口图片地址 const statusBarHeight = ref(uni.getSystemInfoSync().statusBarHeight || 0)
const imgList = ref([ const loading = ref(false)
'', const detail = ref(null)
'', let recordId = ''
'',
'' onLoad((options) => {
]) if (options.id) {
recordId = options.id
fetchDetail()
}
})
const fetchDetail = async () => {
if (!recordId) return
loading.value = true
detail.value = null
try {
const res = await inspectionDetails({ id: recordId })
if (res.code === 200) {
detail.value = res.data
} else {
uni.showToast({ title: res.msg || '获取详情失败', icon: 'none' })
}
} catch (err) {
console.error('获取巡检详情失败', err)
uni.showToast({ title: '网络异常,请重试', icon: 'none' })
} finally {
loading.value = false
}
}
const goBack = () => {
uni.navigateBack()
}
const previewImage = (url) => {
if (!url) return
// 收集当前所有可预览图片
const allPhotos = []
if (detail.value.photos) allPhotos.push(...detail.value.photos)
if (detail.value.details) {
detail.value.details.forEach(d => {
if (d.photos) allPhotos.push(...d.photos.split(','))
})
}
uni.previewImage({
current: url,
urls: allPhotos
})
}
</script> </script>
<style scoped> <style scoped>
page { page {
background-color: #f7f8fa; background-color: #f7f8fa;
} }
.status-bar {
width: 100%;
flex-shrink: 0;
}
.page { .page {
padding: 24rpx;
}
.scroll {
height: 100vh; height: 100vh;
display: flex;
flex-direction: column;
} }
.scroll {
flex: 1;
padding: 24rpx;
box-sizing: border-box;
}
.card { .card {
background: #fff; background: #fff;
border-radius: 20rpx; border-radius: 20rpx;
padding: 36rpx; padding: 36rpx;
margin-bottom: 24rpx; margin-bottom: 24rpx;
} }
.row-title { .row-title {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -81,21 +159,25 @@ page {
color: #222; color: #222;
margin-bottom: 24rpx; margin-bottom: 24rpx;
} }
.status { .status {
font-size: 24rpx; font-size: 24rpx;
color: #555; color: #555;
} }
.card-subtitle { .card-subtitle {
font-size: 32rpx; font-size: 32rpx;
font-weight: 500; font-weight: 500;
color: #222; color: #222;
margin-bottom: 24rpx; margin-bottom: 24rpx;
} }
.text-item { .text-item {
font-size: 28rpx; font-size: 28rpx;
color: #333; color: #333;
line-height: 2; line-height: 2;
} }
.result-desc { .result-desc {
font-size: 28rpx; font-size: 28rpx;
color: #333; color: #333;
@@ -104,6 +186,7 @@ page {
line-height: 1.8; line-height: 1.8;
margin: 12rpx 0; margin: 12rpx 0;
} }
/* 图片容器 flex-wrap换行 */ /* 图片容器 flex-wrap换行 */
.img-wrap { .img-wrap {
margin-top: 16rpx; margin-top: 16rpx;
@@ -111,14 +194,47 @@ page {
flex-wrap: wrap; flex-wrap: wrap;
gap: 16rpx; gap: 16rpx;
} }
.img-box { .img-box {
width: 140rpx; width: 140rpx;
height: 140rpx; height: 140rpx;
background-color: #d8d9db; background-color: #d8d9db;
border-radius: 8rpx; border-radius: 8rpx;
overflow: hidden;
} }
.img { .img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.empty-img-tip {
font-size: 26rpx;
color: #999;
}
.loading-wrap {
padding-top: 200rpx;
}
.error-wrap {
display: flex;
flex-direction: column;
align-items: center;
padding-top: 200rpx;
}
.empty-text {
font-size: 28rpx;
color: #999;
}
.retry-btn {
margin-top: 24rpx;
padding: 12rpx 48rpx;
border: 2rpx solid #2F77FD;
border-radius: 8rpx;
color: #2F77FD;
font-size: 28rpx;
}
</style> </style>

View File

@@ -1,6 +1,6 @@
<template> <template>
<view class="contentStyle"> <view class="contentStyle">
<view class="status-bar"></view> <view class="status-bar" :style="{ height: statusBarHeight + 'px' }"></view>
<uni-nav-bar title="巡检记录" backgroundColor="transparent" :border="false" left-icon="left" @click-left="goBack" /> <uni-nav-bar title="巡检记录" backgroundColor="transparent" :border="false" left-icon="left" @click-left="goBack" />
<view class="content-wrap"> <view class="content-wrap">
<!-- 时间选择器 --> <!-- 时间选择器 -->
@@ -19,17 +19,22 @@
</view> </view>
<!-- 巡检列表 --> <!-- 巡检列表 -->
<scroll-view scroll-y class="scroll-view"> <scroll-view scroll-y class="scroll-view">
<view class="list-container" @click="goToInspectionDetail"> <view class="list-container" v-if="listData.length > 0">
<view class="card-item" v-for="(item, index) in listData" :key="index"> <view class="card-item" v-for="(item, index) in listData" :key="index" @click="goToInspectionDetail(item)">
<view class="card-head"> <view class="card-head">
<text class="address">{{ item.address }}</text> <text class="address">{{ item.locationName }}</text>
<text class="status">{{ item.status }}</text> <text class="status">{{ item.status }}</text>
</view> </view>
<view class="tag-label">{{ item.type }}</view> <view class="tag-label">{{ item.inspectionType }}</view>
<view class="text-row">巡检时间{{ item.time }}</view> <view class="text-row">巡检时间{{ item.executeDate }}</view>
<view class="text-row">巡检人{{ item.inspector }}</view> <view class="text-row">巡检人{{ item.inspectorName }}</view>
</view> </view>
</view> </view>
<!-- 暂无数据 -->
<view class="empty-wrap" v-if="!loading && listData.length === 0">
<uni-icons type="info" size="30" color="#ccc"></uni-icons>
<text class="empty-text">暂无数据</text>
</view>
</scroll-view> </scroll-view>
</view> </view>
@@ -37,51 +42,117 @@
</template> </template>
<script setup> <script setup>
import { import {ref} from 'vue'
ref import {onLoad,onReachBottom,onPullDownRefresh} from '@dcloudio/uni-app'
} from 'vue'; import {getInspectionList} from '../api/apiSub.js'
import moment from 'moment' // 新增
// ---------- 基础状态 ----------
const datetime = ref('') const datetime = ref('')
const showDate = ref('选择日期') const showDate = ref('选择日期')
const listData = ref([ const listData = ref([])
{ const statusBarHeight = ref(uni.getSystemInfoSync().statusBarHeight || 0)
address: '幸福苑小区1号楼1单元电梯间',
status: '已巡检', // ---------- 分页状态 ----------
type: '设备巡检', const pageNum = ref(1)
time: '07:00:00 09:00:00', const pageSize = ref(10)
inspector: '李祥龙' const total = ref(0)
}, const loading = ref(false)
{ const noMore = ref(false)
address: '幸福苑小区1号楼1单元电梯间',
status: '已巡检', // ---------- 初始化 ----------
type: '设备巡检', onLoad(() => {
time: '07:00:00 09:00:00', // 使用 moment 格式化今天
inspector: '李祥龙' const today = moment().format('YYYY-MM-DD')
datetime.value = today
showDate.value = moment().format('MM-DD') // 显示 MM-DD
fetchList(true)
})
// ---------- 获取列表 ----------
const fetchList = async (reset = false) => {
if (loading.value) return
if (!reset && noMore.value) return
loading.value = true
try {
const params = {
date: datetime.value, // 已经是 YYYY-MM-DD
pageNum: reset ? 1 : pageNum.value,
pageSize: pageSize.value
}
const res = await getInspectionList(params)
if (res.code === 200) {
const rows = res.rows
total.value = res.total || 0
if (reset) {
listData.value = rows
pageNum.value = 1
noMore.value = rows.length < pageSize.value
} else {
listData.value = [...listData.value, ...rows]
noMore.value = rows.length < pageSize.value || listData.value.length >= total.value
}
if (!reset && rows.length > 0) {
pageNum.value += 1
}
} else {
uni.showToast({ title: res.msg || '获取列表失败', icon: 'none' })
}
} catch (err) {
console.error('获取巡检列表失败', err)
uni.showToast({ title: '网络异常,请重试', icon: 'none' })
} finally {
loading.value = false
uni.stopPullDownRefresh()
}
} }
])
// ---------- 日期变更(使用 moment ----------
const handleChangeTime = (e) => { const handleChangeTime = (e) => {
if (e) { if (e) {
// e 格式为 YYYY-MM-DD只取 MM-DD // e 格式为 YYYY-MM-DD用 moment 解析并格式化为 MM-DD
showDate.value = e.slice(5) showDate.value = moment(e).format('MM-DD')
datetime.value = e
} else { } else {
// 用户清空日期,可根据业务设置默认值或置空
showDate.value = '选择日期' showDate.value = '选择日期'
datetime.value = ''
// 如果希望清空时不请求,可 return否则也重置列表
} }
// 重置分页并刷新
pageNum.value = 1
noMore.value = false
fetchList(true)
} }
// 返回
// ---------- 上拉加载更多 ----------
onReachBottom(() => {
if (!noMore.value && !loading.value) {
fetchList(false)
}
})
// ---------- 下拉刷新 ----------
onPullDownRefresh(() => {
pageNum.value = 1
noMore.value = false
fetchList(true)
})
// ---------- 返回 ----------
const goBack = () => { const goBack = () => {
uni.switchTab({ uni.switchTab({
url: '/pages/serviceIndex/serviceIndex' url: '/pages/serviceIndex/serviceIndex'
}) })
} }
// 跳转详情
const goToInspectionDetail = () =>{ // ---------- 跳转详情 ----------
const goToInspectionDetail = (item) => {
uni.navigateTo({ uni.navigateTo({
url: `/pageSubPack/inspection-revenue/inspection-details` url: `/pageSubPack/inspection-revenue/inspection-details?id=${item.id}`
}) })
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@@ -99,8 +170,8 @@
} }
.status-bar { .status-bar {
height: 46px;
width: 100%; width: 100%;
flex-shrink: 0;
} }
.timebox { .timebox {
@@ -214,4 +285,22 @@
color: #333; color: #333;
line-height: 2; line-height: 2;
} }
// 暂无数据
.empty-wrap {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding-top: 200rpx;
}
.empty-img {
width: 240rpx;
height: 240rpx;
}
.empty-text {
font-size: 28rpx;
color: #999;
margin-top: 20rpx;
}
</style> </style>

View File

@@ -208,7 +208,7 @@ const doLogin = () => {
},2000); },2000);
}) })
}else{ }else{
uni.showToast({ title: res.msg, icon: 'error' }); uni.showToast({ title: res.msg, icon: 'none' });
} }
}).catch(err => { }).catch(err => {
@@ -216,7 +216,7 @@ const doLogin = () => {
uni.hideLoading(); uni.hideLoading();
uni.showToast({ uni.showToast({
title: err.msg || '网络异常', title: err.msg || '网络异常',
icon: 'error' icon: 'none'
}); });
}) })
}; };

View File

@@ -224,13 +224,13 @@
} 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'
}); });
}) })
@@ -309,14 +309,14 @@
} else { } else {
uni.showToast({ uni.showToast({
title: '注册失败', title: '注册失败',
icon: 'error' icon: 'none'
}); });
} }
}).catch((err) => { }).catch((err) => {
uni.hideLoading(); uni.hideLoading();
uni.showToast({ uni.showToast({
title: err.msg || '网络异常', title: err.msg || '网络异常',
icon: 'error' icon: 'none'
}); });
}) })
}; };

View File

@@ -539,12 +539,12 @@
getHouseAuthSendSmsCode(params).then(res => { getHouseAuthSendSmsCode(params).then(res => {
if (res.code === 200) { if (res.code === 200) {
uni.showToast({ uni.showToast({
title: `发送成功!`, title: '发送成功',
icon: 'error' icon: 'success'
}); });
} else { } else {
uni.showToast({ uni.showToast({
title: `${res.msg}`, title: res.msg,
icon: 'error' icon: 'error'
}); });
} }
@@ -739,7 +739,6 @@
uni.showToast({ uni.showToast({
title: err.msg || '提交失败', title: err.msg || '提交失败',
icon: 'none', icon: 'none',
duration: 2500
}) })
} }
} }
@@ -758,16 +757,16 @@
}, 1500); }, 1500);
} else { } else {
uni.showToast({ uni.showToast({
title: `${res.msg}`, title: res.msg,
icon: 'error' icon: 'none'
}); });
} }
}).catch(err => { }).catch(err => {
console.log(err); console.log(err);
uni.showToast({ uni.showToast({
title: `${err}`, title: err.msg,
icon: 'error' icon: 'none'
}); });
}) })
} }

View File

@@ -70,12 +70,12 @@
title: '注销账号', title: '注销账号',
type: 'arrow' type: 'arrow'
}, },
{ // {
title: '升级版本', // title: '升级版本',
type: 'text', // type: 'text',
value: '当前版本 1.0.0', // value: '当前版本 1.0.0',
valueClass: 'item-version' // valueClass: 'item-version'
} // }
]) ])
// 格式化字节大小 // 格式化字节大小

View File

@@ -55,7 +55,6 @@
<view style="border-bottom: 2rpx solid #ededed;margin:10rpx 0rpx;"></view> --> <view style="border-bottom: 2rpx solid #ededed;margin:10rpx 0rpx;"></view> -->
<view class="arrears-row" v-if="outstandingPayment==true"> <view class="arrears-row" v-if="outstandingPayment==true">
<text class="arrears-text">当前欠费金额¥{{ arrearsAmount }}</text> <text class="arrears-text">当前欠费金额¥{{ arrearsAmount }}</text>
<text class="auto-fill-btn" @click="handleAutoFill">点击自动填入</text>
</view> </view>
<!-- <view class="arrears-row" v-if="outstandingPayment==false"> <!-- <view class="arrears-row" v-if="outstandingPayment==false">
<text class="arrears-text">暂未查询到欠费</text> <text class="arrears-text">暂未查询到欠费</text>
@@ -76,7 +75,7 @@
<!-- 提示文案 --> <!-- 提示文案 -->
<view class="desc"> <view class="desc">
成功缴纳{{ switchStatus(paymentItem.type) || '' }}费用 ¥{{ payNum || payAmount }} 成功缴纳{{ switchStatus(paymentItem.type) || '' }}费用 ¥{{ arrearsAmount || payAmount }}
</view> </view>
@@ -123,7 +122,6 @@
const currentStep = ref(1) const currentStep = ref(1)
const payAmount = ref('0.00') const payAmount = ref('0.00')
const arrearsAmount = ref('0.00') const arrearsAmount = ref('0.00')
const payNum = ref('')
// 页面加载时初始化数据 // 页面加载时初始化数据
onLoad(() => { onLoad(() => {
@@ -165,13 +163,6 @@
} }
} }
// 自动填充欠费金额
const handleAutoFill = () => {
payNum.value = arrearsAmount.value
uni.vibrateShort({
type: 'light'
})
}
// 返回 // 返回
const goBack = () => { const goBack = () => {
@@ -189,6 +180,7 @@
// }) // })
// return // return
// } // }
const amount = arrearsAmount.value
try { try {
uni.showLoading({ title: '加载中...' }) uni.showLoading({ title: '加载中...' })
@@ -200,7 +192,8 @@
const res = await getBankMiniProgramParams({ const res = await getBankMiniProgramParams({
acct: uni.getStorageSync('userId'), acct: uni.getStorageSync('userId'),
orderType: '20', orderType: '20',
orderAmount: String(Math.round(Number(payNum.value) * 100)), orderAmount: String(Math.round(Number(amount) * 100)),
// orderAmount: String(Math.round(Number(arrearsAmount.value) * 100)),
deviceCode: paymentItem.deviceCode || '', deviceCode: paymentItem.deviceCode || '',
deviceType: mappedDeviceType, deviceType: mappedDeviceType,
billId: paymentItem.billId || '', billId: paymentItem.billId || '',
@@ -215,7 +208,7 @@
return return
} }
console.log('resres返回数据', res) console.log('resres返回数据', res)
console.log('resres', res.data) // console.log('resres', res.data)
const { appId, path, extraData } = res.data const { appId, path, extraData } = res.data
console.log('navigateToMiniProgram参数:', { appId, path, extraData }) console.log('navigateToMiniProgram参数:', { appId, path, extraData })
@@ -228,19 +221,19 @@
} }
// 解析 extraData后端返回可能是字符串或对象 // 解析 extraData后端返回可能是字符串或对象
// ' let extraDataObj = extraData /* let extraDataObj = extraData
// if (typeof extraData === 'string') { if (typeof extraData === 'string') {
// try { try {
// extraDataObj = JSON.parse(extraData) extraDataObj = JSON.parse(extraData)
// } catch (e) { } catch (e) {
// console.error('extraData JSON解析失败使用空对象', e) console.error('extraData JSON解析失败使用空对象', e)
// extraDataObj = {} extraDataObj = {}
// } }
// } }
// if (!extraDataObj || typeof extraDataObj !== 'object') { if (!extraDataObj || typeof extraDataObj !== 'object') {
// extraDataObj = {} extraDataObj = {}
// }' }
console.log('解析-----extraDataObj', extraDataObj) */
// #ifdef APP-PLUS // #ifdef APP-PLUS
// 原生App通过微信SDK拉起小程序 // 原生App通过微信SDK拉起小程序
plus.share.getServices((services) => { plus.share.getServices((services) => {
@@ -253,12 +246,17 @@
uni.showToast({ title: '当前微信版本太低,不支持拉起小程序', icon: 'none' }) uni.showToast({ title: '当前微信版本太低,不支持拉起小程序', icon: 'none' })
return return
} }
weixin.launchMiniProgram({ weixin.launchMiniProgram({
id: appId, id: 'gh_4ba5e4fdaa83',
// appId:'00004951',
type: 1, // 0=正式版 1=测试版 2=预览版 type: 1, // 0=正式版 1=测试版 2=预览版
path: path || '', path: path,
// extMsg: JSON.stringify({ extraData: extraData })
extraData: extraData extraData: extraData
}, (res) => { }, (res) => {
console.log('ress-------------',res)
if (res.retCode === 'SUCCESS') { if (res.retCode === 'SUCCESS') {
console.log('成功拉起日照银行小程序App', res.retCode) console.log('成功拉起日照银行小程序App', res.retCode)
} else { } else {
@@ -273,22 +271,22 @@
}) })
// #endif // #endif
// #ifdef MP-WEIXIN // // #ifdef MP-WEIXIN
// 微信小程序直接navigateToMiniProgram // // 微信小程序直接navigateToMiniProgram
uni.navigateToMiniProgram({ // uni.navigateToMiniProgram({
appId: appId, // appId: appId,
path: path || '', // path: path || '',
extraData: extraData, // extraData: extraData,
envVersion: 'develop', // envVersion: 'develop',
success: () => { // success: () => {
console.log('成功拉起日照银行小程序(微信)') // console.log('成功拉起日照银行小程序(微信)')
}, // },
fail: (err) => { // fail: (err) => {
console.error('拉起日照银行小程序失败(微信)', JSON.stringify(err)) // console.error('拉起日照银行小程序失败(微信)', JSON.stringify(err))
uni.showToast({ title: err.errMsg || err.msg || '拉起支付小程序失败', icon: 'none' }) // uni.showToast({ title: err.errMsg || err.msg || '拉起支付小程序失败', icon: 'none' })
} // }
}) // })
// #endif // // #endif
} catch (err) { } catch (err) {
uni.hideLoading() uni.hideLoading()
console.error('获取支付参数异常', err) console.error('获取支付参数异常', err)
@@ -304,7 +302,7 @@
userId: userId, userId: userId,
channel: 'resident', channel: 'resident',
title: '缴费成功', title: '缴费成功',
content: `您已成功缴纳${switchStatus(paymentItem.type) || ''}费用 ¥${payNum.value || payAmount.value}` content: `您已成功缴纳${switchStatus(paymentItem.type) || ''}费用 ¥${arrearsAmount.value || payAmount.value}`
}).catch(err => { }).catch(err => {
console.log('推送发送失败', err) console.log('推送发送失败', err)
}) })

View File

@@ -1,5 +1,13 @@
{ {
"pages": [{ "pages": [{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"navigationStyle": "custom",
"navigationBarBackgroundColor": "#F8F8F8"
}
},
{
"path": "pages/navigation/navigation", "path": "pages/navigation/navigation",
"style": { "style": {
"navigationBarTitleText": "引导页", "navigationBarTitleText": "引导页",
@@ -8,14 +16,6 @@
"navigationStyle": "custom" "navigationStyle": "custom"
} }
}, },
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"navigationStyle": "custom",
"navigationBarBackgroundColor": "#F8F8F8"
}
},
{ {
"path": "pages/serviceIndex/serviceIndex", "path": "pages/serviceIndex/serviceIndex",
"style": { "style": {

View File

@@ -16,17 +16,14 @@
<view class="location-area"> <view class="location-area">
<!-- 定位图标 --> <!-- 定位图标 -->
<view class="location-icon"> <view class="location-icon">
<image src="https://wuyeadmin.bugtc.com/images/home/adress.png" style="height: 100%;width: 100%;"></image> <image src="https://wuyeadmin.bugtc.com/images/home/adress.png"
style="height: 100%;width: 100%;"></image>
</view> </view>
<!-- 小区名称和下拉箭头 --> <!-- 小区名称和下拉箭头 -->
<view class="community-selector"> <view class="community-selector">
<text class="community-name">{{ currentCommunity }}</text> <text class="community-name">{{ currentCommunity }}</text>
<u-icon <u-icon name="arrow-down-fill" size="16" :color="isDropdownOpen ? '#2979ff' : '#222222'"
name="arrow-down-fill" :class="['dropdown-arrow', { 'rotate': isDropdownOpen }]"></u-icon>
size="16"
:color="isDropdownOpen ? '#2979ff' : '#222222'"
:class="['dropdown-arrow', { 'rotate': isDropdownOpen }]"
></u-icon>
</view> </view>
</view> </view>
</view> </view>
@@ -45,10 +42,11 @@
</view> </view>
<!-- 公告 --> <!-- 公告 -->
<view class="noticeClass" @click="getNoticeMore"> <view class="noticeClass" @click="getNoticeMore">
<uni-notice-bar show-icon :text="noticeText" type="line" <uni-notice-bar show-icon :text="noticeText" type="line" :key="noticeKey" show-get-more scrollable
show-get-more scrollable color="#000" background-color="#fff" moreColor="#000"> color="#000" background-color="#fff" moreColor="#000">
<template #noticebarIcon> <template #noticebarIcon>
<image src="https://wuyeadmin.bugtc.com/images/home/notice.png" style="width: 38px;height: 38px;"></image> <image src="https://wuyeadmin.bugtc.com/images/home/notice.png"
style="width: 38px;height: 38px;"></image>
</template> </template>
</uni-notice-bar> </uni-notice-bar>
</view> </view>
@@ -58,7 +56,8 @@
<up-col span="3"> <up-col span="3">
<view class="demo-layout bg-purple openClass" @click="openDoorClick"> <view class="demo-layout bg-purple openClass" @click="openDoorClick">
<view class="iconClass"> <view class="iconClass">
<image src="https://wuyeadmin.bugtc.com/images/home/openDoor.png" class="iconClass-img"></image> <image src="https://wuyeadmin.bugtc.com/images/home/openDoor.png" class="iconClass-img">
</image>
</view> </view>
<view class="title-dome-calss">一键开门</view> <view class="title-dome-calss">一键开门</view>
</view> </view>
@@ -66,7 +65,8 @@
<up-col span="3"> <up-col span="3">
<view class="demo-layout bg-purple-light openClass" @click="payMentClick"> <view class="demo-layout bg-purple-light openClass" @click="payMentClick">
<view class="iconClass"> <view class="iconClass">
<image src="https://wuyeadmin.bugtc.com/images/home/lifePay.png" class="iconClass-img"></image> <image src="https://wuyeadmin.bugtc.com/images/home/lifePay.png" class="iconClass-img">
</image>
</view> </view>
<view class="title-dome-calss">生活缴费</view> <view class="title-dome-calss">生活缴费</view>
</view> </view>
@@ -74,7 +74,8 @@
<up-col span="3"> <up-col span="3">
<view class="demo-layout bg-purple openClass" @click="onlineRepairClick"> <view class="demo-layout bg-purple openClass" @click="onlineRepairClick">
<view class="iconClass"> <view class="iconClass">
<image src="https://wuyeadmin.bugtc.com/images/home/repair.png" class="iconClass-img"></image> <image src="https://wuyeadmin.bugtc.com/images/home/repair.png" class="iconClass-img">
</image>
</view> </view>
<view class="title-dome-calss">在线报修</view> <view class="title-dome-calss">在线报修</view>
</view> </view>
@@ -82,7 +83,8 @@
<up-col span="3"> <up-col span="3">
<view class="demo-layout bg-purple-light openClass" @click="visitorClick"> <view class="demo-layout bg-purple-light openClass" @click="visitorClick">
<view class="iconClass"> <view class="iconClass">
<image src="https://wuyeadmin.bugtc.com/images/home/visitorInvite.png" class="iconClass-img"></image> <image src="https://wuyeadmin.bugtc.com/images/home/visitorInvite.png"
class="iconClass-img"></image>
</view> </view>
<view class="title-dome-calss">访客邀请</view> <view class="title-dome-calss">访客邀请</view>
</view> </view>
@@ -95,7 +97,8 @@
<up-row justify="space-between" customStyle="margin-bottom: 10px"> <up-row justify="space-between" customStyle="margin-bottom: 10px">
<up-col span="3"> <up-col span="3">
<view class="demo-layout bg-purple iconRightClass"> <view class="demo-layout bg-purple iconRightClass">
<image src="https://wuyeadmin.bugtc.com/images/home/ad1.png" mode="" style="width: 100%;height: 100%;"></image> <image src="https://wuyeadmin.bugtc.com/images/home/ad1.png" mode=""
style="width: 100%;height: 100%;"></image>
</view> </view>
</up-col> </up-col>
<up-col span="8"> <up-col span="8">
@@ -120,7 +123,8 @@
</view> </view>
<!-- 活动列表内容去掉内层 scroll-view由外层统一滚动 --> <!-- 活动列表内容去掉内层 scroll-view由外层统一滚动 -->
<view class="activity-list"> <view class="activity-list">
<view class="eventListCard" v-for="(activity, index) in activityList" :key="activity.id" @click="moreClick"> <view class="eventListCard" v-for="(activity, index) in activityList" :key="activity.id"
@click="goToActivityDetail(activity)">
<view class="u-demo-block__content "> <view class="u-demo-block__content ">
<up-row justify="space-between" customStyle="margin-bottom: 10px"> <up-row justify="space-between" customStyle="margin-bottom: 10px">
<up-col span="4"> <up-col span="4">
@@ -128,13 +132,16 @@
<view class="status-tag"> <view class="status-tag">
{{ activity.statusText }} {{ activity.statusText }}
</view> </view>
<image :src="activity.coverImage" style="width: 100%;height: 100%;border-radius: 16rpx;" mode="aspectFill"></image> <image :src="activity.coverImage"
style="width: 100%;height: 100%;border-radius: 16rpx;" mode="aspectFill">
</image>
</view> </view>
</up-col> </up-col>
<up-col span="8"> <up-col span="8">
<view class="demo-layout bg-purple activity-info"> <view class="demo-layout bg-purple activity-info">
<view class="activity-title">{{activity.title}}</view> <view class="activity-title">{{activity.title}}</view>
<view class="activity-time">{{formatDate(activity.startTime)}}-{{formatDate(activity.endTime)}}</view> <view class="activity-time">
{{formatDate(activity.startTime)}}-{{formatDate(activity.endTime)}}</view>
<view class="activity-organizer"> <view class="activity-organizer">
<text>{{activity.createName}}</text> <text>{{activity.createName}}</text>
</view> </view>
@@ -168,10 +175,23 @@
</template> </template>
<script setup> <script setup>
import { ref, nextTick } from 'vue' import {
import {onLoad,onUnload,onShow} from '@dcloudio/uni-app' ref,
nextTick
} from 'vue'
import {
onLoad,
onUnload,
onShow
} from '@dcloudio/uni-app'
import moment from 'moment' import moment from 'moment'
import {getNoticeLatest,getCurrentVillage,getActivitylatest,getBannarList,getReloadUserInfo} from "/pageSubPack/api/api.js" import {
getNoticeLatest,
getCurrentVillage,
getActivitylatest,
getBannarList,
getReloadUserInfo
} from "/pageSubPack/api/api.js"
// 列表数据状态 // 列表数据状态
@@ -185,6 +205,7 @@ const bannerList = ref([])
const bannerRawData = ref([]) // 保留原始数据含link const bannerRawData = ref([]) // 保留原始数据含link
const bannerSwiperKey = ref(0) const bannerSwiperKey = ref(0)
const noticeText = ref('暂无公告') const noticeText = ref('暂无公告')
const noticeKey = ref(0)
const noticeId = ref('') const noticeId = ref('')
const lastUserId = ref('') // 用于检测是否切换账号 const lastUserId = ref('') // 用于检测是否切换账号
@@ -204,7 +225,9 @@ const getNoticeMore = () =>{
// 获取bannar列表 // 获取bannar列表
const getbannarData = async () => { const getbannarData = async () => {
try { try {
const res = await getBannarList({villageId:uni.getStorageSync('currentVillageId')}) const res = await getBannarList({
villageId: uni.getStorageSync('currentVillageId')
})
if (res.code === 200) { if (res.code === 200) {
bannerRawData.value = res.data || [] bannerRawData.value = res.data || []
const newList = (res.data || []).map(item => item.url) const newList = (res.data || []).map(item => item.url)
@@ -215,18 +238,26 @@ const getbannarData = async () =>{
bannerSwiperKey.value++ bannerSwiperKey.value++
} }
} else { } else {
uni.showToast({title:'获取失败',icon:'error'}) uni.showToast({
title: '获取失败',
icon: 'error'
})
} }
} catch (err) { } catch (err) {
const msg = err?.msg || (typeof err === 'string' ? err : '获取失败') const msg = err?.msg || (typeof err === 'string' ? err : '获取失败')
uni.showToast({title: msg,icon:'error'}) uni.showToast({
title: msg,
icon: 'error'
})
} }
} }
// banner点击跳转 // banner点击跳转
const bannerClick = (index) => { const bannerClick = (index) => {
const item = bannerRawData.value[index] const item = bannerRawData.value[index]
if (item && item.link) { if (item && item.link) {
uni.navigateTo({ url: item.link }) uni.navigateTo({
url: item.link
})
} }
} }
// 接收选择小区返回的参数 // 接收选择小区返回的参数
@@ -240,6 +271,7 @@ const slelctHomeData = (data) =>{
} }
getCurrentCommunityData() getCurrentCommunityData()
getNoticeData() getNoticeData()
noticeKey.value++
getNewActivityList() getNewActivityList()
} }
// 获取当前认证小区的方法 // 获取当前认证小区的方法
@@ -316,6 +348,7 @@ const refreshAllData = async () => {
} }
getCurrentCommunityData(); getCurrentCommunityData();
getNoticeData() getNoticeData()
noticeKey.value++
getNewActivityList() getNewActivityList()
getbannarData() getbannarData()
} }
@@ -404,7 +437,9 @@ const navigateToPage = () => {
// 获取首页最新活动 // 获取首页最新活动
const getNewActivityList = async () => { const getNewActivityList = async () => {
try { try {
let params = {villageId:uni.getStorageSync('currentVillageId')} let params = {
villageId: uni.getStorageSync('currentVillageId')
}
const res = await getActivitylatest(params) const res = await getActivitylatest(params)
if (res.code === 200) { if (res.code === 200) {
if (res.data) { if (res.data) {
@@ -444,6 +479,12 @@ const visitorClick = () =>{
url: "/pageSubPack/visitor/visitor-list" url: "/pageSubPack/visitor/visitor-list"
}) })
} }
// 跳转到活动详情页
const goToActivityDetail = (activity) => {
uni.navigateTo({
url: `/pageSubPack/activity-list/activityListDetails?id=${activity.id}&title=${activity.title}&applied=${activity.applied || ''}&statusText=${activity.statusText || ''}`
})
}
// 活动列表的查看更多 // 活动列表的查看更多
const moreClick = () => { const moreClick = () => {
uni.setStorageSync('sourcePage', "index") uni.setStorageSync('sourcePage', "index")
@@ -451,8 +492,6 @@ const moreClick = () =>{
url: "/pageSubPack/activity-list/activityList" url: "/pageSubPack/activity-list/activityList"
}) })
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@@ -465,10 +504,12 @@ const moreClick = () =>{
bottom: 0; bottom: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
/* 固定头部 */ /* 固定头部 */
.header-fixed { .header-fixed {
position: relative; position: relative;
flex-shrink: 0; flex-shrink: 0;
.nar-top { .nar-top {
height: 400rpx; height: 400rpx;
width: 100%; width: 100%;
@@ -478,11 +519,13 @@ const moreClick = () =>{
left: 0; left: 0;
z-index: 0; z-index: 0;
} }
.header-content { .header-content {
position: relative; position: relative;
z-index: 1; z-index: 1;
} }
} }
/* 滚动区域 */ /* 滚动区域 */
.main-scroll { .main-scroll {
flex: 1; flex: 1;
@@ -491,15 +534,18 @@ const moreClick = () =>{
position: relative; position: relative;
z-index: 1; z-index: 1;
} }
.scroll-bottom-space { .scroll-bottom-space {
height: 40rpx; height: 40rpx;
} }
.status_bar { .status_bar {
width: 100%; width: 100%;
flex-shrink: 0; flex-shrink: 0;
position: relative; position: relative;
z-index: 1; z-index: 1;
} }
/* 导航栏 */ /* 导航栏 */
.nav-bar { .nav-bar {
height: 44px; height: 44px;
@@ -508,10 +554,12 @@ const moreClick = () =>{
position: relative; position: relative;
z-index: 1; z-index: 1;
} }
.nav-title { .nav-title {
font-size: 32rpx; font-size: 32rpx;
font-weight: 500; font-weight: 500;
} }
.header-container { .header-container {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -522,6 +570,7 @@ const moreClick = () =>{
position: relative; position: relative;
z-index: 10; z-index: 10;
} }
// 左侧区域 // 左侧区域
.location-area { .location-area {
display: flex; display: flex;
@@ -529,17 +578,20 @@ const moreClick = () =>{
position: relative; position: relative;
flex: 1; flex: 1;
min-width: 0; min-width: 0;
.location-icon { .location-icon {
width: 45rpx; width: 45rpx;
height: 45rpx; height: 45rpx;
margin-right: 12rpx; margin-right: 12rpx;
flex-shrink: 0; flex-shrink: 0;
} }
.community-selector { .community-selector {
display: flex; display: flex;
align-items: center; align-items: center;
max-width: 300rpx; max-width: 300rpx;
cursor: pointer; cursor: pointer;
.community-name { .community-name {
font-size: 26rpx; font-size: 26rpx;
font-weight: 500; font-weight: 500;
@@ -551,34 +603,42 @@ const moreClick = () =>{
} }
} }
} }
.bannarClass { .bannarClass {
position: relative; position: relative;
padding: 20rpx 40rpx; padding: 20rpx 40rpx;
// margin-bottom: 20rpx; // margin-bottom: 20rpx;
height: 300rpx; height: 300rpx;
::v-deep .u-swiper { ::v-deep .u-swiper {
height: 300rpx !important; height: 300rpx !important;
} }
::v-deep .u-swiper__wrapper { ::v-deep .u-swiper__wrapper {
height: 300rpx !important; height: 300rpx !important;
} }
::v-deep .u-swiper__wrapper__item__wrapper__image { ::v-deep .u-swiper__wrapper__item__wrapper__image {
height: 300rpx !important; height: 300rpx !important;
} }
::v-deep .banner-img { ::v-deep .banner-img {
height: 300rpx !important; height: 300rpx !important;
width: 100%; width: 100%;
border-radius: 10rpx; border-radius: 10rpx;
} }
} }
.noticeClass { .noticeClass {
padding: 0rpx 36rpx; padding: 0rpx 36rpx;
margin-bottom: 20rpx; margin-bottom: 20rpx;
} }
// 修改通知栏样式 // 修改通知栏样式
::v-deep .uni-noticebar__content-wrapper--scrollable { ::v-deep .uni-noticebar__content-wrapper--scrollable {
margin-right: 20px; margin-right: 20px;
} }
::v-deep .uni-noticebar { ::v-deep .uni-noticebar {
padding: 4px 12px; padding: 4px 12px;
} }
@@ -586,17 +646,20 @@ const moreClick = () =>{
.notice-bar::after { .notice-bar::after {
color: #3E8EFF; color: #3E8EFF;
} }
.bg-card-open { .bg-card-open {
padding: 20rpx; padding: 20rpx;
background-color: #fff; background-color: #fff;
border-radius: 8rpx; border-radius: 8rpx;
margin: 0 18px 20rpx; margin: 0 18px 20rpx;
} }
.openClass { .openClass {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
margin-top: 20rpx; margin-top: 20rpx;
.iconClass { .iconClass {
width: 88rpx; width: 88rpx;
height: 88rpx; height: 88rpx;
@@ -604,17 +667,20 @@ const moreClick = () =>{
// opacity: 0.4; // opacity: 0.4;
} }
.iconClass-img { .iconClass-img {
width: 100%; width: 100%;
height: 100%; height: 100%;
border-radius: 8px border-radius: 8px
} }
.title-dome-calss { .title-dome-calss {
margin-top: 10rpx; margin-top: 10rpx;
font-size: 28rpx; font-size: 28rpx;
color: #000; color: #000;
} }
} }
.adCardClass { .adCardClass {
// width: 100%; // width: 100%;
height: 200rpx; height: 200rpx;
@@ -622,12 +688,14 @@ const moreClick = () =>{
background-color: #3E8EFF; background-color: #3E8EFF;
// margin-top: 30rpx; // margin-top: 30rpx;
border-radius: 28rpx; border-radius: 28rpx;
.titleLeft { .titleLeft {
text-align: left; text-align: left;
line-height: 2; line-height: 2;
// margin-top: 32rpx; // margin-top: 32rpx;
// margin-left: 30rpx; // margin-left: 30rpx;
} }
.iconRightClass { .iconRightClass {
width: 120rpx; width: 120rpx;
height: 120rpx; height: 120rpx;
@@ -636,27 +704,32 @@ const moreClick = () =>{
margin: 36rpx; margin: 36rpx;
} }
} }
.activity-card{
} .activity-card {}
.uni-card { .uni-card {
margin: 0 18px 20rpx !important; margin: 0 18px 20rpx !important;
} }
.eventListClass { .eventListClass {
margin: 10rpx 0; margin: 10rpx 0;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.activity-name { .activity-name {
font-size: 32rpx; font-size: 32rpx;
font-weight: 600; font-weight: 600;
color: #222; color: #222;
} }
.eventListCard { .eventListCard {
// min-height:200rpx ; // min-height:200rpx ;
position: relative; position: relative;
margin: 30rpx 0rpx; margin: 30rpx 0rpx;
// overflow: hidden; // overflow: hidden;
.activity-img { .activity-img {
width: 170rpx; width: 170rpx;
@@ -664,6 +737,7 @@ const moreClick = () =>{
position: relative; position: relative;
// background-color: #333333; // background-color: #333333;
} }
.status-tag { .status-tag {
position: absolute; position: absolute;
top: 0; top: 0;
@@ -678,6 +752,7 @@ const moreClick = () =>{
background: repeating-linear-gradient(to right, #FD7373, #FB3F3F); background: repeating-linear-gradient(to right, #FD7373, #FB3F3F);
z-index: 5; z-index: 5;
} }
.activity-title { .activity-title {
font-size: 32rpx; font-size: 32rpx;
font-weight: bold; font-weight: bold;
@@ -693,6 +768,7 @@ const moreClick = () =>{
color: #999999; color: #999999;
margin-bottom: 8px; margin-bottom: 8px;
} }
.activity-organizer { .activity-organizer {
font-size: 28rpx; font-size: 28rpx;
display: flex; display: flex;
@@ -700,6 +776,7 @@ const moreClick = () =>{
color: #999999; color: #999999;
margin-bottom: 8px; margin-bottom: 8px;
} }
.activity-enrollment { .activity-enrollment {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -708,6 +785,7 @@ const moreClick = () =>{
color: #666666; color: #666666;
} }
} }
.empty-state { .empty-state {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -722,11 +800,10 @@ const moreClick = () =>{
margin-top: 20rpx; margin-top: 20rpx;
margin-bottom: 10rpx; margin-bottom: 10rpx;
} }
.look-more-title { .look-more-title {
color: #3E8EFF; color: #3E8EFF;
font-size: 28rpx; font-size: 28rpx;
} }
} }
</style> </style>

View File

@@ -1,5 +1,5 @@
<template> <template>
<view class="guide-page"> <view class="guide-page" v-if="showContent">
<view class="status-bar"></view> <view class="status-bar"></view>
<!-- 引导内容滑动容器 --> <!-- 引导内容滑动容器 -->
<swiper <swiper
@@ -73,12 +73,26 @@
<script setup> <script setup>
import { ref } from 'vue'; import { ref } from 'vue';
// 守卫:已登录或已看过引导页的用户不展示引导页,直接跳转
const hasShowGuide = uni.getStorageSync('hasShowGuide')
const tokenSave = uni.getStorageSync('token')
if (hasShowGuide || tokenSave) {
if (tokenSave) {
uni.reLaunch({ url: '/pages/index/index' })
} else if (hasShowGuide) {
uni.reLaunch({ url: '/pageSubPack/loginSub/pwd-login' })
}
}
// ========== 响应式数据 ========== // ========== 响应式数据 ==========
// 当前引导步骤0/1/2 // 当前引导步骤0/1/2
const currentStep = ref(0); const currentStep = ref(0);
const mode = ref("default") const mode = ref("default")
// 防重复跳转锁 // 防重复跳转锁
const isNavigating = ref(false) const isNavigating = ref(false)
// 控制是否展示引导内容(已登录用户不展示,避免闪烁)
const showContent = ref(!hasShowGuide && !tokenSave)
// ========== 方法 ========== // ========== 方法 ==========
// 滑动swiper切换步骤 // 滑动swiper切换步骤

View File

@@ -8,7 +8,7 @@
<view class="container"> <view class="container">
<!-- 顶部 Banner 轮播 --> <!-- 顶部 Banner 轮播 -->
<view class="banner-box" style="overflow-y: hidden;"> <view class="banner-box" style="overflow-y: hidden;">
<image class="banner-img" src="http://47.104.199.163:9090/images/propertyImgs/serviceImg2.png" @tap="bannnerClick"/> <image class="banner-img" src="https://wuye.ckdzkj.com/images/propertyImgs/serviceImg2.png" @tap="bannnerClick"/>
</view> </view>
<!-- 常用功能区 --> <!-- 常用功能区 -->
@@ -60,78 +60,78 @@
const commonFuncList = ref([{ const commonFuncList = ref([{
name: "一键开门", name: "一键开门",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-door.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-door.png",
path: "/pageSubPack/notice-list/oneClickOpen" path: "/pageSubPack/notice-list/oneClickOpen"
}, },
{ {
name: "生活缴费", name: "生活缴费",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-pay.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-pay.png",
path: "/pageSubPack/payment-list/paymentIndex" path: "/pageSubPack/payment-list/paymentIndex"
}, },
{ {
name: "在线报修", name: "在线报修",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-repair.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-repair.png",
path: "/pageSubPack/online-repair/onlineRepair" path: "/pageSubPack/online-repair/onlineRepair"
}, },
{ {
name: "访客邀请", name: "访客邀请",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-visitor.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-visitor.png",
path: "/pageSubPack/visitor/visitor-list" path: "/pageSubPack/visitor/visitor-list"
} }
]) ])
const communityFuncList = ref([{ const communityFuncList = ref([{
name: "一键开门", name: "一键开门",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-door.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-door.png",
path: "/pageSubPack/notice-list/oneClickOpen" path: "/pageSubPack/notice-list/oneClickOpen"
}, },
{ {
name: "生活缴费", name: "生活缴费",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-pay.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-pay.png",
path: "/pageSubPack/payment-list/paymentIndex" path: "/pageSubPack/payment-list/paymentIndex"
}, },
{ {
name: "在线报修", name: "在线报修",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-repair.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-repair.png",
path: "/pageSubPack/online-repair/onlineRepair" path: "/pageSubPack/online-repair/onlineRepair"
}, },
{ {
name: "访客邀请", name: "访客邀请",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-visitor.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-visitor.png",
path: "/pageSubPack/visitor/visitor-list" path: "/pageSubPack/visitor/visitor-list"
}, },
{ {
name: "投诉意见", name: "投诉意见",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-complaint.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-complaint.png",
path: "/pageSubPack/service-list/complaintsSuggestionsIndex" path: "/pageSubPack/service-list/complaintsSuggestionsIndex"
}, },
{ {
name: "问卷调查", name: "问卷调查",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-survey.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-survey.png",
path: "/pageSubPack/service-list/questionnaireSurveyIndex" path: "/pageSubPack/service-list/questionnaireSurveyIndex"
}, },
{ {
name: "社区活动", name: "社区活动",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-activity.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-activity.png",
path: "/pageSubPack/activity-list/activityList" path: "/pageSubPack/activity-list/activityList"
}, },
{ {
name: "公告公示", name: "公告公示",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-notice.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-notice.png",
path: "/pageSubPack/notice-list/noticeList" path: "/pageSubPack/notice-list/noticeList"
}, },
{ {
name: "联系物业", name: "联系物业",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-contact.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-contact.png",
path: "/pageSubPack/service-list/contactProperty" path: "/pageSubPack/service-list/contactProperty"
}, },
{ {
name: "巡检记录", name: "巡检记录",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-contact.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-inspection.png",
path: "/pageSubPack/inspection-revenue/inspection" path: "/pageSubPack/inspection-revenue/inspection"
}, },
{ {
name: "公区收益", name: "公区收益",
icon: "http://47.104.199.163:9090/images/propertyImgs/icon-contact.png", icon: "https://wuye.ckdzkj.com/images/propertyImgs/icon-revenue.png",
path: "/pageSubPack/inspection-revenue/public-revenue" path: "/pageSubPack/inspection-revenue/public-revenue"
} }
]) ])