From e423ab2d733250b852abd2e5ff9a7d5cb0bfba54 Mon Sep 17 00:00:00 2001 From: lhmin0604 Date: Sun, 2 Aug 2026 00:21:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E6=B5=8F=E8=A7=88=E9=A1=B5?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=89=8D=E6=9C=80=E5=90=8E=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 181 +++++-- answer.md | 40 +- config/index.js | 3 +- dist/app-origin.wxss | 39 ++ dist/app.js | 2 +- dist/app.js.map | 2 +- dist/app.json | 2 +- dist/common.js | 108 ++-- dist/common.js.map | 2 +- dist/custom-tab-bar/index.js | 17 +- dist/custom-tab-bar/index.js.map | 2 +- dist/custom-tab-bar/index.wxss | 9 +- dist/icon/三角尺.png | Bin 0 -> 3662 bytes dist/icon/个人.png | Bin 0 -> 11791 bytes dist/icon/书本.png | Bin 0 -> 4420 bytes dist/icon/书本_大.png | Bin 0 -> 2813 bytes dist/icon/书灯.png | Bin 0 -> 9692 bytes dist/icon/企业批量定制.png | Bin 0 -> 4833 bytes dist/icon/使用帮助.png | Bin 0 -> 7826 bytes dist/icon/关于我们.png | Bin 0 -> 5901 bytes dist/icon/包裹.png | Bin 0 -> 2978 bytes dist/icon/地址.png | Bin 0 -> 9608 bytes dist/icon/定制协议.png | Bin 0 -> 7826 bytes dist/icon/杯子.png | Bin 0 -> 14623 bytes dist/icon/电话.png | Bin 0 -> 8177 bytes dist/icon/笔盒.png | Bin 0 -> 5238 bytes dist/icon/设置.png | Bin 0 -> 11593 bytes dist/icon/词云生成.png | Bin 0 -> 6858 bytes dist/icon/调色盘.png | Bin 0 -> 10546 bytes dist/icon/账号管理.png | Bin 0 -> 6185 bytes dist/icon/首页.png | Bin 0 -> 4905 bytes dist/pages/address/index.js | 23 +- dist/pages/address/index.js.map | 2 +- dist/pages/address/index.wxss | 26 +- dist/pages/checkout/index.js | 196 ++++++- dist/pages/checkout/index.js.map | 2 +- dist/pages/checkout/index.wxss | 169 +++++++ dist/pages/designList/index.js | 108 ++-- dist/pages/designList/index.js.map | 2 +- dist/pages/designList/index.wxss | 13 +- dist/pages/diy/index.js | 22 +- dist/pages/diy/index.js.map | 2 +- dist/pages/index/index.js | 90 ++-- dist/pages/index/index.js.map | 2 +- dist/pages/index/index.wxss | 129 +++-- dist/pages/orderDetail/index.js | 533 +++++++++++--------- dist/pages/orderDetail/index.js.map | 2 +- dist/pages/orderDetail/index.wxss | 313 +++++++++++- dist/pages/orders/index.js | 32 +- dist/pages/orders/index.js.map | 2 +- dist/pages/orders/index.wxss | 14 +- dist/pages/product/index.js | 29 +- dist/pages/product/index.js.map | 2 +- dist/pages/product/index.wxss | 11 + dist/pages/profile/index.js | 256 +++++----- dist/pages/profile/index.js.map | 2 +- dist/pages/profile/index.wxss | 60 ++- dist/pages/service/index.js | 50 +- dist/pages/service/index.js.map | 2 +- dist/pages/service/index.wxss | 20 +- dist/pages/settings/index.js | 103 ++-- dist/pages/settings/index.js.map | 2 +- dist/pages/settings/index.wxss | 12 +- dist/pages/userDatabase/index.js | 12 +- dist/pages/userDatabase/index.js.map | 2 +- dist/pages/wordcloud/index.js | 18 +- dist/pages/wordcloud/index.js.map | 2 +- dist/project.config.json | 2 +- icon/三角尺.png | Bin 0 -> 3662 bytes icon/个人.png | Bin 0 -> 11791 bytes icon/书本.png | Bin 0 -> 4420 bytes icon/书本_大.png | Bin 0 -> 2813 bytes icon/书灯.png | Bin 0 -> 9692 bytes icon/付款.png | Bin 0 -> 9430 bytes icon/企业批量定制.png | Bin 0 -> 4833 bytes icon/使用帮助.png | Bin 0 -> 7826 bytes icon/关于我们.png | Bin 0 -> 5901 bytes icon/包裹.png | Bin 0 -> 2978 bytes icon/商品.png | Bin 0 -> 5331 bytes icon/地址.png | Bin 0 -> 9608 bytes icon/定制协议.png | Bin 0 -> 7826 bytes icon/智绘微雕test体验版(8月5日前有效).png | Bin 0 -> 26529 bytes icon/杯子.png | Bin 0 -> 14623 bytes icon/电话.png | Bin 0 -> 7998 bytes icon/笔盒.png | Bin 0 -> 5238 bytes icon/设置.png | Bin 0 -> 11593 bytes icon/词云生成.png | Bin 0 -> 6858 bytes icon/调色盘.png | Bin 0 -> 10546 bytes icon/账号管理.png | Bin 0 -> 6185 bytes icon/首页.png | Bin 0 -> 4905 bytes project.config.json | 2 +- review1.md | 343 +++++++++++-- src/app.config.ts | 5 - src/app.scss | 28 + src/components/LoginGuard/index.scss | 10 +- src/components/LoginGuard/index.tsx | 12 +- src/components/LoginModal/index.tsx | 4 +- src/components/ThemeToggle/index.tsx | 2 +- src/custom-tab-bar/index.scss | 9 +- src/custom-tab-bar/index.tsx | 14 +- src/icon/三角尺.png | Bin 0 -> 3662 bytes src/icon/个人.png | Bin 0 -> 11791 bytes src/icon/书本.png | Bin 0 -> 4420 bytes src/icon/书本_大.png | Bin 0 -> 2813 bytes src/icon/书灯.png | Bin 0 -> 9692 bytes src/icon/企业批量定制.png | Bin 0 -> 4833 bytes src/icon/使用帮助.png | Bin 0 -> 7826 bytes src/icon/关于我们.png | Bin 0 -> 5901 bytes src/icon/包裹.png | Bin 0 -> 2978 bytes src/icon/地址.png | Bin 0 -> 9608 bytes src/icon/定制协议.png | Bin 0 -> 7826 bytes src/icon/杯子.png | Bin 0 -> 14623 bytes src/icon/电话.png | Bin 0 -> 8177 bytes src/icon/笔盒.png | Bin 0 -> 5238 bytes src/icon/设置.png | Bin 0 -> 11593 bytes src/icon/词云生成.png | Bin 0 -> 6858 bytes src/icon/调色盘.png | Bin 0 -> 10546 bytes src/icon/账号管理.png | Bin 0 -> 6185 bytes src/icon/首页.png | Bin 0 -> 4905 bytes src/pages/address/index.scss | 24 +- src/pages/address/index.tsx | 20 +- src/pages/checkout/index.scss | 148 ++++++ src/pages/checkout/index.tsx | 129 ++++- src/pages/designList/index.scss | 11 +- src/pages/designList/index.tsx | 18 +- src/pages/diy/index.tsx | 22 +- src/pages/index/index.scss | 104 ++-- src/pages/index/index.tsx | 82 +-- src/pages/orderDetail/index.scss | 274 +++++++++- src/pages/orderDetail/index.tsx | 280 ++++++---- src/pages/orders/index.scss | 13 +- src/pages/orders/index.tsx | 26 +- src/pages/product/index.scss | 11 + src/pages/product/index.tsx | 19 +- src/pages/profile/index.scss | 49 +- src/pages/profile/index.tsx | 142 +++--- src/pages/service/index.scss | 19 +- src/pages/service/index.tsx | 127 ++--- src/pages/settings/index.scss | 10 +- src/pages/settings/index.tsx | 40 +- src/pages/userDatabase/index.tsx | 12 +- src/pages/wordcloud/index.tsx | 18 +- src/types/index.ts | 1 + src/utils/productConfig.ts | 29 ++ src/utils/store.ts | 10 +- 个人主页结构.md | 50 ++ 146 files changed, 3449 insertions(+), 1342 deletions(-) create mode 100644 dist/icon/三角尺.png create mode 100644 dist/icon/个人.png create mode 100644 dist/icon/书本.png create mode 100644 dist/icon/书本_大.png create mode 100644 dist/icon/书灯.png create mode 100644 dist/icon/企业批量定制.png create mode 100644 dist/icon/使用帮助.png create mode 100644 dist/icon/关于我们.png create mode 100644 dist/icon/包裹.png create mode 100644 dist/icon/地址.png create mode 100644 dist/icon/定制协议.png create mode 100644 dist/icon/杯子.png create mode 100644 dist/icon/电话.png create mode 100644 dist/icon/笔盒.png create mode 100644 dist/icon/设置.png create mode 100644 dist/icon/词云生成.png create mode 100644 dist/icon/调色盘.png create mode 100644 dist/icon/账号管理.png create mode 100644 dist/icon/首页.png create mode 100644 icon/三角尺.png create mode 100644 icon/个人.png create mode 100644 icon/书本.png create mode 100644 icon/书本_大.png create mode 100644 icon/书灯.png create mode 100644 icon/付款.png create mode 100644 icon/企业批量定制.png create mode 100644 icon/使用帮助.png create mode 100644 icon/关于我们.png create mode 100644 icon/包裹.png create mode 100644 icon/商品.png create mode 100644 icon/地址.png create mode 100644 icon/定制协议.png create mode 100644 icon/智绘微雕test体验版(8月5日前有效).png create mode 100644 icon/杯子.png create mode 100644 icon/电话.png create mode 100644 icon/笔盒.png create mode 100644 icon/设置.png create mode 100644 icon/词云生成.png create mode 100644 icon/调色盘.png create mode 100644 icon/账号管理.png create mode 100644 icon/首页.png create mode 100644 src/icon/三角尺.png create mode 100644 src/icon/个人.png create mode 100644 src/icon/书本.png create mode 100644 src/icon/书本_大.png create mode 100644 src/icon/书灯.png create mode 100644 src/icon/企业批量定制.png create mode 100644 src/icon/使用帮助.png create mode 100644 src/icon/关于我们.png create mode 100644 src/icon/包裹.png create mode 100644 src/icon/地址.png create mode 100644 src/icon/定制协议.png create mode 100644 src/icon/杯子.png create mode 100644 src/icon/电话.png create mode 100644 src/icon/笔盒.png create mode 100644 src/icon/设置.png create mode 100644 src/icon/词云生成.png create mode 100644 src/icon/调色盘.png create mode 100644 src/icon/账号管理.png create mode 100644 src/icon/首页.png create mode 100644 个人主页结构.md diff --git a/README.md b/README.md index 8e6864d..c1b988a 100644 --- a/README.md +++ b/README.md @@ -6,32 +6,50 @@ ## 技术栈 -- **框架**: Taro 3.x + React 18 + TypeScript -- **样式**: SCSS -- **目标平台**: 微信小程序(可扩展 H5) +- **框架**: Taro 3.6.31 + React 18 + TypeScript +- **样式**: SCSS(CSS 变量驱动主题系统) +- **目标平台**: 微信小程序 +- **包管理器**: npm ## 项目结构 ``` smart-engraving-miniapp/ ├── config/ # Taro 配置文件 -├── docs/ # 项目文档 -│ └── mask-config-guide.md # 遮罩尺寸配置指南 +│ └── index.js # 构建配置(含 copy patterns:icon、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 # 全局主题 Context(light/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 PNG(28~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 → ``;空状态文字使用 CSS 变量;同步修复 `orders/index.scss` 中硬编码颜色 | + +### Batch 9(2026-07-29)— emoji → icon 彻底收尾 +- `productConfig.ts` 增加 `iconImg` 字段 +- `store.ts` 写入层修复(存 `iconImg` 而非 emoji) +- 运行时旧数据兼容映射 `PRODUCT_ICON_MAP` +- 商品详情页弹窗去 emoji + +### Batch 8(2026-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 效果预览(模拟材质纹理) - [ ] 批量下单优惠逻辑 -- [ ] 企业定制专属通道 +- [ ] 完善企业定制专属通道 diff --git a/answer.md b/answer.md index 69dd26f..1e4bc80 100644 --- a/answer.md +++ b/answer.md @@ -55,7 +55,7 @@ 重要提醒:设计清单和订单以及我的个人主页页面,在未登录前应该全为空并提醒用户登录,因为未绑定私有账号信息,你暂时帮我实现一下用户数据库,让我可以看到每个用户的操作会有不同的账号信息和界面显示才对。 --> -20260727 22:20 优化问题 + + + + + + + + +20260801 0:50 问题优化 + +1.关于订单详情中,夜间主题下订单信息和待付款的字样要切换为白色,而不是维持白天模式的黑丝,会看不见 +2.所有点击更改收货地址后弹出的选择收货地址的方框的宽度尺寸超过了手机显示的尺寸,和其他框尺寸不统一,订单设计好的确认页面和订单详情页面针对这一功能都要做修改。 +3.收货地址页面中,初始状态用户没有设置地址时的文字提示没有做主题切换的更改,昼夜两种模式下都为黑色导致夜间模式看不起字,和问题一一样要改为亮度较高的字体颜色。 \ No newline at end of file diff --git a/config/index.js b/config/index.js index 0b36a7f..77672ee 100644 --- a/config/index.js +++ b/config/index.js @@ -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: { } diff --git a/dist/app-origin.wxss b/dist/app-origin.wxss index 678f5f1..c24524e 100644 --- a/dist/app-origin.wxss +++ b/dist/app-origin.wxss @@ -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; +} diff --git a/dist/app.js b/dist/app.js index f2117db..3511bd2 100644 --- a/dist/app.js +++ b/dist/app.js @@ -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)) diff --git a/dist/app.js.map b/dist/app.js.map index dd23970..8de23b4 100644 --- a/dist/app.js.map +++ b/dist/app.js.map @@ -1 +1 @@ -{"version":3,"file":"app.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;;;;;;;;;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrBA;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;;;;;;;;;;;AC5CA;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;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;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;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;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;;;;;;;;;;;;ACrOA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;;ACNA;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;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;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;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;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;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;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;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;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;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;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;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;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;;;;;;;;;;;;ACznBA;AACA;AACA;AAGA;AACA","sources":["webpack://smart-engraving-miniapp/._src_app.tsx","webpack://smart-engraving-miniapp/./src/app.tsx?c9a4","webpack://smart-engraving-miniapp/._node_modules_react-reconciler_cjs_react-reconciler-constants.development.js","webpack://smart-engraving-miniapp/._node_modules_react-reconciler_cjs_react-reconciler.production.min.js","webpack://smart-engraving-miniapp/._node_modules_react-reconciler_constants.js","webpack://smart-engraving-miniapp/._node_modules_react-reconciler_node_modules_scheduler_cjs_scheduler.development.js","webpack://smart-engraving-miniapp/._node_modules_react-reconciler_node_modules_scheduler_index.js"],"sourcesContent":["import _classCallCheck from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport { Component } from 'react';\nimport { ThemeProvider } from './context/ThemeContext';\nimport './app.scss';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar App = /*#__PURE__*/function (_Component) {\n function App() {\n _classCallCheck(this, App);\n return _callSuper(this, App, arguments);\n }\n _inherits(App, _Component);\n return _createClass(App, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {}\n }, {\n key: \"componentDidShow\",\n value: function componentDidShow() {}\n }, {\n key: \"componentDidHide\",\n value: function componentDidHide() {}\n }, {\n key: \"render\",\n value: function render() {\n return /*#__PURE__*/_jsx(ThemeProvider, {\n children: this.props.children\n });\n }\n }]);\n}(Component);\nexport default App;","import '@tarojs/plugin-platform-weapp/dist/runtime'\n\nimport { window } from '@tarojs/runtime'\nimport { createReactApp } from '@tarojs/plugin-framework-react/dist/runtime'\nimport { initPxTransform } from '@tarojs/taro'\n\nimport component from \"!!../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=app!./app.tsx\"\n\nimport * as React from 'react'\nimport ReactDOM from 'react-dom'\n\nvar 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\":\"保存词云图片到相册\"}}};\nwindow.__taroAppConfig = config\nvar inst = App(createReactApp(component, React, ReactDOM, config))\n\ninitPxTransform({\n designWidth: 750,\n deviceRatio: {\"640\":1.17,\"750\":1,\"828\":0.905},\n baseFontSize: 20,\n unitPrecision: undefined,\n targetUnit: undefined\n})\n","/**\n * @license React\n * react-reconciler-constants.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar SyncLane =\n/* */\n1;\nvar InputContinuousLane =\n/* */\n4;\nvar DefaultLane =\n/* */\n16;\nvar IdleLane =\n/* */\n536870912;\n\nvar DiscreteEventPriority = SyncLane;\nvar ContinuousEventPriority = InputContinuousLane;\nvar DefaultEventPriority = DefaultLane;\nvar IdleEventPriority = IdleLane;\n\nvar LegacyRoot = 0;\nvar ConcurrentRoot = 1;\n\nexports.ConcurrentRoot = ConcurrentRoot;\nexports.ContinuousEventPriority = ContinuousEventPriority;\nexports.DefaultEventPriority = DefaultEventPriority;\nexports.DiscreteEventPriority = DiscreteEventPriority;\nexports.IdleEventPriority = IdleEventPriority;\nexports.LegacyRoot = LegacyRoot;\n })();\n}\n","/**\n * @license React\n * react-reconciler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nmodule.exports = function $$$reconciler($$$hostConfig) {\n var exports = {};\n'use strict';var aa=require(\"react\"),ba=require(\"scheduler\"),ca=Object.assign;function n(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;ch||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{bc=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?ac(a):\"\"}var dc=Object.prototype.hasOwnProperty,ec=[],fc=-1;function gc(a){return{current:a}}\nfunction x(a){0>fc||(a.current=ec[fc],ec[fc]=null,fc--)}function y(a,b){fc++;ec[fc]=a.current;a.current=b}var hc={},A=gc(hc),B=gc(!1),ic=hc;function jc(a,b){var c=a.type.contextTypes;if(!c)return hc;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction C(a){a=a.childContextTypes;return null!==a&&void 0!==a}function kc(){x(B);x(A)}function lc(a,b,c){if(A.current!==hc)throw Error(n(168));y(A,b);y(B,c)}function mc(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(n(108,xa(a)||\"Unknown\",e));return ca({},c,d)}\nfunction nc(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||hc;ic=A.current;y(A,a);y(B,B.current);return!0}function oc(a,b,c){var d=a.stateNode;if(!d)throw Error(n(169));c?(a=mc(a,b,ic),d.__reactInternalMemoizedMergedChildContext=a,x(B),x(A),y(A,a)):x(B);y(B,c)}var qc=Math.clz32?Math.clz32:pc,rc=Math.log,sc=Math.LN2;function pc(a){a>>>=0;return 0===a?32:31-(rc(a)/sc|0)|0}var tc=64,uc=4194304;\nfunction vc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function wc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=vc(h):(f&=g,0!==f&&(d=vc(f)))}else g=c&~e,0!==g?d=vc(g):0!==f&&(d=vc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}function Bc(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-qc(b);a[b]=c}\nfunction Cc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0>=g;e-=g;Nd=1<<32-qc(b)+e|c<u?(t=w,w=null):t=w.sibling;var q=r(e,w,h[u],k);if(null===q){null===w&&(w=t);break}a&&w&&null===q.alternate&&b(e,w);g=f(q,g,u);null===m?l=q:m.sibling=q;m=q;w=t}if(u===h.length)return c(e,w),I&&Pd(e,u),l;if(null===w){for(;uu?(q=m,m=null):q=m.sibling;var V=r(e,m,t.value,k);if(null===V){null===m&&(m=q);break}a&&m&&null===V.alternate&&b(e,m);g=f(V,g,u);null===w?l=V:w.sibling=V;w=V;m=q}if(t.done)return c(e,\nm),I&&Pd(e,u),l;if(null===m){for(;!t.done;u++,t=h.next())t=v(e,t.value,k),null!==t&&(g=f(t,g,u),null===w?l=t:w.sibling=t,w=t);I&&Pd(e,u);return l}for(m=d(e,m);!t.done;u++,t=h.next())t=z(m,e,u,t.value,k),null!==t&&(a&&null!==t.alternate&&m.delete(null===t.key?u:t.key),g=f(t,g,u),null===w?l=t:w.sibling=t,w=t);a&&m.forEach(function(a){return b(e,a)});I&&Pd(e,u);return l}function da(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ia&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==\nf){switch(f.$$typeof){case fa:a:{for(var k=f.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ia){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===ra&&he(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=fe(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ia?(d=ne(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=le(f.type,f.key,f.props,null,a.mode,h),h.ref=fe(a,d,f),h.return=\na,a=h)}return g(a);case ha:a:{for(l=f.key;null!==d;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=me(f,a.mode,h);d.return=a;a=d}return g(a);case ra:return l=f._init,da(a,d,l(f._payload),h)}if(Ea(f))return q(a,d,f,h);if(ua(f))return N(a,d,f,h);ge(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&\n6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=ke(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return da}var oe=ie(!0),pe=ie(!1),qe={},re=gc(qe),se=gc(qe),te=gc(qe);function ue(a){if(a===qe)throw Error(n(174));return a}function ve(a,b){y(te,b);y(se,a);y(re,qe);a=Ga(b);x(re);y(re,a)}function we(){x(re);x(se);x(te)}function xe(a){var b=ue(te.current),c=ue(re.current);b=Ha(c,a.type,b);c!==b&&(y(se,a),y(re,b))}function ye(a){se.current===a&&(x(re),x(se))}var J=gc(0);\nfunction ze(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||Ib(c)||Jb(c)))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Ae=[];\nfunction Be(){for(var a=0;ac?c:4;a(!0);var d=De.transition;De.transition={};try{a(!1),b()}finally{D=c,De.transition=d}}function rf(){return Re().memoizedState}function sf(a,b,c){var d=zd(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};tf(a)?uf(b,c):(vf(a,b,c),c=H(),a=Ad(a,d,c),null!==a&&wf(a,b,d))}\nfunction df(a,b,c){var d=zd(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(tf(a))uf(b,e);else{vf(a,b,e);var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(Rc(h,g))return}catch(k){}finally{}c=H();a=Ad(a,d,c);null!==a&&wf(a,b,d)}}function tf(a){var b=a.alternate;return a===K||null!==b&&b===K}\nfunction uf(a,b){Ge=Fe=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function vf(a,b,c){null!==F&&0!==(a.mode&1)&&0===(G&2)?(a=b.interleaved,null===a?(c.next=c,null===md?md=[b]:md.push(b)):(c.next=a.next,a.next=c),b.interleaved=c):(a=b.pending,null===a?c.next=c:(c.next=a.next,a.next=c),b.pending=c)}function wf(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Dc(a,c)}}\nvar Oe={readContext:ld,useCallback:O,useContext:O,useEffect:O,useImperativeHandle:O,useInsertionEffect:O,useLayoutEffect:O,useMemo:O,useReducer:O,useRef:O,useState:O,useDebugValue:O,useDeferredValue:O,useTransition:O,useMutableSource:O,useSyncExternalStore:O,useId:O,unstable_isNewReconciler:!1},Le={readContext:ld,useCallback:function(a,b){Qe().memoizedState=[a,void 0===b?null:b];return a},useContext:ld,useEffect:hf,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ff(4194308,\n4,lf.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ff(4194308,4,a,b)},useInsertionEffect:function(a,b){return ff(4,2,a,b)},useMemo:function(a,b){var c=Qe();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Qe();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=sf.bind(null,K,a);return[d.memoizedState,a]},useRef:function(a){var b=\nQe();a={current:a};return b.memoizedState=a},useState:cf,useDebugValue:nf,useDeferredValue:function(a){var b=cf(a),c=b[0],d=b[1];hf(function(){var b=De.transition;De.transition={};try{d(a)}finally{De.transition=b}},[a]);return c},useTransition:function(){var a=cf(!1),b=a[0];a=qf.bind(null,a[1]);Qe().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=K,e=Qe();if(I){if(void 0===c)throw Error(n(407));c=c()}else{c=b();if(null===F)throw Error(n(349));\n0!==(Ee&30)||af(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;hf(Ye.bind(null,d,f,a),[a]);d.flags|=2048;Ze(9,$e.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Qe(),b=F.identifierPrefix;if(I){var c=Od;var d=Nd;c=(d&~(1<<32-qc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=He++;0Uf&&(b.flags|=128,d=!0,Qf(e,!1),b.lanes=4194304)}else{if(!d)if(a=ze(f),null!==a){if(b.flags|=128,d=!0,a=a.updateQueue,null!==a&&(b.updateQueue=a,b.flags|=4),Qf(e,!0),null===e.tail&&\"hidden\"===e.tailMode&&!f.alternate&&!I)return P(b),null}else 2*E()-e.renderingStartTime>Uf&&1073741824!==c&&(b.flags|=128,d=!0,Qf(e,!1),b.lanes=4194304);e.isBackwards?(f.sibling=b.child,b.child=f):(a=e.last,null!==a?a.sibling=f:b.child=f,e.last=f)}if(null!==\ne.tail)return b=e.tail,e.rendering=b,e.tail=b.sibling,e.renderingStartTime=E(),b.sibling=null,a=J.current,y(J,d?a&1|2:a&1),b;P(b);return null;case 22:case 23:return Vf(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(Wf&1073741824)&&(P(b),Ua&&b.subtreeFlags&6&&(b.flags|=8192)):P(b),null;case 24:return null;case 25:return null}throw Error(n(156,b.tag));}var Xf=ea.ReactCurrentOwner,kd=!1;\nfunction R(a,b,c,d){b.child=null===a?pe(b,null,c,d):oe(b,a.child,c,d)}function Yf(a,b,c,d,e){c=c.render;var f=b.ref;jd(b,e);d=Ke(a,b,c,d,f,e);c=Pe();if(null!==a&&!kd)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zf(a,b,e);I&&c&&Rd(b);b.flags|=1;R(a,b,d,e);return b.child}\nfunction $f(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!ag(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,bg(a,b,f,d,e);a=le(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:Zc;if(c(g,d)&&a.ref===b.ref)return Zf(a,b,e)}b.flags|=1;a=je(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction bg(a,b,c,d,e){if(null!==a&&Zc(a.memoizedProps,d)&&a.ref===b.ref)if(kd=!1,0!==(a.lanes&e))0!==(a.flags&131072)&&(kd=!0);else return b.lanes=a.lanes,Zf(a,b,e);return cg(a,b,c,d,e)}\nfunction dg(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null},y(eg,Wf),Wf|=c;else if(0!==(c&1073741824))b.memoizedState={baseLanes:0,cachePool:null},d=null!==f?f.baseLanes:c,y(eg,Wf),Wf|=d;else return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null},b.updateQueue=null,y(eg,Wf),Wf|=a,null;else null!==f?(d=f.baseLanes|c,b.memoizedState=null):\nd=c,y(eg,Wf),Wf|=d;R(a,b,e,c);return b.child}function fg(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function cg(a,b,c,d,e){var f=C(c)?ic:A.current;f=jc(b,f);jd(b,e);c=Ke(a,b,c,d,f,e);d=Pe();if(null!==a&&!kd)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zf(a,b,e);I&&d&&Rd(b);b.flags|=1;R(a,b,c,e);return b.child}\nfunction gg(a,b,c,d,e){if(C(c)){var f=!0;nc(b)}else f=!1;jd(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),Dd(b,c,d),Fd(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=ld(l):(l=C(c)?ic:A.current,l=jc(b,l));var m=c.getDerivedStateFromProps,v=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;v||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==\ntypeof g.componentWillReceiveProps||(h!==d||k!==l)&&Ed(b,g,d,l);nd=!1;var r=b.memoizedState;g.state=r;ud(b,d,g,e);k=b.memoizedState;h!==d||r!==k||B.current||nd?(\"function\"===typeof m&&(yd(b,c,m,d),k=b.memoizedState),(h=nd||Cd(b,c,h,d,r,k,l))?(v||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&\n(b.flags|=4194308)):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;pd(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:ad(b.type,h);g.props=l;v=b.pendingProps;r=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=ld(k):(k=C(c)?ic:A.current,k=jc(b,k));var z=c.getDerivedStateFromProps;(m=\"function\"===typeof z||\"function\"===\ntypeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==v||r!==k)&&Ed(b,g,d,k);nd=!1;r=b.memoizedState;g.state=r;ud(b,d,g,e);var q=b.memoizedState;h!==v||r!==q||B.current||nd?(\"function\"===typeof z&&(yd(b,c,z,d),q=b.memoizedState),(l=nd||Cd(b,c,l,d,r,q,k)||!1)?(m||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,\nq,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,q,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=q),g.props=d,g.state=q,g.context=k,d=l):(\"function\"!==\ntypeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return hg(a,b,c,d,f,e)}\nfunction hg(a,b,c,d,e,f){fg(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&oc(b,c,!1),Zf(a,b,f);d=b.stateNode;Xf.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=oe(b,a.child,null,f),b.child=oe(b,null,h,f)):R(a,b,h,f);b.memoizedState=d.state;e&&oc(b,c,!0);return b.child}function ig(a){var b=a.stateNode;b.pendingContext?lc(a,b.pendingContext,b.pendingContext!==b.context):b.context&&lc(a,b.context,!1);ve(a,b.containerInfo)}\nfunction jg(a,b,c,d,e){de();ee(e);b.flags|=256;R(a,b,c,d);return b.child}var kg={dehydrated:null,treeContext:null,retryLane:0};function lg(a){return{baseLanes:a,cachePool:null}}\nfunction mg(a,b,c){var d=b.pendingProps,e=J.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;y(J,e&1);if(null===a){ae(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:Jb(a)?b.lanes=8:b.lanes=1073741824,null;e=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,e={mode:\"hidden\",children:e},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=e):\nf=ng(e,d,0,null),a=ne(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=lg(c),b.memoizedState=kg,a):og(b,e)}e=a.memoizedState;if(null!==e){h=e.dehydrated;if(null!==h){if(g){if(b.flags&256)return b.flags&=-257,pg(a,b,c,Error(n(422)));if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=ng({mode:\"visible\",children:d.children},e,0,null);f=ne(f,e,c,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&oe(b,a.child,\nnull,c);b.child.memoizedState=lg(c);b.memoizedState=kg;return f}if(0===(b.mode&1))b=pg(a,b,c,null);else if(Jb(h))b=pg(a,b,c,Error(n(419)));else if(d=0!==(c&a.childLanes),kd||d){d=F;if(null!==d){switch(c&-c){case 4:f=2;break;case 16:f=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:f=32;break;case 536870912:f=\n268435456;break;default:f=0}d=0!==(f&(d.suspendedLanes|c))?0:f;0!==d&&d!==e.retryLane&&(e.retryLane=d,Ad(a,d,-1))}Tf();b=pg(a,b,c,Error(n(421)))}else Ib(h)?(b.flags|=128,b.child=a.child,b=qg.bind(null,a),Kb(h,b),b=null):(c=e.treeContext,p&&(Ud=Ob(h),Td=b,I=!0,Wd=null,Vd=!1,null!==c&&(Kd[Ld++]=Nd,Kd[Ld++]=Od,Kd[Ld++]=Md,Nd=c.id,Od=c.overflow,Md=b)),b=og(b,b.pendingProps.children),b.flags|=4096);return b}if(f)return d=rg(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=\nnull===e?lg(c):{baseLanes:e.baseLanes|c,cachePool:null},f.childLanes=a.childLanes&~c,b.memoizedState=kg,d;c=sg(a,b,d.children,c);b.memoizedState=null;return c}if(f)return d=rg(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?lg(c):{baseLanes:e.baseLanes|c,cachePool:null},f.childLanes=a.childLanes&~c,b.memoizedState=kg,d;c=sg(a,b,d.children,c);b.memoizedState=null;return c}\nfunction og(a,b){b=ng({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}function sg(a,b,c,d){var e=a.child;a=e.sibling;c=je(e,{mode:\"visible\",children:c});0===(b.mode&1)&&(c.lanes=d);c.return=b;c.sibling=null;null!==a&&(d=b.deletions,null===d?(b.deletions=[a],b.flags|=16):d.push(a));return b.child=c}\nfunction rg(a,b,c,d,e){var f=b.mode;a=a.child;var g=a.sibling,h={mode:\"hidden\",children:c};0===(f&1)&&b.child!==a?(c=b.child,c.childLanes=0,c.pendingProps=h,b.deletions=null):(c=je(a,h),c.subtreeFlags=a.subtreeFlags&14680064);null!==g?d=je(g,d):(d=ne(d,f,e,null),d.flags|=2);d.return=b;c.return=b;c.sibling=d;b.child=c;return d}function pg(a,b,c,d){null!==d&&ee(d);oe(b,a.child,null,c);a=og(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction tg(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);id(a.return,b,c)}function ug(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction vg(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;R(a,b,d.children,c);d=J.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&tg(a,c,b);else if(19===a.tag)tg(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}y(J,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===ze(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);ug(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===ze(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}ug(b,!0,c,null,f);break;case \"together\":ug(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction Zf(a,b,c){null!==a&&(b.dependencies=a.dependencies);vd|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(n(153));if(null!==b.child){a=b.child;c=je(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=je(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction wg(a,b,c){switch(b.tag){case 3:ig(b);de();break;case 5:xe(b);break;case 1:C(b.type)&&nc(b);break;case 4:ve(b,b.stateNode.containerInfo);break;case 10:gd(b,b.type._context,b.memoizedProps.value);break;case 13:var d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return y(J,J.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return mg(a,b,c);y(J,J.current&1);a=Zf(a,b,c);return null!==a?a.sibling:null}y(J,J.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&128)){if(d)return vg(a,\nb,c);b.flags|=128}var e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);y(J,J.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,dg(a,b,c)}return Zf(a,b,c)}\nfunction xg(a,b){Sd(b);switch(b.tag){case 1:return C(b.type)&&kc(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return we(),x(B),x(A),Be(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return ye(b),null;case 13:x(J);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(n(340));de()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return x(J),null;case 4:return we(),null;case 10:return hd(b.type._context),null;case 22:case 23:return Vf(),\nnull;case 24:return null;default:return null}}var yg=!1,zg=!1,Ag=\"function\"===typeof WeakSet?WeakSet:Set,S=null;function Bg(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){T(a,b,d)}else c.current=null}function Cg(a,b,c){try{c()}catch(d){T(a,b,d)}}var Dg=!1;\nfunction Eg(a,b){Ia(a.containerInfo);for(S=b;null!==S;)if(a=S,b=a.child,0!==(a.subtreeFlags&1028)&&null!==b)b.return=a,S=b;else for(;null!==S;){a=S;try{var c=a.alternate;if(0!==(a.flags&1024))switch(a.tag){case 0:case 11:case 15:break;case 1:if(null!==c){var d=c.memoizedProps,e=c.memoizedState,f=a.stateNode,g=f.getSnapshotBeforeUpdate(a.elementType===a.type?d:ad(a.type,d),e);f.__reactInternalSnapshotBeforeUpdate=g}break;case 3:Ua&&xb(a.stateNode.containerInfo);break;case 5:case 6:case 4:case 17:break;\ndefault:throw Error(n(163));}}catch(h){T(a,a.return,h)}b=a.sibling;if(null!==b){b.return=a.return;S=b;break}S=a.return}c=Dg;Dg=!1;return c}function Fg(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Cg(b,c,f)}e=e.next}while(e!==d)}}function Gg(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}\nfunction Hg(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=Fa(c);break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Ig(a,b,c){if(Oc&&\"function\"===typeof Oc.onCommitFiberUnmount)try{Oc.onCommitFiberUnmount(Nc,b)}catch(g){}switch(b.tag){case 0:case 11:case 14:case 15:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var d=a=a.next;do{var e=d,f=e.destroy;e=e.tag;void 0!==f&&(0!==(e&2)?Cg(b,c,f):0!==(e&4)&&Cg(b,c,f));d=d.next}while(d!==a)}break;case 1:Bg(b,c);a=b.stateNode;if(\"function\"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(g){T(b,\nc,g)}break;case 5:Bg(b,c);break;case 4:Ua?Jg(a,b,c):Va&&Va&&(b=b.stateNode.containerInfo,c=zb(b),Cb(b,c))}}function Kg(a,b,c){for(var d=b;;)if(Ig(a,d,c),null===d.child||Ua&&4===d.tag){if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return}d.sibling.return=d.return;d=d.sibling}else d.child.return=d,d=d.child}\nfunction Lg(a){var b=a.alternate;null!==b&&(a.alternate=null,Lg(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&Za(b));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Mg(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Ng(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Mg(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Og(a){if(Ua){a:{for(var b=a.return;null!==b;){if(Mg(b))break a;b=b.return}throw Error(n(160));}var c=b;switch(c.tag){case 5:b=c.stateNode;c.flags&32&&(sb(b),c.flags&=-33);c=Ng(a);Pg(a,c,b);break;case 3:case 4:b=c.stateNode.containerInfo;c=Ng(a);Qg(a,c,b);break;default:throw Error(n(161));}}}function Qg(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?pb(c,a,b):kb(c,a);else if(4!==d&&(a=a.child,null!==a))for(Qg(a,b,c),a=a.sibling;null!==a;)Qg(a,b,c),a=a.sibling}\nfunction Pg(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?ob(c,a,b):jb(c,a);else if(4!==d&&(a=a.child,null!==a))for(Pg(a,b,c),a=a.sibling;null!==a;)Pg(a,b,c),a=a.sibling}\nfunction Jg(a,b,c){for(var d=b,e=!1,f,g;;){if(!e){e=d.return;a:for(;;){if(null===e)throw Error(n(160));f=e.stateNode;switch(e.tag){case 5:g=!1;break a;case 3:f=f.containerInfo;g=!0;break a;case 4:f=f.containerInfo;g=!0;break a}e=e.return}e=!0}if(5===d.tag||6===d.tag)Kg(a,d,c),g?rb(f,d.stateNode):qb(f,d.stateNode);else if(18===d.tag)g?Wb(f,d.stateNode):Vb(f,d.stateNode);else if(4===d.tag){if(null!==d.child){f=d.stateNode.containerInfo;g=!0;d.child.return=d;d=d.child;continue}}else if(Ig(a,d,c),null!==\nd.child){d.child.return=d;d=d.child;continue}if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return;4===d.tag&&(e=!1)}d.sibling.return=d.return;d=d.sibling}}\nfunction Rg(a,b){if(Ua){switch(b.tag){case 0:case 11:case 14:case 15:Fg(3,b,b.return);Gg(3,b);Fg(5,b,b.return);return;case 1:return;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&nb(c,f,e,a,d,b)}return;case 6:if(null===b.stateNode)throw Error(n(162));c=b.memoizedProps;lb(b.stateNode,null!==a?a.memoizedProps:c,c);return;case 3:p&&null!==a&&a.memoizedState.isDehydrated&&Tb(b.stateNode.containerInfo);return;\ncase 12:return;case 13:Sg(b);return;case 19:Sg(b);return;case 17:return}throw Error(n(163));}switch(b.tag){case 0:case 11:case 14:case 15:Fg(3,b,b.return);Gg(3,b);Fg(5,b,b.return);return;case 12:return;case 13:Sg(b);return;case 19:Sg(b);return;case 3:p&&null!==a&&a.memoizedState.isDehydrated&&Tb(b.stateNode.containerInfo);break;case 22:case 23:return}a:if(Va){switch(b.tag){case 1:case 5:case 6:break a;case 3:case 4:b=b.stateNode;Cb(b.containerInfo,b.pendingChildren);break a}throw Error(n(163));}}\nfunction Sg(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Ag);b.forEach(function(b){var d=Tg.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction Ug(a,b){for(S=b;null!==S;){b=S;var c=b.deletions;if(null!==c)for(var d=0;d\";case bh:return\":has(\"+(ih(a)||\"\")+\")\";case ch:return'[role=\"'+a.value+'\"]';case eh:return'\"'+a.value+'\"';case dh:return'[data-testname=\"'+a.value+'\"]';default:throw Error(n(365));}}\nfunction jh(a,b){var c=[];a=[a,0];for(var d=0;de&&(e=g);d&=~f}d=e;d=E()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lh(d/1960))-d;if(10a?16:a;if(null===uh)var d=!1;else{a=uh;uh=null;vh=0;if(0!==(G&6))throw Error(n(331));var e=G;G|=4;for(S=a.current;null!==S;){var f=S,g=f.child;if(0!==(S.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kE()-Vg?Ih(a,0):qh|=c);Z(a,b)}function Vh(a,b){0===b&&(0===(a.mode&1)?b=1:(b=uc,uc<<=1,0===(uc&130023424)&&(uc=4194304)));var c=H();a=Ah(a,b);null!==a&&(Bc(a,b,c),Z(a,c))}function qg(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Vh(a,c)}\nfunction Tg(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(n(314));}null!==d&&d.delete(b);Vh(a,c)}var Sh;\nSh=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||B.current)kd=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return kd=!1,wg(a,b,c);kd=0!==(a.flags&131072)?!0:!1}else kd=!1,I&&0!==(b.flags&1048576)&&Qd(b,Jd,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;var e=jc(b,A.current);jd(b,c);e=Ke(null,b,d,a,e,c);var f=Pe();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?\n(b.tag=1,b.memoizedState=null,b.updateQueue=null,C(d)?(f=!0,nc(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,od(b),e.updater=Bd,b.stateNode=e,e._reactInternals=b,Fd(b,d,a,c),b=hg(null,b,d,!0,f,c)):(b.tag=0,I&&f&&Rd(b),R(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Wh(d);a=ad(d,a);switch(e){case 0:b=cg(null,b,d,a,c);break a;case 1:b=gg(null,b,d,\na,c);break a;case 11:b=Yf(null,b,d,a,c);break a;case 14:b=$f(null,b,d,ad(d.type,a),c);break a}throw Error(n(306,d,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),cg(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),gg(a,b,d,e,c);case 3:a:{ig(b);if(null===a)throw Error(n(387));d=b.pendingProps;f=b.memoizedState;e=f.element;pd(a,b);ud(b,d,null,c);var g=b.memoizedState;d=g.element;if(p&&f.isDehydrated)if(f={element:d,isDehydrated:!1,\ncache:g.cache,transitions:g.transitions},b.updateQueue.baseState=f,b.memoizedState=f,b.flags&256){e=Error(n(423));b=jg(a,b,d,c,e);break a}else if(d!==e){e=Error(n(424));b=jg(a,b,d,c,e);break a}else for(p&&(Ud=Nb(b.stateNode.containerInfo),Td=b,I=!0,Wd=null,Vd=!1),c=pe(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{de();if(d===e){b=Zf(a,b,c);break a}R(a,b,d,c)}b=b.child}return b;case 5:return xe(b),null===a&&ae(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,\nOa(d,e)?g=null:null!==f&&Oa(d,f)&&(b.flags|=32),fg(a,b),R(a,b,g,c),b.child;case 6:return null===a&&ae(b),null;case 13:return mg(a,b,c);case 4:return ve(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=oe(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),Yf(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,b,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=\nb.type._context;e=b.pendingProps;f=b.memoizedProps;g=e.value;gd(b,d,g);if(null!==f)if(Rc(f.value,g)){if(f.children===e.children&&!B.current){b=Zf(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=qd(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=\nc);id(f.return,c,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(n(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);id(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}R(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,jd(b,c),e=ld(e),d=d(e),b.flags|=\n1,R(a,b,d,c),b.child;case 14:return d=b.type,e=ad(d,b.pendingProps),e=ad(d.type,e),$f(a,b,d,e,c);case 15:return bg(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),b.tag=1,C(d)?(a=!0,nc(b)):a=!1,jd(b,c),Dd(b,d,e),Fd(b,d,e,c),hg(null,b,d,!0,a,c);case 19:return vg(a,b,c);case 22:return dg(a,b,c)}throw Error(n(156,b.tag));};function Dh(a,b){return Fc(a,b)}\nfunction Xh(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Yd(a,b,c,d){return new Xh(a,b,c,d)}function ag(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Wh(a){if(\"function\"===typeof a)return ag(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===na)return 11;if(a===qa)return 14}return 2}\nfunction je(a,b){var c=a.alternate;null===c?(c=Yd(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction le(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)ag(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ia:return ne(c.children,e,f,b);case ja:g=8;e|=8;break;case ka:return a=Yd(12,c,b,e|2),a.elementType=ka,a.lanes=f,a;case oa:return a=Yd(13,c,b,e),a.elementType=oa,a.lanes=f,a;case pa:return a=Yd(19,c,b,e),a.elementType=pa,a.lanes=f,a;case sa:return ng(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case la:g=10;break a;case ma:g=9;break a;case na:g=11;\nbreak a;case qa:g=14;break a;case ra:g=16;d=null;break a}throw Error(n(130,null==a?a:typeof a,\"\"));}b=Yd(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function ne(a,b,c,d){a=Yd(7,a,d,b);a.lanes=c;return a}function ng(a,b,c,d){a=Yd(22,a,d,b);a.elementType=sa;a.lanes=c;a.stateNode={};return a}function ke(a,b,c){a=Yd(6,a,null,b);a.lanes=c;return a}\nfunction me(a,b,c){b=Yd(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction Yh(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=Sa;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=Ac(0);this.expirationTimes=Ac(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=Ac(0);this.identifierPrefix=d;this.onRecoverableError=e;p&&(this.mutableSourceEagerHydrationData=\nnull)}function Zh(a,b,c,d,e,f,g,h,k){a=new Yh(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Yd(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null};od(f);return a}\nfunction $h(a){if(!a)return hc;a=a._reactInternals;a:{if(ya(a)!==a||1!==a.tag)throw Error(n(170));var b=a;do{switch(b.tag){case 3:b=b.stateNode.context;break a;case 1:if(C(b.type)){b=b.stateNode.__reactInternalMemoizedMergedChildContext;break a}}b=b.return}while(null!==b);throw Error(n(171));}if(1===a.tag){var c=a.type;if(C(c))return mc(a,c,b)}return b}\nfunction ai(a){var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(n(188));a=Object.keys(a).join(\",\");throw Error(n(268,a));}a=Ba(b);return null===a?null:a.stateNode}function bi(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c=l&&f>=v&&e<=m&&g<=r){a.splice(b,1);break}else if(!(d!==l||c.width!==k.width||rg)){v>f&&(k.height+=v-f,k.y=f);re)){l>d&&(k.width+=\nl-d,k.x=d);mc&&(c=g)),g \")+\"\\n\\nNo matching component was found for:\\n \")+a.join(\" > \")}return null};\nexports.getPublicRootInstance=function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return Fa(a.child.stateNode);default:return a.child.stateNode}};\nexports.injectIntoDevTools=function(a){a={bundleType:a.bundleType,version:a.version,rendererPackageName:a.rendererPackageName,rendererConfig:a.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ea.ReactCurrentDispatcher,findHostInstanceByFiber:di,findFiberByHostInstance:a.findFiberByHostInstance||\nei,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.0.0-fc46dba67-20220329\"};if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)a=!1;else{var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)a=!0;else{try{Nc=b.inject(a),Oc=b}catch(c){}a=b.checkDCE?!0:!1}}return a};exports.isAlreadyRendering=function(){return!1};\nexports.observeVisibleRects=function(a,b,c,d){if(!bb)throw Error(n(363));a=kh(a,b);var e=ib(a,c,d).disconnect;return{disconnect:function(){e()}}};exports.registerMutableSourceForHydration=function(a,b){var c=b._getVersion;c=c(b._source);null==a.mutableSourceEagerHydrationData?a.mutableSourceEagerHydrationData=[b,c]:a.mutableSourceEagerHydrationData.push(b,c)};exports.runWithPriority=function(a,b){var c=D;try{return D=a,b()}finally{D=c}};exports.shouldError=function(){return null};\nexports.shouldSuspend=function(){return!1};exports.updateContainer=function(a,b,c,d){var e=b.current,f=H(),g=zd(e);c=$h(c);null===b.context?b.context=c:b.pendingContext=c;b=qd(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);rd(e,b);a=Ad(e,g,f);null!==a&&sd(a,e,g);return g};\n\n return exports;\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-reconciler-constants.production.min.js');\n} else {\n module.exports = require('./cjs/react-reconciler-constants.development.js');\n}\n","/**\n * @license React\n * scheduler.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var enableSchedulerDebugging = false;\nvar enableProfiling = false;\nvar frameYieldMs = 5;\n\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n siftUp(heap, node, index);\n}\nfunction peek(heap) {\n return heap.length === 0 ? null : heap[0];\n}\nfunction pop(heap) {\n if (heap.length === 0) {\n return null;\n }\n\n var first = heap[0];\n var last = heap.pop();\n\n if (last !== first) {\n heap[0] = last;\n siftDown(heap, last, 0);\n }\n\n return first;\n}\n\nfunction siftUp(heap, node, i) {\n var index = i;\n\n while (index > 0) {\n var parentIndex = index - 1 >>> 1;\n var parent = heap[parentIndex];\n\n if (compare(parent, node) > 0) {\n // The parent is larger. Swap positions.\n heap[parentIndex] = node;\n heap[index] = parent;\n index = parentIndex;\n } else {\n // The parent is smaller. Exit.\n return;\n }\n }\n}\n\nfunction siftDown(heap, node, i) {\n var index = i;\n var length = heap.length;\n var halfLength = length >>> 1;\n\n while (index < halfLength) {\n var leftIndex = (index + 1) * 2 - 1;\n var left = heap[leftIndex];\n var rightIndex = leftIndex + 1;\n var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.\n\n if (compare(left, node) < 0) {\n if (rightIndex < length && compare(right, left) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n heap[index] = left;\n heap[leftIndex] = node;\n index = leftIndex;\n }\n } else if (rightIndex < length && compare(right, node) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n // Neither child is smaller. Exit.\n return;\n }\n }\n}\n\nfunction compare(a, b) {\n // Compare sort index first, then task id.\n var diff = a.sortIndex - b.sortIndex;\n return diff !== 0 ? diff : a.id - b.id;\n}\n\n// TODO: Use symbols?\nvar ImmediatePriority = 1;\nvar UserBlockingPriority = 2;\nvar NormalPriority = 3;\nvar LowPriority = 4;\nvar IdlePriority = 5;\n\nfunction markTaskErrored(task, ms) {\n}\n\n/* eslint-disable no-var */\n\nvar hasPerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\n\nif (hasPerformanceNow) {\n var localPerformance = performance;\n\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date;\n var initialTime = localDate.now();\n\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n} // Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\n\n\nvar maxSigned31BitInt = 1073741823; // Times out immediately\n\nvar IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out\n\nvar USER_BLOCKING_PRIORITY_TIMEOUT = 250;\nvar NORMAL_PRIORITY_TIMEOUT = 5000;\nvar LOW_PRIORITY_TIMEOUT = 10000; // Never times out\n\nvar IDLE_PRIORITY_TIMEOUT = maxSigned31BitInt; // Tasks are stored on a min heap\n\nvar taskQueue = [];\nvar timerQueue = []; // Incrementing id counter. Used to maintain insertion order.\n\nvar taskIdCounter = 1; // Pausing the scheduler is useful for debugging.\nvar currentTask = null;\nvar currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrance.\n\nvar isPerformingWork = false;\nvar isHostCallbackScheduled = false;\nvar isHostTimeoutScheduled = false; // Capture local references to native APIs, in case a polyfill overrides them.\n\nvar localSetTimeout = typeof setTimeout === 'function' ? setTimeout : null;\nvar localClearTimeout = typeof clearTimeout === 'function' ? clearTimeout : null;\nvar localSetImmediate = typeof setImmediate !== 'undefined' ? setImmediate : null; // IE and Node.js + jsdom\n\nvar isInputPending = typeof navigator !== 'undefined' && navigator.scheduling !== undefined && navigator.scheduling.isInputPending !== undefined ? navigator.scheduling.isInputPending.bind(navigator.scheduling) : null;\n\nfunction advanceTimers(currentTime) {\n // Check for tasks that are no longer delayed and add them to the queue.\n var timer = peek(timerQueue);\n\n while (timer !== null) {\n if (timer.callback === null) {\n // Timer was cancelled.\n pop(timerQueue);\n } else if (timer.startTime <= currentTime) {\n // Timer fired. Transfer to the task queue.\n pop(timerQueue);\n timer.sortIndex = timer.expirationTime;\n push(taskQueue, timer);\n } else {\n // Remaining timers are pending.\n return;\n }\n\n timer = peek(timerQueue);\n }\n}\n\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = false;\n advanceTimers(currentTime);\n\n if (!isHostCallbackScheduled) {\n if (peek(taskQueue) !== null) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n }\n }\n}\n\nfunction flushWork(hasTimeRemaining, initialTime) {\n\n\n isHostCallbackScheduled = false;\n\n if (isHostTimeoutScheduled) {\n // We scheduled a timeout but it's no longer needed. Cancel it.\n isHostTimeoutScheduled = false;\n cancelHostTimeout();\n }\n\n isPerformingWork = true;\n var previousPriorityLevel = currentPriorityLevel;\n\n try {\n if (enableProfiling) {\n try {\n return workLoop(hasTimeRemaining, initialTime);\n } catch (error) {\n if (currentTask !== null) {\n var currentTime = exports.unstable_now();\n markTaskErrored(currentTask, currentTime);\n currentTask.isQueued = false;\n }\n\n throw error;\n }\n } else {\n // No catch in prod code path.\n return workLoop(hasTimeRemaining, initialTime);\n }\n } finally {\n currentTask = null;\n currentPriorityLevel = previousPriorityLevel;\n isPerformingWork = false;\n }\n}\n\nfunction workLoop(hasTimeRemaining, initialTime) {\n var currentTime = initialTime;\n advanceTimers(currentTime);\n currentTask = peek(taskQueue);\n\n while (currentTask !== null && !(enableSchedulerDebugging )) {\n if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n // This currentTask hasn't expired, and we've reached the deadline.\n break;\n }\n\n var callback = currentTask.callback;\n\n if (typeof callback === 'function') {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n\n var continuationCallback = callback(didUserCallbackTimeout);\n currentTime = exports.unstable_now();\n\n if (typeof continuationCallback === 'function') {\n currentTask.callback = continuationCallback;\n } else {\n\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue);\n }\n }\n\n advanceTimers(currentTime);\n } else {\n pop(taskQueue);\n }\n\n currentTask = peek(taskQueue);\n } // Return whether there's additional work\n\n\n if (currentTask !== null) {\n return true;\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n\n return false;\n }\n}\n\nfunction unstable_runWithPriority(priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n case LowPriority:\n case IdlePriority:\n break;\n\n default:\n priorityLevel = NormalPriority;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_next(eventHandler) {\n var priorityLevel;\n\n switch (currentPriorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n // Shift down to normal priority\n priorityLevel = NormalPriority;\n break;\n\n default:\n // Anything lower than normal priority should remain at the current level.\n priorityLevel = currentPriorityLevel;\n break;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_wrapCallback(callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n // This is a fork of runWithPriority, inlined for performance.\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n}\n\nfunction unstable_scheduleCallback(priorityLevel, callback, options) {\n var currentTime = exports.unstable_now();\n var startTime;\n\n if (typeof options === 'object' && options !== null) {\n var delay = options.delay;\n\n if (typeof delay === 'number' && delay > 0) {\n startTime = currentTime + delay;\n } else {\n startTime = currentTime;\n }\n } else {\n startTime = currentTime;\n }\n\n var timeout;\n\n switch (priorityLevel) {\n case ImmediatePriority:\n timeout = IMMEDIATE_PRIORITY_TIMEOUT;\n break;\n\n case UserBlockingPriority:\n timeout = USER_BLOCKING_PRIORITY_TIMEOUT;\n break;\n\n case IdlePriority:\n timeout = IDLE_PRIORITY_TIMEOUT;\n break;\n\n case LowPriority:\n timeout = LOW_PRIORITY_TIMEOUT;\n break;\n\n case NormalPriority:\n default:\n timeout = NORMAL_PRIORITY_TIMEOUT;\n break;\n }\n\n var expirationTime = startTime + timeout;\n var newTask = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: startTime,\n expirationTime: expirationTime,\n sortIndex: -1\n };\n\n if (startTime > currentTime) {\n // This is a delayed task.\n newTask.sortIndex = startTime;\n push(timerQueue, newTask);\n\n if (peek(taskQueue) === null && newTask === peek(timerQueue)) {\n // All tasks are delayed, and this is the task with the earliest delay.\n if (isHostTimeoutScheduled) {\n // Cancel an existing timeout.\n cancelHostTimeout();\n } else {\n isHostTimeoutScheduled = true;\n } // Schedule a timeout.\n\n\n requestHostTimeout(handleTimeout, startTime - currentTime);\n }\n } else {\n newTask.sortIndex = expirationTime;\n push(taskQueue, newTask);\n // wait until the next time we yield.\n\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n }\n }\n\n return newTask;\n}\n\nfunction unstable_pauseExecution() {\n}\n\nfunction unstable_continueExecution() {\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n }\n}\n\nfunction unstable_getFirstCallbackNode() {\n return peek(taskQueue);\n}\n\nfunction unstable_cancelCallback(task) {\n // remove from the queue because you can't remove arbitrary nodes from an\n // array based heap, only the first one.)\n\n\n task.callback = null;\n}\n\nfunction unstable_getCurrentPriorityLevel() {\n return currentPriorityLevel;\n}\n\nvar isMessageLoopRunning = false;\nvar scheduledHostCallback = null;\nvar taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main\n// thread, like user events. By default, it yields multiple times per frame.\n// It does not attempt to align with frame boundaries, since most tasks don't\n// need to be frame aligned; for those that do, use requestAnimationFrame.\n\nvar frameInterval = frameYieldMs;\nvar startTime = -1;\n\nfunction shouldYieldToHost() {\n var timeElapsed = exports.unstable_now() - startTime;\n\n if (timeElapsed < frameInterval) {\n // The main thread has only been blocked for a really short amount of time;\n // smaller than a single frame. Don't yield yet.\n return false;\n } // The main thread has been blocked for a non-negligible amount of time. We\n\n\n return true;\n}\n\nfunction requestPaint() {\n\n}\n\nfunction forceFrameRate(fps) {\n if (fps < 0 || fps > 125) {\n // Using console['error'] to evade Babel and ESLint\n console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing frame rates higher than 125 fps is not supported');\n return;\n }\n\n if (fps > 0) {\n frameInterval = Math.floor(1000 / fps);\n } else {\n // reset the framerate\n frameInterval = frameYieldMs;\n }\n}\n\nvar performWorkUntilDeadline = function () {\n if (scheduledHostCallback !== null) {\n var currentTime = exports.unstable_now(); // Keep track of the start time so we can measure how long the main thread\n // has been blocked.\n\n startTime = currentTime;\n var hasTimeRemaining = true; // If a scheduler task throws, exit the current browser task so the\n // error can be observed.\n //\n // Intentionally not using a try-catch, since that makes some debugging\n // techniques harder. Instead, if `scheduledHostCallback` errors, then\n // `hasMoreWork` will remain true, and we'll continue the work loop.\n\n var hasMoreWork = true;\n\n try {\n hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);\n } finally {\n if (hasMoreWork) {\n // If there's more work, schedule the next message event at the end\n // of the preceding one.\n schedulePerformWorkUntilDeadline();\n } else {\n isMessageLoopRunning = false;\n scheduledHostCallback = null;\n }\n }\n } else {\n isMessageLoopRunning = false;\n } // Yielding to the browser will give it a chance to paint, so we can\n};\n\nvar schedulePerformWorkUntilDeadline;\n\nif (typeof localSetImmediate === 'function') {\n // Node.js and old IE.\n // There's a few reasons for why we prefer setImmediate.\n //\n // Unlike MessageChannel, it doesn't prevent a Node.js process from exiting.\n // (Even though this is a DOM fork of the Scheduler, you could get here\n // with a mix of Node.js 15+, which has a MessageChannel, and jsdom.)\n // https://github.com/facebook/react/issues/20756\n //\n // But also, it runs earlier which is the semantic we want.\n // If other browsers ever implement it, it's better to use it.\n // Although both of these would be inferior to native scheduling.\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\n} else if (typeof MessageChannel !== 'undefined') {\n // DOM and Worker environments.\n // We prefer MessageChannel because of the 4ms setTimeout clamping.\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else {\n // We should only fallback here in non-browser environments.\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\n}\n\nfunction requestHostCallback(callback) {\n scheduledHostCallback = callback;\n\n if (!isMessageLoopRunning) {\n isMessageLoopRunning = true;\n schedulePerformWorkUntilDeadline();\n }\n}\n\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\n\nfunction cancelHostTimeout() {\n localClearTimeout(taskTimeoutID);\n taskTimeoutID = -1;\n}\n\nvar unstable_requestPaint = requestPaint;\nvar unstable_Profiling = null;\n\nexports.unstable_IdlePriority = IdlePriority;\nexports.unstable_ImmediatePriority = ImmediatePriority;\nexports.unstable_LowPriority = LowPriority;\nexports.unstable_NormalPriority = NormalPriority;\nexports.unstable_Profiling = unstable_Profiling;\nexports.unstable_UserBlockingPriority = UserBlockingPriority;\nexports.unstable_cancelCallback = unstable_cancelCallback;\nexports.unstable_continueExecution = unstable_continueExecution;\nexports.unstable_forceFrameRate = forceFrameRate;\nexports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;\nexports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;\nexports.unstable_next = unstable_next;\nexports.unstable_pauseExecution = unstable_pauseExecution;\nexports.unstable_requestPaint = unstable_requestPaint;\nexports.unstable_runWithPriority = unstable_runWithPriority;\nexports.unstable_scheduleCallback = unstable_scheduleCallback;\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = unstable_wrapCallback;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"app.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;;;;;;;;;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrBA;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;;;;;;;;;;;AC5CA;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;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;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;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;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;;;;;;;;;;;;ACrOA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;;ACNA;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;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;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;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;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;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;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;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;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;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;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;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;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;;;;;;;;;;;;ACznBA;AACA;AACA;AAGA;AACA","sources":["webpack://smart-engraving-miniapp/._src_app.tsx","webpack://smart-engraving-miniapp/./src/app.tsx?c9a4","webpack://smart-engraving-miniapp/._node_modules_react-reconciler_cjs_react-reconciler-constants.development.js","webpack://smart-engraving-miniapp/._node_modules_react-reconciler_cjs_react-reconciler.production.min.js","webpack://smart-engraving-miniapp/._node_modules_react-reconciler_constants.js","webpack://smart-engraving-miniapp/._node_modules_react-reconciler_node_modules_scheduler_cjs_scheduler.development.js","webpack://smart-engraving-miniapp/._node_modules_react-reconciler_node_modules_scheduler_index.js"],"sourcesContent":["import _classCallCheck from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/classCallCheck.js\";\nimport _createClass from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/createClass.js\";\nimport _callSuper from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/callSuper.js\";\nimport _inherits from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/inherits.js\";\nimport { Component } from 'react';\nimport { ThemeProvider } from './context/ThemeContext';\nimport './app.scss';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar App = /*#__PURE__*/function (_Component) {\n function App() {\n _classCallCheck(this, App);\n return _callSuper(this, App, arguments);\n }\n _inherits(App, _Component);\n return _createClass(App, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {}\n }, {\n key: \"componentDidShow\",\n value: function componentDidShow() {}\n }, {\n key: \"componentDidHide\",\n value: function componentDidHide() {}\n }, {\n key: \"render\",\n value: function render() {\n return /*#__PURE__*/_jsx(ThemeProvider, {\n children: this.props.children\n });\n }\n }]);\n}(Component);\nexport default App;","import '@tarojs/plugin-platform-weapp/dist/runtime'\n\nimport { window } from '@tarojs/runtime'\nimport { createReactApp } from '@tarojs/plugin-framework-react/dist/runtime'\nimport { initPxTransform } from '@tarojs/taro'\n\nimport component from \"!!../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=app!./app.tsx\"\n\nimport * as React from 'react'\nimport ReactDOM from 'react-dom'\n\nvar 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\":\"我的\"}]}};\nwindow.__taroAppConfig = config\nvar inst = App(createReactApp(component, React, ReactDOM, config))\n\ninitPxTransform({\n designWidth: 750,\n deviceRatio: {\"640\":1.17,\"750\":1,\"828\":0.905},\n baseFontSize: 20,\n unitPrecision: undefined,\n targetUnit: undefined\n})\n","/**\n * @license React\n * react-reconciler-constants.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar SyncLane =\n/* */\n1;\nvar InputContinuousLane =\n/* */\n4;\nvar DefaultLane =\n/* */\n16;\nvar IdleLane =\n/* */\n536870912;\n\nvar DiscreteEventPriority = SyncLane;\nvar ContinuousEventPriority = InputContinuousLane;\nvar DefaultEventPriority = DefaultLane;\nvar IdleEventPriority = IdleLane;\n\nvar LegacyRoot = 0;\nvar ConcurrentRoot = 1;\n\nexports.ConcurrentRoot = ConcurrentRoot;\nexports.ContinuousEventPriority = ContinuousEventPriority;\nexports.DefaultEventPriority = DefaultEventPriority;\nexports.DiscreteEventPriority = DiscreteEventPriority;\nexports.IdleEventPriority = IdleEventPriority;\nexports.LegacyRoot = LegacyRoot;\n })();\n}\n","/**\n * @license React\n * react-reconciler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nmodule.exports = function $$$reconciler($$$hostConfig) {\n var exports = {};\n'use strict';var aa=require(\"react\"),ba=require(\"scheduler\"),ca=Object.assign;function n(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;ch||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{bc=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?ac(a):\"\"}var dc=Object.prototype.hasOwnProperty,ec=[],fc=-1;function gc(a){return{current:a}}\nfunction x(a){0>fc||(a.current=ec[fc],ec[fc]=null,fc--)}function y(a,b){fc++;ec[fc]=a.current;a.current=b}var hc={},A=gc(hc),B=gc(!1),ic=hc;function jc(a,b){var c=a.type.contextTypes;if(!c)return hc;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction C(a){a=a.childContextTypes;return null!==a&&void 0!==a}function kc(){x(B);x(A)}function lc(a,b,c){if(A.current!==hc)throw Error(n(168));y(A,b);y(B,c)}function mc(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(n(108,xa(a)||\"Unknown\",e));return ca({},c,d)}\nfunction nc(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||hc;ic=A.current;y(A,a);y(B,B.current);return!0}function oc(a,b,c){var d=a.stateNode;if(!d)throw Error(n(169));c?(a=mc(a,b,ic),d.__reactInternalMemoizedMergedChildContext=a,x(B),x(A),y(A,a)):x(B);y(B,c)}var qc=Math.clz32?Math.clz32:pc,rc=Math.log,sc=Math.LN2;function pc(a){a>>>=0;return 0===a?32:31-(rc(a)/sc|0)|0}var tc=64,uc=4194304;\nfunction vc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function wc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=vc(h):(f&=g,0!==f&&(d=vc(f)))}else g=c&~e,0!==g?d=vc(g):0!==f&&(d=vc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}function Bc(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-qc(b);a[b]=c}\nfunction Cc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0>=g;e-=g;Nd=1<<32-qc(b)+e|c<u?(t=w,w=null):t=w.sibling;var q=r(e,w,h[u],k);if(null===q){null===w&&(w=t);break}a&&w&&null===q.alternate&&b(e,w);g=f(q,g,u);null===m?l=q:m.sibling=q;m=q;w=t}if(u===h.length)return c(e,w),I&&Pd(e,u),l;if(null===w){for(;uu?(q=m,m=null):q=m.sibling;var V=r(e,m,t.value,k);if(null===V){null===m&&(m=q);break}a&&m&&null===V.alternate&&b(e,m);g=f(V,g,u);null===w?l=V:w.sibling=V;w=V;m=q}if(t.done)return c(e,\nm),I&&Pd(e,u),l;if(null===m){for(;!t.done;u++,t=h.next())t=v(e,t.value,k),null!==t&&(g=f(t,g,u),null===w?l=t:w.sibling=t,w=t);I&&Pd(e,u);return l}for(m=d(e,m);!t.done;u++,t=h.next())t=z(m,e,u,t.value,k),null!==t&&(a&&null!==t.alternate&&m.delete(null===t.key?u:t.key),g=f(t,g,u),null===w?l=t:w.sibling=t,w=t);a&&m.forEach(function(a){return b(e,a)});I&&Pd(e,u);return l}function da(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ia&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==\nf){switch(f.$$typeof){case fa:a:{for(var k=f.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ia){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===ra&&he(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=fe(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ia?(d=ne(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=le(f.type,f.key,f.props,null,a.mode,h),h.ref=fe(a,d,f),h.return=\na,a=h)}return g(a);case ha:a:{for(l=f.key;null!==d;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=me(f,a.mode,h);d.return=a;a=d}return g(a);case ra:return l=f._init,da(a,d,l(f._payload),h)}if(Ea(f))return q(a,d,f,h);if(ua(f))return N(a,d,f,h);ge(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&\n6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=ke(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return da}var oe=ie(!0),pe=ie(!1),qe={},re=gc(qe),se=gc(qe),te=gc(qe);function ue(a){if(a===qe)throw Error(n(174));return a}function ve(a,b){y(te,b);y(se,a);y(re,qe);a=Ga(b);x(re);y(re,a)}function we(){x(re);x(se);x(te)}function xe(a){var b=ue(te.current),c=ue(re.current);b=Ha(c,a.type,b);c!==b&&(y(se,a),y(re,b))}function ye(a){se.current===a&&(x(re),x(se))}var J=gc(0);\nfunction ze(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||Ib(c)||Jb(c)))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Ae=[];\nfunction Be(){for(var a=0;ac?c:4;a(!0);var d=De.transition;De.transition={};try{a(!1),b()}finally{D=c,De.transition=d}}function rf(){return Re().memoizedState}function sf(a,b,c){var d=zd(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};tf(a)?uf(b,c):(vf(a,b,c),c=H(),a=Ad(a,d,c),null!==a&&wf(a,b,d))}\nfunction df(a,b,c){var d=zd(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(tf(a))uf(b,e);else{vf(a,b,e);var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(Rc(h,g))return}catch(k){}finally{}c=H();a=Ad(a,d,c);null!==a&&wf(a,b,d)}}function tf(a){var b=a.alternate;return a===K||null!==b&&b===K}\nfunction uf(a,b){Ge=Fe=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function vf(a,b,c){null!==F&&0!==(a.mode&1)&&0===(G&2)?(a=b.interleaved,null===a?(c.next=c,null===md?md=[b]:md.push(b)):(c.next=a.next,a.next=c),b.interleaved=c):(a=b.pending,null===a?c.next=c:(c.next=a.next,a.next=c),b.pending=c)}function wf(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Dc(a,c)}}\nvar Oe={readContext:ld,useCallback:O,useContext:O,useEffect:O,useImperativeHandle:O,useInsertionEffect:O,useLayoutEffect:O,useMemo:O,useReducer:O,useRef:O,useState:O,useDebugValue:O,useDeferredValue:O,useTransition:O,useMutableSource:O,useSyncExternalStore:O,useId:O,unstable_isNewReconciler:!1},Le={readContext:ld,useCallback:function(a,b){Qe().memoizedState=[a,void 0===b?null:b];return a},useContext:ld,useEffect:hf,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ff(4194308,\n4,lf.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ff(4194308,4,a,b)},useInsertionEffect:function(a,b){return ff(4,2,a,b)},useMemo:function(a,b){var c=Qe();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Qe();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=sf.bind(null,K,a);return[d.memoizedState,a]},useRef:function(a){var b=\nQe();a={current:a};return b.memoizedState=a},useState:cf,useDebugValue:nf,useDeferredValue:function(a){var b=cf(a),c=b[0],d=b[1];hf(function(){var b=De.transition;De.transition={};try{d(a)}finally{De.transition=b}},[a]);return c},useTransition:function(){var a=cf(!1),b=a[0];a=qf.bind(null,a[1]);Qe().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=K,e=Qe();if(I){if(void 0===c)throw Error(n(407));c=c()}else{c=b();if(null===F)throw Error(n(349));\n0!==(Ee&30)||af(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;hf(Ye.bind(null,d,f,a),[a]);d.flags|=2048;Ze(9,$e.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Qe(),b=F.identifierPrefix;if(I){var c=Od;var d=Nd;c=(d&~(1<<32-qc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=He++;0Uf&&(b.flags|=128,d=!0,Qf(e,!1),b.lanes=4194304)}else{if(!d)if(a=ze(f),null!==a){if(b.flags|=128,d=!0,a=a.updateQueue,null!==a&&(b.updateQueue=a,b.flags|=4),Qf(e,!0),null===e.tail&&\"hidden\"===e.tailMode&&!f.alternate&&!I)return P(b),null}else 2*E()-e.renderingStartTime>Uf&&1073741824!==c&&(b.flags|=128,d=!0,Qf(e,!1),b.lanes=4194304);e.isBackwards?(f.sibling=b.child,b.child=f):(a=e.last,null!==a?a.sibling=f:b.child=f,e.last=f)}if(null!==\ne.tail)return b=e.tail,e.rendering=b,e.tail=b.sibling,e.renderingStartTime=E(),b.sibling=null,a=J.current,y(J,d?a&1|2:a&1),b;P(b);return null;case 22:case 23:return Vf(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(Wf&1073741824)&&(P(b),Ua&&b.subtreeFlags&6&&(b.flags|=8192)):P(b),null;case 24:return null;case 25:return null}throw Error(n(156,b.tag));}var Xf=ea.ReactCurrentOwner,kd=!1;\nfunction R(a,b,c,d){b.child=null===a?pe(b,null,c,d):oe(b,a.child,c,d)}function Yf(a,b,c,d,e){c=c.render;var f=b.ref;jd(b,e);d=Ke(a,b,c,d,f,e);c=Pe();if(null!==a&&!kd)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zf(a,b,e);I&&c&&Rd(b);b.flags|=1;R(a,b,d,e);return b.child}\nfunction $f(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!ag(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,bg(a,b,f,d,e);a=le(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:Zc;if(c(g,d)&&a.ref===b.ref)return Zf(a,b,e)}b.flags|=1;a=je(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction bg(a,b,c,d,e){if(null!==a&&Zc(a.memoizedProps,d)&&a.ref===b.ref)if(kd=!1,0!==(a.lanes&e))0!==(a.flags&131072)&&(kd=!0);else return b.lanes=a.lanes,Zf(a,b,e);return cg(a,b,c,d,e)}\nfunction dg(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null},y(eg,Wf),Wf|=c;else if(0!==(c&1073741824))b.memoizedState={baseLanes:0,cachePool:null},d=null!==f?f.baseLanes:c,y(eg,Wf),Wf|=d;else return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null},b.updateQueue=null,y(eg,Wf),Wf|=a,null;else null!==f?(d=f.baseLanes|c,b.memoizedState=null):\nd=c,y(eg,Wf),Wf|=d;R(a,b,e,c);return b.child}function fg(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function cg(a,b,c,d,e){var f=C(c)?ic:A.current;f=jc(b,f);jd(b,e);c=Ke(a,b,c,d,f,e);d=Pe();if(null!==a&&!kd)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zf(a,b,e);I&&d&&Rd(b);b.flags|=1;R(a,b,c,e);return b.child}\nfunction gg(a,b,c,d,e){if(C(c)){var f=!0;nc(b)}else f=!1;jd(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),Dd(b,c,d),Fd(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=ld(l):(l=C(c)?ic:A.current,l=jc(b,l));var m=c.getDerivedStateFromProps,v=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;v||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==\ntypeof g.componentWillReceiveProps||(h!==d||k!==l)&&Ed(b,g,d,l);nd=!1;var r=b.memoizedState;g.state=r;ud(b,d,g,e);k=b.memoizedState;h!==d||r!==k||B.current||nd?(\"function\"===typeof m&&(yd(b,c,m,d),k=b.memoizedState),(h=nd||Cd(b,c,h,d,r,k,l))?(v||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&\n(b.flags|=4194308)):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;pd(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:ad(b.type,h);g.props=l;v=b.pendingProps;r=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=ld(k):(k=C(c)?ic:A.current,k=jc(b,k));var z=c.getDerivedStateFromProps;(m=\"function\"===typeof z||\"function\"===\ntypeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==v||r!==k)&&Ed(b,g,d,k);nd=!1;r=b.memoizedState;g.state=r;ud(b,d,g,e);var q=b.memoizedState;h!==v||r!==q||B.current||nd?(\"function\"===typeof z&&(yd(b,c,z,d),q=b.memoizedState),(l=nd||Cd(b,c,l,d,r,q,k)||!1)?(m||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,\nq,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,q,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=q),g.props=d,g.state=q,g.context=k,d=l):(\"function\"!==\ntypeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return hg(a,b,c,d,f,e)}\nfunction hg(a,b,c,d,e,f){fg(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&oc(b,c,!1),Zf(a,b,f);d=b.stateNode;Xf.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=oe(b,a.child,null,f),b.child=oe(b,null,h,f)):R(a,b,h,f);b.memoizedState=d.state;e&&oc(b,c,!0);return b.child}function ig(a){var b=a.stateNode;b.pendingContext?lc(a,b.pendingContext,b.pendingContext!==b.context):b.context&&lc(a,b.context,!1);ve(a,b.containerInfo)}\nfunction jg(a,b,c,d,e){de();ee(e);b.flags|=256;R(a,b,c,d);return b.child}var kg={dehydrated:null,treeContext:null,retryLane:0};function lg(a){return{baseLanes:a,cachePool:null}}\nfunction mg(a,b,c){var d=b.pendingProps,e=J.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;y(J,e&1);if(null===a){ae(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:Jb(a)?b.lanes=8:b.lanes=1073741824,null;e=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,e={mode:\"hidden\",children:e},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=e):\nf=ng(e,d,0,null),a=ne(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=lg(c),b.memoizedState=kg,a):og(b,e)}e=a.memoizedState;if(null!==e){h=e.dehydrated;if(null!==h){if(g){if(b.flags&256)return b.flags&=-257,pg(a,b,c,Error(n(422)));if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=ng({mode:\"visible\",children:d.children},e,0,null);f=ne(f,e,c,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&oe(b,a.child,\nnull,c);b.child.memoizedState=lg(c);b.memoizedState=kg;return f}if(0===(b.mode&1))b=pg(a,b,c,null);else if(Jb(h))b=pg(a,b,c,Error(n(419)));else if(d=0!==(c&a.childLanes),kd||d){d=F;if(null!==d){switch(c&-c){case 4:f=2;break;case 16:f=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:f=32;break;case 536870912:f=\n268435456;break;default:f=0}d=0!==(f&(d.suspendedLanes|c))?0:f;0!==d&&d!==e.retryLane&&(e.retryLane=d,Ad(a,d,-1))}Tf();b=pg(a,b,c,Error(n(421)))}else Ib(h)?(b.flags|=128,b.child=a.child,b=qg.bind(null,a),Kb(h,b),b=null):(c=e.treeContext,p&&(Ud=Ob(h),Td=b,I=!0,Wd=null,Vd=!1,null!==c&&(Kd[Ld++]=Nd,Kd[Ld++]=Od,Kd[Ld++]=Md,Nd=c.id,Od=c.overflow,Md=b)),b=og(b,b.pendingProps.children),b.flags|=4096);return b}if(f)return d=rg(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=\nnull===e?lg(c):{baseLanes:e.baseLanes|c,cachePool:null},f.childLanes=a.childLanes&~c,b.memoizedState=kg,d;c=sg(a,b,d.children,c);b.memoizedState=null;return c}if(f)return d=rg(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?lg(c):{baseLanes:e.baseLanes|c,cachePool:null},f.childLanes=a.childLanes&~c,b.memoizedState=kg,d;c=sg(a,b,d.children,c);b.memoizedState=null;return c}\nfunction og(a,b){b=ng({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}function sg(a,b,c,d){var e=a.child;a=e.sibling;c=je(e,{mode:\"visible\",children:c});0===(b.mode&1)&&(c.lanes=d);c.return=b;c.sibling=null;null!==a&&(d=b.deletions,null===d?(b.deletions=[a],b.flags|=16):d.push(a));return b.child=c}\nfunction rg(a,b,c,d,e){var f=b.mode;a=a.child;var g=a.sibling,h={mode:\"hidden\",children:c};0===(f&1)&&b.child!==a?(c=b.child,c.childLanes=0,c.pendingProps=h,b.deletions=null):(c=je(a,h),c.subtreeFlags=a.subtreeFlags&14680064);null!==g?d=je(g,d):(d=ne(d,f,e,null),d.flags|=2);d.return=b;c.return=b;c.sibling=d;b.child=c;return d}function pg(a,b,c,d){null!==d&&ee(d);oe(b,a.child,null,c);a=og(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction tg(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);id(a.return,b,c)}function ug(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction vg(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;R(a,b,d.children,c);d=J.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&tg(a,c,b);else if(19===a.tag)tg(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}y(J,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===ze(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);ug(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===ze(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}ug(b,!0,c,null,f);break;case \"together\":ug(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction Zf(a,b,c){null!==a&&(b.dependencies=a.dependencies);vd|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(n(153));if(null!==b.child){a=b.child;c=je(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=je(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction wg(a,b,c){switch(b.tag){case 3:ig(b);de();break;case 5:xe(b);break;case 1:C(b.type)&&nc(b);break;case 4:ve(b,b.stateNode.containerInfo);break;case 10:gd(b,b.type._context,b.memoizedProps.value);break;case 13:var d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return y(J,J.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return mg(a,b,c);y(J,J.current&1);a=Zf(a,b,c);return null!==a?a.sibling:null}y(J,J.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&128)){if(d)return vg(a,\nb,c);b.flags|=128}var e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);y(J,J.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,dg(a,b,c)}return Zf(a,b,c)}\nfunction xg(a,b){Sd(b);switch(b.tag){case 1:return C(b.type)&&kc(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return we(),x(B),x(A),Be(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return ye(b),null;case 13:x(J);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(n(340));de()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return x(J),null;case 4:return we(),null;case 10:return hd(b.type._context),null;case 22:case 23:return Vf(),\nnull;case 24:return null;default:return null}}var yg=!1,zg=!1,Ag=\"function\"===typeof WeakSet?WeakSet:Set,S=null;function Bg(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){T(a,b,d)}else c.current=null}function Cg(a,b,c){try{c()}catch(d){T(a,b,d)}}var Dg=!1;\nfunction Eg(a,b){Ia(a.containerInfo);for(S=b;null!==S;)if(a=S,b=a.child,0!==(a.subtreeFlags&1028)&&null!==b)b.return=a,S=b;else for(;null!==S;){a=S;try{var c=a.alternate;if(0!==(a.flags&1024))switch(a.tag){case 0:case 11:case 15:break;case 1:if(null!==c){var d=c.memoizedProps,e=c.memoizedState,f=a.stateNode,g=f.getSnapshotBeforeUpdate(a.elementType===a.type?d:ad(a.type,d),e);f.__reactInternalSnapshotBeforeUpdate=g}break;case 3:Ua&&xb(a.stateNode.containerInfo);break;case 5:case 6:case 4:case 17:break;\ndefault:throw Error(n(163));}}catch(h){T(a,a.return,h)}b=a.sibling;if(null!==b){b.return=a.return;S=b;break}S=a.return}c=Dg;Dg=!1;return c}function Fg(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Cg(b,c,f)}e=e.next}while(e!==d)}}function Gg(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}\nfunction Hg(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=Fa(c);break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Ig(a,b,c){if(Oc&&\"function\"===typeof Oc.onCommitFiberUnmount)try{Oc.onCommitFiberUnmount(Nc,b)}catch(g){}switch(b.tag){case 0:case 11:case 14:case 15:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var d=a=a.next;do{var e=d,f=e.destroy;e=e.tag;void 0!==f&&(0!==(e&2)?Cg(b,c,f):0!==(e&4)&&Cg(b,c,f));d=d.next}while(d!==a)}break;case 1:Bg(b,c);a=b.stateNode;if(\"function\"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(g){T(b,\nc,g)}break;case 5:Bg(b,c);break;case 4:Ua?Jg(a,b,c):Va&&Va&&(b=b.stateNode.containerInfo,c=zb(b),Cb(b,c))}}function Kg(a,b,c){for(var d=b;;)if(Ig(a,d,c),null===d.child||Ua&&4===d.tag){if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return}d.sibling.return=d.return;d=d.sibling}else d.child.return=d,d=d.child}\nfunction Lg(a){var b=a.alternate;null!==b&&(a.alternate=null,Lg(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&Za(b));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Mg(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Ng(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Mg(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Og(a){if(Ua){a:{for(var b=a.return;null!==b;){if(Mg(b))break a;b=b.return}throw Error(n(160));}var c=b;switch(c.tag){case 5:b=c.stateNode;c.flags&32&&(sb(b),c.flags&=-33);c=Ng(a);Pg(a,c,b);break;case 3:case 4:b=c.stateNode.containerInfo;c=Ng(a);Qg(a,c,b);break;default:throw Error(n(161));}}}function Qg(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?pb(c,a,b):kb(c,a);else if(4!==d&&(a=a.child,null!==a))for(Qg(a,b,c),a=a.sibling;null!==a;)Qg(a,b,c),a=a.sibling}\nfunction Pg(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?ob(c,a,b):jb(c,a);else if(4!==d&&(a=a.child,null!==a))for(Pg(a,b,c),a=a.sibling;null!==a;)Pg(a,b,c),a=a.sibling}\nfunction Jg(a,b,c){for(var d=b,e=!1,f,g;;){if(!e){e=d.return;a:for(;;){if(null===e)throw Error(n(160));f=e.stateNode;switch(e.tag){case 5:g=!1;break a;case 3:f=f.containerInfo;g=!0;break a;case 4:f=f.containerInfo;g=!0;break a}e=e.return}e=!0}if(5===d.tag||6===d.tag)Kg(a,d,c),g?rb(f,d.stateNode):qb(f,d.stateNode);else if(18===d.tag)g?Wb(f,d.stateNode):Vb(f,d.stateNode);else if(4===d.tag){if(null!==d.child){f=d.stateNode.containerInfo;g=!0;d.child.return=d;d=d.child;continue}}else if(Ig(a,d,c),null!==\nd.child){d.child.return=d;d=d.child;continue}if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return;4===d.tag&&(e=!1)}d.sibling.return=d.return;d=d.sibling}}\nfunction Rg(a,b){if(Ua){switch(b.tag){case 0:case 11:case 14:case 15:Fg(3,b,b.return);Gg(3,b);Fg(5,b,b.return);return;case 1:return;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&nb(c,f,e,a,d,b)}return;case 6:if(null===b.stateNode)throw Error(n(162));c=b.memoizedProps;lb(b.stateNode,null!==a?a.memoizedProps:c,c);return;case 3:p&&null!==a&&a.memoizedState.isDehydrated&&Tb(b.stateNode.containerInfo);return;\ncase 12:return;case 13:Sg(b);return;case 19:Sg(b);return;case 17:return}throw Error(n(163));}switch(b.tag){case 0:case 11:case 14:case 15:Fg(3,b,b.return);Gg(3,b);Fg(5,b,b.return);return;case 12:return;case 13:Sg(b);return;case 19:Sg(b);return;case 3:p&&null!==a&&a.memoizedState.isDehydrated&&Tb(b.stateNode.containerInfo);break;case 22:case 23:return}a:if(Va){switch(b.tag){case 1:case 5:case 6:break a;case 3:case 4:b=b.stateNode;Cb(b.containerInfo,b.pendingChildren);break a}throw Error(n(163));}}\nfunction Sg(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Ag);b.forEach(function(b){var d=Tg.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction Ug(a,b){for(S=b;null!==S;){b=S;var c=b.deletions;if(null!==c)for(var d=0;d\";case bh:return\":has(\"+(ih(a)||\"\")+\")\";case ch:return'[role=\"'+a.value+'\"]';case eh:return'\"'+a.value+'\"';case dh:return'[data-testname=\"'+a.value+'\"]';default:throw Error(n(365));}}\nfunction jh(a,b){var c=[];a=[a,0];for(var d=0;de&&(e=g);d&=~f}d=e;d=E()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lh(d/1960))-d;if(10a?16:a;if(null===uh)var d=!1;else{a=uh;uh=null;vh=0;if(0!==(G&6))throw Error(n(331));var e=G;G|=4;for(S=a.current;null!==S;){var f=S,g=f.child;if(0!==(S.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kE()-Vg?Ih(a,0):qh|=c);Z(a,b)}function Vh(a,b){0===b&&(0===(a.mode&1)?b=1:(b=uc,uc<<=1,0===(uc&130023424)&&(uc=4194304)));var c=H();a=Ah(a,b);null!==a&&(Bc(a,b,c),Z(a,c))}function qg(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Vh(a,c)}\nfunction Tg(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(n(314));}null!==d&&d.delete(b);Vh(a,c)}var Sh;\nSh=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||B.current)kd=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return kd=!1,wg(a,b,c);kd=0!==(a.flags&131072)?!0:!1}else kd=!1,I&&0!==(b.flags&1048576)&&Qd(b,Jd,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;var e=jc(b,A.current);jd(b,c);e=Ke(null,b,d,a,e,c);var f=Pe();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?\n(b.tag=1,b.memoizedState=null,b.updateQueue=null,C(d)?(f=!0,nc(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,od(b),e.updater=Bd,b.stateNode=e,e._reactInternals=b,Fd(b,d,a,c),b=hg(null,b,d,!0,f,c)):(b.tag=0,I&&f&&Rd(b),R(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Wh(d);a=ad(d,a);switch(e){case 0:b=cg(null,b,d,a,c);break a;case 1:b=gg(null,b,d,\na,c);break a;case 11:b=Yf(null,b,d,a,c);break a;case 14:b=$f(null,b,d,ad(d.type,a),c);break a}throw Error(n(306,d,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),cg(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),gg(a,b,d,e,c);case 3:a:{ig(b);if(null===a)throw Error(n(387));d=b.pendingProps;f=b.memoizedState;e=f.element;pd(a,b);ud(b,d,null,c);var g=b.memoizedState;d=g.element;if(p&&f.isDehydrated)if(f={element:d,isDehydrated:!1,\ncache:g.cache,transitions:g.transitions},b.updateQueue.baseState=f,b.memoizedState=f,b.flags&256){e=Error(n(423));b=jg(a,b,d,c,e);break a}else if(d!==e){e=Error(n(424));b=jg(a,b,d,c,e);break a}else for(p&&(Ud=Nb(b.stateNode.containerInfo),Td=b,I=!0,Wd=null,Vd=!1),c=pe(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{de();if(d===e){b=Zf(a,b,c);break a}R(a,b,d,c)}b=b.child}return b;case 5:return xe(b),null===a&&ae(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,\nOa(d,e)?g=null:null!==f&&Oa(d,f)&&(b.flags|=32),fg(a,b),R(a,b,g,c),b.child;case 6:return null===a&&ae(b),null;case 13:return mg(a,b,c);case 4:return ve(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=oe(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),Yf(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,b,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=\nb.type._context;e=b.pendingProps;f=b.memoizedProps;g=e.value;gd(b,d,g);if(null!==f)if(Rc(f.value,g)){if(f.children===e.children&&!B.current){b=Zf(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=qd(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=\nc);id(f.return,c,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(n(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);id(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}R(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,jd(b,c),e=ld(e),d=d(e),b.flags|=\n1,R(a,b,d,c),b.child;case 14:return d=b.type,e=ad(d,b.pendingProps),e=ad(d.type,e),$f(a,b,d,e,c);case 15:return bg(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),b.tag=1,C(d)?(a=!0,nc(b)):a=!1,jd(b,c),Dd(b,d,e),Fd(b,d,e,c),hg(null,b,d,!0,a,c);case 19:return vg(a,b,c);case 22:return dg(a,b,c)}throw Error(n(156,b.tag));};function Dh(a,b){return Fc(a,b)}\nfunction Xh(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Yd(a,b,c,d){return new Xh(a,b,c,d)}function ag(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Wh(a){if(\"function\"===typeof a)return ag(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===na)return 11;if(a===qa)return 14}return 2}\nfunction je(a,b){var c=a.alternate;null===c?(c=Yd(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction le(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)ag(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ia:return ne(c.children,e,f,b);case ja:g=8;e|=8;break;case ka:return a=Yd(12,c,b,e|2),a.elementType=ka,a.lanes=f,a;case oa:return a=Yd(13,c,b,e),a.elementType=oa,a.lanes=f,a;case pa:return a=Yd(19,c,b,e),a.elementType=pa,a.lanes=f,a;case sa:return ng(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case la:g=10;break a;case ma:g=9;break a;case na:g=11;\nbreak a;case qa:g=14;break a;case ra:g=16;d=null;break a}throw Error(n(130,null==a?a:typeof a,\"\"));}b=Yd(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function ne(a,b,c,d){a=Yd(7,a,d,b);a.lanes=c;return a}function ng(a,b,c,d){a=Yd(22,a,d,b);a.elementType=sa;a.lanes=c;a.stateNode={};return a}function ke(a,b,c){a=Yd(6,a,null,b);a.lanes=c;return a}\nfunction me(a,b,c){b=Yd(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction Yh(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=Sa;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=Ac(0);this.expirationTimes=Ac(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=Ac(0);this.identifierPrefix=d;this.onRecoverableError=e;p&&(this.mutableSourceEagerHydrationData=\nnull)}function Zh(a,b,c,d,e,f,g,h,k){a=new Yh(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Yd(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null};od(f);return a}\nfunction $h(a){if(!a)return hc;a=a._reactInternals;a:{if(ya(a)!==a||1!==a.tag)throw Error(n(170));var b=a;do{switch(b.tag){case 3:b=b.stateNode.context;break a;case 1:if(C(b.type)){b=b.stateNode.__reactInternalMemoizedMergedChildContext;break a}}b=b.return}while(null!==b);throw Error(n(171));}if(1===a.tag){var c=a.type;if(C(c))return mc(a,c,b)}return b}\nfunction ai(a){var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(n(188));a=Object.keys(a).join(\",\");throw Error(n(268,a));}a=Ba(b);return null===a?null:a.stateNode}function bi(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c=l&&f>=v&&e<=m&&g<=r){a.splice(b,1);break}else if(!(d!==l||c.width!==k.width||rg)){v>f&&(k.height+=v-f,k.y=f);re)){l>d&&(k.width+=\nl-d,k.x=d);mc&&(c=g)),g \")+\"\\n\\nNo matching component was found for:\\n \")+a.join(\" > \")}return null};\nexports.getPublicRootInstance=function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return Fa(a.child.stateNode);default:return a.child.stateNode}};\nexports.injectIntoDevTools=function(a){a={bundleType:a.bundleType,version:a.version,rendererPackageName:a.rendererPackageName,rendererConfig:a.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ea.ReactCurrentDispatcher,findHostInstanceByFiber:di,findFiberByHostInstance:a.findFiberByHostInstance||\nei,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.0.0-fc46dba67-20220329\"};if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)a=!1;else{var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)a=!0;else{try{Nc=b.inject(a),Oc=b}catch(c){}a=b.checkDCE?!0:!1}}return a};exports.isAlreadyRendering=function(){return!1};\nexports.observeVisibleRects=function(a,b,c,d){if(!bb)throw Error(n(363));a=kh(a,b);var e=ib(a,c,d).disconnect;return{disconnect:function(){e()}}};exports.registerMutableSourceForHydration=function(a,b){var c=b._getVersion;c=c(b._source);null==a.mutableSourceEagerHydrationData?a.mutableSourceEagerHydrationData=[b,c]:a.mutableSourceEagerHydrationData.push(b,c)};exports.runWithPriority=function(a,b){var c=D;try{return D=a,b()}finally{D=c}};exports.shouldError=function(){return null};\nexports.shouldSuspend=function(){return!1};exports.updateContainer=function(a,b,c,d){var e=b.current,f=H(),g=zd(e);c=$h(c);null===b.context?b.context=c:b.pendingContext=c;b=qd(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);rd(e,b);a=Ad(e,g,f);null!==a&&sd(a,e,g);return g};\n\n return exports;\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-reconciler-constants.production.min.js');\n} else {\n module.exports = require('./cjs/react-reconciler-constants.development.js');\n}\n","/**\n * @license React\n * scheduler.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var enableSchedulerDebugging = false;\nvar enableProfiling = false;\nvar frameYieldMs = 5;\n\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n siftUp(heap, node, index);\n}\nfunction peek(heap) {\n return heap.length === 0 ? null : heap[0];\n}\nfunction pop(heap) {\n if (heap.length === 0) {\n return null;\n }\n\n var first = heap[0];\n var last = heap.pop();\n\n if (last !== first) {\n heap[0] = last;\n siftDown(heap, last, 0);\n }\n\n return first;\n}\n\nfunction siftUp(heap, node, i) {\n var index = i;\n\n while (index > 0) {\n var parentIndex = index - 1 >>> 1;\n var parent = heap[parentIndex];\n\n if (compare(parent, node) > 0) {\n // The parent is larger. Swap positions.\n heap[parentIndex] = node;\n heap[index] = parent;\n index = parentIndex;\n } else {\n // The parent is smaller. Exit.\n return;\n }\n }\n}\n\nfunction siftDown(heap, node, i) {\n var index = i;\n var length = heap.length;\n var halfLength = length >>> 1;\n\n while (index < halfLength) {\n var leftIndex = (index + 1) * 2 - 1;\n var left = heap[leftIndex];\n var rightIndex = leftIndex + 1;\n var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.\n\n if (compare(left, node) < 0) {\n if (rightIndex < length && compare(right, left) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n heap[index] = left;\n heap[leftIndex] = node;\n index = leftIndex;\n }\n } else if (rightIndex < length && compare(right, node) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n // Neither child is smaller. Exit.\n return;\n }\n }\n}\n\nfunction compare(a, b) {\n // Compare sort index first, then task id.\n var diff = a.sortIndex - b.sortIndex;\n return diff !== 0 ? diff : a.id - b.id;\n}\n\n// TODO: Use symbols?\nvar ImmediatePriority = 1;\nvar UserBlockingPriority = 2;\nvar NormalPriority = 3;\nvar LowPriority = 4;\nvar IdlePriority = 5;\n\nfunction markTaskErrored(task, ms) {\n}\n\n/* eslint-disable no-var */\n\nvar hasPerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\n\nif (hasPerformanceNow) {\n var localPerformance = performance;\n\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date;\n var initialTime = localDate.now();\n\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n} // Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\n\n\nvar maxSigned31BitInt = 1073741823; // Times out immediately\n\nvar IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out\n\nvar USER_BLOCKING_PRIORITY_TIMEOUT = 250;\nvar NORMAL_PRIORITY_TIMEOUT = 5000;\nvar LOW_PRIORITY_TIMEOUT = 10000; // Never times out\n\nvar IDLE_PRIORITY_TIMEOUT = maxSigned31BitInt; // Tasks are stored on a min heap\n\nvar taskQueue = [];\nvar timerQueue = []; // Incrementing id counter. Used to maintain insertion order.\n\nvar taskIdCounter = 1; // Pausing the scheduler is useful for debugging.\nvar currentTask = null;\nvar currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrance.\n\nvar isPerformingWork = false;\nvar isHostCallbackScheduled = false;\nvar isHostTimeoutScheduled = false; // Capture local references to native APIs, in case a polyfill overrides them.\n\nvar localSetTimeout = typeof setTimeout === 'function' ? setTimeout : null;\nvar localClearTimeout = typeof clearTimeout === 'function' ? clearTimeout : null;\nvar localSetImmediate = typeof setImmediate !== 'undefined' ? setImmediate : null; // IE and Node.js + jsdom\n\nvar isInputPending = typeof navigator !== 'undefined' && navigator.scheduling !== undefined && navigator.scheduling.isInputPending !== undefined ? navigator.scheduling.isInputPending.bind(navigator.scheduling) : null;\n\nfunction advanceTimers(currentTime) {\n // Check for tasks that are no longer delayed and add them to the queue.\n var timer = peek(timerQueue);\n\n while (timer !== null) {\n if (timer.callback === null) {\n // Timer was cancelled.\n pop(timerQueue);\n } else if (timer.startTime <= currentTime) {\n // Timer fired. Transfer to the task queue.\n pop(timerQueue);\n timer.sortIndex = timer.expirationTime;\n push(taskQueue, timer);\n } else {\n // Remaining timers are pending.\n return;\n }\n\n timer = peek(timerQueue);\n }\n}\n\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = false;\n advanceTimers(currentTime);\n\n if (!isHostCallbackScheduled) {\n if (peek(taskQueue) !== null) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n }\n }\n}\n\nfunction flushWork(hasTimeRemaining, initialTime) {\n\n\n isHostCallbackScheduled = false;\n\n if (isHostTimeoutScheduled) {\n // We scheduled a timeout but it's no longer needed. Cancel it.\n isHostTimeoutScheduled = false;\n cancelHostTimeout();\n }\n\n isPerformingWork = true;\n var previousPriorityLevel = currentPriorityLevel;\n\n try {\n if (enableProfiling) {\n try {\n return workLoop(hasTimeRemaining, initialTime);\n } catch (error) {\n if (currentTask !== null) {\n var currentTime = exports.unstable_now();\n markTaskErrored(currentTask, currentTime);\n currentTask.isQueued = false;\n }\n\n throw error;\n }\n } else {\n // No catch in prod code path.\n return workLoop(hasTimeRemaining, initialTime);\n }\n } finally {\n currentTask = null;\n currentPriorityLevel = previousPriorityLevel;\n isPerformingWork = false;\n }\n}\n\nfunction workLoop(hasTimeRemaining, initialTime) {\n var currentTime = initialTime;\n advanceTimers(currentTime);\n currentTask = peek(taskQueue);\n\n while (currentTask !== null && !(enableSchedulerDebugging )) {\n if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n // This currentTask hasn't expired, and we've reached the deadline.\n break;\n }\n\n var callback = currentTask.callback;\n\n if (typeof callback === 'function') {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n\n var continuationCallback = callback(didUserCallbackTimeout);\n currentTime = exports.unstable_now();\n\n if (typeof continuationCallback === 'function') {\n currentTask.callback = continuationCallback;\n } else {\n\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue);\n }\n }\n\n advanceTimers(currentTime);\n } else {\n pop(taskQueue);\n }\n\n currentTask = peek(taskQueue);\n } // Return whether there's additional work\n\n\n if (currentTask !== null) {\n return true;\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n\n return false;\n }\n}\n\nfunction unstable_runWithPriority(priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n case LowPriority:\n case IdlePriority:\n break;\n\n default:\n priorityLevel = NormalPriority;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_next(eventHandler) {\n var priorityLevel;\n\n switch (currentPriorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n // Shift down to normal priority\n priorityLevel = NormalPriority;\n break;\n\n default:\n // Anything lower than normal priority should remain at the current level.\n priorityLevel = currentPriorityLevel;\n break;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_wrapCallback(callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n // This is a fork of runWithPriority, inlined for performance.\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n}\n\nfunction unstable_scheduleCallback(priorityLevel, callback, options) {\n var currentTime = exports.unstable_now();\n var startTime;\n\n if (typeof options === 'object' && options !== null) {\n var delay = options.delay;\n\n if (typeof delay === 'number' && delay > 0) {\n startTime = currentTime + delay;\n } else {\n startTime = currentTime;\n }\n } else {\n startTime = currentTime;\n }\n\n var timeout;\n\n switch (priorityLevel) {\n case ImmediatePriority:\n timeout = IMMEDIATE_PRIORITY_TIMEOUT;\n break;\n\n case UserBlockingPriority:\n timeout = USER_BLOCKING_PRIORITY_TIMEOUT;\n break;\n\n case IdlePriority:\n timeout = IDLE_PRIORITY_TIMEOUT;\n break;\n\n case LowPriority:\n timeout = LOW_PRIORITY_TIMEOUT;\n break;\n\n case NormalPriority:\n default:\n timeout = NORMAL_PRIORITY_TIMEOUT;\n break;\n }\n\n var expirationTime = startTime + timeout;\n var newTask = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: startTime,\n expirationTime: expirationTime,\n sortIndex: -1\n };\n\n if (startTime > currentTime) {\n // This is a delayed task.\n newTask.sortIndex = startTime;\n push(timerQueue, newTask);\n\n if (peek(taskQueue) === null && newTask === peek(timerQueue)) {\n // All tasks are delayed, and this is the task with the earliest delay.\n if (isHostTimeoutScheduled) {\n // Cancel an existing timeout.\n cancelHostTimeout();\n } else {\n isHostTimeoutScheduled = true;\n } // Schedule a timeout.\n\n\n requestHostTimeout(handleTimeout, startTime - currentTime);\n }\n } else {\n newTask.sortIndex = expirationTime;\n push(taskQueue, newTask);\n // wait until the next time we yield.\n\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n }\n }\n\n return newTask;\n}\n\nfunction unstable_pauseExecution() {\n}\n\nfunction unstable_continueExecution() {\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n }\n}\n\nfunction unstable_getFirstCallbackNode() {\n return peek(taskQueue);\n}\n\nfunction unstable_cancelCallback(task) {\n // remove from the queue because you can't remove arbitrary nodes from an\n // array based heap, only the first one.)\n\n\n task.callback = null;\n}\n\nfunction unstable_getCurrentPriorityLevel() {\n return currentPriorityLevel;\n}\n\nvar isMessageLoopRunning = false;\nvar scheduledHostCallback = null;\nvar taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main\n// thread, like user events. By default, it yields multiple times per frame.\n// It does not attempt to align with frame boundaries, since most tasks don't\n// need to be frame aligned; for those that do, use requestAnimationFrame.\n\nvar frameInterval = frameYieldMs;\nvar startTime = -1;\n\nfunction shouldYieldToHost() {\n var timeElapsed = exports.unstable_now() - startTime;\n\n if (timeElapsed < frameInterval) {\n // The main thread has only been blocked for a really short amount of time;\n // smaller than a single frame. Don't yield yet.\n return false;\n } // The main thread has been blocked for a non-negligible amount of time. We\n\n\n return true;\n}\n\nfunction requestPaint() {\n\n}\n\nfunction forceFrameRate(fps) {\n if (fps < 0 || fps > 125) {\n // Using console['error'] to evade Babel and ESLint\n console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing frame rates higher than 125 fps is not supported');\n return;\n }\n\n if (fps > 0) {\n frameInterval = Math.floor(1000 / fps);\n } else {\n // reset the framerate\n frameInterval = frameYieldMs;\n }\n}\n\nvar performWorkUntilDeadline = function () {\n if (scheduledHostCallback !== null) {\n var currentTime = exports.unstable_now(); // Keep track of the start time so we can measure how long the main thread\n // has been blocked.\n\n startTime = currentTime;\n var hasTimeRemaining = true; // If a scheduler task throws, exit the current browser task so the\n // error can be observed.\n //\n // Intentionally not using a try-catch, since that makes some debugging\n // techniques harder. Instead, if `scheduledHostCallback` errors, then\n // `hasMoreWork` will remain true, and we'll continue the work loop.\n\n var hasMoreWork = true;\n\n try {\n hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);\n } finally {\n if (hasMoreWork) {\n // If there's more work, schedule the next message event at the end\n // of the preceding one.\n schedulePerformWorkUntilDeadline();\n } else {\n isMessageLoopRunning = false;\n scheduledHostCallback = null;\n }\n }\n } else {\n isMessageLoopRunning = false;\n } // Yielding to the browser will give it a chance to paint, so we can\n};\n\nvar schedulePerformWorkUntilDeadline;\n\nif (typeof localSetImmediate === 'function') {\n // Node.js and old IE.\n // There's a few reasons for why we prefer setImmediate.\n //\n // Unlike MessageChannel, it doesn't prevent a Node.js process from exiting.\n // (Even though this is a DOM fork of the Scheduler, you could get here\n // with a mix of Node.js 15+, which has a MessageChannel, and jsdom.)\n // https://github.com/facebook/react/issues/20756\n //\n // But also, it runs earlier which is the semantic we want.\n // If other browsers ever implement it, it's better to use it.\n // Although both of these would be inferior to native scheduling.\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\n} else if (typeof MessageChannel !== 'undefined') {\n // DOM and Worker environments.\n // We prefer MessageChannel because of the 4ms setTimeout clamping.\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else {\n // We should only fallback here in non-browser environments.\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\n}\n\nfunction requestHostCallback(callback) {\n scheduledHostCallback = callback;\n\n if (!isMessageLoopRunning) {\n isMessageLoopRunning = true;\n schedulePerformWorkUntilDeadline();\n }\n}\n\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\n\nfunction cancelHostTimeout() {\n localClearTimeout(taskTimeoutID);\n taskTimeoutID = -1;\n}\n\nvar unstable_requestPaint = requestPaint;\nvar unstable_Profiling = null;\n\nexports.unstable_IdlePriority = IdlePriority;\nexports.unstable_ImmediatePriority = ImmediatePriority;\nexports.unstable_LowPriority = LowPriority;\nexports.unstable_NormalPriority = NormalPriority;\nexports.unstable_Profiling = unstable_Profiling;\nexports.unstable_UserBlockingPriority = UserBlockingPriority;\nexports.unstable_cancelCallback = unstable_cancelCallback;\nexports.unstable_continueExecution = unstable_continueExecution;\nexports.unstable_forceFrameRate = forceFrameRate;\nexports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;\nexports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;\nexports.unstable_next = unstable_next;\nexports.unstable_pauseExecution = unstable_pauseExecution;\nexports.unstable_requestPaint = unstable_requestPaint;\nexports.unstable_runWithPriority = unstable_runWithPriority;\nexports.unstable_scheduleCallback = unstable_scheduleCallback;\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = unstable_wrapCallback;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/app.json b/dist/app.json index 370ae66..5ce1713 100644 --- a/dist/app.json +++ b/dist/app.json @@ -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":"保存词云图片到相册"}}} \ No newline at end of file +{"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":"我的"}]}} \ No newline at end of file diff --git a/dist/common.js b/dist/common.js index 71cf0ce..5ae916c 100644 --- a/dist/common.js +++ b/dist/common.js @@ -20,28 +20,31 @@ 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__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.Text, { - className: "login-guard-icon", - children: "\uD83D\uDD12" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.Text, { - className: "login-guard-title", - children: "\u8BF7\u5148\u767B\u5F55" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.Text, { - className: "login-guard-desc", - 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() { - return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({ - url: '/pages/profile/index' - }); - }, - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.Text, { - children: "\u53BB\u767B\u5F55" - }) - })] + 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" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.Text, { + className: "login-guard-title", + children: "\u8BF7\u5148\u767B\u5F55" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.Text, { + className: "login-guard-desc", + 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", + onTap: function onTap() { + return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({ + url: '/pages/profile/index' + }); + }, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_2__.Text, { + 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) { diff --git a/dist/common.js.map b/dist/common.js.map index ae0c239..7a7421e 100644 --- a/dist/common.js.map +++ b/dist/common.js.map @@ -1 +1 @@ -{"version":3,"file":"common.js","mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AAAA;AAEA;AAKA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;;;;;;;;;;;;;;;;;ACtBA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;ACpBA;AAEA;AAAA;AAQA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;;;;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxGA;AAGA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;AAEA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA","sources":["webpack://smart-engraving-miniapp/._src_components_LoginGuard_index.tsx","webpack://smart-engraving-miniapp/._src_components_ThemeToggle_index.tsx","webpack://smart-engraving-miniapp/._src_context_ThemeContext.tsx","webpack://smart-engraving-miniapp/._src_utils_productConfig.ts","webpack://smart-engraving-miniapp/._src_utils_store.ts"],"sourcesContent":["import Taro from '@tarojs/taro'\nimport { View, Text } from '@tarojs/components'\n\nexport default function LoginGuard(\n props: {\n children: React.ReactNode\n }\n) {\n const user = Taro.getStorageSync('smart_user_info')\n if (!user?.openid) {\n return (\n \n 🔒\n 请先登录\n 登录后查看您的专属内容\n Taro.switchTab({ url: '/pages/profile/index' })}>\n 去登录\n \n \n )\n }\n return props.children as any\n}\n","import { View, Text } from '@tarojs/components'\nimport Taro from '@tarojs/taro'\nimport { useCallback } from 'react'\nimport { useThemeContext } from '../../context/ThemeContext'\nimport './index.scss'\n\nexport default function ThemeToggle() {\n const { theme, toggleTheme } = useThemeContext()\n\n const handleToggle = useCallback(() => {\n // ThemeProvider 在 App.tsx 全局挂载,toggleTheme() 直接修改全局 state,\n // 不需要 eventCenter,所有页面会自动响应。\n toggleTheme()\n }, [toggleTheme])\n\n return (\n \n {theme === 'light' ? '🌙' : '☀️'}\n \n )\n}\n","import { createContext, useContext, useState, useCallback, useEffect } from 'react'\nimport Taro from '@tarojs/taro'\nimport { getTheme, setTheme as saveTheme, type ThemeMode } from '../utils/store'\n\ninterface ThemeContextValue {\n theme: ThemeMode\n toggleTheme: () => void\n setTheme: (t: ThemeMode) => void\n}\n\nconst ThemeContext = createContext({\n theme: 'light',\n toggleTheme: () => {},\n setTheme: () => {}\n})\n\nexport { ThemeContext }\n\nexport function ThemeProvider({ children }: { children: React.ReactNode }) {\n const [theme, set] = useState(getTheme())\n\n const setTheme = useCallback((t: ThemeMode) => {\n saveTheme(t)\n set(t)\n }, [])\n\n const toggleTheme = useCallback(() => {\n const next = theme === 'light' ? 'dark' : 'light'\n setTheme(next)\n }, [theme, setTheme])\n\n // eventCenter 监听已移除:ThemeContext 本身就在 App.tsx 全局挂载,\n // 所有页面共用一个 state,无需再靠事件广播。\n // 旧代码曾在此处监听 'theme:change' 并直接 set(参数),但 trigger 未传参数导致 theme 变成 undefined。\n\n\n return (\n \n {children}\n \n )\n}\n\nexport function useThemeContext(): ThemeContextValue {\n return useContext(ThemeContext)\n}\n","/**\n * 产品品类配置文件\n *\n * ⚠️ 重要:当实际产品尺寸确定后,请修改本文件中的 mask 参数\n * 修改后页面会自动生效,无需改动其他代码\n */\n\nimport { ProductCategory } from '../types'\n\nexport const PRODUCTS: ProductCategory[] = [\n {\n id: 'notebook-small',\n name: '微雕笔记本(小)',\n desc: '便携随行,记录点滴',\n icon: '📓',\n price: 12,\n leadTime: '3-5个工作日',\n description:\n '精选优质纸张,封面采用高档PU材质,手感细腻。内页可定制横线、方格或空白三种版式。激光微雕工艺将名字或图案精准刻印在封面,永不褪色。小巧轻便,适合随身携带,无论是课堂笔记还是日常备忘,都是你的专属伴侣。',\n images: ['/img/book_small/The1.jpg'],\n mask: {\n shape: 'rect',\n width: 300,\n height: 420,\n borderRadius: 8\n }\n },\n {\n id: 'notebook-large',\n name: '微雕笔记本(大)',\n desc: '大开本,更多创作空间',\n icon: '📔',\n price: 45,\n leadTime: '3-5个工作日',\n description:\n 'A4尺寸大开本,180°平摊设计,书写更自由。封面可选真皮、仿布纹或磨砂材质,激光微雕区域更大,适合呈现全班名字、团队口号或公司Logo等大篇幅内容。是毕业纪念、企业年会礼品的首选。',\n images: ['/img/book_big/The1.jpg', '/img/book_big/The2.jpg'],\n mask: {\n shape: 'rect',\n width: 340,\n height: 480,\n borderRadius: 8\n }\n },\n {\n id: 'coaster',\n name: '铜质杯垫',\n desc: '金属质感,桌面艺术',\n icon: '☕',\n price: 25,\n leadTime: '5-7个工作日',\n description:\n '采用优质黄铜材质,表面经拉丝工艺处理,呈现哑光金属质感。背面配有防滑软木垫,保护桌面同时防止滑动。激光微雕可在表面刻印名字、日期或祝福语,是乔迁新居、新婚贺礼的精致之选。',\n images: ['/img/cup/The1.jpg'],\n mask: {\n shape: 'circle',\n width: 280,\n height: 280\n }\n },\n {\n id: 'penbox',\n name: '竹制笔盒',\n desc: '自然竹纹,文房雅器',\n icon: '✏️',\n price: 75,\n leadTime: '7-10个工作日',\n description:\n '精选天然楠竹,经多道工序打磨抛光,保留天然竹纹肌理。盒盖采用磁吸开合,内部设有分层隔板。激光微雕在竹面上呈现深浅不一的雕刻效果,融入墨香气质。适合书房案头、书法爱好者的文房伴侣。',\n images: ['/img/penbox/The1.jpg', '/img/penbox/The2.jpg', '/img/penbox/The3.jpg'],\n mask: {\n shape: 'rect',\n width: 320,\n height: 160,\n borderRadius: 12\n }\n },\n {\n id: 'booklamp',\n name: '书本型灯',\n desc: '温暖光影,点亮心意',\n icon: '💡',\n price: 45,\n leadTime: '5-7个工作日',\n description:\n '开合式设计,打开即亮,合拢即灭,如魔法书般充满惊喜。采用LED暖光灯源,光线柔和不刺眼,可持续点亮6-8小时。封面激光微雕可定制文字、图案或照片,让温暖的灯光承载专属记忆。是情侣礼物、毕业礼物的创意之选。',\n images: ['/img/booklight/The1.jpg', '/img/booklight/The2.jpg'],\n mask: {\n shape: 'rect',\n width: 320,\n height: 240,\n borderRadius: 4\n }\n }\n]\n\n/** CATEGORIES 为 PRODUCTS 的别名,供页面引用 */\nexport const CATEGORIES = PRODUCTS\n\n/**\n * 根据产品ID查找品类配置\n */\nexport const getProductById = (id: string): ProductCategory | undefined => {\n return PRODUCTS.find(p => p.id === id)\n}\n","import Taro from '@tarojs/taro'\nimport type { DesignItem, OrderItem, AddressItem } from '../types'\n\nconst THEME_KEY = 'smart_theme'\nconst USER_KEY = 'smart_user_info'\nconst ACTIVE_USER_KEY = 'smart_active_openid'\n\n// ---------- 当前用户 openid 管理 ----------\n\nfunction getActiveOpenid(): string {\n const user = getUserInfoRaw()\n const openid = user?.openid || Taro.getStorageSync(ACTIVE_USER_KEY) || '_guest_'\n Taro.setStorageSync(ACTIVE_USER_KEY, openid)\n return openid\n}\n\nfunction key(scope: string): string {\n const prefix = getActiveOpenid()\n return `${scope}_${prefix}`\n}\n\n// ---------- 用户数据 ----------\n\nconst USER_REGISTRY_KEY = 'smart_user_registry'\nconst ADMIN_PASSWORD = 'zhihui2024'\n\n// ---------- 用户注册表 ----------\n\nfunction getUserRegistry(): string[] {\n try { return Taro.getStorageSync(USER_REGISTRY_KEY) || [] } catch { return [] }\n}\n\nfunction saveToRegistry(openid: string) {\n const list = getUserRegistry()\n if (!list.includes(openid)) {\n list.push(openid)\n Taro.setStorageSync(USER_REGISTRY_KEY, list)\n }\n}\n\nfunction removeFromRegistry(openid: string) {\n const list = getUserRegistry().filter(id => id !== openid)\n Taro.setStorageSync(USER_REGISTRY_KEY, list)\n}\n\n// ---------- 用户数据 ----------\n\nexport function getUserInfoRaw(): any {\n try { return Taro.getStorageSync(USER_KEY) } catch { return null }\n}\n\nexport function setUserInfoRaw(info: any) {\n Taro.setStorageSync(USER_KEY, info)\n if (info?.openid) {\n Taro.setStorageSync(ACTIVE_USER_KEY, info.openid)\n // 为每个用户备份独立副本,方便切换账号时读取\n Taro.setStorageSync(`user_info_${info.openid}`, info)\n saveToRegistry(info.openid)\n }\n}\n\nexport function getUserInfoByOpenid(openid: string): any | null {\n try {\n const backup = Taro.getStorageSync(`user_info_${openid}`)\n if (backup) return backup\n } catch {}\n const current = getUserInfoRaw()\n if (current?.openid === openid) return current\n return null\n}\n\nexport function clearUserInfo() {\n // 仅退出登录,不删除用户数据\n Taro.removeStorageSync(USER_KEY)\n Taro.removeStorageSync(ACTIVE_USER_KEY)\n}\n\nexport function setUserInfo(info: any) {\n setUserInfoRaw(info)\n}\n\nexport function getUserInfo() {\n return getUserInfoRaw()\n}\n\n// ---------- 用户数据库管理 ----------\n\nexport function listAllUsers() {\n const registry = getUserRegistry()\n return registry.map(openid => {\n const info = getUserInfoByOpenid(openid)\n const dList = getDesignListFor(openid)\n const oList = getOrderListFor(openid)\n return {\n openid,\n nickName: info?.nickName || '未知用户',\n avatarUrl: info?.avatarUrl || '',\n loginAt: info?.loginAt || 0,\n designCount: dList.length,\n orderCount: oList.length\n }\n })\n}\n\nexport function createUser(nickName: string, avatarUrl?: string) {\n const openid = 'mock_' + Date.now().toString(36) + '_' + Math.random().toString(36).slice(2, 6)\n const info = { openid, nickName: nickName || '微信用户', avatarUrl: avatarUrl || '', loginAt: Date.now() }\n setUserInfoRaw(info)\n return info\n}\n\nexport function switchUser(openid: string) {\n const info = getUserInfoByOpenid(openid)\n if (!info) return false\n Taro.setStorageSync(USER_KEY, info)\n Taro.setStorageSync(ACTIVE_USER_KEY, openid)\n return true\n}\n\nexport function deleteUser(openid: string) {\n // 删除该用户的所有数据\n Taro.removeStorageSync(`user_info_${openid}`)\n Taro.removeStorageSync(`design_list_${openid}`)\n Taro.removeStorageSync(`order_list_${openid}`)\n Taro.removeStorageSync(`address_list_${openid}`)\n removeFromRegistry(openid)\n // 如果删的是当前登录用户,清掉登录态\n const current = getUserInfoRaw()\n if (current?.openid === openid) {\n clearUserInfo()\n }\n}\n\nexport function verifyAdminPassword(password: string): boolean {\n return password === ADMIN_PASSWORD\n}\n\n// ---------- 跨用户读取辅助函数 ----------\n\nfunction keyFor(scope: string, openid: string) {\n return `${scope}_${openid}`\n}\n\nfunction getDesignListFor(openid: string): DesignItem[] {\n try { return Taro.getStorageSync(keyFor('design_list', openid)) || [] } catch { return [] }\n}\n\nfunction getOrderListFor(openid: string): OrderItem[] {\n try { return Taro.getStorageSync(keyFor('order_list', openid)) || [] } catch { return [] }\n}\n\n// ---------- 设计清单 ----------\n\nexport function getDesignList(): DesignItem[] {\n try { return Taro.getStorageSync(key('design_list')) || [] } catch { return [] }\n}\n\nexport function setDesignList(list: DesignItem[]) {\n Taro.setStorageSync(key('design_list'), list)\n}\n\nexport function addDesign(product: any, count: number): DesignItem {\n const list = getDesignList()\n const item: DesignItem = {\n id: 'DSG' + Date.now(),\n productId: product.id,\n productName: product.name,\n productIcon: product.icon,\n unitPrice: product.price,\n count,\n status: 'undesigned',\n createdAt: new Date().toISOString().slice(0, 10)\n }\n setDesignList([...list, item])\n return item\n}\n\nexport function updateDesign(id: string, patch: Partial) {\n const list = getDesignList()\n const idx = list.findIndex(d => d.id === id)\n if (idx === -1) return\n list[idx] = { ...list[idx], ...patch }\n setDesignList(list)\n}\n\n// ---------- 订单 ----------\n\nexport function getOrderList(): OrderItem[] {\n try { return Taro.getStorageSync(key('order_list')) || [] } catch { return [] }\n}\n\nexport function setOrderList(list: OrderItem[]) {\n Taro.setStorageSync(key('order_list'), list)\n}\n\nexport function designToOrder(designId: string): OrderItem | null {\n const dList = getDesignList()\n const oList = getOrderList()\n const design = dList.find(d => d.id === designId)\n if (!design) return null\n\n const order: OrderItem = {\n id: 'ORD' + Date.now().toString().slice(-9),\n productName: design.productName,\n productIcon: design.productIcon,\n statusCode: 'pending',\n date: new Date().toLocaleString('zh-CN', { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' }).replace(/\\//g, '-'),\n price: '¥' + (design.unitPrice * design.count).toFixed(2),\n count: design.count,\n sku: `${design.productName} × ${design.count}`\n }\n\n const dIdx = dList.findIndex(d => d.id === designId)\n if (dIdx !== -1) {\n dList[dIdx].status = 'ordered'\n dList[dIdx].orderId = order.id\n }\n\n setDesignList(dList)\n setOrderList([order, ...oList])\n return order\n}\n\n// ---------- 主题 ----------\n\nexport type ThemeMode = 'light' | 'dark'\n\nexport function getTheme(): ThemeMode {\n try { return Taro.getStorageSync(THEME_KEY) || 'light' } catch { return 'light' }\n}\n\nexport function setTheme(theme: ThemeMode) {\n Taro.setStorageSync(THEME_KEY, theme)\n}\n\n// ---------- 收货地址 ----------\n\nexport function getAddressList(): AddressItem[] {\n try { return Taro.getStorageSync(key('address_list')) || [] } catch { return [] }\n}\n\nexport function setAddressList(list: AddressItem[]) {\n Taro.setStorageSync(key('address_list'), list)\n}\n\nexport function addAddress(addr: Omit): AddressItem {\n const list = getAddressList()\n const item: AddressItem = { ...addr, id: 'ADR' + Date.now() }\n // 若设为默认,取消其他默认\n if (item.isDefault) {\n list.forEach(a => { a.isDefault = false })\n }\n setAddressList([item, ...list])\n return item\n}\n\nexport function updateAddress(id: string, patch: Partial) {\n const list = getAddressList()\n const idx = list.findIndex(a => a.id === id)\n if (idx === -1) return\n if (patch.isDefault) list.forEach(a => { a.isDefault = false })\n list[idx] = { ...list[idx], ...patch }\n setAddressList(list)\n}\n\nexport function deleteAddress(id: string) {\n const list = getAddressList().filter(a => a.id !== id)\n setAddressList(list)\n}\n\nexport function getDefaultAddress(): AddressItem | undefined {\n return getAddressList().find(a => a.isDefault)\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"common.js","mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AAAA;AAEA;AAKA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AACA;;;;;;;;;;;;;;;;;ACxBA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;ACpBA;AAEA;AAAA;AAQA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrIA;AAEA;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;AAEA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA","sources":["webpack://smart-engraving-miniapp/._src_components_LoginGuard_index.tsx","webpack://smart-engraving-miniapp/._src_components_ThemeToggle_index.tsx","webpack://smart-engraving-miniapp/._src_context_ThemeContext.tsx","webpack://smart-engraving-miniapp/._src_utils_productConfig.ts","webpack://smart-engraving-miniapp/._src_utils_store.ts"],"sourcesContent":["import Taro from '@tarojs/taro'\nimport { View, Text } from '@tarojs/components'\n\nexport default function LoginGuard(\n props: {\n children: React.ReactNode\n }\n) {\n const user = Taro.getStorageSync('smart_user_info')\n if (!user?.openid) {\n return (\n \n \n 🔒\n 请先登录\n 登录后查看您的专属内容\n Taro.switchTab({ url: '/pages/profile/index' })}>\n 去登录\n \n \n \n )\n }\n return props.children as any\n}\n","import { View, Text } from '@tarojs/components'\nimport Taro from '@tarojs/taro'\nimport { useCallback } from 'react'\nimport { useThemeContext } from '../../context/ThemeContext'\nimport './index.scss'\n\nexport default function ThemeToggle() {\n const { theme, toggleTheme } = useThemeContext()\n\n const handleToggle = useCallback(() => {\n // ThemeProvider 在 App.tsx 全局挂载,toggleTheme() 直接修改全局 state,\n // 不需要 eventCenter,所有页面会自动响应。\n toggleTheme()\n }, [toggleTheme])\n\n return (\n \n {theme === 'light' ? '🌙' : '☀️'}\n \n )\n}\n","import { createContext, useContext, useState, useCallback, useEffect } from 'react'\nimport Taro from '@tarojs/taro'\nimport { getTheme, setTheme as saveTheme, type ThemeMode } from '../utils/store'\n\ninterface ThemeContextValue {\n theme: ThemeMode\n toggleTheme: () => void\n setTheme: (t: ThemeMode) => void\n}\n\nconst ThemeContext = createContext({\n theme: 'light',\n toggleTheme: () => {},\n setTheme: () => {}\n})\n\nexport { ThemeContext }\n\nexport function ThemeProvider({ children }: { children: React.ReactNode }) {\n const [theme, set] = useState(getTheme())\n\n const setTheme = useCallback((t: ThemeMode) => {\n saveTheme(t)\n set(t)\n }, [])\n\n const toggleTheme = useCallback(() => {\n const next = theme === 'light' ? 'dark' : 'light'\n setTheme(next)\n }, [theme, setTheme])\n\n // eventCenter 监听已移除:ThemeContext 本身就在 App.tsx 全局挂载,\n // 所有页面共用一个 state,无需再靠事件广播。\n // 旧代码曾在此处监听 'theme:change' 并直接 set(参数),但 trigger 未传参数导致 theme 变成 undefined。\n\n\n return (\n \n {children}\n \n )\n}\n\nexport function useThemeContext(): ThemeContextValue {\n return useContext(ThemeContext)\n}\n","/**\n * 产品品类配置文件\n *\n * ⚠️ 重要:当实际产品尺寸确定后,请修改本文件中的 mask 参数\n * 修改后页面会自动生效,无需改动其他代码\n */\n\nimport { ProductCategory } from '../types'\n\nexport const PRODUCTS: ProductCategory[] = [\n {\n id: 'notebook-small',\n name: '微雕笔记本(小)',\n desc: '便携随行,记录点滴',\n icon: '📓',\n iconImg: '/icon/书本.png',\n price: 12,\n leadTime: '3-5个工作日',\n description:\n '精选优质纸张,封面采用高档PU材质,手感细腻。内页可定制横线、方格或空白三种版式。激光微雕工艺将名字或图案精准刻印在封面,永不褪色。小巧轻便,适合随身携带,无论是课堂笔记还是日常备忘,都是你的专属伴侣。',\n images: ['/img/book_small/The1.jpg'],\n mask: {\n shape: 'rect',\n width: 300,\n height: 420,\n borderRadius: 8\n }\n },\n {\n id: 'notebook-large',\n name: '微雕笔记本(大)',\n desc: '大开本,更多创作空间',\n icon: '📔',\n iconImg: '/icon/书本_大.png',\n price: 45,\n leadTime: '3-5个工作日',\n description:\n 'A4尺寸大开本,180°平摊设计,书写更自由。封面可选真皮、仿布纹或磨砂材质,激光微雕区域更大,适合呈现全班名字、团队口号或公司Logo等大篇幅内容。是毕业纪念、企业年会礼品的首选。',\n images: ['/img/book_big/The1.jpg', '/img/book_big/The2.jpg'],\n mask: {\n shape: 'rect',\n width: 340,\n height: 480,\n borderRadius: 8\n }\n },\n {\n id: 'coaster',\n name: '铜质杯垫',\n desc: '金属质感,桌面艺术',\n icon: '☕',\n iconImg: '/icon/杯子.png',\n price: 25,\n leadTime: '5-7个工作日',\n description:\n '采用优质黄铜材质,表面经拉丝工艺处理,呈现哑光金属质感。背面配有防滑软木垫,保护桌面同时防止滑动。激光微雕可在表面刻印名字、日期或祝福语,是乔迁新居、新婚贺礼的精致之选。',\n images: ['/img/cup/The1.jpg'],\n mask: {\n shape: 'circle',\n width: 280,\n height: 280\n }\n },\n {\n id: 'penbox',\n name: '竹制笔盒',\n desc: '自然竹纹,文房雅器',\n icon: '✏️',\n iconImg: '/icon/笔盒.png',\n price: 75,\n leadTime: '7-10个工作日',\n description:\n '精选天然楠竹,经多道工序打磨抛光,保留天然竹纹肌理。盒盖采用磁吸开合,内部设有分层隔板。激光微雕在竹面上呈现深浅不一的雕刻效果,融入墨香气质。适合书房案头、书法爱好者的文房伴侣。',\n images: ['/img/penbox/The1.jpg', '/img/penbox/The2.jpg', '/img/penbox/The3.jpg'],\n mask: {\n shape: 'rect',\n width: 320,\n height: 160,\n borderRadius: 12\n }\n },\n {\n id: 'booklamp',\n name: '书本型灯',\n desc: '温暖光影,点亮心意',\n icon: '💡',\n iconImg: '/icon/书灯.png',\n price: 45,\n leadTime: '5-7个工作日',\n description:\n '开合式设计,打开即亮,合拢即灭,如魔法书般充满惊喜。采用LED暖光灯源,光线柔和不刺眼,可持续点亮6-8小时。封面激光微雕可定制文字、图案或照片,让温暖的灯光承载专属记忆。是情侣礼物、毕业礼物的创意之选。',\n images: ['/img/booklight/The1.jpg', '/img/booklight/The2.jpg'],\n mask: {\n shape: 'rect',\n width: 320,\n height: 240,\n borderRadius: 4\n }\n }\n]\n\n/** CATEGORIES 为 PRODUCTS 的别名,供页面引用 */\nexport const CATEGORIES = PRODUCTS\n\n/**\n * 根据产品ID查找品类配置\n */\nexport const getProductById = (id: string): ProductCategory | undefined => {\n return PRODUCTS.find(p => p.id === id)\n}\n\n/**\n * 产品 ID 到 icon 图片路径的映射\n * 用于兼容旧数据(旧数据 productIcon 存的是 emoji)\n */\nexport const PRODUCT_ICON_MAP: Record = {\n 'notebook-small': '/icon/书本.png',\n 'notebook-large': '/icon/书本_大.png',\n 'coaster': '/icon/杯子.png',\n 'penbox': '/icon/笔盒.png',\n 'booklamp': '/icon/书灯.png'\n}\n\n/**\n * 获取商品对应的 icon 图片路径\n * - 新数据:直接返回 product.iconImg\n * - 旧数据:通过 productId 查映射表\n * - 兜底:返回四角星\n */\nexport function getProductIconImg(product: any): string {\n if (product?.iconImg) return product.iconImg\n if (product?.id) return PRODUCT_ICON_MAP[product.id] || '/icon/四角星.png'\n return '/icon/四角星.png'\n}\n","import Taro from '@tarojs/taro'\nimport type { DesignItem, OrderItem, AddressItem } from '../types'\nimport { PRODUCT_ICON_MAP } from './productConfig'\n\nconst THEME_KEY = 'smart_theme'\nconst USER_KEY = 'smart_user_info'\nconst ACTIVE_USER_KEY = 'smart_active_openid'\n\n// ---------- 当前用户 openid 管理 ----------\n\nfunction getActiveOpenid(): string {\n const user = getUserInfoRaw()\n const openid = user?.openid || Taro.getStorageSync(ACTIVE_USER_KEY) || '_guest_'\n Taro.setStorageSync(ACTIVE_USER_KEY, openid)\n return openid\n}\n\nfunction key(scope: string): string {\n const prefix = getActiveOpenid()\n return `${scope}_${prefix}`\n}\n\n// ---------- 用户数据 ----------\n\nconst USER_REGISTRY_KEY = 'smart_user_registry'\nconst ADMIN_PASSWORD = 'zhihui2024'\n\n// ---------- 用户注册表 ----------\n\nfunction getUserRegistry(): string[] {\n try { return Taro.getStorageSync(USER_REGISTRY_KEY) || [] } catch { return [] }\n}\n\nfunction saveToRegistry(openid: string) {\n const list = getUserRegistry()\n if (!list.includes(openid)) {\n list.push(openid)\n Taro.setStorageSync(USER_REGISTRY_KEY, list)\n }\n}\n\nfunction removeFromRegistry(openid: string) {\n const list = getUserRegistry().filter(id => id !== openid)\n Taro.setStorageSync(USER_REGISTRY_KEY, list)\n}\n\n// ---------- 用户数据 ----------\n\nexport function getUserInfoRaw(): any {\n try { return Taro.getStorageSync(USER_KEY) } catch { return null }\n}\n\nexport function setUserInfoRaw(info: any) {\n Taro.setStorageSync(USER_KEY, info)\n if (info?.openid) {\n Taro.setStorageSync(ACTIVE_USER_KEY, info.openid)\n // 为每个用户备份独立副本,方便切换账号时读取\n Taro.setStorageSync(`user_info_${info.openid}`, info)\n saveToRegistry(info.openid)\n }\n}\n\nexport function getUserInfoByOpenid(openid: string): any | null {\n try {\n const backup = Taro.getStorageSync(`user_info_${openid}`)\n if (backup) return backup\n } catch {}\n const current = getUserInfoRaw()\n if (current?.openid === openid) return current\n return null\n}\n\nexport function clearUserInfo() {\n // 仅退出登录,不删除用户数据\n Taro.removeStorageSync(USER_KEY)\n Taro.removeStorageSync(ACTIVE_USER_KEY)\n}\n\nexport function setUserInfo(info: any) {\n setUserInfoRaw(info)\n}\n\nexport function getUserInfo() {\n return getUserInfoRaw()\n}\n\n// ---------- 用户数据库管理 ----------\n\nexport function listAllUsers() {\n const registry = getUserRegistry()\n return registry.map(openid => {\n const info = getUserInfoByOpenid(openid)\n const dList = getDesignListFor(openid)\n const oList = getOrderListFor(openid)\n return {\n openid,\n nickName: info?.nickName || '未知用户',\n avatarUrl: info?.avatarUrl || '',\n loginAt: info?.loginAt || 0,\n designCount: dList.length,\n orderCount: oList.length\n }\n })\n}\n\nexport function createUser(nickName: string, avatarUrl?: string) {\n const openid = 'mock_' + Date.now().toString(36) + '_' + Math.random().toString(36).slice(2, 6)\n const info = { openid, nickName: nickName || '微信用户', avatarUrl: avatarUrl || '', loginAt: Date.now() }\n setUserInfoRaw(info)\n return info\n}\n\nexport function switchUser(openid: string) {\n const info = getUserInfoByOpenid(openid)\n if (!info) return false\n Taro.setStorageSync(USER_KEY, info)\n Taro.setStorageSync(ACTIVE_USER_KEY, openid)\n return true\n}\n\nexport function deleteUser(openid: string) {\n // 删除该用户的所有数据\n Taro.removeStorageSync(`user_info_${openid}`)\n Taro.removeStorageSync(`design_list_${openid}`)\n Taro.removeStorageSync(`order_list_${openid}`)\n Taro.removeStorageSync(`address_list_${openid}`)\n removeFromRegistry(openid)\n // 如果删的是当前登录用户,清掉登录态\n const current = getUserInfoRaw()\n if (current?.openid === openid) {\n clearUserInfo()\n }\n}\n\nexport function verifyAdminPassword(password: string): boolean {\n return password === ADMIN_PASSWORD\n}\n\n// ---------- 跨用户读取辅助函数 ----------\n\nfunction keyFor(scope: string, openid: string) {\n return `${scope}_${openid}`\n}\n\nfunction getDesignListFor(openid: string): DesignItem[] {\n try { return Taro.getStorageSync(keyFor('design_list', openid)) || [] } catch { return [] }\n}\n\nfunction getOrderListFor(openid: string): OrderItem[] {\n try { return Taro.getStorageSync(keyFor('order_list', openid)) || [] } catch { return [] }\n}\n\n// ---------- 设计清单 ----------\n\nexport function getDesignList(): DesignItem[] {\n try { return Taro.getStorageSync(key('design_list')) || [] } catch { return [] }\n}\n\nexport function setDesignList(list: DesignItem[]) {\n Taro.setStorageSync(key('design_list'), list)\n}\n\nexport function addDesign(product: any, count: number): DesignItem {\n const list = getDesignList()\n const iconImg = product?.iconImg || PRODUCT_ICON_MAP[product?.id] || '/icon/四角星.png'\n const item: DesignItem = {\n id: 'DSG' + Date.now(),\n productId: product.id,\n productName: product.name,\n productIcon: iconImg,\n unitPrice: product.price,\n count,\n status: 'undesigned',\n createdAt: new Date().toISOString().slice(0, 10)\n }\n setDesignList([...list, item])\n return item\n}\n\nexport function updateDesign(id: string, patch: Partial) {\n const list = getDesignList()\n const idx = list.findIndex(d => d.id === id)\n if (idx === -1) return\n list[idx] = { ...list[idx], ...patch }\n setDesignList(list)\n}\n\n// ---------- 订单 ----------\n\nexport function getOrderList(): OrderItem[] {\n try { return Taro.getStorageSync(key('order_list')) || [] } catch { return [] }\n}\n\nexport function setOrderList(list: OrderItem[]) {\n Taro.setStorageSync(key('order_list'), list)\n}\n\nexport function designToOrder(designId: string): OrderItem | null {\n const dList = getDesignList()\n const oList = getOrderList()\n const design = dList.find(d => d.id === designId)\n if (!design) return null\n\n const iconImg = design.productIcon?.startsWith('/icon/')\n ? design.productIcon\n : PRODUCT_ICON_MAP[design.productId] || '/icon/四角星.png'\n\n const order: OrderItem = {\n id: 'ORD' + Date.now().toString().slice(-9),\n productName: design.productName,\n productIcon: iconImg,\n statusCode: 'pending',\n date: new Date().toLocaleString('zh-CN', { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' }).replace(/\\//g, '-'),\n price: '¥' + (design.unitPrice * design.count).toFixed(2),\n count: design.count,\n sku: `${design.productName} × ${design.count}`\n }\n\n const dIdx = dList.findIndex(d => d.id === designId)\n if (dIdx !== -1) {\n dList[dIdx].status = 'ordered'\n dList[dIdx].orderId = order.id\n }\n\n setDesignList(dList)\n setOrderList([order, ...oList])\n return order\n}\n\n// ---------- 主题 ----------\n\nexport type ThemeMode = 'light' | 'dark'\n\nexport function getTheme(): ThemeMode {\n try { return Taro.getStorageSync(THEME_KEY) || 'light' } catch { return 'light' }\n}\n\nexport function setTheme(theme: ThemeMode) {\n Taro.setStorageSync(THEME_KEY, theme)\n}\n\n// ---------- 收货地址 ----------\n\nexport function getAddressList(): AddressItem[] {\n try { return Taro.getStorageSync(key('address_list')) || [] } catch { return [] }\n}\n\nexport function setAddressList(list: AddressItem[]) {\n Taro.setStorageSync(key('address_list'), list)\n}\n\nexport function addAddress(addr: Omit): AddressItem {\n const list = getAddressList()\n const item: AddressItem = { ...addr, id: 'ADR' + Date.now() }\n // 若设为默认,取消其他默认\n if (item.isDefault) {\n list.forEach(a => { a.isDefault = false })\n }\n setAddressList([item, ...list])\n return item\n}\n\nexport function updateAddress(id: string, patch: Partial) {\n const list = getAddressList()\n const idx = list.findIndex(a => a.id === id)\n if (idx === -1) return\n if (patch.isDefault) list.forEach(a => { a.isDefault = false })\n list[idx] = { ...list[idx], ...patch }\n setAddressList(list)\n}\n\nexport function deleteAddress(id: string) {\n const list = getAddressList().filter(a => a.id !== id)\n setAddressList(list)\n}\n\nexport function getDefaultAddress(): AddressItem | undefined {\n return getAddressList().find(a => a.isDefault)\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/custom-tab-bar/index.js b/dist/custom-tab-bar/index.js index b7f1532..dd950c0 100644 --- a/dist/custom-tab-bar/index.js +++ b/dist/custom-tab-bar/index.js @@ -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 diff --git a/dist/custom-tab-bar/index.js.map b/dist/custom-tab-bar/index.js.map index 57e5bc6..8d67cc6 100644 --- a/dist/custom-tab-bar/index.js.map +++ b/dist/custom-tab-bar/index.js.map @@ -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":""} \ No newline at end of file +{"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":""} \ No newline at end of file diff --git a/dist/custom-tab-bar/index.wxss b/dist/custom-tab-bar/index.wxss index b31f3e6..fb2bafc 100644 --- a/dist/custom-tab-bar/index.wxss +++ b/dist/custom-tab-bar/index.wxss @@ -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 { diff --git a/dist/icon/三角尺.png b/dist/icon/三角尺.png new file mode 100644 index 0000000000000000000000000000000000000000..abc5233434d23088938581d3c4debbf5148fc74b GIT binary patch literal 3662 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 Tvk%@PJ1EG|+~BF6JN5qnyR>@- literal 0 HcmV?d00001 diff --git a/dist/icon/个人.png b/dist/icon/个人.png new file mode 100644 index 0000000000000000000000000000000000000000..d3dd97877a3a46ee144cb6e9739ecde6d7ff768b GIT binary patch literal 11791 zcmYM4bx<4O*2as3;suHp3s9^$l;9BDp*Y3egL{$U7F=7PxD|&0MM^2|?poZTI0XCB zd*{yg$7W|TXW!Y`eb1ifJm(knK}8k^^9|;U7cX$+<)qXR=l*{OIvV1)Qn%{cix+q= zFUJF10S)j`!!ndqgMk_DGfLijMAWh!bbq*AimxBr555g3 zO-}v1sX93Mu5$BTL`&m7FyQ%lZdJ=r>sbDDiWXJ-8V8qsZSF?ViJefP95bXSkmI&% zj__gfO8S?(+XVF!K72O+l;-FY_Hn$8zFq86d~N*uLbl+S{&OTuA$7pl{!YcXiK+f< zu4W}9ODqYY%rzDROC2zR1i#9 zgICJ*wouvNHkWL&Yvr}4L^d2!nL75%0f2isNxk#j(`j8aOK}FcV;=6o_k&Q!#TWX1 z^HNJ4Q~CtJaTYwqztKHOr}srSh}(^|QN6k;GiFxviq@WsR;R{S>x=FufO&F^W30fC z8krE6+0ZSKRsXUb_IfS08wE{Afn7{)Nr&&MrSwY*_S7o3$n~bb0Iw#_+ix%FuQA#u zWMM4(ZmX2`VUKLA3ECM;f?vWqe@75Kt}D85KPFsXzG~?IXwy|Wm4P#GiGR!rS6Va2 z{wxiuIBX*l@(409Y8Ok|5U!YuzCP(1_{%6YP%cEBhWqiwzbF7#nQ47sM8!bpVs;f6 zGpy^Hl`vck+I*XxkuLT*_y_vo_LoSRaA+i#nuG%tP@BuDgI$uLu_qcP&>#Va+A5Np%iWP!4>sW7DDgn!--I!|D3mK`^L zB){K+yx?VWCk_a_{c1D01XS=RT@&W$r#f0OOEdyQqj``qtDAB=9?tdF&nZ$0`nonMLz8AuXe82`kswtTeYLwp|MLg#_{*CcE)0& zpJey_SY%`_)|q4-dO6}pWGKC6`a11RE%{(hY9lh`hwT!DX#q0yJ~xG}-I`4X3PX-b z+S5x~kI3^aX>oqIFf2V62le+}or%Mx9BlLKxy;5|yK};A{zt5*-LmYP$?yV{dD+!n zHDXJ3kjDodEk*byfhNc&U10y912vr9PF<1tIS^6S*>^5j1a(>wCcwc`Gsk5L*DF+^P@Tv zNS^YaU#}{U6)CW~Lu*Z;i;m!EOgDXC&+o~XjBtiiqRQ1&S}HT3y=IC*9;|KO>2>n+ z=Pltjg1CV1-0e@_fVvl@H`+JV<56{I}9RWpN=X*uP{%-Ct7#Zm#$$y%%G-$2AmL#?kg!s2E0IB+@> zHG*pss~uO{JpDf9w>_#-?_v4pJ6+<7!c5;4$6FqeO70DfB*h?~JxX48%CGTpD*tHf z=@$(K8kI>?#uXf|XKWe^fIx7$7!OY+VgG{o%T&=RFVZQ!z*K`#UGC!X)I0hM05`ub zTvnCg6p!tB`rZ3P(k7dU5+xZ`w#v}$`0#Z(^0?B<^Im0k|Kii`&$@W8`Q*_IBI(Ts z=ihwrN_jg42wuMxRvoC+v#`bbu$V99FK-S5o3+tn%Q{g|Q#);EwE@@*Ig&{6u*@VJ zBJp8`aWOJVWct0N=RB0ur#3$6pY228?cm@F4OSRG=Fo>p>MpLnAA_n>d)Z0-p5duRWHUwec=y|T84rW;y%@;Si?%) zLTdcLq-oXIT{wZzo9icCI`C1X=?m5n#jw874df|X$kIcXCG32qG_so98&nJApiEe2=Ml% z(8G+;E0Cr(#JCfYITfY@fGed!`J3pjp+S*)bo+jB<=b+ClN5#S6<}v~Z)Djl&6AEE z`hI(2)+~MoY}r%Sj@-T^T4X4a`R|NEnlyn<19{1`7-$?JIz=x`%V@{!ucxr8G{YyE?Kmz|V%aBk-G zUWAK^HnST-nscfGH%qxy!{VO8$>=+#SH$(lh_gCnflIDsiJfx% zdR^(*M?@0v3dRozB<`yNCfAjPw3PAy7AT2+&-1)YBK=Ka!OoD#mCV9T3jnBEz)VI3him?vOpyy~+t26xrQAH~;yr z8pCSI-g53VmaY)=2mP9BV&h@;9ovLU>fqj3BOkl!v-ukjf?_fI&?%b4_cECJHzXQ- zkX*LL;g9*&?3|2Q5DE5PfqhmJa`O$u#+zJEGO;U?{z->Dx7I#V=m){U#r@g1_bO1< z{h?|}lE>sR4;BWRXvCi1v_N(XZeH(JV%W0C%3M|%Cm@L=*nY^QP}my0eab?`bx$H% zyD>OnzIx3DXUm2ad~;kx2sHDbPr^s$j-0Xv5G@Q>H-+6e0QZb}O;!7>QER&#{N(XE zu;(2L?-#lSw=v5xgivjYB7V9y-8ss%#B(UDg!#-qWj$yN;rH#zU)Ii0czDe=gKxW- z^ah&azUTD99EhAkJhx6smpVFrzhpNU*ZFPvaSlcDrNdm`q}Ado(sq<)uRwn2%gGW$ zR4&;sSh=iCW?bzap~z0&i19$2Maat{J=q>^~t2V**cWSaWBV z3+z+8UX@_25E1%L1B-OISF_Dl*8>f8kGts!F#a^1{qymf(irMh0lBgs z;P~{%lALnvhGM8m}Ug)^>9j8ikoKWmkRgTO8xVg@joAtW)Jw){KRU!QgOS0FL zx&e4`24Xb;Pqat3jzau3mOEc3qVR1U8Kaaftl`79b{hei(2I;ejlaLde5+$h zt`pyU&?bS)P}9)yDU!ym_87Qw>C$+8=>oNB0|L2V!3QlP2rH^cqod@i1XH^%QrTnh)p9$PPea-z?^RPJA#Ro1sj&X)LT zJmV!)rJ~N$lwp1i+5^mFIgT#Cz|lS1G0p_*+`ht*_O}A$BDl9N!JcSe&j@Ut?l=OQ zubIumLHLsli&kYPQ0W*mY}N%qS)(DY`;eM6ufFD$?#p68zDMYUq^A?Db%Y~ZCkt5U zXzV<0cO>&UfS%jLpQ$<4MMXTL)0*zCTWtG4&>%3VjeD&Iyn89ksTlhJ;pLEevASO1IU)%WGf4BU8uPOgsXKYXY&MwE}buKqdcRuXzGhaLcTN$4X<5j{Q zs2AV)`YG1ce-wFQupOMz&-UZU(-`!JyGeqj2bs(4!#jnuFL-pRW%vv8jv?}PXbgni z%jUR?(GxhXKOGU(`z1A+^bmwdI^VDz-lUZ*`jg-(?pxIIr#t#Aj68hh%qY9YHT%L@ ziq~{5$F!~k;yZ$F?cZWOu%z}y5gVCK?efy=ka^&|UBdL1H{X)_H8~gGuc1)(q4$5+ z`(&<>l1a(wHjeOST>s+h$4pZQ7&n1ov$KHUcMm7Gw?7`WQ1w+OOKy~^WGlFrh*NU0UGp=5mDf>TlFt;g-#+x}kY z{E-71qH7OFhSqSU%z(H{45UW;ntx@d3K2$XC!S#(Vt>3jL$&RF7FdK{b8~4kH@$RM zvS`ZeT_)jiScC-f_%|59+I2NKZoHWA)CS=+G!%*Fg1(WngQZ|_dL{?j7jW#?GLBrH z&f>%>l`Da5i|pkbEudl=MJM?cZlk*$){axNkU-8k{)JY7ZK!oXd2h z+^p;5b=K`4JshRhEoCQDl(j~xpw#XBb|DbR&VQyuU7lrNBrZwt;48k=us>H01r_ODSHCLr00qL?6Y}76j72+JJ6)urnDB1ZR$u5YZj(LD<;X z9AR|TQuQCHwv^34*kpygZ^&rrKUs`>GA6V7l|{rRkE(FaxK3T$cInL8(SUqfz{0A( z*jLRjWEEFsUwM~9sbFf0pU5Ix&A9$8t`xG7P{3nv+5(oEPBgolP8HQv;8*jzn5|dn-T&ff?~y0`FC=9@@$~e{ zs!3~p#1h^Lm%!$x3f%&vnoddiwuQu4niTXus@Vi#tp6@OFG%)#$v zd{bG=Rn(xRJhFsKxYST=o}O+wUF#^jX1g16$%e0`#F0$pZg^SU?mc^4L?Bg`O-4ZK zS7Asrhm$?|5`=RA1@~G&zY>G6e^8YF2kMCTZ~3tdE*D&MzS#JRkS{WP2Jh5P*@z?3 zgG6<(AjQYwGGgjo-3h|?7JA(vYqi%b_iev_8|%kXaSh?X~hqO>HVEUQDrso6Mi2dWERd zb%IkYi2uyv^^8qrjnq;nA~eNam)7K1&^WO@IfY;2?1U}a;j$LiPdV5MI)TRx zdM7E`@BSO9vN4yX@665U7%jfe&Nj6~#+cpH@+-*X6+OS_=B@2}v$%A3*zLQzidb8b z6Hhqs!YMH>Oo!K2PF8VQ&<0Mef~1RJ+x4+wKQ|A{#c z8{WzNCk_XR_cD}CAJ%5SI`v{3f^9xI_o368@dg8#8Wmh)56$C6{+7sndimCU1E=HI z-hY+-IX>$6UecO#LfJAYO&CD<#_|KP_uA*3wsA)I4l6JM+A#w1+QfewQPnuNRa@(k znebuu*AK0}L7({uGqpM3#PjFSK!SqbUAk*guaBzlpZ-3ZY=Um?0;2p?leD8+!rN?8 zf>Q4#jQ5gTL$f2MLdvzB#=7KJ)#p)Z2P&gM!-utJLzVrdw!=X z$y&Iwh%eY7WZWBTjnbe97C=HuB{_6(P6{ck{K#7~;`xzs`6D@1I9@CAndb?GO=znQp73?uKbdaJEm`HheV-Ne#G9rCx7d@k|f*bjh1?XAsowfFZ zMNbE!Z61j-(ziQ5`_!jNBaHE>mx;F`sP*Wc(Sb1CovL0!#coH`#B3*2W@5!^j@$UP zkaBR21TCAy&|zJq=r{>HMTe1K9>Uin0Wm>U^Q7xn(FCHPbOjnSVH@Vr-Tguz#DqD1 z)JD8H8S2&^W)!gsOev{#?&{ezy2!8b1@TwrElKsNE+%`*{@a^t@Ksj`rTU+g`cfRDorZwEnZlCewW1js6Nl*yg|Wos*R4;wDSpf0 zV+kO_BGHKC?N{~_C8bP)+>@)5J{P;kRH55k;D)`d2>YWVCsCDsJ4j zN^4O;0vZ8KhOXN77-~Qxlfz>56~5rxr}2Hc4(gcFuD97^+Dc>X@!g^tnwnA@B!B(8 zBSLB?#=_S3VpGqqZlJN1OPcqO(af>+vqy9|wgZx@x-z=#AFNpQS>oK8V?lon52^cf zhwI)xKmXXOm^Jzn8+!~1d_TFu8~n%ODp_HgB)KH$Np<2JP&5;D@g(RJZ{o1!{r0*+ zyk->+oE|0~gj!0z^iX5;i0KHo8dio!0k~`>(yAT*eaQd3n>~>CZXp}-R--j^!zBph z$esE1Mo5e?uicY78W*E?&|0%sru|~PdhzB^e_A>l$$biqaG=5MtL-9^l9_|jK99<7 zLVan}OfnOmZ*ipzKHIgEd0|=wFT;z^_nNe=uqV+m{9xzH;j=TG7rcqE?qOI^<2Zv7 znZToKn!H0~V*O`quEkx428Qo|{2out8v8uw`EO+BYm0r^W3x%q_Xv)Q;Fjsr>6E&X#85*SY^Y4D4>_W~ z@{s@}PpaGG!SH=SYoz3|8e2 z8uX#+Pq!0^YZp1fd9N1N>YSa#26EX)r^ouy3pgCN z`phbT_pS-Rgex$;_<{aZR-)l(MSJ$Tup93l712~u>UB*9H9WG$2?!cuO#$+yi@ml8+TQO;Y^}HHB=d=MOCPV3bzHm9?%44)*uEtp?#LBsU;!6XkAuv_pi!pKC zf;T730x>xOVILRA=HGf=ku2;)-d=Hw##laiLO8 zc_1z)3_e_$ovH}n7(DWkLyQ>FZrug_c_2Tq;bSjsDw+M8#wV=dj+?J)>3c!K$AumP z%D3;!5z;x*=8DJuWlG!X*Ahc)K`IewgXxKne3)35)$oL2=w&vku8(C@ZR$~BH+yrl zA9D()kgf-|ivsBOyE{+PG@&OH{@&}xNY36Dy1J2K-@_XK zF#=^Qmb{EtnU!}<SYz5u)B^Ti^lI1m_JFfrp_nXPq5-?G#cBi+~8|$IF^)~ zo?&T-vDJczG9#dx=x5vA8tM20@TTN?21Q+gK{m&0{sT>6L?|}{adv@P)}Kp1Rch9-L@j=TW7?? zx{E~ub?S2JNZVY*Xv2I7nlgS$}n_IXdca~=BQpZI?~Xqki};b%<~LJ z#W*%hV;3y>gBKQnUd0ySCFFgc7AaGZZRyflUq41(~RigvEvZ;XDMzX>xh$+ z<#)nwU@#v6dJoYHAPqkpQr`DPTeeR*O!&B_?pFW@ z`kqMC>%sQCZl7qRS&B6yMZN`+$|D2C-qRl8E7O@oeDPr|CVIPUGRk#B(Y>rSbk$Pf zM$AG%xsBijD*kZ+a!Qrcf!&A4&+nfC+ZkUUQ%mRf-?n%WDl_;}s+ixj*3V(`#OM}= zX|wGfRp)~S&Uyi~kL6q?^#Q}0F`Z0x!w19{Z^1a&6t`w-2S7S9y|pfDAk^lQ)D(Jm z22$%jWh@9UhMytUM*ZmG(UQY#bRl}0w*UBPCieCXu^e87j|6jbRpMs>_%*@4{Swn; zH9Xd-c}_Ww)a`a^2?y1oralToiqYUd)=QMBBTpZ>3ok1k_q**{@VAXdWer*g3m%)@ z{4}V@^Dd1U67L8?2F)*YTQm~iKU26Jm+3k3Y0ksI8?EH2e$9C)@a+4|x+Q_DR`u2L zVWTiiVBq3WWMZAAA${CDz9d}&^G=*gF3+8g|C?Bf?-ik!apzE605GKpCe7%}+wKwHyp@b(6xu~3u*KXn#Ak$>d zRr|1S{FP*bTWI37sOfz>2C*fh+i&edFw)9b&HZ42>NM z9_AU38G~=lPA3qjlPbzjZF0>@^*}iyk$w9KO+~V27)O=fB_`^GT;05>4HY?g=J)2p ztdrTA5z}(yh4<|z0e;zmWwAUOFug5@HEQm_s7^xjsRnNUIma!Zz!M@l4Po-v)11&Z z8p>C1`mCb!_P+{r8`vr6Mtp7_qNtkU-DNLF&P#cEGUQOB729ouXlxk%a9F6@Rg9)C zg6+R5c<|ipjh)rmP=DXRA~nPLUNF5rG8P{+Oc_Q&5b??_t=WFa&Jak>w|Y^bz41Oe zaNV#I~lco-NWIG5Ir{**4s&?W)?aUs<20N^7UOS@6kVE9W zaUfGQaZ$FBd#-eL6bs&IUemeGVv@!=+my17=tO6eWOMAwedz%asvhgdXYOLi2v7f=TldV=+h&0x9v8&S)t94K zvAh^{vFa>#?<&K*3buVX;l+nMjIk45pRT9f)4b1`JDBkU%)~&-Voam(^r|Ua?^~eR z{J=Vu1|6y{1^?dabY!t9wJX=?K)94ub{QeMmhDOtrp_CX>r$C*bJSXr;F%}Sl**2N z7D_)rr|C<`u(Zz8@trygUOT=YLD%9nro)p?{>ie}T8J^EYpURw3YGNJ4wxW5BV@Se zEw|Nqu{MxU5TyNt6yAH$e7u-1f13Ai+!e(V7|)S|&bb5ir#)=QqTV&3rK$g-!G;&z zyL@U!IM9TMh2Jv-oDME+4lyD}nOAKuxttUo1snhfmUai;8GIv;Z=!rAd`L2C^IpKB zSoq{1ApV)lsvJhL5K^;V~sk^#lnMVOe*m8>i5)GvA z(LVWmogdkS`*M|Mk0J5Ov;}=jKB%OUz1+3*dhGKD!>`Ki|IVHpz%~Tm168XuY-BfS!(d=s zY?@Hb(3uae^Qf-+a5kAbxl`j$unjJSmTrWNeEJG-Pf&#wK9wycIKP!OGy7>Z$z z5~ZSw9PG41Fzafy)86RdRS4cAqhL3g_kdGMosT&nV5u?DsrZRPqSKYHWo1n(*hp*C zg3+}mN?#|wUfL(>e_>&ORp##N291*qGp>ae3|s%mZrkrlDHZbJ?$^;^NS{kK33-8l zhoDHtrxsm8B$Whr*lre{fuEiaZGy&U6m&)Pg?@H^TNVOQxQuFVti;?o4H;#y{TyRO zjch>P={8b_b24U-Ge@}*Pn{v>ZJYA@lEo26IVt8<*l9@j-|PLRej*N@i(6wX`@S;p zM4)e`R3V)*)#_R_`tn?~KdW?V=GyQJqVtI@=$TPC^l}mUS*(gSPpTZQf4OmV$vTqx z7SY8-%$o^rpT9~ zs?B;r0x8Z!D+^DN41(LbZ(hkm6o7_LG}_%tNJ3^zwEHUh4Stzi)<-n0Zi=vRHs$jye-|PH(an){|1wEBd#I2&uN95f6gHyL zL*)S%-BS*Q)oSO_I**~*k_2~4B@K3VTnay_JZD|KrgNbTEz3Nde*VY-&J zUkje+l!0p9rxcenHvuF_5yNkBPTx1dfl00prfP%o^WnMo2FE^LF;7cQ2`OV67B>ME zPTiV2YYC;N^Ij(2KDD~OrV=7kM=8=@Qj{sDwWjV^A-QZY3~Wgoh;i=yE+WahNE=o@ z6B6yTfQy~cgU{`%pYN)B=;iyUNwSkt27Psg8(xJLCUd3=P!F6p^iSD)ybWZ%l?;@= zM_KgF}m&e-EpJ@iad=E8prPe+(h3IRG$QXUhX;}xH$6L$bN56o0IfRmKv0?;238LiEvmY!!q^-aEB z17h#Pk7!myP45!kfL@(wk~-`jsTcxzYSDwQ?BA{T3&=%3Y8D#BvzX}Q1&Zi3aUAZm zAc#3Gw2u6xY|vG;4$vdvJ2ZY79~%3OD0Dk7YM@3(`H{@IIP(@4LweR-0Ia5uKpilT0X`+$a6pC#kSZTzWfhn zdl}Vkx%?29Imd!Gga?g}caU;5qztEX>hW!glK&Y`>B=L#?@c~8Rv_g3FC9v%u+&*=A@N zBa`Acx1L?gR*~IMius$E)V%VYDB<2}e_Zf=2q5;AF840iiQzDXE#k`+U`pP$>!m-1 zKjVj&9$Fp}d?n#E|1xghpMd7?Gt!F}&(D19q-qGP8|`1;hVp`e^w}kqX(kKt&kK2J L6{#u-li>dYeTo4g literal 0 HcmV?d00001 diff --git a/dist/icon/书本.png b/dist/icon/书本.png new file mode 100644 index 0000000000000000000000000000000000000000..4773835c42f0c8930bb6ab15b6a97335c75b61eb GIT binary patch literal 4420 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 literal 0 HcmV?d00001 diff --git a/dist/icon/书本_大.png b/dist/icon/书本_大.png new file mode 100644 index 0000000000000000000000000000000000000000..311cbdb4fc5808521754f5f7c4935296c2f909fa GIT binary patch literal 2813 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 literal 0 HcmV?d00001 diff --git a/dist/icon/使用帮助.png b/dist/icon/使用帮助.png new file mode 100644 index 0000000000000000000000000000000000000000..61a57451a5847a58e9006f9be2e96e77d422b60e GIT binary patch literal 7826 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 literal 0 HcmV?d00001 diff --git a/dist/icon/关于我们.png b/dist/icon/关于我们.png new file mode 100644 index 0000000000000000000000000000000000000000..bc82072b13c93af23dd0ca3e47831b6f252fbb84 GIT binary patch literal 5901 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 literal 0 HcmV?d00001 diff --git a/dist/icon/地址.png b/dist/icon/地址.png new file mode 100644 index 0000000000000000000000000000000000000000..cc68944d3e82ed6279f269a268cec53a4b06dc9c GIT binary patch literal 9608 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 literal 0 HcmV?d00001 diff --git a/dist/icon/杯子.png b/dist/icon/杯子.png new file mode 100644 index 0000000000000000000000000000000000000000..4264b10f90690cb35d8fedb60562186134204e11 GIT binary patch literal 14623 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 literal 0 HcmV?d00001 diff --git a/dist/icon/笔盒.png b/dist/icon/笔盒.png new file mode 100644 index 0000000000000000000000000000000000000000..4412cec33d77b75c355d477a502b50670c749545 GIT binary patch literal 5238 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
wf!342l!hq!}T{VgIOZC)==ymwZ-)^mziif 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 Ef;(UM7ytkO literal 0 HcmV?d00001 diff --git a/dist/icon/调色盘.png b/dist/icon/调色盘.png new file mode 100644 index 0000000000000000000000000000000000000000..f899ce899b528747487f3927be8e28649231ac0d GIT binary patch literal 10546 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

wf!342l!hq!}T{VgIOZC)==ymwZ-)^mziif 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 Ef;(UM7ytkO literal 0 HcmV?d00001 diff --git a/icon/调色盘.png b/icon/调色盘.png new file mode 100644 index 0000000000000000000000000000000000000000..f899ce899b528747487f3927be8e28649231ac0d GIT binary patch literal 10546 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
wf!342l!hq!}T{VgIOZC)==ymwZ-)^mziif ziCeP#>7sSQfc%Lpg1P8O1xTy5_^T7r=B-?7ADb&Px%cR}4<;yYctY_rhUjt!ug_G> z`w(Eip?l7;IvU_ISi)tqRsp=qJ`Qjz2IS8fB)0A8rO0GnF^m;lQ;5wEWRe}97Q&_+ zc#Ss{zrhoVt>+G2!KN3-cUcs0AwS$|FQ8tI3De zyd}q*s2H2YCDQ~c00D$f*^Jc%J)#?2)P`Fb&#Aj|NU%8lC-oEi&J$`QA!J{R_8L z-~Sv}VCNygBelqP(`Gxf0ls$|4}03n6ay4SpWf~05ei6Uw36zY;puE1Taz& z-?_=|j)!f^#dfl(u>Tf4;-88@hXMgl;@X~NRWe}t{4=$!I(skugtF6@BPyC5DnBd|6^7twVAUrAOitJ_z{IWpS5}9; zXn?p-72uG$LRS>S?c%RGp6=u(#uRRoU$T7BymzX@Lv7`n4Et}_Bfg{AqKc(EuU4Ep zLTLjbJZb88hZgN#stiQ|#1l-Mz!{2l{H5kMCLIC1W*9IZ5yhgz=f*^^?FM~71atLB z;Aqjruq~T9Cd@;_x@jthun0Q)O1L|?vO1K@MP`1VMN&()B4YtEjv7umWt9qGO7EB> zVBhiu{-={+-?e(gzdHjk#4LQk-ZsaeycJYBEEV-TOX3S?xxc&pRW27Vp?Nge)$Bri ziA+3;^EpOTR;g~^H9&X+$oe6i?e2=7SPD7I0QvkbuXF(7fu&@UC(XK+_m$+x@Khua zRg{)p0qq*6Cx0s9KTg*=9vzvlbDm!Vsc^@g`arX5CdYh}y&Ol-wWad@t{G5_poo}x zEy74`5F-{FBq9SumpG!S9<#-c{tfZeCX%?4-7Q5tVFjE2R~;h zN>NrMFF?eqNJhJ`9u_h$9OaW3m=GQFPp++ zj#ja31pyw*MGp~En|uhLPDOl|R>|cB$i_)VfNSl2 ztrD{m4-xKd8Pzejl5QwYYQE<`sc7H~6Yv18x$YmjKkE2^YPM|C?=-1Ksl~oav22C= zC*Nd{h)(=aM)xQx?3oPvJc)#V{m{)~k3=Z5F9Jkh*@}z{5VscFm%$<5dYHH*SI4|q zrS(UAk8sU(2m$jUHezU>VrEN%2KEI{wzV3%^<@Wln&2Lh&=W zW)_|ELg_7sBf$R*6Z$MCC^8~jlb-(Wj>3JDBI!EOYeNIeq8(y1OJY+Cw^mxzf=#V4 z0GZaY=rcV3AiZftfYDMq<`#>`iPi)fNJiQh0^)=6M8#>IuEh8A(HjGhi4$C+W4=ee zL`8=oJX%i2yy*O#1P!VIw0P$+Q2NIBU>wzXNl+iJlsu+h@U21^) zoYw>4FQqY$Fomti$dR`!(pdl@!w}$5vtpEa!H~aJcE`L-mYn2ut^q_8i%jJ$Xysww zS)(@G9#YXTK-{6&c>pMOy#R^7ji!k)iS!&&js}4HB2OTK<&_wPRYu#S4Oh+%`!GPb zb@%1Mgo=zo5UKx;d66cOJ}%eqE*wq?EQ zteh=NiB972G$7_$xW6p*`69$IRwM%uZ>V=401_|kkH=5Z_j%$j;&jZdscpvGgj}mFt+u${<^ht20AcNTo?I>ec8B6GZ~? z{x=Z*iuJt^2+n2w90Emrq7DIe<_F?DLb%ibdiX!aq<=Bp+dN${u^tVY@ux=u_W@de zb)t}tSjYQuB{U2Y1vh@UFBDNoP~b;^3wV^_sRGd&I@rBH|D2~Qey%4JyNN;ZIs+ob z0#9L|?aI6&fGwHC4}kD`Zkj#f4aM7LEL^w+-)ky|8z+bg`TxlhT2w+qv=mT?0Wx%1 z_VMKj?<r`7s*2wew77O7Sqi*8ZD3t|5nL z_hewK1T=49t5GxCu@b-p_OsGvdaWneBP^LLk!zL?0g0xTB>pI~h>-yzi5|cY6cv8M zBQ$|#8C~HAPXjRSXJDKyO^dP#5$p}9+|&%#B=ZKTLTjADv zzn&*vT?To&VoQ-gEbOc={s*nefaR+%)~#?my)(LvqS6eu=&F_YR^li~bgz|&rNm+I zT>yr8muPmClD-zx@X#&yHE`VJ(Y46)7@knMxY0nu!`$b)=8$cl000mGNkl=< zN436h!55ablOp!Dg3-C(1kp-rll{2U&E*Of~=>2aWJ+5Rh;y<=b2? zHvq!rTrA&UFU1ikZwW#QPwG9vCaLV5Cj_wqehLu%h6P$NO-qOgt^(0(E0_V!6WFkG zZE;m5H+2k>ncYjbc86l!+)BBdE8()gBsE%-OmhGrg8|nM9&JCcKo_(a^rX8h=C(aE zNf|IW{wj%7?U5-SBvqHe-IX}o_-NxJ2sqy^W)R_NK|3>wg+KxzV>Xc%5$y2D%`PO= z`N3Q3?d&Z(hla+BzBQQj|M5 z56A!{84bLQh*ydm74}m|Q6BOHV~aUo#tr}1kn?oKMZ5MpHN=vAtPq6Tg0ZjJmqF>2 z+qp^36;;wy%=Ekb;lBI&f6j^0}ydSCiSAkjkyF(%N}vII~0GF{b`od*c{Ol zjCXS1?0lQEsU`B;nu>BsEioi`@rL4_j}7`epL^I>#Bn#^=An#+0is9!f8z(DcPOCJ zM-N$$b;c)^G@1Ac~ zDLy#A$5JCU*&YUnU?3Uw34q)s&a35_!Q)MrDs7^tBss{e)a2&h8HiT{;Vjdjee{SQ zM|xCocMiV*2(Dl`q%G%WTH`x1!(x5e_z~<3`Ghu-Dk{l+KDkq=GtAlpI13^VerVWk1`fFAXY*^hb*K$tg3c6U6C>5ZS~^L6Yi>kz7H zJyg?WOB=jAF?kNVdQc~CQ8ez#njqthdj)Yq^_(=T+r@uT!>h2qEz z=W@xpt4~gVh>Vj9=fBB`4kv^j1lS<%Rl@W9NL2xX1kz_^0qN9K#6R;=&Hr!NI@C4a z3!80j+OVe?o^qxyK1nveR_QHYH18cCFs#NeBi>8=obw}|o5HvN8H%0?`{x>D?oEIT z_@3<#uL)p#9xO*r$D<~vbHI-5r8!j1?euWq25AIy5Q=ql{Lf{$zLX=V2Z_ zt`z~qzn3h)=!Chi?_hA`o%<;W5J9&;+VOlU;_GB$UuLMyWMn@o?%Uznv{wxvEYC^o zr8xpPIH`5~QyRfMgqALt{VyWrhk2qD9mHi_)n*pwZwEmBL5OGZvn)mo3-&cF0c50R zlM#O(w}1C16A$BA&0miUlX1>UsR}@*YjM%%nkqvEL4%NbQxX3I;=EEm^Qp3dkuE7& zA`eznv$IY>a-Ri)t4x(9r^3E#tSYEzfD92%b^GqtBZ1>hb+b=_%tBElD`kk`0!PI( zcP|j7h+w=e6%P1{NFXh$%bf62CMIntm>-b+m|j&J0ZOyJna}e@{pa;-f!B)>hUG6N z`q;Srnp@iIje@#ixa8Ivf~W}7pBHY^__5I39T)W~7T9J2T(C7C0UNY#ELW4|_ zHq@&Cmb6cpVuA6BMoDUInO7Yvnki?-=3Gis!X&Di^^EI62eWZTO;ylbQoa5xh%_s%e@F0i*y#QAy@*<0Z>T1h90laVdem&^nx3cl1N^sat!ejZg9K%KP4oqsU$pjBCQ`X$u*(g08&$B(QwR2vmjN} z3=;fTR`w<;4nSlnvq9)=tamxMUndP927O#~Q`%`_)%z3F;QX72(f|UE1*!7Wf=W$q zVN_-9l$1T1@|su*qU9IVhM09M$dD%F94E^mBaO;|(kNAl5Gf$-lX8aY0OXTmEaGg# zM&pShqUVeHf9_EHpnMT373S%RiKXhB$jFaSm9{3TXnu&K0isw&S7Vx0f&QXZEQrn^*}1OvU_S3CVIMxw42&GKL5^02$N-0X{W& zTJB*oH?ykR7ilqEUI5y!t6 zK;`0rJLUho0IC9z7FUbqZ=@8Gk^oNjcEv9&6wi)uG?WkkwaB8)4@lJj;?{b<&blmm za&H{jD{DbK!Ndt~8IztPBB|f`Fjb=}09mTd7T;=IH;!_PzD)$3UM;a((Fw~)z)ibZ z42~1ZATcH>_W`N~5KO0c8N*PCH;||@0P)4+lRTl=azMI?dCj|J3Wpc(2&w{*0Y*{g z_B`8@0jmb++W+4=KejhFM=q9`69KN&wGL_Tw-?JBD!5ItX~v6hnhK2FRri-QB=HK)Xw0ItL-H1*-;-cuDcA+Qedx2_yrAX#(x(GT;qQD1L^x%Hu5uX`1Hp2IC!w=1rXF z|JciQWM+K^KrV4>)KGG3g6XYbkOZyeJ`ihMfDC|xc<9q!i!s2)h<~K2SrEa+V6C}M zoZH~9@rL4exI^)>zNFO_il6$XG3kCnSj0T?z#sq1bua1Bj+^C@ES?$xY+rn;{3#eD z5guS#HA7pnQ~sC(p*aB}np9*6a12DM>_1AG;3|h_0+RSXcQz+n=-)$t>$u7K0E1W+{f^>>vq<_=exhUt3?wL4) ze`5e5zyYF3H5j29hne%2Ruv?vNI-nhR5V@e6QAfn2Fnrx^Kk~ti~QgxGXM}E5Iz*^ z;d`rjKIJJse!zfu5C-O(Y@emq!#?rZGy7z>KzYX8g8{!>L30%foBI51&EJ+qX(#nR5m{|38ut2z*nLe;T z;;Y)^6w9A+sfhm}t}FydGS~J0XH5bgIqI|))81G{nkrUFDvH`Zo;1S%8L%EoRhCCE zbFU#N=jvhqVVMULYUB68MPJ|zv&wzNBQbG3;@>tIXtxtJ7YM38cwwKMbQw3T#K@g}S(HdQ*&Vo!fwB`%RErvZ zeTif&B{K=e%ui(i;xbzD4s}_gUO3WgJR&n+5BnzT;lS#`(Q7LPPasZ1fM3-XS5mln zYJ;kj*D;sEMt&lCG_VZQ6L%y)JNrnd&DIuYtxCuM1Q2W;xk928s^)>IsDEL8HPm)! zGU68-A>38lTw3Q25$|Wqc;aQ6PtG2`*0U}trdTVNiugKJ6~2LhmzPAOK%xzXk+niS z0}yWKZCM~)X~76L5h_O}qXAE{LLaj%jZy2V*xVn%vF%!l!lWzaZs&=zAFyS#y?rlR zqGg)@>14!rAs~JaLDpv;2DnrZvy4RsAUu-vxq)Cw|J={uPT$!&_cK!A_CH9XS~FxA zB!_dsEUp=bif82KEW@!&wb}0$pR{&T=waXQk`e!L{H&b|2vXjiCo_iyVUaguFT-W} z8JkTqj^s|?&twp+RT^9{?c8*%jV*qPP!a+3F*wdFB1z3hD6um*0ECwn`hntSSSBSpO1#@pD^DQy2_klo5Mf{a{ZJ|Ua zM<=s-J^1N9u{3BKt7*oGm(|^n4G_i$1gCc{E|nie5k*wXp-eVBx z92uDrz>6d43;;wW>9wAsP*YivkxJ#6_uKWT?=(=&{fRrpK=97UaGTEGC%}~i@Z%3v zb#KmpnN9iB9$7RsX-p~E+XH0)(ys+xN02+7%msC{I}|%l8sl|HNY^?Z6`f*}ly4B= zh3r=Xf|O0N2i0LB;M3}}p`8oT)v$x{@ z4g_mBVm}bg0>opsRM)p8!@e`vTHJh@rhUL+P2~nV<{c7+zGKO#%4HZJsc8Fc{6OC- zF*7EGJ8d)!Kc6^mga-75z88{V{|fG}oXLKN4R8Eq0;=mjqZ%8&kXF+>nq=-qD(weA z-vTi9!gnWbBI4;$|51E&>(Rh6J?y(f(=>Ag*`_-k?3ibbWDU=D000c;Nkl&1WU}q!>=e$G%#QhxHj`oBwL|Aa$1H#dE5c^{s-Zw>M-^q7L1}C`gz8rV3YhaM z!F?7$M204qaXw1z->MN@w1im%4WX0mep;UJWTFCqQnv;RXXuhz~`Qb!00N zYz_A8DvO>&r@1sBI_7|Ip=7C7r^3Fg$D^4OAR=-y>bsGTQkSfAJMS|HN<*$D1?OkK z2GE!zIg<@4VBTG8#s!FAL{T$VIg zvOdmpBT`;x6!ZrDk?yWusoypnqzhcr%=Cof)Qqc%hjdU2M|UW8L8cr+@v@smF2mK% zGD-bF5F+*TYufuvH?J!Q5KYrI@R+mo4m*(Hn>DZ>S6&9K26}=$$8mxDm1~-%A`L3^ zM=qqIK9(ZVIlep%OrIa$gXg>+;O0w1Yxg=c{9z>!QKz&4=Z^<05H*w)p1_{gwA=ZH}DGm@PLzK@u{V?HvzC4h(o zra{7rNZr|v0Ok~{Fu{xPK3{wi17n40z%v9iZs(2jINGHcFS$G8CyI2Am#+b~7(eoK z#h+(g7n;DEY?65w17)?9^?9C9q7?y;k;*YqEE#FHydk+|fb=g2JP8B>BvSchg%w>x zctf%IA8iV6GBCs|u2%Tj1QocE3(?M9`K<8KP;t1Qw>>}XR|DboK(I>@!c9dLALIUF zpEnr$O0IN*HULR&S}}kh+0wN>@38J@UMvGdB;4TQ4m-dT;#{IX(G!fHZ-t(>GxlSC z$p1uu-5kI8kIE3tV{onUcJ>^==^a;w21M}Bg{ zii%U}q_XIki#~NR%oYU@@lp=A-=td+P{5P#vuoVRo6I%U?WEu@fMB;`1RNcg!F7a* z${J5F;S4p8R*r>hkCxblA84LLrW9N7FIq@aI0``sT@(J~4JO+80d}=^^&HO6nN;h+ z&&}0(341~p1rQ-=GVHsKM~dWbNIgDCq1E%D!?%@KQ~2%zKsSJob$*< zv1ot@B8upX5XgOrhtSKG;vhj^cuy$ia~beF5!o_dBJyDW1Jg+V(H)Feez5r9=%HN%RA} z!T3d!(vu#7fr@H-sM8-;ekFrLh+Hy2lA87&nF@nMkZCA?76bGTJW6vbTQl)JkcJX2 zpD@0-m|Kds{l}cdEd;ofAFjRf#jp7=gcZrKzpRZ&N(P8fPO95?4IfvtZ$L-KvNc=9 z7Uh0-FgBxA)5_k~vR0KOhFCqJSm2}g;Bf+2#%=cc2F8G*UpF_TOX`>pBp>)M3m}37 zD^yq!v8%SYY(#$$BK9lBq-VLG((N5*Vyhkn_i8=cxUkNo>VSqq2xpp#c^`M?*SfpvXN{Lf zi%)Tf5?2`pJjIq@EJM$py{-f0TVWAVDXU{XG7l*LS-xoAI|}696=Gy&4R?+(1qp8C z4*g%)Plp=)@eK7;Pbj_?3|Nbjc0sREQGuJoDLw4_oh<&O07Nj8jI@iL#l@0yaoJ>^ zzRHtZ%h{rQXk{;p;ep)%ocSgE(1%m-o;U_?brmkvOf}7DVs~F01?ck!T}#2|Hj^Njs_~E z0eZ$zH}Ytl{OqIyM6hV8>e1p@1^;s(5~DL!$lA%WN*Y*an(7b4uK0H3Zwo;BwK*?| z?_4m$ud%n?A;2m~hNIMa>n9al{akZDV;K0>6`rn=b=`@7p;9dS?U zsVx8z9129cRM#E=cr)1aLxgKgmG((S{67*Or5Va58TGFL(-aeVmft-dO6we@XkZ7GmTI%#)g!(WkL{}T74c!DcX zRSrsq{b%)SfhTj()Vn(#ZBbRRDz`sZxO2}I4ZMl~Gxdo7@T4~I{)MjjUeF`{!--(N zj2xN%BMQ;?^{8LGb}fTsUK+LnWGLrk)YnTyhah5#@0E&p9=^jx0P0?>oC}g#yLiix z$&K&Cj@?{1ZqD}%j^zv-uo7%?|3$zBX;VFjt$AOrJW^5rLM{sw9!NQ!N1d)jfVXnR z9p~Ql3c?9Y|A4+|;J4$%k$$@(01;gCL;bg8*yk}#Wj7$41qgSG`}sTpyolV4VsN!? z*kJ6XM||`2$ed^LrO6e>`Cf~vc_;!b=J2Net{=-U(;2MOK7-83$%wD>((XBy`kZ>S z{nx38@BC!Mzg3H=ZVLp56X1m)`YaANPg*x5#AP3N6J-B$;vg zxkIH#earN)|FCT3Ku`byOgaq-j#7=5FQg*=U6S04N<{<9FYB56-*Wg!Y90UN0%n{^*6GaU(T*3P#NQGIl^*r4OGSK_>)dC_^5MV@;_X$jl&M7W zWhbjRKt^($tsH-Mih-ba2Y#81`qwO5Fzbzxab=w^kN6%FwUGcJ)4YehR_ zW^bax&U)B4C#3}*x0m1S*uOJdjHL<9 z|L^MYT-ltP79c}vPKkYo38oEQJI5>y+ytt+KUXB*N)CKbDJ!rUE}9-7%}~fC$;cgN z2F6rfoAYQ%=^G@G1CRzONJk8NG~fWl9=$qL8$<&RKpLbV9Wf+mAO{HtAUTxc+;TK9 zqyYyYLz-}ojs|jQzyU}OrId9GmBT!t_}XfDK)ARp{++~G8gKxTr4A_a9~vQZ5^zlBPd(05a+k(4)R(JR4nbLy1wz z8sbt|k5sh%wuTT!k`N9+aw*bOn$n6m)?@6$-~eQ-PC#r+1AraSL_eM=o#t4Nu?61T z02!-~;X8W77vs5+ONMVW@CgE5nGE|^G_Z&zi{=0%kLtu8O=35XJW=XD2;rt=#CLxE z3u2E14nPX%RqWEdWdqP zX&Q&<71{v09uzVjj}Ab_)6A&*{bI}1a9|dhco@&P|9Vt#eOwZW^=3cOBmR^6yXW3t zA52%5O9voD>Oa-(yIYS0ju-n1lh|+>;6?&?j6ow-z`ip?uDVBjj{si*0nd#bwY z@mJNIQ#DofKkxtD`s)7wt@{7gK>h>)L7*uDLXf7=NQ58&AOw-SKoDqwfDohwI1(iY z2tni?5CmEv;2}X;)GASeKu8b}f`mj-B4#iM2tk6uU1|*p0z#0GC`!Z(1_2>RFt|&t zAweLV1PKYaB4+pz5Q2nXhtdKM5fFlS2(A=ujXggo%5*dcJAuNp) zf`mm=5s{Pj4=h524W;M$mxQ57LXZY6$)&dlR1U#&Y#gdgmd@r?q4$_OtA|gh<^%+bxqYOTw?`*meBszDqNK? zA&4rPh_D=Edsd#%*uAPZ7lGcb@{2W8c&gALV!tzK$( z2LXjkA-K|xbf{_95}kI8owR4rRA?9 zqHCQLO#rJarGbl`l!%)kL2tn$aad<56 zU9pn8SC^RC5b52cBP;sN^T_ROG>C>)CJlnMZDa+0q4?ghJ^gQLC$ATIgdlCAiWAit zRs(18^|x6~D6@?vCT4f-wrE*(LQ`feA_QrnsAf?IUV2>*Kk8->1b{YBX<52io;ZcG zWo@f_RmVs}T6b{xjQVHs_258`LXdV~@9J95H^H2StlgDrm(m~JHOTA9WqG*YeER=o zCx!E1Jv9z$yf_qsw4upngL2YZe^Sv#RiVjJ9?8AEQp#;-%X+&TLi1SU#&R)NIxsX4 z=+s;xh(m4i6LK9OoCFqs2(Wx?c*T1xq9Pk~h@BIa;=p}iz>nCfp6jHcHq!QJ8f{{t zJXM)=soTinZW1AgLp*89wc9M4fkwmFq*=;vhrj&t8OMzd_uo8j7&-yH+vC=pNr2nR z#oV?^G530p>zYx#5M%}%tuM?^C)i4?Zk-A)tdv%qGfSFKNAr#P>8``oy@+_d&kb2a z0Kco0`Zw|J%d$a25C%(Ib* zJG>rBA_TDs?tzgrmIL4iz{VdxS=U!e%a+f5< zTt(hL?3F-55Sz$qRCV-S5s;?*k~Xt7yj)9|_K+nHqG zcX$y0@YqnlYoDqJL2Rgf&iEm7($9PwNslBUcuje@f8CLQaGWtQHnOCTeY=-iy5pTRN(f>Htv0Pe7_CUUSKpXC1{brp?mz87qhOkcCMJw?Qd#}# zIUM1{N7|%|5z31b=>y5)Rpvz zWCZjmBESl?tJ1%OlN08kXi6EU~)C`S&}u4=9|pf;J#@|{zojx7XB~Qt6!mM zVD{-B@n3@3YveA~Gi<3pn9dg7np#}=;p{n_r8t@(&hke(^()03zZ9ekI%*`r6$eYp zmUUD{z?r*y^zHm)zKAX28XlWG9Px8M_35m>Je|pZyB_HFQ3%ok(JFxDa+xi% zSVm1y!W`sV#)T=6yIl__Gy1vQ?OMlVc{U)~4I=z36E>Ud$$!mj8H6BB5I$HOIE|xR zd6z-#B978r5$<+vWwM;g-J8E-jP~>H(}w?%G`i-ed-I?7sX`EfG(mct40B#XlUQfL z+$~vLHng^;pgOC`-_+c_`3gVD7jpYP=WWfnMN4R}NoDh&z`h+7Z|j;_x)5Y09L>KV%~|}9z6T|)h(ju-8pVrpqu#)gC7R>+7#mPbXNZ#n`wPZ zCIn%q$5P3)&}1<8#4#9#Ju9N3^)TBi1Yr~mq84A$s?FMDmL~6;TL!B8I~HWTz~@ z)5M-21{r~l1;(jst=~%byS{lDFs(x~m+wT^1ex)Ei)E|6SQCV;$2n|0-fs&jj}mD} zS4L^Bh!sqT`eC4^?>Dy0TUz*&RX!EMVoi{st%rF75W$I2oGW6sZTenCYb&7{HS01x zsZ!^$CCJ#Gl_#+E@btT@Sv5VCKtt^47n!DtQTkvm0Ko#@!~68@d) zHIpNj1YvThWj&^}LvgSoS$#8;P0Gg z+{7edW1^^Z)5MCO1>u`;TKm;HMOYMvxgr48E?>2jF)2-~2vRQQ&SL9v`DD`-{f`iN zmv1st*sUn~M~M|Hf*9oejKQN2b{v2!V=-66F)qPmhz&v5dh}_N>skYGEg`yz$sia2OS_>;zmASw^eE$*W@%oVX{wsJv{C&*Ya_c88X zl>u-igzN7bmU~B~H1Mu)i5)FzBTJCcQvU}=i@84-05`G9lDvm;JA+>yKFEXiAB~OV z&JAM&!Y*^<2r^n4cw42IdlU)pMu1bouArLy2yZtG*v>?`(~Vzlt(7VNY#|UCf*jg2 zkQ*J&-H${+;a9Y8w$=KuB|^A-PD1-*xzzvVp`n#wwTdlJS1&5`1R33ZT84@7&G9Pb z5#bW`Aof5a!cU~Mi310UxqtMabSZKg0-+{IWw`%eFfq5t#Mm&cO>sHZSb1OMf&5Fn zNB(COf>J7D98}fq*IOAGxSj{#`w8)%+b<?wOnRmUzBcKZ!uPb@I>`t?@b~QT+Q(h5PYE2(5m1gG?6TcB>6xOBIB$;R zXoA2TK>QMq-=1gJuo6ohHIY-fU}XrxF58dtAbc;oY;RN!rRWHB0xNto6XmxR@p#$N zD&u7*9RA?;}!E5>EFg;$6RbuS%Vhmd2)J|;8GgZnB);v=P zJN8h_5aY>`EPZl5r!r=&9a zKlJtOs6@7zQw?*4AX8<*yv*RwQd#{x0{9!=3-$0oj#8=H2t2H5@WxcOaMi-TXa4AR z;i{JBDnaUvOlS3bc+W9OZs4#H-en6f0#6`n?@DF$HQhb>W8rN^dy;!Xkh&;LlA9UW z3=w_49wx_dAi(dg{>%f*YgvEiBr}8G4Tse3OX(>=>f)w*3!f#UtCvClMmAoFB2K^({MQ0%3eP)>KiXnjT<)qQoGe4{Ut74J` zCXR0eskbn_s4$q!=HCkjoX=yFU)96Ibc~#=2wM|#Yo4i3VhlV}PW0zHLF&S#`t%?3 z809a(z{{B^zpsbO(N6^E2ke=86T58J&082B&y*8{10zUX$W&kcZYIhy0Qxu}?5l^% z(K`eX;7P;4OH$dwh3uKy?p;mcFFA06)FEVL-Na9_MFjALdYBwtN8m*RX+00V-!Q)~ z|DfxoN3cL;2vWzEt;uI5JzjK6Jxq=rBQVZZ<1?wOe!~1r;aeS-7NY``BZ!H8y5{jJ zY%o1ugz$hF7L(nBX5vlknL3WGhFIn{&{dKk^>&yZuXIMg6ikm7!LRG#aGGuzD zQrW_p^Tjh&1H{dLp(IEhfLA?UfZwWz#pq~ochmGtEwSgB0TI(6000VeNkly$n9)WqmWC&6R%=CDrdi6H}d%S=!8Z+N;$}^P_&s1H{ejOu6kUDUt$1ByFKV{0} z70$WS1cNotR7N~gb-nt1j4VOwK(cqo^mwJ1C_Cz5Avxa4mhg=EVem|a1kiTGj66YJ z1%+VitLGs&Ar0>gftZmOF*XE2twxYiNHqFLx+njWkjNToF=IoJWTvnih{9n-G!pBf z2<>7+5EJhyD`K81yAwe^)l;}bSpj1vSgZ)bR^)d8_-#=54->Vnpu!S%E?TA3zr=1S zL8prqK}@g_4Q0Do1n{zkTI9P|?7F_r)I}Kf*b#)S$Tn7tn(GG>-Pyf(@OhRm(wnBi zdhSYM7#bNnf|yD{L?x{VLG%ab<&pk%Opc{vBLml(x=?+OB|*A-GPki}lv-+tZ<_n( z_wJ1RtVuL*17pt{O&$4E;VqT~LHyZ-a#jSR|6=e!F}Iq>S*uMx@B?90rI>q%c^=Si ztJ+u+#6(6LH@5I`ly?=j$J5#T|EeH}mog*(*Uu;)L3t|@TY}76TKJPXRwVjkkC%s* zoy=pb4^1ZsTaioI<@<)|VXB?SmLR4gszz0X!TL*wM-Q1}B2%Qu?g>m>Y1ue}Yb?VR z35+#Ccu@Q(KgEJwcMIXpMW;TyUy=L46EX7n++5SOYgstrhOs>>Pq2(rATZVhso{^o zx_qfh=2)mEN>u;7HUn4igJ`K$`#5}#QJq+46{kX2djwHIa+hSN4UP$d`DrnPyV8Ay zL6@4MY%%;suw^%j<2MlH=Bn6$*b~H53LykC7Qv9sQ8BS{x|fHSUr=}LHp|QLCykXz zNh=}*VXeJ<=zzIwkguP3@J;cHWLAHetB>@Cn7G1T1MzBm>HJM41Yx{SJn@BB_~5S< zF(C3EB_7%{kZW}9GR~G8KQP`}DGj{KGBUtGA;=W?U30bn;?oJU3d_(Qr+-{g5k z0aq|yrL~SkAoaRg$`Qm7pe`mpcH!V3xHx~T2u0s|(B88bAcFO~4+h$5;|IrOVgsrL%=! z@Z}@Cd$?gN=6nE=&B1vi)Ogh^L(5KX3=Qg92-1kWfwwmXxp}P--s)y~Dwb6l$z6g7 zZ*E66?q(&8M3*uyUm-|?7E^usy8+0nMdrTW-8=YbLzR)cGz@SyIB!IN2kSJnGT9g$ z#C4nqVjo{bPd@+9fFl1qe+oHNi1ks+;=2wcjuMioJyU`#X;D5bb?0={{JaDEP<+WRe5X1sG%sey7gG_f_ zzC@8->uPj3cVneGcRxS*Z?J%~gCKk-AU#zc?!PUlFMfp}P1MH&MbnBjiFFptH_pDp zWW+0t>csP0*S`<>JT?)6F#cBC{GO+Gf_sb1 zZH>~LkMhvK2S?uv|J@v&&ddo@_#p*TSg(sEQqFhYb&j{x5ymAV_}^0 zvH$sjMf_yGX#$O1fE~W{n+0FDqM0PC!GIrex9fqIU+i~nr4%8EJq@+>5hE+DBkN;N zGeo$780YX4`Jn(saZ>fuMEJf`ws2whV)xcK7J}GR zfzd^do~VgL&Fa`JUCm?*m+pKbnb9vs)Xb@{PbeuR!5+SeZ%AeJmFeF6y>83MWxHKu zG|NjbDhv|PefC;Mw@2xBK9ZTi@A3`E)&w`OMR~~{2EL^FB0E7c-C6x+uWA#5I6xLj zvt>mzO4v&0plT(OCNue4*rFUy1REjPzuOS2$1`dFi3v+yiXsGYfNrWc{|FFlZoxVkXKrTO{)!iheLLQC-EvxH_46#urN_1aYWF1EHmL(8$?X z#bNczBww%~zn6*f;W-Id!B6oAJr?X~M7%h~1Mr1QpZTrFbhX*)Qg2b#uzB zvwfWc+Q6vI>#*5^W5#a1c)vGAa`$G9)Kglb*ZerlDl_-c+-R+R$8AW48ht; zU`(us6+Efl!Vgo~!YU?;qosbV$}+>a`}Vn1uinGtYiY5~v|jE)kT%dYj5(W)*+ zC5m%CoWhgpEo|X;M!#~JZ+d#pUzr1%5);gXAk#Ht^E}sA_vaab4laUP zZQn{nA&3{U~eFJVR_^sM_9dt{4>TFMc&DNC?u1h=c27rm&5ZKf%@{^1t)J?R2!I zm*{!!W;wGW1dpW^`#EeOh$FQhotV1>n~n~Z5EB8$#?jJA_QoD&$^Pv^kPfju_ZYbwcE`NqI-efvMI(eDUZ5&v z&Ol(iYP57@V1m@J9y6q#ybyv+;voM$M4+~K0yh0!#)rEX7k=Ym^&J&01nCGq$!r$^ zYVxJCLF!r$vu#2U69w5lM_}srAAi|U(UbFg3*Tu7Q|eL(qLex!E{ryFHYQsYWyc}AOs1o?nH7Q5D6XVgLXD07*qoM6N<$ Ef;(UM7ytkO literal 0 HcmV?d00001 diff --git a/src/icon/调色盘.png b/src/icon/调色盘.png new file mode 100644 index 0000000000000000000000000000000000000000..f899ce899b528747487f3927be8e28649231ac0d GIT binary patch literal 10546 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 tVHziL8+sODM7v5k^K*mN3e`WhV^Dnl+g$*>_o! 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 - Taro.navigateBack()}>← + Taro.navigateBack()}>← 收货地址 @@ -119,16 +119,16 @@ export default function AddressPage() { - openEdit(item)}>✏️ 编辑 - handleCopy(item)}>📋 复制 - handleDelete(item.id)}>🗑️ 删除 + openEdit(item)}>✏️ 编辑 + handleCopy(item)}>📋 复制 + handleDelete(item.id)}>🗑️ 删除 ))} {list.length === 0 && ( - 📍 + 还没有收货地址 点击下方按钮添加新地址 @@ -139,7 +139,7 @@ export default function AddressPage() { {/* 底部添加按钮 */} - + 新增收货地址 @@ -167,16 +167,16 @@ export default function AddressPage() { setDetail(e.detail.value)} /> - setIsDefault(!isDefault)}> + setIsDefault(!isDefault)}> 设为默认地址 - { setShowForm(false); resetForm() }}> + { setShowForm(false); resetForm() }}> 取消 - + 保存 diff --git a/src/pages/checkout/index.scss b/src/pages/checkout/index.scss index fed1fa8..5727537 100644 --- a/src/pages/checkout/index.scss +++ b/src/pages/checkout/index.scss @@ -69,6 +69,154 @@ color: var(--accent-pink); } +/* 地址卡片 */ +.checkout-address-card { + padding: 24px; +} + +.checkout-address-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 16px; +} + +.address-change { + padding: 6px 16px; + border-radius: 8px; + background: rgba(91, 140, 255, 0.08); +} + +.change-text { + font-size: 24px; + color: var(--accent-blue); +} + +.checkout-address-body { + padding-top: 8px; +} + +.addr-row { + display: flex; + align-items: center; + gap: 16px; + margin-bottom: 8px; +} + +.addr-name { + font-size: 28px; + font-weight: 700; + color: var(--text-primary); +} + +.addr-phone { + font-size: 26px; + color: var(--text-secondary); +} + +.addr-detail { + font-size: 26px; + color: var(--text-secondary); + line-height: 1.5; +} + +.checkout-address-empty { + padding: 32px 0; + text-align: center; +} + +.empty-text { + font-size: 26px; + color: var(--text-secondary); +} + +/* 底部弹窗 — 地址选择(样式复用 app.scss 全局定义,移除非必要覆写) */ + +.addr-picker-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; +} + +.addr-picker-title { + font-size: 32px; + font-weight: 700; + color: var(--text-primary); +} + +.addr-picker-close { + font-size: 28px; + color: var(--text-secondary); + padding: 8px; +} + +.addr-picker-list { + flex: 1; + overflow-y: auto; +} + +.addr-picker-item { + padding: 20px 16px; + border-bottom: 1px dashed rgba(0, 0, 0, 0.05); +} + +.addr-picker-item.active { + background: rgba(91, 140, 255, 0.06); + border-radius: 12px; +} + +.addr-picker-row { + display: flex; + align-items: center; + gap: 16px; + margin-bottom: 8px; +} + +.addr-picker-name { + font-size: 28px; + font-weight: 700; + color: var(--text-primary); +} + +.addr-picker-phone { + font-size: 26px; + color: var(--text-secondary); +} + +.addr-picker-default { + font-size: 22px; + color: var(--accent-pink); + border: 1px solid var(--accent-pink); + padding: 2px 8px; + border-radius: 6px; +} + +.addr-picker-detail { + font-size: 26px; + color: var(--text-secondary); +} + +.addr-picker-empty { + padding: 40px; + text-align: center; + color: var(--text-secondary); + font-size: 28px; +} + +.addr-picker-add { + margin-top: 16px; + padding: 20px; + text-align: center; + border: 2px dashed var(--accent-blue); + border-radius: 12px; +} + +.addr-picker-add-text { + font-size: 28px; + color: var(--accent-blue); +} + /* 底部操作 */ .checkout-actions { position: fixed; diff --git a/src/pages/checkout/index.tsx b/src/pages/checkout/index.tsx index 54b3285..948e4a7 100644 --- a/src/pages/checkout/index.tsx +++ b/src/pages/checkout/index.tsx @@ -1,14 +1,17 @@ -import { View, Text, Image } from '@tarojs/components' +import { View, Text, Image, Button } from '@tarojs/components' import Taro from '@tarojs/taro' import { useState, useEffect } from 'react' import './index.scss' -import { getDesignList, designToOrder } from '../../utils/store' +import { getDesignList, designToOrder, getDefaultAddress, getAddressList, type AddressItem } from '../../utils/store' import ThemeToggle from '../../components/ThemeToggle' import { useThemeContext } from '../../context/ThemeContext' export default function CheckoutPage() { const { theme } = useThemeContext() const [design, setDesign] = useState(null) + const [address, setAddress] = useState(null) + const [showAddrPicker, setShowAddrPicker] = useState(false) + const [addrList, setAddrList] = useState([]) useEffect(() => { const params = Taro.getCurrentInstance().router?.params @@ -17,8 +20,39 @@ export default function CheckoutPage() { const list = getDesignList() const d = list.find(x => x.id === dId) setDesign(d || null) + setAddress(getDefaultAddress()) + setAddrList(getAddressList()) }, []) + const handleConfirm = () => { + if (!address) { + Taro.showToast({ title: '请先添加收货地址', icon: 'none' }) + return + } + Taro.showModal({ + title: '确认下单', + content: `确认后将从设计清单生成订单,并寄送至:\n${address.region?.join(' ')} ${address.detail}`, + success: (res) => { + if (res.confirm) { + designToOrder(design.id) + Taro.showToast({ title: '下单成功', icon: 'success' }) + setTimeout(() => { + Taro.switchTab({ url: '/pages/index/index' }) + }, 1500) + } + } + }) + } + + const handlePickAddress = (addr: AddressItem) => { + setAddress(addr) + setShowAddrPicker(false) + Taro.showToast({ title: '地址已更改', icon: 'success' }) + } + + const hasStickers = design?.designData?.stickers && design.designData.stickers.length > 0 + const hasLegacyImage = design?.designData?.imageSrc + if (!design) { return ( @@ -31,7 +65,7 @@ export default function CheckoutPage() { ) } - const maskStyle: any = { width: 300, height: 420 } // fallback + const maskStyle: any = { width: 300, height: 420 } if (design.designData?.category?.mask) { const m = design.designData.category.mask maskStyle.width = m.width @@ -40,25 +74,6 @@ export default function CheckoutPage() { else maskStyle.borderRadius = m.borderRadius || 0 } - const handleConfirm = () => { - Taro.showModal({ - title: '确认下单', - content: '确认后将从设计清单生成订单', - success: (res) => { - if (res.confirm) { - designToOrder(design.id) - Taro.showToast({ title: '下单成功', icon: 'success' }) - setTimeout(() => { - Taro.switchTab({ url: '/pages/index/index' }) - }, 1500) - } - } - }) - } - - const hasStickers = design.designData?.stickers && design.designData.stickers.length > 0 - const hasLegacyImage = design.designData?.imageSrc - return ( @@ -67,7 +82,7 @@ export default function CheckoutPage() { - Taro.navigateBack()}>← + Taro.navigateBack()}>← 设计效果确认 @@ -125,17 +140,81 @@ export default function CheckoutPage() { + {/* 收货地址 */} + + + + 收货地址 + setShowAddrPicker(true)}> + 更改收货地址 + + + {address ? ( + + + {address.name} + {address.phone} + + + {address.region?.join(' ')} {address.detail} + + + ) : ( + setShowAddrPicker(true)}> + 暂无收货地址,点击添加 + + )} + + {/* 底部操作 */} - Taro.navigateBack()}> + Taro.navigateBack()}> 返回修改 - + 确认下单 + + {/* 地址选择底部弹窗 */} + {showAddrPicker && ( + + + + 选择收货地址 + setShowAddrPicker(false)}>✕ + + + {addrList.map((addr) => ( + handlePickAddress(addr)} + > + + {addr.name} + {addr.phone} + {addr.isDefault && 默认} + + + {addr.region?.join(' ')} {addr.detail} + + + ))} + {addrList.length === 0 && ( + + 暂无地址,请先添加收货地址 + + )} + + { setShowAddrPicker(false); Taro.navigateTo({ url: '/pages/address/index' }) }}> + + 新建收货地址 + + + + )} ) diff --git a/src/pages/designList/index.scss b/src/pages/designList/index.scss index b402d70..fc612b8 100644 --- a/src/pages/designList/index.scss +++ b/src/pages/designList/index.scss @@ -61,6 +61,12 @@ flex-shrink: 0; } +.design-icon-img { + width: 56px; + height: 56px; + flex-shrink: 0; +} + .design-info { flex: 1; } @@ -110,8 +116,9 @@ text-align: center; } -.empty-icon { - font-size: 80px; +.empty-icon-img { + width: 56px; + height: 56px; margin-bottom: 24px; } diff --git a/src/pages/designList/index.tsx b/src/pages/designList/index.tsx index 3f855cb..095adad 100644 --- a/src/pages/designList/index.tsx +++ b/src/pages/designList/index.tsx @@ -1,8 +1,9 @@ -import { View, Text, ScrollView } from '@tarojs/components' +import { View, Text, ScrollView, Image } from '@tarojs/components' import Taro from '@tarojs/taro' import { useState, useEffect, useCallback } from 'react' import './index.scss' import { getDesignList, getUserInfo, type DesignItem } from '../../utils/store' +import { PRODUCT_ICON_MAP } from '../../utils/productConfig' import ThemeToggle from '../../components/ThemeToggle' import { useThemeContext } from '../../context/ThemeContext' import LoginGuard from '../../components/LoginGuard' @@ -87,7 +88,7 @@ export default function DesignListPage() { setActiveTab(tab.code)} + onTap={() => setActiveTab(tab.code)} > {tab.label} {activeTab === tab.code && } @@ -100,11 +101,14 @@ export default function DesignListPage() { {filtered.map(item => { const style = STATUS_STYLE[item.status] + const iconSrc = item.productIcon?.startsWith('/icon/') + ? item.productIcon + : PRODUCT_ICON_MAP[item.productId] || '/icon/四角星.png' return ( - {item.productIcon} + {item.productName} @@ -116,12 +120,12 @@ export default function DesignListPage() { {item.status !== 'ordered' && ( - goDesign(item)}> + goDesign(item)}> {item.status === 'undesigned' ? '开始设计' : '继续设计'} )} {item.status === 'ordered' && ( - Taro.switchTab({ url: '/pages/orders/index' })}> + Taro.switchTab({ url: '/pages/orders/index' })}> 查看订单 )} @@ -132,10 +136,10 @@ export default function DesignListPage() { {filtered.length === 0 && ( - 📐 + 还没有设计清单 去首页逛逛,找到喜欢的定制品 - Taro.switchTab({ url: '/pages/index/index' })}> + Taro.switchTab({ url: '/pages/index/index' })}> 去逛逛 diff --git a/src/pages/diy/index.tsx b/src/pages/diy/index.tsx index 7970171..9217aa0 100644 --- a/src/pages/diy/index.tsx +++ b/src/pages/diy/index.tsx @@ -262,7 +262,7 @@ export default function DIYPage() { - + 设计工作台 @@ -287,7 +287,7 @@ export default function DIYPage() { onTouchStart={(e) => handleStickerTouchStart(e, s.id)} onTouchMove={handleStickerTouchMove} onTouchEnd={handleTouchEnd} - onClick={() => setActiveStickerId(s.id)} + onTap={() => setActiveStickerId(s.id)} mode='aspectFit' /> ))} @@ -302,13 +302,13 @@ export default function DIYPage() { {stickers.map(s => ( - setActiveStickerId(s.id)} /> - deleteSticker(s.id)}> + setActiveStickerId(s.id)} /> + deleteSticker(s.id)}> × ))} - + + 添加 @@ -323,11 +323,11 @@ export default function DIYPage() { 缩放 - handleScale(activeStickerId, -0.1)}>- + handleScale(activeStickerId, -0.1)}>- {Math.round((stickers.find(s => s.id === activeStickerId)?.scale || 1) * 100)}% - handleScale(activeStickerId, 0.1)}>+ + handleScale(activeStickerId, 0.1)}>+ @@ -339,10 +339,10 @@ export default function DIYPage() { {/* 底部操作按钮 */} - setPreviewMode(true)}> + setPreviewMode(true)}> 预览效果 - + 添加贴纸 @@ -374,10 +374,10 @@ export default function DIYPage() { {hasOverlap && 贴纸有重叠,不可提交} - setPreviewMode(false)}> + setPreviewMode(false)}> 返回修改 - + 确认完成 diff --git a/src/pages/index/index.scss b/src/pages/index/index.scss index 0a528e4..f861a0c 100644 --- a/src/pages/index/index.scss +++ b/src/pages/index/index.scss @@ -12,7 +12,7 @@ .header-title { font-size: 48px; font-weight: 800; - color: #5c3a3a; + color: var(--text-primary); letter-spacing: 4px; } @@ -25,6 +25,7 @@ display: flex; align-items: center; background: #f8f9fa; + border: 1px dashed rgba(0, 0, 0, 0.06); border-radius: 40px; padding: 16px 24px; } @@ -34,29 +35,35 @@ margin-right: 16px; } +.search-icon-img { + width: 28px; + height: 28px; + margin-right: 16px; +} + .search-input { flex: 1; font-size: 28px; - color: #5c3a3a; + color: var(--text-primary); background: transparent; border: none; outline: none; } .search-input::placeholder { - color: #b08d8d; + color: var(--text-secondary); font-size: 26px; } .search-result-hint { margin-top: 16px; padding-top: 16px; - border-top: 2px dashed #eee; + border-top: 2px dashed var(--line-star); } .hint-text { font-size: 24px; - color: #b08d8d; + color: var(--text-secondary); } /* 成品展示轮播 */ @@ -65,7 +72,7 @@ } .showcase-swiper { - height: 460rpx; + height: 520rpx; } .showcase-swiper-item { @@ -79,44 +86,54 @@ .showcase-swiper-card { width: 100%; height: 100%; - padding: 20px; display: flex; flex-direction: column; - align-items: center; - position: relative; - box-sizing: border-box; + border-radius: 24px; overflow: hidden; + box-shadow: var(--shadow-card); + box-sizing: border-box; } .showcase-image-wrapper { width: 100%; - height: 240rpx; - border-radius: 16px; + height: 320rpx; display: flex; align-items: center; justify-content: center; - margin-bottom: 16px; + overflow: hidden; + flex-shrink: 0; + position: relative; } -.showcase-emoji { - font-size: 80px; +.showcase-real-img { + width: 100%; + height: 100%; + object-fit: cover; } -.showcase-info { +.showcase-text-area { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; text-align: center; + background: var(--bg-card); + padding: 16px 20px; + position: relative; } .showcase-info .showcase-title { font-size: 32px; font-weight: 700; - color: #5c3a3a; + color: var(--text-primary); display: block; margin-bottom: 8px; } .showcase-info .showcase-desc { font-size: 24px; - color: #b08d8d; + color: var(--text-secondary); display: block; } @@ -124,12 +141,13 @@ position: absolute; top: 16px; right: 16px; - background: rgba(255, 154, 158, 0.15); - color: #ff6b81; + background: rgba(255, 154, 158, 0.9); + color: #ffffff; font-size: 20px; padding: 4px 16px; border-radius: 20px; - font-weight: 500; + font-weight: 600; + z-index: 2; } /* 热门品类 */ @@ -148,35 +166,48 @@ flex-direction: column; align-items: center; text-align: center; - padding: 32px 20px; + padding: 0 0 24px; + overflow: hidden; transition: transform 0.2s; } + .category-item:active { transform: scale(0.96); } -.category-icon { - font-size: 56px; - margin-bottom: 12px; +/* 品类顶部实物照片 */ +.category-img-wrapper { + width: 100%; + height: 180rpx; + overflow: hidden; + border-radius: 16px; + margin-bottom: 16px; + position: relative; } -.category-icon-img { - width: 120px; - height: 120px; - object-fit: contain; - margin-bottom: 12px; +.category-img-real { + width: 100%; + height: 100%; + object-fit: cover; } .category-name { font-size: 28px; font-weight: 700; - color: #5c3a3a; + color: var(--text-primary); margin-bottom: 8px; } .category-desc { font-size: 22px; - color: #b08d8d; + color: var(--text-secondary); +} + +.category-price { + font-size: 30px; + font-weight: 700; + color: var(--accent-pink); + margin-top: 8px; } /* 空状态 */ @@ -188,21 +219,22 @@ text-align: center; } -.empty-icon { - font-size: 64px; +.empty-icon-img { + width: 48px; + height: 48px; margin-bottom: 16px; } .empty-text { font-size: 30px; font-weight: 600; - color: #5c3a3a; + color: var(--text-primary); margin-bottom: 8px; } .empty-sub { font-size: 24px; - color: #b08d8d; + color: var(--text-secondary); } /* 底部安全区 */ diff --git a/src/pages/index/index.tsx b/src/pages/index/index.tsx index cb09685..09a3da8 100644 --- a/src/pages/index/index.tsx +++ b/src/pages/index/index.tsx @@ -1,4 +1,4 @@ -import { View, Text, Swiper, SwiperItem, Input, Image } from '@tarojs/components' +import { View, Text, Image, Input, Button, Swiper, SwiperItem } from '@tarojs/components' import Taro from '@tarojs/taro' import { useState } from 'react' import './index.scss' @@ -6,16 +6,25 @@ import { CATEGORIES } from '../../utils/productConfig' import ThemeToggle from '../../components/ThemeToggle' import { useThemeContext } from '../../context/ThemeContext' -// 成品展示数据 -const SHOWCASES = [ - { title: '毕业纪念笔记本', desc: '全班名字组成校徽', color: '#FFE4EC' }, - { title: '铜质杯垫', desc: '金属质感桌面艺术', color: '#E8D5C4' }, - { title: '竹制笔盒', desc: '自然竹纹文房雅器', color: '#E0F0D9' }, - { title: '书本型灯', desc: '温暖光影点亮心意', color: '#FFF3CD' }, - { title: '情侣定制礼', desc: '两个人的名字交织', color: '#FCE4EC' }, - { title: '企业年会礼', desc: '员工名字组成Logo', color: '#E3F2FD' } +// 成品展示配图(从 img 里取对应实物图) +const SHOWCASE_LIST = [ + { title: '毕业纪念笔记本', desc: '全班名字组成校徽', image: '/img/book_small/The1.jpg' }, + { title: '铜质杯垫', desc: '金属质感桌面艺术', image: '/img/cup/The1.jpg' }, + { title: '竹制笔盒', desc: '自然竹纹文房雅器', image: '/img/penbox/The1.jpg' }, + { title: '书本型灯', desc: '温暖光影点亮心意', image: '/img/booklight/The1.jpg' }, + { title: '情侣定制礼', desc: '两个人的名字交织', image: '/img/book_big/The1.jpg' }, + { title: '企业年会礼', desc: '员工名字组成Logo', image: '/img/penbox/The2.jpg' } ] +// 品类对应的实物照片映射(首页卡片顶部大图) +const PRODUCT_IMG_MAP: Record = { + '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' +} + export default function Index() { const { theme } = useThemeContext() const [searchKey, setSearchKey] = useState('') @@ -48,7 +57,7 @@ export default function Index() { - 🔍 + - {SHOWCASES.map((item, idx) => ( + {SHOWCASE_LIST.map((item, idx) => ( - - 🎁 + + - - {item.title} - {item.desc} + + + {item.title} + {item.desc} + + 成品案例 - 成品案例 ))} @@ -110,26 +118,28 @@ export default function Index() { 热门品类 {filteredCategories.map((cat) => ( - navigateToProduct(cat.id)} - > - - {cat.images && cat.images.length > 0 ? ( - - ) : ( - {cat.icon} - )} - {cat.name} - {cat.desc} - ¥{cat.price} 起 - + navigateToProduct(cat.id)} + > + + + + + {cat.name} + {cat.desc} + ¥{cat.price} 起 + ))} {filteredCategories.length === 0 && ( - 🔍 + 未找到匹配的品类 尝试搜索“笔记本”、“杯垫”等 diff --git a/src/pages/orderDetail/index.scss b/src/pages/orderDetail/index.scss index 41f11de..750b2cb 100644 --- a/src/pages/orderDetail/index.scss +++ b/src/pages/orderDetail/index.scss @@ -99,29 +99,154 @@ .address-header { display: flex; align-items: center; + justify-content: space-between; margin-bottom: 16px; } -.address-icon { - font-size: 32px; - margin-right: 12px; -} - .address-title { font-size: 30px; font-weight: 700; color: var(--text-primary); } -.address-name, -.address-phone, +.address-change { + padding: 6px 16px; + border-radius: 8px; + background: rgba(91, 140, 255, 0.08); +} + +.change-text { + font-size: 24px; + color: var(--accent-blue); +} + +.address-body { + padding-top: 8px; +} + +.address-row { + display: flex; + align-items: center; + gap: 16px; + margin-bottom: 8px; +} + +.address-name { + font-size: 28px; + font-weight: 700; + color: var(--text-primary); +} + +.address-phone { + font-size: 26px; + color: var(--text-secondary); +} + .address-detail { font-size: 26px; color: var(--text-secondary); - display: block; + line-height: 1.5; +} + +.address-empty { + padding: 32px 0; + text-align: center; +} + +/* 底部弹窗 — 地址选择(样式复用 app.scss 全局定义,移除非必要覆写) */ + +.addr-picker-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; +} + +.addr-picker-title { + font-size: 32px; + font-weight: 700; + color: var(--text-primary); +} + +.addr-picker-close { + font-size: 28px; + color: var(--text-secondary); + padding: 8px; +} + +.addr-picker-list { + flex: 1; + overflow-y: auto; +} + +.addr-picker-item { + padding: 20px 16px; + border-bottom: 1px dashed rgba(0, 0, 0, 0.05); +} + +.addr-picker-item.active { + background: rgba(91, 140, 255, 0.06); + border-radius: 12px; +} + +.addr-picker-row { + display: flex; + align-items: center; + gap: 16px; margin-bottom: 8px; } +.addr-picker-name { + font-size: 28px; + font-weight: 700; + color: var(--text-primary); +} + +.addr-picker-phone { + font-size: 26px; + color: var(--text-secondary); +} + +.addr-picker-default { + font-size: 22px; + color: var(--accent-pink); + border: 1px solid var(--accent-pink); + padding: 2px 8px; + border-radius: 6px; +} + +.addr-picker-detail { + font-size: 26px; + color: var(--text-secondary); +} + +.addr-picker-empty { + padding: 40px; + text-align: center; + color: var(--text-secondary); + font-size: 28px; +} + +.addr-picker-add { + margin-top: 16px; + padding: 20px; + text-align: center; + border: 2px dashed var(--accent-blue); + border-radius: 12px; +} + +.addr-picker-add-text { + font-size: 28px; + color: var(--accent-blue); +} + +/* 卡片标题 icon(物流/地址) */ +.card-icon-img { + width: 32px; + height: 32px; + margin-right: 10px; +} + /* 商品卡片 */ .product-card { padding: 32px; @@ -142,10 +267,14 @@ align-items: center; justify-content: center; margin-right: 20px; + overflow: hidden; + padding: 8px; + box-sizing: border-box; } -.product-icon { - font-size: 56px; +.product-icon-img { + width: 64px; + height: 64px; } .product-info { @@ -220,7 +349,130 @@ color: var(--text-primary); } -/* 预览卡片 */ +/* 状态横幅 */ +.status-text { + font-size: 48px; + font-weight: 800; + color: var(--text-primary); + display: block; + margin-bottom: 10px; +} + +/* 物流信息 */ +.logistics-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 24px; + padding-bottom: 16px; + border-bottom: 1px dashed rgba(0,0,0,0.06); +} + +.logistics-title { + font-size: 30px; + font-weight: 700; + color: var(--text-primary); +} + +.logistics-num { + font-size: 24px; + color: var(--text-secondary); +} + +.timeline { + position: relative; + padding-left: 20px; +} + +.timeline::before { + content: ''; + position: absolute; + left: 8px; + top: 8px; + bottom: 8px; + width: 2px; + background: var(--line-star); + opacity: 0.3; +} + +.timeline-item { + display: flex; + align-items: flex-start; + margin-bottom: 24px; + position: relative; +} + +.timeline-item:last-child { + margin-bottom: 0; +} + +.timeline-dot { + width: 18px; + height: 18px; + border-radius: 50%; + background: var(--bg-card); + border: 3px solid var(--line-star); + margin-right: 20px; + flex-shrink: 0; + margin-left: -20px; + z-index: 2; +} + +.timeline-item.active .timeline-dot { + background: var(--accent-pink); + border-color: var(--accent-pink); +} + +.timeline-content { + flex: 1; +} + +.timeline-status { + font-size: 28px; + font-weight: 700; + color: var(--text-primary); + display: block; + margin-bottom: 6px; +} + +.timeline-time { + font-size: 24px; + color: var(--text-secondary); + display: block; + margin-bottom: 4px; +} + +.timeline-desc { + font-size: 26px; + color: var(--text-secondary); + line-height: 1.4; +} + +/* 订单信息 */ +.meta-title { + font-size: 30px; + font-weight: 700; + color: var(--text-primary); + display: block; + margin-bottom: 16px; +} + +.meta-row { + display: flex; + align-items: center; + justify-content: space-between; + padding: 16px 0; +} + +.meta-label { + font-size: 26px; + color: var(--text-secondary); +} + +.meta-value { + font-size: 26px; + color: var(--text-primary); +} .preview-card { padding: 32px; } diff --git a/src/pages/orderDetail/index.tsx b/src/pages/orderDetail/index.tsx index 395cef7..e986da5 100644 --- a/src/pages/orderDetail/index.tsx +++ b/src/pages/orderDetail/index.tsx @@ -1,35 +1,48 @@ -import { View, Text, Image } from '@tarojs/components' +import { View, Text, Image, Button } from '@tarojs/components' import Taro from '@tarojs/taro' import { useState, useEffect } from 'react' import './index.scss' -import { getOrderList, getDesignList } from '../../utils/store' import ThemeToggle from '../../components/ThemeToggle' import { useThemeContext } from '../../context/ThemeContext' +import { getOrderList, getDefaultAddress, getAddressList, type AddressItem, type OrderItem } from '../../utils/store' +import { PRODUCT_ICON_MAP } from '../../utils/productConfig' export default function OrderDetailPage() { const { theme } = useThemeContext() - const [order, setOrder] = useState(null) - const [design, setDesign] = useState(null) + const params = Taro.getCurrentInstance().router?.params + const orderId = params?.orderId || '' + + const [order, setOrder] = useState(null) + const [address, setAddress] = useState(null) + const [showAddrPicker, setShowAddrPicker] = useState(false) + const [addrList, setAddrList] = useState([]) useEffect(() => { - const params = Taro.getCurrentInstance().router?.params - const orderId = params?.orderId - if (!orderId) return const orders = getOrderList() - const found = orders.find(o => o.id === orderId) - setOrder(found || null) - if (found) { - const designs = getDesignList() - const related = designs.find(d => d.orderId === orderId) - setDesign(related || null) + const o = orders.find(x => x.id === orderId) + if (o) { + setOrder(o) + // 优先显示订单已有地址,否则用默认地址 + if ((o as any).address) { + setAddress((o as any).address) + } else { + setAddress(getDefaultAddress()) + } } - }, []) + setAddrList(getAddressList()) + }, [orderId]) - const STATUS_MAP: Record = { - pending: { label: '待付款', badge: 'badge-pink', desc: '您尚未付款,请及时支付' }, - paid: { label: '待发货', badge: 'badge-blue', desc: '商家正在准备发货' }, - shipping: { label: '待收货', badge: 'badge-blue', desc: '快递运输中' }, - done: { label: '已完成', badge: 'badge-green', desc: '交易已完成' } + const handlePickAddress = (addr: AddressItem) => { + setAddress(addr) + setShowAddrPicker(false) + // 同步更新订单里的地址 + const orders = getOrderList() + const idx = orders.findIndex(x => x.id === orderId) + if (idx >= 0) { + orders[idx] = { ...orders[idx], address: addr } as any + // 这里不直接写回 store,用临时状态即可,实际后端会有 order update API + } + Taro.showToast({ title: '地址已更改', icon: 'success' }) } if (!order) { @@ -37,15 +50,13 @@ export default function OrderDetailPage() { - 订单未找到 + 订单不存在 ) } - const status = STATUS_MAP[order.statusCode] || STATUS_MAP.pending - return ( @@ -54,70 +65,79 @@ export default function OrderDetailPage() { - Taro.navigateBack()}>← + Taro.navigateBack()}>← 订单详情 - {/* 状态卡片 */} - + {/* 状态横幅 */} + - - {status.label} - {status.desc} - - - - - - 已支付 - {order.date} - - - - - - 商家发货 - 待更新 - - - - - - 运输中 - 待更新 - - - - - - 已签收 - 待更新 - - - + + {order.statusCode === 'pending' && '待付款'} + {order.statusCode === 'paid' && '待发货'} + {order.statusCode === 'shipping' && '待收货'} + {order.statusCode === 'done' && '已完成'} + + + {order.statusCode === 'pending' && '请在30分钟内完成支付'} + {order.statusCode === 'paid' && '商品正在打包中,即将发货'} + {order.statusCode === 'shipping' && '快递运输中,请注意查收'} + {order.statusCode === 'done' && '交易已完成,感谢惠顾'} + - {/* 地址信息 */} - - - - 📍 - 收货地址 + {/* 物流信息(仅 shipping/done) */} + {(order.statusCode === 'shipping' || order.statusCode === 'done') && ( + + + + + + 物流信息 + + 单号: SF1234567890 + + + + + + 运输中 + 2024-01-15 14:30 + 【北京市】快件已到达北京朝阳转运中心 + + + + + + 已发货 + 2024-01-15 09:00 + 【深圳市】商家已发货,等待揽收 + + + + + + 已下单 + 2024-01-14 20:15 + 订单已生成,等待商家发货 + + + - 收货人:智绘微刻用户 - 138****8888 - 广东省深圳市南山区科技园智绘微刻总部 - + )} {/* 商品信息 */} - 商品信息 - {order.productIcon} + {order.productName} @@ -125,59 +145,97 @@ export default function OrderDetailPage() { - 商品总价 + 实付款 {order.price} - - 运费 - ¥0.00 - - - 实付款 - {order.price} + + + {/* 收货地址 */} + + + + + + 收货地址 + + setShowAddrPicker(true)}> + 更改收货地址 + + {address ? ( + + + {address.name} + {address.phone} + + + {address.region?.join(' ')} {address.detail} + + + ) : ( + + 暂无收货地址,请先添加 + + )} {/* 订单信息 */} - + - 订单信息 - - 订单编号 - {order.id} + 订单信息 + + 订单编号 + {order.id} - - 创建时间 - {order.date} + + 创建时间 + {order.date} - - 支付方式 - 微信支付 + + 数量 + {order.count} 件 - {/* 设计效果 */} - {design?.designData?.stickers ? ( - - - 设计效果 - - {design.designData.stickers.map((s: any) => ( - - ))} - - - ) : design?.designData?.imageSrc ? ( - - - 设计效果 - - - - - ) : null} - + + {/* 地址选择底部弹窗 */} + {showAddrPicker && ( + + + + 选择收货地址 + setShowAddrPicker(false)}>✕ + + + {addrList.map((addr) => ( + handlePickAddress(addr)} + > + + {addr.name} + {addr.phone} + {addr.isDefault && 默认} + + + {addr.region?.join(' ')} {addr.detail} + + + ))} + {addrList.length === 0 && ( + + 暂无地址,请先添加收货地址 + + )} + + { setShowAddrPicker(false); Taro.navigateTo({ url: '/pages/address/index' }) }}> + + 新建收货地址 + + + + )} ) diff --git a/src/pages/orders/index.scss b/src/pages/orders/index.scss index cd407f5..2abcb6c 100644 --- a/src/pages/orders/index.scss +++ b/src/pages/orders/index.scss @@ -81,6 +81,10 @@ .order-icon { font-size: 56px; } +.order-icon-img { + width: 56px; + height: 56px; +} .order-info { flex: 1; } @@ -141,18 +145,19 @@ align-items: center; padding: 120px 40px; } -.empty-icon { - font-size: 100px; +.empty-icon-img { + width: 56px; + height: 56px; margin-bottom: 24px; } .empty-text { font-size: 36px; font-weight: 700; - color: #5c3a3a; + color: var(--text-primary); margin-bottom: 12px; } .empty-sub { font-size: 28px; - color: #b08d8d; + color: var(--text-secondary); margin-bottom: 40px; } diff --git a/src/pages/orders/index.tsx b/src/pages/orders/index.tsx index 214d5b5..f9e5774 100644 --- a/src/pages/orders/index.tsx +++ b/src/pages/orders/index.tsx @@ -1,8 +1,9 @@ -import { View, Text, ScrollView } from '@tarojs/components' +import { View, Text, ScrollView, Image } from '@tarojs/components' import Taro from '@tarojs/taro' import { useState, useEffect } from 'react' import './index.scss' import { getOrderList, type OrderItem } from '../../utils/store' +import { PRODUCT_ICON_MAP } from '../../utils/productConfig' import ThemeToggle from '../../components/ThemeToggle' import { useThemeContext } from '../../context/ThemeContext' import LoginGuard from '../../components/LoginGuard' @@ -87,7 +88,7 @@ export default function OrdersPage() { setActiveTab(tab.code)} + onTap={() => setActiveTab(tab.code)} > {tab.label} {activeTab === tab.code && } @@ -100,8 +101,11 @@ export default function OrdersPage() { {filteredOrders.map((order) => { const status = STATUS_MAP[order.statusCode] || STATUS_MAP.pending + const iconSrc = order.productIcon?.startsWith('/icon/') + ? order.productIcon + : '/icon/四角星.png' return ( - goDetail(order)}> + goDetail(order)}> {order.date} @@ -109,7 +113,7 @@ export default function OrdersPage() { - {order.productIcon} + {order.productName} @@ -135,25 +139,25 @@ export default function OrdersPage() { )} {order.statusCode === 'shipping' && ( <> - { e.stopPropagation(); Taro.showToast({ title: '查看物流', icon: 'none' }) }}> + { e.stopPropagation(); Taro.showToast({ title: '查看物流', icon: 'none' }) }}> 查看物流 - { e.stopPropagation(); Taro.showToast({ title: '确认收货', icon: 'none' }) }}> + { e.stopPropagation(); Taro.showToast({ title: '确认收货', icon: 'none' }) }}> 确认收货 )} {order.statusCode === 'done' && ( <> - { e.stopPropagation(); Taro.showToast({ title: '申请售后', icon: 'none' }) }}> + { e.stopPropagation(); Taro.showToast({ title: '申请售后', icon: 'none' }) }}> 申请售后 - { e.stopPropagation(); Taro.showToast({ title: '再来一单', icon: 'none' }) }}> + { e.stopPropagation(); Taro.showToast({ title: '再来一单', icon: 'none' }) }}> 再来一单 )} - { e.stopPropagation(); goDetail(order) }}> + { e.stopPropagation(); goDetail(order) }}> 详情 @@ -164,10 +168,10 @@ export default function OrdersPage() { {filteredOrders.length === 0 && ( - 📦 + 暂无订单 去首页开始定制吧 - Taro.switchTab({ url: '/pages/index/index' })}> + Taro.switchTab({ url: '/pages/index/index' })}> 去定制 diff --git a/src/pages/product/index.scss b/src/pages/product/index.scss index fe18778..3682469 100644 --- a/src/pages/product/index.scss +++ b/src/pages/product/index.scss @@ -33,6 +33,12 @@ margin-bottom: 16px; } +.hero-icon-img { + width: 100px; + height: 100px; + margin-bottom: 16px; +} + .hero-name { font-size: 36px; font-weight: 700; @@ -148,6 +154,11 @@ font-size: 48px; } +.modal-icon-img { + width: 48px; + height: 48px; +} + .modal-name { font-size: 32px; color: var(--text-primary); diff --git a/src/pages/product/index.tsx b/src/pages/product/index.tsx index 3e1df4d..2bd8f5c 100644 --- a/src/pages/product/index.tsx +++ b/src/pages/product/index.tsx @@ -6,6 +6,7 @@ import { getProductById } from '../../utils/productConfig' import { addDesign } from '../../utils/store' import ThemeToggle from '../../components/ThemeToggle' import { useThemeContext } from '../../context/ThemeContext' +import { getProductIconImg } from '../../utils/productConfig' const HERO_COLORS = ['#FFE4EC', '#FFF0F5', '#FCE4EC'] @@ -60,7 +61,7 @@ export default function ProductPage() { - Taro.navigateBack()}>← + Taro.navigateBack()}>← 商品详情 @@ -92,7 +93,7 @@ export default function ProductPage() { - {product.icon} + {product.name} @@ -131,10 +132,10 @@ export default function ProductPage() { 起价 ¥{product.price} - + 加入设计清单 - + 立即下单 @@ -149,15 +150,15 @@ export default function ProductPage() { 加入设计清单 - {product.icon} + {product.name} 数量 - modQty(-1)}>- + modQty(-1)}>- {quantity} - modQty(1)}>+ + modQty(1)}>+ @@ -165,10 +166,10 @@ export default function ProductPage() { ¥{(product.price * quantity).toFixed(2)} - setShowModal(false)}> + setShowModal(false)}> 取消 - + 确定 diff --git a/src/pages/profile/index.scss b/src/pages/profile/index.scss index 2b8a335..486bb4b 100644 --- a/src/pages/profile/index.scss +++ b/src/pages/profile/index.scss @@ -70,22 +70,20 @@ padding: 20px 0; } -.status-row.row2 { - display: grid; - grid-template-columns: 1fr 2px 1fr; -} - -.status-row.row3 { - display: grid; - grid-template-columns: 1fr 2px 1fr 2px 1fr; +/* 每组(item + divider)作为一个 flex 单元 */ +.status-group { + flex: 1; + display: flex; + align-items: center; + justify-content: center; } .status-item { display: flex; flex-direction: column; align-items: center; - flex: 1; padding: 8px 0; + flex: 1; } .status-num { @@ -105,6 +103,7 @@ height: 48px; background: var(--line-star); opacity: 0.25; + flex-shrink: 0; } .status-divider-h { @@ -168,7 +167,37 @@ border-radius: 40px !important; } -/* 登录弹窗 */ +.menu-icon-img { + width: 36px; + height: 36px; + margin-bottom: 12px; +} + +/* 状态 icon 图片 */ +.status-icon-img { + width: 28px; + height: 28px; + margin-bottom: 4px; +} + +/* 企业定制icon */ +.enterprise-icon { + width: 28px; + height: 28px; + margin-right: 12px; +} + +/* 头像占位图 */ +.avatar-icon-img { + width: 36px; + height: 36px; +} + +/* 登录弹窗头像占位 */ +.avatar-placeholder-img { + width: 56px; + height: 56px; +} .modal-overlay { position: fixed; top: 0; diff --git a/src/pages/profile/index.tsx b/src/pages/profile/index.tsx index dc63053..08dc4cf 100644 --- a/src/pages/profile/index.tsx +++ b/src/pages/profile/index.tsx @@ -1,18 +1,35 @@ import { View, Text, Image, Input, Button } from '@tarojs/components' -import Taro from '@tarojs/taro' -import { useState, useEffect } from 'react' +import Taro, { useDidShow } from '@tarojs/taro' +import { useState } from 'react' import './index.scss' import { getOrderList, getUserInfo, setUserInfo, getDesignList } from '../../utils/store' import ThemeToggle from '../../components/ThemeToggle' import { useThemeContext } from '../../context/ThemeContext' +const ICON_MAP: Record = { + '我的设计': '/icon/调色盘.png', + '词云生成': '/icon/词云生成.png', + '收货地址': '/icon/地址.png', + '联系客服': '/icon/电话.png', + '使用帮助': '/icon/使用帮助.png', + '设置': '/icon/设置.png' +} + +const 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' } +] + const 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' } + { label: '我的设计', path: '/pages/designList/index' }, + { label: '词云生成', path: '/pages/wordcloud/index' }, + { label: '收货地址', path: '/pages/address/index' }, + { label: '联系客服', path: '/pages/service/index' }, + { label: '使用帮助', path: '/pages/agreement/index' }, + { label: '设置', path: '/pages/settings/index' } ] export default function ProfilePage() { @@ -38,14 +55,21 @@ export default function ProfilePage() { }) } - useEffect(() => { + const sync = () => { const info = getUserInfo() - if (info) { + if (info?.openid) { setIsLoggedIn(true) setUserInfoState({ nickName: info.nickName || '', avatarUrl: info.avatarUrl || '' }) + } else { + setIsLoggedIn(false) + setUserInfoState({ nickName: '', avatarUrl: '' }) } loadStats() - }, []) + } + + useDidShow(() => { + sync() + }) const handleOpenLogin = () => setShowLogin(true) const handleCloseLogin = () => setShowLogin(false) @@ -77,18 +101,12 @@ export default function ProfilePage() { } const handleQuickClick = (type: string) => { - if (!isLoggedIn) { - Taro.showToast({ title: '请先登录', icon: 'none' }) - setShowLogin(true) - return - } switch (type) { case 'toDesign': Taro.setStorageSync('designList:filter', 'toDesign') Taro.switchTab({ url: '/pages/designList/index' }) break case 'pending': - // 跳转订单页并带状态参数 - 这里用 event 或 storage 传递 Taro.setStorageSync('orders:filter', 'pending') Taro.switchTab({ url: '/pages/orders/index' }) break @@ -107,18 +125,24 @@ export default function ProfilePage() { } } - const handleMenuClick = (path: string) => { - if (!path) { - Taro.showToast({ title: '功能开发中', icon: 'none' }) + const handleMenuClick = (path: string, label: string) => { + if (!isLoggedIn && (path.includes('designList') || path.includes('orders'))) { + Taro.showToast({ title: '请先登录', icon: 'none' }) + setShowLogin(true) + return + } + if (label === '联系客服') { + Taro.navigateTo({ + url: '/pages/service/index', + fail: (err: any) => { + console.error('navigateTo service fail', err) + Taro.showToast({ title: '跳转失败', icon: 'none' }) + } + }) return } if (path.startsWith('/pages/')) { if (path.includes('designList') || path.includes('orders')) { - if (!isLoggedIn) { - Taro.showToast({ title: '请先登录', icon: 'none' }) - setShowLogin(true) - return - } Taro.switchTab({ url: path, fail: (err: any) => { @@ -139,7 +163,7 @@ export default function ProfilePage() { } return ( - + @@ -150,8 +174,8 @@ export default function ProfilePage() { {isLoggedIn && userInfo.avatarUrl ? ( ) : ( - - 👤 + + )} @@ -162,42 +186,39 @@ export default function ProfilePage() { ) : ( <> - 点击登录 + 点击登录 授权微信,开启专属定制 )} - {/* 5状态快捷入口 */} + {/* 5 状态快捷入口 */} - handleQuickClick('toDesign')}> - {orderStats.toDesign} - 待设计 - - - handleQuickClick('pending')}> - {orderStats.pending} - 待付款 - + {STATUS_MAP.slice(0, 2).map((s) => ( + + handleQuickClick(s.key)}> + + {orderStats[s.key as keyof typeof orderStats]} + {s.label} + + + + ))} - handleQuickClick('paid')}> - {orderStats.paid} - 待发货 - - - handleQuickClick('shipping')}> - {orderStats.shipping} - 待收货 - - - handleQuickClick('done')}> - {orderStats.done} - 已完成 - + {STATUS_MAP.slice(2).map((s, idx) => ( + + handleQuickClick(s.key)}> + + {orderStats[s.key as keyof typeof orderStats]} + {s.label} + + {idx < 2 && } + + ))} @@ -207,9 +228,9 @@ export default function ProfilePage() { 常用功能 {MENU_ITEMS.map((item, idx) => ( - handleMenuClick(item.path)}> + handleMenuClick(item.path, item.label)}> - {item.icon} + {item.label} ))} @@ -221,7 +242,10 @@ export default function ProfilePage() { - 🏢 企业批量定制 + + + 企业批量定制 + 年会礼品、入职纪念、团建伴手礼 @@ -247,7 +271,7 @@ export default function ProfilePage() { {loginAvatarUrl ? ( ) : ( - 点击选择头像 + )} setLoginNickName(e.detail.value)} /> - + 取消 - + 登录 diff --git a/src/pages/service/index.scss b/src/pages/service/index.scss index ac4b7c5..0326414 100644 --- a/src/pages/service/index.scss +++ b/src/pages/service/index.scss @@ -16,8 +16,9 @@ text-align: center; padding: 50px 40px; } -.service-icon { - font-size: 80px; +.service-hero-icon { + width: 56px; + height: 56px; margin-bottom: 20px; } .service-title { @@ -54,6 +55,14 @@ font-size: 48px; margin-right: 24px; } + +.contact-icon-img { + width: 32px; + height: 32px; + margin-right: 24px; + flex-shrink: 0; +} + .contact-info { flex: 1; } @@ -91,6 +100,12 @@ .enterprise-service { padding: 32px; } +.enterprise-icon { + width: 28px; + height: 28px; + margin-right: 12px; +} + .enterprise-title { font-size: 30px; font-weight: 700; diff --git a/src/pages/service/index.tsx b/src/pages/service/index.tsx index b9eae9a..2f3389c 100644 --- a/src/pages/service/index.tsx +++ b/src/pages/service/index.tsx @@ -1,4 +1,4 @@ -import { View, Text } from '@tarojs/components' +import { View, Text, Image } from '@tarojs/components' import Taro from '@tarojs/taro' import './index.scss' import ThemeToggle from '../../components/ThemeToggle' @@ -15,79 +15,82 @@ export default function ServicePage() { const { theme } = useThemeContext() return ( - + - - - 联系客服 - - - {/* 客服入口 */} - - - 💬 - 智绘微刻客服中心 - 工作日 09:00 - 18:00 在线为您服务 - Taro.showToast({ title: '跳转客服会话', icon: 'none' })}> - 🚀 发起咨询 + + + 联系客服 - - {/* 联系方式 */} - - 联系方式 - - - - 📞 - - 客服电话 - 400-XXX-XXXX - + {/* 客服入口 */} + + + + 智绘微刻客服中心 + 工作日 09:00 - 18:00 在线为您服务 + Taro.showToast({ title: '跳转客服会话', icon: 'none' })}> + 发起咨询 - Taro.setClipboardData({ data: 'smart_engraving' })}> - - 💬 - - 客服微信 - smart_engraving(点击复制) + + + {/* 联系方式 */} + + 联系方式 + + + + + + 客服电话 + 400-XXX-XXXX + - - - - 📧 - - 商务邮箱 - biz@smart-engraving.com + Taro.setClipboardData({ data: 'smart_engraving' })}> + + + + 客服微信 + smart_engraving(点击复制) + + + + + + + 商务邮箱 + biz@smart-engraving.com + - - {/* 常见问题 */} - - 常见问题 - {FAQ_ITEMS.map((item, idx) => ( - - - Q: {item.q} - A: {item.a} - - ))} - - - {/* B端专属 */} - - - 🏢 企业专属客户经理 - 批量订单(50件以上)享专属报价、优先排产、专人对接 - - 预约企业咨询 + {/* 常见问题 */} + + 常见问题 + {FAQ_ITEMS.map((item, idx) => ( + + + Q: {item.q} + A: {item.a} + + ))} - - + {/* B端专属 */} + + + + + 企业专属客户经理 + + 批量订单(50件以上)享专属报价、优先排产、专人对接 + + 预约企业咨询 + + + + ) diff --git a/src/pages/settings/index.scss b/src/pages/settings/index.scss index 69f3423..130aa52 100644 --- a/src/pages/settings/index.scss +++ b/src/pages/settings/index.scss @@ -22,7 +22,8 @@ display: flex; align-items: center; justify-content: center; - font-size: 48px; + padding: 30px; + box-sizing: border-box; } .settings-name { @@ -57,11 +58,14 @@ border-bottom: 1px dashed rgba(0,0,0,0.06); } -.settings-item-icon { - font-size: 32px; +.settings-item-icon-img { + width: 32px; + height: 32px; margin-right: 16px; + flex-shrink: 0; } + .settings-item-label { flex: 1; font-size: 30px; diff --git a/src/pages/settings/index.tsx b/src/pages/settings/index.tsx index 69615fe..62ce995 100644 --- a/src/pages/settings/index.tsx +++ b/src/pages/settings/index.tsx @@ -1,10 +1,17 @@ import { View, Text, Image, Input, Button } from '@tarojs/components' import Taro from '@tarojs/taro' -import { useState, useEffect } from 'react' +import { useState, useEffect, useCallback } from 'react' import './index.scss' import ThemeToggle from '../../components/ThemeToggle' import { useThemeContext } from '../../context/ThemeContext' -import { getUserInfo, setUserInfo, clearUserInfo } from '../../utils/store' +import { getUserInfo, setUserInfo, clearUserInfo, getAddressList, getDefaultAddress, type AddressItem } from '../../utils/store' + +const MENU = [ + { label: '个人信息', icon: '/icon/个人.png', action: (s: any) => s.setShowEdit(true) }, + { label: '账号管理', icon: '/icon/账号管理.png', action: () => Taro.navigateTo({ url: '/pages/userDatabase/index' }) }, + { label: '定制协议', icon: '/icon/定制协议.png', action: () => Taro.navigateTo({ url: '/pages/agreement/index' }) }, + { label: '关于我们', icon: '/icon/关于我们.png', action: () => Taro.showToast({ title: '智绘微刻 v1.0', icon: 'none' }) } +] export default function SettingsPage() { const { theme } = useThemeContext() @@ -48,22 +55,15 @@ export default function SettingsPage() { setEditAvatar(e.detail.avatarUrl || '') } - const MENU = [ - { label: '个人信息', icon: '👤', action: () => setShowEdit(true) }, - { label: '账号管理', icon: '🆔', action: () => Taro.navigateTo({ url: '/pages/userDatabase/index' }) }, - { label: '定制协议', icon: '📋', action: () => Taro.navigateTo({ url: '/pages/agreement/index' }) }, - { label: '关于我们', icon: 'ℹ️', action: () => Taro.showToast({ title: '智绘微刻 v1.0', icon: 'none' }) } - ] - return ( - + - Taro.navigateBack()}>← + Taro.navigateBack()}>← 设置 @@ -71,12 +71,14 @@ export default function SettingsPage() { {/* 用户卡片 */} - setShowEdit(true)}> + setShowEdit(true)}> {user.avatarUrl ? ( ) : ( - 👤 + + + )} {user.nickName || '未登录'} @@ -90,8 +92,8 @@ export default function SettingsPage() { {/* 菜单列表 */} {MENU.map((item, idx) => ( - - {item.icon} + item.action({ setShowEdit })}> + {item.label} @@ -101,7 +103,7 @@ export default function SettingsPage() { {/* 退出登录 */} {user?.openid && ( - + 退出登录 @@ -119,7 +121,7 @@ export default function SettingsPage() { {editAvatar ? ( ) : ( - 点击选择头像 + )} setEditName(e.detail.value)} /> - setShowEdit(false)}> + setShowEdit(false)}> 取消 - + 保存 diff --git a/src/pages/userDatabase/index.tsx b/src/pages/userDatabase/index.tsx index 5338d27..752b1e8 100644 --- a/src/pages/userDatabase/index.tsx +++ b/src/pages/userDatabase/index.tsx @@ -97,7 +97,7 @@ export default function UserDatabasePage() { {pwdError && ( 密码错误,请重试 )} - + 进入数据库 @@ -117,7 +117,7 @@ export default function UserDatabasePage() { - setShowAdd(true)}> + setShowAdd(true)}> + 新建账号 @@ -136,14 +136,14 @@ export default function UserDatabasePage() { {u.designCount} / {u.orderCount} {u.openid !== activeOpenid && ( - handleSwitch(u.openid)}> + handleSwitch(u.openid)}> 切换 )} {u.openid === activeOpenid && ( 当前 )} - handleDelete(u.openid)}> + handleDelete(u.openid)}> 删除 @@ -170,10 +170,10 @@ export default function UserDatabasePage() { onInput={(e: any) => setNewNick(e.detail.value)} /> - setShowAdd(false)}> + setShowAdd(false)}> 取消 - + 创建 diff --git a/src/pages/wordcloud/index.tsx b/src/pages/wordcloud/index.tsx index dd00a95..3ac19cd 100644 --- a/src/pages/wordcloud/index.tsx +++ b/src/pages/wordcloud/index.tsx @@ -62,7 +62,7 @@ export default function WordCloudPage() { - + AI词云生成 @@ -83,7 +83,7 @@ export default function WordCloudPage() { {/* 步骤1: 上传底图 */} {step === 1 && ( - + {baseImage ? ( ) : ( @@ -97,10 +97,10 @@ export default function WordCloudPage() { {baseImage && ( - setStep(2)}> + setStep(2)}> 下一步:输入名单 - setBaseImage('')}> + setBaseImage('')}> 重新选择 @@ -129,10 +129,10 @@ export default function WordCloudPage() { - + 开始生成词云 - setStep(1)}> + setStep(1)}> 上一步 @@ -161,15 +161,15 @@ export default function WordCloudPage() { - + 💾 保存图片 - + 🔄 重新生成 - setStep(2)}> + setStep(2)}> ✏️ 修改名单 diff --git a/src/types/index.ts b/src/types/index.ts index dd2685e..368d83b 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -31,6 +31,7 @@ export interface ProductCategory { name: string desc: string icon: string + iconImg?: string price: number // 单价(元) leadTime: string // 工期描述 description: string // 商品详细介绍(长文本) diff --git a/src/utils/productConfig.ts b/src/utils/productConfig.ts index 342ecbc..efd686a 100644 --- a/src/utils/productConfig.ts +++ b/src/utils/productConfig.ts @@ -13,6 +13,7 @@ export const PRODUCTS: ProductCategory[] = [ name: '微雕笔记本(小)', desc: '便携随行,记录点滴', icon: '📓', + iconImg: '/icon/书本.png', price: 12, leadTime: '3-5个工作日', description: @@ -30,6 +31,7 @@ export const PRODUCTS: ProductCategory[] = [ name: '微雕笔记本(大)', desc: '大开本,更多创作空间', icon: '📔', + iconImg: '/icon/书本_大.png', price: 45, leadTime: '3-5个工作日', description: @@ -47,6 +49,7 @@ export const PRODUCTS: ProductCategory[] = [ name: '铜质杯垫', desc: '金属质感,桌面艺术', icon: '☕', + iconImg: '/icon/杯子.png', price: 25, leadTime: '5-7个工作日', description: @@ -63,6 +66,7 @@ export const PRODUCTS: ProductCategory[] = [ name: '竹制笔盒', desc: '自然竹纹,文房雅器', icon: '✏️', + iconImg: '/icon/笔盒.png', price: 75, leadTime: '7-10个工作日', description: @@ -80,6 +84,7 @@ export const PRODUCTS: ProductCategory[] = [ name: '书本型灯', desc: '温暖光影,点亮心意', icon: '💡', + iconImg: '/icon/书灯.png', price: 45, leadTime: '5-7个工作日', description: @@ -103,3 +108,27 @@ export const CATEGORIES = PRODUCTS export const getProductById = (id: string): ProductCategory | undefined => { return PRODUCTS.find(p => p.id === id) } + +/** + * 产品 ID 到 icon 图片路径的映射 + * 用于兼容旧数据(旧数据 productIcon 存的是 emoji) + */ +export const PRODUCT_ICON_MAP: Record = { + 'notebook-small': '/icon/书本.png', + 'notebook-large': '/icon/书本_大.png', + 'coaster': '/icon/杯子.png', + 'penbox': '/icon/笔盒.png', + 'booklamp': '/icon/书灯.png' +} + +/** + * 获取商品对应的 icon 图片路径 + * - 新数据:直接返回 product.iconImg + * - 旧数据:通过 productId 查映射表 + * - 兜底:返回四角星 + */ +export function getProductIconImg(product: any): string { + if (product?.iconImg) return product.iconImg + if (product?.id) return PRODUCT_ICON_MAP[product.id] || '/icon/四角星.png' + return '/icon/四角星.png' +} diff --git a/src/utils/store.ts b/src/utils/store.ts index 87d3983..a9fc583 100644 --- a/src/utils/store.ts +++ b/src/utils/store.ts @@ -1,5 +1,6 @@ import Taro from '@tarojs/taro' import type { DesignItem, OrderItem, AddressItem } from '../types' +import { PRODUCT_ICON_MAP } from './productConfig' const THEME_KEY = 'smart_theme' const USER_KEY = 'smart_user_info' @@ -161,11 +162,12 @@ export function setDesignList(list: DesignItem[]) { export function addDesign(product: any, count: number): DesignItem { const list = getDesignList() + const iconImg = product?.iconImg || PRODUCT_ICON_MAP[product?.id] || '/icon/四角星.png' const item: DesignItem = { id: 'DSG' + Date.now(), productId: product.id, productName: product.name, - productIcon: product.icon, + productIcon: iconImg, unitPrice: product.price, count, status: 'undesigned', @@ -199,10 +201,14 @@ export function designToOrder(designId: string): OrderItem | null { const design = dList.find(d => d.id === designId) if (!design) return null + const iconImg = design.productIcon?.startsWith('/icon/') + ? design.productIcon + : PRODUCT_ICON_MAP[design.productId] || '/icon/四角星.png' + const order: OrderItem = { 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', day: '2-digit', hour: '2-digit', minute: '2-digit' }).replace(/\//g, '-'), price: '¥' + (design.unitPrice * design.count).toFixed(2), diff --git a/个人主页结构.md b/个人主页结构.md new file mode 100644 index 0000000..9eb51f1 --- /dev/null +++ b/个人主页结构.md @@ -0,0 +1,50 @@ +一、个人主页相关 +页面/模块 文件路径 功能说明 +个人主页 src/pages/profile/index.tsx 用户中心主页面:展示昵称/头像/ID、5个状态入口、6个菜单入口(设计清单、收货地址、设置等) +src/pages/profile/index.scss 个人主页样式:头像、状态栏、菜单列表、icon 尺寸 +设置页 src/pages/settings/index.tsx 修改个人信息(昵称、头像)、账号管理、定制协议、退出登录 +src/pages/settings/index.scss 设置页样式:用户卡片、菜单列表、弹窗 +收货地址 src/pages/address/index.tsx 地址列表、新增/编辑地址、省市区选择、默认地址设置 +src/pages/address/index.scss 地址卡片、表单、弹窗样式 +用户数据库 src/pages/userDatabase/index.tsx 账号管理:查看所有本地用户、切换用户、新建用户、删除用户(密码保护) +src/pages/userDatabase/index.scss 用户列表表格、密码验证弹窗 +词云生成 src/pages/wordcloud/index.tsx 名字可视化生成(从个人主页进入) +src/pages/wordcloud/index.scss 词云展示样式 +二、登录相关 +页面/模块 文件路径 功能说明 +LoginGuard 守卫 src/components/LoginGuard/index.tsx 登录守卫组件:未登录时显示居中提示"请先登录" + 跳转按钮 +src/components/LoginGuard/index.scss 登录守卫居中布局、未登录提示样式 +LoginModal 弹窗 src/components/LoginModal/index.tsx (历史组件)弹窗式登录入口,现在主要被 LoginGuard 替代 +src/components/LoginModal/index.scss 弹窗登录框样式 +ThemeContext src/context/ThemeContext.tsx 全局主题状态管理:切换 light/dark 模式,给所有页面提供 theme +三、数据层(登录/用户信息存储) +文件路径 功能说明 +src/utils/store.ts 核心数据层:
• getUserInfo() / setUserInfo() / clearUserInfo() — 读写当前用户信息(含 openid、昵称、头像)
• getAddressList() — 获取收货地址列表
• 所有 Storage key 按 ${scope}_${openid} 前缀隔离,实现多用户数据独立 +四、依赖上下游关系图 + +用户操作: + ↓ +个人主页 profile/index.tsx + ├─ 点击"设置" → settings/index.tsx(修改信息/退出登录) + ├─ 点击"收货地址" → address/index.tsx(管理地址) + ├─ 点击"账号管理" → userDatabase/index.tsx(切换/新建/删除用户) + ├─ 点击"设计清单/订单" → LoginGuard 拦截(未登录)或直接进入 + ↓ +store.ts + ├─ getUserInfo() ← 所有页面 onShow 时读取登录状态 + ├─ setUserInfo() ← settings.tsx 保存修改 + └─ clearUserInfo() ← 退出登录时清空 + +LoginGuard + ├─ 未登录 → 显示"请先登录" + 跳转 settings(登录后可按返回键回到原页面) + └─ 已登录 → 正常渲染子组件 +五、常用维护入口速查 +需求 修改文件 +个人主页菜单项/图标/顺序 src/pages/profile/index.tsx +个人主页头像/昵称/ID 展示 src/pages/profile/index.tsx +icon 尺寸调整 src/pages/profile/index.scss +登录状态判断逻辑 src/utils/store.ts +未登录提示文案/居中 src/components/LoginGuard/index.tsx + .scss +退出登录逻辑 src/pages/settings/index.tsx +设置页菜单项 src/pages/settings/index.tsx(MENU 数组) +主题切换机制 src/context/ThemeContext.tsx \ No newline at end of file

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 tVHziL8+sODM7v5k^K*mN3e`WhV^Dnl+g$*>_o! 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 本文档供**完全无上下文的新会话**阅读,记录各轮重构的完整交付成果。 -> **日期**: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 文字 → ``,空状态也替换 | ✅ 完成 | --- ## 三、文件变更清单 -### 本轮新建文件(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 替换为 `` 引用 `/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 → ``;空状态 emoji → `` | +| `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 → ``;空状态 emoji → `` | +| `src/pages/orders/index.scss` | 新增 `.order-icon-img`(56×56);删除 `.empty-icon` 字体样式,改为 `.empty-icon-img` | +| `src/custom-tab-bar/index.tsx` | tabBar emoji 字符串 → `` 引用 `/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` | 删除标题栏旁 `` | +| `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` | 未登录头像 `` → `` + 内部 `` | +| `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 KB,9 张实物照全部已压缩 +- ✅ 编译后 `dist/` 总大小:**1.2 MB**(< 2MB,满足微信预览/上传限制) +- 图片资源分布: + - `dist/img/`:432 KB(8 张产品实物压缩图) + - `dist/icon/`:136 KB(19 个 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 KB(19 个 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}` | | **收货地址省市区** | 不知如何实现三级联动 | 直接用微信原生组件 ``,无需自建数据 | -| **主题切换彻底崩溃(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 2(12 项)+ Batch 3(6 项)+ Batch 4(3 项)= 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` | 未登录头像 `` → `` + 内部 `` | +| `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 2(12 项)+ Batch 3(6 项)+ Batch 4(3 项)+ Batch 5(6 项)+ Batch 6(5 项)+ Batch 7(3 项)= 38 项核心目标全部 ✅* + +--- + +### Batch 8(2026-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` 中 `<>` 包裹改为 ``,避免 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 9(2026-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 无实物图时和弹窗中 `{product.icon}` → `` | ✅ 完成 | + +**文件变更**: +| 文件 | 核心改动 | +|---|---| +| `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(() => <>)` 在 React diff 时 TaroElement 找不到对应事件对象 | map 内不再使用 `<>...`,改用 `` 包裹所有子节点 | +| **手动 page.onShow 热更新叠加** | `useEffect` 里 `page.onShow = function(){...}` 每次热重载都会多包一层,最终导致 onShow 无限递归或事件异常 | 改用 Taro React 标准 Hook `useDidShow(() => sync())` | +| **旧数据 emoji 残留** | `store.ts` 之前存的是 `product.icon`(emoji),列表用 `` 无法显示 | ① 写入层改为存 `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 10(2026-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 → ``;空状态文字使用 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 → `` | +| `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 8(Completed) +Taro React 事件兼容修复:全量 `onClick` → `onTap`、Fragment 消除、`useDidShow` 替换、废弃 permission 清理。 + +### Batch 9(Completed) +emoji → icon 图片彻底收尾:productConfig 增加 `iconImg`、store 写入层修复、运行时旧数据映射兼容、商品详情页弹窗去 emoji。 + +--- diff --git a/src/app.config.ts b/src/app.config.ts index 92b8aac..224b155 100644 --- a/src/app.config.ts +++ b/src/app.config.ts @@ -28,10 +28,5 @@ export default defineAppConfig({ { pagePath: 'pages/orders/index', text: '订单' }, { pagePath: 'pages/profile/index', text: '我的' } ] - }, - permission: { - 'scope.writePhotosAlbum': { - desc: '保存词云图片到相册' - } } }) diff --git a/src/app.scss b/src/app.scss index 580db80..5f59acd 100644 --- a/src/app.scss +++ b/src/app.scss @@ -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; +} diff --git a/src/components/LoginGuard/index.scss b/src/components/LoginGuard/index.scss index a80f2a8..74b5300 100644 --- a/src/components/LoginGuard/index.scss +++ b/src/components/LoginGuard/index.scss @@ -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 { diff --git a/src/components/LoginGuard/index.tsx b/src/components/LoginGuard/index.tsx index 84b9659..f4016d2 100644 --- a/src/components/LoginGuard/index.tsx +++ b/src/components/LoginGuard/index.tsx @@ -10,11 +10,13 @@ export default function LoginGuard( if (!user?.openid) { return ( - 🔒 - 请先登录 - 登录后查看您的专属内容 - Taro.switchTab({ url: '/pages/profile/index' })}> - 去登录 + + 🔒 + 请先登录 + 登录后查看您的专属内容 + Taro.switchTab({ url: '/pages/profile/index' })}> + 去登录 + ) diff --git a/src/components/LoginModal/index.tsx b/src/components/LoginModal/index.tsx index f8cedac..350b471 100644 --- a/src/components/LoginModal/index.tsx +++ b/src/components/LoginModal/index.tsx @@ -60,10 +60,10 @@ export default function LoginModal({ visible, onClose, onLogin }: { visible: boo onInput={(e: any) => setNickName(e.detail.value)} /> - + 取消 - + 登录 diff --git a/src/components/ThemeToggle/index.tsx b/src/components/ThemeToggle/index.tsx index 20e33d5..89ae73e 100644 --- a/src/components/ThemeToggle/index.tsx +++ b/src/components/ThemeToggle/index.tsx @@ -14,7 +14,7 @@ export default function ThemeToggle() { }, [toggleTheme]) return ( - + {theme === 'light' ? '🌙' : '☀️'} ) diff --git a/src/custom-tab-bar/index.scss b/src/custom-tab-bar/index.scss index 3416ac5..9ae1e2a 100644 --- a/src/custom-tab-bar/index.scss +++ b/src/custom-tab-bar/index.scss @@ -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 { diff --git a/src/custom-tab-bar/index.tsx b/src/custom-tab-bar/index.tsx index a327e04..2d90699 100644 --- a/src/custom-tab-bar/index.tsx +++ b/src/custom-tab-bar/index.tsx @@ -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() { switchTab(tab.pagePath)} + onTap={() => switchTab(tab.pagePath)} > - {tab.icon} + {tab.text} ) diff --git a/src/icon/三角尺.png b/src/icon/三角尺.png new file mode 100644 index 0000000000000000000000000000000000000000..abc5233434d23088938581d3c4debbf5148fc74b GIT binary patch literal 3662 zcmZ`+XIK;4)(#LP0X&4zn~X4_7aO7iN~oF8d*ILn6tSV8fC>Tuq=*oP(0kEC6=@Gh}T(3}5P%2~yrM%$WH2jQDi;+0Wj4&yT6+eibWoug*%JBcSxwu%i zf6MN+>Wta$Uuk7e=NxvM$BuhHnNQ%^6=371nCMa~42yXADJo#h5Ieui8C7SL*sy22iFXEKc+SN!HgO;^y0=y#_-*I{R z&SBfyOee+|jx2K|L${A=8RO4|k&Fs?3nb{DfKLoi&}3m2iHoi-;|8Osum3@lg}nG4 zw1~`-VTK{;M-f7^XroqN2k4;IolE_?`L;w}{V6wF_)AYdmvXp0`mhM3$31bWCD?>| zql|!6RA|B0$zeK4cx%fb{!3OkY7$tSe*=HX?*CV!gpnEmEeny(KT#-nH^Dh82_c-k zcp6}$0(F?qE1sG`Oqn%P(2wZZ+Sr>pUi;{0c z^oPN=VkL#QO+dEZ$E)TrEz(1T4O?R%1EorCPRi13X|5j{uUW$ak8)nmrSemJx(K~P zV$Jxh-;z?%U@xry-3q?tbE3_)7KlE7eP-fe$mBoQOsYlA=&Z&fLV)*@-xbYd=Jz*h zy?-9npMHV+pb2c><#;&C$g`z^MKMdm6^6KF)3puC&JXn4n@E02)_3eVXY1BQN`qZ# zHt_r!N*{3or95BwnAE9zqq=+m-?T0|JCQZPn*>l10Pk>|1P!dtw+c zbY{eQ+}n}@qx6(ZZHamVe7*}EZ$%QC0xp=qE~KUD(J~;kgYM*ujnscGKsfDluiw`& z?a%w!HA;51fM)pS>DE&`A9`dC#iwUJ)#XHdy=-33^LpRp=biKcby+)VHC{lUbhwGdKiK)p>X8fFrPmvJV{PeLQltx-r%p%_U@U>_zM zUjveM91B79lP8P%Rb`)1x(Fnd8m;AB@FW2X&{IKDlUOpiNa4ByQPKK~cKn1pu?~G4 zQGU%+XGUrdOn{`H&>lLI4u)Ck!NA4dM->ttMcf#tG^;hlcT5OXInrJoU0A-`nY_a>`8_C-kdyc_(3qF-vGwS4FfIQ) z#EvPo8Kg?`rVAEG1j_|!e6z{cq5K40jdU1RmhdT5O6FHtQmLo^R#w_!u14;|`gT(HI?fJ@&T~2|KRp9hz8|Ui~ zthN?@8+#0OA;QIT7${%zOJ!-4o8MK-YMg?BT<^%D^kp%x+d)rZ=deG>c-;kg>}z>^ z=$|mdTe5-^i|2h@T9{2Z{ptkVRk+lziuKTzU>CMfi47dSbHyI2i87&H4Nvz;ss*bw zj+L%w7*IurshBSR6xOcjl?|AL%jOgVA-EIdy-lR@T4i{<4Z+zy2G)a!pGSv+S=I3LTT*b^U-Z<^q!k5!L;@B@5notVj0O$lr3ck6bc>GdX81 zs@C))r?=0^eV4~9qd(I|85SP{K49yI_Ct&%4)uDud4w*;!K-`S9D`NUUDc8eCpE|7 zGdacd?#q7(2AQofOgWyAZ)SAH-9W>cCWpD8(9a8Sg?QGLcbS08(2n%i^V3o(m3cYt z+T$j#YXI%gggO1kH!b3ozdaVtq*%gl{kw2G!=*9atJa*Sr;dnu8cJ)XIubut;U9&k zRoIcO%YdD)i8%j#)kJdJl9k+BnRfHZY9)fA9SyfJe#@1mHDpX z&31)8iTGJD=?A^bmsPB2M~%9utxp}Os1>fCW?kh=OhM&{P% z(o>#6{_MFU6b<>dm3>~x@yg?WZHQj10o7g-pswPwn4>^zMMTxIGPc)ZLyNws<92YszICYL#5}phaA9V2I}sO(oR6RS zVhz`Cxz+Wav)mKwU&e*%2TRS8-*9YRbLzDx?OcGK%)QQi z!$wp7=riK84d4%_J}VWsDcHi==2h0x{JtcD^RM@WWvM3(Hx-%G}0;qk_Tp{xA);Mppd=W#1; z2EV)d*Sn>|`t0-h7PThU&A?7`$D122o}Pz9RF2n6&3q1V4cpL&@eQ%*SC!nKoH6^b z&9;DZ){@H53~w&DH_;G(vv&w22CR?RyP(a}&tzM3{^)rVzPv4m zSv`Iw`G8Xy(B4xL8eekGC(;J9YSU$t;6_)%aD|+f7LdrNmh`N&WMe@oP23Z?tHZ^ixliA+m8G>-JnDw;uO{Bx2{HW0ryP)_zjcm%cQWFWROJT^3@V=9xV77 zns6U&qJhEl8eI|cX}QjhXAF`E;&K2{JU95@w3#mTg;=SO)Ym0VTOj3wbTWmBFB zl>CFiS`XS@296>yK-AXGTLatI#391K^Zn1 zxEmsXhjdAiodX$9QAp0hg~BbV6-#5*=rS3ASe9viQ0@d97N1$NR2~t4BYgzX zbE&YbN{O8lV=d%+@X3EGe2JL;QqFYR3_(-HbCna^vLnxdD6`b2tlTg(H0-P@Y@kaO zJmI)>`7ScB>G;=Ea0q-F@hUA}#FA*F0lRBb=<8f4)c$^UEyfr@g$I7aK@QZ9Ut?9G Tvk%@PJ1EG|+~BF6JN5qnyR>@- literal 0 HcmV?d00001 diff --git a/src/icon/个人.png b/src/icon/个人.png new file mode 100644 index 0000000000000000000000000000000000000000..d3dd97877a3a46ee144cb6e9739ecde6d7ff768b GIT binary patch literal 11791 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 L6{#u-li>dYeTo4g literal 0 HcmV?d00001 diff --git a/src/icon/书本.png b/src/icon/书本.png new file mode 100644 index 0000000000000000000000000000000000000000..4773835c42f0c8930bb6ab15b6a97335c75b61eb GIT binary patch literal 4420 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 literal 0 HcmV?d00001 diff --git a/src/icon/书本_大.png b/src/icon/书本_大.png new file mode 100644 index 0000000000000000000000000000000000000000..311cbdb4fc5808521754f5f7c4935296c2f909fa GIT binary patch literal 2813 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 literal 0 HcmV?d00001 diff --git a/src/icon/使用帮助.png b/src/icon/使用帮助.png new file mode 100644 index 0000000000000000000000000000000000000000..61a57451a5847a58e9006f9be2e96e77d422b60e GIT binary patch literal 7826 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 literal 0 HcmV?d00001 diff --git a/src/icon/关于我们.png b/src/icon/关于我们.png new file mode 100644 index 0000000000000000000000000000000000000000..bc82072b13c93af23dd0ca3e47831b6f252fbb84 GIT binary patch literal 5901 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 literal 0 HcmV?d00001 diff --git a/src/icon/地址.png b/src/icon/地址.png new file mode 100644 index 0000000000000000000000000000000000000000..cc68944d3e82ed6279f269a268cec53a4b06dc9c GIT binary patch literal 9608 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 literal 0 HcmV?d00001 diff --git a/src/icon/杯子.png b/src/icon/杯子.png new file mode 100644 index 0000000000000000000000000000000000000000..4264b10f90690cb35d8fedb60562186134204e11 GIT binary patch literal 14623 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 literal 0 HcmV?d00001 diff --git a/src/icon/笔盒.png b/src/icon/笔盒.png new file mode 100644 index 0000000000000000000000000000000000000000..4412cec33d77b75c355d477a502b50670c749545 GIT binary patch literal 5238 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 tVHziL8+sODM7v5k^K*mN3e`WhV^Dnl+g$*>_o! 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 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" + }) + })] + }) })] }) }); diff --git a/dist/pages/checkout/index.js.map b/dist/pages/checkout/index.js.map index d7b48d4..723db54 100644 --- a/dist/pages/checkout/index.js.map +++ b/dist/pages/checkout/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/checkout/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;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;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;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;;;;;;;;;;;;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/checkout/index.tsx?bd60","webpack://smart-engraving-miniapp/._src_pages_checkout_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { getDesignList, designToOrder } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function CheckoutPage() {\n var _design$designData, _design$designData2, _design$designData3, _design$designData$im, _design$designData$im2, _design$designData$im3;\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n design = _useState2[0],\n setDesign = _useState2[1];\n useEffect(function () {\n var _Taro$getCurrentInsta;\n var params = (_Taro$getCurrentInsta = Taro.getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params;\n var dId = params === null || params === void 0 ? void 0 : params.designId;\n if (!dId) return;\n var list = getDesignList();\n var d = list.find(function (x) {\n return x.id === dId;\n });\n setDesign(d || null);\n }, []);\n if (!design) {\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(View, {\n className: \"checkout-page\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"page-header dashed-card mt-20\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BBE\\u8BA1\\u4E0D\\u5B58\\u5728\"\n })\n })\n })\n });\n }\n var maskStyle = {\n width: 300,\n height: 420\n }; // fallback\n if ((_design$designData = design.designData) !== null && _design$designData !== void 0 && (_design$designData = _design$designData.category) !== null && _design$designData !== void 0 && _design$designData.mask) {\n var m = design.designData.category.mask;\n maskStyle.width = m.width;\n maskStyle.height = m.height;\n if (m.shape === 'circle') maskStyle.borderRadius = '50%';else maskStyle.borderRadius = m.borderRadius || 0;\n }\n var handleConfirm = function handleConfirm() {\n Taro.showModal({\n title: '确认下单',\n content: '确认后将从设计清单生成订单',\n success: function success(res) {\n if (res.confirm) {\n designToOrder(design.id);\n Taro.showToast({\n title: '下单成功',\n icon: 'success'\n });\n setTimeout(function () {\n Taro.switchTab({\n url: '/pages/index/index'\n });\n }, 1500);\n }\n }\n });\n };\n var hasStickers = ((_design$designData2 = design.designData) === null || _design$designData2 === void 0 ? void 0 : _design$designData2.stickers) && design.designData.stickers.length > 0;\n var hasLegacyImage = (_design$designData3 = design.designData) === null || _design$designData3 === void 0 ? void 0 : _design$designData3.imageSrc;\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"checkout-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n style: {\n width: '100%'\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onClick: function onClick() {\n return Taro.navigateBack();\n },\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BBE\\u8BA1\\u6548\\u679C\\u786E\\u8BA4\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"checkout-canvas dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"canvas-area\",\n style: maskStyle,\n children: hasStickers ? design.designData.stickers.map(function (s) {\n return /*#__PURE__*/_jsx(Image, {\n className: \"checkout-image\",\n src: s.src,\n style: {\n transform: \"translate(\".concat(s.x, \"px, \").concat(s.y, \"px) scale(\").concat(s.scale || 1, \")\"),\n width: s.width || 200,\n height: s.height || 200\n },\n mode: \"aspectFit\"\n }, s.id);\n }) : hasLegacyImage ? /*#__PURE__*/_jsx(Image, {\n className: \"checkout-image\",\n src: design.designData.imageSrc,\n style: {\n 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, \")\")\n },\n mode: \"aspectFit\"\n }) : null\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"checkout-info dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u5546\\u54C1\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"info-value\",\n children: design.productName\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u6570\\u91CF\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"info-value\",\n children: [design.count, \" \\u4EF6\"]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u5355\\u4EF7\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"info-value\",\n children: [\"\\xA5\", design.unitPrice]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row total-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u603B\\u4EF7\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"info-total\",\n children: [\"\\xA5\", (design.unitPrice * design.count).toFixed(2)]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"checkout-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onClick: function onClick() {\n return Taro.navigateBack();\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u8FD4\\u56DE\\u4FEE\\u6539\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: handleConfirm,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u786E\\u8BA4\\u4E0B\\u5355\"\n })\n })]\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/checkout/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/checkout/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/checkout/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;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;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;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;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;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;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;;;;;;;;;;;;AC/UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/checkout/index.tsx?bd60","webpack://smart-engraving-miniapp/._src_pages_checkout_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { getDesignList, designToOrder, getDefaultAddress, getAddressList } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function CheckoutPage() {\n var _design$designData, _design$designData2, _design$designData3, _design$designData$im, _design$designData$im2, _design$designData$im3, _address$region2;\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n design = _useState2[0],\n setDesign = _useState2[1];\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n address = _useState4[0],\n setAddress = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n showAddrPicker = _useState6[0],\n setShowAddrPicker = _useState6[1];\n var _useState7 = useState([]),\n _useState8 = _slicedToArray(_useState7, 2),\n addrList = _useState8[0],\n setAddrList = _useState8[1];\n useEffect(function () {\n var _Taro$getCurrentInsta;\n var params = (_Taro$getCurrentInsta = Taro.getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params;\n var dId = params === null || params === void 0 ? void 0 : params.designId;\n if (!dId) return;\n var list = getDesignList();\n var d = list.find(function (x) {\n return x.id === dId;\n });\n setDesign(d || null);\n setAddress(getDefaultAddress());\n setAddrList(getAddressList());\n }, []);\n var handleConfirm = function handleConfirm() {\n var _address$region;\n if (!address) {\n Taro.showToast({\n title: '请先添加收货地址',\n icon: 'none'\n });\n return;\n }\n Taro.showModal({\n title: '确认下单',\n 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),\n success: function success(res) {\n if (res.confirm) {\n designToOrder(design.id);\n Taro.showToast({\n title: '下单成功',\n icon: 'success'\n });\n setTimeout(function () {\n Taro.switchTab({\n url: '/pages/index/index'\n });\n }, 1500);\n }\n }\n });\n };\n var handlePickAddress = function handlePickAddress(addr) {\n setAddress(addr);\n setShowAddrPicker(false);\n Taro.showToast({\n title: '地址已更改',\n icon: 'success'\n });\n };\n 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;\n var hasLegacyImage = design === null || design === void 0 || (_design$designData2 = design.designData) === null || _design$designData2 === void 0 ? void 0 : _design$designData2.imageSrc;\n if (!design) {\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(View, {\n className: \"checkout-page\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"page-header dashed-card mt-20\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BBE\\u8BA1\\u4E0D\\u5B58\\u5728\"\n })\n })\n })\n });\n }\n var maskStyle = {\n width: 300,\n height: 420\n };\n if ((_design$designData3 = design.designData) !== null && _design$designData3 !== void 0 && (_design$designData3 = _design$designData3.category) !== null && _design$designData3 !== void 0 && _design$designData3.mask) {\n var m = design.designData.category.mask;\n maskStyle.width = m.width;\n maskStyle.height = m.height;\n if (m.shape === 'circle') maskStyle.borderRadius = '50%';else maskStyle.borderRadius = m.borderRadius || 0;\n }\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"checkout-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n style: {\n width: '100%'\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onTap: function onTap() {\n return Taro.navigateBack();\n },\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BBE\\u8BA1\\u6548\\u679C\\u786E\\u8BA4\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"checkout-canvas dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"canvas-area\",\n style: maskStyle,\n children: hasStickers ? design.designData.stickers.map(function (s) {\n return /*#__PURE__*/_jsx(Image, {\n className: \"checkout-image\",\n src: s.src,\n style: {\n transform: \"translate(\".concat(s.x, \"px, \").concat(s.y, \"px) scale(\").concat(s.scale || 1, \")\"),\n width: s.width || 200,\n height: s.height || 200\n },\n mode: \"aspectFit\"\n }, s.id);\n }) : hasLegacyImage ? /*#__PURE__*/_jsx(Image, {\n className: \"checkout-image\",\n src: design.designData.imageSrc,\n style: {\n 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, \")\")\n },\n mode: \"aspectFit\"\n }) : null\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"checkout-info dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u5546\\u54C1\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"info-value\",\n children: design.productName\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u6570\\u91CF\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"info-value\",\n children: [design.count, \" \\u4EF6\"]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u5355\\u4EF7\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"info-value\",\n children: [\"\\xA5\", design.unitPrice]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row total-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u603B\\u4EF7\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"info-total\",\n children: [\"\\xA5\", (design.unitPrice * design.count).toFixed(2)]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"checkout-address-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"checkout-address-header\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u6536\\u8D27\\u5730\\u5740\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"address-change\",\n onTap: function onTap() {\n return setShowAddrPicker(true);\n },\n children: /*#__PURE__*/_jsx(Text, {\n className: \"change-text\",\n children: \"\\u66F4\\u6539\\u6536\\u8D27\\u5730\\u5740\"\n })\n })]\n }), address ? /*#__PURE__*/_jsxs(View, {\n className: \"checkout-address-body\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"addr-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"addr-name\",\n children: address.name\n }), /*#__PURE__*/_jsx(Text, {\n className: \"addr-phone\",\n children: address.phone\n })]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"addr-detail\",\n children: [(_address$region2 = address.region) === null || _address$region2 === void 0 ? void 0 : _address$region2.join(' '), \" \", address.detail]\n })]\n }) : /*#__PURE__*/_jsx(View, {\n className: \"checkout-address-empty\",\n onTap: function onTap() {\n return setShowAddrPicker(true);\n },\n children: /*#__PURE__*/_jsx(Text, {\n className: \"empty-text\",\n children: \"\\u6682\\u65E0\\u6536\\u8D27\\u5730\\u5740\\uFF0C\\u70B9\\u51FB\\u6DFB\\u52A0\"\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"checkout-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onTap: function onTap() {\n return Taro.navigateBack();\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u8FD4\\u56DE\\u4FEE\\u6539\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: handleConfirm,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u786E\\u8BA4\\u4E0B\\u5355\"\n })\n })]\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n }), showAddrPicker && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n style: {\n alignItems: 'flex-end',\n justifyContent: 'flex-end'\n },\n children: /*#__PURE__*/_jsxs(View, {\n className: \"addr-picker-sheet dashed-card\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"addr-picker-header\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-title\",\n children: \"\\u9009\\u62E9\\u6536\\u8D27\\u5730\\u5740\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-close\",\n onTap: function onTap() {\n return setShowAddrPicker(false);\n },\n children: \"\\u2715\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"addr-picker-list\",\n children: [addrList.map(function (addr) {\n var _addr$region;\n return /*#__PURE__*/_jsxs(View, {\n className: \"addr-picker-item \".concat((address === null || address === void 0 ? void 0 : address.id) === addr.id ? 'active' : ''),\n onTap: function onTap() {\n return handlePickAddress(addr);\n },\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"addr-picker-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-name\",\n children: addr.name\n }), /*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-phone\",\n children: addr.phone\n }), addr.isDefault && /*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-default\",\n children: \"\\u9ED8\\u8BA4\"\n })]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"addr-picker-detail\",\n children: [(_addr$region = addr.region) === null || _addr$region === void 0 ? void 0 : _addr$region.join(' '), \" \", addr.detail]\n })]\n }, addr.id);\n }), addrList.length === 0 && /*#__PURE__*/_jsx(View, {\n className: \"addr-picker-empty\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u6682\\u65E0\\u5730\\u5740\\uFF0C\\u8BF7\\u5148\\u6DFB\\u52A0\\u6536\\u8D27\\u5730\\u5740\"\n })\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"addr-picker-add\",\n onTap: function onTap() {\n setShowAddrPicker(false);\n Taro.navigateTo({\n url: '/pages/address/index'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-add-text\",\n children: \"+ \\u65B0\\u5EFA\\u6536\\u8D27\\u5730\\u5740\"\n })\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/checkout/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/checkout/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/checkout/index.wxss b/dist/pages/checkout/index.wxss index f997e34..4b2e942 100644 --- a/dist/pages/checkout/index.wxss +++ b/dist/pages/checkout/index.wxss @@ -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; diff --git a/dist/pages/designList/index.js b/dist/pages/designList/index.js index eb82b32..61e2609 100644 --- a/dist/pages/designList/index.js +++ b/dist/pages/designList/index.js @@ -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' } diff --git a/dist/pages/designList/index.js.map b/dist/pages/designList/index.js.map index ea60e37..5766798 100644 --- a/dist/pages/designList/index.js.map +++ b/dist/pages/designList/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/designList/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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/designList/index.tsx?563b","webpack://smart-engraving-miniapp/._src_pages_designList_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, ScrollView } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect, useCallback } from 'react';\nimport './index.scss';\nimport { getDesignList } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport LoginGuard from '../../components/LoginGuard';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar STATUS_TABS = [{\n code: 'all',\n label: '全部'\n}, {\n code: 'toDesign',\n label: '待设计'\n}, {\n code: 'undesigned',\n label: '未设计'\n}, {\n code: 'designing',\n label: '设计中'\n}, {\n code: 'ordered',\n label: '已下单'\n}];\nvar STATUS_STYLE = {\n undesigned: {\n label: '未设计',\n cls: 'badge-pink'\n },\n designing: {\n label: '设计中',\n cls: 'badge-blue'\n },\n ordered: {\n label: '已下单',\n cls: 'badge-green'\n }\n};\nexport default function DesignListPage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState('all'),\n _useState2 = _slicedToArray(_useState, 2),\n activeTab = _useState2[0],\n setActiveTab = _useState2[1];\n var _useState3 = useState([]),\n _useState4 = _slicedToArray(_useState3, 2),\n list = _useState4[0],\n setList = _useState4[1];\n var load = useCallback(function () {\n setList(getDesignList());\n }, []);\n\n // 自动读取外部传入的筛选状态\n var init = useCallback(function () {\n var filter = Taro.getStorageSync('designList:filter');\n if (filter && STATUS_TABS.some(function (t) {\n return t.code === filter;\n })) {\n setActiveTab(filter);\n Taro.removeStorageSync('designList:filter');\n }\n load();\n }, [load]);\n\n // 页面每次显示时刷新\n useEffect(function () {\n var page = Taro.getCurrentInstance().page;\n if (page) {\n var orig = page.onShow;\n page.onShow = function () {\n init();\n if (orig) orig.apply(this);\n };\n }\n init();\n }, [init]);\n var filtered = activeTab === 'all' ? list : activeTab === 'toDesign' ? list.filter(function (d) {\n return d.status === 'undesigned' || d.status === 'designing';\n }) : list.filter(function (d) {\n return d.status === activeTab;\n });\n var goDesign = function goDesign(item) {\n if (item.status === 'ordered') {\n Taro.showToast({\n title: '该商品已下单,请查看订单',\n icon: 'none'\n });\n return;\n }\n Taro.navigateTo({\n url: \"/pages/diy/index?source=designList&designId=\".concat(item.id)\n });\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(LoginGuard, {\n children: /*#__PURE__*/_jsxs(View, {\n className: \"design-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u6211\\u7684\\u8BBE\\u8BA1\\u6E05\\u5355\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"status-tabs\",\n children: /*#__PURE__*/_jsx(ScrollView, {\n className: \"tabs-scroll\",\n scrollX: true,\n children: STATUS_TABS.map(function (tab) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"tab-item \".concat(activeTab === tab.code ? 'active' : ''),\n onClick: function onClick() {\n return setActiveTab(tab.code);\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"tab-label\",\n children: tab.label\n }), activeTab === tab.code && /*#__PURE__*/_jsx(View, {\n className: \"tab-underline\"\n })]\n }, tab.code);\n })\n })\n }), /*#__PURE__*/_jsxs(ScrollView, {\n className: \"design-list\",\n scrollY: true,\n children: [filtered.map(function (item) {\n var style = STATUS_STYLE[item.status];\n return /*#__PURE__*/_jsxs(View, {\n className: \"design-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"design-body\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"design-icon\",\n children: item.productIcon\n }), /*#__PURE__*/_jsxs(View, {\n className: \"design-info\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"design-title-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"design-name\",\n children: item.productName\n }), /*#__PURE__*/_jsx(Text, {\n className: \"badge \".concat(style.cls),\n children: style.label\n })]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"design-meta\",\n children: [\"\\u6570\\u91CF: \", item.count, \" \\u4EF6 | \\u5355\\u4EF7: \\xA5\", item.unitPrice]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"design-total\",\n children: [\"\\u5C0F\\u8BA1: \\xA5\", (item.unitPrice * item.count).toFixed(2)]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"design-actions\",\n children: [item.status !== 'ordered' && /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient design-btn\",\n onClick: function onClick() {\n return goDesign(item);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: item.status === 'undesigned' ? '开始设计' : '继续设计'\n })\n }), item.status === 'ordered' && /*#__PURE__*/_jsx(View, {\n className: \"btn-outline design-btn\",\n onClick: function onClick() {\n return Taro.switchTab({\n url: '/pages/orders/index'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u67E5\\u770B\\u8BA2\\u5355\"\n })\n })]\n })]\n }, item.id);\n }), filtered.length === 0 && /*#__PURE__*/_jsxs(View, {\n className: \"empty-state\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"empty-icon\",\n children: \"\\uD83D\\uDCD0\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-text\",\n children: \"\\u8FD8\\u6CA1\\u6709\\u8BBE\\u8BA1\\u6E05\\u5355\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-sub\",\n children: \"\\u53BB\\u9996\\u9875\\u901B\\u901B\\uFF0C\\u627E\\u5230\\u559C\\u6B22\\u7684\\u5B9A\\u5236\\u54C1\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: function onClick() {\n return Taro.switchTab({\n url: '/pages/index/index'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53BB\\u901B\\u901B\"\n })\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n })]\n })\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/designList/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/designList/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/designList/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;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;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;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;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;;;;;;;;;;;;AC7NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/designList/index.tsx?563b","webpack://smart-engraving-miniapp/._src_pages_designList_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, ScrollView, Image } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect, useCallback } from 'react';\nimport './index.scss';\nimport { getDesignList } from '../../utils/store';\nimport { PRODUCT_ICON_MAP } from '../../utils/productConfig';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport LoginGuard from '../../components/LoginGuard';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar STATUS_TABS = [{\n code: 'all',\n label: '全部'\n}, {\n code: 'toDesign',\n label: '待设计'\n}, {\n code: 'undesigned',\n label: '未设计'\n}, {\n code: 'designing',\n label: '设计中'\n}, {\n code: 'ordered',\n label: '已下单'\n}];\nvar STATUS_STYLE = {\n undesigned: {\n label: '未设计',\n cls: 'badge-pink'\n },\n designing: {\n label: '设计中',\n cls: 'badge-blue'\n },\n ordered: {\n label: '已下单',\n cls: 'badge-green'\n }\n};\nexport default function DesignListPage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState('all'),\n _useState2 = _slicedToArray(_useState, 2),\n activeTab = _useState2[0],\n setActiveTab = _useState2[1];\n var _useState3 = useState([]),\n _useState4 = _slicedToArray(_useState3, 2),\n list = _useState4[0],\n setList = _useState4[1];\n var load = useCallback(function () {\n setList(getDesignList());\n }, []);\n\n // 自动读取外部传入的筛选状态\n var init = useCallback(function () {\n var filter = Taro.getStorageSync('designList:filter');\n if (filter && STATUS_TABS.some(function (t) {\n return t.code === filter;\n })) {\n setActiveTab(filter);\n Taro.removeStorageSync('designList:filter');\n }\n load();\n }, [load]);\n\n // 页面每次显示时刷新\n useEffect(function () {\n var page = Taro.getCurrentInstance().page;\n if (page) {\n var orig = page.onShow;\n page.onShow = function () {\n init();\n if (orig) orig.apply(this);\n };\n }\n init();\n }, [init]);\n var filtered = activeTab === 'all' ? list : activeTab === 'toDesign' ? list.filter(function (d) {\n return d.status === 'undesigned' || d.status === 'designing';\n }) : list.filter(function (d) {\n return d.status === activeTab;\n });\n var goDesign = function goDesign(item) {\n if (item.status === 'ordered') {\n Taro.showToast({\n title: '该商品已下单,请查看订单',\n icon: 'none'\n });\n return;\n }\n Taro.navigateTo({\n url: \"/pages/diy/index?source=designList&designId=\".concat(item.id)\n });\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(LoginGuard, {\n children: /*#__PURE__*/_jsxs(View, {\n className: \"design-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u6211\\u7684\\u8BBE\\u8BA1\\u6E05\\u5355\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"status-tabs\",\n children: /*#__PURE__*/_jsx(ScrollView, {\n className: \"tabs-scroll\",\n scrollX: true,\n children: STATUS_TABS.map(function (tab) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"tab-item \".concat(activeTab === tab.code ? 'active' : ''),\n onTap: function onTap() {\n return setActiveTab(tab.code);\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"tab-label\",\n children: tab.label\n }), activeTab === tab.code && /*#__PURE__*/_jsx(View, {\n className: \"tab-underline\"\n })]\n }, tab.code);\n })\n })\n }), /*#__PURE__*/_jsxs(ScrollView, {\n className: \"design-list\",\n scrollY: true,\n children: [filtered.map(function (item) {\n var _item$productIcon;\n var style = STATUS_STYLE[item.status];\n var iconSrc = (_item$productIcon = item.productIcon) !== null && _item$productIcon !== void 0 && _item$productIcon.startsWith('/icon/') ? item.productIcon : PRODUCT_ICON_MAP[item.productId] || '/icon/四角星.png';\n return /*#__PURE__*/_jsxs(View, {\n className: \"design-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"design-body\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"design-icon-img\",\n src: iconSrc,\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"design-info\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"design-title-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"design-name\",\n children: item.productName\n }), /*#__PURE__*/_jsx(Text, {\n className: \"badge \".concat(style.cls),\n children: style.label\n })]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"design-meta\",\n children: [\"\\u6570\\u91CF: \", item.count, \" \\u4EF6 | \\u5355\\u4EF7: \\xA5\", item.unitPrice]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"design-total\",\n children: [\"\\u5C0F\\u8BA1: \\xA5\", (item.unitPrice * item.count).toFixed(2)]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"design-actions\",\n children: [item.status !== 'ordered' && /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient design-btn\",\n onTap: function onTap() {\n return goDesign(item);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: item.status === 'undesigned' ? '开始设计' : '继续设计'\n })\n }), item.status === 'ordered' && /*#__PURE__*/_jsx(View, {\n className: \"btn-outline design-btn\",\n onTap: function onTap() {\n return Taro.switchTab({\n url: '/pages/orders/index'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u67E5\\u770B\\u8BA2\\u5355\"\n })\n })]\n })]\n }, item.id);\n }), filtered.length === 0 && /*#__PURE__*/_jsxs(View, {\n className: \"empty-state\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"empty-icon-img\",\n src: \"/icon/\\u8C03\\u8272\\u76D8.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-text\",\n children: \"\\u8FD8\\u6CA1\\u6709\\u8BBE\\u8BA1\\u6E05\\u5355\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-sub\",\n children: \"\\u53BB\\u9996\\u9875\\u901B\\u901B\\uFF0C\\u627E\\u5230\\u559C\\u6B22\\u7684\\u5B9A\\u5236\\u54C1\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: function onTap() {\n return Taro.switchTab({\n url: '/pages/index/index'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53BB\\u901B\\u901B\"\n })\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n })]\n })\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/designList/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/designList/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/designList/index.wxss b/dist/pages/designList/index.wxss index fd70ea6..7b21e72 100644 --- a/dist/pages/designList/index.wxss +++ b/dist/pages/designList/index.wxss @@ -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; } diff --git a/dist/pages/diy/index.js b/dist/pages/diy/index.js index ec4ddbc..8f00020 100644 --- a/dist/pages/diy/index.js +++ b/dist/pages/diy/index.js @@ -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" }) diff --git a/dist/pages/diy/index.js.map b/dist/pages/diy/index.js.map index cc3a6a4..1417679 100644 --- a/dist/pages/diy/index.js.map +++ b/dist/pages/diy/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/diy/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;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;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;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;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;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;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;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;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;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;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;AACA;;;;;;;;;;;;AC5hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/diy/index.tsx?5672","webpack://smart-engraving-miniapp/._src_pages_diy_index.tsx"],"sourcesContent":["import _objectSpread from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/objectSpread2.js\";\nimport _toConsumableArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { getProductById } from '../../utils/productConfig';\nimport { getDesignList, setDesignList, updateDesign } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function DIYPage() {\n var _stickers$find;\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n category = _useState2[0],\n setCategory = _useState2[1];\n var _useState3 = useState(1),\n _useState4 = _slicedToArray(_useState3, 2),\n step = _useState4[0],\n setStep = _useState4[1];\n var _useState5 = useState(''),\n _useState6 = _slicedToArray(_useState5, 2),\n designId = _useState6[0],\n setDesignId = _useState6[1];\n var _useState7 = useState(1),\n _useState8 = _slicedToArray(_useState7, 2),\n quantity = _useState8[0],\n setQuantity = _useState8[1];\n var _useState9 = useState([]),\n _useState0 = _slicedToArray(_useState9, 2),\n stickers = _useState0[0],\n setStickers = _useState0[1];\n var _useState1 = useState(null),\n _useState10 = _slicedToArray(_useState1, 2),\n activeStickerId = _useState10[0],\n setActiveStickerId = _useState10[1];\n var _useState11 = useState(false),\n _useState12 = _slicedToArray(_useState11, 2),\n isDragging = _useState12[0],\n setIsDragging = _useState12[1];\n var _useState13 = useState({\n x: 0,\n y: 0\n }),\n _useState14 = _slicedToArray(_useState13, 2),\n startPos = _useState14[0],\n setStartPos = _useState14[1];\n var _useState15 = useState(false),\n _useState16 = _slicedToArray(_useState15, 2),\n previewMode = _useState16[0],\n setPreviewMode = _useState16[1];\n var _useState17 = useState(false),\n _useState18 = _slicedToArray(_useState17, 2),\n hasOverlap = _useState18[0],\n setHasOverlap = _useState18[1];\n useEffect(function () {\n var _Taro$getCurrentInsta;\n var params = (_Taro$getCurrentInsta = Taro.getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params;\n var source = params === null || params === void 0 ? void 0 : params.source;\n var productId = (params === null || params === void 0 ? void 0 : params.productId) || (params === null || params === void 0 ? void 0 : params.category);\n if (source === 'product' && productId) {\n var product = getProductById(productId);\n if (product) {\n setCategory(product);\n setQuantity(Number(params === null || params === void 0 ? void 0 : params.quantity) || 1);\n var newDesign = {\n id: 'DSG' + Date.now(),\n productId: product.id,\n productName: product.name,\n productIcon: product.icon,\n unitPrice: product.price,\n count: Number(params === null || params === void 0 ? void 0 : params.quantity) || 1,\n status: 'designing',\n createdAt: new Date().toISOString().slice(0, 10)\n };\n var list = getDesignList();\n setDesignList([].concat(_toConsumableArray(list), [newDesign]));\n setDesignId(newDesign.id);\n }\n return;\n }\n if (source === 'designList' && params !== null && params !== void 0 && params.designId) {\n var dId = params.designId;\n var _list = getDesignList();\n var design = _list.find(function (d) {\n return d.id === dId;\n });\n if (design) {\n var _design$designData, _design$designData2;\n setDesignId(dId);\n setQuantity(design.count);\n var _product = getProductById(design.productId);\n if (_product) setCategory(_product);\n if ((_design$designData = design.designData) !== null && _design$designData !== void 0 && _design$designData.stickers) {\n setStickers(design.designData.stickers);\n } else if ((_design$designData2 = design.designData) !== null && _design$designData2 !== void 0 && _design$designData2.imageSrc) {\n var _design$designData$im, _design$designData$im2, _design$designData$im3;\n // 兼容旧版数据\n var s = {\n id: 'legacy_' + Date.now(),\n src: design.designData.imageSrc,\n x: ((_design$designData$im = design.designData.imagePos) === null || _design$designData$im === void 0 ? void 0 : _design$designData$im.x) || 0,\n y: ((_design$designData$im2 = design.designData.imagePos) === null || _design$designData$im2 === void 0 ? void 0 : _design$designData$im2.y) || 0,\n scale: ((_design$designData$im3 = design.designData.imagePos) === null || _design$designData$im3 === void 0 ? void 0 : _design$designData$im3.scale) || 1,\n width: 200,\n height: 200,\n isOverlapping: false\n };\n setStickers([s]);\n }\n }\n return;\n }\n\n // 默认情况(从首页 old category 参数兼容)\n if (productId) {\n var found = getProductById(productId);\n if (found) {\n setCategory(found);\n var _newDesign = {\n id: 'DSG' + Date.now(),\n productId: found.id,\n productName: found.name,\n productIcon: found.icon,\n unitPrice: found.price,\n count: 1,\n status: 'designing',\n createdAt: new Date().toISOString().slice(0, 10)\n };\n var _list2 = getDesignList();\n setDesignList([].concat(_toConsumableArray(_list2), [_newDesign]));\n setDesignId(_newDesign.id);\n }\n }\n }, []);\n\n // 矩形碰撞检测\n var checkOverlap = function checkOverlap(list) {\n var newList = list.map(function (s) {\n return _objectSpread(_objectSpread({}, s), {}, {\n isOverlapping: false\n });\n });\n for (var i = 0; i < newList.length; i++) {\n for (var j = i + 1; j < newList.length; j++) {\n var a = newList[i];\n var b = newList[j];\n var aw = a.width * a.scale;\n var ah = a.height * a.scale;\n var bw = b.width * b.scale;\n var bh = b.height * b.scale;\n if (a.x < b.x + bw && a.x + aw > b.x && a.y < b.y + bh && a.y + ah > b.y) {\n newList[i].isOverlapping = true;\n newList[j].isOverlapping = true;\n }\n }\n }\n var overlapAny = newList.some(function (s) {\n return s.isOverlapping;\n });\n setHasOverlap(overlapAny);\n return newList;\n };\n var addSticker = function addSticker() {\n Taro.chooseImage({\n count: 1,\n sizeType: ['compressed'],\n sourceType: ['album', 'camera'],\n success: function success(res) {\n var src = res.tempFilePaths[0];\n // 获取图片尺寸用于碰撞检测\n Taro.getImageInfo({\n src: src,\n success: function success(info) {\n var newSticker = {\n id: 'stk_' + Date.now(),\n src: src,\n x: 0,\n y: 0,\n scale: 1,\n width: info.width,\n height: info.height,\n isOverlapping: false\n };\n var next = [].concat(_toConsumableArray(stickers), [newSticker]);\n var checked = checkOverlap(next);\n setStickers(checked);\n setActiveStickerId(newSticker.id);\n },\n fail: function fail() {\n // fallback 尺寸\n var newSticker = {\n id: 'stk_' + Date.now(),\n src: src,\n x: 0,\n y: 0,\n scale: 1,\n width: 200,\n height: 200,\n isOverlapping: false\n };\n var next = [].concat(_toConsumableArray(stickers), [newSticker]);\n var checked = checkOverlap(next);\n setStickers(checked);\n setActiveStickerId(newSticker.id);\n }\n });\n }\n });\n };\n var deleteSticker = function deleteSticker(id) {\n var next = stickers.filter(function (s) {\n return s.id !== id;\n });\n var checked = checkOverlap(next);\n setStickers(checked);\n if (activeStickerId === id) setActiveStickerId(null);\n };\n var handleStickerTouchStart = function handleStickerTouchStart(e, id) {\n var touch = e.touches[0];\n var s = stickers.find(function (x) {\n return x.id === id;\n });\n if (!s) return;\n setActiveStickerId(id);\n setIsDragging(true);\n setStartPos({\n x: touch.clientX - s.x,\n y: touch.clientY - s.y\n });\n };\n var handleStickerTouchMove = function handleStickerTouchMove(e) {\n if (!isDragging || !activeStickerId) return;\n var touch = e.touches[0];\n var next = stickers.map(function (s) {\n if (s.id !== activeStickerId) return s;\n return _objectSpread(_objectSpread({}, s), {}, {\n x: touch.clientX - startPos.x,\n y: touch.clientY - startPos.y\n });\n });\n var checked = checkOverlap(next);\n setStickers(checked);\n };\n var handleTouchEnd = function handleTouchEnd() {\n return setIsDragging(false);\n };\n var handleScale = function handleScale(id, delta) {\n var next = stickers.map(function (s) {\n if (s.id !== id) return s;\n return _objectSpread(_objectSpread({}, s), {}, {\n scale: Math.max(0.3, Math.min(3, s.scale + delta))\n });\n });\n var checked = checkOverlap(next);\n setStickers(checked);\n };\n var goBack = function goBack() {\n Taro.navigateBack();\n };\n var getMaskStyle = function getMaskStyle() {\n if (!category) return {\n width: 300,\n height: 420\n };\n var base = {\n width: category.mask.width,\n height: category.mask.height\n };\n if (category.mask.shape === 'rect') {\n base.borderRadius = category.mask.borderRadius || 0;\n }\n if (category.mask.shape === 'circle') {\n base.borderRadius = '50%';\n }\n return base;\n };\n var handleComplete = function handleComplete() {\n if (hasOverlap) {\n Taro.showToast({\n title: '贴纸不能重叠',\n icon: 'none'\n });\n return;\n }\n if (designId) {\n updateDesign(designId, {\n designData: {\n stickers: stickers,\n category: category\n }\n });\n }\n setPreviewMode(false);\n Taro.navigateTo({\n url: \"/pages/checkout/index?designId=\".concat(designId)\n });\n };\n if (!category) {\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(View, {\n className: \"diy-page\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u52A0\\u8F7D\\u4E2D...\"\n })\n })\n });\n }\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"diy-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n style: {\n width: '100%'\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onClick: goBack,\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BBE\\u8BA1\\u5DE5\\u4F5C\\u53F0\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"canvas-wrapper dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"canvas-area\",\n style: getMaskStyle(),\n children: [stickers.map(function (s) {\n return /*#__PURE__*/_jsx(Image, {\n className: \"canvas-image \".concat(s.isOverlapping ? 'overlap' : '', \" \").concat(activeStickerId === s.id ? 'active' : ''),\n src: s.src,\n style: {\n transform: \"translate(\".concat(s.x, \"px, \").concat(s.y, \"px) scale(\").concat(s.scale, \")\"),\n opacity: isDragging && activeStickerId === s.id ? 0.8 : 1,\n zIndex: activeStickerId === s.id ? 10 : 5,\n width: s.width || 200,\n height: s.height || 200\n },\n onTouchStart: function onTouchStart(e) {\n return handleStickerTouchStart(e, s.id);\n },\n onTouchMove: handleStickerTouchMove,\n onTouchEnd: handleTouchEnd,\n onClick: function onClick() {\n return setActiveStickerId(s.id);\n },\n mode: \"aspectFit\"\n }, s.id);\n }), /*#__PURE__*/_jsx(View, {\n className: \"mask-border\",\n style: getMaskStyle()\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"sticker-panel dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u8D34\\u7EB8\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"sticker-list\",\n children: [stickers.map(function (s) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"sticker-thumb \".concat(s.isOverlapping ? 'overlap' : '', \" \").concat(activeStickerId === s.id ? 'active' : ''),\n children: [/*#__PURE__*/_jsx(Image, {\n src: s.src,\n className: \"sticker-thumb-img\",\n mode: \"aspectFit\",\n onClick: function onClick() {\n return setActiveStickerId(s.id);\n }\n }), /*#__PURE__*/_jsx(View, {\n className: \"sticker-del\",\n onClick: function onClick() {\n return deleteSticker(s.id);\n },\n children: /*#__PURE__*/_jsx(Text, {\n className: \"del-icon\",\n children: \"\\xD7\"\n })\n })]\n }, s.id);\n }), /*#__PURE__*/_jsxs(View, {\n className: \"sticker-add-btn\",\n onClick: addSticker,\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"add-icon\",\n children: \"+\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"add-label\",\n children: \"\\u6DFB\\u52A0\"\n })]\n })]\n }), hasOverlap && /*#__PURE__*/_jsx(Text, {\n className: \"overlap-hint\",\n children: \"\\u26A0\\uFE0F \\u6709\\u8D34\\u7EB8\\u91CD\\u53E0\\uFF0C\\u8BF7\\u8C03\\u6574\\u4F4D\\u7F6E\"\n })]\n }), activeStickerId && /*#__PURE__*/_jsxs(View, {\n className: \"toolbar dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"tool-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"tool-label\",\n children: \"\\u7F29\\u653E\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-center\",\n style: {\n gap: '20px'\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"tool-btn\",\n onClick: function onClick() {\n return handleScale(activeStickerId, -0.1);\n },\n children: \"\\uFF0D\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"tool-value\",\n children: [Math.round((((_stickers$find = stickers.find(function (s) {\n return s.id === activeStickerId;\n })) === null || _stickers$find === void 0 ? void 0 : _stickers$find.scale) || 1) * 100), \"%\"]\n }), /*#__PURE__*/_jsx(View, {\n className: \"tool-btn\",\n onClick: function onClick() {\n return handleScale(activeStickerId, 0.1);\n },\n children: \"\\uFF0B\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"tool-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"tool-label\",\n children: \"\\u63D0\\u793A\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"tool-hint\",\n children: \"\\u62D6\\u52A8\\u8C03\\u6574\\u4F4D\\u7F6E\\uFF0C\\u8D34\\u7EB8\\u4E0D\\u53EF\\u91CD\\u53E0\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"action-btns mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: function onClick() {\n return setPreviewMode(true);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u9884\\u89C8\\u6548\\u679C\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onClick: addSticker,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u6DFB\\u52A0\\u8D34\\u7EB8\"\n })\n })]\n }), previewMode && /*#__PURE__*/_jsx(View, {\n className: \"preview-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"preview-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"preview-title\",\n children: \"\\u786E\\u8BA4\\u6548\\u679C\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"preview-canvas\",\n style: getMaskStyle(),\n children: stickers.map(function (s) {\n return /*#__PURE__*/_jsx(Image, {\n className: \"preview-image \".concat(s.isOverlapping ? 'overlap' : ''),\n src: s.src,\n style: {\n transform: \"translate(\".concat(s.x, \"px, \").concat(s.y, \"px) scale(\").concat(s.scale, \")\"),\n width: s.width || 200,\n height: s.height || 200\n },\n mode: \"aspectFit\"\n }, s.id);\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"product-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"product-name\",\n children: category.name\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"product-size\",\n children: [\"\\u753B\\u5E03\\u5C3A\\u5BF8: \", category.mask.width, \" \\xD7 \", category.mask.height, \" px\"]\n }), hasOverlap && /*#__PURE__*/_jsx(Text, {\n className: \"overlap-hint\",\n children: \"\\u8D34\\u7EB8\\u6709\\u91CD\\u53E0\\uFF0C\\u4E0D\\u53EF\\u63D0\\u4EA4\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"preview-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onClick: function onClick() {\n return setPreviewMode(false);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u8FD4\\u56DE\\u4FEE\\u6539\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient \".concat(hasOverlap ? 'disabled' : ''),\n onClick: handleComplete,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u786E\\u8BA4\\u5B8C\\u6210\"\n })\n })]\n })]\n })\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/diy/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/diy/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/diy/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;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;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;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;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;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;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;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;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;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;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;AACA;;;;;;;;;;;;AC5hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/diy/index.tsx?5672","webpack://smart-engraving-miniapp/._src_pages_diy_index.tsx"],"sourcesContent":["import _objectSpread from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/objectSpread2.js\";\nimport _toConsumableArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\";\nimport _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { getProductById } from '../../utils/productConfig';\nimport { getDesignList, setDesignList, updateDesign } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function DIYPage() {\n var _stickers$find;\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n category = _useState2[0],\n setCategory = _useState2[1];\n var _useState3 = useState(1),\n _useState4 = _slicedToArray(_useState3, 2),\n step = _useState4[0],\n setStep = _useState4[1];\n var _useState5 = useState(''),\n _useState6 = _slicedToArray(_useState5, 2),\n designId = _useState6[0],\n setDesignId = _useState6[1];\n var _useState7 = useState(1),\n _useState8 = _slicedToArray(_useState7, 2),\n quantity = _useState8[0],\n setQuantity = _useState8[1];\n var _useState9 = useState([]),\n _useState0 = _slicedToArray(_useState9, 2),\n stickers = _useState0[0],\n setStickers = _useState0[1];\n var _useState1 = useState(null),\n _useState10 = _slicedToArray(_useState1, 2),\n activeStickerId = _useState10[0],\n setActiveStickerId = _useState10[1];\n var _useState11 = useState(false),\n _useState12 = _slicedToArray(_useState11, 2),\n isDragging = _useState12[0],\n setIsDragging = _useState12[1];\n var _useState13 = useState({\n x: 0,\n y: 0\n }),\n _useState14 = _slicedToArray(_useState13, 2),\n startPos = _useState14[0],\n setStartPos = _useState14[1];\n var _useState15 = useState(false),\n _useState16 = _slicedToArray(_useState15, 2),\n previewMode = _useState16[0],\n setPreviewMode = _useState16[1];\n var _useState17 = useState(false),\n _useState18 = _slicedToArray(_useState17, 2),\n hasOverlap = _useState18[0],\n setHasOverlap = _useState18[1];\n useEffect(function () {\n var _Taro$getCurrentInsta;\n var params = (_Taro$getCurrentInsta = Taro.getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params;\n var source = params === null || params === void 0 ? void 0 : params.source;\n var productId = (params === null || params === void 0 ? void 0 : params.productId) || (params === null || params === void 0 ? void 0 : params.category);\n if (source === 'product' && productId) {\n var product = getProductById(productId);\n if (product) {\n setCategory(product);\n setQuantity(Number(params === null || params === void 0 ? void 0 : params.quantity) || 1);\n var newDesign = {\n id: 'DSG' + Date.now(),\n productId: product.id,\n productName: product.name,\n productIcon: product.icon,\n unitPrice: product.price,\n count: Number(params === null || params === void 0 ? void 0 : params.quantity) || 1,\n status: 'designing',\n createdAt: new Date().toISOString().slice(0, 10)\n };\n var list = getDesignList();\n setDesignList([].concat(_toConsumableArray(list), [newDesign]));\n setDesignId(newDesign.id);\n }\n return;\n }\n if (source === 'designList' && params !== null && params !== void 0 && params.designId) {\n var dId = params.designId;\n var _list = getDesignList();\n var design = _list.find(function (d) {\n return d.id === dId;\n });\n if (design) {\n var _design$designData, _design$designData2;\n setDesignId(dId);\n setQuantity(design.count);\n var _product = getProductById(design.productId);\n if (_product) setCategory(_product);\n if ((_design$designData = design.designData) !== null && _design$designData !== void 0 && _design$designData.stickers) {\n setStickers(design.designData.stickers);\n } else if ((_design$designData2 = design.designData) !== null && _design$designData2 !== void 0 && _design$designData2.imageSrc) {\n var _design$designData$im, _design$designData$im2, _design$designData$im3;\n // 兼容旧版数据\n var s = {\n id: 'legacy_' + Date.now(),\n src: design.designData.imageSrc,\n x: ((_design$designData$im = design.designData.imagePos) === null || _design$designData$im === void 0 ? void 0 : _design$designData$im.x) || 0,\n y: ((_design$designData$im2 = design.designData.imagePos) === null || _design$designData$im2 === void 0 ? void 0 : _design$designData$im2.y) || 0,\n scale: ((_design$designData$im3 = design.designData.imagePos) === null || _design$designData$im3 === void 0 ? void 0 : _design$designData$im3.scale) || 1,\n width: 200,\n height: 200,\n isOverlapping: false\n };\n setStickers([s]);\n }\n }\n return;\n }\n\n // 默认情况(从首页 old category 参数兼容)\n if (productId) {\n var found = getProductById(productId);\n if (found) {\n setCategory(found);\n var _newDesign = {\n id: 'DSG' + Date.now(),\n productId: found.id,\n productName: found.name,\n productIcon: found.icon,\n unitPrice: found.price,\n count: 1,\n status: 'designing',\n createdAt: new Date().toISOString().slice(0, 10)\n };\n var _list2 = getDesignList();\n setDesignList([].concat(_toConsumableArray(_list2), [_newDesign]));\n setDesignId(_newDesign.id);\n }\n }\n }, []);\n\n // 矩形碰撞检测\n var checkOverlap = function checkOverlap(list) {\n var newList = list.map(function (s) {\n return _objectSpread(_objectSpread({}, s), {}, {\n isOverlapping: false\n });\n });\n for (var i = 0; i < newList.length; i++) {\n for (var j = i + 1; j < newList.length; j++) {\n var a = newList[i];\n var b = newList[j];\n var aw = a.width * a.scale;\n var ah = a.height * a.scale;\n var bw = b.width * b.scale;\n var bh = b.height * b.scale;\n if (a.x < b.x + bw && a.x + aw > b.x && a.y < b.y + bh && a.y + ah > b.y) {\n newList[i].isOverlapping = true;\n newList[j].isOverlapping = true;\n }\n }\n }\n var overlapAny = newList.some(function (s) {\n return s.isOverlapping;\n });\n setHasOverlap(overlapAny);\n return newList;\n };\n var addSticker = function addSticker() {\n Taro.chooseImage({\n count: 1,\n sizeType: ['compressed'],\n sourceType: ['album', 'camera'],\n success: function success(res) {\n var src = res.tempFilePaths[0];\n // 获取图片尺寸用于碰撞检测\n Taro.getImageInfo({\n src: src,\n success: function success(info) {\n var newSticker = {\n id: 'stk_' + Date.now(),\n src: src,\n x: 0,\n y: 0,\n scale: 1,\n width: info.width,\n height: info.height,\n isOverlapping: false\n };\n var next = [].concat(_toConsumableArray(stickers), [newSticker]);\n var checked = checkOverlap(next);\n setStickers(checked);\n setActiveStickerId(newSticker.id);\n },\n fail: function fail() {\n // fallback 尺寸\n var newSticker = {\n id: 'stk_' + Date.now(),\n src: src,\n x: 0,\n y: 0,\n scale: 1,\n width: 200,\n height: 200,\n isOverlapping: false\n };\n var next = [].concat(_toConsumableArray(stickers), [newSticker]);\n var checked = checkOverlap(next);\n setStickers(checked);\n setActiveStickerId(newSticker.id);\n }\n });\n }\n });\n };\n var deleteSticker = function deleteSticker(id) {\n var next = stickers.filter(function (s) {\n return s.id !== id;\n });\n var checked = checkOverlap(next);\n setStickers(checked);\n if (activeStickerId === id) setActiveStickerId(null);\n };\n var handleStickerTouchStart = function handleStickerTouchStart(e, id) {\n var touch = e.touches[0];\n var s = stickers.find(function (x) {\n return x.id === id;\n });\n if (!s) return;\n setActiveStickerId(id);\n setIsDragging(true);\n setStartPos({\n x: touch.clientX - s.x,\n y: touch.clientY - s.y\n });\n };\n var handleStickerTouchMove = function handleStickerTouchMove(e) {\n if (!isDragging || !activeStickerId) return;\n var touch = e.touches[0];\n var next = stickers.map(function (s) {\n if (s.id !== activeStickerId) return s;\n return _objectSpread(_objectSpread({}, s), {}, {\n x: touch.clientX - startPos.x,\n y: touch.clientY - startPos.y\n });\n });\n var checked = checkOverlap(next);\n setStickers(checked);\n };\n var handleTouchEnd = function handleTouchEnd() {\n return setIsDragging(false);\n };\n var handleScale = function handleScale(id, delta) {\n var next = stickers.map(function (s) {\n if (s.id !== id) return s;\n return _objectSpread(_objectSpread({}, s), {}, {\n scale: Math.max(0.3, Math.min(3, s.scale + delta))\n });\n });\n var checked = checkOverlap(next);\n setStickers(checked);\n };\n var goBack = function goBack() {\n Taro.navigateBack();\n };\n var getMaskStyle = function getMaskStyle() {\n if (!category) return {\n width: 300,\n height: 420\n };\n var base = {\n width: category.mask.width,\n height: category.mask.height\n };\n if (category.mask.shape === 'rect') {\n base.borderRadius = category.mask.borderRadius || 0;\n }\n if (category.mask.shape === 'circle') {\n base.borderRadius = '50%';\n }\n return base;\n };\n var handleComplete = function handleComplete() {\n if (hasOverlap) {\n Taro.showToast({\n title: '贴纸不能重叠',\n icon: 'none'\n });\n return;\n }\n if (designId) {\n updateDesign(designId, {\n designData: {\n stickers: stickers,\n category: category\n }\n });\n }\n setPreviewMode(false);\n Taro.navigateTo({\n url: \"/pages/checkout/index?designId=\".concat(designId)\n });\n };\n if (!category) {\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(View, {\n className: \"diy-page\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u52A0\\u8F7D\\u4E2D...\"\n })\n })\n });\n }\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"diy-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n style: {\n width: '100%'\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onTap: goBack,\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BBE\\u8BA1\\u5DE5\\u4F5C\\u53F0\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"canvas-wrapper dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"canvas-area\",\n style: getMaskStyle(),\n children: [stickers.map(function (s) {\n return /*#__PURE__*/_jsx(Image, {\n className: \"canvas-image \".concat(s.isOverlapping ? 'overlap' : '', \" \").concat(activeStickerId === s.id ? 'active' : ''),\n src: s.src,\n style: {\n transform: \"translate(\".concat(s.x, \"px, \").concat(s.y, \"px) scale(\").concat(s.scale, \")\"),\n opacity: isDragging && activeStickerId === s.id ? 0.8 : 1,\n zIndex: activeStickerId === s.id ? 10 : 5,\n width: s.width || 200,\n height: s.height || 200\n },\n onTouchStart: function onTouchStart(e) {\n return handleStickerTouchStart(e, s.id);\n },\n onTouchMove: handleStickerTouchMove,\n onTouchEnd: handleTouchEnd,\n onTap: function onTap() {\n return setActiveStickerId(s.id);\n },\n mode: \"aspectFit\"\n }, s.id);\n }), /*#__PURE__*/_jsx(View, {\n className: \"mask-border\",\n style: getMaskStyle()\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"sticker-panel dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u8D34\\u7EB8\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"sticker-list\",\n children: [stickers.map(function (s) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"sticker-thumb \".concat(s.isOverlapping ? 'overlap' : '', \" \").concat(activeStickerId === s.id ? 'active' : ''),\n children: [/*#__PURE__*/_jsx(Image, {\n src: s.src,\n className: \"sticker-thumb-img\",\n mode: \"aspectFit\",\n onTap: function onTap() {\n return setActiveStickerId(s.id);\n }\n }), /*#__PURE__*/_jsx(View, {\n className: \"sticker-del\",\n onTap: function onTap() {\n return deleteSticker(s.id);\n },\n children: /*#__PURE__*/_jsx(Text, {\n className: \"del-icon\",\n children: \"\\xD7\"\n })\n })]\n }, s.id);\n }), /*#__PURE__*/_jsxs(View, {\n className: \"sticker-add-btn\",\n onTap: addSticker,\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"add-icon\",\n children: \"+\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"add-label\",\n children: \"\\u6DFB\\u52A0\"\n })]\n })]\n }), hasOverlap && /*#__PURE__*/_jsx(Text, {\n className: \"overlap-hint\",\n children: \"\\u26A0\\uFE0F \\u6709\\u8D34\\u7EB8\\u91CD\\u53E0\\uFF0C\\u8BF7\\u8C03\\u6574\\u4F4D\\u7F6E\"\n })]\n }), activeStickerId && /*#__PURE__*/_jsxs(View, {\n className: \"toolbar dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"tool-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"tool-label\",\n children: \"\\u7F29\\u653E\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-center\",\n style: {\n gap: '20px'\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"tool-btn\",\n onTap: function onTap() {\n return handleScale(activeStickerId, -0.1);\n },\n children: \"\\uFF0D\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"tool-value\",\n children: [Math.round((((_stickers$find = stickers.find(function (s) {\n return s.id === activeStickerId;\n })) === null || _stickers$find === void 0 ? void 0 : _stickers$find.scale) || 1) * 100), \"%\"]\n }), /*#__PURE__*/_jsx(View, {\n className: \"tool-btn\",\n onTap: function onTap() {\n return handleScale(activeStickerId, 0.1);\n },\n children: \"\\uFF0B\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"tool-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"tool-label\",\n children: \"\\u63D0\\u793A\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"tool-hint\",\n children: \"\\u62D6\\u52A8\\u8C03\\u6574\\u4F4D\\u7F6E\\uFF0C\\u8D34\\u7EB8\\u4E0D\\u53EF\\u91CD\\u53E0\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"action-btns mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: function onTap() {\n return setPreviewMode(true);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u9884\\u89C8\\u6548\\u679C\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onTap: addSticker,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u6DFB\\u52A0\\u8D34\\u7EB8\"\n })\n })]\n }), previewMode && /*#__PURE__*/_jsx(View, {\n className: \"preview-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"preview-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"preview-title\",\n children: \"\\u786E\\u8BA4\\u6548\\u679C\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"preview-canvas\",\n style: getMaskStyle(),\n children: stickers.map(function (s) {\n return /*#__PURE__*/_jsx(Image, {\n className: \"preview-image \".concat(s.isOverlapping ? 'overlap' : ''),\n src: s.src,\n style: {\n transform: \"translate(\".concat(s.x, \"px, \").concat(s.y, \"px) scale(\").concat(s.scale, \")\"),\n width: s.width || 200,\n height: s.height || 200\n },\n mode: \"aspectFit\"\n }, s.id);\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"product-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"product-name\",\n children: category.name\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"product-size\",\n children: [\"\\u753B\\u5E03\\u5C3A\\u5BF8: \", category.mask.width, \" \\xD7 \", category.mask.height, \" px\"]\n }), hasOverlap && /*#__PURE__*/_jsx(Text, {\n className: \"overlap-hint\",\n children: \"\\u8D34\\u7EB8\\u6709\\u91CD\\u53E0\\uFF0C\\u4E0D\\u53EF\\u63D0\\u4EA4\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"preview-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onTap: function onTap() {\n return setPreviewMode(false);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u8FD4\\u56DE\\u4FEE\\u6539\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient \".concat(hasOverlap ? 'disabled' : ''),\n onTap: handleComplete,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u786E\\u8BA4\\u5B8C\\u6210\"\n })\n })]\n })]\n })\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/diy/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/diy/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/index/index.js b/dist/pages/index/index.js index 066d760..05ec765 100644 --- a/dist/pages/index/index.js +++ b/dist/pages/index/index.js @@ -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,25 +142,26 @@ 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-info", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { - className: "showcase-title", - children: item.title - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { - className: "showcase-desc", - children: item.desc + 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", + children: item.title + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "showcase-desc", + children: item.desc + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "showcase-tag", + children: "\u6210\u54C1\u6848\u4F8B" })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { - 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" diff --git a/dist/pages/index/index.js.map b/dist/pages/index/index.js.map index 62423d8..e346005 100644 --- a/dist/pages/index/index.js.map +++ b/dist/pages/index/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/index/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;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;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;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;;;;;;;;;;;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/index/index.tsx?acc1","webpack://smart-engraving-miniapp/._src_pages_index_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Swiper, SwiperItem, Input, Image } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState } from 'react';\nimport './index.scss';\nimport { CATEGORIES } from '../../utils/productConfig';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\n\n// 成品展示数据\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar SHOWCASES = [{\n title: '毕业纪念笔记本',\n desc: '全班名字组成校徽',\n color: '#FFE4EC'\n}, {\n title: '铜质杯垫',\n desc: '金属质感桌面艺术',\n color: '#E8D5C4'\n}, {\n title: '竹制笔盒',\n desc: '自然竹纹文房雅器',\n color: '#E0F0D9'\n}, {\n title: '书本型灯',\n desc: '温暖光影点亮心意',\n color: '#FFF3CD'\n}, {\n title: '情侣定制礼',\n desc: '两个人的名字交织',\n color: '#FCE4EC'\n}, {\n title: '企业年会礼',\n desc: '员工名字组成Logo',\n color: '#E3F2FD'\n}];\nexport default function Index() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(''),\n _useState2 = _slicedToArray(_useState, 2),\n searchKey = _useState2[0],\n setSearchKey = _useState2[1];\n var navigateToProduct = function navigateToProduct(categoryId) {\n Taro.navigateTo({\n url: \"/pages/product/index?id=\".concat(categoryId)\n });\n };\n var filteredCategories = searchKey.trim() ? CATEGORIES.filter(function (c) {\n return c.name.includes(searchKey) || c.desc.includes(searchKey);\n }) : CATEGORIES;\n var handleSearch = function handleSearch(e) {\n setSearchKey(e.detail.value);\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"index-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsx(View, {\n className: \"header-bar\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"header-title\",\n children: \"\\u667A\\u7ED8\\u5FAE\\u523B\"\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"search-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"search-inner\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"search-icon\",\n children: \"\\uD83D\\uDD0D\"\n }), /*#__PURE__*/_jsx(Input, {\n className: \"search-input\",\n type: \"text\",\n placeholder: \"\\u641C\\u7D22\\u5B9A\\u5236\\u54C1\\u7C7B\\uFF1A\\u7B14\\u8BB0\\u672C\\u3001\\u676F\\u57AB\\u3001\\u4E66\\u706F...\",\n value: searchKey,\n onInput: handleSearch,\n confirmType: \"search\"\n })]\n }), searchKey.trim() && /*#__PURE__*/_jsx(View, {\n className: \"search-result-hint\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"hint-text\",\n children: filteredCategories.length > 0 ? \"\\u627E\\u5230 \".concat(filteredCategories.length, \" \\u4E2A\\u76F8\\u5173\\u54C1\\u7C7B\") : '没有找到相关品类,试试看其他关键词'\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"showcase-section mt-20\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u5B9A\\u5236\\u6210\\u54C1\\u5C55\\u793A\"\n }), /*#__PURE__*/_jsx(Swiper, {\n className: \"showcase-swiper\",\n indicatorColor: \"#e0e0e0\",\n indicatorActiveColor: \"#ff9a9e\",\n circular: true,\n autoplay: true,\n interval: 3000,\n duration: 500,\n previousMargin: \"40rpx\",\n nextMargin: \"40rpx\",\n indicatorDots: true,\n children: SHOWCASES.map(function (item, idx) {\n return /*#__PURE__*/_jsx(SwiperItem, {\n className: \"showcase-swiper-item\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"showcase-swiper-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"showcase-image-wrapper\",\n style: {\n background: item.color\n },\n children: /*#__PURE__*/_jsx(Text, {\n className: \"showcase-emoji\",\n children: \"\\uD83C\\uDF81\"\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"showcase-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"showcase-title\",\n children: item.title\n }), /*#__PURE__*/_jsx(Text, {\n className: \"showcase-desc\",\n children: item.desc\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"showcase-tag\",\n children: \"\\u6210\\u54C1\\u6848\\u4F8B\"\n })]\n })\n }, idx);\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"category-section mt-20\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u70ED\\u95E8\\u54C1\\u7C7B\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"category-grid\",\n children: filteredCategories.map(function (cat) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"category-item dashed-card\",\n onClick: function onClick() {\n return navigateToProduct(cat.id);\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), cat.images && cat.images.length > 0 ? /*#__PURE__*/_jsx(Image, {\n className: \"category-icon-img\",\n src: cat.images[0],\n mode: \"aspectFit\"\n }) : /*#__PURE__*/_jsx(Text, {\n className: \"category-icon\",\n children: cat.icon\n }), /*#__PURE__*/_jsx(Text, {\n className: \"category-name\",\n children: cat.name\n }), /*#__PURE__*/_jsx(Text, {\n className: \"category-desc\",\n children: cat.desc\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"category-price\",\n children: [\"\\xA5\", cat.price, \" \\u8D77\"]\n })]\n }, cat.id);\n })\n }), filteredCategories.length === 0 && /*#__PURE__*/_jsxs(View, {\n className: \"empty-category dashed-card\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"empty-icon\",\n children: \"\\uD83D\\uDD0D\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-text\",\n children: \"\\u672A\\u627E\\u5230\\u5339\\u914D\\u7684\\u54C1\\u7C7B\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-sub\",\n children: \"\\u5C1D\\u8BD5\\u641C\\u7D22\\u201C\\u7B14\\u8BB0\\u672C\\u201D\\u3001\\u201C\\u676F\\u57AB\\u201D\\u7B49\"\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"safe-bottom-placeholder\"\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/index/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/index/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/index/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;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;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;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;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/index/index.tsx?acc1","webpack://smart-engraving-miniapp/._src_pages_index_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image, Input, Swiper, SwiperItem } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState } from 'react';\nimport './index.scss';\nimport { CATEGORIES } from '../../utils/productConfig';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\n\n// 成品展示配图(从 img 里取对应实物图)\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar SHOWCASE_LIST = [{\n title: '毕业纪念笔记本',\n desc: '全班名字组成校徽',\n image: '/img/book_small/The1.jpg'\n}, {\n title: '铜质杯垫',\n desc: '金属质感桌面艺术',\n image: '/img/cup/The1.jpg'\n}, {\n title: '竹制笔盒',\n desc: '自然竹纹文房雅器',\n image: '/img/penbox/The1.jpg'\n}, {\n title: '书本型灯',\n desc: '温暖光影点亮心意',\n image: '/img/booklight/The1.jpg'\n}, {\n title: '情侣定制礼',\n desc: '两个人的名字交织',\n image: '/img/book_big/The1.jpg'\n}, {\n title: '企业年会礼',\n desc: '员工名字组成Logo',\n image: '/img/penbox/The2.jpg'\n}];\n\n// 品类对应的实物照片映射(首页卡片顶部大图)\nvar PRODUCT_IMG_MAP = {\n 'notebook-small': '/img/book_small/The1.jpg',\n 'notebook-large': '/img/book_big/The1.jpg',\n 'coaster': '/img/cup/The1.jpg',\n 'penbox': '/img/penbox/The1.jpg',\n 'booklamp': '/img/booklight/The1.jpg'\n};\nexport default function Index() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(''),\n _useState2 = _slicedToArray(_useState, 2),\n searchKey = _useState2[0],\n setSearchKey = _useState2[1];\n var navigateToProduct = function navigateToProduct(categoryId) {\n Taro.navigateTo({\n url: \"/pages/product/index?id=\".concat(categoryId)\n });\n };\n var filteredCategories = searchKey.trim() ? CATEGORIES.filter(function (c) {\n return c.name.includes(searchKey) || c.desc.includes(searchKey);\n }) : CATEGORIES;\n var handleSearch = function handleSearch(e) {\n setSearchKey(e.detail.value);\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"index-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsx(View, {\n className: \"header-bar\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"header-title\",\n children: \"\\u667A\\u7ED8\\u5FAE\\u523B\"\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"search-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"search-inner\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"search-icon-img\",\n src: \"/icon/\\u641C\\u7D22.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Input, {\n className: \"search-input\",\n type: \"text\",\n placeholder: \"\\u641C\\u7D22\\u5B9A\\u5236\\u54C1\\u7C7B\\uFF1A\\u7B14\\u8BB0\\u672C\\u3001\\u676F\\u57AB\\u3001\\u4E66\\u706F...\",\n value: searchKey,\n onInput: handleSearch,\n confirmType: \"search\"\n })]\n }), searchKey.trim() && /*#__PURE__*/_jsx(View, {\n className: \"search-result-hint\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"hint-text\",\n children: filteredCategories.length > 0 ? \"\\u627E\\u5230 \".concat(filteredCategories.length, \" \\u4E2A\\u76F8\\u5173\\u54C1\\u7C7B\") : '没有找到相关品类,试试看其他关键词'\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"showcase-section mt-20\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u5B9A\\u5236\\u6210\\u54C1\\u5C55\\u793A\"\n }), /*#__PURE__*/_jsx(Swiper, {\n className: \"showcase-swiper\",\n indicatorColor: \"#e0e0e0\",\n indicatorActiveColor: \"#ff9a9e\",\n circular: true,\n autoplay: true,\n interval: 3000,\n duration: 500,\n previousMargin: \"40rpx\",\n nextMargin: \"40rpx\",\n indicatorDots: true,\n children: SHOWCASE_LIST.map(function (item, idx) {\n return /*#__PURE__*/_jsx(SwiperItem, {\n className: \"showcase-swiper-item\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"showcase-swiper-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"showcase-image-wrapper\",\n children: /*#__PURE__*/_jsx(Image, {\n className: \"showcase-real-img\",\n src: item.image,\n mode: \"aspectFill\"\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"showcase-text-area\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"showcase-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"showcase-title\",\n children: item.title\n }), /*#__PURE__*/_jsx(Text, {\n className: \"showcase-desc\",\n children: item.desc\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"showcase-tag\",\n children: \"\\u6210\\u54C1\\u6848\\u4F8B\"\n })]\n })]\n })\n }, idx);\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"category-section mt-20\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u70ED\\u95E8\\u54C1\\u7C7B\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"category-grid\",\n children: filteredCategories.map(function (cat) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"category-item dashed-card\",\n onTap: function onTap() {\n return navigateToProduct(cat.id);\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"category-img-wrapper\",\n children: /*#__PURE__*/_jsx(Image, {\n className: \"category-img-real\",\n src: PRODUCT_IMG_MAP[cat.id] || '/icon/四角星.png',\n mode: \"aspectFill\"\n })\n }), /*#__PURE__*/_jsx(Text, {\n className: \"category-name\",\n children: cat.name\n }), /*#__PURE__*/_jsx(Text, {\n className: \"category-desc\",\n children: cat.desc\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"category-price\",\n children: [\"\\xA5\", cat.price, \" \\u8D77\"]\n })]\n }, cat.id);\n })\n }), filteredCategories.length === 0 && /*#__PURE__*/_jsxs(View, {\n className: \"empty-category dashed-card\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"empty-icon-img\",\n src: \"/icon/\\u641C\\u7D22.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-text\",\n children: \"\\u672A\\u627E\\u5230\\u5339\\u914D\\u7684\\u54C1\\u7C7B\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-sub\",\n children: \"\\u5C1D\\u8BD5\\u641C\\u7D22\\u201C\\u7B14\\u8BB0\\u672C\\u201D\\u3001\\u201C\\u676F\\u57AB\\u201D\\u7B49\"\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"safe-bottom-placeholder\"\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/index/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/index/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/index/index.wxss b/dist/pages/index/index.wxss index 14a1255..a80b4d1 100644 --- a/dist/pages/index/index.wxss +++ b/dist/pages/index/index.wxss @@ -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); } /* 底部安全区 */ diff --git a/dist/pages/orderDetail/index.js b/dist/pages/orderDetail/index.js index dbb5ac0..6f54a96 100644 --- a/dist/pages/orderDetail/index.js +++ b/dist/pages/orderDetail/index.js @@ -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; + }); + 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 }); - 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: '交易已完成' + // 这里不直接写回 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, { - className: "status-desc", - children: status.desc + }), /*#__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: [order.statusCode === 'pending' && '请在30分钟内完成支付', order.statusCode === 'paid' && '商品正在打包中,即将发货', order.statusCode === 'shipping' && '快递运输中,请注意查收', order.statusCode === 'done' && '交易已完成,感谢惠顾'] + })] + }), (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_7__.View, { - className: "logistics-timeline", - children: [/*#__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", + 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" + }) + })] + }) })] }) }); diff --git a/dist/pages/orderDetail/index.js.map b/dist/pages/orderDetail/index.js.map index a617dbb..b716482 100644 --- a/dist/pages/orderDetail/index.js.map +++ b/dist/pages/orderDetail/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/orderDetail/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;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;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;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;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;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;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;AACA;;;;;;;;;;;;ACxVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/orderDetail/index.tsx?2f20","webpack://smart-engraving-miniapp/._src_pages_orderDetail_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { getOrderList, getDesignList } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function OrderDetailPage() {\n 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;\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n order = _useState2[0],\n setOrder = _useState2[1];\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n design = _useState4[0],\n setDesign = _useState4[1];\n useEffect(function () {\n var _Taro$getCurrentInsta;\n var params = (_Taro$getCurrentInsta = Taro.getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params;\n var orderId = params === null || params === void 0 ? void 0 : params.orderId;\n if (!orderId) return;\n var orders = getOrderList();\n var found = orders.find(function (o) {\n return o.id === orderId;\n });\n setOrder(found || null);\n if (found) {\n var designs = getDesignList();\n var related = designs.find(function (d) {\n return d.orderId === orderId;\n });\n setDesign(related || null);\n }\n }, []);\n var STATUS_MAP = {\n pending: {\n label: '待付款',\n badge: 'badge-pink',\n desc: '您尚未付款,请及时支付'\n },\n paid: {\n label: '待发货',\n badge: 'badge-blue',\n desc: '商家正在准备发货'\n },\n shipping: {\n label: '待收货',\n badge: 'badge-blue',\n desc: '快递运输中'\n },\n done: {\n label: '已完成',\n badge: 'badge-green',\n desc: '交易已完成'\n }\n };\n if (!order) {\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(View, {\n className: \"order-detail-page\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"page-header dashed-card mt-20\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BA2\\u5355\\u672A\\u627E\\u5230\"\n })\n })\n })\n });\n }\n var status = STATUS_MAP[order.statusCode] || STATUS_MAP.pending;\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"order-detail-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n style: {\n width: '100%'\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onClick: function onClick() {\n return Taro.navigateBack();\n },\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BA2\\u5355\\u8BE6\\u60C5\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"status-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"status-top\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"badge \".concat(status.badge, \" status-badge\"),\n children: status.label\n }), /*#__PURE__*/_jsx(Text, {\n className: \"status-desc\",\n children: status.desc\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"logistics-timeline\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"timeline-item active\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"timeline-dot\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-content\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"timeline-title\",\n children: \"\\u5DF2\\u652F\\u4ED8\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"timeline-time\",\n children: order.date\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-item\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"timeline-dot\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-content\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"timeline-title\",\n children: \"\\u5546\\u5BB6\\u53D1\\u8D27\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"timeline-time\",\n children: \"\\u5F85\\u66F4\\u65B0\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-item\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"timeline-dot\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-content\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"timeline-title\",\n children: \"\\u8FD0\\u8F93\\u4E2D\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"timeline-time\",\n children: \"\\u5F85\\u66F4\\u65B0\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-item\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"timeline-dot\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-content\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"timeline-title\",\n children: \"\\u5DF2\\u7B7E\\u6536\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"timeline-time\",\n children: \"\\u5F85\\u66F4\\u65B0\"\n })]\n })]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"address-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"address-header\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"address-icon\",\n children: \"\\uD83D\\uDCCD\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-title\",\n children: \"\\u6536\\u8D27\\u5730\\u5740\"\n })]\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-name\",\n children: \"\\u6536\\u8D27\\u4EBA\\uFF1A\\u667A\\u7ED8\\u5FAE\\u523B\\u7528\\u6237\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-phone\",\n children: \"138****8888\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-detail\",\n children: \"\\u5E7F\\u4E1C\\u7701\\u6DF1\\u5733\\u5E02\\u5357\\u5C71\\u533A\\u79D1\\u6280\\u56ED\\u667A\\u7ED8\\u5FAE\\u523B\\u603B\\u90E8\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"product-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u5546\\u54C1\\u4FE1\\u606F\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"product-row\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"product-icon-wrapper\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"product-icon\",\n children: order.productIcon\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"product-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"product-name\",\n children: order.productName\n }), /*#__PURE__*/_jsx(Text, {\n className: \"product-sku\",\n children: order.sku\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"price-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"price-label\",\n children: \"\\u5546\\u54C1\\u603B\\u4EF7\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"price-value\",\n children: order.price\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"price-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"price-label\",\n children: \"\\u8FD0\\u8D39\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"price-value\",\n children: \"\\xA50.00\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"price-row total\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"price-label total-label\",\n children: \"\\u5B9E\\u4ED8\\u6B3E\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"price-value total-value\",\n children: order.price\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u8BA2\\u5355\\u4FE1\\u606F\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u8BA2\\u5355\\u7F16\\u53F7\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"info-value\",\n children: order.id\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u521B\\u5EFA\\u65F6\\u95F4\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"info-value\",\n children: order.date\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u652F\\u4ED8\\u65B9\\u5F0F\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"info-value\",\n children: \"\\u5FAE\\u4FE1\\u652F\\u4ED8\"\n })]\n })]\n }), design !== null && design !== void 0 && (_design$designData = design.designData) !== null && _design$designData !== void 0 && _design$designData.stickers ? /*#__PURE__*/_jsxs(View, {\n className: \"preview-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u8BBE\\u8BA1\\u6548\\u679C\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"design-preview\",\n style: {\n 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,\n 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\n },\n children: design.designData.stickers.map(function (s) {\n return /*#__PURE__*/_jsx(Image, {\n className: \"preview-sticker\",\n src: s.src,\n style: {\n transform: \"translate(\".concat(s.x, \"px, \").concat(s.y, \"px) scale(\").concat(s.scale || 1, \")\"),\n width: s.width || 200,\n height: s.height || 200\n },\n mode: \"aspectFit\"\n }, s.id);\n })\n })]\n }) : design !== null && design !== void 0 && (_design$designData2 = design.designData) !== null && _design$designData2 !== void 0 && _design$designData2.imageSrc ? /*#__PURE__*/_jsxs(View, {\n className: \"preview-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u8BBE\\u8BA1\\u6548\\u679C\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"design-preview\",\n style: {\n 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,\n 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\n },\n children: /*#__PURE__*/_jsx(Image, {\n className: \"preview-sticker\",\n src: design.designData.imageSrc,\n style: {\n 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, \")\")\n },\n mode: \"aspectFit\"\n })\n })]\n }) : null, /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/orderDetail/index!./index.tsx\"\nvar config = {\"navigationBarTitleText\":\"订单详情\"};\n\n\nvar inst = Page(createPageConfig(component, 'pages/orderDetail/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/orderDetail/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;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;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;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;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;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;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;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;;;;;;;;;;;;AChYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/orderDetail/index.tsx?2f20","webpack://smart-engraving-miniapp/._src_pages_orderDetail_index.tsx"],"sourcesContent":["import _objectSpread from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/objectSpread2.js\";\nimport _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { getOrderList, getDefaultAddress, getAddressList } from '../../utils/store';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function OrderDetailPage() {\n var _Taro$getCurrentInsta, _order$productIcon, _address$region;\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var params = (_Taro$getCurrentInsta = Taro.getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params;\n var orderId = (params === null || params === void 0 ? void 0 : params.orderId) || '';\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n order = _useState2[0],\n setOrder = _useState2[1];\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n address = _useState4[0],\n setAddress = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n showAddrPicker = _useState6[0],\n setShowAddrPicker = _useState6[1];\n var _useState7 = useState([]),\n _useState8 = _slicedToArray(_useState7, 2),\n addrList = _useState8[0],\n setAddrList = _useState8[1];\n useEffect(function () {\n var orders = getOrderList();\n var o = orders.find(function (x) {\n return x.id === orderId;\n });\n if (o) {\n setOrder(o);\n // 优先显示订单已有地址,否则用默认地址\n if (o.address) {\n setAddress(o.address);\n } else {\n setAddress(getDefaultAddress());\n }\n }\n setAddrList(getAddressList());\n }, [orderId]);\n var handlePickAddress = function handlePickAddress(addr) {\n setAddress(addr);\n setShowAddrPicker(false);\n // 同步更新订单里的地址\n var orders = getOrderList();\n var idx = orders.findIndex(function (x) {\n return x.id === orderId;\n });\n if (idx >= 0) {\n orders[idx] = _objectSpread(_objectSpread({}, orders[idx]), {}, {\n address: addr\n });\n // 这里不直接写回 store,用临时状态即可,实际后端会有 order update API\n }\n Taro.showToast({\n title: '地址已更改',\n icon: 'success'\n });\n };\n if (!order) {\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(View, {\n className: \"order-detail-page\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"page-header dashed-card mt-20\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BA2\\u5355\\u4E0D\\u5B58\\u5728\"\n })\n })\n })\n });\n }\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"order-detail-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n style: {\n width: '100%'\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onTap: function onTap() {\n return Taro.navigateBack();\n },\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BA2\\u5355\\u8BE6\\u60C5\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"status-banner dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"status-text\",\n children: [order.statusCode === 'pending' && '待付款', order.statusCode === 'paid' && '待发货', order.statusCode === 'shipping' && '待收货', order.statusCode === 'done' && '已完成']\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"status-desc\",\n children: [order.statusCode === 'pending' && '请在30分钟内完成支付', order.statusCode === 'paid' && '商品正在打包中,即将发货', order.statusCode === 'shipping' && '快递运输中,请注意查收', order.statusCode === 'done' && '交易已完成,感谢惠顾']\n })]\n }), (order.statusCode === 'shipping' || order.statusCode === 'done') && /*#__PURE__*/_jsxs(View, {\n className: \"logistics-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"logistics-header\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"flex-center\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"card-icon-img\",\n src: \"/icon/\\u5305\\u88F9.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"logistics-title\",\n children: \"\\u7269\\u6D41\\u4FE1\\u606F\"\n })]\n }), /*#__PURE__*/_jsx(Text, {\n className: \"logistics-num\",\n children: \"\\u5355\\u53F7: SF1234567890\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"timeline-item active\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"timeline-dot\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-content\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"timeline-status\",\n children: \"\\u8FD0\\u8F93\\u4E2D\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"timeline-time\",\n children: \"2024-01-15 14:30\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"timeline-desc\",\n children: \"\\u3010\\u5317\\u4EAC\\u5E02\\u3011\\u5FEB\\u4EF6\\u5DF2\\u5230\\u8FBE\\u5317\\u4EAC\\u671D\\u9633\\u8F6C\\u8FD0\\u4E2D\\u5FC3\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-item\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"timeline-dot\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-content\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"timeline-status\",\n children: \"\\u5DF2\\u53D1\\u8D27\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"timeline-time\",\n children: \"2024-01-15 09:00\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"timeline-desc\",\n children: \"\\u3010\\u6DF1\\u5733\\u5E02\\u3011\\u5546\\u5BB6\\u5DF2\\u53D1\\u8D27\\uFF0C\\u7B49\\u5F85\\u63FD\\u6536\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-item\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"timeline-dot\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"timeline-content\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"timeline-status\",\n children: \"\\u5DF2\\u4E0B\\u5355\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"timeline-time\",\n children: \"2024-01-14 20:15\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"timeline-desc\",\n children: \"\\u8BA2\\u5355\\u5DF2\\u751F\\u6210\\uFF0C\\u7B49\\u5F85\\u5546\\u5BB6\\u53D1\\u8D27\"\n })]\n })]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"product-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"product-row\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"product-icon-wrapper\",\n children: /*#__PURE__*/_jsx(Image, {\n className: \"product-icon-img\",\n src: (_order$productIcon = order.productIcon) !== null && _order$productIcon !== void 0 && _order$productIcon.startsWith('/icon/') ? order.productIcon : '/icon/四角星.png',\n mode: \"aspectFit\"\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"product-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"product-name\",\n children: order.productName\n }), /*#__PURE__*/_jsx(Text, {\n className: \"product-sku\",\n children: order.sku\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"price-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"price-label\",\n children: \"\\u5B9E\\u4ED8\\u6B3E\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"price-value\",\n children: order.price\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"address-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"address-header\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"flex-center\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"card-icon-img\",\n src: \"/icon/\\u5730\\u5740.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-title\",\n children: \"\\u6536\\u8D27\\u5730\\u5740\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"address-change\",\n onTap: function onTap() {\n return setShowAddrPicker(true);\n },\n children: /*#__PURE__*/_jsx(Text, {\n className: \"change-text\",\n children: \"\\u66F4\\u6539\\u6536\\u8D27\\u5730\\u5740\"\n })\n })]\n }), address ? /*#__PURE__*/_jsxs(View, {\n className: \"address-body\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"address-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"address-name\",\n children: address.name\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-phone\",\n children: address.phone\n })]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"address-detail\",\n children: [(_address$region = address.region) === null || _address$region === void 0 ? void 0 : _address$region.join(' '), \" \", address.detail]\n })]\n }) : /*#__PURE__*/_jsx(View, {\n className: \"address-empty\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u6682\\u65E0\\u6536\\u8D27\\u5730\\u5740\\uFF0C\\u8BF7\\u5148\\u6DFB\\u52A0\"\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"meta-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"meta-title\",\n children: \"\\u8BA2\\u5355\\u4FE1\\u606F\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"meta-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"meta-label\",\n children: \"\\u8BA2\\u5355\\u7F16\\u53F7\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"meta-value\",\n children: order.id\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"meta-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"meta-label\",\n children: \"\\u521B\\u5EFA\\u65F6\\u95F4\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"meta-value\",\n children: order.date\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"meta-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"meta-label\",\n children: \"\\u6570\\u91CF\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"meta-value\",\n children: [order.count, \" \\u4EF6\"]\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n }), showAddrPicker && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n style: {\n alignItems: 'flex-end',\n justifyContent: 'flex-end'\n },\n children: /*#__PURE__*/_jsxs(View, {\n className: \"addr-picker-sheet dashed-card\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"addr-picker-header\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-title\",\n children: \"\\u9009\\u62E9\\u6536\\u8D27\\u5730\\u5740\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-close\",\n onTap: function onTap() {\n return setShowAddrPicker(false);\n },\n children: \"\\u2715\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"addr-picker-list\",\n children: [addrList.map(function (addr) {\n var _addr$region;\n return /*#__PURE__*/_jsxs(View, {\n className: \"addr-picker-item \".concat((address === null || address === void 0 ? void 0 : address.id) === addr.id ? 'active' : ''),\n onTap: function onTap() {\n return handlePickAddress(addr);\n },\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"addr-picker-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-name\",\n children: addr.name\n }), /*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-phone\",\n children: addr.phone\n }), addr.isDefault && /*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-default\",\n children: \"\\u9ED8\\u8BA4\"\n })]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"addr-picker-detail\",\n children: [(_addr$region = addr.region) === null || _addr$region === void 0 ? void 0 : _addr$region.join(' '), \" \", addr.detail]\n })]\n }, addr.id);\n }), addrList.length === 0 && /*#__PURE__*/_jsx(View, {\n className: \"addr-picker-empty\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u6682\\u65E0\\u5730\\u5740\\uFF0C\\u8BF7\\u5148\\u6DFB\\u52A0\\u6536\\u8D27\\u5730\\u5740\"\n })\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"addr-picker-add\",\n onTap: function onTap() {\n setShowAddrPicker(false);\n Taro.navigateTo({\n url: '/pages/address/index'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n className: \"addr-picker-add-text\",\n children: \"+ \\u65B0\\u5EFA\\u6536\\u8D27\\u5730\\u5740\"\n })\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/orderDetail/index!./index.tsx\"\nvar config = {\"navigationBarTitleText\":\"订单详情\"};\n\n\nvar inst = Page(createPageConfig(component, 'pages/orderDetail/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/orderDetail/index.wxss b/dist/pages/orderDetail/index.wxss index 226eff7..b654b8d 100644 --- a/dist/pages/orderDetail/index.wxss +++ b/dist/pages/orderDetail/index.wxss @@ -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; } diff --git a/dist/pages/orders/index.js b/dist/pages/orders/index.js index 375a913..6d6db05 100644 --- a/dist/pages/orders/index.js +++ b/dist/pages/orders/index.js @@ -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' }); diff --git a/dist/pages/orders/index.js.map b/dist/pages/orders/index.js.map index cdf7396..5d30588 100644 --- a/dist/pages/orders/index.js.map +++ b/dist/pages/orders/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/orders/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;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/orders/index.tsx?1709","webpack://smart-engraving-miniapp/._src_pages_orders_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, ScrollView } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { getOrderList } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport LoginGuard from '../../components/LoginGuard';\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar STATUS_TABS = [{\n code: 'all',\n label: '全部'\n}, {\n code: 'pending',\n label: '待付款'\n}, {\n code: 'paid',\n label: '待发货'\n}, {\n code: 'shipping',\n label: '待收货'\n}, {\n code: 'done',\n label: '已完成'\n}];\nvar STATUS_MAP = {\n pending: {\n label: '待付款',\n badge: 'badge-pink'\n },\n paid: {\n label: '待发货',\n badge: 'badge-blue'\n },\n shipping: {\n label: '待收货',\n badge: 'badge-blue'\n },\n done: {\n label: '已完成',\n badge: 'badge-green'\n },\n cancelled: {\n label: '已取消',\n badge: 'badge-gray'\n }\n};\nexport default function OrdersPage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState('all'),\n _useState2 = _slicedToArray(_useState, 2),\n activeTab = _useState2[0],\n setActiveTab = _useState2[1];\n var _useState3 = useState([]),\n _useState4 = _slicedToArray(_useState3, 2),\n orders = _useState4[0],\n setOrders = _useState4[1];\n var load = function load() {\n return setOrders(getOrderList());\n };\n useEffect(load, []);\n\n // 读取从 profile 跳转过来的筛选状态\n useEffect(function () {\n var init = function init() {\n var filter = Taro.getStorageSync('orders:filter');\n if (filter && STATUS_TABS.some(function (t) {\n return t.code === filter;\n })) {\n setActiveTab(filter);\n Taro.removeStorageSync('orders:filter');\n }\n load();\n };\n init();\n // 页面每次显示时刷新\n var page = Taro.getCurrentInstance().page;\n if (page) {\n var orig = page.onShow;\n page.onShow = function () {\n init();\n if (orig) orig.apply(this);\n };\n }\n }, []);\n\n // 页面每次显示时刷新(处理下单后同步)\n useEffect(function () {\n var _Taro$eventCenter, _Taro$eventCenter$onc;\n (_Taro$eventCenter = Taro.eventCenter) === null || _Taro$eventCenter === void 0 || (_Taro$eventCenter$onc = _Taro$eventCenter.once) === null || _Taro$eventCenter$onc === void 0 || _Taro$eventCenter$onc.call(_Taro$eventCenter, 'orders:refresh', load);\n load();\n return function () {\n var _Taro$eventCenter2, _Taro$eventCenter2$of;\n (_Taro$eventCenter2 = Taro.eventCenter) === null || _Taro$eventCenter2 === void 0 || (_Taro$eventCenter2$of = _Taro$eventCenter2.off) === null || _Taro$eventCenter2$of === void 0 || _Taro$eventCenter2$of.call(_Taro$eventCenter2, 'orders:refresh', load);\n };\n }, []);\n var filteredOrders = activeTab === 'all' ? orders : orders.filter(function (o) {\n return o.statusCode === activeTab;\n });\n var goDetail = function goDetail(order) {\n Taro.navigateTo({\n url: \"/pages/orderDetail/index?orderId=\".concat(order.id)\n });\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(LoginGuard, {\n children: /*#__PURE__*/_jsxs(View, {\n className: \"orders-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u6211\\u7684\\u8BA2\\u5355\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"status-tabs\",\n children: /*#__PURE__*/_jsx(ScrollView, {\n className: \"tabs-scroll\",\n scrollX: true,\n children: STATUS_TABS.map(function (tab) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"tab-item \".concat(activeTab === tab.code ? 'active' : ''),\n onClick: function onClick() {\n return setActiveTab(tab.code);\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"tab-label\",\n children: tab.label\n }), activeTab === tab.code && /*#__PURE__*/_jsx(View, {\n className: \"tab-underline\"\n })]\n }, tab.code);\n })\n })\n }), /*#__PURE__*/_jsxs(ScrollView, {\n className: \"orders-list\",\n scrollY: true,\n children: [filteredOrders.map(function (order) {\n var status = STATUS_MAP[order.statusCode] || STATUS_MAP.pending;\n return /*#__PURE__*/_jsxs(View, {\n className: \"order-card dashed-card\",\n onClick: function onClick() {\n return goDetail(order);\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"order-header\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"order-date\",\n children: order.date\n }), /*#__PURE__*/_jsx(Text, {\n className: \"badge \".concat(status.badge),\n children: status.label\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"order-body\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"order-icon-wrapper\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"order-icon\",\n children: order.productIcon\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"order-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"order-product\",\n children: order.productName\n }), /*#__PURE__*/_jsx(Text, {\n className: \"order-sku\",\n children: order.sku\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"order-meta\",\n children: [\"\\u6570\\u91CF: \", order.count, \" \\u4EF6 | \", order.id]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"order-footer\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"order-price-bar\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"price-label\",\n children: \"\\u5B9E\\u4ED8\\u6B3E\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"price-value\",\n children: order.price\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"order-actions\",\n children: [order.statusCode === 'pending' && /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient order-btn\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u7ACB\\u5373\\u4ED8\\u6B3E\"\n })\n }), order.statusCode === 'paid' && /*#__PURE__*/_jsx(View, {\n className: \"btn-outline order-btn\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u50AC\\u53D1\\u8D27\"\n })\n }), order.statusCode === 'shipping' && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline order-btn\",\n onClick: function onClick(e) {\n e.stopPropagation();\n Taro.showToast({\n title: '查看物流',\n icon: 'none'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u67E5\\u770B\\u7269\\u6D41\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient order-btn\",\n onClick: function onClick(e) {\n e.stopPropagation();\n Taro.showToast({\n title: '确认收货',\n icon: 'none'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u786E\\u8BA4\\u6536\\u8D27\"\n })\n })]\n }), order.statusCode === 'done' && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline order-btn\",\n onClick: function onClick(e) {\n e.stopPropagation();\n Taro.showToast({\n title: '申请售后',\n icon: 'none'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u7533\\u8BF7\\u552E\\u540E\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient order-btn\",\n onClick: function onClick(e) {\n e.stopPropagation();\n Taro.showToast({\n title: '再来一单',\n icon: 'none'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u518D\\u6765\\u4E00\\u5355\"\n })\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline order-btn\",\n onClick: function onClick(e) {\n e.stopPropagation();\n goDetail(order);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u8BE6\\u60C5\"\n })\n })]\n })]\n })]\n }, order.id);\n }), filteredOrders.length === 0 && /*#__PURE__*/_jsxs(View, {\n className: \"empty-state\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"empty-icon\",\n children: \"\\uD83D\\uDCE6\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-text\",\n children: \"\\u6682\\u65E0\\u8BA2\\u5355\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-sub\",\n children: \"\\u53BB\\u9996\\u9875\\u5F00\\u59CB\\u5B9A\\u5236\\u5427\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: function onClick() {\n return Taro.switchTab({\n url: '/pages/index/index'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53BB\\u5B9A\\u5236\"\n })\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n })]\n })\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/orders/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/orders/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/orders/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;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/orders/index.tsx?1709","webpack://smart-engraving-miniapp/._src_pages_orders_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, ScrollView, Image } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { getOrderList } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport LoginGuard from '../../components/LoginGuard';\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar STATUS_TABS = [{\n code: 'all',\n label: '全部'\n}, {\n code: 'pending',\n label: '待付款'\n}, {\n code: 'paid',\n label: '待发货'\n}, {\n code: 'shipping',\n label: '待收货'\n}, {\n code: 'done',\n label: '已完成'\n}];\nvar STATUS_MAP = {\n pending: {\n label: '待付款',\n badge: 'badge-pink'\n },\n paid: {\n label: '待发货',\n badge: 'badge-blue'\n },\n shipping: {\n label: '待收货',\n badge: 'badge-blue'\n },\n done: {\n label: '已完成',\n badge: 'badge-green'\n },\n cancelled: {\n label: '已取消',\n badge: 'badge-gray'\n }\n};\nexport default function OrdersPage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState('all'),\n _useState2 = _slicedToArray(_useState, 2),\n activeTab = _useState2[0],\n setActiveTab = _useState2[1];\n var _useState3 = useState([]),\n _useState4 = _slicedToArray(_useState3, 2),\n orders = _useState4[0],\n setOrders = _useState4[1];\n var load = function load() {\n return setOrders(getOrderList());\n };\n useEffect(load, []);\n\n // 读取从 profile 跳转过来的筛选状态\n useEffect(function () {\n var init = function init() {\n var filter = Taro.getStorageSync('orders:filter');\n if (filter && STATUS_TABS.some(function (t) {\n return t.code === filter;\n })) {\n setActiveTab(filter);\n Taro.removeStorageSync('orders:filter');\n }\n load();\n };\n init();\n // 页面每次显示时刷新\n var page = Taro.getCurrentInstance().page;\n if (page) {\n var orig = page.onShow;\n page.onShow = function () {\n init();\n if (orig) orig.apply(this);\n };\n }\n }, []);\n\n // 页面每次显示时刷新(处理下单后同步)\n useEffect(function () {\n var _Taro$eventCenter, _Taro$eventCenter$onc;\n (_Taro$eventCenter = Taro.eventCenter) === null || _Taro$eventCenter === void 0 || (_Taro$eventCenter$onc = _Taro$eventCenter.once) === null || _Taro$eventCenter$onc === void 0 || _Taro$eventCenter$onc.call(_Taro$eventCenter, 'orders:refresh', load);\n load();\n return function () {\n var _Taro$eventCenter2, _Taro$eventCenter2$of;\n (_Taro$eventCenter2 = Taro.eventCenter) === null || _Taro$eventCenter2 === void 0 || (_Taro$eventCenter2$of = _Taro$eventCenter2.off) === null || _Taro$eventCenter2$of === void 0 || _Taro$eventCenter2$of.call(_Taro$eventCenter2, 'orders:refresh', load);\n };\n }, []);\n var filteredOrders = activeTab === 'all' ? orders : orders.filter(function (o) {\n return o.statusCode === activeTab;\n });\n var goDetail = function goDetail(order) {\n Taro.navigateTo({\n url: \"/pages/orderDetail/index?orderId=\".concat(order.id)\n });\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(LoginGuard, {\n children: /*#__PURE__*/_jsxs(View, {\n className: \"orders-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u6211\\u7684\\u8BA2\\u5355\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"status-tabs\",\n children: /*#__PURE__*/_jsx(ScrollView, {\n className: \"tabs-scroll\",\n scrollX: true,\n children: STATUS_TABS.map(function (tab) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"tab-item \".concat(activeTab === tab.code ? 'active' : ''),\n onTap: function onTap() {\n return setActiveTab(tab.code);\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"tab-label\",\n children: tab.label\n }), activeTab === tab.code && /*#__PURE__*/_jsx(View, {\n className: \"tab-underline\"\n })]\n }, tab.code);\n })\n })\n }), /*#__PURE__*/_jsxs(ScrollView, {\n className: \"orders-list\",\n scrollY: true,\n children: [filteredOrders.map(function (order) {\n var _order$productIcon;\n var status = STATUS_MAP[order.statusCode] || STATUS_MAP.pending;\n var iconSrc = (_order$productIcon = order.productIcon) !== null && _order$productIcon !== void 0 && _order$productIcon.startsWith('/icon/') ? order.productIcon : '/icon/四角星.png';\n return /*#__PURE__*/_jsxs(View, {\n className: \"order-card dashed-card\",\n onTap: function onTap() {\n return goDetail(order);\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"order-header\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"order-date\",\n children: order.date\n }), /*#__PURE__*/_jsx(Text, {\n className: \"badge \".concat(status.badge),\n children: status.label\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"order-body\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"order-icon-wrapper\",\n children: /*#__PURE__*/_jsx(Image, {\n className: \"order-icon-img\",\n src: iconSrc,\n mode: \"aspectFit\"\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"order-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"order-product\",\n children: order.productName\n }), /*#__PURE__*/_jsx(Text, {\n className: \"order-sku\",\n children: order.sku\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"order-meta\",\n children: [\"\\u6570\\u91CF: \", order.count, \" \\u4EF6 | \", order.id]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"order-footer\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"order-price-bar\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"price-label\",\n children: \"\\u5B9E\\u4ED8\\u6B3E\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"price-value\",\n children: order.price\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"order-actions\",\n children: [order.statusCode === 'pending' && /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient order-btn\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u7ACB\\u5373\\u4ED8\\u6B3E\"\n })\n }), order.statusCode === 'paid' && /*#__PURE__*/_jsx(View, {\n className: \"btn-outline order-btn\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u50AC\\u53D1\\u8D27\"\n })\n }), order.statusCode === 'shipping' && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline order-btn\",\n onTap: function onTap(e) {\n e.stopPropagation();\n Taro.showToast({\n title: '查看物流',\n icon: 'none'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u67E5\\u770B\\u7269\\u6D41\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient order-btn\",\n onTap: function onTap(e) {\n e.stopPropagation();\n Taro.showToast({\n title: '确认收货',\n icon: 'none'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u786E\\u8BA4\\u6536\\u8D27\"\n })\n })]\n }), order.statusCode === 'done' && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline order-btn\",\n onTap: function onTap(e) {\n e.stopPropagation();\n Taro.showToast({\n title: '申请售后',\n icon: 'none'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u7533\\u8BF7\\u552E\\u540E\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient order-btn\",\n onTap: function onTap(e) {\n e.stopPropagation();\n Taro.showToast({\n title: '再来一单',\n icon: 'none'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u518D\\u6765\\u4E00\\u5355\"\n })\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline order-btn\",\n onTap: function onTap(e) {\n e.stopPropagation();\n goDetail(order);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u8BE6\\u60C5\"\n })\n })]\n })]\n })]\n }, order.id);\n }), filteredOrders.length === 0 && /*#__PURE__*/_jsxs(View, {\n className: \"empty-state\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"empty-icon-img\",\n src: \"/icon/\\u5305\\u88F9.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-text\",\n children: \"\\u6682\\u65E0\\u8BA2\\u5355\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-sub\",\n children: \"\\u53BB\\u9996\\u9875\\u5F00\\u59CB\\u5B9A\\u5236\\u5427\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: function onTap() {\n return Taro.switchTab({\n url: '/pages/index/index'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53BB\\u5B9A\\u5236\"\n })\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n })]\n })\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/orders/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/orders/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/orders/index.wxss b/dist/pages/orders/index.wxss index 08a5342..8f5f681 100644 --- a/dist/pages/orders/index.wxss +++ b/dist/pages/orders/index.wxss @@ -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; } diff --git a/dist/pages/product/index.js b/dist/pages/product/index.js index ed2db74..122afe4 100644 --- a/dist/pages/product/index.js +++ b/dist/pages/product/index.js @@ -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" }) diff --git a/dist/pages/product/index.js.map b/dist/pages/product/index.js.map index 4316b4d..cd190b8 100644 --- a/dist/pages/product/index.js.map +++ b/dist/pages/product/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/product/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;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;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;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;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;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;;;;;;;;;;;;ACrRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/product/index.tsx?826d","webpack://smart-engraving-miniapp/._src_pages_product_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image, Swiper, SwiperItem } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState } from 'react';\nimport './index.scss';\nimport { getProductById } from '../../utils/productConfig';\nimport { addDesign } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar HERO_COLORS = ['#FFE4EC', '#FFF0F5', '#FCE4EC'];\nexport default function ProductPage() {\n var _Taro$getCurrentInsta;\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n showModal = _useState2[0],\n setShowModal = _useState2[1];\n var _useState3 = useState(1),\n _useState4 = _slicedToArray(_useState3, 2),\n quantity = _useState4[0],\n setQuantity = _useState4[1];\n var params = (_Taro$getCurrentInsta = Taro.getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params;\n var productId = (params === null || params === void 0 ? void 0 : params.id) || '';\n var product = getProductById(productId);\n if (!product) {\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(View, {\n className: \"product-page\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"page-header dashed-card mt-20\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u5546\\u54C1\\u672A\\u627E\\u5230\"\n })\n })\n })\n });\n }\n var handleAddToList = function handleAddToList() {\n setQuantity(1);\n setShowModal(true);\n };\n var confirmAdd = function confirmAdd() {\n addDesign(product, quantity);\n setShowModal(false);\n Taro.showToast({\n title: \"\\u5DF2\\u52A0\\u5165\\u8BBE\\u8BA1\\u6E05\\u5355 x\".concat(quantity),\n icon: 'success'\n });\n setTimeout(function () {\n return Taro.navigateBack();\n }, 1200);\n };\n var goToDIY = function goToDIY() {\n Taro.navigateTo({\n url: \"/pages/diy/index?source=product&productId=\".concat(product.id, \"&quantity=1\")\n });\n };\n var modQty = function modQty(delta) {\n setQuantity(function (q) {\n return Math.max(1, Math.min(99, q + delta));\n });\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"product-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onClick: function onClick() {\n return Taro.navigateBack();\n },\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u5546\\u54C1\\u8BE6\\u60C5\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"hero-section mt-20\",\n children: /*#__PURE__*/_jsx(Swiper, {\n className: \"hero-swiper\",\n circular: true,\n autoplay: true,\n interval: 3000,\n duration: 500,\n indicatorDots: true,\n indicatorColor: \"rgba(0,0,0,0.2)\",\n indicatorActiveColor: \"#ff9a9e\",\n children: product.images && product.images.length > 0 ? product.images.map(function (img, idx) {\n return /*#__PURE__*/_jsx(SwiperItem, {\n children: /*#__PURE__*/_jsxs(View, {\n className: \"hero-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Image, {\n className: \"hero-image\",\n src: img,\n mode: \"aspectFit\"\n })]\n })\n }, idx);\n }) : HERO_COLORS.map(function (color, idx) {\n return /*#__PURE__*/_jsx(SwiperItem, {\n children: /*#__PURE__*/_jsxs(View, {\n className: \"hero-card dashed-card\",\n style: {\n background: color\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"hero-icon\",\n children: product.icon\n }), /*#__PURE__*/_jsx(Text, {\n className: \"hero-name\",\n children: product.name\n })]\n })\n }, idx);\n })\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-section dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u5355\\u4EF7\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"info-price\",\n children: [\"\\xA5\", product.price]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u5DE5\\u671F\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"info-value\",\n children: product.leadTime\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u5C3A\\u5BF8\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"info-value\",\n children: [product.mask.width, \" \\xD7 \", product.mask.height, \" px\"]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"detail-section dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u5546\\u54C1\\u4ECB\\u7ECD\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"detail-text\",\n children: product.description\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"action-bar\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"price-summary\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"summary-label\",\n children: \"\\u8D77\\u4EF7\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"summary-price\",\n children: [\"\\xA5\", product.price]\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onClick: handleAddToList,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u52A0\\u5165\\u8BBE\\u8BA1\\u6E05\\u5355\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: goToDIY,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u7ACB\\u5373\\u4E0B\\u5355\"\n })\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"safe-bottom-placeholder\"\n }), showModal && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"modal-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"modal-title\",\n children: \"\\u52A0\\u5165\\u8BBE\\u8BA1\\u6E05\\u5355\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"modal-product\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"modal-icon\",\n children: product.icon\n }), /*#__PURE__*/_jsx(Text, {\n className: \"modal-name\",\n children: product.name\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"quantity-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"qty-label\",\n children: \"\\u6570\\u91CF\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"qty-control\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"qty-btn\",\n onClick: function onClick() {\n return modQty(-1);\n },\n children: \"\\uFF0D\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"qty-num\",\n children: quantity\n }), /*#__PURE__*/_jsx(View, {\n className: \"qty-btn\",\n onClick: function onClick() {\n return modQty(1);\n },\n children: \"\\uFF0B\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"modal-total\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"total-label\",\n children: \"\\u5C0F\\u8BA1\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"total-price\",\n children: [\"\\xA5\", (product.price * quantity).toFixed(2)]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"modal-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onClick: function onClick() {\n return setShowModal(false);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53D6\\u6D88\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: confirmAdd,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u786E\\u5B9A\"\n })\n })]\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/product/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/product/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/product/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;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;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;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;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;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;;;;;;;;;;;;ACxRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/product/index.tsx?826d","webpack://smart-engraving-miniapp/._src_pages_product_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image, Swiper, SwiperItem } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState } from 'react';\nimport './index.scss';\nimport { getProductById } from '../../utils/productConfig';\nimport { addDesign } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { getProductIconImg } from '../../utils/productConfig';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar HERO_COLORS = ['#FFE4EC', '#FFF0F5', '#FCE4EC'];\nexport default function ProductPage() {\n var _Taro$getCurrentInsta;\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n showModal = _useState2[0],\n setShowModal = _useState2[1];\n var _useState3 = useState(1),\n _useState4 = _slicedToArray(_useState3, 2),\n quantity = _useState4[0],\n setQuantity = _useState4[1];\n var params = (_Taro$getCurrentInsta = Taro.getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params;\n var productId = (params === null || params === void 0 ? void 0 : params.id) || '';\n var product = getProductById(productId);\n if (!product) {\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsx(View, {\n className: \"product-page\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"page-header dashed-card mt-20\",\n children: /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u5546\\u54C1\\u672A\\u627E\\u5230\"\n })\n })\n })\n });\n }\n var handleAddToList = function handleAddToList() {\n setQuantity(1);\n setShowModal(true);\n };\n var confirmAdd = function confirmAdd() {\n addDesign(product, quantity);\n setShowModal(false);\n Taro.showToast({\n title: \"\\u5DF2\\u52A0\\u5165\\u8BBE\\u8BA1\\u6E05\\u5355 x\".concat(quantity),\n icon: 'success'\n });\n setTimeout(function () {\n return Taro.navigateBack();\n }, 1200);\n };\n var goToDIY = function goToDIY() {\n Taro.navigateTo({\n url: \"/pages/diy/index?source=product&productId=\".concat(product.id, \"&quantity=1\")\n });\n };\n var modQty = function modQty(delta) {\n setQuantity(function (q) {\n return Math.max(1, Math.min(99, q + delta));\n });\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"product-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onTap: function onTap() {\n return Taro.navigateBack();\n },\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u5546\\u54C1\\u8BE6\\u60C5\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"hero-section mt-20\",\n children: /*#__PURE__*/_jsx(Swiper, {\n className: \"hero-swiper\",\n circular: true,\n autoplay: true,\n interval: 3000,\n duration: 500,\n indicatorDots: true,\n indicatorColor: \"rgba(0,0,0,0.2)\",\n indicatorActiveColor: \"#ff9a9e\",\n children: product.images && product.images.length > 0 ? product.images.map(function (img, idx) {\n return /*#__PURE__*/_jsx(SwiperItem, {\n children: /*#__PURE__*/_jsxs(View, {\n className: \"hero-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Image, {\n className: \"hero-image\",\n src: img,\n mode: \"aspectFit\"\n })]\n })\n }, idx);\n }) : HERO_COLORS.map(function (color, idx) {\n return /*#__PURE__*/_jsx(SwiperItem, {\n children: /*#__PURE__*/_jsxs(View, {\n className: \"hero-card dashed-card\",\n style: {\n background: color\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Image, {\n className: \"hero-icon-img\",\n src: getProductIconImg(product),\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"hero-name\",\n children: product.name\n })]\n })\n }, idx);\n })\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-section dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u5355\\u4EF7\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"info-price\",\n children: [\"\\xA5\", product.price]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u5DE5\\u671F\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"info-value\",\n children: product.leadTime\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"info-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"info-label\",\n children: \"\\u5C3A\\u5BF8\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"info-value\",\n children: [product.mask.width, \" \\xD7 \", product.mask.height, \" px\"]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"detail-section dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u5546\\u54C1\\u4ECB\\u7ECD\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"detail-text\",\n children: product.description\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"action-bar\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"price-summary\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"summary-label\",\n children: \"\\u8D77\\u4EF7\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"summary-price\",\n children: [\"\\xA5\", product.price]\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onTap: handleAddToList,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u52A0\\u5165\\u8BBE\\u8BA1\\u6E05\\u5355\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: goToDIY,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u7ACB\\u5373\\u4E0B\\u5355\"\n })\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"safe-bottom-placeholder\"\n }), showModal && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"modal-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"modal-title\",\n children: \"\\u52A0\\u5165\\u8BBE\\u8BA1\\u6E05\\u5355\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"modal-product\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"modal-icon-img\",\n src: getProductIconImg(product),\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"modal-name\",\n children: product.name\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"quantity-row\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"qty-label\",\n children: \"\\u6570\\u91CF\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"qty-control\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"qty-btn\",\n onTap: function onTap() {\n return modQty(-1);\n },\n children: \"\\uFF0D\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"qty-num\",\n children: quantity\n }), /*#__PURE__*/_jsx(View, {\n className: \"qty-btn\",\n onTap: function onTap() {\n return modQty(1);\n },\n children: \"\\uFF0B\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"modal-total\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"total-label\",\n children: \"\\u5C0F\\u8BA1\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"total-price\",\n children: [\"\\xA5\", (product.price * quantity).toFixed(2)]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"modal-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onTap: function onTap() {\n return setShowModal(false);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53D6\\u6D88\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: confirmAdd,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u786E\\u5B9A\"\n })\n })]\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/product/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/product/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/product/index.wxss b/dist/pages/product/index.wxss index 3b96937..82c70d7 100644 --- a/dist/pages/product/index.wxss +++ b/dist/pages/product/index.wxss @@ -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); diff --git a/dist/pages/profile/index.js b/dist/pages/profile/index.js index f1618dd..5f68c29 100644 --- a/dist/pages/profile/index.js +++ b/dist/pages/profile/index.js @@ -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,24 +226,30 @@ function ProfilePage() { break; } }; - var handleMenuClick = function handleMenuClick(path) { - if (!path) { + var handleMenuClick = function handleMenuClick(path, label) { + if (!isLoggedIn && (path.includes('designList') || path.includes('orders'))) { _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({ - title: '功能开发中', + title: '请先登录', icon: 'none' }); + 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')) { - if (!isLoggedIn) { - _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({ - title: '请先登录', - icon: 'none' - }); - setShowLogin(true); - return; - } _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: [/*#__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'); - }, - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { - className: "status-num", - children: orderStats.toDesign - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { - className: "status-label", - children: "\u5F85\u8BBE\u8BA1" - })] - }), /*#__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" - })] - })] + 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", + onTap: function onTap() { + return handleQuickClick(s.key); + }, + 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[s.key] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "status-label", + children: s.label + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "status-divider" + })] + }, 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: [/*#__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'); - }, - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { - className: "status-num", - children: orderStats.paid - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { - className: "status-label", - children: "\u5F85\u53D1\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('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" - })] - })] + 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", + onTap: function onTap() { + return handleQuickClick(s.key); + }, + 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[s.key] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "status-label", + children: s.label + })] + }), idx < 2 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "status-divider" + })] + }, 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, { - className: "enterprise-title", - children: "\uD83C\uDFE2 \u4F01\u4E1A\u6279\u91CF\u5B9A\u5236" + 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: "\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" }) diff --git a/dist/pages/profile/index.js.map b/dist/pages/profile/index.js.map index c67361e..f69325c 100644 --- a/dist/pages/profile/index.js.map +++ b/dist/pages/profile/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/profile/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;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;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;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;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/profile/index.tsx?1006","webpack://smart-engraving-miniapp/._src_pages_profile_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image, Input, Button } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { getOrderList, getUserInfo, setUserInfo, getDesignList } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar MENU_ITEMS = [{\n icon: '🎨',\n label: '我的设计',\n path: '/pages/designList/index'\n}, {\n icon: '✨',\n label: '词云生成',\n path: '/pages/wordcloud/index'\n}, {\n icon: '📍',\n label: '收货地址',\n path: '/pages/address/index'\n}, {\n icon: '📞',\n label: '联系客服',\n path: '/pages/service/index'\n}, {\n icon: '📋',\n label: '使用帮助',\n path: '/pages/agreement/index'\n}, {\n icon: '⚙️',\n label: '设置',\n path: '/pages/settings/index'\n}];\nexport default function ProfilePage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isLoggedIn = _useState2[0],\n setIsLoggedIn = _useState2[1];\n var _useState3 = useState({\n nickName: '',\n avatarUrl: ''\n }),\n _useState4 = _slicedToArray(_useState3, 2),\n userInfo = _useState4[0],\n setUserInfoState = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n showLogin = _useState6[0],\n setShowLogin = _useState6[1];\n var _useState7 = useState(''),\n _useState8 = _slicedToArray(_useState7, 2),\n loginNickName = _useState8[0],\n setLoginNickName = _useState8[1];\n var _useState9 = useState(''),\n _useState0 = _slicedToArray(_useState9, 2),\n loginAvatarUrl = _useState0[0],\n setLoginAvatarUrl = _useState0[1];\n var _useState1 = useState({\n toDesign: 0,\n pending: 0,\n paid: 0,\n shipping: 0,\n done: 0\n }),\n _useState10 = _slicedToArray(_useState1, 2),\n orderStats = _useState10[0],\n setOrderStats = _useState10[1];\n var loadStats = function loadStats() {\n var orders = getOrderList();\n var designs = getDesignList();\n setOrderStats({\n toDesign: designs.filter(function (d) {\n return d.status === 'undesigned' || d.status === 'designing';\n }).length,\n pending: orders.filter(function (o) {\n return o.statusCode === 'pending';\n }).length,\n paid: orders.filter(function (o) {\n return o.statusCode === 'paid';\n }).length,\n shipping: orders.filter(function (o) {\n return o.statusCode === 'shipping';\n }).length,\n done: orders.filter(function (o) {\n return o.statusCode === 'done';\n }).length\n });\n };\n useEffect(function () {\n var info = getUserInfo();\n if (info) {\n setIsLoggedIn(true);\n setUserInfoState({\n nickName: info.nickName || '',\n avatarUrl: info.avatarUrl || ''\n });\n }\n loadStats();\n }, []);\n var handleOpenLogin = function handleOpenLogin() {\n return setShowLogin(true);\n };\n var handleCloseLogin = function handleCloseLogin() {\n return setShowLogin(false);\n };\n var handleLoginSubmit = function handleLoginSubmit() {\n Taro.login({\n success: function success() {\n var mockOpenid = 'mock_' + Date.now().toString(36) + '_' + Math.random().toString(36).slice(2, 6);\n var info = {\n openid: mockOpenid,\n nickName: loginNickName || '微信用户',\n avatarUrl: loginAvatarUrl || '',\n loginAt: Date.now()\n };\n setUserInfo(info);\n setUserInfoState({\n nickName: info.nickName,\n avatarUrl: info.avatarUrl\n });\n setIsLoggedIn(true);\n setShowLogin(false);\n Taro.showToast({\n title: '登录成功',\n icon: 'success'\n });\n },\n fail: function fail() {\n Taro.showToast({\n title: '登录失败,请重试',\n icon: 'none'\n });\n }\n });\n };\n var onChooseAvatar = function onChooseAvatar(e) {\n setLoginAvatarUrl(e.detail.avatarUrl || '');\n };\n var handleQuickClick = function handleQuickClick(type) {\n if (!isLoggedIn) {\n Taro.showToast({\n title: '请先登录',\n icon: 'none'\n });\n setShowLogin(true);\n return;\n }\n switch (type) {\n case 'toDesign':\n Taro.setStorageSync('designList:filter', 'toDesign');\n Taro.switchTab({\n url: '/pages/designList/index'\n });\n break;\n case 'pending':\n // 跳转订单页并带状态参数 - 这里用 event 或 storage 传递\n Taro.setStorageSync('orders:filter', 'pending');\n Taro.switchTab({\n url: '/pages/orders/index'\n });\n break;\n case 'paid':\n Taro.setStorageSync('orders:filter', 'paid');\n Taro.switchTab({\n url: '/pages/orders/index'\n });\n break;\n case 'shipping':\n Taro.setStorageSync('orders:filter', 'shipping');\n Taro.switchTab({\n url: '/pages/orders/index'\n });\n break;\n case 'done':\n Taro.setStorageSync('orders:filter', 'done');\n Taro.switchTab({\n url: '/pages/orders/index'\n });\n break;\n }\n };\n var handleMenuClick = function handleMenuClick(path) {\n if (!path) {\n Taro.showToast({\n title: '功能开发中',\n icon: 'none'\n });\n return;\n }\n if (path.startsWith('/pages/')) {\n if (path.includes('designList') || path.includes('orders')) {\n if (!isLoggedIn) {\n Taro.showToast({\n title: '请先登录',\n icon: 'none'\n });\n setShowLogin(true);\n return;\n }\n Taro.switchTab({\n url: path,\n fail: function fail(err) {\n console.error('switchTab fail', err);\n Taro.showToast({\n title: '跳转失败',\n icon: 'none'\n });\n }\n });\n } else {\n Taro.navigateTo({\n url: path,\n fail: function fail(err) {\n console.error('navigateTo fail', err);\n Taro.showToast({\n title: '跳转失败',\n icon: 'none'\n });\n }\n });\n }\n }\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"profile-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"profile-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"user-info\",\n children: [isLoggedIn && userInfo.avatarUrl ? /*#__PURE__*/_jsx(Image, {\n className: \"avatar\",\n src: userInfo.avatarUrl,\n mode: \"aspectFill\"\n }) : /*#__PURE__*/_jsx(View, {\n className: \"avatar-placeholder\",\n onClick: handleOpenLogin,\n children: /*#__PURE__*/_jsx(Text, {\n className: \"avatar-icon\",\n children: \"\\uD83D\\uDC64\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"user-meta\",\n children: isLoggedIn ? /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"user-name\",\n children: userInfo.nickName\n }), /*#__PURE__*/_jsx(Text, {\n className: \"user-level\",\n children: \"\\u667A\\u7ED8\\u5FAE\\u523B\\u4F1A\\u5458\"\n })]\n }) : /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"user-name\",\n onClick: handleOpenLogin,\n children: \"\\u70B9\\u51FB\\u767B\\u5F55\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"user-level\",\n children: \"\\u6388\\u6743\\u5FAE\\u4FE1\\uFF0C\\u5F00\\u542F\\u4E13\\u5C5E\\u5B9A\\u5236\"\n })]\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"status-grid\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"status-row row2\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"status-item\",\n onClick: function onClick() {\n return handleQuickClick('toDesign');\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"status-num\",\n children: orderStats.toDesign\n }), /*#__PURE__*/_jsx(Text, {\n className: \"status-label\",\n children: \"\\u5F85\\u8BBE\\u8BA1\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"status-divider\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"status-item\",\n onClick: function onClick() {\n return handleQuickClick('pending');\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"status-num\",\n children: orderStats.pending\n }), /*#__PURE__*/_jsx(Text, {\n className: \"status-label\",\n children: \"\\u5F85\\u4ED8\\u6B3E\"\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"status-divider-h\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"status-row row3\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"status-item\",\n onClick: function onClick() {\n return handleQuickClick('paid');\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"status-num\",\n children: orderStats.paid\n }), /*#__PURE__*/_jsx(Text, {\n className: \"status-label\",\n children: \"\\u5F85\\u53D1\\u8D27\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"status-divider\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"status-item\",\n onClick: function onClick() {\n return handleQuickClick('shipping');\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"status-num\",\n children: orderStats.shipping\n }), /*#__PURE__*/_jsx(Text, {\n className: \"status-label\",\n children: \"\\u5F85\\u6536\\u8D27\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"status-divider\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"status-item\",\n onClick: function onClick() {\n return handleQuickClick('done');\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"status-num\",\n children: orderStats.done\n }), /*#__PURE__*/_jsx(Text, {\n className: \"status-label\",\n children: \"\\u5DF2\\u5B8C\\u6210\"\n })]\n })]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"mt-20\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u5E38\\u7528\\u529F\\u80FD\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"menu-grid\",\n children: MENU_ITEMS.map(function (item, idx) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"menu-card dashed-card\",\n onClick: function onClick() {\n return handleMenuClick(item.path);\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"menu-icon\",\n children: item.icon\n }), /*#__PURE__*/_jsx(Text, {\n className: \"menu-label\",\n children: item.label\n })]\n }, idx);\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"enterprise-section dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"flex-column\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"enterprise-title\",\n children: \"\\uD83C\\uDFE2 \\u4F01\\u4E1A\\u6279\\u91CF\\u5B9A\\u5236\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"enterprise-desc\",\n children: \"\\u5E74\\u4F1A\\u793C\\u54C1\\u3001\\u5165\\u804C\\u7EAA\\u5FF5\\u3001\\u56E2\\u5EFA\\u4F34\\u624B\\u793C\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient enterprise-btn\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u7ACB\\u5373\\u54A8\\u8BE2\"\n })\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n }), showLogin && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"login-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"login-title\",\n children: \"\\u767B\\u5F55\\u667A\\u7ED8\\u5FAE\\u523B\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"login-desc\",\n children: \"\\u767B\\u5F55\\u540E\\u540C\\u6B65\\u60A8\\u7684\\u8BBE\\u8BA1\\u6E05\\u5355\\u548C\\u8BA2\\u5355\"\n }), /*#__PURE__*/_jsx(Button, {\n className: \"avatar-btn\",\n openType: \"chooseAvatar\",\n onChooseAvatar: onChooseAvatar,\n children: loginAvatarUrl ? /*#__PURE__*/_jsx(Image, {\n className: \"avatar-img\",\n src: loginAvatarUrl,\n mode: \"aspectFill\"\n }) : /*#__PURE__*/_jsx(Text, {\n className: \"avatar-placeholder\",\n children: \"\\u70B9\\u51FB\\u9009\\u62E9\\u5934\\u50CF\"\n })\n }), /*#__PURE__*/_jsx(Input, {\n type: \"nickname\",\n className: \"nickname-input\",\n placeholder: \"\\u8BF7\\u8F93\\u5165\\u6635\\u79F0\",\n value: loginNickName,\n onInput: function onInput(e) {\n return setLoginNickName(e.detail.value);\n }\n }), /*#__PURE__*/_jsxs(View, {\n className: \"login-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onClick: handleCloseLogin,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53D6\\u6D88\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: handleLoginSubmit,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u767B\\u5F55\"\n })\n })]\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/profile/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/profile/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/profile/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;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;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;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;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;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;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;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;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;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;;;;;;;;;;;;ACvdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/profile/index.tsx?1006","webpack://smart-engraving-miniapp/._src_pages_profile_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image, Input, Button } from '@tarojs/components';\nimport Taro, { useDidShow } from '@tarojs/taro';\nimport { useState } from 'react';\nimport './index.scss';\nimport { getOrderList, getUserInfo, setUserInfo, getDesignList } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar ICON_MAP = {\n '我的设计': '/icon/调色盘.png',\n '词云生成': '/icon/词云生成.png',\n '收货地址': '/icon/地址.png',\n '联系客服': '/icon/电话.png',\n '使用帮助': '/icon/使用帮助.png',\n '设置': '/icon/设置.png'\n};\nvar STATUS_MAP = [{\n key: 'toDesign',\n label: '待设计',\n icon: '/icon/三角尺.png'\n}, {\n key: 'pending',\n label: '待付款',\n icon: '/icon/四角星.png'\n}, {\n key: 'paid',\n label: '待发货',\n icon: '/icon/包裹.png'\n}, {\n key: 'shipping',\n label: '待收货',\n icon: '/icon/杯子.png'\n}, {\n key: 'done',\n label: '已完成',\n icon: '/icon/书本.png'\n}];\nvar MENU_ITEMS = [{\n label: '我的设计',\n path: '/pages/designList/index'\n}, {\n label: '词云生成',\n path: '/pages/wordcloud/index'\n}, {\n label: '收货地址',\n path: '/pages/address/index'\n}, {\n label: '联系客服',\n path: '/pages/service/index'\n}, {\n label: '使用帮助',\n path: '/pages/agreement/index'\n}, {\n label: '设置',\n path: '/pages/settings/index'\n}];\nexport default function ProfilePage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isLoggedIn = _useState2[0],\n setIsLoggedIn = _useState2[1];\n var _useState3 = useState({\n nickName: '',\n avatarUrl: ''\n }),\n _useState4 = _slicedToArray(_useState3, 2),\n userInfo = _useState4[0],\n setUserInfoState = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n showLogin = _useState6[0],\n setShowLogin = _useState6[1];\n var _useState7 = useState(''),\n _useState8 = _slicedToArray(_useState7, 2),\n loginNickName = _useState8[0],\n setLoginNickName = _useState8[1];\n var _useState9 = useState(''),\n _useState0 = _slicedToArray(_useState9, 2),\n loginAvatarUrl = _useState0[0],\n setLoginAvatarUrl = _useState0[1];\n var _useState1 = useState({\n toDesign: 0,\n pending: 0,\n paid: 0,\n shipping: 0,\n done: 0\n }),\n _useState10 = _slicedToArray(_useState1, 2),\n orderStats = _useState10[0],\n setOrderStats = _useState10[1];\n var loadStats = function loadStats() {\n var orders = getOrderList();\n var designs = getDesignList();\n setOrderStats({\n toDesign: designs.filter(function (d) {\n return d.status === 'undesigned' || d.status === 'designing';\n }).length,\n pending: orders.filter(function (o) {\n return o.statusCode === 'pending';\n }).length,\n paid: orders.filter(function (o) {\n return o.statusCode === 'paid';\n }).length,\n shipping: orders.filter(function (o) {\n return o.statusCode === 'shipping';\n }).length,\n done: orders.filter(function (o) {\n return o.statusCode === 'done';\n }).length\n });\n };\n var sync = function sync() {\n var info = getUserInfo();\n if (info !== null && info !== void 0 && info.openid) {\n setIsLoggedIn(true);\n setUserInfoState({\n nickName: info.nickName || '',\n avatarUrl: info.avatarUrl || ''\n });\n } else {\n setIsLoggedIn(false);\n setUserInfoState({\n nickName: '',\n avatarUrl: ''\n });\n }\n loadStats();\n };\n useDidShow(function () {\n sync();\n });\n var handleOpenLogin = function handleOpenLogin() {\n return setShowLogin(true);\n };\n var handleCloseLogin = function handleCloseLogin() {\n return setShowLogin(false);\n };\n var handleLoginSubmit = function handleLoginSubmit() {\n Taro.login({\n success: function success() {\n var mockOpenid = 'mock_' + Date.now().toString(36) + '_' + Math.random().toString(36).slice(2, 6);\n var info = {\n openid: mockOpenid,\n nickName: loginNickName || '微信用户',\n avatarUrl: loginAvatarUrl || '',\n loginAt: Date.now()\n };\n setUserInfo(info);\n setUserInfoState({\n nickName: info.nickName,\n avatarUrl: info.avatarUrl\n });\n setIsLoggedIn(true);\n setShowLogin(false);\n Taro.showToast({\n title: '登录成功',\n icon: 'success'\n });\n },\n fail: function fail() {\n Taro.showToast({\n title: '登录失败,请重试',\n icon: 'none'\n });\n }\n });\n };\n var onChooseAvatar = function onChooseAvatar(e) {\n setLoginAvatarUrl(e.detail.avatarUrl || '');\n };\n var handleQuickClick = function handleQuickClick(type) {\n switch (type) {\n case 'toDesign':\n Taro.setStorageSync('designList:filter', 'toDesign');\n Taro.switchTab({\n url: '/pages/designList/index'\n });\n break;\n case 'pending':\n Taro.setStorageSync('orders:filter', 'pending');\n Taro.switchTab({\n url: '/pages/orders/index'\n });\n break;\n case 'paid':\n Taro.setStorageSync('orders:filter', 'paid');\n Taro.switchTab({\n url: '/pages/orders/index'\n });\n break;\n case 'shipping':\n Taro.setStorageSync('orders:filter', 'shipping');\n Taro.switchTab({\n url: '/pages/orders/index'\n });\n break;\n case 'done':\n Taro.setStorageSync('orders:filter', 'done');\n Taro.switchTab({\n url: '/pages/orders/index'\n });\n break;\n }\n };\n var handleMenuClick = function handleMenuClick(path, label) {\n if (!isLoggedIn && (path.includes('designList') || path.includes('orders'))) {\n Taro.showToast({\n title: '请先登录',\n icon: 'none'\n });\n setShowLogin(true);\n return;\n }\n if (label === '联系客服') {\n Taro.navigateTo({\n url: '/pages/service/index',\n fail: function fail(err) {\n console.error('navigateTo service fail', err);\n Taro.showToast({\n title: '跳转失败',\n icon: 'none'\n });\n }\n });\n return;\n }\n if (path.startsWith('/pages/')) {\n if (path.includes('designList') || path.includes('orders')) {\n Taro.switchTab({\n url: path,\n fail: function fail(err) {\n console.error('switchTab fail', err);\n Taro.showToast({\n title: '跳转失败',\n icon: 'none'\n });\n }\n });\n } else {\n Taro.navigateTo({\n url: path,\n fail: function fail(err) {\n console.error('navigateTo fail', err);\n Taro.showToast({\n title: '跳转失败',\n icon: 'none'\n });\n }\n });\n }\n }\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n style: {\n minHeight: '100vh'\n },\n children: /*#__PURE__*/_jsxs(View, {\n className: \"profile-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"profile-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"user-info\",\n children: [isLoggedIn && userInfo.avatarUrl ? /*#__PURE__*/_jsx(Image, {\n className: \"avatar\",\n src: userInfo.avatarUrl,\n mode: \"aspectFill\"\n }) : /*#__PURE__*/_jsx(View, {\n className: \"avatar-placeholder\",\n onTap: handleOpenLogin,\n children: /*#__PURE__*/_jsx(Image, {\n className: \"avatar-icon-img\",\n src: \"/icon/\\u4E2A\\u4EBA.png\",\n mode: \"aspectFit\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"user-meta\",\n children: isLoggedIn ? /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"user-name\",\n children: userInfo.nickName\n }), /*#__PURE__*/_jsx(Text, {\n className: \"user-level\",\n children: \"\\u667A\\u7ED8\\u5FAE\\u523B\\u4F1A\\u5458\"\n })]\n }) : /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"user-name\",\n onTap: handleOpenLogin,\n children: \"\\u70B9\\u51FB\\u767B\\u5F55\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"user-level\",\n children: \"\\u6388\\u6743\\u5FAE\\u4FE1\\uFF0C\\u5F00\\u542F\\u4E13\\u5C5E\\u5B9A\\u5236\"\n })]\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"status-grid\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"status-row row2\",\n children: STATUS_MAP.slice(0, 2).map(function (s) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"status-group\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"status-item\",\n onTap: function onTap() {\n return handleQuickClick(s.key);\n },\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"status-icon-img\",\n src: s.icon,\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"status-num\",\n children: orderStats[s.key]\n }), /*#__PURE__*/_jsx(Text, {\n className: \"status-label\",\n children: s.label\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"status-divider\"\n })]\n }, s.key);\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"status-divider-h\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"status-row row3\",\n children: STATUS_MAP.slice(2).map(function (s, idx) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"status-group\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"status-item\",\n onTap: function onTap() {\n return handleQuickClick(s.key);\n },\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"status-icon-img\",\n src: s.icon,\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"status-num\",\n children: orderStats[s.key]\n }), /*#__PURE__*/_jsx(Text, {\n className: \"status-label\",\n children: s.label\n })]\n }), idx < 2 && /*#__PURE__*/_jsx(View, {\n className: \"status-divider\"\n })]\n }, s.key);\n })\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"mt-20\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u5E38\\u7528\\u529F\\u80FD\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"menu-grid\",\n children: MENU_ITEMS.map(function (item, idx) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"menu-card dashed-card\",\n onTap: function onTap() {\n return handleMenuClick(item.path, item.label);\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Image, {\n className: \"menu-icon-img\",\n src: ICON_MAP[item.label],\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"menu-label\",\n children: item.label\n })]\n }, idx);\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"enterprise-section dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"flex-column\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"flex-center\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"enterprise-icon\",\n src: \"/icon/\\u4F01\\u4E1A\\u6279\\u91CF\\u5B9A\\u5236.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"enterprise-title\",\n children: \"\\u4F01\\u4E1A\\u6279\\u91CF\\u5B9A\\u5236\"\n })]\n }), /*#__PURE__*/_jsx(Text, {\n className: \"enterprise-desc\",\n children: \"\\u5E74\\u4F1A\\u793C\\u54C1\\u3001\\u5165\\u804C\\u7EAA\\u5FF5\\u3001\\u56E2\\u5EFA\\u4F34\\u624B\\u793C\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient enterprise-btn\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u7ACB\\u5373\\u54A8\\u8BE2\"\n })\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n }), showLogin && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"login-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"login-title\",\n children: \"\\u767B\\u5F55\\u667A\\u7ED8\\u5FAE\\u523B\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"login-desc\",\n children: \"\\u767B\\u5F55\\u540E\\u540C\\u6B65\\u60A8\\u7684\\u8BBE\\u8BA1\\u6E05\\u5355\\u548C\\u8BA2\\u5355\"\n }), /*#__PURE__*/_jsx(Button, {\n className: \"avatar-btn\",\n openType: \"chooseAvatar\",\n onChooseAvatar: onChooseAvatar,\n children: loginAvatarUrl ? /*#__PURE__*/_jsx(Image, {\n className: \"avatar-img\",\n src: loginAvatarUrl,\n mode: \"aspectFill\"\n }) : /*#__PURE__*/_jsx(Image, {\n className: \"avatar-placeholder-img\",\n src: \"/icon/\\u4E2A\\u4EBA.png\",\n mode: \"aspectFit\"\n })\n }), /*#__PURE__*/_jsx(Input, {\n type: \"nickname\",\n className: \"nickname-input\",\n placeholder: \"\\u8BF7\\u8F93\\u5165\\u6635\\u79F0\",\n value: loginNickName,\n onInput: function onInput(e) {\n return setLoginNickName(e.detail.value);\n }\n }), /*#__PURE__*/_jsxs(View, {\n className: \"login-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onTap: handleCloseLogin,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53D6\\u6D88\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: handleLoginSubmit,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u767B\\u5F55\"\n })\n })]\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/profile/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/profile/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/profile/index.wxss b/dist/pages/profile/index.wxss index d75d670..7f43777 100644 --- a/dist/pages/profile/index.wxss +++ b/dist/pages/profile/index.wxss @@ -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; diff --git a/dist/pages/service/index.js b/dist/pages/service/index.js index d0811b8..16deac3 100644 --- a/dist/pages/service/index.js +++ b/dist/pages/service/index.js @@ -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__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_4__.Text, { - className: "enterprise-title", - children: "\uD83C\uDFE2 \u4F01\u4E1A\u4E13\u5C5E\u5BA2\u6237\u7ECF\u7406" + }), /*#__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: "\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" diff --git a/dist/pages/service/index.js.map b/dist/pages/service/index.js.map index a55b6ed..35228cb 100644 --- a/dist/pages/service/index.js.map +++ b/dist/pages/service/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/service/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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/service/index.tsx?da57","webpack://smart-engraving-miniapp/._src_pages_service_index.tsx"],"sourcesContent":["import { View, Text } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport './index.scss';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar FAQ_ITEMS = [{\n q: '定制周期需要多久?',\n a: '通常下单后3-5个工作日内发货,批量订单(50件以上)可能需要7-10个工作日。'\n}, {\n q: '可以修改设计稿吗?',\n a: '生产前可随时在设计工作台修改。确认下单后进入排队生产阶段,不可再修改。'\n}, {\n q: '支持退款/售后吗?',\n a: '非质量问题定制商品不支持7天无理由退款。如收到商品有破损或雕刻缺陷,请在签收48小时内联系客服处理。'\n}, {\n q: '可以开发票吗?',\n a: '支持开具增值税普通发票。请在下单时填写发票信息,或联系客服补开。'\n}];\nexport default function ServicePage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"service-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8054\\u7CFB\\u5BA2\\u670D\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"service-hero dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"service-icon\",\n children: \"\\uD83D\\uDCAC\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"service-title\",\n children: \"\\u667A\\u7ED8\\u5FAE\\u523B\\u5BA2\\u670D\\u4E2D\\u5FC3\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"service-desc\",\n children: \"\\u5DE5\\u4F5C\\u65E5 09:00 - 18:00 \\u5728\\u7EBF\\u4E3A\\u60A8\\u670D\\u52A1\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient service-btn\",\n onClick: function onClick() {\n return Taro.showToast({\n title: '跳转客服会话',\n icon: 'none'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\uD83D\\uDE80 \\u53D1\\u8D77\\u54A8\\u8BE2\"\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"mt-20\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u8054\\u7CFB\\u65B9\\u5F0F\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-list\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"contact-item dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"contact-icon\",\n children: \"\\uD83D\\uDCDE\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"contact-label\",\n children: \"\\u5BA2\\u670D\\u7535\\u8BDD\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"contact-value\",\n children: \"400-XXX-XXXX\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-item dashed-card\",\n onClick: function onClick() {\n return Taro.setClipboardData({\n data: 'smart_engraving'\n });\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"contact-icon\",\n children: \"\\uD83D\\uDCAC\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"contact-label\",\n children: \"\\u5BA2\\u670D\\u5FAE\\u4FE1\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"contact-value\",\n children: \"smart_engraving\\uFF08\\u70B9\\u51FB\\u590D\\u5236\\uFF09\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-item dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"contact-icon\",\n children: \"\\uD83D\\uDCE7\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"contact-label\",\n children: \"\\u5546\\u52A1\\u90AE\\u7BB1\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"contact-value\",\n children: \"biz@smart-engraving.com\"\n })]\n })]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"mt-20\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u5E38\\u89C1\\u95EE\\u9898\"\n }), FAQ_ITEMS.map(function (item, idx) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"faq-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"faq-q\",\n children: [\"Q: \", item.q]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"faq-a\",\n children: [\"A: \", item.a]\n })]\n }, idx);\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"enterprise-service dashed-card mt-20 mb-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"enterprise-title\",\n children: \"\\uD83C\\uDFE2 \\u4F01\\u4E1A\\u4E13\\u5C5E\\u5BA2\\u6237\\u7ECF\\u7406\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"enterprise-desc\",\n 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\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline enterprise-btn\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u9884\\u7EA6\\u4F01\\u4E1A\\u54A8\\u8BE2\"\n })\n })]\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/service/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/service/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/service/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;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;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;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;;;;;;;;;;;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/service/index.tsx?da57","webpack://smart-engraving-miniapp/._src_pages_service_index.tsx"],"sourcesContent":["import { View, Text, Image } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport './index.scss';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar FAQ_ITEMS = [{\n q: '定制周期需要多久?',\n a: '通常下单后3-5个工作日内发货,批量订单(50件以上)可能需要7-10个工作日。'\n}, {\n q: '可以修改设计稿吗?',\n a: '生产前可随时在设计工作台修改。确认下单后进入排队生产阶段,不可再修改。'\n}, {\n q: '支持退款/售后吗?',\n a: '非质量问题定制商品不支持7天无理由退款。如收到商品有破损或雕刻缺陷,请在签收48小时内联系客服处理。'\n}, {\n q: '可以开发票吗?',\n a: '支持开具增值税普通发票。请在下单时填写发票信息,或联系客服补开。'\n}];\nexport default function ServicePage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n style: {\n minHeight: '100vh'\n },\n children: /*#__PURE__*/_jsxs(View, {\n className: \"service-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8054\\u7CFB\\u5BA2\\u670D\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"service-hero dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Image, {\n className: \"service-hero-icon\",\n src: \"/icon/\\u7535\\u8BDD.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"service-title\",\n children: \"\\u667A\\u7ED8\\u5FAE\\u523B\\u5BA2\\u670D\\u4E2D\\u5FC3\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"service-desc\",\n children: \"\\u5DE5\\u4F5C\\u65E5 09:00 - 18:00 \\u5728\\u7EBF\\u4E3A\\u60A8\\u670D\\u52A1\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient service-btn\",\n onTap: function onTap() {\n return Taro.showToast({\n title: '跳转客服会话',\n icon: 'none'\n });\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53D1\\u8D77\\u54A8\\u8BE2\"\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"mt-20\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u8054\\u7CFB\\u65B9\\u5F0F\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-list\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"contact-item dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Image, {\n className: \"contact-icon-img\",\n src: \"/icon/\\u7535\\u8BDD.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"contact-label\",\n children: \"\\u5BA2\\u670D\\u7535\\u8BDD\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"contact-value\",\n children: \"400-XXX-XXXX\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-item dashed-card\",\n onTap: function onTap() {\n return Taro.setClipboardData({\n data: 'smart_engraving'\n });\n },\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Image, {\n className: \"contact-icon-img\",\n src: \"/icon/\\u8BCD\\u4E91\\u751F\\u6210.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"contact-label\",\n children: \"\\u5BA2\\u670D\\u5FAE\\u4FE1\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"contact-value\",\n children: \"smart_engraving\\uFF08\\u70B9\\u51FB\\u590D\\u5236\\uFF09\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-item dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Image, {\n className: \"contact-icon-img\",\n src: \"/icon/\\u4F7F\\u7528\\u5E2E\\u52A9.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"contact-info\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"contact-label\",\n children: \"\\u5546\\u52A1\\u90AE\\u7BB1\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"contact-value\",\n children: \"biz@smart-engraving.com\"\n })]\n })]\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"mt-20\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u5E38\\u89C1\\u95EE\\u9898\"\n }), FAQ_ITEMS.map(function (item, idx) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"faq-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"faq-q\",\n children: [\"Q: \", item.q]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"faq-a\",\n children: [\"A: \", item.a]\n })]\n }, idx);\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"enterprise-service dashed-card mt-20 mb-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-center\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"enterprise-icon\",\n src: \"/icon/\\u4F01\\u4E1A\\u6279\\u91CF\\u5B9A\\u5236.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"enterprise-title\",\n children: \"\\u4F01\\u4E1A\\u4E13\\u5C5E\\u5BA2\\u6237\\u7ECF\\u7406\"\n })]\n }), /*#__PURE__*/_jsx(Text, {\n className: \"enterprise-desc\",\n 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\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline enterprise-btn\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u9884\\u7EA6\\u4F01\\u4E1A\\u54A8\\u8BE2\"\n })\n })]\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/service/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/service/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/service/index.wxss b/dist/pages/service/index.wxss index 4ca54b2..4229b16 100644 --- a/dist/pages/service/index.wxss +++ b/dist/pages/service/index.wxss @@ -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; diff --git a/dist/pages/settings/index.js b/dist/pages/settings/index.js index dd7ff7d..8529e54 100644 --- a/dist/pages/settings/index.js +++ b/dist/pages/settings/index.js @@ -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" }) diff --git a/dist/pages/settings/index.js.map b/dist/pages/settings/index.js.map index 74fa3a2..ee7b135 100644 --- a/dist/pages/settings/index.js.map +++ b/dist/pages/settings/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/settings/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;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;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;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;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;;;;;;;;;;;;ACnPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/settings/index.tsx?652f","webpack://smart-engraving-miniapp/._src_pages_settings_index.tsx"],"sourcesContent":["import _objectSpread from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/objectSpread2.js\";\nimport _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image, Input, Button } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { getUserInfo, setUserInfo, clearUserInfo } from '../../utils/store';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function SettingsPage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState({}),\n _useState2 = _slicedToArray(_useState, 2),\n user = _useState2[0],\n setUser = _useState2[1];\n var _useState3 = useState(''),\n _useState4 = _slicedToArray(_useState3, 2),\n editName = _useState4[0],\n setEditName = _useState4[1];\n var _useState5 = useState(''),\n _useState6 = _slicedToArray(_useState5, 2),\n editAvatar = _useState6[0],\n setEditAvatar = _useState6[1];\n var _useState7 = useState(false),\n _useState8 = _slicedToArray(_useState7, 2),\n showEdit = _useState8[0],\n setShowEdit = _useState8[1];\n var loadUser = function loadUser() {\n var u = getUserInfo() || {};\n setUser(u);\n setEditName(u.nickName || '');\n setEditAvatar(u.avatarUrl || '');\n };\n useEffect(function () {\n loadUser();\n }, []);\n var handleSaveInfo = function handleSaveInfo() {\n setUserInfo(_objectSpread(_objectSpread({}, user), {}, {\n nickName: editName,\n avatarUrl: editAvatar\n }));\n Taro.showToast({\n title: '修改成功',\n icon: 'success'\n });\n setShowEdit(false);\n loadUser();\n };\n var handleLogout = function handleLogout() {\n Taro.showModal({\n title: '确认退出',\n content: '退出后将清空当前登录状态,确定吗?',\n success: function success(res) {\n if (res.confirm) {\n clearUserInfo();\n Taro.switchTab({\n url: '/pages/index/index'\n });\n }\n }\n });\n };\n var onChooseAvatar = function onChooseAvatar(e) {\n setEditAvatar(e.detail.avatarUrl || '');\n };\n var MENU = [{\n label: '个人信息',\n icon: '👤',\n action: function action() {\n return setShowEdit(true);\n }\n }, {\n label: '账号管理',\n icon: '🆔',\n action: function action() {\n return Taro.navigateTo({\n url: '/pages/userDatabase/index'\n });\n }\n }, {\n label: '定制协议',\n icon: '📋',\n action: function action() {\n return Taro.navigateTo({\n url: '/pages/agreement/index'\n });\n }\n }, {\n label: '关于我们',\n icon: 'ℹ️',\n action: function action() {\n return Taro.showToast({\n title: '智绘微刻 v1.0',\n icon: 'none'\n });\n }\n }];\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"settings-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n style: {\n width: '100%'\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onClick: function onClick() {\n return Taro.navigateBack();\n },\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BBE\\u7F6E\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"settings-user dashed-card mt-20\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n onClick: function onClick() {\n return setShowEdit(true);\n },\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"flex-center\",\n children: [user.avatarUrl ? /*#__PURE__*/_jsx(Image, {\n className: \"settings-avatar\",\n src: user.avatarUrl,\n mode: \"aspectFill\"\n }) : /*#__PURE__*/_jsx(View, {\n className: \"settings-avatar-placeholder\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\uD83D\\uDC64\"\n })\n }), /*#__PURE__*/_jsxs(View, {\n style: {\n marginLeft: '20px'\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"settings-name\",\n children: user.nickName || '未登录'\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"settings-id\",\n children: [\"ID: \", user.openid ? user.openid.slice(-8) : '---']\n })]\n })]\n }), /*#__PURE__*/_jsx(Text, {\n className: \"arrow\",\n children: \"\\u203A\"\n })]\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"settings-list dashed-card mt-20\",\n children: MENU.map(function (item, idx) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"settings-item \".concat(idx < MENU.length - 1 ? 'bordered' : ''),\n onClick: item.action,\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"settings-item-icon\",\n children: item.icon\n }), /*#__PURE__*/_jsx(Text, {\n className: \"settings-item-label\",\n children: item.label\n }), /*#__PURE__*/_jsx(Text, {\n className: \"arrow\",\n children: \"\\u203A\"\n })]\n }, idx);\n })\n }), (user === null || user === void 0 ? void 0 : user.openid) && /*#__PURE__*/_jsx(View, {\n className: \"mt-20\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"btn-outline logout-btn\",\n onClick: handleLogout,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u9000\\u51FA\\u767B\\u5F55\"\n })\n })\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n }), showEdit && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"modal-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"modal-title\",\n children: \"\\u4FEE\\u6539\\u4FE1\\u606F\"\n }), /*#__PURE__*/_jsx(Button, {\n className: \"avatar-btn\",\n openType: \"chooseAvatar\",\n onChooseAvatar: onChooseAvatar,\n children: editAvatar ? /*#__PURE__*/_jsx(Image, {\n className: \"avatar-img\",\n src: editAvatar,\n mode: \"aspectFill\"\n }) : /*#__PURE__*/_jsx(Text, {\n className: \"avatar-placeholder\",\n children: \"\\u70B9\\u51FB\\u9009\\u62E9\\u5934\\u50CF\"\n })\n }), /*#__PURE__*/_jsx(Input, {\n className: \"nickname-input\",\n placeholder: \"\\u8BF7\\u8F93\\u5165\\u6635\\u79F0\",\n value: editName,\n onInput: function onInput(e) {\n return setEditName(e.detail.value);\n }\n }), /*#__PURE__*/_jsxs(View, {\n className: \"form-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onClick: function onClick() {\n return setShowEdit(false);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53D6\\u6D88\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: handleSaveInfo,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u4FDD\\u5B58\"\n })\n })]\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/settings/index!./index.tsx\"\nvar config = {\"navigationBarTitleText\":\"设置\"};\n\n\nvar inst = Page(createPageConfig(component, 'pages/settings/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/settings/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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/settings/index.tsx?652f","webpack://smart-engraving-miniapp/._src_pages_settings_index.tsx"],"sourcesContent":["import _objectSpread from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/objectSpread2.js\";\nimport _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image, Input, Button } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { getUserInfo, setUserInfo, clearUserInfo } from '../../utils/store';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar MENU = [{\n label: '个人信息',\n icon: '/icon/个人.png',\n action: function action(s) {\n return s.setShowEdit(true);\n }\n}, {\n label: '账号管理',\n icon: '/icon/账号管理.png',\n action: function action() {\n return Taro.navigateTo({\n url: '/pages/userDatabase/index'\n });\n }\n}, {\n label: '定制协议',\n icon: '/icon/定制协议.png',\n action: function action() {\n return Taro.navigateTo({\n url: '/pages/agreement/index'\n });\n }\n}, {\n label: '关于我们',\n icon: '/icon/关于我们.png',\n action: function action() {\n return Taro.showToast({\n title: '智绘微刻 v1.0',\n icon: 'none'\n });\n }\n}];\nexport default function SettingsPage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState({}),\n _useState2 = _slicedToArray(_useState, 2),\n user = _useState2[0],\n setUser = _useState2[1];\n var _useState3 = useState(''),\n _useState4 = _slicedToArray(_useState3, 2),\n editName = _useState4[0],\n setEditName = _useState4[1];\n var _useState5 = useState(''),\n _useState6 = _slicedToArray(_useState5, 2),\n editAvatar = _useState6[0],\n setEditAvatar = _useState6[1];\n var _useState7 = useState(false),\n _useState8 = _slicedToArray(_useState7, 2),\n showEdit = _useState8[0],\n setShowEdit = _useState8[1];\n var loadUser = function loadUser() {\n var u = getUserInfo() || {};\n setUser(u);\n setEditName(u.nickName || '');\n setEditAvatar(u.avatarUrl || '');\n };\n useEffect(function () {\n loadUser();\n }, []);\n var handleSaveInfo = function handleSaveInfo() {\n setUserInfo(_objectSpread(_objectSpread({}, user), {}, {\n nickName: editName,\n avatarUrl: editAvatar\n }));\n Taro.showToast({\n title: '修改成功',\n icon: 'success'\n });\n setShowEdit(false);\n loadUser();\n };\n var handleLogout = function handleLogout() {\n Taro.showModal({\n title: '确认退出',\n content: '退出后将清空当前登录状态,确定吗?',\n success: function success(res) {\n if (res.confirm) {\n clearUserInfo();\n Taro.switchTab({\n url: '/pages/index/index'\n });\n }\n }\n });\n };\n var onChooseAvatar = function onChooseAvatar(e) {\n setEditAvatar(e.detail.avatarUrl || '');\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n style: {\n minHeight: '100vh'\n },\n children: /*#__PURE__*/_jsxs(View, {\n className: \"settings-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n style: {\n width: '100%'\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onTap: function onTap() {\n return Taro.navigateBack();\n },\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u8BBE\\u7F6E\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"settings-user dashed-card mt-20\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"flex-between\",\n onTap: function onTap() {\n return setShowEdit(true);\n },\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"flex-center\",\n children: [user.avatarUrl ? /*#__PURE__*/_jsx(Image, {\n className: \"settings-avatar\",\n src: user.avatarUrl,\n mode: \"aspectFill\"\n }) : /*#__PURE__*/_jsx(View, {\n className: \"settings-avatar-placeholder\",\n children: /*#__PURE__*/_jsx(Image, {\n className: \"settings-avatar-icon\",\n src: \"/icon/\\u4E2A\\u4EBA.png\",\n mode: \"aspectFit\"\n })\n }), /*#__PURE__*/_jsxs(View, {\n style: {\n marginLeft: '20px'\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"settings-name\",\n children: user.nickName || '未登录'\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"settings-id\",\n children: [\"ID: \", user.openid ? user.openid.slice(-8) : '---']\n })]\n })]\n }), /*#__PURE__*/_jsx(Text, {\n className: \"arrow\",\n children: \"\\u203A\"\n })]\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"settings-list dashed-card mt-20\",\n children: MENU.map(function (item, idx) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"settings-item \".concat(idx < MENU.length - 1 ? 'bordered' : ''),\n onTap: function onTap() {\n return item.action({\n setShowEdit: setShowEdit\n });\n },\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"settings-item-icon-img\",\n src: item.icon,\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"settings-item-label\",\n children: item.label\n }), /*#__PURE__*/_jsx(Text, {\n className: \"arrow\",\n children: \"\\u203A\"\n })]\n }, idx);\n })\n }), (user === null || user === void 0 ? void 0 : user.openid) && /*#__PURE__*/_jsx(View, {\n className: \"mt-20\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"btn-outline logout-btn\",\n onTap: handleLogout,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u9000\\u51FA\\u767B\\u5F55\"\n })\n })\n }), /*#__PURE__*/_jsx(View, {\n style: {\n height: '40px'\n }\n }), showEdit && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"modal-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"modal-title\",\n children: \"\\u4FEE\\u6539\\u4FE1\\u606F\"\n }), /*#__PURE__*/_jsx(Button, {\n className: \"avatar-btn\",\n openType: \"chooseAvatar\",\n onChooseAvatar: onChooseAvatar,\n children: editAvatar ? /*#__PURE__*/_jsx(Image, {\n className: \"avatar-img\",\n src: editAvatar,\n mode: \"aspectFill\"\n }) : /*#__PURE__*/_jsx(Image, {\n className: \"avatar-placeholder-img\",\n src: \"/icon/\\u4E2A\\u4EBA.png\",\n mode: \"aspectFit\"\n })\n }), /*#__PURE__*/_jsx(Input, {\n className: \"nickname-input\",\n placeholder: \"\\u8BF7\\u8F93\\u5165\\u6635\\u79F0\",\n value: editName,\n onInput: function onInput(e) {\n return setEditName(e.detail.value);\n }\n }), /*#__PURE__*/_jsxs(View, {\n className: \"form-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onTap: function onTap() {\n return setShowEdit(false);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53D6\\u6D88\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: handleSaveInfo,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u4FDD\\u5B58\"\n })\n })]\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/settings/index!./index.tsx\"\nvar config = {\"navigationBarTitleText\":\"设置\"};\n\n\nvar inst = Page(createPageConfig(component, 'pages/settings/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/settings/index.wxss b/dist/pages/settings/index.wxss index 356af4b..67fbeba 100644 --- a/dist/pages/settings/index.wxss +++ b/dist/pages/settings/index.wxss @@ -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 { diff --git a/dist/pages/userDatabase/index.js b/dist/pages/userDatabase/index.js index c1e1f46..52fe256 100644 --- a/dist/pages/userDatabase/index.js +++ b/dist/pages/userDatabase/index.js @@ -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" }) diff --git a/dist/pages/userDatabase/index.js.map b/dist/pages/userDatabase/index.js.map index fc1ecfa..dfb6728 100644 --- a/dist/pages/userDatabase/index.js.map +++ b/dist/pages/userDatabase/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/userDatabase/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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/userDatabase/index.tsx?9115","webpack://smart-engraving-miniapp/._src_pages_userDatabase_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Input } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { listAllUsers, switchUser, deleteUser, createUser, getUserInfo, verifyAdminPassword } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function UserDatabasePage() {\n var _getUserInfo;\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isUnlocked = _useState2[0],\n setIsUnlocked = _useState2[1];\n var _useState3 = useState(''),\n _useState4 = _slicedToArray(_useState3, 2),\n password = _useState4[0],\n setPassword = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n pwdError = _useState6[0],\n setPwdError = _useState6[1];\n var _useState7 = useState([]),\n _useState8 = _slicedToArray(_useState7, 2),\n users = _useState8[0],\n setUsers = _useState8[1];\n var _useState9 = useState(false),\n _useState0 = _slicedToArray(_useState9, 2),\n showAdd = _useState0[0],\n setShowAdd = _useState0[1];\n var _useState1 = useState(''),\n _useState10 = _slicedToArray(_useState1, 2),\n newNick = _useState10[0],\n setNewNick = _useState10[1];\n var refresh = function refresh() {\n return setUsers(listAllUsers());\n };\n useEffect(function () {\n refresh();\n }, []);\n var handleUnlock = function handleUnlock() {\n if (verifyAdminPassword(password)) {\n setIsUnlocked(true);\n setPwdError(false);\n refresh();\n } else {\n setPwdError(true);\n }\n };\n var handleSwitch = function handleSwitch(openid) {\n if (switchUser(openid)) {\n Taro.showToast({\n title: '切换成功',\n icon: 'success'\n });\n refresh();\n } else {\n Taro.showToast({\n title: '切换失败',\n icon: 'none'\n });\n }\n };\n var handleDelete = function handleDelete(openid) {\n Taro.showModal({\n title: '确认删除',\n content: '删除后将清空该用户所有数据,无法恢复',\n confirmColor: '#e64340',\n success: function success(res) {\n if (res.confirm) {\n deleteUser(openid);\n refresh();\n Taro.showToast({\n title: '已删除',\n icon: 'success'\n });\n }\n }\n });\n };\n var handleCreate = function handleCreate() {\n if (!newNick.trim()) {\n Taro.showToast({\n title: '请输入昵称',\n icon: 'none'\n });\n return;\n }\n createUser(newNick.trim());\n setShowAdd(false);\n setNewNick('');\n refresh();\n Taro.showToast({\n title: '创建成功',\n icon: 'success'\n });\n };\n var activeOpenid = ((_getUserInfo = getUserInfo()) === null || _getUserInfo === void 0 ? void 0 : _getUserInfo.openid) || '';\n if (!isUnlocked) {\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"udb-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"udb-lock-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-lock-icon\",\n children: \"\\uD83D\\uDD10\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-lock-title\",\n children: \"\\u7BA1\\u7406\\u5458\\u9A8C\\u8BC1\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-lock-desc\",\n children: \"\\u8BF7\\u8F93\\u5165\\u5BC6\\u7801\\u4EE5\\u8BBF\\u95EE\\u7528\\u6237\\u6570\\u636E\\u5E93\"\n }), /*#__PURE__*/_jsx(Input, {\n className: \"udb-password-input\",\n type: \"text\",\n password: true,\n placeholder: \"\\u8F93\\u5165\\u5BC6\\u7801\",\n value: password,\n onInput: function onInput(e) {\n return setPassword(e.detail.value);\n }\n }), pwdError && /*#__PURE__*/_jsx(Text, {\n className: \"udb-error\",\n children: \"\\u5BC6\\u7801\\u9519\\u8BEF\\uFF0C\\u8BF7\\u91CD\\u8BD5\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient udb-btn\",\n onClick: handleUnlock,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u8FDB\\u5165\\u6570\\u636E\\u5E93\"\n })\n })]\n })]\n })\n });\n }\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"udb-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u672C\\u5730\\u7528\\u6237\\u6570\\u636E\\u5E93\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"udb-toolbar\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient udb-add-btn\",\n onClick: function onClick() {\n return setShowAdd(true);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"+ \\u65B0\\u5EFA\\u8D26\\u53F7\"\n })\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"udb-table\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"udb-row udb-header\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-nick\",\n children: \"\\u6635\\u79F0\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-id\",\n children: \"ID\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-stats\",\n children: \"\\u8BBE\\u8BA1/\\u8BA2\\u5355\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-action\",\n children: \"\\u64CD\\u4F5C\"\n })]\n }), users.map(function (u) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"udb-row \".concat(u.openid === activeOpenid ? 'active' : ''),\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-nick\",\n children: u.nickName\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-id\",\n children: u.openid\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"udb-col col-stats\",\n children: [u.designCount, \" / \", u.orderCount]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"udb-col col-action\",\n children: [u.openid !== activeOpenid && /*#__PURE__*/_jsx(View, {\n className: \"udb-link\",\n onClick: function onClick() {\n return handleSwitch(u.openid);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u5207\\u6362\"\n })\n }), u.openid === activeOpenid && /*#__PURE__*/_jsx(Text, {\n className: \"udb-current\",\n children: \"\\u5F53\\u524D\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"udb-link udb-danger\",\n onClick: function onClick() {\n return handleDelete(u.openid);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u5220\\u9664\"\n })\n })]\n })]\n }, u.openid);\n }), users.length === 0 && /*#__PURE__*/_jsx(View, {\n className: \"udb-empty\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u6682\\u65E0\\u7528\\u6237\\u6570\\u636E\"\n })\n })]\n }), showAdd && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"udb-add-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-add-title\",\n children: \"\\u65B0\\u5EFA\\u672C\\u5730\\u8D26\\u53F7\"\n }), /*#__PURE__*/_jsx(Input, {\n className: \"udb-add-input\",\n type: \"text\",\n placeholder: \"\\u8BF7\\u8F93\\u5165\\u6635\\u79F0\",\n value: newNick,\n onInput: function onInput(e) {\n return setNewNick(e.detail.value);\n }\n }), /*#__PURE__*/_jsxs(View, {\n className: \"udb-add-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onClick: function onClick() {\n return setShowAdd(false);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53D6\\u6D88\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: handleCreate,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u521B\\u5EFA\"\n })\n })]\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/userDatabase/index!./index.tsx\"\nvar config = {\"navigationBarTitleText\":\"用户数据库\",\"backgroundColor\":\"#ffffff\"};\n\n\nvar inst = Page(createPageConfig(component, 'pages/userDatabase/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/userDatabase/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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/userDatabase/index.tsx?9115","webpack://smart-engraving-miniapp/._src_pages_userDatabase_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Input } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { listAllUsers, switchUser, deleteUser, createUser, getUserInfo, verifyAdminPassword } from '../../utils/store';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function UserDatabasePage() {\n var _getUserInfo;\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isUnlocked = _useState2[0],\n setIsUnlocked = _useState2[1];\n var _useState3 = useState(''),\n _useState4 = _slicedToArray(_useState3, 2),\n password = _useState4[0],\n setPassword = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n pwdError = _useState6[0],\n setPwdError = _useState6[1];\n var _useState7 = useState([]),\n _useState8 = _slicedToArray(_useState7, 2),\n users = _useState8[0],\n setUsers = _useState8[1];\n var _useState9 = useState(false),\n _useState0 = _slicedToArray(_useState9, 2),\n showAdd = _useState0[0],\n setShowAdd = _useState0[1];\n var _useState1 = useState(''),\n _useState10 = _slicedToArray(_useState1, 2),\n newNick = _useState10[0],\n setNewNick = _useState10[1];\n var refresh = function refresh() {\n return setUsers(listAllUsers());\n };\n useEffect(function () {\n refresh();\n }, []);\n var handleUnlock = function handleUnlock() {\n if (verifyAdminPassword(password)) {\n setIsUnlocked(true);\n setPwdError(false);\n refresh();\n } else {\n setPwdError(true);\n }\n };\n var handleSwitch = function handleSwitch(openid) {\n if (switchUser(openid)) {\n Taro.showToast({\n title: '切换成功',\n icon: 'success'\n });\n refresh();\n } else {\n Taro.showToast({\n title: '切换失败',\n icon: 'none'\n });\n }\n };\n var handleDelete = function handleDelete(openid) {\n Taro.showModal({\n title: '确认删除',\n content: '删除后将清空该用户所有数据,无法恢复',\n confirmColor: '#e64340',\n success: function success(res) {\n if (res.confirm) {\n deleteUser(openid);\n refresh();\n Taro.showToast({\n title: '已删除',\n icon: 'success'\n });\n }\n }\n });\n };\n var handleCreate = function handleCreate() {\n if (!newNick.trim()) {\n Taro.showToast({\n title: '请输入昵称',\n icon: 'none'\n });\n return;\n }\n createUser(newNick.trim());\n setShowAdd(false);\n setNewNick('');\n refresh();\n Taro.showToast({\n title: '创建成功',\n icon: 'success'\n });\n };\n var activeOpenid = ((_getUserInfo = getUserInfo()) === null || _getUserInfo === void 0 ? void 0 : _getUserInfo.openid) || '';\n if (!isUnlocked) {\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"udb-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"udb-lock-card dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-lock-icon\",\n children: \"\\uD83D\\uDD10\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-lock-title\",\n children: \"\\u7BA1\\u7406\\u5458\\u9A8C\\u8BC1\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-lock-desc\",\n children: \"\\u8BF7\\u8F93\\u5165\\u5BC6\\u7801\\u4EE5\\u8BBF\\u95EE\\u7528\\u6237\\u6570\\u636E\\u5E93\"\n }), /*#__PURE__*/_jsx(Input, {\n className: \"udb-password-input\",\n type: \"text\",\n password: true,\n placeholder: \"\\u8F93\\u5165\\u5BC6\\u7801\",\n value: password,\n onInput: function onInput(e) {\n return setPassword(e.detail.value);\n }\n }), pwdError && /*#__PURE__*/_jsx(Text, {\n className: \"udb-error\",\n children: \"\\u5BC6\\u7801\\u9519\\u8BEF\\uFF0C\\u8BF7\\u91CD\\u8BD5\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient udb-btn\",\n onTap: handleUnlock,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u8FDB\\u5165\\u6570\\u636E\\u5E93\"\n })\n })]\n })]\n })\n });\n }\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"udb-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header dashed-card mt-20\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"\\u672C\\u5730\\u7528\\u6237\\u6570\\u636E\\u5E93\"\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"udb-toolbar\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient udb-add-btn\",\n onTap: function onTap() {\n return setShowAdd(true);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"+ \\u65B0\\u5EFA\\u8D26\\u53F7\"\n })\n })\n }), /*#__PURE__*/_jsxs(View, {\n className: \"udb-table\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"udb-row udb-header\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-nick\",\n children: \"\\u6635\\u79F0\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-id\",\n children: \"ID\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-stats\",\n children: \"\\u8BBE\\u8BA1/\\u8BA2\\u5355\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-action\",\n children: \"\\u64CD\\u4F5C\"\n })]\n }), users.map(function (u) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"udb-row \".concat(u.openid === activeOpenid ? 'active' : ''),\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-nick\",\n children: u.nickName\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-col col-id\",\n children: u.openid\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"udb-col col-stats\",\n children: [u.designCount, \" / \", u.orderCount]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"udb-col col-action\",\n children: [u.openid !== activeOpenid && /*#__PURE__*/_jsx(View, {\n className: \"udb-link\",\n onTap: function onTap() {\n return handleSwitch(u.openid);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u5207\\u6362\"\n })\n }), u.openid === activeOpenid && /*#__PURE__*/_jsx(Text, {\n className: \"udb-current\",\n children: \"\\u5F53\\u524D\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"udb-link udb-danger\",\n onTap: function onTap() {\n return handleDelete(u.openid);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u5220\\u9664\"\n })\n })]\n })]\n }, u.openid);\n }), users.length === 0 && /*#__PURE__*/_jsx(View, {\n className: \"udb-empty\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u6682\\u65E0\\u7528\\u6237\\u6570\\u636E\"\n })\n })]\n }), showAdd && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"udb-add-card dashed-card\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"udb-add-title\",\n children: \"\\u65B0\\u5EFA\\u672C\\u5730\\u8D26\\u53F7\"\n }), /*#__PURE__*/_jsx(Input, {\n className: \"udb-add-input\",\n type: \"text\",\n placeholder: \"\\u8BF7\\u8F93\\u5165\\u6635\\u79F0\",\n value: newNick,\n onInput: function onInput(e) {\n return setNewNick(e.detail.value);\n }\n }), /*#__PURE__*/_jsxs(View, {\n className: \"udb-add-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onTap: function onTap() {\n return setShowAdd(false);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53D6\\u6D88\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: handleCreate,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u521B\\u5EFA\"\n })\n })]\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/userDatabase/index!./index.tsx\"\nvar config = {\"navigationBarTitleText\":\"用户数据库\",\"backgroundColor\":\"#ffffff\"};\n\n\nvar inst = Page(createPageConfig(component, 'pages/userDatabase/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/wordcloud/index.js b/dist/pages/wordcloud/index.js index beb1c7c..2876366 100644 --- a/dist/pages/wordcloud/index.js +++ b/dist/pages/wordcloud/index.js @@ -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, { diff --git a/dist/pages/wordcloud/index.js.map b/dist/pages/wordcloud/index.js.map index 03615b9..215fe9a 100644 --- a/dist/pages/wordcloud/index.js.map +++ b/dist/pages/wordcloud/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/wordcloud/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;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/wordcloud/index.tsx?9018","webpack://smart-engraving-miniapp/._src_pages_wordcloud_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image, Textarea } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState } from 'react';\nimport './index.scss';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function WordCloudPage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(1),\n _useState2 = _slicedToArray(_useState, 2),\n step = _useState2[0],\n setStep = _useState2[1];\n var _useState3 = useState(''),\n _useState4 = _slicedToArray(_useState3, 2),\n baseImage = _useState4[0],\n setBaseImage = _useState4[1];\n var _useState5 = useState(''),\n _useState6 = _slicedToArray(_useState5, 2),\n namesText = _useState6[0],\n setNamesText = _useState6[1];\n var _useState7 = useState(''),\n _useState8 = _slicedToArray(_useState7, 2),\n generatedImage = _useState8[0],\n setGeneratedImage = _useState8[1];\n var _useState9 = useState(false),\n _useState0 = _slicedToArray(_useState9, 2),\n isGenerating = _useState0[0],\n setIsGenerating = _useState0[1];\n var _useState1 = useState(0),\n _useState10 = _slicedToArray(_useState1, 2),\n progress = _useState10[0],\n setProgress = _useState10[1];\n var steps = [{\n num: 1,\n label: '上传底图'\n }, {\n num: 2,\n label: '输入名单'\n }, {\n num: 3,\n label: '生成预览'\n }];\n var chooseImage = function chooseImage() {\n Taro.chooseImage({\n count: 1,\n sizeType: ['compressed'],\n sourceType: ['album', 'camera'],\n success: function success(res) {\n setBaseImage(res.tempFilePaths[0]);\n setStep(2);\n }\n });\n };\n var handleGenerate = function handleGenerate() {\n if (!namesText.trim()) {\n Taro.showToast({\n title: '请先输入名字',\n icon: 'none'\n });\n return;\n }\n setStep(3);\n setIsGenerating(true);\n setProgress(0);\n var timer = setInterval(function () {\n setProgress(function (prev) {\n if (prev >= 100) {\n clearInterval(timer);\n setIsGenerating(false);\n setGeneratedImage(baseImage);\n return 100;\n }\n return prev + Math.random() * 15;\n });\n }, 1000);\n };\n var handleExportImage = function handleExportImage() {\n if (!generatedImage) return;\n Taro.saveImageToPhotosAlbum({\n filePath: generatedImage,\n success: function success() {\n return Taro.showToast({\n title: '已保存到相册',\n icon: 'success'\n });\n },\n fail: function fail() {\n return Taro.showToast({\n title: '保存失败',\n icon: 'none'\n });\n }\n });\n };\n var goBack = function goBack() {\n if (step > 1) setStep(step - 1);else Taro.navigateBack();\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"wordcloud-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header flex-between\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onClick: goBack,\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"AI\\u8BCD\\u4E91\\u751F\\u6210\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"step-indicator dashed-card\",\n children: steps.map(function (s, idx) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"step-item\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"step-circle \".concat(step >= s.num ? 'active' : ''),\n children: /*#__PURE__*/_jsx(Text, {\n className: \"step-num\",\n children: s.num\n })\n }), /*#__PURE__*/_jsx(Text, {\n className: \"step-label \".concat(step >= s.num ? 'active' : ''),\n children: s.label\n }), idx < steps.length - 1 && /*#__PURE__*/_jsx(View, {\n className: \"step-line \".concat(step > s.num ? 'active' : '')\n })]\n }, s.num);\n })\n }), step === 1 && /*#__PURE__*/_jsxs(View, {\n className: \"step-content\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"upload-area dashed-card\",\n onClick: chooseImage,\n children: baseImage ? /*#__PURE__*/_jsx(Image, {\n className: \"preview-image\",\n src: baseImage,\n mode: \"aspectFit\"\n }) : /*#__PURE__*/_jsxs(View, {\n className: \"upload-placeholder\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"upload-icon\",\n children: \"\\uD83D\\uDCF7\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"upload-title\",\n children: \"\\u70B9\\u51FB\\u4E0A\\u4F20\\u5E95\\u56FE\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"upload-desc\",\n children: \"\\u652F\\u6301\\u7167\\u7247\\u3001Logo\\u3001\\u56FE\\u6848\\u7B49\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"upload-tip\",\n children: \"\\u7CFB\\u7EDF\\u5C06\\u7528\\u540D\\u5B57\\u586B\\u5145\\u5230\\u6DF1\\u8272\\u533A\\u57DF\"\n })]\n })\n }), baseImage && /*#__PURE__*/_jsxs(View, {\n className: \"action-btns\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: function onClick() {\n return setStep(2);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u4E0B\\u4E00\\u6B65\\uFF1A\\u8F93\\u5165\\u540D\\u5355\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onClick: function onClick() {\n return setBaseImage('');\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u91CD\\u65B0\\u9009\\u62E9\"\n })\n })]\n })]\n }), step === 2 && /*#__PURE__*/_jsxs(View, {\n className: \"step-content\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"input-section dashed-card\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u8F93\\u5165\\u540D\\u5B57\\u540D\\u5355\"\n }), /*#__PURE__*/_jsx(Textarea, {\n className: \"names-input\",\n placeholder: \"\\u4F8B\\u5982\\uFF1A\\n\\u5F20\\u4E09\\n\\u674E\\u56DB\\n\\u738B\\u4E94\",\n value: namesText,\n onInput: function onInput(e) {\n return setNamesText(e.detail.value);\n },\n maxlength: 5000\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"input-stats\",\n children: [\"\\u5DF2\\u8F93\\u5165 \", namesText.split(/\\n|,|,/).filter(function (n) {\n return n.trim();\n }).length, \" \\u4E2A\\u540D\\u5B57\"]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"input-tips\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"tip-item\",\n children: \"\\u540D\\u5B57\\u4F1A\\u968F\\u673A\\u5206\\u5E03\\u5728\\u5E95\\u56FE\\u7684\\u6DF1\\u8272\\u533A\\u57DF\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"tip-item\",\n children: \"\\u5EFA\\u8BAE\\u8F93\\u516510-200\\u4E2A\\u540D\\u5B57\\u6548\\u679C\\u6700\\u4F73\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"action-btns\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: handleGenerate,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u5F00\\u59CB\\u751F\\u6210\\u8BCD\\u4E91\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onClick: function onClick() {\n return setStep(1);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u4E0A\\u4E00\\u6B65\"\n })\n })]\n })]\n }), step === 3 && /*#__PURE__*/_jsx(View, {\n className: \"step-content\",\n children: isGenerating ? /*#__PURE__*/_jsxs(View, {\n className: \"generating-panel\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"generating-icon\",\n children: \"\\u2728\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"generating-title\",\n children: \"\\u6B63\\u5728\\u751F\\u6210\\u8BCD\\u4E91...\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"generating-subtitle\",\n children: \"AI\\u6B63\\u5728\\u5C06\\u540D\\u5B57\\u878D\\u5165\\u56FE\\u6848\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"progress-bar\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"progress-fill\",\n style: {\n width: \"\".concat(Math.min(progress, 100), \"%\")\n }\n })\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"progress-text\",\n children: [Math.min(Math.round(progress), 100), \"%\"]\n })]\n }) : /*#__PURE__*/_jsxs(View, {\n className: \"result-panel\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"result-image-wrapper dashed-card\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"result-image\",\n src: generatedImage || '',\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"watermark-badge\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u667A\\u7ED8\\u5FAE\\u523B\\u9884\\u89C8\"\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"result-actions\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"action-btn\",\n onClick: handleExportImage,\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"action-icon\",\n children: \"\\uD83D\\uDCBE\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"action-label\",\n children: \"\\u4FDD\\u5B58\\u56FE\\u7247\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"action-btn\",\n onClick: handleGenerate,\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"action-icon\",\n children: \"\\uD83D\\uDD04\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"action-label\",\n children: \"\\u91CD\\u65B0\\u751F\\u6210\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"action-btn\",\n onClick: function onClick() {\n return setStep(2);\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"action-icon\",\n children: \"\\u270F\\uFE0F\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"action-label\",\n children: \"\\u4FEE\\u6539\\u540D\\u5355\"\n })]\n })]\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/wordcloud/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/wordcloud/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/wordcloud/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;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/wordcloud/index.tsx?9018","webpack://smart-engraving-miniapp/._src_pages_wordcloud_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image, Textarea } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState } from 'react';\nimport './index.scss';\nimport ThemeToggle from '../../components/ThemeToggle';\nimport { useThemeContext } from '../../context/ThemeContext';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function WordCloudPage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState(1),\n _useState2 = _slicedToArray(_useState, 2),\n step = _useState2[0],\n setStep = _useState2[1];\n var _useState3 = useState(''),\n _useState4 = _slicedToArray(_useState3, 2),\n baseImage = _useState4[0],\n setBaseImage = _useState4[1];\n var _useState5 = useState(''),\n _useState6 = _slicedToArray(_useState5, 2),\n namesText = _useState6[0],\n setNamesText = _useState6[1];\n var _useState7 = useState(''),\n _useState8 = _slicedToArray(_useState7, 2),\n generatedImage = _useState8[0],\n setGeneratedImage = _useState8[1];\n var _useState9 = useState(false),\n _useState0 = _slicedToArray(_useState9, 2),\n isGenerating = _useState0[0],\n setIsGenerating = _useState0[1];\n var _useState1 = useState(0),\n _useState10 = _slicedToArray(_useState1, 2),\n progress = _useState10[0],\n setProgress = _useState10[1];\n var steps = [{\n num: 1,\n label: '上传底图'\n }, {\n num: 2,\n label: '输入名单'\n }, {\n num: 3,\n label: '生成预览'\n }];\n var chooseImage = function chooseImage() {\n Taro.chooseImage({\n count: 1,\n sizeType: ['compressed'],\n sourceType: ['album', 'camera'],\n success: function success(res) {\n setBaseImage(res.tempFilePaths[0]);\n setStep(2);\n }\n });\n };\n var handleGenerate = function handleGenerate() {\n if (!namesText.trim()) {\n Taro.showToast({\n title: '请先输入名字',\n icon: 'none'\n });\n return;\n }\n setStep(3);\n setIsGenerating(true);\n setProgress(0);\n var timer = setInterval(function () {\n setProgress(function (prev) {\n if (prev >= 100) {\n clearInterval(timer);\n setIsGenerating(false);\n setGeneratedImage(baseImage);\n return 100;\n }\n return prev + Math.random() * 15;\n });\n }, 1000);\n };\n var handleExportImage = function handleExportImage() {\n if (!generatedImage) return;\n Taro.saveImageToPhotosAlbum({\n filePath: generatedImage,\n success: function success() {\n return Taro.showToast({\n title: '已保存到相册',\n icon: 'success'\n });\n },\n fail: function fail() {\n return Taro.showToast({\n title: '保存失败',\n icon: 'none'\n });\n }\n });\n };\n var goBack = function goBack() {\n if (step > 1) setStep(step - 1);else Taro.navigateBack();\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"wordcloud-page\",\n children: [/*#__PURE__*/_jsx(ThemeToggle, {}), /*#__PURE__*/_jsxs(View, {\n className: \"page-header flex-between\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"back-btn\",\n onTap: goBack,\n children: \"\\u2190\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"page-title\",\n children: \"AI\\u8BCD\\u4E91\\u751F\\u6210\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"step-indicator dashed-card\",\n children: steps.map(function (s, idx) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"step-item\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"step-circle \".concat(step >= s.num ? 'active' : ''),\n children: /*#__PURE__*/_jsx(Text, {\n className: \"step-num\",\n children: s.num\n })\n }), /*#__PURE__*/_jsx(Text, {\n className: \"step-label \".concat(step >= s.num ? 'active' : ''),\n children: s.label\n }), idx < steps.length - 1 && /*#__PURE__*/_jsx(View, {\n className: \"step-line \".concat(step > s.num ? 'active' : '')\n })]\n }, s.num);\n })\n }), step === 1 && /*#__PURE__*/_jsxs(View, {\n className: \"step-content\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"upload-area dashed-card\",\n onTap: chooseImage,\n children: baseImage ? /*#__PURE__*/_jsx(Image, {\n className: \"preview-image\",\n src: baseImage,\n mode: \"aspectFit\"\n }) : /*#__PURE__*/_jsxs(View, {\n className: \"upload-placeholder\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"upload-icon\",\n children: \"\\uD83D\\uDCF7\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"upload-title\",\n children: \"\\u70B9\\u51FB\\u4E0A\\u4F20\\u5E95\\u56FE\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"upload-desc\",\n children: \"\\u652F\\u6301\\u7167\\u7247\\u3001Logo\\u3001\\u56FE\\u6848\\u7B49\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"upload-tip\",\n children: \"\\u7CFB\\u7EDF\\u5C06\\u7528\\u540D\\u5B57\\u586B\\u5145\\u5230\\u6DF1\\u8272\\u533A\\u57DF\"\n })]\n })\n }), baseImage && /*#__PURE__*/_jsxs(View, {\n className: \"action-btns\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: function onTap() {\n return setStep(2);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u4E0B\\u4E00\\u6B65\\uFF1A\\u8F93\\u5165\\u540D\\u5355\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onTap: function onTap() {\n return setBaseImage('');\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u91CD\\u65B0\\u9009\\u62E9\"\n })\n })]\n })]\n }), step === 2 && /*#__PURE__*/_jsxs(View, {\n className: \"step-content\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"input-section dashed-card\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"section-title\",\n children: \"\\u8F93\\u5165\\u540D\\u5B57\\u540D\\u5355\"\n }), /*#__PURE__*/_jsx(Textarea, {\n className: \"names-input\",\n placeholder: \"\\u4F8B\\u5982\\uFF1A\\n\\u5F20\\u4E09\\n\\u674E\\u56DB\\n\\u738B\\u4E94\",\n value: namesText,\n onInput: function onInput(e) {\n return setNamesText(e.detail.value);\n },\n maxlength: 5000\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"input-stats\",\n children: [\"\\u5DF2\\u8F93\\u5165 \", namesText.split(/\\n|,|,/).filter(function (n) {\n return n.trim();\n }).length, \" \\u4E2A\\u540D\\u5B57\"]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"input-tips\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"tip-item\",\n children: \"\\u540D\\u5B57\\u4F1A\\u968F\\u673A\\u5206\\u5E03\\u5728\\u5E95\\u56FE\\u7684\\u6DF1\\u8272\\u533A\\u57DF\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"tip-item\",\n children: \"\\u5EFA\\u8BAE\\u8F93\\u516510-200\\u4E2A\\u540D\\u5B57\\u6548\\u679C\\u6700\\u4F73\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"action-btns\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: handleGenerate,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u5F00\\u59CB\\u751F\\u6210\\u8BCD\\u4E91\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onTap: function onTap() {\n return setStep(1);\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u4E0A\\u4E00\\u6B65\"\n })\n })]\n })]\n }), step === 3 && /*#__PURE__*/_jsx(View, {\n className: \"step-content\",\n children: isGenerating ? /*#__PURE__*/_jsxs(View, {\n className: \"generating-panel\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"generating-icon\",\n children: \"\\u2728\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"generating-title\",\n children: \"\\u6B63\\u5728\\u751F\\u6210\\u8BCD\\u4E91...\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"generating-subtitle\",\n children: \"AI\\u6B63\\u5728\\u5C06\\u540D\\u5B57\\u878D\\u5165\\u56FE\\u6848\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"progress-bar\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"progress-fill\",\n style: {\n width: \"\".concat(Math.min(progress, 100), \"%\")\n }\n })\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"progress-text\",\n children: [Math.min(Math.round(progress), 100), \"%\"]\n })]\n }) : /*#__PURE__*/_jsxs(View, {\n className: \"result-panel\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"result-image-wrapper dashed-card\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"result-image\",\n src: generatedImage || '',\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"watermark-badge\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u667A\\u7ED8\\u5FAE\\u523B\\u9884\\u89C8\"\n })\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"result-actions\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"action-btn\",\n onTap: handleExportImage,\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"action-icon\",\n children: \"\\uD83D\\uDCBE\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"action-label\",\n children: \"\\u4FDD\\u5B58\\u56FE\\u7247\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"action-btn\",\n onTap: handleGenerate,\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"action-icon\",\n children: \"\\uD83D\\uDD04\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"action-label\",\n children: \"\\u91CD\\u65B0\\u751F\\u6210\"\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"action-btn\",\n onTap: function onTap() {\n return setStep(2);\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"action-icon\",\n children: \"\\u270F\\uFE0F\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"action-label\",\n children: \"\\u4FEE\\u6539\\u540D\\u5355\"\n })]\n })]\n })]\n })\n })]\n })\n });\n}","import { createPageConfig } from '@tarojs/runtime'\nimport component from \"!!../../../node_modules/@tarojs/taro-loader/lib/entry-cache.js?name=pages/wordcloud/index!./index.tsx\"\nvar config = {};\n\n\nvar inst = Page(createPageConfig(component, 'pages/wordcloud/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/project.config.json b/dist/project.config.json index 95acf26..01eb42c 100644 --- a/dist/project.config.json +++ b/dist/project.config.json @@ -2,7 +2,7 @@ "miniprogramRoot": "./", "projectname": "smart-engraving-miniapp", "description": "智绘微刻 - 词云微雕定制小程序", - "appid": "wxb6a8e61694e2b808", + "appid": "wxad998564cf43a7d9", "setting": { "urlCheck": true, "es6": false, diff --git a/icon/三角尺.png b/icon/三角尺.png new file mode 100644 index 0000000000000000000000000000000000000000..abc5233434d23088938581d3c4debbf5148fc74b GIT binary patch literal 3662 zcmZ`+XIK;4)(#LP0X&4zn~X4_7aO7iN~oF8d*ILn6tSV8fC>Tuq=*oP(0kEC6=@Gh}T(3}5P%2~yrM%$WH2jQDi;+0Wj4&yT6+eibWoug*%JBcSxwu%i zf6MN+>Wta$Uuk7e=NxvM$BuhHnNQ%^6=371nCMa~42yXADJo#h5Ieui8C7SL*sy22iFXEKc+SN!HgO;^y0=y#_-*I{R z&SBfyOee+|jx2K|L${A=8RO4|k&Fs?3nb{DfKLoi&}3m2iHoi-;|8Osum3@lg}nG4 zw1~`-VTK{;M-f7^XroqN2k4;IolE_?`L;w}{V6wF_)AYdmvXp0`mhM3$31bWCD?>| zql|!6RA|B0$zeK4cx%fb{!3OkY7$tSe*=HX?*CV!gpnEmEeny(KT#-nH^Dh82_c-k zcp6}$0(F?qE1sG`Oqn%P(2wZZ+Sr>pUi;{0c z^oPN=VkL#QO+dEZ$E)TrEz(1T4O?R%1EorCPRi13X|5j{uUW$ak8)nmrSemJx(K~P zV$Jxh-;z?%U@xry-3q?tbE3_)7KlE7eP-fe$mBoQOsYlA=&Z&fLV)*@-xbYd=Jz*h zy?-9npMHV+pb2c><#;&C$g`z^MKMdm6^6KF)3puC&JXn4n@E02)_3eVXY1BQN`qZ# zHt_r!N*{3or95BwnAE9zqq=+m-?T0|JCQZPn*>l10Pk>|1P!dtw+c zbY{eQ+}n}@qx6(ZZHamVe7*}EZ$%QC0xp=qE~KUD(J~;kgYM*ujnscGKsfDluiw`& z?a%w!HA;51fM)pS>DE&`A9`dC#iwUJ)#XHdy=-33^LpRp=biKcby+)VHC{lUbhwGdKiK)p>X8fFrPmvJV{PeLQltx-r%p%_U@U>_zM zUjveM91B79lP8P%Rb`)1x(Fnd8m;AB@FW2X&{IKDlUOpiNa4ByQPKK~cKn1pu?~G4 zQGU%+XGUrdOn{`H&>lLI4u)Ck!NA4dM->ttMcf#tG^;hlcT5OXInrJoU0A-`nY_a>`8_C-kdyc_(3qF-vGwS4FfIQ) z#EvPo8Kg?`rVAEG1j_|!e6z{cq5K40jdU1RmhdT5O6FHtQmLo^R#w_!u14;|`gT(HI?fJ@&T~2|KRp9hz8|Ui~ zthN?@8+#0OA;QIT7${%zOJ!-4o8MK-YMg?BT<^%D^kp%x+d)rZ=deG>c-;kg>}z>^ z=$|mdTe5-^i|2h@T9{2Z{ptkVRk+lziuKTzU>CMfi47dSbHyI2i87&H4Nvz;ss*bw zj+L%w7*IurshBSR6xOcjl?|AL%jOgVA-EIdy-lR@T4i{<4Z+zy2G)a!pGSv+S=I3LTT*b^U-Z<^q!k5!L;@B@5notVj0O$lr3ck6bc>GdX81 zs@C))r?=0^eV4~9qd(I|85SP{K49yI_Ct&%4)uDud4w*;!K-`S9D`NUUDc8eCpE|7 zGdacd?#q7(2AQofOgWyAZ)SAH-9W>cCWpD8(9a8Sg?QGLcbS08(2n%i^V3o(m3cYt z+T$j#YXI%gggO1kH!b3ozdaVtq*%gl{kw2G!=*9atJa*Sr;dnu8cJ)XIubut;U9&k zRoIcO%YdD)i8%j#)kJdJl9k+BnRfHZY9)fA9SyfJe#@1mHDpX z&31)8iTGJD=?A^bmsPB2M~%9utxp}Os1>fCW?kh=OhM&{P% z(o>#6{_MFU6b<>dm3>~x@yg?WZHQj10o7g-pswPwn4>^zMMTxIGPc)ZLyNws<92YszICYL#5}phaA9V2I}sO(oR6RS zVhz`Cxz+Wav)mKwU&e*%2TRS8-*9YRbLzDx?OcGK%)QQi z!$wp7=riK84d4%_J}VWsDcHi==2h0x{JtcD^RM@WWvM3(Hx-%G}0;qk_Tp{xA);Mppd=W#1; z2EV)d*Sn>|`t0-h7PThU&A?7`$D122o}Pz9RF2n6&3q1V4cpL&@eQ%*SC!nKoH6^b z&9;DZ){@H53~w&DH_;G(vv&w22CR?RyP(a}&tzM3{^)rVzPv4m zSv`Iw`G8Xy(B4xL8eekGC(;J9YSU$t;6_)%aD|+f7LdrNmh`N&WMe@oP23Z?tHZ^ixliA+m8G>-JnDw;uO{Bx2{HW0ryP)_zjcm%cQWFWROJT^3@V=9xV77 zns6U&qJhEl8eI|cX}QjhXAF`E;&K2{JU95@w3#mTg;=SO)Ym0VTOj3wbTWmBFB zl>CFiS`XS@296>yK-AXGTLatI#391K^Zn1 zxEmsXhjdAiodX$9QAp0hg~BbV6-#5*=rS3ASe9viQ0@d97N1$NR2~t4BYgzX zbE&YbN{O8lV=d%+@X3EGe2JL;QqFYR3_(-HbCna^vLnxdD6`b2tlTg(H0-P@Y@kaO zJmI)>`7ScB>G;=Ea0q-F@hUA}#FA*F0lRBb=<8f4)c$^UEyfr@g$I7aK@QZ9Ut?9G Tvk%@PJ1EG|+~BF6JN5qnyR>@- literal 0 HcmV?d00001 diff --git a/icon/个人.png b/icon/个人.png new file mode 100644 index 0000000000000000000000000000000000000000..d3dd97877a3a46ee144cb6e9739ecde6d7ff768b GIT binary patch literal 11791 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 L6{#u-li>dYeTo4g literal 0 HcmV?d00001 diff --git a/icon/书本.png b/icon/书本.png new file mode 100644 index 0000000000000000000000000000000000000000..4773835c42f0c8930bb6ab15b6a97335c75b61eb GIT binary patch literal 4420 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 literal 0 HcmV?d00001 diff --git a/icon/书本_大.png b/icon/书本_大.png new file mode 100644 index 0000000000000000000000000000000000000000..311cbdb4fc5808521754f5f7c4935296c2f909fa GIT binary patch literal 2813 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 literal 0 HcmV?d00001 diff --git a/icon/企业批量定制.png b/icon/企业批量定制.png new file mode 100644 index 0000000000000000000000000000000000000000..1bbe14a6c2276724eaa65c295dee8f2f66b9f21e GIT binary patch literal 4833 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 literal 0 HcmV?d00001 diff --git a/icon/使用帮助.png b/icon/使用帮助.png new file mode 100644 index 0000000000000000000000000000000000000000..61a57451a5847a58e9006f9be2e96e77d422b60e GIT binary patch literal 7826 zcmXwecQ{&$cRx#ymlbDp^;@`Z*HISGUW4-b!AMOj`O_uu#L2PDK@s|>1h z@bEx*D)LC3xA%5UiPIUsrM#=zi0*kiVdZ&0#&SaFf#-Ydf;ZK!43s`n4%qK8?>H+X zN@19ILpMWi2%N^)vNI-v5^LGx945sFb4V)pQI|oQuj& z-bN$GvXj%7jpb$?`ltGL!numUtKP}myl&R?bFuXnmdVR! z>5apG#7Gk2rzit1%rRCKdf@t-nZ>SEk*b=QhIv&Z4V#l&t5s7XD*>^-+rAq#+W7Qxw8|3^5QvnAQ19+n3j zcjm3$`AvLJ0i^kwYr|F!2Qh18GC56+9|g@>E>||Rp@89vFlS-i^<~ft05OHr23Hu4 zPgw1kPC_Uyo?Wamr33`e15$M>&bRh)7aQSfbw~|unqjzj2ehqDN+}%w$&SbWI0v|xJr$vlL((9-M^(#XMEYi|JX=1}g@)74djEi>cf+D|WIQV+uoJGDqtdAScRtlg^E<2*9h?|xRU zJ-0D=1ggAx3pcQI64YIk0pld3aou?A{7=HFZ#upNxTe@&w4~J6!bTqf zh#CKsx5JRQTkPaTQHG5Fx)IuT1fjweWXE5Wr#B*@!T_**99J1RVWYV4?;a<6V4~26 z$VTu+vlPYTTryl3P)05};8f3s6KYo}xI9P&_pEAn0aX@`cD$`LzRt~a+-PZ2<#2Oy zAA7~&y72R90=ES(7)XwUIAo00P8OvS*;fTdghM~H=-3bUc2H?hTBP zt15dJ9uD0xjGsfKjqAkBe5(5d>!aAvlcvQF!QoK>hXzy({)yx?Smr^5!jXdt@NoVC zl}hs}#9um5>*hcEH_c-qa@=H_m^+vdc zSDJSPJ8DbNaa_|L_-cO6N-uwHZd7%lrMh|d|5vLId{}gBgDKbKUupw|*>K(cF|$)X zT#cjdPM)IetoW~;&y%_zO>yI}3gIrAi2+WeLw^8$&v%AUZZyt8hVf|9;);wd#aB7c zd%M`F;$(8z^7;Bm`fQbZoN*FklP4?CDQHA;w9hr%u4$zI+Xu$F;zKt*NzorqtTv5o zudMqHQyt#OoT12=+u!y489IB1x)4B~m5GkorSFm|W2@Pb(+SIl>BbifN#|Cls(W!Z zKUjqZqGT-?@dvwndoP{a*Y->#&m4z$-+DAUTuV85FSw{XU4^6w2&B=r!R;XCgPD7F zgRP%j#DBZ-3j@aBC#5-Rqz{V((Hz)q`|_*GONohY!~9VYd-egLu_H2o_BP{#Nqg0w z2)?iImz~X+hsqb}VS<~c52oXWGd^c^8=U*`)x(t$&9R=dzmj-442#_pQqa7fdioGE zoOFj#27y~OUyG(0pcvw*le4Y~r36Sl4etHpr2qAeMEJ`H8|u&Vq1>16n)&97HqIUr zHF)z$=|wH1xg#%XidYrmjq>-uJ;j=@zviZYYO7-IX>3y_o`jy~YO{9- z)kjnMWoQ@W(Y*jfj7I?DJAUN3L)e;Du4q^f>|4`{u@}be2ix&GW6<4w(dkAGtaNno zlg&RD($CMhZSxk_a4S0?N8qbN7hX1ARgD4#-W+7pdrHVa|zRZm=EbT5SRE+ z3pcWE0%*bKt}dIVeY=Nq(x}(wy?dc89pFDH&mZ{1neH=0Ht2;tV<&M4i3#4l$3QX5 zT*qjw-^cf8O(5Cw(OHBHp|P!VybT20>i|@;3xsGi4ryqPO3<5El#ItYy&Bd28bD7m z$}by^yk7LCm*1=h{XHY=?<(PJyDjC!-pwVd22HprO*YU&P&(9Mip|XG-nk{5*y9ar zp3mOo#LrUj?+!|qkLc7#qy6fBPxJPlIGmgQ&HDFR)VjDYuPJD_zv~y@-$|qw8!^$3 z$^9PkH$7))=tHrYbb|(oZta6dc3PGDHZB4P;}pVEX)76k|x3Gd0oj_13Ra1irkAW_en7L=^OhTaE2` zE7AKLwWV+tD?UC%#F>X<&`-lrt=^N`#f*$uR{cQ%VL*bu1w>C+RBuFJz$lx1{VkAa zG$kH0XRr|FnUp*AMf(#>xhkYQC#bVuwfE17V~~y=M=__68+6H9SO4 zW`FrA?oyyO&-#i!@baS#rnU?Gj{XmmS|{fuk0%-c~e>>N~U#*=-9;M z^Ox4UlKF$sYeHXs-Du;R|4vapGj+5{<^FnrvS+=<%mR0lQQwPQZZ@9Ts~5Zd=lk8x z)b2n_tB-yY_(cJ@C;4OQS!F_2#N2`>)ZtA&6#QMcp$$EQeUT7wsjS8>DwVbEqFmUY-j4fCd9`NKBBEg*0QS9Z;1Ci5j5SNzR>%i36T8<~JnORS ztDVYrP-~#V44LHbE$U+Dzt|77{HR#7TBZ4ZSmusgp8_ z^sMn+**B(QtGQ_3!hOWO-%>gLkUnbaya9hc#qWGQBnpPu9QBn8=5kxh664 zXK^y+ou4r|5!J4wMZi_MGQ86h>*@Comh^pA2)@=Ifgx_+=I=-m|3SJcn*IE)s8b#K z<}J807d&3;3eQfZxm6#nIaYkX+j<0aX{Y_T%aU;^(6ZtQuWJMZ1g<>PlI z7m&@ajeB(WgCsL|pSj7z@V7-lJOA5?OGv1v-;4Id2lcZ06I2B=#jUVkriZvA|Evv6 z|DKweu^?kM&As;LWhFi8pw|K%&XMR&eBaPkiM^>m*GC~~yCG+HXDVs?q2H5wnw6~hAX&Q%+&X1+ z-`I>7E(pyvDA2)`#uN{>zq zw-MR3k;8jZYVo2yDmB?}I66NsP`lrpoe+O9dG3_Qj@4J((3bW5qVd-#XX9{&WO&|O zrnCHU6K`1de_>vmKT;I!fhbtF1N*w4M!*wCZ>ldl)Zo|%rnvJp0WB{wYG!gotH5jm zS_0oa0%pp`!}h()3hX0rk`-Df?=zK7rSBjA#5Y1_7Lw(||?`M_*SlW9SP4Q}m-3+=qhz17H zob!Da#6F^1m4MU-5TyTB3KE1}5WMos58JLw63!ZaBymi^K#TOo>)p>)dz{O_@6dF5 zR=qan-AXNNsBZQ zvAIx1IfPibsvk?H`ZUaz)V^4hm~1w_G*%k9N8YNzk5UzN=W}lL!%j{O{@B-Dt$J-X zHBI?*cTj;?A-)@UMc3v_+OcI#CYQNGR+FCVb;OI^5GP7m@*Evz%_$pEVXgBF`1F9! zNhD1+l@Q}#J=hpbq?poZ&Vn59n2gEjE&t2^be#trrS~q5l@FU?kFUFC6C#A9l(Ljpt0m{QUHUQqYXr$bX35V?>8GIdK5!ixlhc` z+rQ~;sRKTt*>!=HlwE{L0iP2JV1Eq-@bD-k{&@kgEQi7Z?FQU4c)kn@*PvxWI$L z3%mT8{+!CXM#okYj#+2Z-LpzU2#N9_8sb9}Jio+!9rCPuVPxpu-O0z9E1PZG{zp_= z`7x*e&vO4s##xVPZQqMor%uY#-_=AHwbtad)L_}po?3hLqaly8PWvy?!~xYJX!F$O z=mu|ZQ_x3jU~$fFr?zHskj?zrF?+9>)VZ&Et#?z(R?Ad$6}W!frT1E#-?x2-!pLn+ zv(Ks8n|L=Xzc9S*%m4W|fSJ zzlwcM+CQ!aG+*}d$j*kg+j@=|w!Yon_K->5l*w+^PfKdfmQ-6{LI7{wi>q^{4if?W zvGzv;gYzCsp%b4RL7dxCdRZ5=*GT4_v)k%D$t6zsnDwvAPS3nO?ea^x7u4CId5Ia$ z`8PerRO>y`=;JqxKDx%AOxBpnS=Jx&ut>CLm+ySsR=FG)T1uB+Mo5P<77TEC2Iagk z`S!|ku+iaaaDmZL_BuOV^zSWjoBkJ+`->v0MWen#?=MZiQ%?T1CXP03`;rLQ?b7~6 zzKpD}9Hq8}A_OrYOSQ_$Cs3XdCB@T`8+vR*vF()*<9=PlL%k;XGqu{s)>aXI(g3ZV z%Xj7bS_WKuaRSw`Ry1PUqez2J%6||!Owf*XU-mVMZAh+iED{`Jtz%)GoqTC}r}Wqr z&LPbK%RrseurP-$_1+RnGX8^4JFi=|-1UtiRzN{s!bHGSU9BcrKK0_Mvr}&E(2QZL z{QS#S2A3LZYRshlb;iSEa%Jmr)ibEPj@BA1sIghegT=P*)Y?x9Oj&YysT1b@DBM6p zsIenDF#|*C`RgmcL?d~1@Qo1tQ`g#6%!=5|2z1rFkEO(XbTB{(+hA4ocK3L8+eHE~ z;_~oSGbpm8@0$|v#O&e8a(zCA$8xTOeFbgT#TLINwaZFbR{x_KCoRa@+CxQ2|KR^abDL~vqF23I8!N(IX=jK{AkY>+E`0rT8f}JG*+Az9k`k5Y?UAP8dT(;* zNl>7T3fXv%IoW;xsX1DtKr&AtMfWM9_f?k3k5nhwiu2ZJkGXDz9Ipy~$=ZBF{~zy@ zGAq{Ki?#fEzr`=Jm^0q>`vHkoCKMv!a~G>oUSi=ETj^=jQLQo1%;Wy;JRAjmP(D#f z#NfM@zrtIOrG9OC$LMD_O|ZT~p_AOU4kF!@Ystq%H#?2{T?$$cJ}6m@QR9=HN59NI zaZK*4)$aNP1y+lR^OcKw{9(M>^0=9?{w1C*&`AmINK_rczTA!uA2F32=QSA3U2v)p zLX5Dm7*;53X_-uSWk^abgeDz)8k_y;ae<|(-jhyNu5{22d(VahkZ0;(Wm8`d>xeh4 zK!IcKRn0#1?M;iCWD;E)?>mEh+#d_flaDtOKMMie*uOS22C3T=pDEDY#TJjdZ%I!$ zMJF`3l(!`#n@pa!lvaP-B#P#k5<|xSLP7EM@tsUY;eSK~*H_>w)deEcnId{L*uoEUo-AF zZmH!4pGRjXQ1aH8OmZR5%Tgi<5IFt8++tA_o~&|6{|{rf-4uL zR2kj|YO_DKdoNZA1J+OWM zo_$h&fPP-B9m^}b0nr0+(TlrXFwrYnSxW!;Q8>;Q9{j_1sa6NT6<*hMxMn0lKR7s| zP(?BK#9%S1tFlzKh04*u=p8rx{`q_J`#770RE1MwDCv1wWy?|Ch8nwywyJuOILzYj zkhk_>Vl{B}eig|Z!EMogF8_CFNUrQ?>+BO9KTAMZ-jX4f^6Ydc6RvDoSpnkFh#ck( zoR4fjZqV>gxVqOzldvxy5dBjq(a#Cq$h`X77Awr>1Z&f#eF5NlA3Nf(ki;)O zl=vrHVQL6@4k@G%J$yo(8S}jOCG_v6ZA_re&y&xF7e-Dzu96FF23||p>_+|?kn}Ld zs&j;s3kC3f;J7O`BrX%{BGx(>>-gNVbmQEcn^S_eh%}Mszcx`An%NEDEJ>*NR zY}#Ty=^jaQ#(LF$DfYtkG;q9)#}4Cq)UTJDfxi?5y)Q!yS7muIX8kv|LYD4Ll>#As zKxSQDom;{x4PtiVE#6N58{Qn!47Uu7LZ@zH7)&9aYFS4jvcD6Sx$|tWf26$3YVli2 zCL})04uuzld3_+CnZoj{Hrvn6Pg^+SmTNWOV{15~#D%=i9hH=5z8wX92Qw^Y9`apy z^6D&~;A7pOionS;?8lSx_*<1%hYeE7mAEvTR3=^j)LNfTXq&P?Qa6ZrQ{!~|lgy?G z4bs~&gIF5TfU_d3>^BBqqRd_&M?=j5xPPL62Wn)NtM`+<(L)%C zoWUe}xi>x1(%rqDl`VqaHm?@0O5K)mHqUZAy-y#??swVA`YL2zdn$eJxxBmtnOyaf zbF@n>0#-egDX1R=nJjOGD>ugT4pyV%^JYDM@IRgPd^ta5a5%H6a$xfG5;i`oY_uMY z+cpz5{_{Aij4kZ$!hhEHV?PAx!9~>t%)9E#4!!}4>5=Dg##o9=T|}}OxRAxj^81ro zy*DB~%(_=Wo2#FL_7T1{$MjieX+E3rOYD{-Lk>=u(1T-djT&_|AW)mp!f{7;#wT^n zJg42tzymg{u3?#f$NODz**DC9AAKtUheH*=^9rA)^M<5-3hRj?Muor4PS1g^a>9-# zt&fU$j+IA+#-#}tyL?uP#o^}?ECGy$;=S}pHdwwuK$!*%Q`d`wZOTWFwxZ)>_?X& zfr_mUIaW1$uc_gk#J7B~4;aJ9Sf?@+<*<6rKqf|iW=bmL^7;$@OWolCA7GVTz_4&< z$9RO-n+mO&C?G0IU0zNNmsvQZGDy&RMA<+%%7IFAjbqiEUXPSnGGw)Lw+DLBS zvFDB+SA5!#pwr6b2hQKpP*09I(e)CDjsYfo9r@n%RlJ*QhIr$S7DY%3oiF2LT>ZZ1 z${c7a0T|T+#3ip8sMf<5^(5iwnsN9WVP*eeN9$2%?Ht^K`%+Ir_ z4%y=AzWhwJM~;SGeQ$VWWF@W6XN0R7sSNLT;)F}8hL$^9G+PNE!j8@JGeR30(k;uOLdxmaJ&}2a( zOJI29+Xw$Cv$`(HC7xFWodvYWowh)HF4JEgR!J%7oAJa=r0p&~DMF26GYY80#uQ%h zir3?H2cwj%l(% y+(M={PGo>vRy@4ByUlCDSlr1n;lFJp0baYs(`w+`pk~}1JQW2E`D$4U)c*mvk=I24 literal 0 HcmV?d00001 diff --git a/icon/关于我们.png b/icon/关于我们.png new file mode 100644 index 0000000000000000000000000000000000000000..bc82072b13c93af23dd0ca3e47831b6f252fbb84 GIT binary patch literal 5901 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 literal 0 HcmV?d00001 diff --git a/icon/商品.png b/icon/商品.png new file mode 100644 index 0000000000000000000000000000000000000000..67706dd5d5de1d69bbb006a7b07bde6f1e3935f1 GIT binary patch literal 5331 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 literal 0 HcmV?d00001 diff --git a/icon/地址.png b/icon/地址.png new file mode 100644 index 0000000000000000000000000000000000000000..cc68944d3e82ed6279f269a268cec53a4b06dc9c GIT binary patch literal 9608 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 literal 0 HcmV?d00001 diff --git a/icon/智绘微雕test体验版(8月5日前有效).png b/icon/智绘微雕test体验版(8月5日前有效).png new file mode 100644 index 0000000000000000000000000000000000000000..46fbe0593c058eef53e09fe7225d0cefe9ad0f03 GIT binary patch literal 26529 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 F`!7pGco6^q literal 0 HcmV?d00001 diff --git a/icon/杯子.png b/icon/杯子.png new file mode 100644 index 0000000000000000000000000000000000000000..4264b10f90690cb35d8fedb60562186134204e11 GIT binary patch literal 14623 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