diff --git a/components/zy/filterDropdown.vue b/components/zy/filterDropdown.vue index caa9b6c..4bea082 100644 --- a/components/zy/filterDropdown.vue +++ b/components/zy/filterDropdown.vue @@ -1,7 +1,14 @@ @@ -94,7 +94,7 @@ export default { async onShow() { try { - await this.$checkToken(this.$getToken()) + // await this.$checkToken(this.$getToken()) this.getContractDetail() } catch (e) { return @@ -132,20 +132,30 @@ export default { methods: { /** 合同详情 + 第一条资产 */ getContractDetail() { - this.$u.get(`/contract/detail?contractNo=${this.contractNo}`, {},{ - WT: this.$getToken() - }).then(res => { - console.log(res) - this.contract = res.data || {} + // TODO: 接口联调时取消注释,删除 mock 数据 + // this.$u.get(`/contract/detail?contractNo=${this.contractNo}`, {},{ + // WT: this.$getToken() + // }).then(res => { + // console.log(res) + // this.contract = res.data || {} + // // this.assetList = (res.assetsInfos.assets || []).map((item, index) => ({ + // // ...item, + // // expanded: index === 0 + // // })) + // // this.hasMoreAssets = + // // this.assetList.length < (res.totalAssets || 0) + // }) - // this.assetList = (res.assetsInfos.assets || []).map((item, index) => ({ - // ...item, - // expanded: index === 0 - // })) - - // this.hasMoreAssets = - // this.assetList.length < (res.totalAssets || 0) - }) + // Mock 静态数据 + this.contract = { + contractNo: this.contractNo || 'HT-2026-001', + contractName: '东山大道435-2-1-104号房屋租赁合同', + signStatus: '待签署', + startDate: '2026-01-01', + endDate: '2026-12-31', + rentFee: 2500, + deposit: 5000 + } }, /** 加载更多资产 */ @@ -337,7 +347,7 @@ export default { &::v-deep .u-btn { font-size: 30rpx; color: #fff; - background: linear-gradient(90deg, #ff6f63 0%, #fb392a 100%); + background-color: #0088FE; border-radius: 10rpx; } } diff --git a/pages-biz/login/login.vue b/pages-biz/login/login.vue index 25aa7a4..a232001 100644 --- a/pages-biz/login/login.vue +++ b/pages-biz/login/login.vue @@ -205,7 +205,7 @@ .login-btn { width: 100%; height: 88rpx; - background-color: 0088FE; + background-color: #0088FE; border-radius: 49rpx; font-size: 36rpx; color: #fff; diff --git a/pages-biz/message/message.vue b/pages-biz/message/message.vue index fafa5b4..9783e3c 100644 --- a/pages-biz/message/message.vue +++ b/pages-biz/message/message.vue @@ -47,9 +47,9 @@ export default { }, async onShow() { try { - await this.$checkToken(this.$getToken()) - this.checkOaAuth() - this.fetchMessageList() + // await this.$checkToken(this.$getToken()) + // this.checkOaAuth() + // this.fetchMessageList() } catch (e) { return } @@ -96,32 +96,70 @@ export default { } }, fetchMessageList(){ - // ✅ 正确判断加载状态 if (this.loadStatus !== 'more') return; this.loadStatus = 'loading'; - - let url = '/message/queryPage' - this.$u.post(url, { - pageNo: this.pageNo, - pageSize: this.pageSize - }, { - WT: this.$getToken() - }).then(res => { - const rows = res.data.result || []; - if (this.pageNo === 1) this.flowList = []; - this.flowList = this.flowList.concat(rows); - - // ✅ 判断是否还有更多 - if (rows.length < this.pageSize) { - this.loadStatus = 'nomore'; - } else { - this.pageNo++; - this.loadStatus = 'more'; + + // TODO: 接口联调时取消注释,删除 mock 数据 + // let url = '/message/queryPage' + // this.$u.post(url, { + // pageNo: this.pageNo, + // pageSize: this.pageSize + // }, { + // WT: this.$getToken() + // }).then(res => { + // const rows = res.data.result || []; + // if (this.pageNo === 1) this.flowList = []; + // this.flowList = this.flowList.concat(rows); + // if (rows.length < this.pageSize) { + // this.loadStatus = 'nomore'; + // } else { + // this.pageNo++; + // this.loadStatus = 'more'; + // } + // }).catch(err => { + // console.log("获取消息列表失败:", err) + // this.loadStatus = 'more'; + // }) + + // Mock 静态数据 + const mockData = [ + { + id: '1', + icon: '/static/icon/msg-1.png', + title: '账单提醒', + desc: '您有一笔租金待支付,请及时处理', + time: '2026-06-27 10:30', + read: false + }, + { + id: '2', + icon: '/static/icon/msg-2.png', + title: '合同签署', + desc: '您的租赁合同已生成,请尽快签署', + time: '2026-06-26 14:20', + read: false + }, + { + id: '3', + icon: '/static/icon/msg-1.png', + title: '缴费成功', + desc: '您已成功缴纳5月份租金2500元', + time: '2026-06-25 09:15', + read: true + }, + { + id: '4', + icon: '/static/icon/msg-2.png', + title: '预约确认', + desc: '您预约的看房申请已确认,管家将联系您', + time: '2026-06-24 16:45', + read: true } - }).catch(err => { - console.log("获取消息列表失败:", err) - this.loadStatus = 'more'; // ✅ 异常恢复 - }) + ]; + + if (this.pageNo === 1) this.flowList = []; + this.flowList = this.flowList.concat(mockData); + this.loadStatus = 'nomore'; }, loadMore() { this.fetchMessageList() diff --git a/pages-biz/profile/setting.vue b/pages-biz/profile/setting.vue index f395b48..5e7df00 100644 --- a/pages-biz/profile/setting.vue +++ b/pages-biz/profile/setting.vue @@ -4,7 +4,7 @@ - + + - {{ item.assetName }} - + {{ formatDate(item.date) }} 看房 + {{ statusText(item.status) }} - - - - - 预约时间: - {{ formatDate(item.date) }} - + + - - - 地址: - {{ item.assetAddress }} - - - - - 管家: - {{ item.managerName || '未知'}}({{ item.managerPhone || '未知'}}) + + + + + {{ item.assetName }} + + + {{ item.assetAddress }} + + + + {{ item.managerName || '未知' }}({{ item.managerPhone || '未知' }}) + - - + + @@ -100,13 +86,18 @@ export default { }, async onShow() { try { - await this.$checkToken(this.$getToken()) + // await this.$checkToken(this.$getToken()) this.fetchReserve() } catch (e) { return } }, // ✅ 删除 scroll-view 冲突的 onReachBottom + computed: { + staticHost() { + return this.$config.staticUrl + } + }, methods: { statusText(status) { switch (status) { @@ -132,31 +123,62 @@ export default { return `${year}-${month}-${day} ${weekday} ${hours}:${minutes}`; }, fetchReserve(){ - // ✅ 正确判断加载状态 if (this.loadStatus !== 'more') return; - this.loadStatus = 'loading'; - let url = '/reservate/queryPage' - this.$u.post(url, { - pageNo: this.pageNo, - pageSize: this.pageSize - },{ - WT: this.$getToken() - }).then(res => { - const rows = res.data.result || []; - if (this.pageNo === 1) this.flowList = []; - this.flowList = this.flowList.concat(rows); - - // ✅ 判断是否还有更多数据 - if (rows.length < this.pageSize) { - this.loadStatus = 'nomore'; - } else { - this.pageNo++; - this.loadStatus = 'more'; + this.loadStatus = 'loading'; + + // TODO: 接口联调时取消注释,删除 mock 数据 + // let url = '/reservate/queryPage' + // this.$u.post(url, { + // pageNo: this.pageNo, + // pageSize: this.pageSize + // },{ + // WT: this.$getToken() + // }).then(res => { + // const rows = res.data.result || []; + // if (this.pageNo === 1) this.flowList = []; + // this.flowList = this.flowList.concat(rows); + // if (rows.length < this.pageSize) { + // this.loadStatus = 'nomore'; + // } else { + // this.pageNo++; + // this.loadStatus = 'more'; + // } + // }).catch(err => { + // console.log("获取预约记录失败:", err) + // this.loadStatus = 'more'; + // }) + + // Mock 静态数据 + const mockData = [ + { + id: '1', + assetName: '东山大道435-2-1-104号', + status: 'pending', + date: '2026-06-28 14:00:00', + assetAddress: '宜昌市西陵区东山大道435号', + managerName: '张管家', + managerPhone: '13800138001', + lat: 30.7086, + lng: 111.2842, + coverImg: '/public/static/index/assets.jpg' + }, + { + id: '2', + assetName: '夷陵大道418号', + status: 'done', + date: '2026-06-20 10:30:00', + assetAddress: '宜昌市西陵区夷陵大道418号', + managerName: '李管家', + managerPhone: '13800138002', + lat: 30.7120, + lng: 111.2900, + coverImg: '/public/static/index/assets.jpg' } - }).catch(err => { - console.log("获取预约记录失败:", err) - this.loadStatus = 'more'; // ✅ 异常恢复 - }) + ]; + + if (this.pageNo === 1) this.flowList = []; + this.flowList = this.flowList.concat(mockData); + this.loadStatus = 'nomore'; }, viewLocation(item) { uni.openLocation({ @@ -198,7 +220,6 @@ export default { .reserve-records { min-height: 100vh; padding-top: 175rpx; - background: linear-gradient(0deg, #F3F1ED 43%, #F5E9DB 100%); box-sizing: border-box; } @@ -209,13 +230,13 @@ export default { } .record-list { - padding: 30rpx 40rpx; + padding: 30rpx 20rpx; } .record-card { background: #fff; border-radius: 12rpx; - padding: 32rpx; + padding: 25rpx; margin-bottom: 30rpx; box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05); } @@ -224,63 +245,79 @@ export default { display: flex; justify-content: space-between; align-items: center; - margin-bottom: 24rpx; + padding-bottom: 20rpx; } -.asset-name { - font-size: 32rpx; +.reserve-time { + font-size: 30rpx; font-weight: 500; - color: #2D2B2C; + color: #333; } .record-status { - font-size: 26rpx; - padding: 10rpx 15rpx; + font-size: 28rpx; + padding: 6rpx 16rpx; border-radius: 4rpx; &.done { - background: #FCE5E0; - color: #ED7748; + background: #fff; + color: #0088FE; } &.pending { - background: #F2F3F7; - color: #86868C; + background: #fff; + color: #FF8D1A; } } -.card-content { - margin-bottom: 32rpx; +.card-divider { + height: 1rpx; + background-color: #f0f0f0; } -.info-item { +.card-body { display: flex; - align-items: flex-start; + padding: 24rpx 0; } -.info-item:last-child { - margin-bottom: 0; -} - -.info-label { - font-size: 24rpx; - color: #666; - width: 120rpx; +.cover-img { + width: 160rpx; + height: 160rpx; + border-radius: 8rpx; flex-shrink: 0; - line-height: 44rpx; + background-color: #f5f5f5; } -.info-value { - font-size: 24rpx; - color: #333; +.card-info { flex: 1; - line-height: 44rpx; + margin-left: 20rpx; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.asset-name { + font-size: 30rpx; + font-weight: 600; + color: #2D2B2C; + margin-bottom: 12rpx; +} + +.info-row { + display: flex; + align-items: center; + margin-bottom: 8rpx; +} + +.info-text { + font-size: 24rpx; + color: #999; + margin-left: 8rpx; } .action-buttons { display: flex; justify-content: flex-end; gap: 20rpx; - margin-top: 32rpx; - padding-top: 32rpx; + padding-top: 20rpx; border-top: 1rpx solid #f0f0f0; } @@ -288,20 +325,20 @@ export default { width: 220rpx; height: 72rpx; background: #fff; - color: #2D2B2C; + color: #0088FE; font-size: 28rpx; border-radius: 8rpx; display: flex; align-items: center; justify-content: center; box-sizing: border-box; - border: 1px solid #222222; + border: 1px solid #0088FE; } .call-btn { width: 220rpx; height: 72rpx; - background: #ff3b30; + background: #0088FE; color: #fff; font-size: 28rpx; border-radius: 8rpx; diff --git a/pages-biz/search/searchList.vue b/pages-biz/search/searchList.vue index 513c3d5..6c5cf24 100644 --- a/pages-biz/search/searchList.vue +++ b/pages-biz/search/searchList.vue @@ -4,25 +4,29 @@ back-icon-color="#2D2B2C"> - - - - - - - - - - {{ city ||'宜昌市'}} - - - - - + + + {{ city ||'宜昌市'}} + + + + - + + + + + + + + + {{ tag }} @@ -96,7 +100,7 @@ tagGroupList: [], selectedTags: [], background: { - backgroundImage: 'linear-gradient(-90deg, #F9DED9 0%, #F8DFC0 99%);' + backgroundImage: 'linear-gradient(-90deg, rgb(207,240,255),rgb(179,217,255) 0% 99%);' }, } }, @@ -167,49 +171,93 @@ this.loadStatus = 'loading'; - this.$u.post('/assets/queryPage', { - assetsStatus:'闲置中', - assetsType: type, - pageNo: this.pageNo, - pageSize: this.pageSize, - keyWord: keyword, - bizZone: this.searchData.bizZone, - layout: this.searchData.layout, - renovationStatus: this.searchData.decoration, - features: this.searchData.feature - }).then(result => { - const rows = result.data.result || []; - - if (this.pageNo === 1 && rows.length === 0) { - this.flowList = []; - this.loadStatus = 'nomore'; - return; - } - - rows.forEach(row => { - if (row.coverImgUrl) { - row.coverImgUrl = this.$config.staticUrl + row.coverImgUrl - } else { - row.coverImgUrl = this.$config.staticUrl + this.defaultImgUrl - } - }) - - this.flowList = this.flowList.concat(rows); - - if (rows.length < this.pageSize) { - this.loadStatus = 'nomore'; - } else { - this.pageNo++; - this.loadStatus = 'more'; // ✅ 恢复 - } - this.keyWord = null + // TODO: 接口联调时取消注释,删除 mock 数据 + // this.$u.post('/assets/queryPage', { + // assetsStatus:'闲置中', + // assetsType: type, + // pageNo: this.pageNo, + // pageSize: this.pageSize, + // keyWord: keyword, + // bizZone: this.searchData.bizZone, + // layout: this.searchData.layout, + // renovationStatus: this.searchData.decoration, + // features: this.searchData.feature + // }).then(result => { + // const rows = result.data.result || []; + // if (this.pageNo === 1 && rows.length === 0) { + // this.flowList = []; + // this.loadStatus = 'nomore'; + // return; + // } + // rows.forEach(row => { + // if (row.coverImgUrl) { + // row.coverImgUrl = this.$config.staticUrl + row.coverImgUrl + // } else { + // row.coverImgUrl = this.$config.staticUrl + this.defaultImgUrl + // } + // }) + // this.flowList = this.flowList.concat(rows); + // if (rows.length < this.pageSize) { + // this.loadStatus = 'nomore'; + // } else { + // this.pageNo++; + // this.loadStatus = 'more'; + // } + // this.keyWord = null + // }).catch(err => { + // console.log("获取资产信息失败:", err); + // this.loadStatus = 'more'; + // }).finally(() => { + // uni.stopPullDownRefresh(); + // }); - }).catch(err => { - console.log("获取资产信息失败:", err); - this.loadStatus = 'more'; // ✅ 恢复 - }).finally(() => { + // Mock 静态数据 + const mockData = [ + { + assetsNo: 'ASSET-001', + assetsName: '东山大道435-2-1-104号', + assetsType: '住宅', + footPrint: 120, + orientation: '南', + coverImgUrl: this.$config.staticUrl + this.defaultImgUrl, + tags: ['近地铁', '精装修'] + }, + { + assetsNo: 'ASSET-002', + assetsName: '夷陵大道418号商铺', + assetsType: '商铺', + footPrint: 85, + orientation: '东', + coverImgUrl: this.$config.staticUrl + this.defaultImgUrl, + tags: ['临街', '人流量大'] + }, + { + assetsNo: 'ASSET-003', + assetsName: '解放路88号写字楼', + assetsType: '写字楼', + footPrint: 200, + orientation: '南', + coverImgUrl: this.$config.staticUrl + this.defaultImgUrl, + tags: ['交通便利', '配套齐全'] + }, + { + assetsNo: 'ASSET-004', + assetsName: '沿江大道168号住房', + assetsType: '住宅', + footPrint: 95, + orientation: '南', + coverImgUrl: this.$config.staticUrl + this.defaultImgUrl, + tags: ['拎包入住', '采光好'] + } + ]; + + setTimeout(() => { + if (this.pageNo === 1) this.flowList = []; + this.flowList = this.flowList.concat(mockData); + this.loadStatus = 'nomore'; + this.keyWord = null; uni.stopPullDownRefresh(); - }); + }, 500); }, loadMore() { if (this.loadStatus !== 'more') return; @@ -239,18 +287,26 @@ this.filterData = searchData; }, async getFeatures(){ - const res = await this.$u.get('/assets/getFeatures'); - if (res.flag) { - return res.data; - } - return []; + // TODO: 接口联调时取消注释,删除 mock 数据 + // const res = await this.$u.get('/assets/getFeatures'); + // if (res.flag) { + // return res.data; + // } + // return []; + + // Mock 静态数据 + return ['近地铁', '精装修', '拎包入住', '采光好', '临街', '配套齐全', '交通便利']; }, async getBizZone(){ - const res = await this.$u.get('/assets/getBizZones'); - if (res.flag) { - return res.data; - } - return []; + // TODO: 接口联调时取消注释,删除 mock 数据 + // const res = await this.$u.get('/assets/getBizZones'); + // if (res.flag) { + // return res.data; + // } + // return []; + + // Mock 静态数据 + return ['CBD商圈', '解放路商圈', '沿江大道', '东山大道', '夷陵大道']; }, getImageSize(url, index) { uni.getImageInfo({ @@ -306,13 +362,14 @@ } .search-list-content { - background: linear-gradient(-90deg, #F9DED9 0%, #F8DFC0 99%); + background: linear-gradient(-90deg, rgb(207,240,255),rgb(179,217,255) 0% 99%); border-radius: 0rpx; - padding-bottom: 20rpx; + padding-bottom: 0; + padding-top: var(--window-top, 0); } .search-bar-wrapper { - padding: 10rpx 20rpx; + padding: 10rpx 20rpx 0; } .search-bar { @@ -361,7 +418,7 @@ } .filter-dropdown-wrapper { - margin-bottom: 20rpx; + margin-bottom: 0; } .tag-group { diff --git a/pages/center/center.vue b/pages/center/center.vue index 3a274f7..740e8de 100644 --- a/pages/center/center.vue +++ b/pages/center/center.vue @@ -9,18 +9,18 @@ - + {{ unreadMsgCount > 99 ? '99+' : unreadMsgCount }} - @@ -28,95 +28,135 @@ - 我的合同 - - + + + 我的合同 + + + + + 待签署合同 {{unsignContractNum}} - 份待签署合同 - - - + + + - 我的预约 - - + + + 我的预约 + + + + + 预约中 {{handlingReserveNum}} - 个预约中 - - - + + + - 订单信息 + 常用功能 - + - + - 账单 - - - - - - 租赁资产 - - - - - - {{ unpaidWaeCount > 99 ? '99+' : unpaidWaeCount }} - - - 水电费待付 + 我的合同 - - - + + + - 租金待付 + 租赁账单 + + + + + + + 水电账单 + + + + + + + 收支记录 + + + + + + + 看房预约 + + + + + + + 退租申请 + + + + + + + 我要留言 - - - {{ unpaidMargin > 99 ? '99+' : unpaidMargin }} - + + - 保证金待付 + 维修需求 - + - 辅助工具 + 其他功能 - - - + + + + 实名认证 + 个人实名信息认证 - 留言板 + {{user.oaAuth ? '已认证' : '未认证'}} + - - - - - 计算器 + + + 计算器 + 便捷工具 + + + + + + 设置 + 小程序相关设置 + + + @@ -185,12 +225,12 @@ try { // await this.$checkToken(this.$getToken()) this.loadUserInfo() - this.countHandlingReserve() - this.countUnHandleContract() - this.countUnpayRentBills() - this.countUnpayWaeBills() - this.countUnreadMsg() - this.countUnpaidRentMargin() + // this.countHandlingReserve() + // this.countUnHandleContract() + // this.countUnpayRentBills() + // this.countUnpayWaeBills() + // this.countUnreadMsg() + // this.countUnpaidRentMargin() } catch (e) { return } @@ -349,15 +389,21 @@ .name-text { font-size: 38rpx; - font-weight: 500; + font-weight: 700; color: #2D2B2C; margin-right: 16rpx; } + .user-type-icon { + width: 34rpx; + height: 34rpx; + margin-right: 8rpx; + } + .auth-tag { font-size: 26rpx; color: #86868C; - padding: 4rpx 12rpx; + padding: 8rpx 12rpx; } .user-type { @@ -381,7 +427,7 @@ .contract-appointment { display: flex; gap: 30rpx; - padding: 20rpx; + padding: 15rpx; } .card { @@ -389,59 +435,66 @@ background-color: #fff; border-radius: 10rpx; padding: 24rpx; - display: flex; - flex-direction: column; - } - - .card-title { - font-size: 30rpx; - font-weight: 500; - color: #222222; - } - - .card-main { display: flex; justify-content: space-between; align-items: center; - position: relative; + min-height: 160rpx; } - .card-content { + .card-left { flex: 1; } - .card-number { - font-size: 48rpx; - font-weight: 600; - color: #EC712E; - margin-bottom: 8rpx; + .card-title { + display: flex; + align-items: center; + font-size: 35rpx; + font-weight: 700; + color: #222222; + margin-bottom: 16rpx; + } + + .arrow-icon { + margin-left: 5rpx; + } + + .card-info { + display: flex; + flex-direction: column; } .card-type { font-size: 26rpx; color: #86868C; + margin-bottom: 8rpx; + } + + .card-number { + font-size: 48rpx; + font-weight: 600; + color: #258AE6; + } + + .card-right { + display: flex; + align-items: center; } .card-icon { - position: absolute; - right: 0; - bottom: -20rpx; - } - - .card-icon image { width: 120rpx; - height: 111rpx; + max-height: 100rpx; } /* 我的服务 */ .my-service { + margin-top: 50rpx; padding: 30rpx 40rpx; margin-bottom: 30rpx; } .service-title { - font-size: 30rpx; - font-weight: 500; + font-size: 40rpx; + font-weight: 700; color: #222222; margin-bottom: 30rpx; } @@ -464,7 +517,7 @@ } .service-icon image { - width: 80rpx; + width: 70rpx; height: 70rpx; } @@ -481,40 +534,49 @@ } .tools-title { - font-size: 30rpx; - font-weight: 500; + font-size: 40rpx; + font-weight: 700; color: #222222; margin-bottom: 30rpx; } .tools-list { - margin-top: 50rpx; - margin-left: -20rpx; - display: flex; - flex-flow: row wrap; + background-color: #fff; + border-radius: 16rpx; + overflow: hidden; } .tool-item { - width: 25%; - margin-bottom: 40rpx; display: flex; - flex-direction: column; align-items: center; + padding: 28rpx 24rpx; + + &:active { + background-color: #f8f8f8; + } } .tool-icon { - margin-bottom: 16rpx; + width: 48rpx; + height: 48rpx; + margin-right: 20rpx; } - .tool-icon image { - width: 47rpx; - height: 47rpx; + .tool-center { + flex: 1; + display: flex; + flex-direction: column; } .tool-name { + font-size: 30rpx; + color: #333; + margin-bottom: 6rpx; + } + + .tool-desc { font-size: 24rpx; - color: #222222; - + color: #999; } .badge-wrapper { position: relative; @@ -548,4 +610,9 @@ .msg-icon { position: relative; } + + .msg-icon-img { + width: 48rpx; + height: 48rpx; + } \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue index 43d914d..72b2aa8 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -1,7 +1,7 @@