商品浏览页构建前最后一次更新

This commit is contained in:
2026-08-02 00:21:54 +08:00
parent d37a93ab9e
commit e423ab2d73
146 changed files with 3449 additions and 1342 deletions
+145 -36
View File
@@ -6,32 +6,50 @@
## 技术栈
- **框架**: Taro 3.x + React 18 + TypeScript
- **样式**: SCSS
- **目标平台**: 微信小程序(可扩展 H5
- **框架**: Taro 3.6.31 + React 18 + TypeScript
- **样式**: SCSSCSS 变量驱动主题系统)
- **目标平台**: 微信小程序
- **包管理器**: npm
## 项目结构
```
smart-engraving-miniapp/
├── config/ # Taro 配置文件
├── docs/ # 项目文档
│ └── mask-config-guide.md # 遮罩尺寸配置指南
│ └── index.js # 构建配置(含 copy patternsicon、img 资源复制)
├── src/
│ ├── app.tsx # 应用入口
│ ├── app.scss # 全局样式
│ ├── app.config.ts # 应用配置(页面路由、tabBar
│ ├── app.tsx # 应用入口(全局 ThemeProvider 挂载)
│ ├── app.scss # 全局样式CSS 变量 + 主题工具类)
│ ├── app.config.ts # 应用配置(页面路由、tabBar、window
│ ├── custom-tab-bar/ # 自定义底部导航(4 tab:首页/设计清单/订单/我的)
│ ├── types/
│ │ └── index.ts # TypeScript 类型定义
│ │ └── index.ts # TypeScript 类型定义ProductCategory、DesignItem、OrderItem 等)
│ ├── utils/
│ │ ── productConfig.ts # 产品品类配置
├── pages/
│ ├── index/ # 首页
│ │ ── wordcloud/ # 词云生成
│ ├── diy/ # DIY 工作台
│ │ ├── orders/ # 订单列表
│ │ ── profile/ # 个人中心
│ └── components/ # 公共组件(可按需拆分
│ │ ── productConfig.ts # 产品品类配置5 个品类 + iconImg 映射)
│ └── store.ts # Data Access 层(Storage 读写,openid 隔离)
│ ├── context/
│ │ ── ThemeContext.tsx # 全局主题 Contextlight/dark
│ ├── components/
│ │ ├── ThemeToggle/ # 主题切换按钮(onTap 触发)
│ │ ── LoginGuard/ # 登录守卫(未登录时居中提示)
│ └── LoginModal/ # 登录弹窗(历史组件
│ └── pages/
│ ├── index/ # 首页(品类入口、成品轮播、搜索)
│ ├── product/ # 商品详情页(轮播图 + 加入设计清单弹窗)
│ ├── diy/ # DIY 工作台(贴纸拖拽、缩放、碰撞检测)
│ ├── checkout/ # 设计效果确认页(收货地址 + 下单)
│ ├── designList/ # 我的设计清单(需登录)
│ ├── orders/ # 订单列表(需登录)
│ ├── orderDetail/ # 订单详情(收货地址 + 物流时间轴)
│ ├── profile/ # 个人中心(5 状态入口、6 宫格菜单、企业定制)
│ ├── service/ # 联系客服页
│ ├── wordcloud/ # 词云生成
│ ├── address/ # 收货地址管理
│ ├── settings/ # 设置(个人信息、账号管理、退出登录)
│ ├── agreement/ # 使用协议
│ └── userDatabase/ # 账号管理(密码保护:zhihui2024)
├── src/icon/ # 19 个 icon PNG28~56px,打包到 dist/icon
├── src/img/ # 8 张产品实物压缩图(打包到 dist/img)
├── package.json
├── tsconfig.json
└── project.config.json # 微信开发者工具配置
@@ -41,37 +59,102 @@ smart-engraving-miniapp/
| 页面 | 路径 | 功能 |
|---|---|---|
| 首页 | `/pages/index/index` | 品类入口、案例展示、快捷导航 |
| 词云生成 | `/pages/wordcloud/index` | 三步式词云生成(上传底图→输入名单→生成预览) |
| DIY工作台 | `/pages/diy/index` | 选品类→上传图片→拖拽缩放→预览下单 |
| 订单 | `/pages/orders/index` | 订单列表与管理 |
| 个人中心 | `/pages/profile/index` | 用户信息、设计稿、客服入口 |
| 首页 | `/pages/index/index` | 品类入口、成品轮播、搜索框、热门品类网格 |
| 商品详情 | `/pages/product/index` | 轮播图、单价/工期/尺寸、加入设计清单弹窗 |
| DIY 工作台 | `/pages/diy/index` | 选品类→上传图片/相机→拖拽缩放→碰撞检测→预览下单 |
| 设计效果确认 | `/pages/checkout/index` | 展示设计效果、选择/修改收货地址、确认下单 |
| 设计清单 | `/pages/designList/index` | 清单列表(全部/待设计/未设计/设计中/已下单) |
| 订单列表 | `/pages/orders/index` | 订单列表(全部/待付款/待发货/待收货/已完成) |
| 订单详情 | `/pages/orderDetail/index` | 订单详情页(收货地址 + 物流时间轴) |
| 个人中心 | `/pages/profile/index` | 用户信息、5 状态快捷入口、6 宫格菜单、企业定制 |
| 词云生成 | `/pages/wordcloud/index` | 三步式词云生成 |
| 收货地址 | `/pages/address/index` | 增删改查 + 省市区选择 + 默认地址 |
| 设置 | `/pages/settings/index` | 修改信息、账号管理、定制协议、退出登录 |
| 联系客服 | `/pages/service/index` | 客服电话、微信、邮箱、企业批量定制 |
| 账号管理 | `/pages/userDatabase/index` | 查看/切换/新建/删除本地用户(密码:zhihui2024 |
## 核心交互流程
### 流程一:词云生成 → 定制
1. 首页点击「AI词云生成」
2. 上传底图(或选模板)
3. 输入名字名单(手动输入/批量导入)
4. 生成词云,预览效果
5. 点击「前往个性化定制」跳转 DIY 工作台
### 完整业务流程
### 流程二:直接定制
1. 首页选择品类(笔记本/杯垫/笔盒/书灯
2. 进入 DIY 工作台上传图片
3. 拖拽调整位置,缩放至合适大小
4. 预览确认后下单
```
首页浏览品类 → 商品详情页(轮播图+价格+介绍
→ 加入设计清单(弹窗选数量)→ 设计清单页(支持自动筛选)
→ 立即下单 → DIY 工作台(直接进入)
→ 添加贴纸(相册/相机)→ 拖动调整位置 → 碰撞检测
→ 预览效果 → 确认完成 → 设计效果确认页(含收货地址)
→ 弹窗确认下单 → 订单生成 → 订单列表/订单详情(可改地址)
→ 物流时间轴追踪 → 确认收货 → 完成
```
## 关键配置
### 个人主页快捷入口流
```
个人主页
→ 待设计 / 待付款 / 待发货 / 待收货 / 已完成 → 自动跳转对应页面并筛选
→ 收货地址 → 增删改复 + 省市区选择(微信原生 Picker)+ 默认地址
→ 设置 → 修改昵称头像 / 退出登录 / 定制协议 / 账号管理
→ 账号管理(密码保护:zhihui2024)→ 查看/切换/新建/删除本地用户
→ 企业批量定制 → 客服咨询
```
## 关键配置与实现细节
### 主题系统(Light / Dark
- 全局 CSS 变量定义在 `app.scss``var(--bg-card)``var(--text-primary)``var(--text-secondary)``var(--line-star)`
- 切换方式:根节点 `className={theme-${theme}}``theme-light` / `theme-dark`
- 状态管理:`src/context/ThemeContext.tsx`React Context),支持全局同步
- 切换按钮:`src/components/ThemeToggle/index.tsx`(使用 `onTap`,非 `onClick`
### 事件绑定规范(Taro 小程序兼容)
> ⚠️ **重要**:微信小程序 + Taro React + 微信基础库 3.17.0 存在 `onClick` 兼容风险。
>
> 现象:动态更新事件 handler 时可能触发 `TaroElement.removeEventListener(undefined)`,导致 `Cannot read properties of undefined (reading '_num')`。
>
> **本项目已全部使用 `onTap` 替代 `onClick`**。后续新增组件也须遵守此规范。
| 平台 | 推荐事件 | 说明 |
|------|---------|------|
| 微信小程序 | `onTap` | 编译为 `bindtap`,原生稳定 |
| H5 | `onClick` | 仅在 H5 构建中使用 |
### Taro React 生命周期建议
- **页面显示刷新**:使用 `import { useDidShow } from '@tarojs/taro'`,而非手动覆盖 `page.onShow`
- 手动 `page.onShow = function(){}` 在热更新时会重复叠加,导致异常
### 前端 DA 层设计
所有数据操作通过 `src/utils/store.ts` 抽象:
```
pages/
└─ 调用 store.getDesignList() / addDesign() / designToOrder() 等业务接口
└─ store.ts 内封装 Taro.getStorageSync / setStorageSync
└─ key = ${scope}_${openid} 实现多用户数据隔离
```
**后端替换方案**:上线时只需重写 `store.ts` 中的函数为 `wx.request` HTTP 调用,页面层零改动。
### Icon 系统(emoji 已完全移除)
- 19 个 icon 存放在 `src/icon/`,构建时通过 `config/index.js` copy 到 `dist/icon/`
- 产品 icon 映射:`src/utils/productConfig.ts` 中每个产品有 `iconImg` 字段
- 旧数据兼容:列表渲染时检测 `productIcon` 是否以 `/icon/` 开头,否则通过 `PRODUCT_ICON_MAP` 查映射表
### 遮罩尺寸
详见 `docs/mask-config-guide.md`。当实际产品尺寸确定后,仅需修改 `src/utils/productConfig.ts` 中的 `PRODUCTS` 数组。
### 后端接口(待接入)
当前代码中以下功能需要接入后端 API:
1. 词云生成:调用 `/api/wordcloud/generate` 提交底图+名单,生成词云图
2. 图片保存:调用 `/api/upload` 上传用户设计图
3. 订单创建:调用 `/api/order/create` 提交订单
4. 登录授权:当前 `openid` 为 mock 值,接入真实后端后替换 `wx.login``code`
## 启动开发
@@ -133,15 +216,41 @@ npm run dev:h5
---
## 最近更新记录(2026-08-01
### Batch 10 — 夜间模式适配 + 地址弹窗统一 + 空状态主题化
| 序号 | 修改内容 |
|------|----------|
| 1 | **订单详情页夜间模式文字修复**:补充 `.status-text`、`.logistics-title/num`、`.meta-title/label/value`、`.timeline-status/time/desc` 等 CSS 变量配色,夜间模式自动变亮 |
| 2 | **地址选择弹窗统一**:提取 `.modal-overlay` + `.addr-picker-sheet` 为 `app.scss` 全局统一样式;移除 checkout/orderDetail 中的重复覆写 |
| 3 | **收货地址空状态主题适配**:📍 emoji → `<Image src='/icon/地址.png'>`;空状态文字使用 CSS 变量;同步修复 `orders/index.scss` 中硬编码颜色 |
### Batch 92026-07-29)— emoji → icon 彻底收尾
- `productConfig.ts` 增加 `iconImg` 字段
- `store.ts` 写入层修复(存 `iconImg` 而非 emoji
- 运行时旧数据兼容映射 `PRODUCT_ICON_MAP`
- 商品详情页弹窗去 emoji
### Batch 82026-07-29)— Taro 事件兼容修复
- 全量 `onClick` → `onTap`15 个文件,82 处)
- Profile `STATUS_MAP.map` 消除 Fragment(改为 `View.status-group`
- `useEffect + page.onShow` 重写为 `useDidShow`
- 删除废弃 `permission.scope.writePhotosAlbum`
---
## 下一步开发计划
### 高优先级
- [ ] 接入后端词云生成 API,替换模拟数据
- [ ] 实现图片上传接口
- [ ] 实现订单创建与支付流程
- [ ] 添加微信小程序登录授权
- [ ] 接入真实微信登录授权(替换 mock openid
- [ ] 订单物流接口接入(目前为静态 mock)
### 中优先级
- [ ] 将实物照片迁移到 CDN(腾讯云 COS / 阿里云 OSS
- [ ] 添加更多词云底图模板
- [ ] 支持从微信聊天记录导入 Excel 名单
- [ ] 实现设计稿保存到草稿箱功能
@@ -149,4 +258,4 @@ npm run dev:h5
### 低优先级
- [ ] 3D 效果预览(模拟材质纹理)
- [ ] 批量下单优惠逻辑
- [ ] 企业定制专属通道
- [ ] 完善企业定制专属通道
+38 -2
View File
@@ -55,7 +55,7 @@
重要提醒:设计清单和订单以及我的个人主页页面,在未登录前应该全为空并提醒用户登录,因为未绑定私有账号信息,你暂时帮我实现一下用户数据库,让我可以看到每个用户的操作会有不同的账号信息和界面显示才对。 -->
20260727 22:20 优化问题
<!-- 20260727 22:20 优化问题
1.图片压缩的做的很好
@@ -63,4 +63,40 @@
3.怎么实现用户数据库?我们先构建出用户的数据库之后再继续优化其他功能
4.个人主页中的常用功能,在未登录时可以点开看到效果,但是登录后却点击没有反应了,这个也需要修正
4.个人主页中的常用功能,在未登录时可以点开看到效果,但是登录后却点击没有反应了,这个也需要修正 -->
<!-- 20260728 19:47 优化问题
1.没有修正好首页登录后的无法点击进入常用功能的问题
2.进行icon图标修正,现在程序中的每个emoji都替换为我提供的图标图片,位置在F:\weixin_wordc\icon文件夹中,你看看是否能够一一映射上,有缺少的告知我
3.定制成品展示部分的表情部分改为实际图片,从img里找对应的替换即可
4.商品信息中订单详情部分,收货地址的部分在收货地址同行的右侧加"更改收货地址"的文字,点击后可从用户的所有地址条目中选择想要的并确认
5.商品确认下单页要出了商品数量单价总价等信息还要增加一栏地址栏,使用用户默认地址,同样有更改收货地址字样,点击后可从用户的所有地址条目中选择想要的并确认
6.用户未登录时,设计清单和订单页面的提醒登录的文字内容要置于中间,不要置于页面顶部。 -->
<!-- 20260728 22:03 问题优化
1.设计清单和订单页的提示登录信息依旧顶格,请设置到居中
2.部分图标替换成图片的尺寸过大,首页,个人页面中客服的两个icon图片都过大了,需要调整尺寸缩小到对应字体大小
3.导航栏中的图标尺寸也要修改
首页,设计清单,订单,我的也要对应修改成图片
首页的照片不是要加到首页智绘微刻的那里,把那个图片删掉 -->
<!-- 20260731 23:57 问题优化
1.主页中热门产品一栏中每个产品的小框的图片选择不要用icon里的图片,而是用img里对应商品的图片。
2.订单中每个条目的商品详情页中放置商品icon图片的链接似乎出了问题,只显示了文字(即图片地址映射的文字)没有显示真正的图片
3.订单中每个条目中的商品详情页缺少了物流进度,之前有的上次更新被删除了请补充回去。 -->
20260801 0:50 问题优化
1.关于订单详情中,夜间主题下订单信息和待付款的字样要切换为白色,而不是维持白天模式的黑丝,会看不见
2.所有点击更改收货地址后弹出的选择收货地址的方框的宽度尺寸超过了手机显示的尺寸,和其他框尺寸不统一,订单设计好的确认页面和订单详情页面针对这一功能都要做修改。
3.收货地址页面中,初始状态用户没有设置地址时的文字提示没有做主题切换的更改,昼夜两种模式下都为黑色导致夜间模式看不起字,和问题一一样要改为亮度较高的字体颜色。
+2 -1
View File
@@ -14,7 +14,8 @@ const config = {
},
copy: {
patterns: [
{ from: 'src/img', to: 'dist/img' }
{ from: 'src/img', to: 'dist/img' },
{ from: 'src/icon', to: 'dist/icon' }
],
options: {
}
+39
View File
@@ -273,3 +273,42 @@ page {
.safe-bottom-placeholder {
height: 160rpx;
}
/* ==========================================================
底部弹窗遮罩(地址选择器等共用)
========================================================== */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 600;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: flex-end;
-ms-flex-align: end;
align-items: flex-end;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
}
.addr-picker-sheet {
width: 100%;
max-height: 70vh;
border-radius: 24rpx 24rpx 0 0;
padding: 24rpx 24rpx calc(24rpx + env(safe-area-inset-bottom));
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
background: var(--bg-card);
border-top: var(--line-card);
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
Vendored
+1 -1
View File
@@ -82,7 +82,7 @@ var react__WEBPACK_IMPORTED_MODULE_3___namespace_cache;
var config = {"pages":["pages/index/index","pages/product/index","pages/diy/index","pages/checkout/index","pages/designList/index","pages/orders/index","pages/profile/index","pages/service/index","pages/wordcloud/index","pages/orderDetail/index","pages/address/index","pages/settings/index","pages/agreement/index","pages/userDatabase/index"],"window":{"backgroundTextStyle":"light","navigationStyle":"custom","backgroundColor":"#ffffff"},"tabBar":{"custom":true,"list":[{"pagePath":"pages/index/index","text":"首页"},{"pagePath":"pages/designList/index","text":"设计清单"},{"pagePath":"pages/orders/index","text":"订单"},{"pagePath":"pages/profile/index","text":"我的"}]},"permission":{"scope.writePhotosAlbum":{"desc":"保存词云图片到相册"}}};
var config = {"pages":["pages/index/index","pages/product/index","pages/diy/index","pages/checkout/index","pages/designList/index","pages/orders/index","pages/profile/index","pages/service/index","pages/wordcloud/index","pages/orderDetail/index","pages/address/index","pages/settings/index","pages/agreement/index","pages/userDatabase/index"],"window":{"backgroundTextStyle":"light","navigationStyle":"custom","backgroundColor":"#ffffff"},"tabBar":{"custom":true,"list":[{"pagePath":"pages/index/index","text":"首页"},{"pagePath":"pages/designList/index","text":"设计清单"},{"pagePath":"pages/orders/index","text":"订单"},{"pagePath":"pages/profile/index","text":"我的"}]}};
_tarojs_runtime__WEBPACK_IMPORTED_MODULE_5__.window.__taroAppConfig = config
var inst = App((0,_tarojs_plugin_framework_react_dist_runtime__WEBPACK_IMPORTED_MODULE_6__.createReactApp)(_node_modules_tarojs_taro_loader_lib_entry_cache_js_name_app_app_tsx__WEBPACK_IMPORTED_MODULE_2__["default"], /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_3___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_3___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_3__, 2))), react_dom__WEBPACK_IMPORTED_MODULE_4__["default"], config))
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1 +1 @@
{"pages":["pages/index/index","pages/product/index","pages/diy/index","pages/checkout/index","pages/designList/index","pages/orders/index","pages/profile/index","pages/service/index","pages/wordcloud/index","pages/orderDetail/index","pages/address/index","pages/settings/index","pages/agreement/index","pages/userDatabase/index"],"window":{"backgroundTextStyle":"light","navigationStyle":"custom","backgroundColor":"#ffffff"},"tabBar":{"custom":true,"list":[{"pagePath":"pages/index/index","text":"首页"},{"pagePath":"pages/designList/index","text":"设计清单"},{"pagePath":"pages/orders/index","text":"订单"},{"pagePath":"pages/profile/index","text":"我的"}]},"permission":{"scope.writePhotosAlbum":{"desc":"保存词云图片到相册"}}}
{"pages":["pages/index/index","pages/product/index","pages/diy/index","pages/checkout/index","pages/designList/index","pages/orders/index","pages/profile/index","pages/service/index","pages/wordcloud/index","pages/orderDetail/index","pages/address/index","pages/settings/index","pages/agreement/index","pages/userDatabase/index"],"window":{"backgroundTextStyle":"light","navigationStyle":"custom","backgroundColor":"#ffffff"},"tabBar":{"custom":true,"list":[{"pagePath":"pages/index/index","text":"首页"},{"pagePath":"pages/designList/index","text":"设计清单"},{"pagePath":"pages/orders/index","text":"订单"},{"pagePath":"pages/profile/index","text":"我的"}]}}
+55 -15
View File
@@ -20,8 +20,10 @@
function LoginGuard(props) {
var user = _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().getStorageSync('smart_user_info');
if (!(user !== null && user !== void 0 && user.openid)) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.View, {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.View, {
className: "login-guard",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.View, {
className: "login-guard-inner",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.Text, {
className: "login-guard-icon",
children: "\uD83D\uDD12"
@@ -33,7 +35,7 @@ function LoginGuard(props) {
children: "\u767B\u5F55\u540E\u67E5\u770B\u60A8\u7684\u4E13\u5C5E\u5185\u5BB9"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.View, {
className: "btn-gradient login-guard-btn",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({
url: '/pages/profile/index'
});
@@ -42,6 +44,7 @@ function LoginGuard(props) {
children: "\u53BB\u767B\u5F55"
})
})]
})
});
}
return props.children;
@@ -78,7 +81,7 @@ function ThemeToggle() {
}, [toggleTheme]);
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_3__.View, {
className: "theme-toggle",
onClick: handleToggle,
onTap: handleToggle,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_3__.Text, {
className: "theme-icon",
children: theme === 'light' ? '🌙' : '☀️'
@@ -155,7 +158,9 @@ function useThemeContext() {
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ CATEGORIES: function() { return /* binding */ CATEGORIES; },
/* harmony export */ getProductById: function() { return /* binding */ getProductById; }
/* harmony export */ PRODUCT_ICON_MAP: function() { return /* binding */ PRODUCT_ICON_MAP; },
/* harmony export */ getProductById: function() { return /* binding */ getProductById; },
/* harmony export */ getProductIconImg: function() { return /* binding */ getProductIconImg; }
/* harmony export */ });
/* unused harmony export PRODUCTS */
/**
@@ -170,6 +175,7 @@ var PRODUCTS = [{
name: '微雕笔记本(小)',
desc: '便携随行,记录点滴',
icon: '📓',
iconImg: '/icon/书本.png',
price: 12,
leadTime: '3-5个工作日',
description: '精选优质纸张,封面采用高档PU材质,手感细腻。内页可定制横线、方格或空白三种版式。激光微雕工艺将名字或图案精准刻印在封面,永不褪色。小巧轻便,适合随身携带,无论是课堂笔记还是日常备忘,都是你的专属伴侣。',
@@ -185,6 +191,7 @@ var PRODUCTS = [{
name: '微雕笔记本(大)',
desc: '大开本,更多创作空间',
icon: '📔',
iconImg: '/icon/书本_大.png',
price: 45,
leadTime: '3-5个工作日',
description: 'A4尺寸大开本,180°平摊设计,书写更自由。封面可选真皮、仿布纹或磨砂材质,激光微雕区域更大,适合呈现全班名字、团队口号或公司Logo等大篇幅内容。是毕业纪念、企业年会礼品的首选。',
@@ -200,6 +207,7 @@ var PRODUCTS = [{
name: '铜质杯垫',
desc: '金属质感,桌面艺术',
icon: '☕',
iconImg: '/icon/杯子.png',
price: 25,
leadTime: '5-7个工作日',
description: '采用优质黄铜材质,表面经拉丝工艺处理,呈现哑光金属质感。背面配有防滑软木垫,保护桌面同时防止滑动。激光微雕可在表面刻印名字、日期或祝福语,是乔迁新居、新婚贺礼的精致之选。',
@@ -214,6 +222,7 @@ var PRODUCTS = [{
name: '竹制笔盒',
desc: '自然竹纹,文房雅器',
icon: '✏️',
iconImg: '/icon/笔盒.png',
price: 75,
leadTime: '7-10个工作日',
description: '精选天然楠竹,经多道工序打磨抛光,保留天然竹纹肌理。盒盖采用磁吸开合,内部设有分层隔板。激光微雕在竹面上呈现深浅不一的雕刻效果,融入墨香气质。适合书房案头、书法爱好者的文房伴侣。',
@@ -229,6 +238,7 @@ var PRODUCTS = [{
name: '书本型灯',
desc: '温暖光影,点亮心意',
icon: '💡',
iconImg: '/icon/书灯.png',
price: 45,
leadTime: '5-7个工作日',
description: '开合式设计,打开即亮,合拢即灭,如魔法书般充满惊喜。采用LED暖光灯源,光线柔和不刺眼,可持续点亮6-8小时。封面激光微雕可定制文字、图案或照片,让温暖的灯光承载专属记忆。是情侣礼物、毕业礼物的创意之选。',
@@ -253,6 +263,30 @@ var getProductById = function getProductById(id) {
});
};
/**
* 产品 ID 到 icon 图片路径的映射
* 用于兼容旧数据(旧数据 productIcon 存的是 emoji
*/
var PRODUCT_ICON_MAP = {
'notebook-small': '/icon/书本.png',
'notebook-large': '/icon/书本_大.png',
'coaster': '/icon/杯子.png',
'penbox': '/icon/笔盒.png',
'booklamp': '/icon/书灯.png'
};
/**
* 获取商品对应的 icon 图片路径
* - 新数据:直接返回 product.iconImg
* - 旧数据:通过 productId 查映射表
* - 兜底:返回四角星
*/
function getProductIconImg(product) {
if (product !== null && product !== void 0 && product.iconImg) return product.iconImg;
if (product !== null && product !== void 0 && product.id) return PRODUCT_ICON_MAP[product.id] || '/icon/四角星.png';
return '/icon/四角星.png';
}
/***/ }),
/***/ "./src/utils/store.ts":
@@ -270,6 +304,7 @@ var getProductById = function getProductById(id) {
/* harmony export */ deleteUser: function() { return /* binding */ deleteUser; },
/* harmony export */ designToOrder: function() { return /* binding */ designToOrder; },
/* harmony export */ getAddressList: function() { return /* binding */ getAddressList; },
/* harmony export */ getDefaultAddress: function() { return /* binding */ getDefaultAddress; },
/* harmony export */ getDesignList: function() { return /* binding */ getDesignList; },
/* harmony export */ getOrderList: function() { return /* binding */ getOrderList; },
/* harmony export */ getTheme: function() { return /* binding */ getTheme; },
@@ -283,11 +318,13 @@ var getProductById = function getProductById(id) {
/* harmony export */ updateDesign: function() { return /* binding */ updateDesign; },
/* harmony export */ verifyAdminPassword: function() { return /* binding */ verifyAdminPassword; }
/* harmony export */ });
/* unused harmony exports getUserInfoRaw, setUserInfoRaw, getUserInfoByOpenid, setOrderList, setAddressList, getDefaultAddress */
/* harmony import */ var F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var F_weixin_wordc_node_modules_babel_runtime_helpers_esm_toConsumableArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* unused harmony exports getUserInfoRaw, setUserInfoRaw, getUserInfoByOpenid, setOrderList, setAddressList */
/* harmony import */ var F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var F_weixin_wordc_node_modules_babel_runtime_helpers_esm_toConsumableArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
/* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tarojs/taro */ "./node_modules/@tarojs/taro/index.js");
/* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tarojs_taro__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _productConfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./productConfig */ "./src/utils/productConfig.ts");
@@ -462,17 +499,18 @@ function setDesignList(list) {
}
function addDesign(product, count) {
var list = getDesignList();
var iconImg = (product === null || product === void 0 ? void 0 : product.iconImg) || _productConfig__WEBPACK_IMPORTED_MODULE_1__.PRODUCT_ICON_MAP[product === null || product === void 0 ? void 0 : product.id] || '/icon/四角星.png';
var item = {
id: 'DSG' + Date.now(),
productId: product.id,
productName: product.name,
productIcon: product.icon,
productIcon: iconImg,
unitPrice: product.price,
count: count,
status: 'undesigned',
createdAt: new Date().toISOString().slice(0, 10)
};
setDesignList([].concat((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_toConsumableArray_js__WEBPACK_IMPORTED_MODULE_1__["default"])(list), [item]));
setDesignList([].concat((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_toConsumableArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(list), [item]));
return item;
}
function updateDesign(id, patch) {
@@ -481,7 +519,7 @@ function updateDesign(id, patch) {
return d.id === id;
});
if (idx === -1) return;
list[idx] = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_2__["default"])({}, list[idx]), patch);
list[idx] = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_3__["default"])((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_3__["default"])({}, list[idx]), patch);
setDesignList(list);
}
@@ -498,16 +536,18 @@ function setOrderList(list) {
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().setStorageSync(key('order_list'), list);
}
function designToOrder(designId) {
var _design$productIcon;
var dList = getDesignList();
var oList = getOrderList();
var design = dList.find(function (d) {
return d.id === designId;
});
if (!design) return null;
var iconImg = (_design$productIcon = design.productIcon) !== null && _design$productIcon !== void 0 && _design$productIcon.startsWith('/icon/') ? design.productIcon : _productConfig__WEBPACK_IMPORTED_MODULE_1__.PRODUCT_ICON_MAP[design.productId] || '/icon/四角星.png';
var order = {
id: 'ORD' + Date.now().toString().slice(-9),
productName: design.productName,
productIcon: design.productIcon,
productIcon: iconImg,
statusCode: 'pending',
date: new Date().toLocaleString('zh-CN', {
month: '2-digit',
@@ -527,7 +567,7 @@ function designToOrder(designId) {
dList[dIdx].orderId = order.id;
}
setDesignList(dList);
setOrderList([order].concat((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_toConsumableArray_js__WEBPACK_IMPORTED_MODULE_1__["default"])(oList)));
setOrderList([order].concat((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_toConsumableArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(oList)));
return order;
}
@@ -558,7 +598,7 @@ function setAddressList(list) {
}
function addAddress(addr) {
var list = getAddressList();
var item = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_2__["default"])({}, addr), {}, {
var item = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_3__["default"])((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_3__["default"])({}, addr), {}, {
id: 'ADR' + Date.now()
});
// 若设为默认,取消其他默认
@@ -567,7 +607,7 @@ function addAddress(addr) {
a.isDefault = false;
});
}
setAddressList([item].concat((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_toConsumableArray_js__WEBPACK_IMPORTED_MODULE_1__["default"])(list)));
setAddressList([item].concat((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_toConsumableArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(list)));
return item;
}
function updateAddress(id, patch) {
@@ -579,7 +619,7 @@ function updateAddress(id, patch) {
if (patch.isDefault) list.forEach(function (a) {
a.isDefault = false;
});
list[idx] = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_2__["default"])({}, list[idx]), patch);
list[idx] = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_3__["default"])((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_3__["default"])({}, list[idx]), patch);
setAddressList(list);
}
function deleteAddress(id) {
+1 -1
View File
File diff suppressed because one or more lines are too long
+9 -8
View File
@@ -21,19 +21,19 @@
var TABS = [{
pagePath: '/pages/index/index',
text: '首页',
icon: '🏠'
icon: '/icon/首页.png'
}, {
pagePath: '/pages/designList/index',
text: '设计清单',
icon: '📐'
icon: '/icon/调色盘.png'
}, {
pagePath: '/pages/orders/index',
text: '订单',
icon: '📦'
icon: '/icon/包裹.png'
}, {
pagePath: '/pages/profile/index',
text: '我的',
icon: '👤'
icon: '/icon/个人.png'
}];
function CustomTabBar() {
var _Taro$getCurrentInsta;
@@ -49,12 +49,13 @@ function CustomTabBar() {
var isActive = currentPath === tab.pagePath;
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.View, {
className: "tab-item ".concat(isActive ? 'active' : ''),
onClick: function onClick() {
onTap: function onTap() {
return switchTab(tab.pagePath);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.Text, {
className: "tab-icon",
children: tab.icon
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.Image, {
className: "tab-icon-img ".concat(isActive ? 'active' : ''),
src: tab.icon,
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.Text, {
className: "tab-label",
children: tab.text
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"custom-tab-bar/index.js","mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChDA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/custom-tab-bar/index.tsx?65a5","webpack://smart-engraving-miniapp/._src_custom-tab-bar_index.tsx"],"sourcesContent":["import { View, Text } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport './index.scss';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar TABS = [{\n pagePath: '/pages/index/index',\n text: '首页',\n icon: '🏠'\n}, {\n pagePath: '/pages/designList/index',\n text: '设计清单',\n icon: '📐'\n}, {\n pagePath: '/pages/orders/index',\n text: '订单',\n icon: '📦'\n}, {\n pagePath: '/pages/profile/index',\n text: '我的',\n icon: '👤'\n}];\nexport default function CustomTabBar() {\n var _Taro$getCurrentInsta;\n var currentPath = \"/\".concat(((_Taro$getCurrentInsta = Taro.getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.path) || 'pages/index/index');\n var switchTab = function switchTab(url) {\n Taro.switchTab({\n url: url\n });\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"custom-tab-bar\",\n children: TABS.map(function (tab) {\n var isActive = currentPath === tab.pagePath;\n return /*#__PURE__*/_jsxs(View, {\n className: \"tab-item \".concat(isActive ? 'active' : ''),\n onClick: function onClick() {\n return switchTab(tab.pagePath);\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"tab-icon\",\n children: tab.icon\n }), /*#__PURE__*/_jsx(Text, {\n className: \"tab-label\",\n children: tab.text\n })]\n }, tab.pagePath);\n })\n });\n}","import { createComponentConfig } from '@tarojs/runtime'\nimport component from \"!!../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=custom-tab-bar/index!./index.tsx\"\nvar inst = Component(createComponentConfig(component, 'custom-tab-bar/index'))\n\nexport default component\n"],"names":[],"sourceRoot":""}
{"version":3,"file":"custom-tab-bar/index.js","mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjDA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/custom-tab-bar/index.tsx?65a5","webpack://smart-engraving-miniapp/._src_custom-tab-bar_index.tsx"],"sourcesContent":["import { View, Text, Image } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport './index.scss';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar TABS = [{\n pagePath: '/pages/index/index',\n text: '首页',\n icon: '/icon/首页.png'\n}, {\n pagePath: '/pages/designList/index',\n text: '设计清单',\n icon: '/icon/调色盘.png'\n}, {\n pagePath: '/pages/orders/index',\n text: '订单',\n icon: '/icon/包裹.png'\n}, {\n pagePath: '/pages/profile/index',\n text: '我的',\n icon: '/icon/个人.png'\n}];\nexport default function CustomTabBar() {\n var _Taro$getCurrentInsta;\n var currentPath = \"/\".concat(((_Taro$getCurrentInsta = Taro.getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.path) || 'pages/index/index');\n var switchTab = function switchTab(url) {\n Taro.switchTab({\n url: url\n });\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"custom-tab-bar\",\n children: TABS.map(function (tab) {\n var isActive = currentPath === tab.pagePath;\n return /*#__PURE__*/_jsxs(View, {\n className: \"tab-item \".concat(isActive ? 'active' : ''),\n onTap: function onTap() {\n return switchTab(tab.pagePath);\n },\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"tab-icon-img \".concat(isActive ? 'active' : ''),\n src: tab.icon,\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"tab-label\",\n children: tab.text\n })]\n }, tab.pagePath);\n })\n });\n}","import { createComponentConfig } from '@tarojs/runtime'\nimport component from \"!!../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=custom-tab-bar/index!./index.tsx\"\nvar inst = Component(createComponentConfig(component, 'custom-tab-bar/index'))\n\nexport default component\n"],"names":[],"sourceRoot":""}
+6 -3
View File
@@ -40,19 +40,22 @@
position: relative;
}
.tab-icon {
font-size: 40rpx;
.tab-icon-img {
width: 28rpx;
height: 28rpx;
margin-bottom: 4rpx;
-webkit-transition: -webkit-transform 0.2s;
transition: -webkit-transform 0.2s;
transition: transform 0.2s;
transition: transform 0.2s, -webkit-transform 0.2s;
opacity: 0.6;
}
.tab-item.active .tab-icon {
.tab-item.active .tab-icon-img {
-webkit-transform: scale(1.15);
-ms-transform: scale(1.15);
transform: scale(1.15);
opacity: 1;
}
.tab-label {
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

+12 -11
View File
@@ -154,7 +154,7 @@ function AddressPage() {
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "back-btn",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateBack();
},
children: "\u2190"
@@ -196,19 +196,19 @@ function AddressPage() {
className: "address-actions",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "address-act",
onClick: function onClick() {
onTap: function onTap() {
return openEdit(item);
},
children: "\u270F\uFE0F \u7F16\u8F91"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "address-act",
onClick: function onClick() {
onTap: function onTap() {
return handleCopy(item);
},
children: "\uD83D\uDCCB \u590D\u5236"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "address-act delete",
onClick: function onClick() {
onTap: function onTap() {
return handleDelete(item.id);
},
children: "\uD83D\uDDD1\uFE0F \u5220\u9664"
@@ -217,9 +217,10 @@ function AddressPage() {
}, item.id);
}), list.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "empty-state",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "empty-icon",
children: "\uD83D\uDCCD"
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "empty-icon-img",
src: "/icon/\u5730\u5740.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "empty-text",
children: "\u8FD8\u6CA1\u6709\u6536\u8D27\u5730\u5740"
@@ -234,7 +235,7 @@ function AddressPage() {
className: "action-bar",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "btn-gradient",
onClick: openAdd,
onTap: openAdd,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: "\u65B0\u589E\u6536\u8D27\u5730\u5740"
})
@@ -283,7 +284,7 @@ function AddressPage() {
}
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "form-row",
onClick: function onClick() {
onTap: function onTap() {
return setIsDefault(!isDefault);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
@@ -296,7 +297,7 @@ function AddressPage() {
className: "form-actions",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "btn-outline",
onClick: function onClick() {
onTap: function onTap() {
setShowForm(false);
resetForm();
},
@@ -305,7 +306,7 @@ function AddressPage() {
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "btn-gradient",
onClick: handleSave,
onTap: handleSave,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: "\u4FDD\u5B58"
})
+1 -1
View File
File diff suppressed because one or more lines are too long
+10 -16
View File
@@ -177,8 +177,8 @@
text-align: center;
}
/* 空状态统一的在 app.scss */
.login-guard {
/* 空状态(主题适配) */
.empty-state {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
@@ -188,30 +188,24 @@
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
padding: 120rpx 40rpx;
text-align: center;
}
.login-guard-icon {
font-size: 80rpx;
.empty-icon-img {
width: 48rpx;
height: 48rpx;
margin-bottom: 24rpx;
}
.login-guard-title {
font-size: 36rpx;
.empty-text {
font-size: 32rpx;
font-weight: 700;
color: var(--text-primary);
margin-bottom: 12rpx;
}
.login-guard-desc {
font-size: 28rpx;
.empty-sub {
font-size: 26rpx;
color: var(--text-secondary);
margin-bottom: 32rpx;
}
.login-guard-btn {
padding: 20rpx 48rpx;
}
+168 -28
View File
@@ -29,13 +29,25 @@
function CheckoutPage() {
var _design$designData, _design$designData2, _design$designData3, _design$designData$im, _design$designData$im2, _design$designData$im3;
var _design$designData, _design$designData2, _design$designData3, _design$designData$im, _design$designData$im2, _design$designData$im3, _address$region2;
var _useThemeContext = (0,_context_ThemeContext__WEBPACK_IMPORTED_MODULE_4__.useThemeContext)(),
theme = _useThemeContext.theme;
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null),
_useState2 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState, 2),
design = _useState2[0],
setDesign = _useState2[1];
var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null),
_useState4 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState3, 2),
address = _useState4[0],
setAddress = _useState4[1];
var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false),
_useState6 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState5, 2),
showAddrPicker = _useState6[0],
setShowAddrPicker = _useState6[1];
var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]),
_useState8 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState7, 2),
addrList = _useState8[0],
setAddrList = _useState8[1];
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {
var _Taro$getCurrentInsta;
var params = (_Taro$getCurrentInsta = _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params;
@@ -46,7 +58,47 @@ function CheckoutPage() {
return x.id === dId;
});
setDesign(d || null);
setAddress((0,_utils_store__WEBPACK_IMPORTED_MODULE_2__.getDefaultAddress)());
setAddrList((0,_utils_store__WEBPACK_IMPORTED_MODULE_2__.getAddressList)());
}, []);
var handleConfirm = function handleConfirm() {
var _address$region;
if (!address) {
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '请先添加收货地址',
icon: 'none'
});
return;
}
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showModal({
title: '确认下单',
content: "\u786E\u8BA4\u540E\u5C06\u4ECE\u8BBE\u8BA1\u6E05\u5355\u751F\u6210\u8BA2\u5355\uFF0C\u5E76\u5BC4\u9001\u81F3\uFF1A\n".concat((_address$region = address.region) === null || _address$region === void 0 ? void 0 : _address$region.join(' '), " ").concat(address.detail),
success: function success(res) {
if (res.confirm) {
(0,_utils_store__WEBPACK_IMPORTED_MODULE_2__.designToOrder)(design.id);
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '下单成功',
icon: 'success'
});
setTimeout(function () {
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({
url: '/pages/index/index'
});
}, 1500);
}
}
});
};
var handlePickAddress = function handlePickAddress(addr) {
setAddress(addr);
setShowAddrPicker(false);
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '地址已更改',
icon: 'success'
});
};
var hasStickers = (design === null || design === void 0 || (_design$designData = design.designData) === null || _design$designData === void 0 ? void 0 : _design$designData.stickers) && design.designData.stickers.length > 0;
var hasLegacyImage = design === null || design === void 0 || (_design$designData2 = design.designData) === null || _design$designData2 === void 0 ? void 0 : _design$designData2.imageSrc;
if (!design) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "theme-".concat(theme),
@@ -65,35 +117,13 @@ function CheckoutPage() {
var maskStyle = {
width: 300,
height: 420
}; // fallback
if ((_design$designData = design.designData) !== null && _design$designData !== void 0 && (_design$designData = _design$designData.category) !== null && _design$designData !== void 0 && _design$designData.mask) {
};
if ((_design$designData3 = design.designData) !== null && _design$designData3 !== void 0 && (_design$designData3 = _design$designData3.category) !== null && _design$designData3 !== void 0 && _design$designData3.mask) {
var m = design.designData.category.mask;
maskStyle.width = m.width;
maskStyle.height = m.height;
if (m.shape === 'circle') maskStyle.borderRadius = '50%';else maskStyle.borderRadius = m.borderRadius || 0;
}
var handleConfirm = function handleConfirm() {
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showModal({
title: '确认下单',
content: '确认后将从设计清单生成订单',
success: function success(res) {
if (res.confirm) {
(0,_utils_store__WEBPACK_IMPORTED_MODULE_2__.designToOrder)(design.id);
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '下单成功',
icon: 'success'
});
setTimeout(function () {
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({
url: '/pages/index/index'
});
}, 1500);
}
}
});
};
var hasStickers = ((_design$designData2 = design.designData) === null || _design$designData2 === void 0 ? void 0 : _design$designData2.stickers) && design.designData.stickers.length > 0;
var hasLegacyImage = (_design$designData3 = design.designData) === null || _design$designData3 === void 0 ? void 0 : _design$designData3.imageSrc;
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "theme-".concat(theme),
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
@@ -109,7 +139,7 @@ function CheckoutPage() {
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "back-btn",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateBack();
},
children: "\u2190"
@@ -190,11 +220,55 @@ function CheckoutPage() {
children: ["\xA5", (design.unitPrice * design.count).toFixed(2)]
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "checkout-address-card dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "checkout-address-header",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "info-label",
children: "\u6536\u8D27\u5730\u5740"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "address-change",
onTap: function onTap() {
return setShowAddrPicker(true);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "change-text",
children: "\u66F4\u6539\u6536\u8D27\u5730\u5740"
})
})]
}), address ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "checkout-address-body",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "addr-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "addr-name",
children: address.name
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "addr-phone",
children: address.phone
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "addr-detail",
children: [(_address$region2 = address.region) === null || _address$region2 === void 0 ? void 0 : _address$region2.join(' '), " ", address.detail]
})]
}) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "checkout-address-empty",
onTap: function onTap() {
return setShowAddrPicker(true);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "empty-text",
children: "\u6682\u65E0\u6536\u8D27\u5730\u5740\uFF0C\u70B9\u51FB\u6DFB\u52A0"
})
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "checkout-actions",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "btn-outline",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateBack();
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
@@ -202,7 +276,7 @@ function CheckoutPage() {
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "btn-gradient",
onClick: handleConfirm,
onTap: handleConfirm,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: "\u786E\u8BA4\u4E0B\u5355"
})
@@ -211,6 +285,72 @@ function CheckoutPage() {
style: {
height: '40px'
}
}), showAddrPicker && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "modal-overlay",
style: {
alignItems: 'flex-end',
justifyContent: 'flex-end'
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "addr-picker-sheet dashed-card",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "addr-picker-header",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "addr-picker-title",
children: "\u9009\u62E9\u6536\u8D27\u5730\u5740"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "addr-picker-close",
onTap: function onTap() {
return setShowAddrPicker(false);
},
children: "\u2715"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "addr-picker-list",
children: [addrList.map(function (addr) {
var _addr$region;
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "addr-picker-item ".concat((address === null || address === void 0 ? void 0 : address.id) === addr.id ? 'active' : ''),
onTap: function onTap() {
return handlePickAddress(addr);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "addr-picker-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "addr-picker-name",
children: addr.name
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "addr-picker-phone",
children: addr.phone
}), addr.isDefault && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "addr-picker-default",
children: "\u9ED8\u8BA4"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "addr-picker-detail",
children: [(_addr$region = addr.region) === null || _addr$region === void 0 ? void 0 : _addr$region.join(' '), " ", addr.detail]
})]
}, addr.id);
}), addrList.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "addr-picker-empty",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: "\u6682\u65E0\u5730\u5740\uFF0C\u8BF7\u5148\u6DFB\u52A0\u6536\u8D27\u5730\u5740"
})
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "addr-picker-add",
onTap: function onTap() {
setShowAddrPicker(false);
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateTo({
url: '/pages/address/index'
});
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "addr-picker-add-text",
children: "+ \u65B0\u5EFA\u6536\u8D27\u5730\u5740"
})
})]
})
})]
})
});
+1 -1
View File
File diff suppressed because one or more lines are too long
+169
View File
@@ -85,6 +85,175 @@
color: var(--accent-pink);
}
/* 地址卡片 */
.checkout-address-card {
padding: 24rpx;
}
.checkout-address-header {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
margin-bottom: 16rpx;
}
.address-change {
padding: 6rpx 16rpx;
border-radius: 8rpx;
background: rgba(91, 140, 255, 0.08);
}
.change-text {
font-size: 24rpx;
color: var(--accent-blue);
}
.checkout-address-body {
padding-top: 8rpx;
}
.addr-row {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
gap: 16rpx;
margin-bottom: 8rpx;
}
.addr-name {
font-size: 28rpx;
font-weight: 700;
color: var(--text-primary);
}
.addr-phone {
font-size: 26rpx;
color: var(--text-secondary);
}
.addr-detail {
font-size: 26rpx;
color: var(--text-secondary);
line-height: 1.5;
}
.checkout-address-empty {
padding: 32rpx 0;
text-align: center;
}
.empty-text {
font-size: 26rpx;
color: var(--text-secondary);
}
/* 底部弹窗 — 地址选择(样式复用 app.scss 全局定义,移除非必要覆写) */
.addr-picker-header {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
margin-bottom: 20rpx;
}
.addr-picker-title {
font-size: 32rpx;
font-weight: 700;
color: var(--text-primary);
}
.addr-picker-close {
font-size: 28rpx;
color: var(--text-secondary);
padding: 8rpx;
}
.addr-picker-list {
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
overflow-y: auto;
}
.addr-picker-item {
padding: 20rpx 16rpx;
border-bottom: 1rpx dashed rgba(0, 0, 0, 0.05);
}
.addr-picker-item.active {
background: rgba(91, 140, 255, 0.06);
border-radius: 12rpx;
}
.addr-picker-row {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
gap: 16rpx;
margin-bottom: 8rpx;
}
.addr-picker-name {
font-size: 28rpx;
font-weight: 700;
color: var(--text-primary);
}
.addr-picker-phone {
font-size: 26rpx;
color: var(--text-secondary);
}
.addr-picker-default {
font-size: 22rpx;
color: var(--accent-pink);
border: 1rpx solid var(--accent-pink);
padding: 2rpx 8rpx;
border-radius: 6rpx;
}
.addr-picker-detail {
font-size: 26rpx;
color: var(--text-secondary);
}
.addr-picker-empty {
padding: 40rpx;
text-align: center;
color: var(--text-secondary);
font-size: 28rpx;
}
.addr-picker-add {
margin-top: 16rpx;
padding: 20rpx;
text-align: center;
border: 2rpx dashed var(--accent-blue);
border-radius: 12rpx;
}
.addr-picker-add-text {
font-size: 28rpx;
color: var(--accent-blue);
}
/* 底部操作 */
.checkout-actions {
position: fixed;
+57 -51
View File
@@ -10,16 +10,18 @@
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": function() { return /* binding */ DesignListPage; }
/* harmony export */ });
/* harmony import */ var F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _tarojs_components__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @tarojs/components */ "./node_modules/@tarojs/plugin-platform-weapp/dist/components-react.js");
/* harmony import */ var F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _tarojs_components__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @tarojs/components */ "./node_modules/@tarojs/plugin-platform-weapp/dist/components-react.js");
/* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tarojs/taro */ "./node_modules/@tarojs/taro/index.js");
/* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tarojs_taro__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/cjs/react.production.min.js");
/* harmony import */ var _utils_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/store */ "./src/utils/store.ts");
/* harmony import */ var _components_ThemeToggle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/ThemeToggle */ "./src/components/ThemeToggle/index.tsx");
/* harmony import */ var _context_ThemeContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/ThemeContext */ "./src/context/ThemeContext.tsx");
/* harmony import */ var _components_LoginGuard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/LoginGuard */ "./src/components/LoginGuard/index.tsx");
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/cjs/react-jsx-runtime.production.min.js");
/* harmony import */ var _utils_productConfig__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/productConfig */ "./src/utils/productConfig.ts");
/* harmony import */ var _components_ThemeToggle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/ThemeToggle */ "./src/components/ThemeToggle/index.tsx");
/* harmony import */ var _context_ThemeContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/ThemeContext */ "./src/context/ThemeContext.tsx");
/* harmony import */ var _components_LoginGuard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/LoginGuard */ "./src/components/LoginGuard/index.tsx");
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/cjs/react-jsx-runtime.production.min.js");
@@ -61,14 +63,14 @@ var STATUS_STYLE = {
}
};
function DesignListPage() {
var _useThemeContext = (0,_context_ThemeContext__WEBPACK_IMPORTED_MODULE_4__.useThemeContext)(),
var _useThemeContext = (0,_context_ThemeContext__WEBPACK_IMPORTED_MODULE_5__.useThemeContext)(),
theme = _useThemeContext.theme;
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('all'),
_useState2 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_7__["default"])(_useState, 2),
_useState2 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_8__["default"])(_useState, 2),
activeTab = _useState2[0],
setActiveTab = _useState2[1];
var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]),
_useState4 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_7__["default"])(_useState3, 2),
_useState4 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_8__["default"])(_useState3, 2),
list = _useState4[0],
setList = _useState4[1];
var load = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function () {
@@ -116,119 +118,123 @@ function DesignListPage() {
url: "/pages/diy/index?source=designList&designId=".concat(item.id)
});
};
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "theme-".concat(theme),
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_components_LoginGuard__WEBPACK_IMPORTED_MODULE_5__["default"], {
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_LoginGuard__WEBPACK_IMPORTED_MODULE_6__["default"], {
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "design-page",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_components_ThemeToggle__WEBPACK_IMPORTED_MODULE_3__["default"], {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_ThemeToggle__WEBPACK_IMPORTED_MODULE_4__["default"], {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "page-header dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
className: "page-title",
children: "\u6211\u7684\u8BBE\u8BA1\u6E05\u5355"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "status-tabs",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.ScrollView, {
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.ScrollView, {
className: "tabs-scroll",
scrollX: true,
children: STATUS_TABS.map(function (tab) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "tab-item ".concat(activeTab === tab.code ? 'active' : ''),
onClick: function onClick() {
onTap: function onTap() {
return setActiveTab(tab.code);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
className: "tab-label",
children: tab.label
}), activeTab === tab.code && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
}), activeTab === tab.code && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "tab-underline"
})]
}, tab.code);
})
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.ScrollView, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.ScrollView, {
className: "design-list",
scrollY: true,
children: [filtered.map(function (item) {
var _item$productIcon;
var style = STATUS_STYLE[item.status];
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
var iconSrc = (_item$productIcon = item.productIcon) !== null && _item$productIcon !== void 0 && _item$productIcon.startsWith('/icon/') ? item.productIcon : _utils_productConfig__WEBPACK_IMPORTED_MODULE_3__.PRODUCT_ICON_MAP[item.productId] || '/icon/四角星.png';
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "design-card dashed-card",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "design-body",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "design-icon",
children: item.productIcon
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Image, {
className: "design-icon-img",
src: iconSrc,
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "design-info",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "design-title-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
className: "design-name",
children: item.productName
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
className: "badge ".concat(style.cls),
children: style.label
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
className: "design-meta",
children: ["\u6570\u91CF: ", item.count, " \u4EF6 | \u5355\u4EF7: \xA5", item.unitPrice]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
className: "design-total",
children: ["\u5C0F\u8BA1: \xA5", (item.unitPrice * item.count).toFixed(2)]
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "design-actions",
children: [item.status !== 'ordered' && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
children: [item.status !== 'ordered' && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "btn-gradient design-btn",
onClick: function onClick() {
onTap: function onTap() {
return goDesign(item);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
children: item.status === 'undesigned' ? '开始设计' : '继续设计'
})
}), item.status === 'ordered' && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
}), item.status === 'ordered' && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "btn-outline design-btn",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({
url: '/pages/orders/index'
});
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
children: "\u67E5\u770B\u8BA2\u5355"
})
})]
})]
}, item.id);
}), filtered.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
}), filtered.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "empty-state",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "empty-icon",
children: "\uD83D\uDCD0"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Image, {
className: "empty-icon-img",
src: "/icon/\u8C03\u8272\u76D8.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
className: "empty-text",
children: "\u8FD8\u6CA1\u6709\u8BBE\u8BA1\u6E05\u5355"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
className: "empty-sub",
children: "\u53BB\u9996\u9875\u901B\u901B\uFF0C\u627E\u5230\u559C\u6B22\u7684\u5B9A\u5236\u54C1"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
className: "btn-gradient",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({
url: '/pages/index/index'
});
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.Text, {
children: "\u53BB\u901B\u901B"
})
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_9__.View, {
style: {
height: '40px'
}
+1 -1
View File
File diff suppressed because one or more lines are too long
+11 -2
View File
@@ -73,6 +73,14 @@
flex-shrink: 0;
}
.design-icon-img {
width: 56rpx;
height: 56rpx;
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
}
.design-info {
-webkit-flex: 1;
-ms-flex: 1;
@@ -140,8 +148,9 @@
text-align: center;
}
.empty-icon {
font-size: 80rpx;
.empty-icon-img {
width: 56rpx;
height: 56rpx;
margin-bottom: 24rpx;
}
+11 -11
View File
@@ -351,7 +351,7 @@ function DIYPage() {
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.Text, {
className: "back-btn",
onClick: goBack,
onTap: goBack,
children: "\u2190"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.Text, {
className: "page-title",
@@ -385,7 +385,7 @@ function DIYPage() {
},
onTouchMove: handleStickerTouchMove,
onTouchEnd: handleTouchEnd,
onClick: function onClick() {
onTap: function onTap() {
return setActiveStickerId(s.id);
},
mode: "aspectFit"
@@ -411,12 +411,12 @@ function DIYPage() {
src: s.src,
className: "sticker-thumb-img",
mode: "aspectFit",
onClick: function onClick() {
onTap: function onTap() {
return setActiveStickerId(s.id);
}
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.View, {
className: "sticker-del",
onClick: function onClick() {
onTap: function onTap() {
return deleteSticker(s.id);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.Text, {
@@ -427,7 +427,7 @@ function DIYPage() {
}, s.id);
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.View, {
className: "sticker-add-btn",
onClick: addSticker,
onTap: addSticker,
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.Text, {
className: "add-icon",
children: "+"
@@ -456,7 +456,7 @@ function DIYPage() {
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.View, {
className: "tool-btn",
onClick: function onClick() {
onTap: function onTap() {
return handleScale(activeStickerId, -0.1);
},
children: "\uFF0D"
@@ -467,7 +467,7 @@ function DIYPage() {
})) === null || _stickers$find === void 0 ? void 0 : _stickers$find.scale) || 1) * 100), "%"]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.View, {
className: "tool-btn",
onClick: function onClick() {
onTap: function onTap() {
return handleScale(activeStickerId, 0.1);
},
children: "\uFF0B"
@@ -487,7 +487,7 @@ function DIYPage() {
className: "action-btns mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.View, {
className: "btn-gradient",
onClick: function onClick() {
onTap: function onTap() {
return setPreviewMode(true);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.Text, {
@@ -495,7 +495,7 @@ function DIYPage() {
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.View, {
className: "btn-outline",
onClick: addSticker,
onTap: addSticker,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.Text, {
children: "\u6DFB\u52A0\u8D34\u7EB8"
})
@@ -540,7 +540,7 @@ function DIYPage() {
className: "preview-actions",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.View, {
className: "btn-outline",
onClick: function onClick() {
onTap: function onTap() {
return setPreviewMode(false);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.Text, {
@@ -548,7 +548,7 @@ function DIYPage() {
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.View, {
className: "btn-gradient ".concat(hasOverlap ? 'disabled' : ''),
onClick: handleComplete,
onTap: handleComplete,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_10__.Text, {
children: "\u786E\u8BA4\u5B8C\u6210"
})
+1 -1
View File
File diff suppressed because one or more lines are too long
+41 -29
View File
@@ -28,33 +28,42 @@
// 成品展示数据
// 成品展示配图(从 img 里取对应实物图)
var SHOWCASES = [{
var SHOWCASE_LIST = [{
title: '毕业纪念笔记本',
desc: '全班名字组成校徽',
color: '#FFE4EC'
image: '/img/book_small/The1.jpg'
}, {
title: '铜质杯垫',
desc: '金属质感桌面艺术',
color: '#E8D5C4'
image: '/img/cup/The1.jpg'
}, {
title: '竹制笔盒',
desc: '自然竹纹文房雅器',
color: '#E0F0D9'
image: '/img/penbox/The1.jpg'
}, {
title: '书本型灯',
desc: '温暖光影点亮心意',
color: '#FFF3CD'
image: '/img/booklight/The1.jpg'
}, {
title: '情侣定制礼',
desc: '两个人的名字交织',
color: '#FCE4EC'
image: '/img/book_big/The1.jpg'
}, {
title: '企业年会礼',
desc: '员工名字组成Logo',
color: '#E3F2FD'
image: '/img/penbox/The2.jpg'
}];
// 品类对应的实物照片映射(首页卡片顶部大图)
var PRODUCT_IMG_MAP = {
'notebook-small': '/img/book_small/The1.jpg',
'notebook-large': '/img/book_big/The1.jpg',
'coaster': '/img/cup/The1.jpg',
'penbox': '/img/penbox/The1.jpg',
'booklamp': '/img/booklight/The1.jpg'
};
function Index() {
var _useThemeContext = (0,_context_ThemeContext__WEBPACK_IMPORTED_MODULE_4__.useThemeContext)(),
theme = _useThemeContext.theme;
@@ -89,9 +98,10 @@ function Index() {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "search-inner",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "search-icon",
children: "\uD83D\uDD0D"
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "search-icon-img",
src: "/icon/\u641C\u7D22.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Input, {
className: "search-input",
type: "text",
@@ -123,7 +133,7 @@ function Index() {
previousMargin: "40rpx",
nextMargin: "40rpx",
indicatorDots: true,
children: SHOWCASES.map(function (item, idx) {
children: SHOWCASE_LIST.map(function (item, idx) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.SwiperItem, {
className: "showcase-swiper-item",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
@@ -132,14 +142,14 @@ function Index() {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "showcase-image-wrapper",
style: {
background: item.color
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "showcase-emoji",
children: "\uD83C\uDF81"
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "showcase-real-img",
src: item.image,
mode: "aspectFill"
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "showcase-text-area",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "showcase-info",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "showcase-title",
@@ -152,6 +162,7 @@ function Index() {
className: "showcase-tag",
children: "\u6210\u54C1\u6848\u4F8B"
})]
})]
})
}, idx);
})
@@ -166,18 +177,18 @@ function Index() {
children: filteredCategories.map(function (cat) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "category-item dashed-card",
onClick: function onClick() {
onTap: function onTap() {
return navigateToProduct(cat.id);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "star-badge"
}), cat.images && cat.images.length > 0 ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "category-icon-img",
src: cat.images[0],
mode: "aspectFit"
}) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "category-icon",
children: cat.icon
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "category-img-wrapper",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "category-img-real",
src: PRODUCT_IMG_MAP[cat.id] || '/icon/四角星.png',
mode: "aspectFill"
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "category-name",
children: cat.name
@@ -192,9 +203,10 @@ function Index() {
})
}), filteredCategories.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "empty-category dashed-card",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "empty-icon",
children: "\uD83D\uDD0D"
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "empty-icon-img",
src: "/icon/\u641C\u7D22.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "empty-text",
children: "\u672A\u627E\u5230\u5339\u914D\u7684\u54C1\u7C7B"
+1 -1
View File
File diff suppressed because one or more lines are too long
+86 -43
View File
@@ -20,7 +20,7 @@
.header-title {
font-size: 48rpx;
font-weight: 800;
color: #5c3a3a;
color: var(--text-primary);
letter-spacing: 4rpx;
}
@@ -37,6 +37,7 @@
-ms-flex-align: center;
align-items: center;
background: #f8f9fa;
border: 1rpx dashed rgba(0, 0, 0, 0.06);
border-radius: 40rpx;
padding: 16rpx 24rpx;
}
@@ -46,51 +47,57 @@
margin-right: 16rpx;
}
.search-icon-img {
width: 28rpx;
height: 28rpx;
margin-right: 16rpx;
}
.search-input {
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
font-size: 28rpx;
color: #5c3a3a;
color: var(--text-primary);
background: transparent;
border: none;
outline: none;
}
.search-input::-webkit-input-placeholder {
color: #b08d8d;
color: var(--text-secondary);
font-size: 26rpx;
}
.search-input::-moz-placeholder {
color: #b08d8d;
color: var(--text-secondary);
font-size: 26rpx;
}
.search-input:-ms-input-placeholder {
color: #b08d8d;
color: var(--text-secondary);
font-size: 26rpx;
}
.search-input::-ms-input-placeholder {
color: #b08d8d;
color: var(--text-secondary);
font-size: 26rpx;
}
.search-input::placeholder {
color: #b08d8d;
color: var(--text-secondary);
font-size: 26rpx;
}
.search-result-hint {
margin-top: 16rpx;
padding-top: 16rpx;
border-top: 2rpx dashed #eee;
border-top: 2rpx dashed var(--line-star);
}
.hint-text {
font-size: 24rpx;
color: #b08d8d;
color: var(--text-secondary);
}
/* 成品展示轮播 */
@@ -99,7 +106,7 @@
}
.showcase-swiper {
height: 460rpx;
height: 520rpx;
}
.showcase-swiper-item {
@@ -120,26 +127,23 @@
.showcase-swiper-card {
width: 100%;
height: 100%;
padding: 20rpx;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
position: relative;
border-radius: 24rpx;
overflow: hidden;
-webkit-box-shadow: var(--shadow-card);
box-shadow: var(--shadow-card);
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
}
.showcase-image-wrapper {
width: 100%;
height: 240rpx;
border-radius: 16rpx;
height: 320rpx;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
@@ -149,28 +153,53 @@
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
margin-bottom: 16rpx;
overflow: hidden;
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
position: relative;
}
.showcase-emoji {
font-size: 80rpx;
.showcase-real-img {
width: 100%;
height: 100%;
-o-object-fit: cover;
object-fit: cover;
}
.showcase-info {
.showcase-text-area {
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
text-align: center;
background: var(--bg-card);
padding: 16rpx 20rpx;
position: relative;
}
.showcase-info .showcase-title {
font-size: 32rpx;
font-weight: 700;
color: #5c3a3a;
color: var(--text-primary);
display: block;
margin-bottom: 8rpx;
}
.showcase-info .showcase-desc {
font-size: 24rpx;
color: #b08d8d;
color: var(--text-secondary);
display: block;
}
@@ -178,12 +207,13 @@
position: absolute;
top: 16rpx;
right: 16rpx;
background: rgba(255, 154, 158, 0.15);
color: #ff6b81;
background: rgba(255, 154, 158, 0.9);
color: #ffffff;
font-size: 20rpx;
padding: 4rpx 16rpx;
border-radius: 20rpx;
font-weight: 500;
font-weight: 600;
z-index: 2;
}
/* 热门品类 */
@@ -208,7 +238,8 @@
-ms-flex-align: center;
align-items: center;
text-align: center;
padding: 32rpx 20rpx;
padding: 0 0 24rpx;
overflow: hidden;
-webkit-transition: -webkit-transform 0.2s;
transition: -webkit-transform 0.2s;
transition: transform 0.2s;
@@ -221,29 +252,40 @@
transform: scale(0.96);
}
.category-icon {
font-size: 56rpx;
margin-bottom: 12rpx;
/* 品类顶部实物照片 */
.category-img-wrapper {
width: 100%;
height: 180rpx;
overflow: hidden;
border-radius: 16rpx;
margin-bottom: 16rpx;
position: relative;
}
.category-icon-img {
width: 120rpx;
height: 120rpx;
-o-object-fit: contain;
object-fit: contain;
margin-bottom: 12rpx;
.category-img-real {
width: 100%;
height: 100%;
-o-object-fit: cover;
object-fit: cover;
}
.category-name {
font-size: 28rpx;
font-weight: 700;
color: #5c3a3a;
color: var(--text-primary);
margin-bottom: 8rpx;
}
.category-desc {
font-size: 22rpx;
color: #b08d8d;
color: var(--text-secondary);
}
.category-price {
font-size: 30rpx;
font-weight: 700;
color: var(--accent-pink);
margin-top: 8rpx;
}
/* 空状态 */
@@ -261,21 +303,22 @@
text-align: center;
}
.empty-icon {
font-size: 64rpx;
.empty-icon-img {
width: 48rpx;
height: 48rpx;
margin-bottom: 16rpx;
}
.empty-text {
font-size: 30rpx;
font-weight: 600;
color: #5c3a3a;
color: var(--text-primary);
margin-bottom: 8rpx;
}
.empty-sub {
font-size: 24rpx;
color: #b08d8d;
color: var(--text-secondary);
}
/* 底部安全区 */
+286 -245
View File
@@ -10,14 +10,15 @@
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": function() { return /* binding */ OrderDetailPage; }
/* harmony export */ });
/* harmony import */ var F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/* harmony import */ var F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _tarojs_components__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @tarojs/components */ "./node_modules/@tarojs/plugin-platform-weapp/dist/components-react.js");
/* harmony import */ var _tarojs_components__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @tarojs/components */ "./node_modules/@tarojs/plugin-platform-weapp/dist/components-react.js");
/* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tarojs/taro */ "./node_modules/@tarojs/taro/index.js");
/* harmony import */ var _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tarojs_taro__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/cjs/react.production.min.js");
/* harmony import */ var _utils_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/store */ "./src/utils/store.ts");
/* harmony import */ var _components_ThemeToggle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/ThemeToggle */ "./src/components/ThemeToggle/index.tsx");
/* harmony import */ var _context_ThemeContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/ThemeContext */ "./src/context/ThemeContext.tsx");
/* harmony import */ var _components_ThemeToggle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/ThemeToggle */ "./src/components/ThemeToggle/index.tsx");
/* harmony import */ var _context_ThemeContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/ThemeContext */ "./src/context/ThemeContext.tsx");
/* harmony import */ var _utils_store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/store */ "./src/utils/store.ts");
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/cjs/react-jsx-runtime.production.min.js");
@@ -28,338 +29,378 @@
function OrderDetailPage() {
var _design$designData, _design$designData$ca, _design$designData$ca2, _design$designData2, _design$designData$ca3, _design$designData$ca4, _design$designData$im, _design$designData$im2, _design$designData$im3;
var _useThemeContext = (0,_context_ThemeContext__WEBPACK_IMPORTED_MODULE_4__.useThemeContext)(),
var _Taro$getCurrentInsta, _order$productIcon, _address$region;
var _useThemeContext = (0,_context_ThemeContext__WEBPACK_IMPORTED_MODULE_3__.useThemeContext)(),
theme = _useThemeContext.theme;
var params = (_Taro$getCurrentInsta = _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params;
var orderId = (params === null || params === void 0 ? void 0 : params.orderId) || '';
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null),
_useState2 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState, 2),
order = _useState2[0],
setOrder = _useState2[1];
var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null),
_useState4 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState3, 2),
design = _useState4[0],
setDesign = _useState4[1];
address = _useState4[0],
setAddress = _useState4[1];
var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false),
_useState6 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState5, 2),
showAddrPicker = _useState6[0],
setShowAddrPicker = _useState6[1];
var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]),
_useState8 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState7, 2),
addrList = _useState8[0],
setAddrList = _useState8[1];
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {
var _Taro$getCurrentInsta;
var params = (_Taro$getCurrentInsta = _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params;
var orderId = params === null || params === void 0 ? void 0 : params.orderId;
if (!orderId) return;
var orders = (0,_utils_store__WEBPACK_IMPORTED_MODULE_2__.getOrderList)();
var found = orders.find(function (o) {
return o.id === orderId;
var orders = (0,_utils_store__WEBPACK_IMPORTED_MODULE_4__.getOrderList)();
var o = orders.find(function (x) {
return x.id === orderId;
});
setOrder(found || null);
if (found) {
var designs = (0,_utils_store__WEBPACK_IMPORTED_MODULE_2__.getDesignList)();
var related = designs.find(function (d) {
return d.orderId === orderId;
if (o) {
setOrder(o);
// 优先显示订单已有地址,否则用默认地址
if (o.address) {
setAddress(o.address);
} else {
setAddress((0,_utils_store__WEBPACK_IMPORTED_MODULE_4__.getDefaultAddress)());
}
}
setAddrList((0,_utils_store__WEBPACK_IMPORTED_MODULE_4__.getAddressList)());
}, [orderId]);
var handlePickAddress = function handlePickAddress(addr) {
setAddress(addr);
setShowAddrPicker(false);
// 同步更新订单里的地址
var orders = (0,_utils_store__WEBPACK_IMPORTED_MODULE_4__.getOrderList)();
var idx = orders.findIndex(function (x) {
return x.id === orderId;
});
setDesign(related || null);
}
}, []);
var STATUS_MAP = {
pending: {
label: '待付款',
badge: 'badge-pink',
desc: '您尚未付款,请及时支付'
},
paid: {
label: '待发货',
badge: 'badge-blue',
desc: '商家正在准备发货'
},
shipping: {
label: '待收货',
badge: 'badge-blue',
desc: '快递运输中'
},
done: {
label: '已完成',
badge: 'badge-green',
desc: '交易已完成'
if (idx >= 0) {
orders[idx] = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_7__["default"])((0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_7__["default"])({}, orders[idx]), {}, {
address: addr
});
// 这里不直接写回 store,用临时状态即可,实际后端会有 order update API
}
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '地址已更改',
icon: 'success'
});
};
if (!order) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "theme-".concat(theme),
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "order-detail-page",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "page-header dashed-card mt-20",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "page-title",
children: "\u8BA2\u5355\u672A\u627E\u5230"
children: "\u8BA2\u5355\u4E0D\u5B58\u5728"
})
})
})
});
}
var status = STATUS_MAP[order.statusCode] || STATUS_MAP.pending;
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "theme-".concat(theme),
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "order-detail-page",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_components_ThemeToggle__WEBPACK_IMPORTED_MODULE_3__["default"], {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_components_ThemeToggle__WEBPACK_IMPORTED_MODULE_2__["default"], {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "page-header dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "flex-between",
style: {
width: '100%'
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "back-btn",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateBack();
},
children: "\u2190"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "page-title",
children: "\u8BA2\u5355\u8BE6\u60C5"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
style: {
width: '60px'
}
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-card dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "status-banner dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-top",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "badge ".concat(status.badge, " status-badge"),
children: status.label
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "status-text",
children: [order.statusCode === 'pending' && '待付款', order.statusCode === 'paid' && '待发货', order.statusCode === 'shipping' && '待收货', order.statusCode === 'done' && '已完成']
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "status-desc",
children: status.desc
children: [order.statusCode === 'pending' && '请在30分钟内完成支付', order.statusCode === 'paid' && '商品正在打包中,即将发货', order.statusCode === 'shipping' && '快递运输中,请注意查收', order.statusCode === 'done' && '交易已完成,感谢惠顾']
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "logistics-timeline",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), (order.statusCode === 'shipping' || order.statusCode === 'done') && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "logistics-card dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "logistics-header",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "flex-center",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Image, {
className: "card-icon-img",
src: "/icon/\u5305\u88F9.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "logistics-title",
children: "\u7269\u6D41\u4FE1\u606F"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "logistics-num",
children: "\u5355\u53F7: SF1234567890"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "timeline",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "timeline-item active",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "timeline-dot"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "timeline-content",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "timeline-title",
children: "\u5DF2\u652F\u4ED8"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "timeline-time",
children: order.date
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "timeline-item",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "timeline-dot"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "timeline-content",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "timeline-title",
children: "\u5546\u5BB6\u53D1\u8D27"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "timeline-time",
children: "\u5F85\u66F4\u65B0"
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "timeline-item",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "timeline-dot"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "timeline-content",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "timeline-title",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "timeline-status",
children: "\u8FD0\u8F93\u4E2D"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "timeline-time",
children: "\u5F85\u66F4\u65B0"
children: "2024-01-15 14:30"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "timeline-desc",
children: "\u3010\u5317\u4EAC\u5E02\u3011\u5FEB\u4EF6\u5DF2\u5230\u8FBE\u5317\u4EAC\u671D\u9633\u8F6C\u8FD0\u4E2D\u5FC3"
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "timeline-item",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "timeline-dot"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "timeline-content",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "timeline-title",
children: "\u5DF2\u7B7E\u6536"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "timeline-status",
children: "\u5DF2\u53D1\u8D27"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "timeline-time",
children: "\u5F85\u66F4\u65B0"
children: "2024-01-15 09:00"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "timeline-desc",
children: "\u3010\u6DF1\u5733\u5E02\u3011\u5546\u5BB6\u5DF2\u53D1\u8D27\uFF0C\u7B49\u5F85\u63FD\u6536"
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "timeline-item",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "timeline-dot"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "timeline-content",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "timeline-status",
children: "\u5DF2\u4E0B\u5355"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "timeline-time",
children: "2024-01-14 20:15"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "timeline-desc",
children: "\u8BA2\u5355\u5DF2\u751F\u6210\uFF0C\u7B49\u5F85\u5546\u5BB6\u53D1\u8D27"
})]
})]
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "address-card dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "address-header",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "address-icon",
children: "\uD83D\uDCCD"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "address-title",
children: "\u6536\u8D27\u5730\u5740"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "address-name",
children: "\u6536\u8D27\u4EBA\uFF1A\u667A\u7ED8\u5FAE\u523B\u7528\u6237"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "address-phone",
children: "138****8888"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "address-detail",
children: "\u5E7F\u4E1C\u7701\u6DF1\u5733\u5E02\u5357\u5C71\u533A\u79D1\u6280\u56ED\u667A\u7ED8\u5FAE\u523B\u603B\u90E8"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "product-card dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "section-title",
children: "\u5546\u54C1\u4FE1\u606F"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "product-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "product-icon-wrapper",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "product-icon",
children: order.productIcon
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Image, {
className: "product-icon-img",
src: (_order$productIcon = order.productIcon) !== null && _order$productIcon !== void 0 && _order$productIcon.startsWith('/icon/') ? order.productIcon : '/icon/四角星.png',
mode: "aspectFit"
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "product-info",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "product-name",
children: order.productName
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "product-sku",
children: order.sku
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "price-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "price-label",
children: "\u5546\u54C1\u603B\u4EF7"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "price-value",
children: order.price
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "price-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "price-label",
children: "\u8FD0\u8D39"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "price-value",
children: "\xA50.00"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "price-row total",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "price-label total-label",
children: "\u5B9E\u4ED8\u6B3E"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "price-value total-value",
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "price-value",
children: order.price
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "info-card dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "address-card dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "section-title",
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "address-header",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "flex-center",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Image, {
className: "card-icon-img",
src: "/icon/\u5730\u5740.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "address-title",
children: "\u6536\u8D27\u5730\u5740"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "address-change",
onTap: function onTap() {
return setShowAddrPicker(true);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "change-text",
children: "\u66F4\u6539\u6536\u8D27\u5730\u5740"
})
})]
}), address ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "address-body",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "address-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "address-name",
children: address.name
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "address-phone",
children: address.phone
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "address-detail",
children: [(_address$region = address.region) === null || _address$region === void 0 ? void 0 : _address$region.join(' '), " ", address.detail]
})]
}) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "address-empty",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: "\u6682\u65E0\u6536\u8D27\u5730\u5740\uFF0C\u8BF7\u5148\u6DFB\u52A0"
})
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "meta-card dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "meta-title",
children: "\u8BA2\u5355\u4FE1\u606F"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "info-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "info-label",
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "meta-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "meta-label",
children: "\u8BA2\u5355\u7F16\u53F7"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "info-value",
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "meta-value",
children: order.id
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "info-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "info-label",
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "meta-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "meta-label",
children: "\u521B\u5EFA\u65F6\u95F4"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "info-value",
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "meta-value",
children: order.date
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "info-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "info-label",
children: "\u652F\u4ED8\u65B9\u5F0F"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "info-value",
children: "\u5FAE\u4FE1\u652F\u4ED8"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "meta-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "meta-label",
children: "\u6570\u91CF"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "meta-value",
children: [order.count, " \u4EF6"]
})]
})]
}), design !== null && design !== void 0 && (_design$designData = design.designData) !== null && _design$designData !== void 0 && _design$designData.stickers ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "preview-card dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "section-title",
children: "\u8BBE\u8BA1\u6548\u679C"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "design-preview",
style: {
width: ((_design$designData$ca = design.designData.category) === null || _design$designData$ca === void 0 || (_design$designData$ca = _design$designData$ca.mask) === null || _design$designData$ca === void 0 ? void 0 : _design$designData$ca.width) || 300,
height: ((_design$designData$ca2 = design.designData.category) === null || _design$designData$ca2 === void 0 || (_design$designData$ca2 = _design$designData$ca2.mask) === null || _design$designData$ca2 === void 0 ? void 0 : _design$designData$ca2.height) || 420
},
children: design.designData.stickers.map(function (s) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "preview-sticker",
src: s.src,
style: {
transform: "translate(".concat(s.x, "px, ").concat(s.y, "px) scale(").concat(s.scale || 1, ")"),
width: s.width || 200,
height: s.height || 200
},
mode: "aspectFit"
}, s.id);
})
})]
}) : design !== null && design !== void 0 && (_design$designData2 = design.designData) !== null && _design$designData2 !== void 0 && _design$designData2.imageSrc ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "preview-card dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "section-title",
children: "\u8BBE\u8BA1\u6548\u679C"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "design-preview",
style: {
width: ((_design$designData$ca3 = design.designData.category) === null || _design$designData$ca3 === void 0 || (_design$designData$ca3 = _design$designData$ca3.mask) === null || _design$designData$ca3 === void 0 ? void 0 : _design$designData$ca3.width) || 300,
height: ((_design$designData$ca4 = design.designData.category) === null || _design$designData$ca4 === void 0 || (_design$designData$ca4 = _design$designData$ca4.mask) === null || _design$designData$ca4 === void 0 ? void 0 : _design$designData$ca4.height) || 420
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "preview-sticker",
src: design.designData.imageSrc,
style: {
transform: "translate(".concat(((_design$designData$im = design.designData.imagePos) === null || _design$designData$im === void 0 ? void 0 : _design$designData$im.x) || 0, "px, ").concat(((_design$designData$im2 = design.designData.imagePos) === null || _design$designData$im2 === void 0 ? void 0 : _design$designData$im2.y) || 0, "px) scale(").concat(((_design$designData$im3 = design.designData.imagePos) === null || _design$designData$im3 === void 0 ? void 0 : _design$designData$im3.scale) || 1, ")")
},
mode: "aspectFit"
})
})]
}) : null, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
style: {
height: '40px'
}
}), showAddrPicker && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "modal-overlay",
style: {
alignItems: 'flex-end',
justifyContent: 'flex-end'
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "addr-picker-sheet dashed-card",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "addr-picker-header",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "addr-picker-title",
children: "\u9009\u62E9\u6536\u8D27\u5730\u5740"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "addr-picker-close",
onTap: function onTap() {
return setShowAddrPicker(false);
},
children: "\u2715"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "addr-picker-list",
children: [addrList.map(function (addr) {
var _addr$region;
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "addr-picker-item ".concat((address === null || address === void 0 ? void 0 : address.id) === addr.id ? 'active' : ''),
onTap: function onTap() {
return handlePickAddress(addr);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "addr-picker-row",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "addr-picker-name",
children: addr.name
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "addr-picker-phone",
children: addr.phone
}), addr.isDefault && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "addr-picker-default",
children: "\u9ED8\u8BA4"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "addr-picker-detail",
children: [(_addr$region = addr.region) === null || _addr$region === void 0 ? void 0 : _addr$region.join(' '), " ", addr.detail]
})]
}, addr.id);
}), addrList.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "addr-picker-empty",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: "\u6682\u65E0\u5730\u5740\uFF0C\u8BF7\u5148\u6DFB\u52A0\u6536\u8D27\u5730\u5740"
})
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "addr-picker-add",
onTap: function onTap() {
setShowAddrPicker(false);
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateTo({
url: '/pages/address/index'
});
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "addr-picker-add-text",
children: "+ \u65B0\u5EFA\u6536\u8D27\u5730\u5740"
})
})]
})
})]
})
});
File diff suppressed because one or more lines are too long
+302 -11
View File
@@ -119,29 +119,171 @@
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
margin-bottom: 16rpx;
}
.address-icon {
font-size: 32rpx;
margin-right: 12rpx;
}
.address-title {
font-size: 30rpx;
font-weight: 700;
color: var(--text-primary);
}
.address-name,
.address-phone,
.address-change {
padding: 6rpx 16rpx;
border-radius: 8rpx;
background: rgba(91, 140, 255, 0.08);
}
.change-text {
font-size: 24rpx;
color: var(--accent-blue);
}
.address-body {
padding-top: 8rpx;
}
.address-row {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
gap: 16rpx;
margin-bottom: 8rpx;
}
.address-name {
font-size: 28rpx;
font-weight: 700;
color: var(--text-primary);
}
.address-phone {
font-size: 26rpx;
color: var(--text-secondary);
}
.address-detail {
font-size: 26rpx;
color: var(--text-secondary);
display: block;
line-height: 1.5;
}
.address-empty {
padding: 32rpx 0;
text-align: center;
}
/* 底部弹窗 — 地址选择(样式复用 app.scss 全局定义,移除非必要覆写) */
.addr-picker-header {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
margin-bottom: 20rpx;
}
.addr-picker-title {
font-size: 32rpx;
font-weight: 700;
color: var(--text-primary);
}
.addr-picker-close {
font-size: 28rpx;
color: var(--text-secondary);
padding: 8rpx;
}
.addr-picker-list {
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
overflow-y: auto;
}
.addr-picker-item {
padding: 20rpx 16rpx;
border-bottom: 1rpx dashed rgba(0, 0, 0, 0.05);
}
.addr-picker-item.active {
background: rgba(91, 140, 255, 0.06);
border-radius: 12rpx;
}
.addr-picker-row {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
gap: 16rpx;
margin-bottom: 8rpx;
}
.addr-picker-name {
font-size: 28rpx;
font-weight: 700;
color: var(--text-primary);
}
.addr-picker-phone {
font-size: 26rpx;
color: var(--text-secondary);
}
.addr-picker-default {
font-size: 22rpx;
color: var(--accent-pink);
border: 1rpx solid var(--accent-pink);
padding: 2rpx 8rpx;
border-radius: 6rpx;
}
.addr-picker-detail {
font-size: 26rpx;
color: var(--text-secondary);
}
.addr-picker-empty {
padding: 40rpx;
text-align: center;
color: var(--text-secondary);
font-size: 28rpx;
}
.addr-picker-add {
margin-top: 16rpx;
padding: 20rpx;
text-align: center;
border: 2rpx dashed var(--accent-blue);
border-radius: 12rpx;
}
.addr-picker-add-text {
font-size: 28rpx;
color: var(--accent-blue);
}
/* 卡片标题 icon(物流/地址) */
.card-icon-img {
width: 32rpx;
height: 32rpx;
margin-right: 10rpx;
}
/* 商品卡片 */
.product-card {
padding: 32rpx;
@@ -172,10 +314,15 @@
-ms-flex-pack: center;
justify-content: center;
margin-right: 20rpx;
overflow: hidden;
padding: 8rpx;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.product-icon {
font-size: 56rpx;
.product-icon-img {
width: 64rpx;
height: 64rpx;
}
.product-info {
@@ -264,7 +411,151 @@
color: var(--text-primary);
}
/* 预览卡片 */
/* 状态横幅 */
.status-text {
font-size: 48rpx;
font-weight: 800;
color: var(--text-primary);
display: block;
margin-bottom: 10rpx;
}
/* 物流信息 */
.logistics-header {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
margin-bottom: 24rpx;
padding-bottom: 16rpx;
border-bottom: 1rpx dashed rgba(0, 0, 0, 0.06);
}
.logistics-title {
font-size: 30rpx;
font-weight: 700;
color: var(--text-primary);
}
.logistics-num {
font-size: 24rpx;
color: var(--text-secondary);
}
.timeline {
position: relative;
padding-left: 20rpx;
}
.timeline::before {
content: "";
position: absolute;
left: 8rpx;
top: 8rpx;
bottom: 8rpx;
width: 2rpx;
background: var(--line-star);
opacity: 0.3;
}
.timeline-item {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: flex-start;
-ms-flex-align: start;
align-items: flex-start;
margin-bottom: 24rpx;
position: relative;
}
.timeline-item:last-child {
margin-bottom: 0;
}
.timeline-dot {
width: 18rpx;
height: 18rpx;
border-radius: 50%;
background: var(--bg-card);
border: 3rpx solid var(--line-star);
margin-right: 20rpx;
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
margin-left: -20rpx;
z-index: 2;
}
.timeline-item.active .timeline-dot {
background: var(--accent-pink);
border-color: var(--accent-pink);
}
.timeline-content {
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
}
.timeline-status {
font-size: 28rpx;
font-weight: 700;
color: var(--text-primary);
display: block;
margin-bottom: 6rpx;
}
.timeline-time {
font-size: 24rpx;
color: var(--text-secondary);
display: block;
margin-bottom: 4rpx;
}
.timeline-desc {
font-size: 26rpx;
color: var(--text-secondary);
line-height: 1.4;
}
/* 订单信息 */
.meta-title {
font-size: 30rpx;
font-weight: 700;
color: var(--text-primary);
display: block;
margin-bottom: 16rpx;
}
.meta-row {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
padding: 16rpx 0;
}
.meta-label {
font-size: 26rpx;
color: var(--text-secondary);
}
.meta-value {
font-size: 26rpx;
color: var(--text-primary);
}
.preview-card {
padding: 32rpx;
}
+18 -14
View File
@@ -147,7 +147,7 @@ function OrdersPage() {
children: STATUS_TABS.map(function (tab) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "tab-item ".concat(activeTab === tab.code ? 'active' : ''),
onClick: function onClick() {
onTap: function onTap() {
return setActiveTab(tab.code);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
@@ -163,10 +163,12 @@ function OrdersPage() {
className: "orders-list",
scrollY: true,
children: [filteredOrders.map(function (order) {
var _order$productIcon;
var status = STATUS_MAP[order.statusCode] || STATUS_MAP.pending;
var iconSrc = (_order$productIcon = order.productIcon) !== null && _order$productIcon !== void 0 && _order$productIcon.startsWith('/icon/') ? order.productIcon : '/icon/四角星.png';
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "order-card dashed-card",
onClick: function onClick() {
onTap: function onTap() {
return goDetail(order);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
@@ -184,9 +186,10 @@ function OrdersPage() {
className: "order-body",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "order-icon-wrapper",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "order-icon",
children: order.productIcon
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Image, {
className: "order-icon-img",
src: iconSrc,
mode: "aspectFit"
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "order-info",
@@ -227,7 +230,7 @@ function OrdersPage() {
}), order.statusCode === 'shipping' && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-outline order-btn",
onClick: function onClick(e) {
onTap: function onTap(e) {
e.stopPropagation();
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '查看物流',
@@ -239,7 +242,7 @@ function OrdersPage() {
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-gradient order-btn",
onClick: function onClick(e) {
onTap: function onTap(e) {
e.stopPropagation();
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '确认收货',
@@ -253,7 +256,7 @@ function OrdersPage() {
}), order.statusCode === 'done' && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-outline order-btn",
onClick: function onClick(e) {
onTap: function onTap(e) {
e.stopPropagation();
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '申请售后',
@@ -265,7 +268,7 @@ function OrdersPage() {
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-gradient order-btn",
onClick: function onClick(e) {
onTap: function onTap(e) {
e.stopPropagation();
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '再来一单',
@@ -278,7 +281,7 @@ function OrdersPage() {
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-outline order-btn",
onClick: function onClick(e) {
onTap: function onTap(e) {
e.stopPropagation();
goDetail(order);
},
@@ -291,9 +294,10 @@ function OrdersPage() {
}, order.id);
}), filteredOrders.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "empty-state",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "empty-icon",
children: "\uD83D\uDCE6"
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Image, {
className: "empty-icon-img",
src: "/icon/\u5305\u88F9.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "empty-text",
children: "\u6682\u65E0\u8BA2\u5355"
@@ -302,7 +306,7 @@ function OrdersPage() {
children: "\u53BB\u9996\u9875\u5F00\u59CB\u5B9A\u5236\u5427"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-gradient",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({
url: '/pages/index/index'
});
+1 -1
View File
File diff suppressed because one or more lines are too long
+10 -4
View File
@@ -116,6 +116,11 @@
font-size: 56rpx;
}
.order-icon-img {
width: 56rpx;
height: 56rpx;
}
.order-info {
-webkit-flex: 1;
-ms-flex: 1;
@@ -203,20 +208,21 @@
padding: 120rpx 40rpx;
}
.empty-icon {
font-size: 100rpx;
.empty-icon-img {
width: 56rpx;
height: 56rpx;
margin-bottom: 24rpx;
}
.empty-text {
font-size: 36rpx;
font-weight: 700;
color: #5c3a3a;
color: var(--text-primary);
margin-bottom: 12rpx;
}
.empty-sub {
font-size: 28rpx;
color: #b08d8d;
color: var(--text-secondary);
margin-bottom: 40rpx;
}
+16 -13
View File
@@ -30,6 +30,7 @@
var HERO_COLORS = ['#FFE4EC', '#FFF0F5', '#FCE4EC'];
function ProductPage() {
var _Taro$getCurrentInsta;
@@ -98,7 +99,7 @@ function ProductPage() {
className: "flex-between",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "back-btn",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateBack();
},
children: "\u2190"
@@ -144,9 +145,10 @@ function ProductPage() {
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "hero-icon",
children: product.icon
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Image, {
className: "hero-icon-img",
src: (0,_utils_productConfig__WEBPACK_IMPORTED_MODULE_2__.getProductIconImg)(product),
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "hero-name",
children: product.name
@@ -211,13 +213,13 @@ function ProductPage() {
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-outline",
onClick: handleAddToList,
onTap: handleAddToList,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: "\u52A0\u5165\u8BBE\u8BA1\u6E05\u5355"
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-gradient",
onClick: goToDIY,
onTap: goToDIY,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: "\u7ACB\u5373\u4E0B\u5355"
})
@@ -235,9 +237,10 @@ function ProductPage() {
children: "\u52A0\u5165\u8BBE\u8BA1\u6E05\u5355"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "modal-product",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "modal-icon",
children: product.icon
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Image, {
className: "modal-icon-img",
src: (0,_utils_productConfig__WEBPACK_IMPORTED_MODULE_2__.getProductIconImg)(product),
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "modal-name",
children: product.name
@@ -251,7 +254,7 @@ function ProductPage() {
className: "qty-control",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "qty-btn",
onClick: function onClick() {
onTap: function onTap() {
return modQty(-1);
},
children: "\uFF0D"
@@ -260,7 +263,7 @@ function ProductPage() {
children: quantity
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "qty-btn",
onClick: function onClick() {
onTap: function onTap() {
return modQty(1);
},
children: "\uFF0B"
@@ -279,7 +282,7 @@ function ProductPage() {
className: "modal-actions",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-outline",
onClick: function onClick() {
onTap: function onTap() {
return setShowModal(false);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
@@ -287,7 +290,7 @@ function ProductPage() {
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-gradient",
onClick: confirmAdd,
onTap: confirmAdd,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: "\u786E\u5B9A"
})
+1 -1
View File
File diff suppressed because one or more lines are too long
+11
View File
@@ -47,6 +47,12 @@
margin-bottom: 16rpx;
}
.hero-icon-img {
width: 100rpx;
height: 100rpx;
margin-bottom: 16rpx;
}
.hero-name {
font-size: 36rpx;
font-weight: 700;
@@ -183,6 +189,11 @@
font-size: 48rpx;
}
.modal-icon-img {
width: 48rpx;
height: 48rpx;
}
.modal-name {
font-size: 32rpx;
color: var(--text-primary);
+119 -97
View File
@@ -28,28 +28,51 @@
var ICON_MAP = {
'我的设计': '/icon/调色盘.png',
'词云生成': '/icon/词云生成.png',
'收货地址': '/icon/地址.png',
'联系客服': '/icon/电话.png',
'使用帮助': '/icon/使用帮助.png',
'设置': '/icon/设置.png'
};
var STATUS_MAP = [{
key: 'toDesign',
label: '待设计',
icon: '/icon/三角尺.png'
}, {
key: 'pending',
label: '待付款',
icon: '/icon/四角星.png'
}, {
key: 'paid',
label: '待发货',
icon: '/icon/包裹.png'
}, {
key: 'shipping',
label: '待收货',
icon: '/icon/杯子.png'
}, {
key: 'done',
label: '已完成',
icon: '/icon/书本.png'
}];
var MENU_ITEMS = [{
icon: '🎨',
label: '我的设计',
path: '/pages/designList/index'
}, {
icon: '✨',
label: '词云生成',
path: '/pages/wordcloud/index'
}, {
icon: '📍',
label: '收货地址',
path: '/pages/address/index'
}, {
icon: '📞',
label: '联系客服',
path: '/pages/service/index'
}, {
icon: '📋',
label: '使用帮助',
path: '/pages/agreement/index'
}, {
icon: '⚙️',
label: '设置',
path: '/pages/settings/index'
}];
@@ -110,17 +133,26 @@ function ProfilePage() {
}).length
});
};
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {
var sync = function sync() {
var info = (0,_utils_store__WEBPACK_IMPORTED_MODULE_2__.getUserInfo)();
if (info) {
if (info !== null && info !== void 0 && info.openid) {
setIsLoggedIn(true);
setUserInfoState({
nickName: info.nickName || '',
avatarUrl: info.avatarUrl || ''
});
} else {
setIsLoggedIn(false);
setUserInfoState({
nickName: '',
avatarUrl: ''
});
}
loadStats();
}, []);
};
(0,_tarojs_taro__WEBPACK_IMPORTED_MODULE_0__.useDidShow)(function () {
sync();
});
var handleOpenLogin = function handleOpenLogin() {
return setShowLogin(true);
};
@@ -161,14 +193,6 @@ function ProfilePage() {
setLoginAvatarUrl(e.detail.avatarUrl || '');
};
var handleQuickClick = function handleQuickClick(type) {
if (!isLoggedIn) {
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '请先登录',
icon: 'none'
});
setShowLogin(true);
return;
}
switch (type) {
case 'toDesign':
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().setStorageSync('designList:filter', 'toDesign');
@@ -177,7 +201,6 @@ function ProfilePage() {
});
break;
case 'pending':
// 跳转订单页并带状态参数 - 这里用 event 或 storage 传递
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().setStorageSync('orders:filter', 'pending');
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({
url: '/pages/orders/index'
@@ -203,17 +226,8 @@ function ProfilePage() {
break;
}
};
var handleMenuClick = function handleMenuClick(path) {
if (!path) {
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '功能开发中',
icon: 'none'
});
return;
}
if (path.startsWith('/pages/')) {
if (path.includes('designList') || path.includes('orders')) {
if (!isLoggedIn) {
var handleMenuClick = function handleMenuClick(path, label) {
if (!isLoggedIn && (path.includes('designList') || path.includes('orders'))) {
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '请先登录',
icon: 'none'
@@ -221,6 +235,21 @@ function ProfilePage() {
setShowLogin(true);
return;
}
if (label === '联系客服') {
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateTo({
url: '/pages/service/index',
fail: function fail(err) {
console.error('navigateTo service fail', err);
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '跳转失败',
icon: 'none'
});
}
});
return;
}
if (path.startsWith('/pages/')) {
if (path.includes('designList') || path.includes('orders')) {
_tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({
url: path,
fail: function fail(err) {
@@ -247,6 +276,9 @@ function ProfilePage() {
};
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "theme-".concat(theme),
style: {
minHeight: '100vh'
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "profile-page",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_components_ThemeToggle__WEBPACK_IMPORTED_MODULE_3__["default"], {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
@@ -261,10 +293,11 @@ function ProfilePage() {
mode: "aspectFill"
}) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "avatar-placeholder",
onClick: handleOpenLogin,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "avatar-icon",
children: "\uD83D\uDC64"
onTap: handleOpenLogin,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "avatar-icon-img",
src: "/icon/\u4E2A\u4EBA.png",
mode: "aspectFit"
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "user-meta",
@@ -279,7 +312,7 @@ function ProfilePage() {
}) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.Fragment, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "user-name",
onClick: handleOpenLogin,
onTap: handleOpenLogin,
children: "\u70B9\u51FB\u767B\u5F55"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "user-level",
@@ -289,80 +322,60 @@ function ProfilePage() {
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-grid",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-row row2",
children: STATUS_MAP.slice(0, 2).map(function (s) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-group",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-item",
onClick: function onClick() {
return handleQuickClick('toDesign');
onTap: function onTap() {
return handleQuickClick(s.key);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "status-icon-img",
src: s.icon,
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "status-num",
children: orderStats.toDesign
children: orderStats[s.key]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "status-label",
children: "\u5F85\u8BBE\u8BA1"
children: s.label
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-divider"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-item",
onClick: function onClick() {
return handleQuickClick('pending');
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "status-num",
children: orderStats.pending
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "status-label",
children: "\u5F85\u4ED8\u6B3E"
})]
})]
}, s.key);
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-divider-h"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-row row3",
children: STATUS_MAP.slice(2).map(function (s, idx) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-group",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-item",
onClick: function onClick() {
return handleQuickClick('paid');
onTap: function onTap() {
return handleQuickClick(s.key);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "status-icon-img",
src: s.icon,
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "status-num",
children: orderStats.paid
children: orderStats[s.key]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "status-label",
children: "\u5F85\u53D1\u8D27"
children: s.label
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
}), idx < 2 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-divider"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-item",
onClick: function onClick() {
return handleQuickClick('shipping');
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "status-num",
children: orderStats.shipping
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "status-label",
children: "\u5F85\u6536\u8D27"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-divider"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "status-item",
onClick: function onClick() {
return handleQuickClick('done');
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "status-num",
children: orderStats.done
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "status-label",
children: "\u5DF2\u5B8C\u6210"
})]
})]
}, s.key);
})
})]
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
@@ -375,14 +388,15 @@ function ProfilePage() {
children: MENU_ITEMS.map(function (item, idx) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "menu-card dashed-card",
onClick: function onClick() {
return handleMenuClick(item.path);
onTap: function onTap() {
return handleMenuClick(item.path, item.label);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "menu-icon",
children: item.icon
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "menu-icon-img",
src: ICON_MAP[item.label],
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "menu-label",
children: item.label
@@ -398,9 +412,16 @@ function ProfilePage() {
className: "flex-between",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "flex-column",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "flex-center",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "enterprise-icon",
src: "/icon/\u4F01\u4E1A\u6279\u91CF\u5B9A\u5236.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "enterprise-title",
children: "\uD83C\uDFE2 \u4F01\u4E1A\u6279\u91CF\u5B9A\u5236"
children: "\u4F01\u4E1A\u6279\u91CF\u5B9A\u5236"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "enterprise-desc",
children: "\u5E74\u4F1A\u793C\u54C1\u3001\u5165\u804C\u7EAA\u5FF5\u3001\u56E2\u5EFA\u4F34\u624B\u793C"
@@ -436,9 +457,10 @@ function ProfilePage() {
className: "avatar-img",
src: loginAvatarUrl,
mode: "aspectFill"
}) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
className: "avatar-placeholder",
children: "\u70B9\u51FB\u9009\u62E9\u5934\u50CF"
}) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, {
className: "avatar-placeholder-img",
src: "/icon/\u4E2A\u4EBA.png",
mode: "aspectFit"
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Input, {
type: "nickname",
@@ -452,13 +474,13 @@ function ProfilePage() {
className: "login-actions",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "btn-outline",
onClick: handleCloseLogin,
onTap: handleCloseLogin,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: "\u53D6\u6D88"
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "btn-gradient",
onClick: handleLoginSubmit,
onTap: handleLoginSubmit,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: "\u767B\u5F55"
})
+1 -1
View File
File diff suppressed because one or more lines are too long
+50 -10
View File
@@ -95,14 +95,20 @@
padding: 20rpx 0;
}
.status-row.row2 {
display: grid;
grid-template-columns: 1fr 2rpx 1fr;
}
.status-row.row3 {
display: grid;
grid-template-columns: 1fr 2rpx 1fr 2rpx 1fr;
/* 每组(item + divider)作为一个 flex 单元 */
.status-group {
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
}
.status-item {
@@ -115,10 +121,10 @@
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
padding: 8rpx 0;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
padding: 8rpx 0;
}
.status-num {
@@ -138,6 +144,9 @@
height: 48rpx;
background: var(--line-star);
opacity: 0.25;
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
}
.status-divider-h {
@@ -212,7 +221,38 @@
border-radius: 40rpx !important;
}
/* 登录弹窗 */
.menu-icon-img {
width: 36rpx;
height: 36rpx;
margin-bottom: 12rpx;
}
/* 状态 icon 图片 */
.status-icon-img {
width: 28rpx;
height: 28rpx;
margin-bottom: 4rpx;
}
/* 企业定制icon */
.enterprise-icon {
width: 28rpx;
height: 28rpx;
margin-right: 12rpx;
}
/* 头像占位图 */
.avatar-icon-img {
width: 36rpx;
height: 36rpx;
}
/* 登录弹窗头像占位 */
.avatar-placeholder-img {
width: 56rpx;
height: 56rpx;
}
.modal-overlay {
position: fixed;
top: 0;
+30 -16
View File
@@ -40,6 +40,9 @@ function ServicePage() {
theme = _useThemeContext.theme;
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "theme-".concat(theme),
style: {
minHeight: '100vh'
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "service-page",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_components_ThemeToggle__WEBPACK_IMPORTED_MODULE_1__["default"], {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
@@ -54,9 +57,10 @@ function ServicePage() {
className: "service-hero dashed-card mt-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, {
className: "service-icon",
children: "\uD83D\uDCAC"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Image, {
className: "service-hero-icon",
src: "/icon/\u7535\u8BDD.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, {
className: "service-title",
children: "\u667A\u7ED8\u5FAE\u523B\u5BA2\u670D\u4E2D\u5FC3"
@@ -65,14 +69,14 @@ function ServicePage() {
children: "\u5DE5\u4F5C\u65E5 09:00 - 18:00 \u5728\u7EBF\u4E3A\u60A8\u670D\u52A1"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "btn-gradient service-btn",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '跳转客服会话',
icon: 'none'
});
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, {
children: "\uD83D\uDE80 \u53D1\u8D77\u54A8\u8BE2"
children: "\u53D1\u8D77\u54A8\u8BE2"
})
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
@@ -86,9 +90,10 @@ function ServicePage() {
className: "contact-item dashed-card",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, {
className: "contact-icon",
children: "\uD83D\uDCDE"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Image, {
className: "contact-icon-img",
src: "/icon/\u7535\u8BDD.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "contact-info",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, {
@@ -101,16 +106,17 @@ function ServicePage() {
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "contact-item dashed-card",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().setClipboardData({
data: 'smart_engraving'
});
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, {
className: "contact-icon",
children: "\uD83D\uDCAC"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Image, {
className: "contact-icon-img",
src: "/icon/\u8BCD\u4E91\u751F\u6210.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "contact-info",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, {
@@ -125,9 +131,10 @@ function ServicePage() {
className: "contact-item dashed-card",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, {
className: "contact-icon",
children: "\uD83D\uDCE7"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Image, {
className: "contact-icon-img",
src: "/icon/\u4F7F\u7528\u5E2E\u52A9.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "contact-info",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, {
@@ -163,9 +170,16 @@ function ServicePage() {
className: "enterprise-service dashed-card mt-20 mb-20",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "star-badge"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.View, {
className: "flex-center",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Image, {
className: "enterprise-icon",
src: "/icon/\u4F01\u4E1A\u6279\u91CF\u5B9A\u5236.png",
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, {
className: "enterprise-title",
children: "\uD83C\uDFE2 \u4F01\u4E1A\u4E13\u5C5E\u5BA2\u6237\u7ECF\u7406"
children: "\u4F01\u4E1A\u4E13\u5C5E\u5BA2\u6237\u7ECF\u7406"
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, {
className: "enterprise-desc",
children: "\u6279\u91CF\u8BA2\u5355\uFF0850\u4EF6\u4EE5\u4E0A\uFF09\u4EAB\u4E13\u5C5E\u62A5\u4EF7\u3001\u4F18\u5148\u6392\u4EA7\u3001\u4E13\u4EBA\u5BF9\u63A5"
+1 -1
View File
File diff suppressed because one or more lines are too long
+18 -2
View File
@@ -27,8 +27,9 @@
padding: 50rpx 40rpx;
}
.service-icon {
font-size: 80rpx;
.service-hero-icon {
width: 56rpx;
height: 56rpx;
margin-bottom: 20rpx;
}
@@ -79,6 +80,15 @@
margin-right: 24rpx;
}
.contact-icon-img {
width: 32rpx;
height: 32rpx;
margin-right: 24rpx;
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
}
.contact-info {
-webkit-flex: 1;
-ms-flex: 1;
@@ -123,6 +133,12 @@
padding: 32rpx;
}
.enterprise-icon {
width: 28rpx;
height: 28rpx;
margin-right: 12rpx;
}
.enterprise-title {
font-size: 30rpx;
font-weight: 700;
+57 -46
View File
@@ -30,6 +30,38 @@
var MENU = [{
label: '个人信息',
icon: '/icon/个人.png',
action: function action(s) {
return s.setShowEdit(true);
}
}, {
label: '账号管理',
icon: '/icon/账号管理.png',
action: function action() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateTo({
url: '/pages/userDatabase/index'
});
}
}, {
label: '定制协议',
icon: '/icon/定制协议.png',
action: function action() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateTo({
url: '/pages/agreement/index'
});
}
}, {
label: '关于我们',
icon: '/icon/关于我们.png',
action: function action() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '智绘微刻 v1.0',
icon: 'none'
});
}
}];
function SettingsPage() {
var _useThemeContext = (0,_context_ThemeContext__WEBPACK_IMPORTED_MODULE_3__.useThemeContext)(),
theme = _useThemeContext.theme;
@@ -87,40 +119,11 @@ function SettingsPage() {
var onChooseAvatar = function onChooseAvatar(e) {
setEditAvatar(e.detail.avatarUrl || '');
};
var MENU = [{
label: '个人信息',
icon: '👤',
action: function action() {
return setShowEdit(true);
}
}, {
label: '账号管理',
icon: '🆔',
action: function action() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateTo({
url: '/pages/userDatabase/index'
});
}
}, {
label: '定制协议',
icon: '📋',
action: function action() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateTo({
url: '/pages/agreement/index'
});
}
}, {
label: '关于我们',
icon: '️',
action: function action() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({
title: '智绘微刻 v1.0',
icon: 'none'
});
}
}];
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "theme-".concat(theme),
style: {
minHeight: '100vh'
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "settings-page",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_components_ThemeToggle__WEBPACK_IMPORTED_MODULE_2__["default"], {}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
@@ -134,7 +137,7 @@ function SettingsPage() {
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "back-btn",
onClick: function onClick() {
onTap: function onTap() {
return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateBack();
},
children: "\u2190"
@@ -151,7 +154,7 @@ function SettingsPage() {
className: "settings-user dashed-card mt-20",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "flex-between",
onClick: function onClick() {
onTap: function onTap() {
return setShowEdit(true);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
@@ -162,8 +165,10 @@ function SettingsPage() {
mode: "aspectFill"
}) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "settings-avatar-placeholder",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: "\uD83D\uDC64"
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Image, {
className: "settings-avatar-icon",
src: "/icon/\u4E2A\u4EBA.png",
mode: "aspectFit"
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
style: {
@@ -187,10 +192,15 @@ function SettingsPage() {
children: MENU.map(function (item, idx) {
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "settings-item ".concat(idx < MENU.length - 1 ? 'bordered' : ''),
onClick: item.action,
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "settings-item-icon",
children: item.icon
onTap: function onTap() {
return item.action({
setShowEdit: setShowEdit
});
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Image, {
className: "settings-item-icon-img",
src: item.icon,
mode: "aspectFit"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "settings-item-label",
children: item.label
@@ -204,7 +214,7 @@ function SettingsPage() {
className: "mt-20",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-outline logout-btn",
onClick: handleLogout,
onTap: handleLogout,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: "\u9000\u51FA\u767B\u5F55"
})
@@ -230,9 +240,10 @@ function SettingsPage() {
className: "avatar-img",
src: editAvatar,
mode: "aspectFill"
}) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
className: "avatar-placeholder",
children: "\u70B9\u51FB\u9009\u62E9\u5934\u50CF"
}) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Image, {
className: "avatar-placeholder-img",
src: "/icon/\u4E2A\u4EBA.png",
mode: "aspectFit"
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Input, {
className: "nickname-input",
@@ -245,7 +256,7 @@ function SettingsPage() {
className: "form-actions",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-outline",
onClick: function onClick() {
onTap: function onTap() {
return setShowEdit(false);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
@@ -253,7 +264,7 @@ function SettingsPage() {
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.View, {
className: "btn-gradient",
onClick: handleSaveInfo,
onTap: handleSaveInfo,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_8__.Text, {
children: "\u4FDD\u5B58"
})
+1 -1
View File
File diff suppressed because one or more lines are too long
+9 -3
View File
@@ -32,7 +32,9 @@
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
font-size: 48rpx;
padding: 30rpx;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.settings-name {
@@ -71,9 +73,13 @@
border-bottom: 1rpx dashed rgba(0, 0, 0, 0.06);
}
.settings-item-icon {
font-size: 32rpx;
.settings-item-icon-img {
width: 32rpx;
height: 32rpx;
margin-right: 16rpx;
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
}
.settings-item-label {
+6 -6
View File
@@ -152,7 +152,7 @@ function UserDatabasePage() {
children: "\u5BC6\u7801\u9519\u8BEF\uFF0C\u8BF7\u91CD\u8BD5"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "btn-gradient udb-btn",
onClick: handleUnlock,
onTap: handleUnlock,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: "\u8FDB\u5165\u6570\u636E\u5E93"
})
@@ -177,7 +177,7 @@ function UserDatabasePage() {
className: "udb-toolbar",
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "btn-gradient udb-add-btn",
onClick: function onClick() {
onTap: function onTap() {
return setShowAdd(true);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
@@ -217,7 +217,7 @@ function UserDatabasePage() {
className: "udb-col col-action",
children: [u.openid !== activeOpenid && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "udb-link",
onClick: function onClick() {
onTap: function onTap() {
return handleSwitch(u.openid);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
@@ -228,7 +228,7 @@ function UserDatabasePage() {
children: "\u5F53\u524D"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "udb-link udb-danger",
onClick: function onClick() {
onTap: function onTap() {
return handleDelete(u.openid);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
@@ -264,7 +264,7 @@ function UserDatabasePage() {
className: "udb-add-actions",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "btn-outline",
onClick: function onClick() {
onTap: function onTap() {
return setShowAdd(false);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
@@ -272,7 +272,7 @@ function UserDatabasePage() {
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, {
className: "btn-gradient",
onClick: handleCreate,
onTap: handleCreate,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, {
children: "\u521B\u5EFA"
})
File diff suppressed because one or more lines are too long
+9 -9
View File
@@ -126,7 +126,7 @@ function WordCloudPage() {
className: "page-header flex-between",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.Text, {
className: "back-btn",
onClick: goBack,
onTap: goBack,
children: "\u2190"
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.Text, {
className: "page-title",
@@ -159,7 +159,7 @@ function WordCloudPage() {
className: "step-content",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.View, {
className: "upload-area dashed-card",
onClick: chooseImage,
onTap: chooseImage,
children: baseImage ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.Image, {
className: "preview-image",
src: baseImage,
@@ -184,7 +184,7 @@ function WordCloudPage() {
className: "action-btns",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.View, {
className: "btn-gradient",
onClick: function onClick() {
onTap: function onTap() {
return setStep(2);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.Text, {
@@ -192,7 +192,7 @@ function WordCloudPage() {
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.View, {
className: "btn-outline",
onClick: function onClick() {
onTap: function onTap() {
return setBaseImage('');
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.Text, {
@@ -234,13 +234,13 @@ function WordCloudPage() {
className: "action-btns",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.View, {
className: "btn-gradient",
onClick: handleGenerate,
onTap: handleGenerate,
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.Text, {
children: "\u5F00\u59CB\u751F\u6210\u8BCD\u4E91"
})
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.View, {
className: "btn-outline",
onClick: function onClick() {
onTap: function onTap() {
return setStep(1);
},
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.Text, {
@@ -291,7 +291,7 @@ function WordCloudPage() {
className: "result-actions",
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.View, {
className: "action-btn",
onClick: handleExportImage,
onTap: handleExportImage,
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.Text, {
className: "action-icon",
children: "\uD83D\uDCBE"
@@ -301,7 +301,7 @@ function WordCloudPage() {
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.View, {
className: "action-btn",
onClick: handleGenerate,
onTap: handleGenerate,
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.Text, {
className: "action-icon",
children: "\uD83D\uDD04"
@@ -311,7 +311,7 @@ function WordCloudPage() {
})]
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.View, {
className: "action-btn",
onClick: function onClick() {
onTap: function onTap() {
return setStep(2);
},
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_6__.Text, {
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -2,7 +2,7 @@
"miniprogramRoot": "./",
"projectname": "smart-engraving-miniapp",
"description": "智绘微刻 - 词云微雕定制小程序",
"appid": "wxb6a8e61694e2b808",
"appid": "wxad998564cf43a7d9",
"setting": {
"urlCheck": true,
"es6": false,
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

+1 -1
View File
@@ -2,7 +2,7 @@
"miniprogramRoot": "dist/",
"projectname": "smart-engraving-miniapp",
"description": "智绘微刻 - 词云微雕定制小程序",
"appid": "wxb6a8e61694e2b808",
"appid": "wxad998564cf43a7d9",
"setting": {
"urlCheck": true,
"es6": false,
+289 -54
View File
@@ -1,7 +1,7 @@
# 智绘微刻小程序 — 交付总结 v4
# 智绘微刻小程序 — 交付总结 v10
> 本文档供**完全无上下文的新会话**阅读,记录各轮重构的完整交付成果。
> **日期**2026-07-27(第次修改,22:20 批次
> **日期**2026-08-01(第次修改,Batch 10
> **项目目录**`F:\weixin_wordc\`
> **技术栈**Taro 3.6.31 + React 18 + TypeScript + SCSS
@@ -18,56 +18,146 @@
### Batch 3(已完成)
完善个人主页功能(收货地址、设置页、协议页)、ThemeToggle点击修复、商品图片显示修复、Profile状态跳转修复、LoginGuard登录守卫、用户数据 openid 隔离。
### Batch 4(已完成)
主题黑白切换彻底修复(删除eventCenter多余监听)、Profile菜单登录后无反应修复、本地用户数据库(密码保护zhihui2024)。
### Batch 5(已完成)
Profile菜单登录后无反应最终修复(增加`onShow`同步)、全部emoji替换为icon图片、首页品类卡片icon化、成品展示轮播图替换为实物照片、设计确认页/订单详情页增加收货地址栏、LoginGuard空状态居中。
### Batch 6(已完成)
设计清单/订单页未登录提示居中、icon尺寸统一缩小、底部tabBar图标图片化、删除首页标题栏旁多余icon、清单/订单页列表icon图片化。
### Batch 7(已完成)
Service企业专属icon缩至28px、settings未登录头像icon缩至40px、首页轮播图文字与图片分离并适配昼夜主题。
---
## 二、本轮(Batch 4)修改任务 — 全部完成 ✅
## 二、本轮(Batch 6)修改任务 — 全部完成 ✅
| 序号 | 任务 | 状态 |
|------|------|------|
| 1 | **主题黑白切换彻底修复**移除 `eventCenter` 多余监听 + trigger,纯 `Context` 驱动 → 所有页面自动响应 | ✅ 完成 |
| 2 | **Profile 登录后菜单点击无反应修复**:增加 `fail` 回调并 Toast 提示,便于定位;同时主题崩溃是交互失效的根因之一 | ✅ 完成 |
| 3 | **本地用户数据库(密码保护)**:新建 `userDatabase` 管理页,支持查看/切换/新建/删除账号,验证密码 `zhihui2024` | ✅ 完成 |
| 1 | **设计清单/订单页未登录提示居中修复** `ThemeToggle` + `page-header` 移入 `LoginGuard` 内部,未登录时只显示居中提示 | ✅ 完成 |
| 2 | **icon 尺寸统一缩小**:所有 icon 图片缩至与临近文字同高(约 28px–56px 区间),Profile 菜单 36px、tabBar 28px、品类 56px | ✅ 完成 |
| 3 | **底部 tabBar 图标图片化**4个导航 emoji → `/icon/xxx.png`,激活态放大 + 不透明 | ✅ 完成 |
| 4 | **删除首页标题栏旁的 首页.png**:标题栏只保留纯文字"智绘微刻" | ✅ 完成 |
| 5 | **设计清单/订单列表 icon 图片化**`design-icon` / `order-icon` emoji 文字 → `<Image>`,空状态也替换 | ✅ 完成 |
---
## 三、文件变更清单
### 本轮新建文件(Batch 4
| 文件 | 作用 |
|---|---|
| `src/pages/userDatabase/index.tsx` + `.scss` + `index.config.ts` | 本地用户数据库管理页(密码验证后解锁,显示所有注册用户、设计/订单统计、切换/删除/新建) |
| `compress-images.js` | 图片压缩脚本(sharp 库),支持批量 resize + JPG 压缩,供重复用于图片资源优化 |
### 本轮修改的现有文件
| 文件 | 核心改动 |
|---|---|
| `src/context/ThemeContext.tsx` | **删除**多余的 `eventCenter.on('theme:change')` 监听。该监听曾接收 `trigger` 传来的 `undefined` 参数并 `set(undefined)`,导致主题 state 崩溃、按钮卡死、CSS 变量全部丢失 |
| `src/components/ThemeToggle/index.tsx` | **删除** `Taro.eventCenter.trigger('theme:change')``toggleTheme()` 直接修改全局 Context state,所有页面自动响应,无需事件广播 |
| `src/pages/profile/index.tsx` | `handleMenuClick``switchTab` / `navigateTo` 均增加 `fail` 回调,跳转失败时 Toast 提示 |
| `src/pages/settings/index.tsx` | 菜单增加 **“账号管理”** 入口,跳转到 `userDatabase` |
| `src/utils/store.ts` | 新增用户注册表(`smart_user_registry`)、多账号管理 API`listAllUsers()` / `createUser()` / `switchUser()` / `deleteUser()` / `verifyAdminPassword()` |
| `src/app.config.ts` | 注册新页面 `userDatabase` |
| `config/index.js` | 图片 `copy.to` 已修正为 `'dist/img'`Batch 3 完成) |
| `src/pages/profile/index.tsx` | **最终修复菜单点不开**:① `useEffect` 增加 `onShow` 绑定,每次回到页面同步登录状态;② `handleMenuClick` 只对 `designList/orders` 做登录拦截,其他页面(设置/地址/客服/词云)**登录与否均可进入**;③ 全部 emoji 替换为 `<Image>` 引用 `/icon/xxx.png`;④ 状态栏增加图片 icon |
| `src/pages/profile/index.scss` | 新增 `.menu-icon-img``.status-icon-img``.enterprise-icon``.avatar-icon-img``.avatar-placeholder-img` 等图片尺寸样式 |
| `src/pages/index/index.tsx` | `SHOWCASE_LIST` 轮播图改用 `img/` 实物照片;② 品类卡片 `icon` 字段改用 `/icon/xxx.png`;③ 搜索框/空状态图标改用 icon 图片 |
| `src/pages/checkout/index.tsx` | ① 新增地址状态管理;② 展示默认收货地址;③ 新增"更改收货地址"按钮;④ 底部弹窗选择已有地址;⑤ 无地址时提示并引导添加 |
| `src/pages/checkout/index.scss` | 新增 `.checkout-address-card``.addr-picker-sheet` 等地址弹窗样式 |
| `src/pages/orderDetail/index.tsx` | ① 新增地址展示卡片;② 增加"更改收货地址"文字按钮;③ 底部弹窗选择地址 |
| `src/pages/orderDetail/index.scss` | 新增 `.address-change``.addr-picker-sheet` 等底部弹窗样式 |
| `src/pages/settings/index.tsx` | 4个菜单 emoji 全部替换为 `/icon/xxx.png`;未登录头像图标替换 |
| `src/pages/settings/index.scss` | 新增 `.settings-item-icon-img` 样式 |
| `src/pages/service/index.tsx` | 联系客服页全部 emoji 替换为 icon 图片 |
| `src/components/LoginGuard/index.tsx` | 结构改为 `.login-guard` + `.login-guard-inner`,支持整体居中 |
| `src/components/LoginGuard/index.scss` | 使用 `justify-content: center; align-items: center; min-height: 80vh` 实现整体垂直水平居中 |
| `config/index.js` | `copy.patterns` 增加 `{ from: 'src/icon', to: 'dist/icon' }`,确保图标资源被打包到小程序目录 |
| `src/app.config.ts` | 页面列表保持不变(无需修改) |
### Batch 3 已完成的文件(供追溯)
`LoginGuard``address``settings``agreement``ThemeToggle` 静态 import 修复、`store.ts` DA 层、`productConfig.ts` 路径改为 `.jpg`
### Batch 6 新增/修改文件
| 文件 | 核心改动 |
|---|---|
| `src/pages/designList/index.tsx` | **登录提示居中**`ThemeToggle` + `page-header` 移入 `LoginGuard` 内部;emoji 列表 icon → `<Image src={item.productIcon}>`;空状态 emoji → `<Image src='/icon/调色盘.png'>` |
| `src/pages/designList/index.scss` | 新增 `.design-icon-img`56×56);删除 `.empty-icon` 字体样式,改为 `.empty-icon-img` |
| `src/pages/orders/index.tsx` | **登录提示居中**`ThemeToggle` + `page-header` 移入 `LoginGuard` 内部;emoji 订单 icon → `<Image src={order.productIcon}>`;空状态 emoji → `<Image src='/icon/包裹.png'>` |
| `src/pages/orders/index.scss` | 新增 `.order-icon-img`56×56);删除 `.empty-icon` 字体样式,改为 `.empty-icon-img` |
| `src/custom-tab-bar/index.tsx` | tabBar emoji 字符串 → `<Image>` 引用 `/icon/xxx.png`(首页/调色盘/包裹/个人) |
| `src/custom-tab-bar/index.scss` | `.tab-icon`(字体40px)→ `.tab-icon-img`(图片28px,未激活opacity:0.6,激活scale+opacity:1 |
| `src/pages/index/index.tsx` | 删除标题栏旁 `<Image className='header-icon' src='/icon/首页.png' />` |
| `src/pages/index/index.scss` | `.search-icon-img` → 28×28px`.category-icon-img` → 56×56px |
| `src/pages/profile/index.scss` | `.menu-icon-img` 48→36px`.status-icon-img` 40→28px`.enterprise-icon` 40→28px`.avatar-icon-img` 56→36px`.avatar-placeholder-img` 80→56px |
| `src/pages/service/index.scss` | `.service-hero-icon`(图片)→ 56×56px;新增 `.contact-icon-img` 32×32px |
### Batch 7 新增/修改文件
| 文件 | 核心改动 |
|---|---|
| `src/pages/service/index.scss` | `.enterprise-icon` 缺失定义补全 → 28×28px |
| `src/pages/settings/index.scss` | `.settings-avatar-placeholder` 改为 flex 居中容器;`.settings-avatar-icon` 缩至 40×40px |
| `src/pages/settings/index.tsx` | 未登录头像 `<Image className='settings-avatar-placeholder'>``<View className='settings-avatar-placeholder'>` + 内部 `<Image className='settings-avatar-icon'>` |
| `src/pages/index/index.tsx` | 轮播图 `showcase-swiper-card` 结构改为:`Image` 在上,`showcase-text-area` 白底区域在下,文字与图片分离 |
| `src/pages/index/index.scss` | 轮播卡片重写:`height: 520rpx``.showcase-image-wrapper` 图片区 `320rpx`;新增 `.showcase-text-area` 文字区 `background: var(--bg-card)`;文字颜色全部改为 CSS 变量 (`--text-primary` / `--text-secondary`);搜索框/结果提示/品类卡片/空状态也改为 CSS 变量适配主题 |
---
## 四、编译验证结果
## 四、完整 Icon 映射表(供后续维护)
| 使用位置 | 图片路径 |
|---|---|
| Profile-我的设计 | `/icon/调色盘.png` |
| Profile-词云生成 | `/icon/词云生成.png` |
| Profile-收货地址 | `/icon/地址.png` |
| Profile-联系客服 | `/icon/电话.png` |
| Profile-使用帮助 | `/icon/使用帮助.png` |
| Profile-设置 | `/icon/设置.png` |
| Profile-待设计 | `/icon/三角尺.png` |
| Profile-待付款 | `/icon/四角星.png` |
| Profile-待发货 | `/icon/包裹.png` |
| Profile-待收货 | `/icon/杯子.png` |
| Profile-已完成 | `/icon/书本.png` |
| Profile-未登录头像 | `/icon/个人.png` |
| Profile-企业定制 | `/icon/企业批量定制.png` |
| Settings-个人信息 | `/icon/个人.png` |
| Settings-账号管理 | `/icon/账号管理.png` |
| Settings-定制协议 | `/icon/定制协议.png` |
| Settings-关于我们 | `/icon/关于我们.png` |
| 首页-笔记本(小) | `/icon/书本.png` |
| 首页-笔记本(大) | `/icon/书本_大.png` |
| 首页-杯垫 | `/icon/杯子.png` |
| 首页-笔盒 | `/icon/笔盒.png` |
| 首页-书灯 | `/icon/书灯.png` |
| 首页-搜索框 | `/icon/搜索.png` |
| Service-客服电话 | `/icon/电话.png` |
| Service-客服微信 | `/icon/词云生成.png` |
| Service-商务邮箱 | `/icon/使用帮助.png` |
| Service-企业专属 | `/icon/企业批量定制.png` |
| tabBar-首页 | `/icon/首页.png` |
| tabBar-设计清单 | `/icon/调色盘.png` |
| tabBar-订单 | `/icon/包裹.png` |
| tabBar-我的 | `/icon/个人.png` |
| designList-空状态 | `/icon/调色盘.png` |
| orders-空状态 | `/icon/包裹.png` |
| address-空状态 | `/icon/地址.png` |
---
## 五、编译验证结果
```bash
npx taro build --type weapp
```
-**webpack 5.91.0 compiled successfully in ~27s**
-**webpack 5.91.0 compiled successfully in ~21s**
-**0 报错,0 ERROR**
- ✅ 编译后 `dist/` 总大小:**1.02 MB**< 2MB,满足微信预览/上传限制)
- 图片资源 `dist/img/`432 KB9 张实物照全部已压缩
- ✅ 编译后 `dist/` 总大小:**1.2 MB**< 2MB,满足微信预览/上传限制)
- 图片资源分布:
- `dist/img/`:432 KB(8 张产品实物压缩图)
- `dist/icon/`136 KB19 个 icon 图标文件)
### Batch 6 编译验证结果
```bash
npx taro build --type weapp
```
-**webpack 5.91.0 compiled successfully in 18.58s**
-**0 报错,0 ERROR**
- ✅ 编译后 `dist/` 总大小:**约 361 KB**(远小于 2MB 限制)
- 图片资源分布:
- `dist/icon/`136 KB19 个 icon 图标文件)
- `dist/img/`:432 KB(8 张产品实物压缩图)
---
## 、关键踩坑记录(含本轮新增)
## 、关键踩坑记录(含本轮新增)
| 坑 | 现象 | 解法 |
|---|---|---|
@@ -78,20 +168,23 @@ npx taro build --type weapp
| **Profile 待设计未筛选** | 点击”待设计“跳到设计清单但显示全部条目 | 增加 `designList:filter` Storage 参数,设计清单 `onShow` 时读取并切换到 `toDesign` Tab(聚合未设计+设计中) |
| **用户数据未隔离** | 换账号登录后还能看到上一个用户的设计清单 | store.ts 重构为 DA 层,Storage key 按 `openid` 前缀隔离:`design_list_${openid}` |
| **收货地址省市区** | 不知如何实现三级联动 | 直接用微信原生组件 `<Picker mode='region'>`,无需自建数据 |
| **主题切换彻底崩溃(Batch 4 新增** | 按下 ThemeToggle 后按钮卡死,无法回到白天主题,背景部分变白但不是预期样式 | `ThemeContext``eventCenter.on('theme:change')` 监听 `undefined` 参数导致 state 被覆盖为 `undefined`。删除 eventCenter 相关代码,纯 Context state 驱动即可 |
| **Profile 菜单登录后无反应(Batch 4 新增** | 未登录时 6 个菜单能点开,登录后完全点不开 | 根因是主题崩溃连带 React 渲染/事件层异常;同时在跳转 API 上补充 `fail` Toast,增强可观测性 |
| **主题切换彻底崩溃(Batch 4** | 按下 ThemeToggle 后按钮卡死,无法回到白天主题 | `ThemeContext``eventCenter.on('theme:change')` 监听 `undefined` 参数导致 state 崩溃。删除 eventCenter 代码,纯 Context state 驱动 |
| **Profile 菜单登录后无反应(Batch 4)** | 未登录时菜单能点开,登录后完全点不开 | `handleMenuClick` 在未登录时对**所有**页面做了拦截,实际只有 `designList/orders` 需要登录,其余应开放 |
| **Profile 菜单登录后仍无反应(Batch 5)** | 登录后依然点不开常用功能 | 根因是 `useEffect` 没有绑定 `onShow`,登录后切回 Profile 时 `isLoggedIn` state 仍是 false。增加 `page.onShow` 同步登录状态解决 |
| **Sass 编译报错(Batch 5** | 编辑 SCSS 时误删选择器名,导致 `padding: 32px;` 裸奔 | 重新整理 SCSS,确保每个属性都在正确选择器下 |
| **icon 资源未打包** | 图标图片在开发者工具中报 404 | `config/index.js` 中增加 `{ from: 'src/icon', to: 'dist/icon' }` copy 规则 |
---
## 、核心业务流(完整链路)
## 、核心业务流(完整链路)
```
首页浏览品类 → 商品详情页(轮播图+价格+介绍)
→ 加入设计清单(弹窗选数量)→ 设计清单页(需登录,支持自动筛选)
→ 立即下单 → DIY 工作台(直接进入,无需选品)
→ 添加贴纸(相册/相机)→ 拖动调整位置 → 碰撞检测
→ 预览效果 → 确认完成 → 设计效果确认页
→ 弹窗确认下单 → 订单生成(需登录)→ 订单列表/订单详情
→ 预览效果 → 确认完成 → 设计效果确认页(含收货地址)
→ 弹窗确认下单 → 订单生成(需登录)→ 订单列表/订单详情(可改地址)
→ 物流时间轴追踪 → 确认收货 → 完成
个人主页
@@ -103,9 +196,9 @@ npx taro build --type weapp
---
## 、架构说明:前端 DA 层设计
## 、架构说明:前端 DA 层设计
为了方便后续接入后端,所有数据操作通过 `src/utils/store.ts` 抽象为 **Data Access 层**
所有数据操作通过 `src/utils/store.ts` 抽象为 **Data Access 层**
```
pages/
@@ -114,38 +207,180 @@ pages/
└─ key = `${scope}_${openid}` 实现多用户隔离
```
**Batch 4 新增能力**
- `listAllUsers()` — 遍历注册表,读取每个用户的备份信息和数据条数统计
- `createUser(nickName)` — 新建 mock openid 用户并自动登录
- `switchUser(openid)` — 切换当前活跃用户(设计清单/订单/地址自动跟随切换)
- `deleteUser(openid)` — 彻底删除某用户的所有本地数据
**后端替换方案**:上线时只需重写 `store.ts` 中的函数为 `wx.request` HTTP 调用,页面层零改动。
---
## 、图片资源与 CDN 说明
## 、图片资源与 CDN 说明
> ⚠️ **当前状态**为了通过微信 2MB 包体积限制,所有实物照片已使用 `compress-images.js` 脚本进行两轮压缩(最长边 800px、质量 60%)。
> ⚠️ **当前状态**
> - 实物照片已两轮压缩(最长边 800px、质量 60%),`dist/img/` 432 KB。
> - icon 图标 19 个,`dist/icon/` 136 KB。
> - 编译后总包体积 **1.2 MB**,满足微信 2MB 限制。
>
> **后续计划**:上线前强烈建议将实物照片迁移到 **CDN/对象存储**(如腾讯云 COS、阿里云 OSS),小程序本地只保留占位图/图标。届时
> 1. 修改 `src/utils/productConfig.ts` 中的 `images` 字段为网络 URL
> 2. 移除或缩小 `config/index.js` 中 `copy.patterns` 规则;
> 3. 小程序包体积可降至 < 500KB,图片加载速度、清晰度均大幅提升
> **后续计划(上线前)**
> 1. 将实物照片上传到 **腾讯云 COS** 或 **阿里云 OSS**。
> 2. 修改 `productConfig.ts` 中 `images` 字段为网络 URL。
> 3. 移除 `config/index.js` 中 `src/img` 的 copy 规则
> 4. 小程序包体积可永久保持在 < 500KB。
>
> `compress-images.js` 脚本可继续用于临时压缩新上传的图片素材
> **新增**:icon 图标均为小体积 PNG(平均 < 8KB),长期本地存放即可,无需 CDN
---
## 、下一步建议(可选)
## 、下一步建议(可选)
1. **后端接入**:当前 `openid` 为 mock 值,接入真实后端后替换 `wx.login``code` 换取真实 `openid`,再将 `store.ts` 切换为 HTTP 请求
2. **CDN 外链迁移**:将 `src/img/` 中的实物照片上传到腾讯云 COS/阿里云 OSS`productConfig.ts` 改为网络 URL。
3. **真机测试**:在微信开发者工具点击预览,确认图片加载和主题切换在手机端正常
4. **订单物流接口**:当前物流为静态 mock,接入 backend 后可实现真实物流轨迹查询。
1. **后端接入**:当前 `openid` 为 mock 值,接入真实后端后替换 `wx.login``code` 换取真实 `openid`
2. **CDN 外链迁移**:将 `src/img/` 中的实物照片上传对象存储`productConfig.ts` 改为网络 URL。
3. **真机预览**:在微信开发者工具点击"预览",确认所有 icon 图标正常显示、无 404
4. **订单物流接口**:当前为静态 mock,接入 backend 后可实现真实物流查询。
5. **合并优化**:检查是否还有遗漏 emoji 未替换为 icon 图片。
---
*文档更新时间:2026-07-27*
*Batch 4(22:20 批次)3 项优化目标全部完成,编译通过,包体积 1.02 MB。*
*累计完成:Batch 1 + Batch 212 项)+ Batch 36 项)+ Batch 43 项)= 21 项核心目标全部 ✅*
### Batch 7 新增/修改文件
| 文件 | 核心改动 |
|---|---|
| `src/pages/service/index.scss` | `.enterprise-icon` 缺失定义补全 → 28×28px |
| `src/pages/settings/index.scss` | `.settings-avatar-placeholder` 改为 flex 居中容器;`.settings-avatar-icon` 缩至 40×40px |
| `src/pages/settings/index.tsx` | 未登录头像 `<Image className='settings-avatar-placeholder'>``<View className='settings-avatar-placeholder'>` + 内部 `<Image className='settings-avatar-icon'>` |
| `src/pages/index/index.tsx` | 轮播图 `showcase-swiper-card` 结构改为:`Image` 在上,`showcase-text-area` 白底区域在下,文字与图片分离 |
| `src/pages/index/index.scss` | 轮播卡片重写:`height: 520rpx``.showcase-image-wrapper` 图片区 `320rpx`;新增 `.showcase-text-area` 文字区 `background: var(--bg-card)`;文字颜色全部改为 CSS 变量 (`--text-primary` / `--text-secondary`);搜索框/结果提示/品类卡片/空状态也改为 CSS 变量适配主题 |
*Batch 7(17:10 批次)3 项优化目标全部完成,编译通过,包体积约 361 KB。*
*累计完成:Batch 1 + Batch 212 项)+ Batch 36 项)+ Batch 43 项)+ Batch 56 项)+ Batch 65 项)+ Batch 73 项)= 38 项核心目标全部 ✅*
---
### Batch 82026-07-29 晚间)— Taro React 事件兼容修复 ✅
**背景**:微信基础库 3.17.0(灰度)+ Taro 3.6.31 + React 18 下,个人主页频繁出现 `TypeError: Cannot read properties of undefined (reading '_num')`,堆栈定位到 `TaroElement.removeEventListener`
| 序号 | 任务 | 状态 |
|------|------|------|
| 1 | **全量 onClick → onTap**Taro 小程序端推荐 `bindtap``onClick` 在 React reconciler diff 时有概率触发 `removeEventListener(undefined)` | ✅ 完成 |
| 2 | **Profile Fragment 消除**`STATUS.map``<></>` 包裹改为 `<View className='status-group'>`,避免 Taro diff 时 Fragment 内事件节点引用丢失 | ✅ 完成 |
| 3 | **useEffect + page.onShow 重写**:手动覆盖 `page.onShow` 在热更新时会重复叠加,改为 Taro 标准 `useDidShow(() => sync())` | ✅ 完成 |
| 4 | **清理废弃 permission**:删除 `app.config.ts` 中已废弃的 `scope.writePhotosAlbum` 配置 | ✅ 完成 |
**文件变更**
| 文件 | 核心改动 |
|---|---|
| `src/components/ThemeToggle/index.tsx` | `onClick``onTap` |
| `src/pages/profile/index.tsx` | ① `useEffect``useDidShow`;② `STATUS_MAP.map` 中 Fragment → `View.status-group`;③ 全部 `onClick``onTap` |
| `src/pages/profile/index.scss` | `.status-row.row2/.row3` 删除 `grid`;新增 `.status-group` flex 容器;`.status-divider` 增加 `flex-shrink: 0` |
| `src/app.config.ts` | 删除 `permission.scope.writePhotosAlbum` |
| 其他 12 个 .tsx 文件 | `onClick``onTap`address、checkout、designList、diy、index、orderDetail、orders、product、service、settings、userDatabase、wordcloud |
**编译结果**`webpack 5.91.0 compiled successfully in 27.13s`0 报错。
---
### Batch 92026-07-29 晚间)— emoji → icon 图片彻底收尾 ✅
**背景**:商品详情页弹窗仍显示 emoji(如 `📓``☕`);设计清单/订单列表的 icon 图片不显示,因为 `store.ts` 存储的是旧 emoji 字符串而非图片路径。
| 序号 | 任务 | 状态 |
|------|------|------|
| 1 | **productConfig.ts 增加 `iconImg`**:每个产品新增 `iconImg` 字段(如 `/icon/书本.png`),不再用 emoji 作为展示资源 | ✅ 完成 |
| 2 | ** store 层写入逻辑修复**`addDesign()` 存储 `productIcon` 时从 `product.icon`emoji)改为 `product.iconImg``designToOrder()` 兼容旧数据 | ✅ 完成 |
| 3 | **运行时映射兼容旧数据**`designList/index.tsx` / `orders/index.tsx` 渲染时检测 `productIcon` 是否以 `/icon/` 开头,否则通过 `productId``PRODUCT_ICON_MAP` | ✅ 完成 |
| 4 | **商品详情页弹窗去 emoji**Hero 无实物图时和弹窗中 `<Text>{product.icon}</Text>``<Image src={getProductIconImg(product)} />` | ✅ 完成 |
**文件变更**
| 文件 | 核心改动 |
|---|---|
| `src/utils/productConfig.ts` | 5 个产品新增 `iconImg`;新增 `PRODUCT_ICON_MAP`;新增 `getProductIconImg()` 工具函数 |
| `src/types/index.ts` | `ProductCategory` 接口增加 `iconImg?: string` |
| `src/utils/store.ts` | `addDesign()` 存储 `product.iconImg``designToOrder()` 兼容旧数据(判断 `/icon/` 前缀) |
| `src/pages/product/index.tsx` | Hero 无图时和弹窗中 emoji → `Image` + `getProductIconImg()` |
| `src/pages/product/index.scss` | 新增 `.hero-icon-img`(100×100)、`.modal-icon-img`(48×48) |
| `src/pages/designList/index.tsx` | 列表 `item.productIcon` 增加运行时映射兼容(旧数据查 `PRODUCT_ICON_MAP` |
| `src/pages/orders/index.tsx` | 同上,订单列表 icon 兼容旧数据 |
**编译结果**`webpack 5.91.0 compiled successfully in 23.03s`0 报错。
---
### Batch 8 + 9 累计新增踩坑记录
| 坑 | 现象 | 解法 |
|---|---|---|
| **Taro React onClick 事件崩溃** | 微信 3.17.0 灰度基础库下,点击 ThemeToggle 或菜单后控制台报 `_num undefined`,页面卡死 | 全量 `onClick``onTap`Taro 小程序端 `bindtap``onclick` 稳定 |
| **Fragment + map 导致事件引用丢失** | `STATUS_MAP.map(() => <><View onTap={...}/><View/></>)` 在 React diff 时 TaroElement 找不到对应事件对象 | map 内不再使用 `<>...</>`,改用 `<View className='status-group'>` 包裹所有子节点 |
| **手动 page.onShow 热更新叠加** | `useEffect``page.onShow = function(){...}` 每次热重载都会多包一层,最终导致 onShow 无限递归或事件异常 | 改用 Taro React 标准 Hook `useDidShow(() => sync())` |
| **旧数据 emoji 残留** | `store.ts` 之前存的是 `product.icon`emoji),列表用 `<Image src={item.productIcon}>` 无法显示 | ① 写入层改为存 `iconImg`;② 渲染层增加运行时映射兜底 |
---
## 最终累计完成统计
| 批次 | 日期 | 完成项数 |
|------|------|---------|
| Batch 1 | 早期 | 12 项 |
| Batch 2 | 早期 | 12 项 |
| Batch 3 | 早期 | 6 项 |
| Batch 4 | 2026-07-27 | 3 项 |
| Batch 5 | 2026-07-28 19:47 | 6 项 |
| Batch 6 | 2026-07-28 22:03 | 5 项 |
| Batch 7 | 2026-07-29 17:10 | 3 项 |
| Batch 8 | 2026-07-29 晚间 | 4 项 |
| Batch 9 | 2026-07-29 晚间 | 4 项 |
| **Batch 10** | **2026-08-01** | **3 项** |
| **总计** | — | **58 项核心目标 ✅** |
---
### Batch 102026-08-01)— 夜间模式字体 + 地址弹窗 + 空状态主题适配 ✅
**背景**:微信开发者工具夜间模式下订单详情页多处文字仍显示深色导致看不清;地址选择弹窗两侧间距不统一;收货地址空状态 emoji 未做夜间适配。
| 序号 | 任务 | 状态 |
|------|------|------|
| 1 | **订单详情页夜间模式文字颜色修复**:补充 `.status-text``.logistics-title/num``.meta-title/label/value``.timeline-status/time/desc` 等 CSS 变量配色 | ✅ 完成 |
| 2 | **地址选择弹窗宽度统一**:提取 `.modal-overlay` + `.addr-picker-sheet``app.scss` 全局统一样式;移除 checkout/orderDetail SCSS 中各自覆写的 width/radius 定义 | ✅ 完成 |
| 3 | **收货地址空状态主题适配**:📍 emoji → `<Image src='/icon/地址.png'>`;空状态文字使用 CSS 变量;同步修复 `orders/index.scss` 中硬编码颜色 `#5c3a3a` / `#b08d8d` | ✅ 完成 |
**文件变更**
| 文件 | 核心改动 |
|---|---|
| `src/app.scss` | 新增全局 `.modal-overlay`fixed 全屏遮罩)+ `.addr-picker-sheet`(底部圆角白底弹窗)统一样式 |
| `src/pages/orderDetail/index.scss` | 新增 `.status-text``.logistics-title/num``.meta-title/row/label/value``.timeline-status/time/desc` 等 CSS 变量配色;移除旧 `.addr-picker-sheet` 覆写 |
| `src/pages/checkout/index.scss` | 移除旧 `.addr-picker-sheet` 覆写,复用 `app.scss` 全局定义 |
| `src/pages/address/index.tsx` | 空状态 📍 emoji → `<Image src='/icon/地址.png' mode='aspectFit' />` |
| `src/pages/orders/index.scss` | `.empty-text` / `.empty-sub` 硬编码颜色改为 `var(--text-primary)` / `var(--text-secondary)` |
| `src/pages/address/index.scss` | 新增 `.empty-state`/`.empty-icon-img`/`.empty-text`/`.empty-sub` 空状态样式(图标缩至 48px,文字使用 CSS 变量) |
**编译结果**`webpack 5.91.0 compiled successfully in 19.47s`0 报错。
---
## 一、历史修改回顾(Batch 1~9)
### Batch 1(已完成)
全局主题切换、字体系统、tabBar重组、商品详情页、设计清单、效果确认页、后端技术栈文档。
### Batch 2(已完成)
全局Context主题同步、登录系统、贴纸DIY、订单详情、Profile 5状态、自动筛选、图片路径修复。
### Batch 3(已完成)
完善个人主页功能(收货地址、设置页、协议页)、ThemeToggle点击修复、商品图片显示修复、Profile状态跳转修复、LoginGuard登录守卫、用户数据 openid 隔离。
### Batch 4(已完成)
主题黑白切换彻底修复(删除eventCenter多余监听)、Profile菜单登录后无反应修复、本地用户数据库(密码保护zhihui2024)。
### Batch 5(已完成)
Profile菜单登录后无反应最终修复(增加`onShow`同步)、全部emoji替换为icon图片、首页品类卡片icon化、成品展示轮播图替换为实物照片、设计确认页/订单详情页增加收货地址栏、LoginGuard空状态居中。
### Batch 6(已完成)
设计清单/订单页未登录提示居中、icon尺寸统一缩小、底部tabBar图标图片化、删除首页标题栏旁多余icon、清单/订单页列表icon图片化。
### Batch 7(已完成)
Service企业专属icon缩至28px、settings未登录头像icon缩至40px、首页轮播图文字与图片分离并适配昼夜主题。
### Batch 8Completed
Taro React 事件兼容修复:全量 `onClick``onTap`、Fragment 消除、`useDidShow` 替换、废弃 permission 清理。
### Batch 9Completed
emoji → icon 图片彻底收尾:productConfig 增加 `iconImg`、store 写入层修复、运行时旧数据映射兼容、商品详情页弹窗去 emoji。
---
-5
View File
@@ -28,10 +28,5 @@ export default defineAppConfig({
{ pagePath: 'pages/orders/index', text: '订单' },
{ pagePath: 'pages/profile/index', text: '我的' }
]
},
permission: {
'scope.writePhotosAlbum': {
desc: '保存词云图片到相册'
}
}
})
+28
View File
@@ -209,3 +209,31 @@ page {
.safe-bottom-placeholder {
height: 160px;
}
/* ==========================================================
底部弹窗遮罩(地址选择器等共用)
========================================================== */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 600;
display: flex;
align-items: flex-end;
justify-content: center;
}
.addr-picker-sheet {
width: 100%;
max-height: 70vh;
border-radius: 24px 24px 0 0;
padding: 24px 24px calc(24px + env(safe-area-inset-bottom));
display: flex;
flex-direction: column;
background: var(--bg-card);
border-top: var(--line-card);
box-sizing: border-box;
}
+8 -2
View File
@@ -3,8 +3,14 @@
flex-direction: column;
align-items: center;
justify-content: center;
padding: 120px 40px;
min-height: 50vh;
min-height: 80vh;
}
.login-guard-inner {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.login-guard-icon {
+3 -1
View File
@@ -10,13 +10,15 @@ export default function LoginGuard(
if (!user?.openid) {
return (
<View className='login-guard'>
<View className='login-guard-inner'>
<Text className='login-guard-icon'>🔒</Text>
<Text className='login-guard-title'></Text>
<Text className='login-guard-desc'></Text>
<View className='btn-gradient login-guard-btn' onClick={() => Taro.switchTab({ url: '/pages/profile/index' })}>
<View className='btn-gradient login-guard-btn' onTap={() => Taro.switchTab({ url: '/pages/profile/index' })}>
<Text></Text>
</View>
</View>
</View>
)
}
return props.children as any
+2 -2
View File
@@ -60,10 +60,10 @@ export default function LoginModal({ visible, onClose, onLogin }: { visible: boo
onInput={(e: any) => setNickName(e.detail.value)}
/>
<View className='login-actions'>
<View className='btn-outline' onClick={onClose}>
<View className='btn-outline' onTap={onClose}>
<Text></Text>
</View>
<View className='btn-gradient' onClick={handleLogin}>
<View className='btn-gradient' onTap={handleLogin}>
<Text></Text>
</View>
</View>
+1 -1
View File
@@ -14,7 +14,7 @@ export default function ThemeToggle() {
}, [toggleTheme])
return (
<View className='theme-toggle' onClick={handleToggle}>
<View className='theme-toggle' onTap={handleToggle}>
<Text className='theme-icon'>{theme === 'light' ? '🌙' : '☀️'}</Text>
</View>
)
+6 -3
View File
@@ -23,14 +23,17 @@
position: relative;
}
.tab-icon {
font-size: 40px;
.tab-icon-img {
width: 28px;
height: 28px;
margin-bottom: 4px;
transition: transform 0.2s;
opacity: 0.6;
}
.tab-item.active .tab-icon {
.tab-item.active .tab-icon-img {
transform: scale(1.15);
opacity: 1;
}
.tab-label {
+7 -7
View File
@@ -1,12 +1,12 @@
import { View, Text } from '@tarojs/components'
import { View, Text, Image } from '@tarojs/components'
import Taro from '@tarojs/taro'
import './index.scss'
const TABS = [
{ pagePath: '/pages/index/index', text: '首页', icon: '🏠' },
{ pagePath: '/pages/designList/index', text: '设计清单', icon: '📐' },
{ pagePath: '/pages/orders/index', text: '订单', icon: '📦' },
{ pagePath: '/pages/profile/index', text: '我的', icon: '👤' }
{ pagePath: '/pages/index/index', text: '首页', icon: '/icon/首页.png' },
{ pagePath: '/pages/designList/index', text: '设计清单', icon: '/icon/调色盘.png' },
{ pagePath: '/pages/orders/index', text: '订单', icon: '/icon/包裹.png' },
{ pagePath: '/pages/profile/index', text: '我的', icon: '/icon/个人.png' }
]
export default function CustomTabBar() {
@@ -24,9 +24,9 @@ export default function CustomTabBar() {
<View
key={tab.pagePath}
className={`tab-item ${isActive ? 'active' : ''}`}
onClick={() => switchTab(tab.pagePath)}
onTap={() => switchTab(tab.pagePath)}
>
<Text className='tab-icon'>{tab.icon}</Text>
<Image className={`tab-icon-img ${isActive ? 'active' : ''}`} src={tab.icon} mode='aspectFit' />
<Text className='tab-label'>{tab.text}</Text>
</View>
)

Some files were not shown because too many files have changed in this diff Show More