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 0000000..abc5233 Binary files /dev/null and b/dist/icon/三角尺.png differ diff --git a/dist/icon/个人.png b/dist/icon/个人.png new file mode 100644 index 0000000..d3dd978 Binary files /dev/null and b/dist/icon/个人.png differ diff --git a/dist/icon/书本.png b/dist/icon/书本.png new file mode 100644 index 0000000..4773835 Binary files /dev/null and b/dist/icon/书本.png differ diff --git a/dist/icon/书本_大.png b/dist/icon/书本_大.png new file mode 100644 index 0000000..311cbdb Binary files /dev/null and b/dist/icon/书本_大.png differ diff --git a/dist/icon/书灯.png b/dist/icon/书灯.png new file mode 100644 index 0000000..7039a5f Binary files /dev/null and b/dist/icon/书灯.png differ diff --git a/dist/icon/企业批量定制.png b/dist/icon/企业批量定制.png new file mode 100644 index 0000000..1bbe14a Binary files /dev/null and b/dist/icon/企业批量定制.png differ diff --git a/dist/icon/使用帮助.png b/dist/icon/使用帮助.png new file mode 100644 index 0000000..61a5745 Binary files /dev/null and b/dist/icon/使用帮助.png differ diff --git a/dist/icon/关于我们.png b/dist/icon/关于我们.png new file mode 100644 index 0000000..bc82072 Binary files /dev/null and b/dist/icon/关于我们.png differ diff --git a/dist/icon/包裹.png b/dist/icon/包裹.png new file mode 100644 index 0000000..2e138aa Binary files /dev/null and b/dist/icon/包裹.png differ diff --git a/dist/icon/地址.png b/dist/icon/地址.png new file mode 100644 index 0000000..cc68944 Binary files /dev/null and b/dist/icon/地址.png differ diff --git a/dist/icon/定制协议.png b/dist/icon/定制协议.png new file mode 100644 index 0000000..61a5745 Binary files /dev/null and b/dist/icon/定制协议.png differ diff --git a/dist/icon/杯子.png b/dist/icon/杯子.png new file mode 100644 index 0000000..4264b10 Binary files /dev/null and b/dist/icon/杯子.png differ diff --git a/dist/icon/电话.png b/dist/icon/电话.png new file mode 100644 index 0000000..4bdbb79 Binary files /dev/null and b/dist/icon/电话.png differ diff --git a/dist/icon/笔盒.png b/dist/icon/笔盒.png new file mode 100644 index 0000000..4412cec Binary files /dev/null and b/dist/icon/笔盒.png differ diff --git a/dist/icon/设置.png b/dist/icon/设置.png new file mode 100644 index 0000000..b596305 Binary files /dev/null and b/dist/icon/设置.png differ diff --git a/dist/icon/词云生成.png b/dist/icon/词云生成.png new file mode 100644 index 0000000..339c87b Binary files /dev/null and b/dist/icon/词云生成.png differ diff --git a/dist/icon/调色盘.png b/dist/icon/调色盘.png new file mode 100644 index 0000000..f899ce8 Binary files /dev/null and b/dist/icon/调色盘.png differ diff --git a/dist/icon/账号管理.png b/dist/icon/账号管理.png new file mode 100644 index 0000000..3d24030 Binary files /dev/null and b/dist/icon/账号管理.png differ diff --git a/dist/icon/首页.png b/dist/icon/首页.png new file mode 100644 index 0000000..fea744f Binary files /dev/null and b/dist/icon/首页.png differ diff --git a/dist/pages/address/index.js b/dist/pages/address/index.js index 23438dd..7e4bda3 100644 --- a/dist/pages/address/index.js +++ b/dist/pages/address/index.js @@ -154,7 +154,7 @@ function AddressPage() { }, children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { className: "back-btn", - onClick: function onClick() { + onTap: function onTap() { return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateBack(); }, children: "\u2190" @@ -196,19 +196,19 @@ function AddressPage() { className: "address-actions", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { className: "address-act", - onClick: function onClick() { + onTap: function onTap() { return openEdit(item); }, children: "\u270F\uFE0F \u7F16\u8F91" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { className: "address-act", - onClick: function onClick() { + onTap: function onTap() { return handleCopy(item); }, children: "\uD83D\uDCCB \u590D\u5236" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { className: "address-act delete", - onClick: function onClick() { + onTap: function onTap() { return handleDelete(item.id); }, children: "\uD83D\uDDD1\uFE0F \u5220\u9664" @@ -217,9 +217,10 @@ function AddressPage() { }, item.id); }), list.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { className: "empty-state", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { - className: "empty-icon", - children: "\uD83D\uDCCD" + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Image, { + className: "empty-icon-img", + src: "/icon/\u5730\u5740.png", + mode: "aspectFit" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { className: "empty-text", children: "\u8FD8\u6CA1\u6709\u6536\u8D27\u5730\u5740" @@ -234,7 +235,7 @@ function AddressPage() { className: "action-bar", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { className: "btn-gradient", - onClick: openAdd, + onTap: openAdd, children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { children: "\u65B0\u589E\u6536\u8D27\u5730\u5740" }) @@ -283,7 +284,7 @@ function AddressPage() { } }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { className: "form-row", - onClick: function onClick() { + onTap: function onTap() { return setIsDefault(!isDefault); }, children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { @@ -296,7 +297,7 @@ function AddressPage() { className: "form-actions", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { className: "btn-outline", - onClick: function onClick() { + onTap: function onTap() { setShowForm(false); resetForm(); }, @@ -305,7 +306,7 @@ function AddressPage() { }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { className: "btn-gradient", - onClick: handleSave, + onTap: handleSave, children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { children: "\u4FDD\u5B58" }) diff --git a/dist/pages/address/index.js.map b/dist/pages/address/index.js.map index 83a5b5c..c17b60b 100644 --- a/dist/pages/address/index.js.map +++ b/dist/pages/address/index.js.map @@ -1 +1 @@ -{"version":3,"file":"pages/address/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;;;;;;;;;;;;ACxSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/address/index.tsx?8c2b","webpack://smart-engraving-miniapp/._src_pages_address_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Input, Picker } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { getAddressList, addAddress, updateAddress, deleteAddress } 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 AddressPage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState([]),\n _useState2 = _slicedToArray(_useState, 2),\n list = _useState2[0],\n setList = _useState2[1];\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n editing = _useState4[0],\n setEditing = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n showForm = _useState6[0],\n setShowForm = _useState6[1];\n var _useState7 = useState(''),\n _useState8 = _slicedToArray(_useState7, 2),\n name = _useState8[0],\n setName = _useState8[1];\n var _useState9 = useState(''),\n _useState0 = _slicedToArray(_useState9, 2),\n phone = _useState0[0],\n setPhone = _useState0[1];\n var _useState1 = useState([]),\n _useState10 = _slicedToArray(_useState1, 2),\n region = _useState10[0],\n setRegion = _useState10[1];\n var _useState11 = useState(''),\n _useState12 = _slicedToArray(_useState11, 2),\n detail = _useState12[0],\n setDetail = _useState12[1];\n var _useState13 = useState(false),\n _useState14 = _slicedToArray(_useState13, 2),\n isDefault = _useState14[0],\n setIsDefault = _useState14[1];\n var load = function load() {\n return setList(getAddressList());\n };\n useEffect(function () {\n load();\n }, []);\n var resetForm = function resetForm() {\n setName('');\n setPhone('');\n setRegion([]);\n setDetail('');\n setIsDefault(false);\n setEditing(null);\n };\n var openAdd = function openAdd() {\n resetForm();\n setShowForm(true);\n };\n var openEdit = function openEdit(item) {\n setEditing(item);\n setName(item.name);\n setPhone(item.phone);\n setRegion(item.region);\n setDetail(item.detail);\n setIsDefault(item.isDefault);\n setShowForm(true);\n };\n var handleDelete = function handleDelete(id) {\n Taro.showModal({\n title: '确认删除',\n content: '删除后将无法恢复该地址',\n success: function success(res) {\n if (res.confirm) {\n deleteAddress(id);\n load();\n }\n }\n });\n };\n var handleCopy = function handleCopy(item) {\n var text = \"\".concat(item.name, \" \").concat(item.phone, \"\\n\").concat(item.region.join(' '), \" \").concat(item.detail);\n Taro.setClipboardData({\n data: text\n });\n };\n var handleSave = function handleSave() {\n if (!name.trim() || !phone.trim() || region.length === 0 || !detail.trim()) {\n Taro.showToast({\n title: '请填写完整信息',\n icon: 'none'\n });\n return;\n }\n var payload = {\n name: name,\n phone: phone,\n region: region,\n detail: detail,\n isDefault: isDefault\n };\n if (editing) {\n updateAddress(editing.id, payload);\n } else {\n addAddress(payload);\n }\n Taro.showToast({\n title: '保存成功',\n icon: 'success'\n });\n setShowForm(false);\n resetForm();\n load();\n };\n var onRegionChange = function onRegionChange(e) {\n setRegion(e.detail.value || []);\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"address-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: \"\\u6536\\u8D27\\u5730\\u5740\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"address-list\",\n children: [list.map(function (item) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"address-card dashed-card\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"address-header\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"address-user\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"address-name\",\n children: item.name\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-phone\",\n children: item.phone\n }), item.isDefault && /*#__PURE__*/_jsx(View, {\n className: \"default-tag\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u9ED8\\u8BA4\"\n })\n })]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"address-full\",\n children: [item.region.join(' '), \" \", item.detail]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"address-actions\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"address-act\",\n onClick: function onClick() {\n return openEdit(item);\n },\n children: \"\\u270F\\uFE0F \\u7F16\\u8F91\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-act\",\n onClick: function onClick() {\n return handleCopy(item);\n },\n children: \"\\uD83D\\uDCCB \\u590D\\u5236\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-act delete\",\n onClick: function onClick() {\n return handleDelete(item.id);\n },\n children: \"\\uD83D\\uDDD1\\uFE0F \\u5220\\u9664\"\n })]\n })]\n }, item.id);\n }), list.length === 0 && /*#__PURE__*/_jsxs(View, {\n className: \"empty-state\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"empty-icon\",\n children: \"\\uD83D\\uDCCD\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-text\",\n children: \"\\u8FD8\\u6CA1\\u6709\\u6536\\u8D27\\u5730\\u5740\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-sub\",\n children: \"\\u70B9\\u51FB\\u4E0B\\u65B9\\u6309\\u94AE\\u6DFB\\u52A0\\u65B0\\u5730\\u5740\"\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"safe-bottom-placeholder\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"action-bar\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: openAdd,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u65B0\\u589E\\u6536\\u8D27\\u5730\\u5740\"\n })\n })\n }), showForm && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"modal-card dashed-card address-form\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"modal-title\",\n children: editing ? '编辑地址' : '新增地址'\n }), /*#__PURE__*/_jsx(Input, {\n className: \"form-input\",\n placeholder: \"\\u6536\\u8D27\\u4EBA\\u59D3\\u540D\",\n value: name,\n onInput: function onInput(e) {\n return setName(e.detail.value);\n }\n }), /*#__PURE__*/_jsx(Input, {\n className: \"form-input\",\n placeholder: \"\\u624B\\u673A\\u53F7\\u7801\",\n type: \"number\",\n value: phone,\n onInput: function onInput(e) {\n return setPhone(e.detail.value);\n }\n }), /*#__PURE__*/_jsx(Picker, {\n mode: \"region\",\n value: region,\n onChange: onRegionChange,\n children: /*#__PURE__*/_jsx(View, {\n className: \"form-picker\",\n children: /*#__PURE__*/_jsx(Text, {\n className: region.length ? 'form-picker-val' : 'form-picker-ph',\n children: region.length ? region.join(' / ') : '选择省 / 市 / 区'\n })\n })\n }), /*#__PURE__*/_jsx(Input, {\n className: \"form-input\",\n placeholder: \"\\u8BE6\\u7EC6\\u5730\\u5740\\uFF1A\\u8857\\u9053\\u3001\\u95E8\\u724C\\u53F7\",\n value: detail,\n onInput: function onInput(e) {\n return setDetail(e.detail.value);\n }\n }), /*#__PURE__*/_jsxs(View, {\n className: \"form-row\",\n onClick: function onClick() {\n return setIsDefault(!isDefault);\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"form-label\",\n children: \"\\u8BBE\\u4E3A\\u9ED8\\u8BA4\\u5730\\u5740\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"checkbox \".concat(isDefault ? 'checked' : '')\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"form-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onClick: function onClick() {\n setShowForm(false);\n resetForm();\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53D6\\u6D88\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onClick: handleSave,\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/address/index!./index.tsx\"\nvar config = {\"navigationBarTitleText\":\"收货地址\"};\n\n\nvar inst = Page(createPageConfig(component, 'pages/address/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"pages/address/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;;;;;;;;;;;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://smart-engraving-miniapp/./src/pages/address/index.tsx?8c2b","webpack://smart-engraving-miniapp/._src_pages_address_index.tsx"],"sourcesContent":["import _slicedToArray from \"F:/weixin_wordc/node_modules/@babel/runtime/helpers/esm/slicedToArray.js\";\nimport { View, Text, Image, Input, Picker } from '@tarojs/components';\nimport Taro from '@tarojs/taro';\nimport { useState, useEffect } from 'react';\nimport './index.scss';\nimport { getAddressList, addAddress, updateAddress, deleteAddress } 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 AddressPage() {\n var _useThemeContext = useThemeContext(),\n theme = _useThemeContext.theme;\n var _useState = useState([]),\n _useState2 = _slicedToArray(_useState, 2),\n list = _useState2[0],\n setList = _useState2[1];\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n editing = _useState4[0],\n setEditing = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n showForm = _useState6[0],\n setShowForm = _useState6[1];\n var _useState7 = useState(''),\n _useState8 = _slicedToArray(_useState7, 2),\n name = _useState8[0],\n setName = _useState8[1];\n var _useState9 = useState(''),\n _useState0 = _slicedToArray(_useState9, 2),\n phone = _useState0[0],\n setPhone = _useState0[1];\n var _useState1 = useState([]),\n _useState10 = _slicedToArray(_useState1, 2),\n region = _useState10[0],\n setRegion = _useState10[1];\n var _useState11 = useState(''),\n _useState12 = _slicedToArray(_useState11, 2),\n detail = _useState12[0],\n setDetail = _useState12[1];\n var _useState13 = useState(false),\n _useState14 = _slicedToArray(_useState13, 2),\n isDefault = _useState14[0],\n setIsDefault = _useState14[1];\n var load = function load() {\n return setList(getAddressList());\n };\n useEffect(function () {\n load();\n }, []);\n var resetForm = function resetForm() {\n setName('');\n setPhone('');\n setRegion([]);\n setDetail('');\n setIsDefault(false);\n setEditing(null);\n };\n var openAdd = function openAdd() {\n resetForm();\n setShowForm(true);\n };\n var openEdit = function openEdit(item) {\n setEditing(item);\n setName(item.name);\n setPhone(item.phone);\n setRegion(item.region);\n setDetail(item.detail);\n setIsDefault(item.isDefault);\n setShowForm(true);\n };\n var handleDelete = function handleDelete(id) {\n Taro.showModal({\n title: '确认删除',\n content: '删除后将无法恢复该地址',\n success: function success(res) {\n if (res.confirm) {\n deleteAddress(id);\n load();\n }\n }\n });\n };\n var handleCopy = function handleCopy(item) {\n var text = \"\".concat(item.name, \" \").concat(item.phone, \"\\n\").concat(item.region.join(' '), \" \").concat(item.detail);\n Taro.setClipboardData({\n data: text\n });\n };\n var handleSave = function handleSave() {\n if (!name.trim() || !phone.trim() || region.length === 0 || !detail.trim()) {\n Taro.showToast({\n title: '请填写完整信息',\n icon: 'none'\n });\n return;\n }\n var payload = {\n name: name,\n phone: phone,\n region: region,\n detail: detail,\n isDefault: isDefault\n };\n if (editing) {\n updateAddress(editing.id, payload);\n } else {\n addAddress(payload);\n }\n Taro.showToast({\n title: '保存成功',\n icon: 'success'\n });\n setShowForm(false);\n resetForm();\n load();\n };\n var onRegionChange = function onRegionChange(e) {\n setRegion(e.detail.value || []);\n };\n return /*#__PURE__*/_jsx(View, {\n className: \"theme-\".concat(theme),\n children: /*#__PURE__*/_jsxs(View, {\n className: \"address-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: \"\\u6536\\u8D27\\u5730\\u5740\"\n }), /*#__PURE__*/_jsx(View, {\n style: {\n width: '60px'\n }\n })]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"address-list\",\n children: [list.map(function (item) {\n return /*#__PURE__*/_jsxs(View, {\n className: \"address-card dashed-card\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"address-header\",\n children: [/*#__PURE__*/_jsxs(View, {\n className: \"address-user\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"address-name\",\n children: item.name\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-phone\",\n children: item.phone\n }), item.isDefault && /*#__PURE__*/_jsx(View, {\n className: \"default-tag\",\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u9ED8\\u8BA4\"\n })\n })]\n }), /*#__PURE__*/_jsxs(Text, {\n className: \"address-full\",\n children: [item.region.join(' '), \" \", item.detail]\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"address-actions\",\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"address-act\",\n onTap: function onTap() {\n return openEdit(item);\n },\n children: \"\\u270F\\uFE0F \\u7F16\\u8F91\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-act\",\n onTap: function onTap() {\n return handleCopy(item);\n },\n children: \"\\uD83D\\uDCCB \\u590D\\u5236\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"address-act delete\",\n onTap: function onTap() {\n return handleDelete(item.id);\n },\n children: \"\\uD83D\\uDDD1\\uFE0F \\u5220\\u9664\"\n })]\n })]\n }, item.id);\n }), list.length === 0 && /*#__PURE__*/_jsxs(View, {\n className: \"empty-state\",\n children: [/*#__PURE__*/_jsx(Image, {\n className: \"empty-icon-img\",\n src: \"/icon/\\u5730\\u5740.png\",\n mode: \"aspectFit\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-text\",\n children: \"\\u8FD8\\u6CA1\\u6709\\u6536\\u8D27\\u5730\\u5740\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"empty-sub\",\n children: \"\\u70B9\\u51FB\\u4E0B\\u65B9\\u6309\\u94AE\\u6DFB\\u52A0\\u65B0\\u5730\\u5740\"\n })]\n })]\n }), /*#__PURE__*/_jsx(View, {\n className: \"safe-bottom-placeholder\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"action-bar\",\n children: /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: openAdd,\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u65B0\\u589E\\u6536\\u8D27\\u5730\\u5740\"\n })\n })\n }), showForm && /*#__PURE__*/_jsx(View, {\n className: \"modal-overlay\",\n children: /*#__PURE__*/_jsxs(View, {\n className: \"modal-card dashed-card address-form\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"star-badge\"\n }), /*#__PURE__*/_jsx(Text, {\n className: \"modal-title\",\n children: editing ? '编辑地址' : '新增地址'\n }), /*#__PURE__*/_jsx(Input, {\n className: \"form-input\",\n placeholder: \"\\u6536\\u8D27\\u4EBA\\u59D3\\u540D\",\n value: name,\n onInput: function onInput(e) {\n return setName(e.detail.value);\n }\n }), /*#__PURE__*/_jsx(Input, {\n className: \"form-input\",\n placeholder: \"\\u624B\\u673A\\u53F7\\u7801\",\n type: \"number\",\n value: phone,\n onInput: function onInput(e) {\n return setPhone(e.detail.value);\n }\n }), /*#__PURE__*/_jsx(Picker, {\n mode: \"region\",\n value: region,\n onChange: onRegionChange,\n children: /*#__PURE__*/_jsx(View, {\n className: \"form-picker\",\n children: /*#__PURE__*/_jsx(Text, {\n className: region.length ? 'form-picker-val' : 'form-picker-ph',\n children: region.length ? region.join(' / ') : '选择省 / 市 / 区'\n })\n })\n }), /*#__PURE__*/_jsx(Input, {\n className: \"form-input\",\n placeholder: \"\\u8BE6\\u7EC6\\u5730\\u5740\\uFF1A\\u8857\\u9053\\u3001\\u95E8\\u724C\\u53F7\",\n value: detail,\n onInput: function onInput(e) {\n return setDetail(e.detail.value);\n }\n }), /*#__PURE__*/_jsxs(View, {\n className: \"form-row\",\n onTap: function onTap() {\n return setIsDefault(!isDefault);\n },\n children: [/*#__PURE__*/_jsx(Text, {\n className: \"form-label\",\n children: \"\\u8BBE\\u4E3A\\u9ED8\\u8BA4\\u5730\\u5740\"\n }), /*#__PURE__*/_jsx(View, {\n className: \"checkbox \".concat(isDefault ? 'checked' : '')\n })]\n }), /*#__PURE__*/_jsxs(View, {\n className: \"form-actions\",\n children: [/*#__PURE__*/_jsx(View, {\n className: \"btn-outline\",\n onTap: function onTap() {\n setShowForm(false);\n resetForm();\n },\n children: /*#__PURE__*/_jsx(Text, {\n children: \"\\u53D6\\u6D88\"\n })\n }), /*#__PURE__*/_jsx(View, {\n className: \"btn-gradient\",\n onTap: handleSave,\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/address/index!./index.tsx\"\nvar config = {\"navigationBarTitleText\":\"收货地址\"};\n\n\nvar inst = Page(createPageConfig(component, 'pages/address/index', {root:{cn:[]}}, config || {}))\n\n\nexport default component\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/address/index.wxss b/dist/pages/address/index.wxss index 7307e98..664b7ab 100644 --- a/dist/pages/address/index.wxss +++ b/dist/pages/address/index.wxss @@ -177,8 +177,8 @@ text-align: center; } -/* 空状态统一的在 app.scss */ -.login-guard { +/* 空状态(主题适配) */ +.empty-state { display: -webkit-flex; display: -ms-flexbox; display: flex; @@ -188,30 +188,24 @@ -webkit-align-items: center; -ms-flex-align: center; align-items: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; padding: 120rpx 40rpx; + text-align: center; } -.login-guard-icon { - font-size: 80rpx; +.empty-icon-img { + width: 48rpx; + height: 48rpx; margin-bottom: 24rpx; } -.login-guard-title { - font-size: 36rpx; +.empty-text { + font-size: 32rpx; font-weight: 700; color: var(--text-primary); margin-bottom: 12rpx; } -.login-guard-desc { - font-size: 28rpx; +.empty-sub { + font-size: 26rpx; color: var(--text-secondary); - margin-bottom: 32rpx; -} - -.login-guard-btn { - padding: 20rpx 48rpx; } diff --git a/dist/pages/checkout/index.js b/dist/pages/checkout/index.js index ded7a85..f23675b 100644 --- a/dist/pages/checkout/index.js +++ b/dist/pages/checkout/index.js @@ -29,13 +29,25 @@ function CheckoutPage() { - var _design$designData, _design$designData2, _design$designData3, _design$designData$im, _design$designData$im2, _design$designData$im3; + var _design$designData, _design$designData2, _design$designData3, _design$designData$im, _design$designData$im2, _design$designData$im3, _address$region2; var _useThemeContext = (0,_context_ThemeContext__WEBPACK_IMPORTED_MODULE_4__.useThemeContext)(), theme = _useThemeContext.theme; var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null), _useState2 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState, 2), design = _useState2[0], setDesign = _useState2[1]; + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null), + _useState4 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState3, 2), + address = _useState4[0], + setAddress = _useState4[1]; + var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), + _useState6 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState5, 2), + showAddrPicker = _useState6[0], + setShowAddrPicker = _useState6[1]; + var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]), + _useState8 = (0,F_weixin_wordc_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__["default"])(_useState7, 2), + addrList = _useState8[0], + setAddrList = _useState8[1]; (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { var _Taro$getCurrentInsta; var params = (_Taro$getCurrentInsta = _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().getCurrentInstance().router) === null || _Taro$getCurrentInsta === void 0 ? void 0 : _Taro$getCurrentInsta.params; @@ -46,7 +58,47 @@ function CheckoutPage() { return x.id === dId; }); setDesign(d || null); + setAddress((0,_utils_store__WEBPACK_IMPORTED_MODULE_2__.getDefaultAddress)()); + setAddrList((0,_utils_store__WEBPACK_IMPORTED_MODULE_2__.getAddressList)()); }, []); + var handleConfirm = function handleConfirm() { + var _address$region; + if (!address) { + _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({ + title: '请先添加收货地址', + icon: 'none' + }); + return; + } + _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showModal({ + title: '确认下单', + content: "\u786E\u8BA4\u540E\u5C06\u4ECE\u8BBE\u8BA1\u6E05\u5355\u751F\u6210\u8BA2\u5355\uFF0C\u5E76\u5BC4\u9001\u81F3\uFF1A\n".concat((_address$region = address.region) === null || _address$region === void 0 ? void 0 : _address$region.join(' '), " ").concat(address.detail), + success: function success(res) { + if (res.confirm) { + (0,_utils_store__WEBPACK_IMPORTED_MODULE_2__.designToOrder)(design.id); + _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({ + title: '下单成功', + icon: 'success' + }); + setTimeout(function () { + _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({ + url: '/pages/index/index' + }); + }, 1500); + } + } + }); + }; + var handlePickAddress = function handlePickAddress(addr) { + setAddress(addr); + setShowAddrPicker(false); + _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({ + title: '地址已更改', + icon: 'success' + }); + }; + var hasStickers = (design === null || design === void 0 || (_design$designData = design.designData) === null || _design$designData === void 0 ? void 0 : _design$designData.stickers) && design.designData.stickers.length > 0; + var hasLegacyImage = design === null || design === void 0 || (_design$designData2 = design.designData) === null || _design$designData2 === void 0 ? void 0 : _design$designData2.imageSrc; if (!design) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { className: "theme-".concat(theme), @@ -65,35 +117,13 @@ function CheckoutPage() { var maskStyle = { width: 300, height: 420 - }; // fallback - if ((_design$designData = design.designData) !== null && _design$designData !== void 0 && (_design$designData = _design$designData.category) !== null && _design$designData !== void 0 && _design$designData.mask) { + }; + if ((_design$designData3 = design.designData) !== null && _design$designData3 !== void 0 && (_design$designData3 = _design$designData3.category) !== null && _design$designData3 !== void 0 && _design$designData3.mask) { var m = design.designData.category.mask; maskStyle.width = m.width; maskStyle.height = m.height; if (m.shape === 'circle') maskStyle.borderRadius = '50%';else maskStyle.borderRadius = m.borderRadius || 0; } - var handleConfirm = function handleConfirm() { - _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showModal({ - title: '确认下单', - content: '确认后将从设计清单生成订单', - success: function success(res) { - if (res.confirm) { - (0,_utils_store__WEBPACK_IMPORTED_MODULE_2__.designToOrder)(design.id); - _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().showToast({ - title: '下单成功', - icon: 'success' - }); - setTimeout(function () { - _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().switchTab({ - url: '/pages/index/index' - }); - }, 1500); - } - } - }); - }; - var hasStickers = ((_design$designData2 = design.designData) === null || _design$designData2 === void 0 ? void 0 : _design$designData2.stickers) && design.designData.stickers.length > 0; - var hasLegacyImage = (_design$designData3 = design.designData) === null || _design$designData3 === void 0 ? void 0 : _design$designData3.imageSrc; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { className: "theme-".concat(theme), children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { @@ -109,7 +139,7 @@ function CheckoutPage() { }, children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { className: "back-btn", - onClick: function onClick() { + onTap: function onTap() { return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateBack(); }, children: "\u2190" @@ -190,11 +220,55 @@ function CheckoutPage() { children: ["\xA5", (design.unitPrice * design.count).toFixed(2)] })] })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "checkout-address-card dashed-card mt-20", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "star-badge" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "checkout-address-header", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "info-label", + children: "\u6536\u8D27\u5730\u5740" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "address-change", + onTap: function onTap() { + return setShowAddrPicker(true); + }, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "change-text", + children: "\u66F4\u6539\u6536\u8D27\u5730\u5740" + }) + })] + }), address ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "checkout-address-body", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "addr-row", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "addr-name", + children: address.name + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "addr-phone", + children: address.phone + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "addr-detail", + children: [(_address$region2 = address.region) === null || _address$region2 === void 0 ? void 0 : _address$region2.join(' '), " ", address.detail] + })] + }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "checkout-address-empty", + onTap: function onTap() { + return setShowAddrPicker(true); + }, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "empty-text", + children: "\u6682\u65E0\u6536\u8D27\u5730\u5740\uFF0C\u70B9\u51FB\u6DFB\u52A0" + }) + })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { className: "checkout-actions", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { className: "btn-outline", - onClick: function onClick() { + onTap: function onTap() { return _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateBack(); }, children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { @@ -202,7 +276,7 @@ function CheckoutPage() { }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { className: "btn-gradient", - onClick: handleConfirm, + onTap: handleConfirm, children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { children: "\u786E\u8BA4\u4E0B\u5355" }) @@ -211,6 +285,72 @@ function CheckoutPage() { style: { height: '40px' } + }), showAddrPicker && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "modal-overlay", + style: { + alignItems: 'flex-end', + justifyContent: 'flex-end' + }, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "addr-picker-sheet dashed-card", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "addr-picker-header", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "addr-picker-title", + children: "\u9009\u62E9\u6536\u8D27\u5730\u5740" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "addr-picker-close", + onTap: function onTap() { + return setShowAddrPicker(false); + }, + children: "\u2715" + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "addr-picker-list", + children: [addrList.map(function (addr) { + var _addr$region; + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "addr-picker-item ".concat((address === null || address === void 0 ? void 0 : address.id) === addr.id ? 'active' : ''), + onTap: function onTap() { + return handlePickAddress(addr); + }, + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "addr-picker-row", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "addr-picker-name", + children: addr.name + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "addr-picker-phone", + children: addr.phone + }), addr.isDefault && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "addr-picker-default", + children: "\u9ED8\u8BA4" + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "addr-picker-detail", + children: [(_addr$region = addr.region) === null || _addr$region === void 0 ? void 0 : _addr$region.join(' '), " ", addr.detail] + })] + }, addr.id); + }), addrList.length === 0 && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "addr-picker-empty", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + children: "\u6682\u65E0\u5730\u5740\uFF0C\u8BF7\u5148\u6DFB\u52A0\u6536\u8D27\u5730\u5740" + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.View, { + className: "addr-picker-add", + onTap: function onTap() { + setShowAddrPicker(false); + _tarojs_taro__WEBPACK_IMPORTED_MODULE_0___default().navigateTo({ + url: '/pages/address/index' + }); + }, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_tarojs_components__WEBPACK_IMPORTED_MODULE_7__.Text, { + className: "addr-picker-add-text", + children: "+ \u65B0\u5EFA\u6536\u8D27\u5730\u5740" + }) + })] + }) })] }) }); 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 0000000..abc5233 Binary files /dev/null and b/icon/三角尺.png differ diff --git a/icon/个人.png b/icon/个人.png new file mode 100644 index 0000000..d3dd978 Binary files /dev/null and b/icon/个人.png differ diff --git a/icon/书本.png b/icon/书本.png new file mode 100644 index 0000000..4773835 Binary files /dev/null and b/icon/书本.png differ diff --git a/icon/书本_大.png b/icon/书本_大.png new file mode 100644 index 0000000..311cbdb Binary files /dev/null and b/icon/书本_大.png differ diff --git a/icon/书灯.png b/icon/书灯.png new file mode 100644 index 0000000..7039a5f Binary files /dev/null and b/icon/书灯.png differ diff --git a/icon/付款.png b/icon/付款.png new file mode 100644 index 0000000..f97a109 Binary files /dev/null and b/icon/付款.png differ diff --git a/icon/企业批量定制.png b/icon/企业批量定制.png new file mode 100644 index 0000000..1bbe14a Binary files /dev/null and b/icon/企业批量定制.png differ diff --git a/icon/使用帮助.png b/icon/使用帮助.png new file mode 100644 index 0000000..61a5745 Binary files /dev/null and b/icon/使用帮助.png differ diff --git a/icon/关于我们.png b/icon/关于我们.png new file mode 100644 index 0000000..bc82072 Binary files /dev/null and b/icon/关于我们.png differ diff --git a/icon/包裹.png b/icon/包裹.png new file mode 100644 index 0000000..2e138aa Binary files /dev/null and b/icon/包裹.png differ diff --git a/icon/商品.png b/icon/商品.png new file mode 100644 index 0000000..67706dd Binary files /dev/null and b/icon/商品.png differ diff --git a/icon/地址.png b/icon/地址.png new file mode 100644 index 0000000..cc68944 Binary files /dev/null and b/icon/地址.png differ diff --git a/icon/定制协议.png b/icon/定制协议.png new file mode 100644 index 0000000..61a5745 Binary files /dev/null and b/icon/定制协议.png differ diff --git a/icon/智绘微雕test体验版(8月5日前有效).png b/icon/智绘微雕test体验版(8月5日前有效).png new file mode 100644 index 0000000..46fbe05 Binary files /dev/null and b/icon/智绘微雕test体验版(8月5日前有效).png differ diff --git a/icon/杯子.png b/icon/杯子.png new file mode 100644 index 0000000..4264b10 Binary files /dev/null and b/icon/杯子.png differ diff --git a/icon/电话.png b/icon/电话.png new file mode 100644 index 0000000..feada0e Binary files /dev/null and b/icon/电话.png differ diff --git a/icon/笔盒.png b/icon/笔盒.png new file mode 100644 index 0000000..4412cec Binary files /dev/null and b/icon/笔盒.png differ diff --git a/icon/设置.png b/icon/设置.png new file mode 100644 index 0000000..b596305 Binary files /dev/null and b/icon/设置.png differ diff --git a/icon/词云生成.png b/icon/词云生成.png new file mode 100644 index 0000000..339c87b Binary files /dev/null and b/icon/词云生成.png differ diff --git a/icon/调色盘.png b/icon/调色盘.png new file mode 100644 index 0000000..f899ce8 Binary files /dev/null and b/icon/调色盘.png differ diff --git a/icon/账号管理.png b/icon/账号管理.png new file mode 100644 index 0000000..3d24030 Binary files /dev/null and b/icon/账号管理.png differ diff --git a/icon/首页.png b/icon/首页.png new file mode 100644 index 0000000..fea744f Binary files /dev/null and b/icon/首页.png differ diff --git a/project.config.json b/project.config.json index cf913c7..bfe03fa 100644 --- a/project.config.json +++ b/project.config.json @@ -2,7 +2,7 @@ "miniprogramRoot": "dist/", "projectname": "smart-engraving-miniapp", "description": "智绘微刻 - 词云微雕定制小程序", - "appid": "wxb6a8e61694e2b808", + "appid": "wxad998564cf43a7d9", "setting": { "urlCheck": true, "es6": false, diff --git a/review1.md b/review1.md index 5988690..9490126 100644 --- a/review1.md +++ b/review1.md @@ -1,7 +1,7 @@ -# 智绘微刻小程序 — 交付总结 v4 +# 智绘微刻小程序 — 交付总结 v10 > 本文档供**完全无上下文的新会话**阅读,记录各轮重构的完整交付成果。 -> **日期**:2026-07-27(第四次修改,22:20 批次) +> **日期**:2026-08-01(第十次修改,Batch 10) > **项目目录**:`F:\weixin_wordc\` > **技术栈**:Taro 3.6.31 + React 18 + TypeScript + SCSS @@ -18,56 +18,146 @@ ### Batch 3(已完成) 完善个人主页功能(收货地址、设置页、协议页)、ThemeToggle点击修复、商品图片显示修复、Profile状态跳转修复、LoginGuard登录守卫、用户数据 openid 隔离。 +### Batch 4(已完成) +主题黑白切换彻底修复(删除eventCenter多余监听)、Profile菜单登录后无反应修复、本地用户数据库(密码保护zhihui2024)。 + +### Batch 5(已完成) +Profile菜单登录后无反应最终修复(增加`onShow`同步)、全部emoji替换为icon图片、首页品类卡片icon化、成品展示轮播图替换为实物照片、设计确认页/订单详情页增加收货地址栏、LoginGuard空状态居中。 + +### Batch 6(已完成) +设计清单/订单页未登录提示居中、icon尺寸统一缩小、底部tabBar图标图片化、删除首页标题栏旁多余icon、清单/订单页列表icon图片化。 + +### Batch 7(已完成) +Service企业专属icon缩至28px、settings未登录头像icon缩至40px、首页轮播图文字与图片分离并适配昼夜主题。 + --- -## 二、本轮(Batch 4)修改任务 — 全部完成 ✅ +## 二、本轮(Batch 6)修改任务 — 全部完成 ✅ | 序号 | 任务 | 状态 | |------|------|------| -| 1 | **主题黑白切换彻底修复**:移除 `eventCenter` 多余监听 + trigger,纯 `Context` 驱动 → 所有页面自动响应 | ✅ 完成 | -| 2 | **Profile 登录后菜单点击无反应修复**:增加 `fail` 回调并 Toast 提示,便于定位;同时主题崩溃是交互失效的根因之一 | ✅ 完成 | -| 3 | **本地用户数据库(密码保护)**:新建 `userDatabase` 管理页,支持查看/切换/新建/删除账号,验证密码 `zhihui2024` | ✅ 完成 | +| 1 | **设计清单/订单页未登录提示居中修复**:将 `ThemeToggle` + `page-header` 移入 `LoginGuard` 内部,未登录时只显示居中提示 | ✅ 完成 | +| 2 | **icon 尺寸统一缩小**:所有 icon 图片缩至与临近文字同高(约 28px–56px 区间),Profile 菜单 36px、tabBar 28px、品类 56px | ✅ 完成 | +| 3 | **底部 tabBar 图标图片化**:4个导航 emoji → `/icon/xxx.png`,激活态放大 + 不透明 | ✅ 完成 | +| 4 | **删除首页标题栏旁的 首页.png**:标题栏只保留纯文字"智绘微刻" | ✅ 完成 | +| 5 | **设计清单/订单列表 icon 图片化**:`design-icon` / `order-icon` emoji 文字 → ``,空状态也替换 | ✅ 完成 | --- ## 三、文件变更清单 -### 本轮新建文件(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 0000000..abc5233 Binary files /dev/null and b/src/icon/三角尺.png differ diff --git a/src/icon/个人.png b/src/icon/个人.png new file mode 100644 index 0000000..d3dd978 Binary files /dev/null and b/src/icon/个人.png differ diff --git a/src/icon/书本.png b/src/icon/书本.png new file mode 100644 index 0000000..4773835 Binary files /dev/null and b/src/icon/书本.png differ diff --git a/src/icon/书本_大.png b/src/icon/书本_大.png new file mode 100644 index 0000000..311cbdb Binary files /dev/null and b/src/icon/书本_大.png differ diff --git a/src/icon/书灯.png b/src/icon/书灯.png new file mode 100644 index 0000000..7039a5f Binary files /dev/null and b/src/icon/书灯.png differ diff --git a/src/icon/企业批量定制.png b/src/icon/企业批量定制.png new file mode 100644 index 0000000..1bbe14a Binary files /dev/null and b/src/icon/企业批量定制.png differ diff --git a/src/icon/使用帮助.png b/src/icon/使用帮助.png new file mode 100644 index 0000000..61a5745 Binary files /dev/null and b/src/icon/使用帮助.png differ diff --git a/src/icon/关于我们.png b/src/icon/关于我们.png new file mode 100644 index 0000000..bc82072 Binary files /dev/null and b/src/icon/关于我们.png differ diff --git a/src/icon/包裹.png b/src/icon/包裹.png new file mode 100644 index 0000000..2e138aa Binary files /dev/null and b/src/icon/包裹.png differ diff --git a/src/icon/地址.png b/src/icon/地址.png new file mode 100644 index 0000000..cc68944 Binary files /dev/null and b/src/icon/地址.png differ diff --git a/src/icon/定制协议.png b/src/icon/定制协议.png new file mode 100644 index 0000000..61a5745 Binary files /dev/null and b/src/icon/定制协议.png differ diff --git a/src/icon/杯子.png b/src/icon/杯子.png new file mode 100644 index 0000000..4264b10 Binary files /dev/null and b/src/icon/杯子.png differ diff --git a/src/icon/电话.png b/src/icon/电话.png new file mode 100644 index 0000000..4bdbb79 Binary files /dev/null and b/src/icon/电话.png differ diff --git a/src/icon/笔盒.png b/src/icon/笔盒.png new file mode 100644 index 0000000..4412cec Binary files /dev/null and b/src/icon/笔盒.png differ diff --git a/src/icon/设置.png b/src/icon/设置.png new file mode 100644 index 0000000..b596305 Binary files /dev/null and b/src/icon/设置.png differ diff --git a/src/icon/词云生成.png b/src/icon/词云生成.png new file mode 100644 index 0000000..339c87b Binary files /dev/null and b/src/icon/词云生成.png differ diff --git a/src/icon/调色盘.png b/src/icon/调色盘.png new file mode 100644 index 0000000..f899ce8 Binary files /dev/null and b/src/icon/调色盘.png differ diff --git a/src/icon/账号管理.png b/src/icon/账号管理.png new file mode 100644 index 0000000..3d24030 Binary files /dev/null and b/src/icon/账号管理.png differ diff --git a/src/icon/首页.png b/src/icon/首页.png new file mode 100644 index 0000000..fea744f Binary files /dev/null and b/src/icon/首页.png differ diff --git a/src/pages/address/index.scss b/src/pages/address/index.scss index 2ada21b..66a9366 100644 --- a/src/pages/address/index.scss +++ b/src/pages/address/index.scss @@ -149,33 +149,29 @@ text-align: center; } -/* 空状态统一的在 app.scss */ -.login-guard { +/* 空状态(主题适配) */ +.empty-state { display: flex; flex-direction: column; align-items: center; - justify-content: center; padding: 120px 40px; + text-align: center; } -.login-guard-icon { - font-size: 80px; +.empty-icon-img { + width: 48px; + height: 48px; margin-bottom: 24px; } -.login-guard-title { - font-size: 36px; +.empty-text { + font-size: 32px; font-weight: 700; color: var(--text-primary); margin-bottom: 12px; } -.login-guard-desc { - font-size: 28px; +.empty-sub { + font-size: 26px; color: var(--text-secondary); - margin-bottom: 32px; -} - -.login-guard-btn { - padding: 20px 48px; } diff --git a/src/pages/address/index.tsx b/src/pages/address/index.tsx index 2f2f4d7..6a9245c 100644 --- a/src/pages/address/index.tsx +++ b/src/pages/address/index.tsx @@ -1,4 +1,4 @@ -import { View, Text, Input, Picker } from '@tarojs/components' +import { View, Text, Image, Input, Picker } from '@tarojs/components' import Taro from '@tarojs/taro' import { useState, useEffect } from 'react' import './index.scss' @@ -96,7 +96,7 @@ export default function AddressPage() { - 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