实现底部tab

This commit is contained in:
minimaxagent1 2025-08-13 11:43:35 +08:00
parent b07c3b769c
commit d6a6e0a086
45 changed files with 1906 additions and 56 deletions

View File

@ -14,4 +14,5 @@ export default {
<style>
/*每个页面公共css */
@import './static/css/tabbar.css';
</style>

View File

@ -7,8 +7,8 @@
:interval="interval"
circular
class="swiper"
indicator-active-color="#FFFFFF"
indicator-color="rgba(255, 255, 255, 0.5)"
indicator-active-color="#F15A04"
indicator-color="#D8D8D8"
>
<swiper-item
v-for="(item, index) in bannerList"
@ -71,12 +71,6 @@ export default {
transition: all 0.3s ease !important;
}
:deep([class*='swiper-dot-active']) {
width: 82rpx !important;
height: 14rpx;
/* 选中时稍大 */
}
.swiper-item {
display: block;
height: 300rpx;

View File

@ -12,8 +12,53 @@
"style": {
"navigationStyle": "custom"
}
},
{
"path": "pages/lease/lease",
"style": {
"navigationBarTitleText": "租赁申请",
"navigationStyle": "custom"
}
},
{
"path": "pages/profile/profile",
"style": {
"navigationBarTitleText": "个人中心",
"navigationStyle": "custom"
}
}
],
"tabBar": {
"color": "#999999",
"selectedColor": "#ff6b6b",
"backgroundColor": "#ffffff",
"borderStyle": "white",
"height": "60px",
"fontSize": "12px",
"iconWidth": "24px",
"iconHeight": "24px",
"spacing": "4px",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath": "static/icons/home.png",
"selectedIconPath": "static/icons/home-active.png"
},
{
"pagePath": "pages/lease/lease",
"text": "申请租赁",
"iconPath": "static/icons/rent.png",
"selectedIconPath": "static/icons/rent-active.png"
},
{
"pagePath": "pages/profile/profile",
"text": "个人中心",
"iconPath": "static/icons/profile.png",
"selectedIconPath": "static/icons/profile-active.png"
}
]
},
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "设备租赁",

View File

@ -33,13 +33,7 @@
@equipment-click="onEquipmentClick"
/>
<!-- 底部导航 -->
<bottom-nav
:active-index="activeNavIndex"
:icon-config="commonEnum"
:nav-items="navItems"
@nav-click="onNavClick"
/>
<!-- 底部导航已由系统tabBar处理 -->
</view>
</template>
@ -57,7 +51,6 @@ export default {
AnnouncementBar,
BannerSwiper,
EquipmentList,
BottomNav,
},
data() {
return {
@ -82,14 +75,14 @@ export default {
image: commonEnum.TEMP1,
},
{
image: commonEnum.TEMP2,
},
{
image: commonEnum.TEMP3,
image: commonEnum.TEMP1,
},
{
image: commonEnum.TEMP2,
},
{
image: commonEnum.TEMP1,
},
],
//
@ -176,7 +169,7 @@ export default {
<style lang="scss" scoped>
.home-container {
background: linear-gradient(to bottom, #ffddca 0px, #ffddca 450rpx, #f5f5f5 450rpx, #f5f5f5 100%);
min-height: 100vh;
padding-bottom: 120rpx; /* 为底部导航留出空间 */
max-width: 750rpx;
margin: 0 auto;

527
pages/lease/lease.vue Normal file
View File

@ -0,0 +1,527 @@
<template>
<view class="lease-page">
<!-- 状态栏 -->
<view class="status-bar">
<text class="time">9:41</text>
<view class="status-icons">
<text class="signal">📶</text>
<text class="wifi">📶</text>
<text class="battery">🔋</text>
</view>
</view>
<!-- 头部区域 -->
<view class="header">
<view class="header-content">
<view class="title-section">
<text class="page-title">租赁申请</text>
<view class="header-actions">
<text class="action-icon"></text>
<text class="action-icon">🎯</text>
</view>
</view>
<view class="product-info">
<text class="product-name">渝锦汇节能灶燃烧器</text>
<text class="product-slogan">租来节能,灶就省钱</text>
</view>
<view class="header-graphic">
<view class="flame-graphic"></view>
</view>
</view>
</view>
<!-- 主要内容区域 -->
<view class="main-content">
<!-- 租赁信息表单 -->
<view class="form-section">
<view class="section-header">
<view class="section-indicator"></view>
<text class="section-title">填写租赁信息</text>
</view>
<view class="form-fields">
<!-- 姓名 -->
<view class="form-item">
<text class="field-label">姓名</text>
<input class="field-input" v-model="formData.name" placeholder="请输入姓名" />
</view>
<!-- 手机号 -->
<view class="form-item">
<text class="field-label">手机号</text>
<input class="field-input" v-model="formData.phone" placeholder="请填写手机号" type="number" />
</view>
<!-- 地址 -->
<view class="form-item">
<text class="field-label">地址</text>
<view class="address-selector" @click="selectAddress">
<text class="address-text">{{ formData.address || '选择收货地址' }}</text>
<text class="map-icon">📍</text>
</view>
</view>
<!-- 当前定位 -->
<view class="location-info" v-if="currentLocation">
<view class="location-details">
<text class="location-title">当前定位:{{ currentLocation.company }}</text>
<text class="location-address">{{ currentLocation.address }}</text>
</view>
<button class="use-location-btn" @click="useCurrentLocation">使用</button>
</view>
<!-- 详细位置 -->
<view class="form-item">
<text class="field-label">详细位置</text>
<input class="field-input" v-model="formData.detailAddress" placeholder="例:6栋201室" />
</view>
<!-- 租赁设备 -->
<view class="form-item">
<text class="field-label">租赁设备</text>
<view class="selector" @click="selectEquipment">
<text class="selector-text">{{ formData.equipment || '选择设备类型' }}</text>
<text class="arrow-icon">></text>
</view>
</view>
<!-- 租赁周期 -->
<view class="form-item">
<text class="field-label">租赁周期</text>
<view class="selector" @click="selectPeriod">
<text class="selector-text">{{ formData.period || '1年' }}</text>
<text class="arrow-icon">></text>
</view>
</view>
</view>
</view>
<!-- 支付区域 -->
<view class="payment-section">
<button class="pay-button" @click="handlePayment">
立即支付 ¥{{ totalAmount }}
</button>
<view class="payment-details">
<view class="details-header" @click="toggleDetails">
<text class="details-title">明细</text>
<text class="details-arrow" :class="{ 'expanded': showDetails }"></text>
</view>
<view class="details-content" v-if="showDetails">
<view class="detail-item">
<text class="detail-label">租金</text>
<text class="detail-value">¥{{ totalAmount }}</text>
</view>
</view>
</view>
</view>
</view>
<!-- 底部导航已由系统tabBar处理 -->
</view>
</template>
<script>
export default {
name: 'LeasePage',
data() {
return {
formData: {
name: '张珊珊',
phone: '',
address: '',
detailAddress: '',
equipment: '',
period: '1年'
},
currentLocation: {
company: '福鼎创特物联科技有限公司',
address: '福建宁德市福鼎市'
},
showDetails: false,
totalAmount: '100.10'
}
},
methods: {
selectAddress() {
//
uni.showToast({
title: '选择地址功能',
icon: 'none'
})
},
useCurrentLocation() {
this.formData.address = this.currentLocation.company + ' ' + this.currentLocation.address
uni.showToast({
title: '已使用当前定位',
icon: 'success'
})
},
selectEquipment() {
//
uni.showActionSheet({
itemList: ['节能灶', '燃烧器', '燃气灶', '电磁炉'],
success: (res) => {
const equipmentList = ['节能灶', '燃烧器', '燃气灶', '电磁炉']
this.formData.equipment = equipmentList[res.tapIndex]
}
})
},
selectPeriod() {
//
uni.showActionSheet({
itemList: ['1个月', '3个月', '6个月', '1年', '2年'],
success: (res) => {
const periodList = ['1个月', '3个月', '6个月', '1年', '2年']
this.formData.period = periodList[res.tapIndex]
}
})
},
toggleDetails() {
this.showDetails = !this.showDetails
},
handlePayment() {
//
uni.showModal({
title: '确认支付',
content: `确认支付 ¥${this.totalAmount} 吗?`,
success: (res) => {
if (res.confirm) {
uni.showToast({
title: '支付成功',
icon: 'success'
})
}
}
})
},
// tabBar
goToHome() {
uni.switchTab({
url: '/pages/index/index'
})
},
goToProfile() {
uni.switchTab({
url: '/pages/profile/profile'
})
}
}
}
</script>
<style lang="scss" scoped>
.lease-page {
min-height: 100vh;
background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%);
position: relative;
}
//
.status-bar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 40rpx;
color: #fff;
font-size: 28rpx;
.status-icons {
display: flex;
gap: 10rpx;
}
}
//
.header {
padding: 40rpx;
color: #fff;
.header-content {
position: relative;
}
.title-section {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 40rpx;
.page-title {
font-size: 36rpx;
font-weight: bold;
}
.header-actions {
display: flex;
gap: 20rpx;
.action-icon {
font-size: 32rpx;
width: 60rpx;
height: 60rpx;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
}
}
.product-info {
margin-bottom: 40rpx;
.product-name {
display: block;
font-size: 48rpx;
font-weight: bold;
margin-bottom: 20rpx;
}
.product-slogan {
font-size: 28rpx;
color: #ff6b35;
}
}
.header-graphic {
position: absolute;
right: 0;
top: 0;
.flame-graphic {
width: 120rpx;
height: 120rpx;
background: radial-gradient(circle, #ff6b35 0%, #ff9a9e 100%);
border-radius: 50%;
box-shadow: 0 0 40rpx rgba(255, 107, 53, 0.6);
animation: pulse 2s infinite;
}
}
}
//
.main-content {
background: #fff;
border-radius: 40rpx 40rpx 0 0;
margin-top: -20rpx;
padding: 40rpx;
min-height: 60vh;
}
//
.form-section {
margin-bottom: 60rpx;
.section-header {
display: flex;
align-items: center;
margin-bottom: 40rpx;
.section-indicator {
width: 8rpx;
height: 40rpx;
background: #ff4757;
border-radius: 4rpx;
margin-right: 20rpx;
}
.section-title {
font-size: 32rpx;
font-weight: bold;
color: #333;
}
}
}
.form-fields {
.form-item {
margin-bottom: 40rpx;
.field-label {
display: block;
font-size: 28rpx;
color: #333;
margin-bottom: 20rpx;
font-weight: 500;
}
.field-input {
width: 100%;
height: 80rpx;
border: 2rpx solid #e0e0e0;
border-radius: 12rpx;
padding: 0 20rpx;
font-size: 28rpx;
background: #f8f9fa;
&:focus {
border-color: #ff9a9e;
background: #fff;
}
}
}
}
//
.address-selector {
display: flex;
justify-content: space-between;
align-items: center;
height: 80rpx;
border: 2rpx solid #e0e0e0;
border-radius: 12rpx;
padding: 0 20rpx;
background: #f8f9fa;
.address-text {
font-size: 28rpx;
color: #666;
}
.map-icon {
font-size: 32rpx;
}
}
//
.location-info {
display: flex;
justify-content: space-between;
align-items: center;
background: #f5f5f5;
border-radius: 12rpx;
padding: 20rpx;
margin-bottom: 40rpx;
.location-details {
flex: 1;
.location-title {
display: block;
font-size: 26rpx;
color: #333;
margin-bottom: 10rpx;
}
.location-address {
font-size: 24rpx;
color: #666;
}
}
.use-location-btn {
background: #ff9a9e;
color: #fff;
border: none;
border-radius: 20rpx;
padding: 10rpx 30rpx;
font-size: 24rpx;
}
}
//
.selector {
display: flex;
justify-content: space-between;
align-items: center;
height: 80rpx;
border: 2rpx solid #e0e0e0;
border-radius: 12rpx;
padding: 0 20rpx;
background: #f8f9fa;
.selector-text {
font-size: 28rpx;
color: #666;
}
.arrow-icon {
font-size: 24rpx;
color: #999;
}
}
//
.payment-section {
.pay-button {
width: 100%;
height: 100rpx;
background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%);
color: #fff;
border: none;
border-radius: 50rpx;
font-size: 32rpx;
font-weight: bold;
margin-bottom: 40rpx;
box-shadow: 0 10rpx 30rpx rgba(255, 154, 158, 0.3);
}
.payment-details {
.details-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 0;
border-bottom: 2rpx solid #f0f0f0;
.details-title {
font-size: 28rpx;
color: #333;
}
.details-arrow {
font-size: 24rpx;
color: #999;
transition: transform 0.3s;
&.expanded {
transform: rotate(180deg);
}
}
}
.details-content {
padding: 20rpx 0;
.detail-item {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
.detail-label {
font-size: 28rpx;
color: #333;
}
.detail-value {
font-size: 28rpx;
color: #ff4757;
font-weight: bold;
}
}
}
}
}
// 使tabBar
//
@keyframes pulse {
0% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(1.1);
opacity: 0.8;
}
100% {
transform: scale(1);
opacity: 1;
}
}
</style>

364
pages/profile/profile.vue Normal file
View File

@ -0,0 +1,364 @@
<template>
<view class="profile-page">
<!-- 状态栏 -->
<view class="status-bar">
<text class="time">9:41</text>
<view class="status-icons">
<text class="signal">📶</text>
<text class="wifi">📶</text>
<text class="battery">🔋</text>
</view>
</view>
<!-- 头部用户信息 -->
<view class="user-header">
<view class="user-info">
<view class="avatar">
<text class="avatar-text"></text>
</view>
<view class="user-details">
<text class="user-name">张珊珊</text>
<text class="user-phone">138****8888</text>
</view>
</view>
<view class="edit-btn">
<text class="edit-icon"></text>
</view>
</view>
<!-- 统计信息 -->
<view class="stats-section">
<view class="stat-item">
<text class="stat-number">2</text>
<text class="stat-label">租赁设备</text>
</view>
<view class="stat-item">
<text class="stat-number">¥200.20</text>
<text class="stat-label">累计租金</text>
</view>
<view class="stat-item">
<text class="stat-number">365</text>
<text class="stat-label">租赁天数</text>
</view>
</view>
<!-- 功能菜单 -->
<view class="menu-section">
<view class="menu-group">
<view class="menu-item" @click="goToMyLeases">
<view class="menu-left">
<text class="menu-icon">📋</text>
<text class="menu-title">我的租赁</text>
</view>
<text class="menu-arrow">></text>
</view>
<view class="menu-item" @click="goToPayments">
<view class="menu-left">
<text class="menu-icon">💰</text>
<text class="menu-title">支付记录</text>
</view>
<text class="menu-arrow">></text>
</view>
<view class="menu-item" @click="goToAddress">
<view class="menu-left">
<text class="menu-icon">📍</text>
<text class="menu-title">收货地址</text>
</view>
<text class="menu-arrow">></text>
</view>
</view>
<view class="menu-group">
<view class="menu-item" @click="goToSettings">
<view class="menu-left">
<text class="menu-icon"></text>
<text class="menu-title">设置</text>
</view>
<text class="menu-arrow">></text>
</view>
<view class="menu-item" @click="goToHelp">
<view class="menu-left">
<text class="menu-icon"></text>
<text class="menu-title">帮助中心</text>
</view>
<text class="menu-arrow">></text>
</view>
<view class="menu-item" @click="goToAbout">
<view class="menu-left">
<text class="menu-icon"></text>
<text class="menu-title">关于我们</text>
</view>
<text class="menu-arrow">></text>
</view>
</view>
</view>
<!-- 退出登录 -->
<view class="logout-section">
<button class="logout-btn" @click="handleLogout">退出登录</button>
</view>
</view>
</template>
<script>
export default {
name: 'ProfilePage',
data() {
return {
userInfo: {
name: '张珊珊',
phone: '138****8888',
avatar: '张'
},
stats: {
leaseCount: 2,
totalRent: '¥200.20',
leaseDays: 365
}
}
},
methods: {
goToMyLeases() {
uni.showToast({
title: '我的租赁',
icon: 'none'
})
},
goToPayments() {
uni.showToast({
title: '支付记录',
icon: 'none'
})
},
goToAddress() {
uni.showToast({
title: '收货地址',
icon: 'none'
})
},
goToSettings() {
uni.showToast({
title: '设置',
icon: 'none'
})
},
goToHelp() {
uni.showToast({
title: '帮助中心',
icon: 'none'
})
},
goToAbout() {
uni.showToast({
title: '关于我们',
icon: 'none'
})
},
handleLogout() {
uni.showModal({
title: '确认退出',
content: '确定要退出登录吗?',
success: (res) => {
if (res.confirm) {
uni.showToast({
title: '已退出登录',
icon: 'success'
})
//
setTimeout(() => {
uni.reLaunch({
url: '/pages/login/login'
})
}, 1500)
}
}
})
}
}
}
</script>
<style lang="scss" scoped>
.profile-page {
min-height: 100vh;
background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%);
padding-bottom: 120rpx; /* 为tabBar留出空间 */
}
//
.status-bar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 40rpx;
color: #fff;
font-size: 28rpx;
.status-icons {
display: flex;
gap: 10rpx;
}
}
//
.user-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 40rpx;
color: #fff;
.user-info {
display: flex;
align-items: center;
.avatar {
width: 120rpx;
height: 120rpx;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin-right: 30rpx;
.avatar-text {
font-size: 48rpx;
font-weight: bold;
color: #fff;
}
}
.user-details {
.user-name {
display: block;
font-size: 36rpx;
font-weight: bold;
margin-bottom: 10rpx;
}
.user-phone {
font-size: 28rpx;
opacity: 0.8;
}
}
}
.edit-btn {
width: 60rpx;
height: 60rpx;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
.edit-icon {
font-size: 32rpx;
}
}
}
//
.stats-section {
background: #fff;
margin: 0 40rpx;
border-radius: 20rpx;
padding: 40rpx;
display: flex;
justify-content: space-around;
box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.1);
.stat-item {
display: flex;
flex-direction: column;
align-items: center;
.stat-number {
font-size: 36rpx;
font-weight: bold;
color: #ff9a9e;
margin-bottom: 10rpx;
}
.stat-label {
font-size: 24rpx;
color: #666;
}
}
}
//
.menu-section {
margin: 40rpx;
.menu-group {
background: #fff;
border-radius: 20rpx;
margin-bottom: 30rpx;
overflow: hidden;
box-shadow: 0 5rpx 20rpx rgba(0, 0, 0, 0.05);
.menu-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx 40rpx;
border-bottom: 2rpx solid #f5f5f5;
&:last-child {
border-bottom: none;
}
.menu-left {
display: flex;
align-items: center;
.menu-icon {
font-size: 40rpx;
margin-right: 30rpx;
}
.menu-title {
font-size: 32rpx;
color: #333;
}
}
.menu-arrow {
font-size: 28rpx;
color: #999;
}
&:active {
background: #f8f9fa;
}
}
}
}
// 退
.logout-section {
margin: 40rpx;
.logout-btn {
width: 100%;
height: 100rpx;
background: #fff;
color: #ff4757;
border: 2rpx solid #ff4757;
border-radius: 50rpx;
font-size: 32rpx;
font-weight: bold;
&:active {
background: #ff4757;
color: #fff;
}
}
}
</style>

55
static/css/tabbar.css Normal file
View File

@ -0,0 +1,55 @@
/* 自定义TabBar样式 */
.uni-tabbar {
padding: 8px 0 4px 0;
box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05);
}
.uni-tabbar-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 4px 0;
min-height: 50px;
}
.uni-tabbar-item__icon {
margin-bottom: 4px;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
}
.uni-tabbar-item__text {
font-size: 12px;
line-height: 1.2;
text-align: center;
margin-top: 2px;
}
/* 选中状态优化 */
.uni-tabbar-item--selected .uni-tabbar-item__text {
font-weight: 500;
}
/* 图标和文字间距 */
.uni-tabbar-item__icon + .uni-tabbar-item__text {
margin-top: 4px;
}
/* 整体间距优化 */
.uni-tabbar__list {
display: flex;
justify-content: space-around;
align-items: center;
padding: 0 20px;
}
/* 安全区域适配 */
@supports (padding-bottom: env(safe-area-inset-bottom)) {
.uni-tabbar {
padding-bottom: calc(4px + env(safe-area-inset-bottom));
}
}

37
static/icons/README.md Normal file
View File

@ -0,0 +1,37 @@
# 图标文件说明
当前使用的图标已下载到本地,原始资源来自 `enum/commonEnum.js` 中定义的远程资源:
## 首页图标
- 未选中:`home.png` (原URL: https://api.ccttiot.com/image-1754981938495.png)
- 选中:`home-active.png` (原URL: https://api.ccttiot.com/image-1754981895711.png)
## 租赁图标
- 未选中:`rent.png` (原URL: https://api.ccttiot.com/image-1754981988082.png)
- 选中:`rent-active.png` (原URL: https://api.ccttiot.com/image-1754986634575.png)
## 个人中心图标
- 未选中:`profile.png` (原URL: https://api.ccttiot.com/image-1754986718771.png)
- 选中:`profile-active.png` (原URL: https://api.ccttiot.com/image-1754986763842.png)
## 图标配置
- 未选中颜色:`#999999`
- 选中颜色:`#ff6b6b`
- 背景色:`#ffffff`
- 边框样式:`white`
- 高度:`60px`
- 字体大小:`12px`
- 图标尺寸:`24px x 24px`
- 间距:`4px`
## 相关文件
- `pages.json` - tabBar配置
- `enum/commonEnum.js` - 图标资源定义
- `download-icons.js` - 图标下载脚本
- `static/css/tabbar.css` - 自定义tabBar样式
- `App.vue` - 全局样式引入
## 注意事项
- 微信小程序不支持在tabBar中使用网络图片
- 图标已下载到本地 `static/icons/` 目录
- 如需更新图标,请重新运行 `download-icons.js` 脚本

Binary file not shown.

After

Width:  |  Height:  |  Size: 882 B

BIN
static/icons/home.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
static/icons/profile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

BIN
static/icons/rent.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1 +1 @@
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["<script>\nexport default {\n onLaunch: function () {\n console.log('App Launch')\n },\n onShow: function () {\n console.log('App Show')\n },\n onHide: function () {\n console.log('App Hide')\n },\n}\n</script>\n\n<style>\n/*每个页面公共css */\n</style>\n","import App from './App'\n\n// #ifndef VUE3\nimport Vue from 'vue'\nimport './uni.promisify.adaptor'\nVue.config.productionTip = false\nApp.mpType = 'app'\nconst app = new Vue({\n ...App,\n})\napp.$mount()\n// #endif\n\n// #ifdef VUE3\nimport { createSSRApp } from 'vue'\nimport PageScrollMixin from './mixins/page-scroll-mixin.js'\n\nexport function createApp() {\n const app = createSSRApp(App)\n\n // 注册全局 mixin (Vue3 方式)\n app.mixin(PageScrollMixin)\n\n return {\n app,\n }\n}\n// #endif\n"],"names":["uni","createSSRApp","App","PageScrollMixin"],"mappings":";;;;;;;;AACA,MAAK,YAAU;AAAA,EACb,UAAU,WAAY;AACpBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,YAAY;AAAA,EACzB;AAAA,EACD,QAAQ,WAAY;AAClBA,kBAAAA,MAAA,MAAA,OAAA,gBAAY,UAAU;AAAA,EACvB;AAAA,EACD,QAAQ,WAAY;AAClBA,kBAAAA,MAAA,MAAA,OAAA,iBAAY,UAAU;AAAA,EACvB;AACH;ACMO,SAAS,YAAY;AAC1B,QAAM,MAAMC,cAAY,aAACC,SAAG;AAG5B,MAAI,MAAMC,sCAAe;AAEzB,SAAO;AAAA,IACL;AAAA,EACD;AACH;;;"}
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["<script>\nexport default {\n onLaunch: function () {\n console.log('App Launch')\n },\n onShow: function () {\n console.log('App Show')\n },\n onHide: function () {\n console.log('App Hide')\n },\n}\n</script>\n\n<style>\n/*每个页面公共css */\n@import './static/css/tabbar.css';\n</style>\n","import App from './App'\n\n// #ifndef VUE3\nimport Vue from 'vue'\nimport './uni.promisify.adaptor'\nVue.config.productionTip = false\nApp.mpType = 'app'\nconst app = new Vue({\n ...App,\n})\napp.$mount()\n// #endif\n\n// #ifdef VUE3\nimport { createSSRApp } from 'vue'\nimport PageScrollMixin from './mixins/page-scroll-mixin.js'\n\nexport function createApp() {\n const app = createSSRApp(App)\n\n // 注册全局 mixin (Vue3 方式)\n app.mixin(PageScrollMixin)\n\n return {\n app,\n }\n}\n// #endif\n"],"names":["uni","createSSRApp","App","PageScrollMixin"],"mappings":";;;;;;;;;;AACA,MAAK,YAAU;AAAA,EACb,UAAU,WAAY;AACpBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,YAAY;AAAA,EACzB;AAAA,EACD,QAAQ,WAAY;AAClBA,kBAAAA,MAAA,MAAA,OAAA,gBAAY,UAAU;AAAA,EACvB;AAAA,EACD,QAAQ,WAAY;AAClBA,kBAAAA,MAAA,MAAA,OAAA,iBAAY,UAAU;AAAA,EACvB;AACH;ACMO,SAAS,YAAY;AAC1B,QAAM,MAAMC,cAAY,aAACC,SAAG;AAG5B,MAAI,MAAMC,sCAAe;AAEzB,SAAO;AAAA,IACL;AAAA,EACD;AACH;;;"}

View File

@ -1 +1 @@
{"version":3,"file":"banner-swiper.js","sources":["components/banner-swiper/banner-swiper.vue","C:/Users/Administrator/Downloads/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovd29yay9IQnVpbGRlclByb2plY3RzL0hvbWVMZWFzZS9jb21wb25lbnRzL2Jhbm5lci1zd2lwZXIvYmFubmVyLXN3aXBlci52dWU"],"sourcesContent":["<template>\n <view class=\"banner-section\">\n <swiper\n :autoplay=\"autoplay\"\n :duration=\"duration\"\n :indicator-dots=\"indicatorDots\"\n :interval=\"interval\"\n circular\n class=\"swiper\"\n indicator-active-color=\"#FFFFFF\"\n indicator-color=\"rgba(255, 255, 255, 0.5)\"\n >\n <swiper-item\n v-for=\"(item, index) in bannerList\"\n :key=\"index\"\n @click=\"onBannerClick(item, index)\"\n >\n <image :src=\"item.image\" mode=\"aspectFill\"></image>\n </swiper-item>\n </swiper>\n </view>\n</template>\n\n<script>\nexport default {\n name: 'BannerSwiper',\n props: {\n bannerList: {\n type: Array,\n default: () => [],\n },\n indicatorDots: {\n type: Boolean,\n default: true,\n },\n autoplay: {\n type: Boolean,\n default: true,\n },\n interval: {\n type: Number,\n default: 2000,\n },\n duration: {\n type: Number,\n default: 500,\n },\n },\n methods: {\n onSwiperChange(e) {\n this.$emit('change', e.detail.current)\n },\n onBannerClick(item, index) {\n this.$emit('banner-click', { item, index })\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.banner-section {\n padding: 30rpx;\n}\n\n.swiper {\n height: 300rpx;\n /* 通用指示器样式 - 覆盖所有可能的类名 */\n\n :deep([class*='swiper-dot']) {\n border-radius: 50% !important;\n transition: all 0.3s ease !important;\n }\n\n :deep([class*='swiper-dot-active']) {\n width: 82rpx !important;\n height: 14rpx;\n /* 选中时稍大 */\n }\n\n .swiper-item {\n display: block;\n height: 300rpx;\n line-height: 300rpx;\n text-align: center;\n\n image {\n width: 100%;\n height: 100%;\n border-radius: 20rpx;\n }\n }\n}\n</style>\n","import Component from 'D:/work/HBuilderProjects/HomeLease/components/banner-swiper/banner-swiper.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;AAwBA,MAAK,YAAU;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS,MAAM,CAAE;AAAA,IAClB;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,SAAS;AAAA,IACP,eAAe,GAAG;AAChB,WAAK,MAAM,UAAU,EAAE,OAAO,OAAO;AAAA,IACtC;AAAA,IACD,cAAc,MAAM,OAAO;AACzB,WAAK,MAAM,gBAAgB,EAAE,MAAM,OAAO;AAAA,IAC3C;AAAA,EACF;AACH;;;;;;;;;;;;;;;;;ACvDA,GAAG,gBAAgB,SAAS;"}
{"version":3,"file":"banner-swiper.js","sources":["components/banner-swiper/banner-swiper.vue","C:/Users/Administrator/Downloads/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovd29yay9IQnVpbGRlclByb2plY3RzL0hvbWVMZWFzZS9jb21wb25lbnRzL2Jhbm5lci1zd2lwZXIvYmFubmVyLXN3aXBlci52dWU"],"sourcesContent":["<template>\n <view class=\"banner-section\">\n <swiper\n :autoplay=\"autoplay\"\n :duration=\"duration\"\n :indicator-dots=\"indicatorDots\"\n :interval=\"interval\"\n circular\n class=\"swiper\"\n indicator-active-color=\"#F15A04\"\n indicator-color=\"#D8D8D8\"\n >\n <swiper-item\n v-for=\"(item, index) in bannerList\"\n :key=\"index\"\n @click=\"onBannerClick(item, index)\"\n >\n <image :src=\"item.image\" mode=\"aspectFill\"></image>\n </swiper-item>\n </swiper>\n </view>\n</template>\n\n<script>\nexport default {\n name: 'BannerSwiper',\n props: {\n bannerList: {\n type: Array,\n default: () => [],\n },\n indicatorDots: {\n type: Boolean,\n default: true,\n },\n autoplay: {\n type: Boolean,\n default: true,\n },\n interval: {\n type: Number,\n default: 2000,\n },\n duration: {\n type: Number,\n default: 500,\n },\n },\n methods: {\n onSwiperChange(e) {\n this.$emit('change', e.detail.current)\n },\n onBannerClick(item, index) {\n this.$emit('banner-click', { item, index })\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.banner-section {\n padding: 30rpx;\n}\n\n.swiper {\n height: 300rpx;\n /* 通用指示器样式 - 覆盖所有可能的类名 */\n\n :deep([class*='swiper-dot']) {\n border-radius: 50% !important;\n transition: all 0.3s ease !important;\n }\n\n .swiper-item {\n display: block;\n height: 300rpx;\n line-height: 300rpx;\n text-align: center;\n\n image {\n width: 100%;\n height: 100%;\n border-radius: 20rpx;\n }\n }\n}\n</style>\n","import Component from 'D:/work/HBuilderProjects/HomeLease/components/banner-swiper/banner-swiper.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;AAwBA,MAAK,YAAU;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS,MAAM,CAAE;AAAA,IAClB;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,SAAS;AAAA,IACP,eAAe,GAAG;AAChB,WAAK,MAAM,UAAU,EAAE,OAAO,OAAO;AAAA,IACtC;AAAA,IACD,cAAc,MAAM,OAAO;AACzB,WAAK,MAAM,gBAAgB,EAAE,MAAM,OAAO;AAAA,IAC3C;AAAA,EACF;AACH;;;;;;;;;;;;;;;;;ACvDA,GAAG,gBAAgB,SAAS;"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,8 @@ const mixins_pageScrollMixin = require("./mixins/page-scroll-mixin.js");
if (!Math) {
"./pages/index/index.js";
"./pages/login/login.js";
"./pages/lease/lease.js";
"./pages/profile/profile.js";
}
const _sfc_main = {
onLaunch: function() {

View File

@ -1,10 +1,42 @@
{
"pages": ["pages/index/index", "pages/login/login"],
"pages": [
"pages/index/index",
"pages/login/login",
"pages/lease/lease",
"pages/profile/profile"
],
"window": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "设备租赁",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"tabBar": {
"color": "#999999",
"selectedColor": "#ff6b6b",
"backgroundColor": "#ffffff",
"borderStyle": "white",
"iconHeight": "24px",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath": "static/icons/home.png",
"selectedIconPath": "static/icons/home-active.png"
},
{
"pagePath": "pages/lease/lease",
"text": "申请租赁",
"iconPath": "static/icons/rent.png",
"selectedIconPath": "static/icons/rent-active.png"
},
{
"pagePath": "pages/profile/profile",
"text": "个人中心",
"iconPath": "static/icons/profile.png",
"selectedIconPath": "static/icons/profile-active.png"
}
]
},
"usingComponents": {}
}
}

View File

@ -1,3 +1,51 @@
/*每个页面公共css */
/* 自定义TabBar样式 */
.uni-tabbar {
padding: 8px 0 4px 0;
box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05);
}
.uni-tabbar-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 4px 0;
min-height: 50px;
}
.uni-tabbar-item__icon {
margin-bottom: 4px;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
}
.uni-tabbar-item__text {
font-size: 12px;
line-height: 1.2;
text-align: center;
margin-top: 2px;
}
/* 选中状态优化 */
.uni-tabbar-item--selected .uni-tabbar-item__text {
font-weight: 500;
}
/* 图标和文字间距 */
.uni-tabbar-item__icon + .uni-tabbar-item__text {
margin-top: 4px;
}
/* 整体间距优化 */
.uni-tabbar__list {
display: flex;
justify-content: space-around;
align-items: center;
padding: 0 20px;
}
/* 安全区域适配 */
@supports (padding-bottom: env(safe-area-inset-bottom)) {
.uni-tabbar {
padding-bottom: calc(4px + env(safe-area-inset-bottom));
}
}
page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px}[data-c-h="true"]{display: none !important;}

View File

@ -1 +1 @@
<view class="banner-section data-v-f6b62634"><swiper autoplay="{{b}}" duration="{{c}}" indicator-dots="{{d}}" interval="{{e}}" circular class="swiper data-v-f6b62634" indicator-active-color="#FFFFFF" indicator-color="rgba(255, 255, 255, 0.5)"><swiper-item wx:for="{{a}}" wx:for-item="item" wx:key="b" class="data-v-f6b62634" bindtap="{{item.c}}"><image class="data-v-f6b62634" src="{{item.a}}" mode="aspectFill"></image></swiper-item></swiper></view>
<view class="banner-section data-v-f6b62634"><swiper autoplay="{{b}}" duration="{{c}}" indicator-dots="{{d}}" interval="{{e}}" circular class="swiper data-v-f6b62634" indicator-active-color="#F15A04" indicator-color="#D8D8D8"><swiper-item wx:for="{{a}}" wx:for-item="item" wx:key="b" class="data-v-f6b62634" bindtap="{{item.c}}"><image class="data-v-f6b62634" src="{{item.a}}" mode="aspectFill"></image></swiper-item></swiper></view>

View File

@ -34,11 +34,6 @@
border-radius: 50% !important;
transition: all 0.3s ease !important;
}
.swiper.data-v-f6b62634 [class*="swiper-dot-active"] {
width: 82rpx !important;
height: 14rpx;
/* 选中时稍大 */
}
.swiper .swiper-item.data-v-f6b62634 {
display: block;
height: 300rpx;

View File

@ -5,14 +5,12 @@ const HomeHeader = () => "../../components/home-header/home-header.js";
const AnnouncementBar = () => "../../components/announcement-bar/announcement-bar.js";
const BannerSwiper = () => "../../components/banner-swiper/banner-swiper.js";
const EquipmentList = () => "../../components/equipment-list/equipment-list.js";
const BottomNav = () => "../../components/bottom-nav/bottom-nav.js";
const _sfc_main = {
components: {
HomeHeader,
AnnouncementBar,
BannerSwiper,
EquipmentList,
BottomNav
EquipmentList
},
data() {
return {
@ -35,13 +33,13 @@ const _sfc_main = {
image: enum_commonEnum.commonEnum.TEMP1
},
{
image: enum_commonEnum.commonEnum.TEMP2
},
{
image: enum_commonEnum.commonEnum.TEMP3
image: enum_commonEnum.commonEnum.TEMP1
},
{
image: enum_commonEnum.commonEnum.TEMP2
},
{
image: enum_commonEnum.commonEnum.TEMP1
}
],
// 设备列表数据
@ -121,16 +119,14 @@ if (!Array) {
const _easycom_announcement_bar2 = common_vendor.resolveComponent("announcement-bar");
const _easycom_banner_swiper2 = common_vendor.resolveComponent("banner-swiper");
const _easycom_equipment_list2 = common_vendor.resolveComponent("equipment-list");
const _easycom_bottom_nav2 = common_vendor.resolveComponent("bottom-nav");
(_easycom_home_header2 + _easycom_announcement_bar2 + _easycom_banner_swiper2 + _easycom_equipment_list2 + _easycom_bottom_nav2)();
(_easycom_home_header2 + _easycom_announcement_bar2 + _easycom_banner_swiper2 + _easycom_equipment_list2)();
}
const _easycom_home_header = () => "../../components/home-header/home-header.js";
const _easycom_announcement_bar = () => "../../components/announcement-bar/announcement-bar.js";
const _easycom_banner_swiper = () => "../../components/banner-swiper/banner-swiper.js";
const _easycom_equipment_list = () => "../../components/equipment-list/equipment-list.js";
const _easycom_bottom_nav = () => "../../components/bottom-nav/bottom-nav.js";
if (!Math) {
(_easycom_home_header + _easycom_announcement_bar + _easycom_banner_swiper + _easycom_equipment_list + _easycom_bottom_nav)();
(_easycom_home_header + _easycom_announcement_bar + _easycom_banner_swiper + _easycom_equipment_list)();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
@ -158,12 +154,6 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
j: common_vendor.p({
["equipment-list"]: $data.equipmentList,
title: $data.equipmentTitle
}),
k: common_vendor.o($options.onNavClick),
l: common_vendor.p({
["active-index"]: $data.activeNavIndex,
["icon-config"]: $data.commonEnum,
["nav-items"]: $data.navItems
})
};
}

View File

@ -5,7 +5,6 @@
"home-header": "../../components/home-header/home-header",
"announcement-bar": "../../components/announcement-bar/announcement-bar",
"banner-swiper": "../../components/banner-swiper/banner-swiper",
"equipment-list": "../../components/equipment-list/equipment-list",
"bottom-nav": "../../components/bottom-nav/bottom-nav"
"equipment-list": "../../components/equipment-list/equipment-list"
}
}
}

View File

@ -1 +1 @@
<view class="home-container data-v-1cf27b2a"><home-header wx:if="{{b}}" class="data-v-1cf27b2a" bindlocationClick="{{a}}" u-i="1cf27b2a-0" bind:__l="__l" u-p="{{b}}"/><announcement-bar wx:if="{{d}}" class="data-v-1cf27b2a" bindannouncementClick="{{c}}" u-i="1cf27b2a-1" bind:__l="__l" u-p="{{d}}"/><banner-swiper wx:if="{{g}}" class="data-v-1cf27b2a" bindchange="{{e}}" bindbannerClick="{{f}}" u-i="1cf27b2a-2" bind:__l="__l" u-p="{{g}}"/><equipment-list wx:if="{{j}}" class="data-v-1cf27b2a" bindrenew="{{h}}" bindequipmentClick="{{i}}" u-i="1cf27b2a-3" bind:__l="__l" u-p="{{j}}"/><bottom-nav wx:if="{{l}}" class="data-v-1cf27b2a" bindnavClick="{{k}}" u-i="1cf27b2a-4" bind:__l="__l" u-p="{{l}}"/></view>
<view class="home-container data-v-1cf27b2a"><home-header wx:if="{{b}}" class="data-v-1cf27b2a" bindlocationClick="{{a}}" u-i="1cf27b2a-0" bind:__l="__l" u-p="{{b}}"/><announcement-bar wx:if="{{d}}" class="data-v-1cf27b2a" bindannouncementClick="{{c}}" u-i="1cf27b2a-1" bind:__l="__l" u-p="{{d}}"/><banner-swiper wx:if="{{g}}" class="data-v-1cf27b2a" bindchange="{{e}}" bindbannerClick="{{f}}" u-i="1cf27b2a-2" bind:__l="__l" u-p="{{g}}"/><equipment-list wx:if="{{j}}" class="data-v-1cf27b2a" bindrenew="{{h}}" bindequipmentClick="{{i}}" u-i="1cf27b2a-3" bind:__l="__l" u-p="{{j}}"/></view>

View File

@ -25,6 +25,7 @@
/* 文章场景相关 */
.home-container.data-v-1cf27b2a {
background: linear-gradient(to bottom, #ffddca 0px, #ffddca 450rpx, #f5f5f5 450rpx, #f5f5f5 100%);
min-height: 100vh;
padding-bottom: 120rpx;
/* 为底部导航留出空间 */
max-width: 750rpx;

View File

@ -0,0 +1,116 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
name: "LeasePage",
data() {
return {
formData: {
name: "张珊珊",
phone: "",
address: "",
detailAddress: "",
equipment: "",
period: "1年"
},
currentLocation: {
company: "福鼎创特物联科技有限公司",
address: "福建宁德市福鼎市"
},
showDetails: false,
totalAmount: "100.10"
};
},
methods: {
selectAddress() {
common_vendor.index.showToast({
title: "选择地址功能",
icon: "none"
});
},
useCurrentLocation() {
this.formData.address = this.currentLocation.company + " " + this.currentLocation.address;
common_vendor.index.showToast({
title: "已使用当前定位",
icon: "success"
});
},
selectEquipment() {
common_vendor.index.showActionSheet({
itemList: ["节能灶", "燃烧器", "燃气灶", "电磁炉"],
success: (res) => {
const equipmentList = ["节能灶", "燃烧器", "燃气灶", "电磁炉"];
this.formData.equipment = equipmentList[res.tapIndex];
}
});
},
selectPeriod() {
common_vendor.index.showActionSheet({
itemList: ["1个月", "3个月", "6个月", "1年", "2年"],
success: (res) => {
const periodList = ["1个月", "3个月", "6个月", "1年", "2年"];
this.formData.period = periodList[res.tapIndex];
}
});
},
toggleDetails() {
this.showDetails = !this.showDetails;
},
handlePayment() {
common_vendor.index.showModal({
title: "确认支付",
content: `确认支付 ¥${this.totalAmount} 吗?`,
success: (res) => {
if (res.confirm) {
common_vendor.index.showToast({
title: "支付成功",
icon: "success"
});
}
}
});
},
// 页面跳转现在由系统tabBar处理
goToHome() {
common_vendor.index.switchTab({
url: "/pages/index/index"
});
},
goToProfile() {
common_vendor.index.switchTab({
url: "/pages/profile/profile"
});
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: $data.formData.name,
b: common_vendor.o(($event) => $data.formData.name = $event.detail.value),
c: $data.formData.phone,
d: common_vendor.o(($event) => $data.formData.phone = $event.detail.value),
e: common_vendor.t($data.formData.address || "选择收货地址"),
f: common_vendor.o((...args) => $options.selectAddress && $options.selectAddress(...args)),
g: $data.currentLocation
}, $data.currentLocation ? {
h: common_vendor.t($data.currentLocation.company),
i: common_vendor.t($data.currentLocation.address),
j: common_vendor.o((...args) => $options.useCurrentLocation && $options.useCurrentLocation(...args))
} : {}, {
k: $data.formData.detailAddress,
l: common_vendor.o(($event) => $data.formData.detailAddress = $event.detail.value),
m: common_vendor.t($data.formData.equipment || "选择设备类型"),
n: common_vendor.o((...args) => $options.selectEquipment && $options.selectEquipment(...args)),
o: common_vendor.t($data.formData.period || "1年"),
p: common_vendor.o((...args) => $options.selectPeriod && $options.selectPeriod(...args)),
q: common_vendor.t($data.totalAmount),
r: common_vendor.o((...args) => $options.handlePayment && $options.handlePayment(...args)),
s: $data.showDetails ? 1 : "",
t: common_vendor.o((...args) => $options.toggleDetails && $options.toggleDetails(...args)),
v: $data.showDetails
}, $data.showDetails ? {
w: common_vendor.t($data.totalAmount)
} : {});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-45bce28e"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/lease/lease.js.map

View File

@ -0,0 +1,5 @@
{
"navigationBarTitleText": "租赁申请",
"navigationStyle": "custom",
"usingComponents": {}
}

View File

@ -0,0 +1 @@
<view class="lease-page data-v-45bce28e"><view class="status-bar data-v-45bce28e"><text class="time data-v-45bce28e">9:41</text><view class="status-icons data-v-45bce28e"><text class="signal data-v-45bce28e">📶</text><text class="wifi data-v-45bce28e">📶</text><text class="battery data-v-45bce28e">🔋</text></view></view><view class="header data-v-45bce28e"><view class="header-content data-v-45bce28e"><view class="title-section data-v-45bce28e"><text class="page-title data-v-45bce28e">租赁申请</text><view class="header-actions data-v-45bce28e"><text class="action-icon data-v-45bce28e">⋯</text><text class="action-icon data-v-45bce28e">🎯</text></view></view><view class="product-info data-v-45bce28e"><text class="product-name data-v-45bce28e">渝锦汇节能灶燃烧器</text><text class="product-slogan data-v-45bce28e">租来节能,灶就省钱</text></view><view class="header-graphic data-v-45bce28e"><view class="flame-graphic data-v-45bce28e"></view></view></view></view><view class="main-content data-v-45bce28e"><view class="form-section data-v-45bce28e"><view class="section-header data-v-45bce28e"><view class="section-indicator data-v-45bce28e"></view><text class="section-title data-v-45bce28e">填写租赁信息</text></view><view class="form-fields data-v-45bce28e"><view class="form-item data-v-45bce28e"><text class="field-label data-v-45bce28e">姓名</text><input class="field-input data-v-45bce28e" placeholder="请输入姓名" value="{{a}}" bindinput="{{b}}"/></view><view class="form-item data-v-45bce28e"><text class="field-label data-v-45bce28e">手机号</text><input class="field-input data-v-45bce28e" placeholder="请填写手机号" type="number" value="{{c}}" bindinput="{{d}}"/></view><view class="form-item data-v-45bce28e"><text class="field-label data-v-45bce28e">地址</text><view class="address-selector data-v-45bce28e" bindtap="{{f}}"><text class="address-text data-v-45bce28e">{{e}}</text><text class="map-icon data-v-45bce28e">📍</text></view></view><view wx:if="{{g}}" class="location-info data-v-45bce28e"><view class="location-details data-v-45bce28e"><text class="location-title data-v-45bce28e">当前定位:{{h}}</text><text class="location-address data-v-45bce28e">{{i}}</text></view><button class="use-location-btn data-v-45bce28e" bindtap="{{j}}">使用</button></view><view class="form-item data-v-45bce28e"><text class="field-label data-v-45bce28e">详细位置</text><input class="field-input data-v-45bce28e" placeholder="例:6栋201室" value="{{k}}" bindinput="{{l}}"/></view><view class="form-item data-v-45bce28e"><text class="field-label data-v-45bce28e">租赁设备</text><view class="selector data-v-45bce28e" bindtap="{{n}}"><text class="selector-text data-v-45bce28e">{{m}}</text><text class="arrow-icon data-v-45bce28e">></text></view></view><view class="form-item data-v-45bce28e"><text class="field-label data-v-45bce28e">租赁周期</text><view class="selector data-v-45bce28e" bindtap="{{p}}"><text class="selector-text data-v-45bce28e">{{o}}</text><text class="arrow-icon data-v-45bce28e">></text></view></view></view></view><view class="payment-section data-v-45bce28e"><button class="pay-button data-v-45bce28e" bindtap="{{r}}"> 立即支付 ¥{{q}}</button><view class="payment-details data-v-45bce28e"><view class="details-header data-v-45bce28e" bindtap="{{t}}"><text class="details-title data-v-45bce28e">明细</text><text class="{{['details-arrow', 'data-v-45bce28e', s && 'expanded']}}">▼</text></view><view wx:if="{{v}}" class="details-content data-v-45bce28e"><view class="detail-item data-v-45bce28e"><text class="detail-label data-v-45bce28e">租金</text><text class="detail-value data-v-45bce28e">¥{{w}}</text></view></view></view></view></view></view>

View File

@ -0,0 +1,277 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.lease-page.data-v-45bce28e {
min-height: 100vh;
background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%);
position: relative;
}
.status-bar.data-v-45bce28e {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 40rpx;
color: #fff;
font-size: 28rpx;
}
.status-bar .status-icons.data-v-45bce28e {
display: flex;
gap: 10rpx;
}
.header.data-v-45bce28e {
padding: 40rpx;
color: #fff;
}
.header .header-content.data-v-45bce28e {
position: relative;
}
.header .title-section.data-v-45bce28e {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 40rpx;
}
.header .title-section .page-title.data-v-45bce28e {
font-size: 36rpx;
font-weight: bold;
}
.header .title-section .header-actions.data-v-45bce28e {
display: flex;
gap: 20rpx;
}
.header .title-section .header-actions .action-icon.data-v-45bce28e {
font-size: 32rpx;
width: 60rpx;
height: 60rpx;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
.header .product-info.data-v-45bce28e {
margin-bottom: 40rpx;
}
.header .product-info .product-name.data-v-45bce28e {
display: block;
font-size: 48rpx;
font-weight: bold;
margin-bottom: 20rpx;
}
.header .product-info .product-slogan.data-v-45bce28e {
font-size: 28rpx;
color: #ff6b35;
}
.header .header-graphic.data-v-45bce28e {
position: absolute;
right: 0;
top: 0;
}
.header .header-graphic .flame-graphic.data-v-45bce28e {
width: 120rpx;
height: 120rpx;
background: radial-gradient(circle, #ff6b35 0%, #ff9a9e 100%);
border-radius: 50%;
box-shadow: 0 0 40rpx rgba(255, 107, 53, 0.6);
animation: pulse-45bce28e 2s infinite;
}
.main-content.data-v-45bce28e {
background: #fff;
border-radius: 40rpx 40rpx 0 0;
margin-top: -20rpx;
padding: 40rpx;
min-height: 60vh;
}
.form-section.data-v-45bce28e {
margin-bottom: 60rpx;
}
.form-section .section-header.data-v-45bce28e {
display: flex;
align-items: center;
margin-bottom: 40rpx;
}
.form-section .section-header .section-indicator.data-v-45bce28e {
width: 8rpx;
height: 40rpx;
background: #ff4757;
border-radius: 4rpx;
margin-right: 20rpx;
}
.form-section .section-header .section-title.data-v-45bce28e {
font-size: 32rpx;
font-weight: bold;
color: #333;
}
.form-fields .form-item.data-v-45bce28e {
margin-bottom: 40rpx;
}
.form-fields .form-item .field-label.data-v-45bce28e {
display: block;
font-size: 28rpx;
color: #333;
margin-bottom: 20rpx;
font-weight: 500;
}
.form-fields .form-item .field-input.data-v-45bce28e {
width: 100%;
height: 80rpx;
border: 2rpx solid #e0e0e0;
border-radius: 12rpx;
padding: 0 20rpx;
font-size: 28rpx;
background: #f8f9fa;
}
.form-fields .form-item .field-input.data-v-45bce28e:focus {
border-color: #ff9a9e;
background: #fff;
}
.address-selector.data-v-45bce28e {
display: flex;
justify-content: space-between;
align-items: center;
height: 80rpx;
border: 2rpx solid #e0e0e0;
border-radius: 12rpx;
padding: 0 20rpx;
background: #f8f9fa;
}
.address-selector .address-text.data-v-45bce28e {
font-size: 28rpx;
color: #666;
}
.address-selector .map-icon.data-v-45bce28e {
font-size: 32rpx;
}
.location-info.data-v-45bce28e {
display: flex;
justify-content: space-between;
align-items: center;
background: #f5f5f5;
border-radius: 12rpx;
padding: 20rpx;
margin-bottom: 40rpx;
}
.location-info .location-details.data-v-45bce28e {
flex: 1;
}
.location-info .location-details .location-title.data-v-45bce28e {
display: block;
font-size: 26rpx;
color: #333;
margin-bottom: 10rpx;
}
.location-info .location-details .location-address.data-v-45bce28e {
font-size: 24rpx;
color: #666;
}
.location-info .use-location-btn.data-v-45bce28e {
background: #ff9a9e;
color: #fff;
border: none;
border-radius: 20rpx;
padding: 10rpx 30rpx;
font-size: 24rpx;
}
.selector.data-v-45bce28e {
display: flex;
justify-content: space-between;
align-items: center;
height: 80rpx;
border: 2rpx solid #e0e0e0;
border-radius: 12rpx;
padding: 0 20rpx;
background: #f8f9fa;
}
.selector .selector-text.data-v-45bce28e {
font-size: 28rpx;
color: #666;
}
.selector .arrow-icon.data-v-45bce28e {
font-size: 24rpx;
color: #999;
}
.payment-section .pay-button.data-v-45bce28e {
width: 100%;
height: 100rpx;
background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%);
color: #fff;
border: none;
border-radius: 50rpx;
font-size: 32rpx;
font-weight: bold;
margin-bottom: 40rpx;
box-shadow: 0 10rpx 30rpx rgba(255, 154, 158, 0.3);
}
.payment-section .payment-details .details-header.data-v-45bce28e {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 0;
border-bottom: 2rpx solid #f0f0f0;
}
.payment-section .payment-details .details-header .details-title.data-v-45bce28e {
font-size: 28rpx;
color: #333;
}
.payment-section .payment-details .details-header .details-arrow.data-v-45bce28e {
font-size: 24rpx;
color: #999;
transition: transform 0.3s;
}
.payment-section .payment-details .details-header .details-arrow.expanded.data-v-45bce28e {
transform: rotate(180deg);
}
.payment-section .payment-details .details-content.data-v-45bce28e {
padding: 20rpx 0;
}
.payment-section .payment-details .details-content .detail-item.data-v-45bce28e {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
}
.payment-section .payment-details .details-content .detail-item .detail-label.data-v-45bce28e {
font-size: 28rpx;
color: #333;
}
.payment-section .payment-details .details-content .detail-item .detail-value.data-v-45bce28e {
font-size: 28rpx;
color: #ff4757;
font-weight: bold;
}
@keyframes pulse-45bce28e {
0% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(1.1);
opacity: 0.8;
}
100% {
transform: scale(1);
opacity: 1;
}
}

View File

@ -0,0 +1,90 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
name: "ProfilePage",
data() {
return {
userInfo: {
name: "张珊珊",
phone: "138****8888",
avatar: "张"
},
stats: {
leaseCount: 2,
totalRent: "¥200.20",
leaseDays: 365
}
};
},
methods: {
goToMyLeases() {
common_vendor.index.showToast({
title: "我的租赁",
icon: "none"
});
},
goToPayments() {
common_vendor.index.showToast({
title: "支付记录",
icon: "none"
});
},
goToAddress() {
common_vendor.index.showToast({
title: "收货地址",
icon: "none"
});
},
goToSettings() {
common_vendor.index.showToast({
title: "设置",
icon: "none"
});
},
goToHelp() {
common_vendor.index.showToast({
title: "帮助中心",
icon: "none"
});
},
goToAbout() {
common_vendor.index.showToast({
title: "关于我们",
icon: "none"
});
},
handleLogout() {
common_vendor.index.showModal({
title: "确认退出",
content: "确定要退出登录吗?",
success: (res) => {
if (res.confirm) {
common_vendor.index.showToast({
title: "已退出登录",
icon: "success"
});
setTimeout(() => {
common_vendor.index.reLaunch({
url: "/pages/login/login"
});
}, 1500);
}
}
});
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_vendor.o((...args) => $options.goToMyLeases && $options.goToMyLeases(...args)),
b: common_vendor.o((...args) => $options.goToPayments && $options.goToPayments(...args)),
c: common_vendor.o((...args) => $options.goToAddress && $options.goToAddress(...args)),
d: common_vendor.o((...args) => $options.goToSettings && $options.goToSettings(...args)),
e: common_vendor.o((...args) => $options.goToHelp && $options.goToHelp(...args)),
f: common_vendor.o((...args) => $options.goToAbout && $options.goToAbout(...args)),
g: common_vendor.o((...args) => $options.handleLogout && $options.handleLogout(...args))
};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-dd383ca2"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/profile/profile.js.map

View File

@ -0,0 +1,5 @@
{
"navigationBarTitleText": "个人中心",
"navigationStyle": "custom",
"usingComponents": {}
}

View File

@ -0,0 +1 @@
<view class="profile-page data-v-dd383ca2"><view class="status-bar data-v-dd383ca2"><text class="time data-v-dd383ca2">9:41</text><view class="status-icons data-v-dd383ca2"><text class="signal data-v-dd383ca2">📶</text><text class="wifi data-v-dd383ca2">📶</text><text class="battery data-v-dd383ca2">🔋</text></view></view><view class="user-header data-v-dd383ca2"><view class="user-info data-v-dd383ca2"><view class="avatar data-v-dd383ca2"><text class="avatar-text data-v-dd383ca2">张</text></view><view class="user-details data-v-dd383ca2"><text class="user-name data-v-dd383ca2">张珊珊</text><text class="user-phone data-v-dd383ca2">138****8888</text></view></view><view class="edit-btn data-v-dd383ca2"><text class="edit-icon data-v-dd383ca2">✏️</text></view></view><view class="stats-section data-v-dd383ca2"><view class="stat-item data-v-dd383ca2"><text class="stat-number data-v-dd383ca2">2</text><text class="stat-label data-v-dd383ca2">租赁设备</text></view><view class="stat-item data-v-dd383ca2"><text class="stat-number data-v-dd383ca2">¥200.20</text><text class="stat-label data-v-dd383ca2">累计租金</text></view><view class="stat-item data-v-dd383ca2"><text class="stat-number data-v-dd383ca2">365</text><text class="stat-label data-v-dd383ca2">租赁天数</text></view></view><view class="menu-section data-v-dd383ca2"><view class="menu-group data-v-dd383ca2"><view class="menu-item data-v-dd383ca2" bindtap="{{a}}"><view class="menu-left data-v-dd383ca2"><text class="menu-icon data-v-dd383ca2">📋</text><text class="menu-title data-v-dd383ca2">我的租赁</text></view><text class="menu-arrow data-v-dd383ca2">></text></view><view class="menu-item data-v-dd383ca2" bindtap="{{b}}"><view class="menu-left data-v-dd383ca2"><text class="menu-icon data-v-dd383ca2">💰</text><text class="menu-title data-v-dd383ca2">支付记录</text></view><text class="menu-arrow data-v-dd383ca2">></text></view><view class="menu-item data-v-dd383ca2" bindtap="{{c}}"><view class="menu-left data-v-dd383ca2"><text class="menu-icon data-v-dd383ca2">📍</text><text class="menu-title data-v-dd383ca2">收货地址</text></view><text class="menu-arrow data-v-dd383ca2">></text></view></view><view class="menu-group data-v-dd383ca2"><view class="menu-item data-v-dd383ca2" bindtap="{{d}}"><view class="menu-left data-v-dd383ca2"><text class="menu-icon data-v-dd383ca2">⚙️</text><text class="menu-title data-v-dd383ca2">设置</text></view><text class="menu-arrow data-v-dd383ca2">></text></view><view class="menu-item data-v-dd383ca2" bindtap="{{e}}"><view class="menu-left data-v-dd383ca2"><text class="menu-icon data-v-dd383ca2">❓</text><text class="menu-title data-v-dd383ca2">帮助中心</text></view><text class="menu-arrow data-v-dd383ca2">></text></view><view class="menu-item data-v-dd383ca2" bindtap="{{f}}"><view class="menu-left data-v-dd383ca2"><text class="menu-icon data-v-dd383ca2"></text><text class="menu-title data-v-dd383ca2">关于我们</text></view><text class="menu-arrow data-v-dd383ca2">></text></view></view></view><view class="logout-section data-v-dd383ca2"><button class="logout-btn data-v-dd383ca2" bindtap="{{g}}">退出登录</button></view></view>

View File

@ -0,0 +1,171 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.profile-page.data-v-dd383ca2 {
min-height: 100vh;
background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%);
padding-bottom: 120rpx;
/* 为tabBar留出空间 */
}
.status-bar.data-v-dd383ca2 {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 40rpx;
color: #fff;
font-size: 28rpx;
}
.status-bar .status-icons.data-v-dd383ca2 {
display: flex;
gap: 10rpx;
}
.user-header.data-v-dd383ca2 {
display: flex;
justify-content: space-between;
align-items: center;
padding: 40rpx;
color: #fff;
}
.user-header .user-info.data-v-dd383ca2 {
display: flex;
align-items: center;
}
.user-header .user-info .avatar.data-v-dd383ca2 {
width: 120rpx;
height: 120rpx;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin-right: 30rpx;
}
.user-header .user-info .avatar .avatar-text.data-v-dd383ca2 {
font-size: 48rpx;
font-weight: bold;
color: #fff;
}
.user-header .user-info .user-details .user-name.data-v-dd383ca2 {
display: block;
font-size: 36rpx;
font-weight: bold;
margin-bottom: 10rpx;
}
.user-header .user-info .user-details .user-phone.data-v-dd383ca2 {
font-size: 28rpx;
opacity: 0.8;
}
.user-header .edit-btn.data-v-dd383ca2 {
width: 60rpx;
height: 60rpx;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
.user-header .edit-btn .edit-icon.data-v-dd383ca2 {
font-size: 32rpx;
}
.stats-section.data-v-dd383ca2 {
background: #fff;
margin: 0 40rpx;
border-radius: 20rpx;
padding: 40rpx;
display: flex;
justify-content: space-around;
box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.1);
}
.stats-section .stat-item.data-v-dd383ca2 {
display: flex;
flex-direction: column;
align-items: center;
}
.stats-section .stat-item .stat-number.data-v-dd383ca2 {
font-size: 36rpx;
font-weight: bold;
color: #ff9a9e;
margin-bottom: 10rpx;
}
.stats-section .stat-item .stat-label.data-v-dd383ca2 {
font-size: 24rpx;
color: #666;
}
.menu-section.data-v-dd383ca2 {
margin: 40rpx;
}
.menu-section .menu-group.data-v-dd383ca2 {
background: #fff;
border-radius: 20rpx;
margin-bottom: 30rpx;
overflow: hidden;
box-shadow: 0 5rpx 20rpx rgba(0, 0, 0, 0.05);
}
.menu-section .menu-group .menu-item.data-v-dd383ca2 {
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx 40rpx;
border-bottom: 2rpx solid #f5f5f5;
}
.menu-section .menu-group .menu-item.data-v-dd383ca2:last-child {
border-bottom: none;
}
.menu-section .menu-group .menu-item .menu-left.data-v-dd383ca2 {
display: flex;
align-items: center;
}
.menu-section .menu-group .menu-item .menu-left .menu-icon.data-v-dd383ca2 {
font-size: 40rpx;
margin-right: 30rpx;
}
.menu-section .menu-group .menu-item .menu-left .menu-title.data-v-dd383ca2 {
font-size: 32rpx;
color: #333;
}
.menu-section .menu-group .menu-item .menu-arrow.data-v-dd383ca2 {
font-size: 28rpx;
color: #999;
}
.menu-section .menu-group .menu-item.data-v-dd383ca2:active {
background: #f8f9fa;
}
.logout-section.data-v-dd383ca2 {
margin: 40rpx;
}
.logout-section .logout-btn.data-v-dd383ca2 {
width: 100%;
height: 100rpx;
background: #fff;
color: #ff4757;
border: 2rpx solid #ff4757;
border-radius: 50rpx;
font-size: 32rpx;
font-weight: bold;
}
.logout-section .logout-btn.data-v-dd383ca2:active {
background: #ff4757;
color: #fff;
}

View File

@ -3,12 +3,19 @@
"miniprogram": {
"list": [
{
"name": "pages/login/login",
"pathName": "pages/login/login",
"name": "pages/lease/lease",
"pathName": "pages/lease/lease",
"query": "",
"scene": null,
"launchMode": "default"
},
{
"name": "pages/login/login",
"pathName": "pages/login/login",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "pages/index/index",
"pathName": "pages/index/index",
@ -19,4 +26,4 @@
]
}
}
}
}

View File

@ -0,0 +1,55 @@
/* 自定义TabBar样式 */
.uni-tabbar {
padding: 8px 0 4px 0;
box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05);
}
.uni-tabbar-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 4px 0;
min-height: 50px;
}
.uni-tabbar-item__icon {
margin-bottom: 4px;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
}
.uni-tabbar-item__text {
font-size: 12px;
line-height: 1.2;
text-align: center;
margin-top: 2px;
}
/* 选中状态优化 */
.uni-tabbar-item--selected .uni-tabbar-item__text {
font-weight: 500;
}
/* 图标和文字间距 */
.uni-tabbar-item__icon + .uni-tabbar-item__text {
margin-top: 4px;
}
/* 整体间距优化 */
.uni-tabbar__list {
display: flex;
justify-content: space-around;
align-items: center;
padding: 0 20px;
}
/* 安全区域适配 */
@supports (padding-bottom: env(safe-area-inset-bottom)) {
.uni-tabbar {
padding-bottom: calc(4px + env(safe-area-inset-bottom));
}
}

View File

@ -0,0 +1,37 @@
# 图标文件说明
当前使用的图标已下载到本地,原始资源来自 `enum/commonEnum.js` 中定义的远程资源:
## 首页图标
- 未选中:`home.png` (原URL: https://api.ccttiot.com/image-1754981938495.png)
- 选中:`home-active.png` (原URL: https://api.ccttiot.com/image-1754981895711.png)
## 租赁图标
- 未选中:`rent.png` (原URL: https://api.ccttiot.com/image-1754981988082.png)
- 选中:`rent-active.png` (原URL: https://api.ccttiot.com/image-1754986634575.png)
## 个人中心图标
- 未选中:`profile.png` (原URL: https://api.ccttiot.com/image-1754986718771.png)
- 选中:`profile-active.png` (原URL: https://api.ccttiot.com/image-1754986763842.png)
## 图标配置
- 未选中颜色:`#999999`
- 选中颜色:`#ff6b6b`
- 背景色:`#ffffff`
- 边框样式:`white`
- 高度:`60px`
- 字体大小:`12px`
- 图标尺寸:`24px x 24px`
- 间距:`4px`
## 相关文件
- `pages.json` - tabBar配置
- `enum/commonEnum.js` - 图标资源定义
- `download-icons.js` - 图标下载脚本
- `static/css/tabbar.css` - 自定义tabBar样式
- `App.vue` - 全局样式引入
## 注意事项
- 微信小程序不支持在tabBar中使用网络图片
- 图标已下载到本地 `static/icons/` 目录
- 如需更新图标,请重新运行 `download-icons.js` 脚本

Binary file not shown.

After

Width:  |  Height:  |  Size: 882 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB