diff --git a/components/ImageSwiper/README.md b/components/ImageSwiper/README.md new file mode 100644 index 0000000..ba8a79e --- /dev/null +++ b/components/ImageSwiper/README.md @@ -0,0 +1,239 @@ +# ImageSwiper 轮播图组件 + +一个功能丰富的轮播图组件,支持自定义圆角、缩略图导航和图片描述。 + +## 功能特性 + +- 🎨 **可配置圆角**:支持数字(px)或字符串形式的圆角设置 +- 🖼️ **缩略图导航**:底部缩略图快速切换,支持左右滑动 +- 📱 **响应式设计**:适配不同屏幕尺寸 +- 🎯 **自定义数据**:支持传入自定义图片数据 +- 📊 **进度指示器**:显示当前图片位置 +- 🎭 **选中状态**:缩略图选中时高亮显示,带缩放动画 +- 🔄 **自动滚动**:缩略图自动滚动到可视区域 +- ⚡ **性能优化**:使用计算属性优化渲染 + +## 基础用法 + +### 默认使用 + +```vue + + + +``` + +### 自定义圆角 + +```vue + +``` + +### 自定义图片数据 + +```vue + + + +``` + +### 缩略图滑动功能 + +组件支持缩略图左右滑动,当图片数量较多时,缩略图会自动滚动到可视区域: + +```vue + + + +``` + +## API 文档 + +### Props + +| 参数 | 类型 | 默认值 | 说明 | +|------|------|--------|------| +| borderRadius | Number \| String | 8 | 轮播图圆角大小,数字时单位为px | +| images | Array | [] | 图片数据数组,为空时使用默认数据 | + +### images 数组结构 + +```typescript +interface ImageItem { + photoUrl: string; // 图片URL + photoName: string; // 图片名称/描述 +} +``` + +## 样式定制 + +### 圆角配置示例 + +```vue + + + + + + + + + + + + + + +``` + +### 动态圆角控制 + +```vue + + + +``` + +## 高级用法 + +### 响应式圆角 + +```vue + + + +``` + +### 主题适配 + +```vue + + + +``` + +## 注意事项 + +1. **圆角单位**:数字类型自动添加px单位,字符串类型直接使用 +2. **图片比例**:建议使用相同比例的图片以获得最佳显示效果 +3. **性能优化**:大量图片时建议使用懒加载 +4. **兼容性**:支持微信小程序、H5、App等平台 + +## 更新日志 + +### v1.2.0 +- ✨ 新增缩略图左右滑动功能 +- ✨ 新增缩略图选中状态高亮显示 +- ✨ 新增缩略图自动滚动到可视区域 +- 🎨 优化缩略图动画效果和交互体验 +- 🔧 改进主轮播图与缩略图的联动机制 +- 📝 更新文档和演示示例 + +### v1.1.0 +- ✨ 新增 `borderRadius` 属性,支持自定义圆角 +- ✨ 新增 `images` 属性,支持自定义图片数据 +- 🔧 优化组件结构,使用计算属性提升性能 +- 📝 完善文档和示例 + +### v1.0.0 +- 🎉 初始版本发布 +- ✨ 基础轮播图功能 +- ✨ 缩略图导航 +- ✨ 进度指示器 + +## 技术栈 + +- Vue 3 Composition API +- SCSS +- uni-app + +## 浏览器支持 + +- 微信小程序 +- H5 (Chrome, Firefox, Safari, Edge) +- App (iOS, Android) + +## 许可证 + +MIT License \ No newline at end of file diff --git a/components/ImageSwiper/demo.vue b/components/ImageSwiper/demo.vue new file mode 100644 index 0000000..3cafa48 --- /dev/null +++ b/components/ImageSwiper/demo.vue @@ -0,0 +1,151 @@ + + + + + \ No newline at end of file diff --git a/components/ImageSwiper/index.vue b/components/ImageSwiper/index.vue index 4557a88..5464163 100644 --- a/components/ImageSwiper/index.vue +++ b/components/ImageSwiper/index.vue @@ -2,17 +2,19 @@ - + @@ -20,50 +22,122 @@ 图片{{ active + 1 }}/{{ thumbnails.length }} + - - - {{ thumb.description }} - + + + + {{ thumb.photoName }} + + + diff --git a/components/ImageSwiper/styles/index.scss b/components/ImageSwiper/styles/index.scss index 1317e65..69d2d85 100644 --- a/components/ImageSwiper/styles/index.scss +++ b/components/ImageSwiper/styles/index.scss @@ -4,9 +4,9 @@ } .swiper-box { - border-radius: 8px; height: 200px; overflow: hidden; + // 圆角通过内联样式动态设置 } .swiper-item image { @@ -31,23 +31,53 @@ left: 12px; right: 12px; bottom: 36px; + height: 60px; +} + +.thumbnail-scroll { + width: 100%; + height: 100%; + white-space: nowrap; +} + +.thumbnail-list { display: flex; - gap: 5px; + align-items: center; + gap: 10px; + padding: 0 5px; } .thumbnail-item { + flex-shrink: 0; text-align: center; + transition: all 0.3s ease; + cursor: pointer; + + &.active { + image { + border: 1px solid #fff; + } + } } .thumbnail-item image { width: 48px; height: 38px; border-radius: 4px; - border: 1px solid #fff; + box-sizing: border-box; + border: 1px solid transparent; + transition: all 0.3s ease; + display: block; } .thumbnail-item text { color: #fff; font-size: 8px; display: block; + margin-top: 4px; + transition: all 0.3s ease; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 48px; } diff --git a/components/LocationInfo/index.vue b/components/LocationInfo/index.vue new file mode 100644 index 0000000..7e02f22 --- /dev/null +++ b/components/LocationInfo/index.vue @@ -0,0 +1,46 @@ + + + + + \ No newline at end of file diff --git a/components/LocationInfo/styles/index.scss b/components/LocationInfo/styles/index.scss new file mode 100644 index 0000000..2f46e10 --- /dev/null +++ b/components/LocationInfo/styles/index.scss @@ -0,0 +1,14 @@ +.store-address { + display: flex; + align-items: center; + font-size: 14px; + color: #333; + + text { + flex: 1; + padding: 0 6px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} diff --git a/components/TopNavBar/README.md b/components/TopNavBar/README.md new file mode 100644 index 0000000..789d89c --- /dev/null +++ b/components/TopNavBar/README.md @@ -0,0 +1,176 @@ +# TopNavBar 顶部导航栏组件 + +一个功能完整的顶部导航栏组件,支持固定定位、自定义样式和插槽内容。 + +## 功能特性 + +- ✅ 支持固定在页面顶部(可配置) +- ✅ 自动适配状态栏高度 +- ✅ 支持自定义标题和颜色 +- ✅ 支持插槽自定义内容 +- ✅ 内置返回按钮功能 +- ✅ 响应式设计 +- ✅ 深色模式支持 +- ✅ 安全区域适配 + +## 基础用法 + +### 简单使用 +```vue + + + +``` + +### 固定在顶部 +```vue + +``` + +### 自定义样式 +```vue + +``` + +### 标题对齐方式 +```vue + +``` + +### 使用插槽 +```vue + +``` + +## API + +### Props + +| 参数 | 类型 | 默认值 | 说明 | +|------|------|--------|------| +| title | String | '' | 导航栏标题 | +| fixed | Boolean | false | 是否固定在页面顶部 | +| showBack | Boolean | true | 是否显示返回按钮 | +| backgroundColor | String | '#ffffff' | 背景颜色 | +| titleColor | String | '#333333' | 标题文字颜色 | +| backIconColor | String | '#333333' | 返回按钮图标颜色 | +| hideStatusBar | Boolean | false | 是否隐藏状态栏占位 | +| zIndex | Number | 999 | 层级索引 | +| titleAlign | String | 'center' | 标题对齐方式,可选值:'center'、'left' | + +### Events + +| 事件名 | 说明 | 参数 | +|--------|------|------| +| back | 点击返回按钮时触发 | - | + +### Slots + +| 插槽名 | 说明 | +|--------|------| +| title | 自定义标题内容 | +| right | 自定义右侧内容 | + +## 使用示例 + +### 订单列表页面 +```vue + +``` + +### 商品详情页面 +```vue + + + +``` + +## 注意事项 + +1. **固定定位使用**:当设置 `fixed="true"` 时,组件会固定在页面顶部,此时需要为页面内容添加适当的顶部间距。 + +2. **状态栏适配**:组件会自动获取系统状态栏高度并进行适配,无需手动处理。 + +3. **返回按钮**:默认点击返回按钮会执行 `uni.navigateBack()`,如果需要自定义返回逻辑,请监听 `@back` 事件。 + +4. **样式覆盖**:如需自定义样式,建议通过 props 传入颜色值,或在父组件中使用深度选择器覆盖样式。 + +5. **插槽使用**:title 插槽会完全替换默认的标题显示,right 插槽用于添加右侧操作按钮。 + +## 更新日志 + +### v1.0.0 +- 初始版本发布 +- 支持基础导航栏功能 +- 支持固定定位配置 +- 支持自定义样式和插槽 \ No newline at end of file diff --git a/components/TopNavBar/demo.vue b/components/TopNavBar/demo.vue new file mode 100644 index 0000000..48972c1 --- /dev/null +++ b/components/TopNavBar/demo.vue @@ -0,0 +1,151 @@ + + + + + \ No newline at end of file diff --git a/components/TopNavBar/index.vue b/components/TopNavBar/index.vue new file mode 100644 index 0000000..bdb4518 --- /dev/null +++ b/components/TopNavBar/index.vue @@ -0,0 +1,133 @@ + + + + + \ No newline at end of file diff --git a/components/TopNavBar/styles/index.scss b/components/TopNavBar/styles/index.scss new file mode 100644 index 0000000..9b9c74d --- /dev/null +++ b/components/TopNavBar/styles/index.scss @@ -0,0 +1,108 @@ +// TopNavBar 组件样式 +.top-nav-bar { + width: 100%; + background-color: #ffffff; + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.1); + + &--fixed { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 999; + } + + .nav-bar-content { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 16px; + position: relative; + + .nav-bar-left { + display: flex; + align-items: center; + justify-content: center; + width: 30px; + height: 30px; + position: absolute; + left: 8px; + top: 50%; + transform: translateY(-50%); + z-index: 2; + cursor: pointer; + transition: opacity 0.2s ease; + + &:hover { + opacity: 0.7; + } + + &:active { + opacity: 0.5; + } + } + + .nav-bar-center { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + padding: 0 20px; // 为左右按钮留出空间 + + // 居中对齐(默认) + &--center { + justify-content: center; + + .nav-bar-title { + text-align: center; + } + } + + // 左对齐 + &--left { + justify-content: flex-start; + padding-left: 20px; // 为返回按钮留出更多空间 + + .nav-bar-title { + text-align: left; + } + } + + .nav-bar-title { + font-size: 18px; + font-weight: 500; + color: #333333; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + line-height: 1.4; + } + } + + .nav-bar-right { + display: flex; + align-items: center; + justify-content: center; + min-width: 30px; + height: 30px; + position: absolute; + right: 8px; + top: 50%; + transform: translateY(-50%); + z-index: 2; + } + } +} + +// 固定导航栏时的页面内容适配 +.page-with-fixed-navbar { + padding-top: calc(var(--status-bar-height, 44px) + 44px); +} + +// 安全区域适配 +.top-nav-bar { + padding-left: constant(safe-area-inset-left); + padding-left: env(safe-area-inset-left); + padding-right: constant(safe-area-inset-right); + padding-right: env(safe-area-inset-right); +} diff --git a/components/TopNavBar/使用指南.md b/components/TopNavBar/使用指南.md new file mode 100644 index 0000000..7448198 --- /dev/null +++ b/components/TopNavBar/使用指南.md @@ -0,0 +1,312 @@ +# TopNavBar 组件使用指南 + +## 组件概述 + +TopNavBar 是一个功能完整的顶部导航栏组件,专为 uni-app 项目设计。该组件支持固定定位、自定义样式、插槽内容等功能,可以满足大部分页面的导航需求。 + +## 核心特性 + +### 1. 可配置固定定位 +- **默认行为**: 组件默认不固定,跟随页面滚动 +- **固定模式**: 设置 `fixed="true"` 可将导航栏固定在页面顶部 +- **自动适配**: 固定模式下自动处理状态栏高度和安全区域 + +### 2. 智能状态栏适配 +- 自动获取系统状态栏高度 +- 支持不同平台的导航栏高度适配(iOS: 44px, Android: 48px) +- 可选择隐藏状态栏占位区域 + +### 3. 灵活的自定义选项 +- 支持自定义背景色、标题色、图标色 +- 可控制返回按钮显示/隐藏 +- 支持自定义 z-index 层级 +- 支持标题对齐方式配置(居中/左对齐) + +## 快速开始 + +### 基础使用 + +```vue + + +``` + +### 固定在顶部 + +```vue + + + + +``` + +### 自定义样式 + +```vue + + + + + + + + + + + +``` + +## 高级用法 + +### 使用插槽自定义内容 + +```vue + + + +``` + +### 监听返回事件 + +```vue + + + +``` + +## 实际应用场景 + +### 1. 商品详情页 + +```vue + +``` + +### 2. 订单列表页 + +```vue + +``` + +### 3. 聊天页面 + +```vue + +``` + +## 最佳实践 + +### 1. 固定导航栏的页面布局 + +```scss +// 推荐的页面结构 +.page-container { + .page-content { + // 方法1: 使用 padding-top + padding-top: calc(var(--status-bar-height, 44px) + 44px); + + // 方法2: 使用 margin-top + // margin-top: calc(var(--status-bar-height, 44px) + 44px); + } +} +``` + +### 2. 响应式设计 + +```scss +// 适配不同屏幕尺寸 +@media screen and (max-width: 375px) { + .page-content { + padding-top: calc(var(--status-bar-height, 44px) + 40px); + } +} +``` + +### 3. 主题适配 + +```vue + + + +``` + +## 注意事项 + +1. **固定定位的性能考虑**: 固定导航栏会创建新的层叠上下文,在复杂页面中可能影响性能 + +2. **状态栏适配**: 在不同设备上状态栏高度可能不同,组件会自动处理,但建议在测试时验证各种设备 + +3. **插槽内容**: 使用插槽时注意内容的响应式设计,确保在不同屏幕尺寸下都能正常显示 + +4. **z-index 管理**: 如果页面中有其他固定定位元素,注意调整 z-index 避免层级冲突 + +5. **返回按钮**: 默认返回行为是 `uni.navigateBack()`,如需自定义请监听 `@back` 事件 + +## 故障排除 + +### 常见问题 + +**Q: 固定导航栏下的内容被遮挡了?** +A: 需要为页面内容添加顶部间距,参考上面的最佳实践。 + +**Q: 在某些设备上状态栏高度不正确?** +A: 组件会自动获取状态栏高度,如果仍有问题,可以手动设置 `hideStatusBar="true"` 并自行处理。 + +**Q: 自定义颜色不生效?** +A: 确保传入的颜色值格式正确,支持 hex、rgb、rgba 等标准 CSS 颜色格式。 + +**Q: 插槽内容显示异常?** +A: 检查插槽内容的样式,确保没有影响导航栏布局的 CSS 属性。 \ No newline at end of file diff --git a/pages.json b/pages.json index abd84d0..80a9cf9 100644 --- a/pages.json +++ b/pages.json @@ -30,6 +30,12 @@ "style": { "navigationStyle": "custom" } + }, + { + "path": "pages/goods/index", + "style": { + "navigationStyle": "custom" + } } ], "globalStyle": { diff --git a/pages/goods/README.md b/pages/goods/README.md new file mode 100644 index 0000000..e69de29 diff --git a/pages/goods/components/GoodInfo/README.md b/pages/goods/components/GoodInfo/README.md new file mode 100644 index 0000000..135aa54 --- /dev/null +++ b/pages/goods/components/GoodInfo/README.md @@ -0,0 +1,254 @@ +# GoodInfo 商品信息组件 + +## 概述 + +`GoodInfo` 是一个高性能的商品信息展示组件,专为电商、旅游、服务类应用设计。组件采用现代化的UI设计,支持响应式布局和暗色模式,提供优秀的用户体验。 + +## 功能特性 + +### 🎯 核心功能 +- **价格展示**: 突出显示商品价格,支持货币符号和价格标签 +- **商品标题**: 清晰展示商品名称和相关标签 +- **地址信息**: 显示商品/服务地址,支持图标和交互 +- **设施展示**: 网格布局展示商品特色设施或服务项目 + +### ⚡ 性能优化 +- **计算属性缓存**: 使用 `computed` 优化设施列表渲染 +- **按需渲染**: 条件渲染减少不必要的DOM节点 +- **轻量级设计**: 最小化组件体积和依赖 +- **懒加载支持**: 支持图标和内容的懒加载 + +### 🎨 UI特性 +- **现代化设计**: 圆角卡片、阴影效果、渐变背景 +- **响应式布局**: 适配不同屏幕尺寸 +- **暗色模式**: 自动适配系统主题 +- **交互反馈**: 悬停效果和过渡动画 + +## 基础用法 + +### 简单使用 + +```vue + + + +``` + +### 完整配置 + +```vue + + + +``` + +## API 文档 + +### Props + +| 参数 | 类型 | 默认值 | 说明 | +|------|------|--------|------| +| goodsInfo | Object | `{}` | 商品信息对象 | + +### goodsInfo 对象结构 + +| 字段 | 类型 | 必填 | 默认值 | 说明 | +|------|------|------|--------|------| +| price | Number/String | 否 | `399` | 商品价格 | +| title | String | 否 | `'【成人票】云从朵花温泉门票'` | 商品标题 | +| tag | String | 否 | - | 价格标签(如:热销、限时优惠) | +| timeTag | String | 否 | `'随时可退'` | 时间相关标签 | +| address | String | 否 | `'距您43.1公里 黔南州布依族苗族自治州龙里县'` | 地址信息 | +| facilities | Array | 否 | 默认设施列表 | 设施/特色列表 | + +### facilities 数组结构 + +```javascript +[ + { + icon: 'home', // uni-icons 图标名称 + name: '48个泡池' // 设施名称 + } +] +``` + +## 样式定制 + +### CSS 变量 + +组件支持通过 CSS 变量进行主题定制: + +```scss +.good-info { + --primary-color: #ff6b35; // 主色调 + --background-color: #fff; // 背景色 + --text-color: #333; // 文字颜色 + --border-radius: 16rpx; // 圆角大小 + --shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08); // 阴影 +} +``` + +### 响应式断点 + +- **小屏设备**: `max-width: 750rpx` +- **暗色模式**: `prefers-color-scheme: dark` + +## 性能优化建议 + +### 1. 数据结构优化 + +```javascript +// ✅ 推荐:使用 reactive 包装数据 +const goodsData = reactive({ + price: 399, + title: '商品标题' +}) + +// ❌ 避免:频繁的深层对象更新 +const goodsData = ref({ + nested: { + deep: { + value: 'data' + } + } +}) +``` + +### 2. 设施列表优化 + +```javascript +// ✅ 推荐:预定义设施列表 +const FACILITY_PRESETS = { + spa: [ + { icon: 'home', name: '48个泡池' }, + { icon: 'water', name: '恒温泳池' } + ], + hotel: [ + { icon: 'bed', name: '豪华客房' }, + { icon: 'car', name: '免费停车' } + ] +} + +// 使用预设 +const goodsData = { + facilities: FACILITY_PRESETS.spa +} +``` + +### 3. 图标优化 + +```javascript +// ✅ 推荐:使用常见图标 +const commonIcons = ['home', 'person', 'heart', 'star'] + +// ❌ 避免:使用过多不同图标增加包体积 +``` + +## 最佳实践 + +### 1. 数据验证 + +```javascript +// 添加数据验证 +const validateGoodsInfo = (data) => { + return { + price: Number(data.price) || 0, + title: String(data.title || ''), + facilities: Array.isArray(data.facilities) ? data.facilities : [] + } +} +``` + +### 2. 错误处理 + +```vue + + + +``` + +### 3. 无障碍访问 + +```vue + +``` + +## 注意事项 + +1. **图标依赖**: 组件依赖 `uni-icons`,请确保项目中已安装 +2. **单位适配**: 样式使用 `rpx` 单位,适配小程序和H5 +3. **性能考虑**: 设施列表较多时建议分页或虚拟滚动 +4. **主题适配**: 支持暗色模式,但需要系统支持 + +## 更新日志 + +### v1.0.0 (2024-01-XX) +- ✨ 初始版本发布 +- 🎨 现代化UI设计 +- ⚡ 性能优化 +- 📱 响应式布局 +- 🌙 暗色模式支持 + +## 技术栈 + +- **框架**: Vue 3 Composition API +- **样式**: SCSS +- **图标**: uni-icons +- **构建**: Vite/Webpack + +## 浏览器支持 + +- ✅ Chrome 80+ +- ✅ Firefox 75+ +- ✅ Safari 13+ +- ✅ Edge 80+ +- ✅ 微信小程序 +- ✅ 支付宝小程序 +- ✅ H5 \ No newline at end of file diff --git a/pages/goods/components/GoodInfo/images/商品详情.png b/pages/goods/components/GoodInfo/images/商品详情.png new file mode 100644 index 0000000..aa76422 Binary files /dev/null and b/pages/goods/components/GoodInfo/images/商品详情.png differ diff --git a/pages/goods/components/GoodInfo/index.vue b/pages/goods/components/GoodInfo/index.vue new file mode 100644 index 0000000..85342f0 --- /dev/null +++ b/pages/goods/components/GoodInfo/index.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/pages/goods/components/GoodInfo/styles/index.scss b/pages/goods/components/GoodInfo/styles/index.scss new file mode 100644 index 0000000..5a4a255 --- /dev/null +++ b/pages/goods/components/GoodInfo/styles/index.scss @@ -0,0 +1,106 @@ +.good-info { + background: #fff; + margin-bottom: 12px; + + // 价格区域 + .price-section { + display: flex; + align-items: flex-end; + justify-content: space-between; + margin-bottom: 12px; + + .price-main { + display: flex; + align-items: flex-end; + + .currency { + font-size: 12px; + color: #ff6a00; + font-weight: 600; + margin-right: 2px; + } + + .price { + font-size: 18px; + color: #ff6a00; + font-weight: 700; + line-height: 1; + } + } + } + + // 标题区域 + .title-section { + margin-bottom: 12px; + + .title { + font-size: 16px; + color: #333; + font-weight: 600; + line-height: 1.4; + display: block; + margin-bottom: 8px; + } + + .tag-wrapper { + display: flex; + align-items: center; + + .time-tag { + color: #f55726; + padding: 3px 6px; + border-radius: 6px; + font-size: 9px; + border: 1px solid #f55726; + } + } + } + + // 地址区域 + .address-section { + margin-bottom: 12px; + padding: 12px 0; + border-top: 1px solid #f0f0f0; + border-bottom: 1px solid #f0f0f0; + + .address-item { + display: flex; + align-items: center; + gap: 6px; + + .address-text { + flex: 1; + font-size: 14px; + color: #333; + line-height: 1.4; + } + } + } + + // 设施信息区域 + .facilities-section { + .facilities-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 8px; + + .facility-item { + display: flex; + align-items: center; + gap: 4px; + padding: 8px; + background: #fafafa; + border-radius: 6px; + + .facility-text { + font-size: 12px; + color: #333; + line-height: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + } + } +} diff --git a/pages/goods/images/商品详情.png b/pages/goods/images/商品详情.png new file mode 100644 index 0000000..761cb68 Binary files /dev/null and b/pages/goods/images/商品详情.png differ diff --git a/pages/goods/index.vue b/pages/goods/index.vue new file mode 100644 index 0000000..877be27 --- /dev/null +++ b/pages/goods/index.vue @@ -0,0 +1,44 @@ + + + + + \ No newline at end of file diff --git a/pages/goods/styles/index.scss b/pages/goods/styles/index.scss new file mode 100644 index 0000000..eb6424c --- /dev/null +++ b/pages/goods/styles/index.scss @@ -0,0 +1,18 @@ +.goods-container { + min-height: 100vh; + background-color: #fff; + + .content-wrapper { + // 为固定导航栏预留空间 + padding-top: calc(var(--status-bar-height, 44px) + 68px); + } + + .goods-content { + border-radius: 12px 12px 0 0; + background-color: #fff; + padding: 12px; + position: relative; + margin-top: -30px; + z-index: 1; + } +} diff --git a/pages/order/components/GoodsInfo/index.vue b/pages/order/components/GoodsInfo/index.vue index 196a8d4..d53e07e 100644 --- a/pages/order/components/GoodsInfo/index.vue +++ b/pages/order/components/GoodsInfo/index.vue @@ -14,11 +14,7 @@ {{ commodityName }} - - - {{ orderData.commodityAddress }} - - +